Su tarea es crear un programa o función que genere una cremallera con una longitud de 10 líneas. Cada línea de la cremallera está representada por dos guiones --
:
--
--
--
--
--
--
--
--
--
--
El programa / función tomará un porcentaje (divisible por 10) como entrada, y la salida será la cremallera "descomprimida" (guiones separados) de la parte superior por el porcentaje, revelando el nivel inferior indexado 1 repetido 2 veces, con todos los niveles anteriores se repiten 4, 6, 8, ... etc. veces, manteniendo la parte inferior de la cremallera centrada.
Ejemplos
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
La entrada (porcentaje) puede formatearse como desee (50%, .5, 50, 5 [cero implícito], etc.), y siempre estará en el rango de 0 a 100 y divisible por 10. El espacio en el los ejemplos deben conservarse en su salida.
0%
? ¿Se nos permite tomar la entrada dividida por 10? por ejemplo, en lugar de50%
, obtener5
?5
?Respuestas:
Python 2 -
184151146 bytesEl último número me molestó un poco. Es posible que pueda eliminar la segunda declaración if si la miro más tarde.
EDITAR: Thx a mbomb007 para eliminar 3 bytes. ¡Gracias a charredgrass por los consejos de formato para ayudar a eliminar muchos bytes! :-D ¡Gracias a TheBikingViking por ayudarme con otros dos bytes!
fuente
i>9
lugar dei==10
y elimine el espacio enrange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
en la última línea con~-i
. Esto aprovecha la precedencia del operador y el hecho de que un cambio de bit seguido de una negación es lo mismo que restar1
.range(1,11)
y luego(i-1)
?Python 2, 74 bytes
exec
Ahorró dos bytes al unificar un bucle, gracias a Dennis.EDITAR: adopté un enfoque ligeramente diferente y guardé dos bytes más.
fuente
'-'+`x+1`*(n-x<<1-x/9)+'-'
en elexec
bucle con'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 bytesEdición 1: Golfó 10 bytes eliminando
$x
variables y rehaciendo ligeramente la forma en que se formula la cadena.Edición 2: Golfó otros 4 bytes rehaciendo cómo ocurre la entrada y rehaciendo cómo
$i
se calcula cada ciclo.Edición 3: guardado 6 bytes mediante OP que permite la entrada como
0..10
, por lo que no es necesario dividir por 10.Sorprendentemente difícil!
Toma entrada como
1
,5
, etc., almacenada en$n
. Establece la$i
variable auxiliar (uno de los muy raros momentos en que una variable debe inicializarse0
en PowerShell) y luego inicia un ciclo desde10
a1
.Cada iteración, establecemos comenzar nuestra cadena con un número de espacios igual a
$i
, seguido de un pseudoternario(... , ...)[]
. Dentro del pseudoternario, seleccionamos una cadena de cualquiera-
con un número de dígitos (el mayor de$n-10+$_
o0
, multiplicado por 2), o la cadena-10
: la selección se basa en si estamos en la décima iteración y nuestra entrada fue100
. Concatenamos eso con una final-
. Esa cadena resultante se coloca en la tubería.Finalmente, incrementamos
$i
, y esto fue realmente complicado. Terminamos usando un truco binary-cast-to-int para$i
aumentar solo hasta que alcanza$n
, y luego mantenerlo en el mismo valor. Esto asegura que hemos llegado al "final" de la sangría de la cremallera en el nivel apropiado.Una vez que el ciclo ha terminado, todas las cadenas resultantes se acumulan en la tubería y la salida es implícita.
Ejemplos
fuente
Pyth
3734 bytesBanco de pruebas.
fuente
Pitón,
9584 bytesNo sabía que las lambdas eran legales, gracias @Dr Green Eggs y Iron Man
fuente
join
puede tomar un generador directamente.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 bytes)MATL ,
484135 bytesPruébalo en línea!
fuente
Ruby, 74 bytes
Utiliza el formato implícito cero especificado en la pregunta, por lo que
40%
es asíf[4]
si se asigna la función anónimaf
. Si se necesita un porcentaje completo, +6 bytes paran/=10;
Pruébalo en línea!
fuente
Python 3,
98, 90, 87, 85 bytes.Toma el número ya dividido entre 10. Probablemente pueda eliminar algunos de los padres, pero esto está bastante cerrado para jugar al golf.
fuente
Haskell, 83 bytes
fuente
++"-"
?Javascript es7, 105 bytes
llamar con
fuente
The program/function ...
- not snippet\n
con una nueva línea real, puede guardar un byte.Python 2.7,
11310877 bytesn = input ()para x en el rango (0,10):
v = str (x + 1) * (nx) 2
si x n> 89: v = '10 '
print' '* min (x, n) + '-' + v + '-'
Primera vez jugando al golf. Voy a seguir, intenta obtenerlo <100.
Asume que la entrada es 1-10.
Editar: Usé algunos trucos de la respuesta de @LeakyNun (gracias), luego lo analicé un poco más y obtuve ... básicamente la misma respuesta: / No sabía sobre la conversión de cadena `int`, y 2 - boolean déjame deshacerme de la declaración if, que me permite deshacerme de toda la variable v. Muy genial.
Mi version:
fuente
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 bytes
Ideone it!
fuente
Python 2.7,
110999591 bytes:Un programa completo que recibe información de un número entero en el rango inclusivo
[1,10]
, donde10
significa100%
y1
significa10%
. Probablemente se pueda jugar golf un poco más.¡Pruébelo en línea! (Ideona)
fuente
PHP 5.3,
9291 bytesregister_globals=1
yshort_open_tags=1
(yerror_reporting=0
)llame en cli con
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: anteponer<pre>
?:
con?1:
(+1)$n
con($n=$_GET[n])
(+11)sin golf como una función (cualquier PHP> = 4.0.1)
Banco de pruebas
Ahora esto es nuevo para mí: PHP supera a JavaScript.
Este enfoque se juega al mínimo, creo.
fuente
STR_PAD_BOTH
¿Qué es esto, K&R C? ¿#define
También hacemos cosas en PHP? :-)Julia, 73 bytes
Primero Julia respuesta! Los consejos son apreciados.
Pruébalo en línea!
fuente
Perl, 122 bytes
fuente
Lisp común (Lispworks), 314 bytes
sin dorar:
Uso:
fuente
APL, 46 bytes
El argumento debe darse como el porcentaje dividido por 10 (es decir: un entero simple, en el rango [0,10]).
fuente