Tarea principal
Su tarea es imprimir enteros en orden descendente, comenzando desde 1, y aumentando a medida que sigue presionando 1 nuevamente, hasta que se alcanza la entrada dada, luego, imprima el resto hasta que vuelva a presionar 1. Ejemplo con entrada 6
:
1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
Nota al margen : este es A004736 en el OEIS. Además, el primer ejemplo (con líneas nuevas) es una salida no válida, como se especifica en las reglas.
Entrada
Su código puede tomar cualquier tipo de entrada (gráfica, STDIN) en forma de número entero o número.
Salida
Su código debe generar la secuencia descrita anteriormente, hasta que se alcance el número de entrada, luego termine de emitir hasta que llegue a 1 nuevamente. La salida puede ser cualquier cosa, por lo tanto, números, cadenas, enteros o salida gráfica. Se requiere imprimir un solo número (no hay nuevas líneas si es una cadena). Su salida puede introducirse y presentarse con tantos caracteres como necesite (por ejemplo []
).
Como hubo algunos malentendidos, aquí hay un patrón de expresiones regulares en el que puede probar sus salidas.
^(\D*(\d)+\D*)$
Reglas
- La salida debe ser un número completo, no dividido por nada, ni siquiera por líneas nuevas.
- El algoritmo no debe comprobar para la primera instancia de N que aparece en cualquier forma (por ejemplo, el
21
en121321
), sino más bien para la primera instancia de N como el número real. - Se permite una nueva línea final.
- El manejo de la entrada negativa es completamente su elección, los números negativos no son casos que deba probar.
Casos de prueba
Input: 6
Output: 121321432154321654321
Input: 1
Output: 1
Input: 26
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321
Input: 0
Output: 0, Empty, or Error
Input: 21
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321
Gracias @Emigna, usé su algoritmo para calcular estos casos de prueba.
Ganador
¡El ganador ha sido elegido! ¡Fue la respuesta de ErikGolfer con 5 bytes impresionantes ! ¡Felicidades!
The output must be a full number ...
¿Te refieres a la secuencia completa, o solo a las diferentes subcadenas (1, 2-1, 3-1 ...)? Su primer ejemplo no parece coincidir con esta afirmación.[1, 21, 321, 4321, 54321, 654321]
¿Que tal este?[1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1]
¿O solo estás hablando de matrices con un solo elemento, como[121321432154321654321]
?mickey321211mouse
. Realmente las\D
partes no tienen razón para estar allíRespuestas:
Jalea , 5 bytes
Pruébalo en línea!
Fórmula no mía.
Sospecho que están pasando muchas cosas aquí ...
[RESPUESTA ACEPTADA] Le habría dado unas 5 repeticiones a Dennis, pero este no es Reputation Exchange. Dennis me mostró el
VV
comportamiento. Para mi sorpresa, esto es más corto que 05AB1E.fuente
05AB1E , 6 bytes
Pruébalo en línea!
Explicación
Ejemplo de entrada 4
fuente
JavaScript (ES6), 37 bytes
Manifestación
Mostrar fragmento de código
Método alternativo para n <10, 34 bytes (no competidor)
En JavaScript, las cadenas son inmutables. Por lo tanto, es imposible alterar el contenido del enésimo carácter de una cadena
s
asignando un nuevo valor as[N]
.Sin embargo, la expresión
++s[N]
es válida y se evalúa como cabría esperar, incluso si la cadena permanece sin cambios. Por ejemplo:Y por extensión:
fuente
V,
29282723191716 bytes8 bytes guardados gracias a @DJMcMayhem
3 bytes guardados gracias a @ nmjcman101
Personajes ocultos:
C-x
es Ctrl + x.Pruébalo en línea! toma entrada a través de argumentos de línea de comandos
Hexdump:
Explicación
Ahora se ve así:
continuado...
GIF (obsoleto)
(para arg
6
)fuente
òy$jpkgJ
À
, no tendrá el 0 en la parte superior para que pueda eliminar la x. Luego, aparentementeò
, a cerrará añ
para que pueda eliminar el segundoñ
(que es el byte que guarda). Enlace porque eso no tenía sentidoC #,
726965 bytesSi la salida puede ser devuelta en lugar de ser escrita en la consola
C #,
716864 bytesGracias a @VisualMelon por guardar muchos bytes
Pruébelo aquí (humildemente, el compilador en línea se rompe en cualquier número superior a 420)
fuente
j=1
en el ciclo for y guardar un punto y coma. También puede declararj
junto coni
, para guardar elint
. Eli++
también se puede mover a laj=i
asignación, el ahorro de un byte. También deberías poder reemplazar eli<=n
coni<n
si lo hacesj=++i
y comienzasi
en0
.for(int i=0,j;i<n;)
;) Tampoco hay necesidad de{}
rodear el bucle for interno.Puro golpe, 34
Dos niveles de expansión de férulas. Con entrada
6
, el primer nivel se expande a{1..1} {2..1} {3..1} {4..1} {5..1} {6..1}
. Esto luego se expande a1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1
, que se junta con una sola cadenaprintf %s
.eval
Se requieren en ambos niveles de expansión: para el primer nivel para que el$1
parámetro se expanda primero, y para el segundo nivel para que se expanda después del primer nivel.Pruébalo en línea
fuente
Perl, 21 bytes
Usos
-E
sin costo adicional.Uso
fuente
Pyth, 7 bytes
Un programa que toma la entrada de un número entero e imprime el resultado.
Pruébalo en línea!
Cómo funciona
fuente
jk_hC.:S
sea más largo, ¡pero buen trabajo!GeoGebra , 67 bytes
Cada línea se ingresa por separado en la barra de entrada. La entrada se toma de un cuadro de entrada.
Aquí hay un gif de la ejecución:
Cómo funciona
Al ingresar
1
implícitamente se asignaa
a1
, y elInputBox
comando asocia un cuadro de entrada cona
. Luego, para cadai
en{1, 2, 3, ..., a}
, la lista{i, i-1, i-2, ..., 1}
se ha creado usando elSequence
mando, y cada unoj
en esa lista se convierte en una cadena utilizandoText
. Finalmente,Join
combina todas las listas ySum
concatena todos los elementos en un objeto de texto, que se muestra.fuente
Python 2, 51 bytes
fuente
Retina ,
2622 bytesEl recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Explicación
Convierta la entrada a unario.
En cada posición, inserte el prefijo hasta ese punto, así como un salto de línea. Esto crea un rango unario de
2
an+1
, un valor por línea.Reemplace cada uno
1
con el número de caracteres después de él en la misma línea. Esto convierte algo así11111
en43210
.Elimine todos los avances de línea y los ceros que los preceden.
fuente
GameMaker Language, 65 bytes
fuente
APL, 10 bytes
P.ej:
Explicación:
⍳
: obtenga los números del 1 al N.⍳¨∘
: para cada uno de ellos, obtenga los números del 1 al N.⌽∘
: invertir esa lista⍕¨∘
: obtiene la representación de caracteres de cada elemento (para que no muestre los números con espacios intermedios)∊
: aplanar la matriz resultantefuente
∘
es la composición de funciones, di la explicación en el orden que las funciones son en realidad evaluadosPython 2,
7168 bytesApuesto a que una solución recursiva podría ser más corta, pero estoy teniendo dificultades para formularla.
Pruébalo en línea
fuente
En realidad 8 bytes
Publicar una respuesta por primera vez en realidad, por lo que probablemente pueda jugar golf
Cómo funciona
Pruébalo en línea!
fuente
R♂R♂RΣεj
tiene el mismo número de bytes, pero puede ser más fácil escribir una explicación.Brachylog , 8 bytes
Pruébalo en línea!
Explicación
fuente
Perl 6 , 22 bytes
Una lambda que devuelve una cadena.
( Pruébelo en línea )
Explicación:
1..$_
: Rango de enteros ...(1 2 3 4)
[,] 1..$_
: Reducir ("doblar") sobre el operador de coma ...(1 2 3 4)
[\,] 1..$_
: Con resultados intermedios ( reducción triangular ) ...((1) (1 2) (1 2 3) (1 2 3 4))
[\R,] 1..$_
: Aplicar el metaoperador de inversión a la coma ...((1) (2 1) (3 2 1) (4 3 2 1))
[~] flat ...
: Eliminar el anidamiento de la lista y doblar sobre el operador de cadena concat1213214321
fuente
Haskell, 35 bytes
Ejemplo de uso:
f 6
->"121321432154321654321"
.Para todos los números
x
en1 ... x
una listax,x-1, ... ,1
, convierta los números en una cadena y concatenelos en una sola cadena. Nuevamente, concatene esas cadenas en una sola cadena.fuente
C89, 54 bytes
56 -2 = 54 gracias a ErikGolfer!
fuente
(j=i++)
lugar de(j=i)
y eliminar el últimoi++
(no probado).i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}
(52 bytes)Python 3,
87928374 bytesRespuesta más corta usando recursividad:
¡Quizás no sea el más corto, pero solo está hecho con la comprensión de la lista de Python!
(Editado para agregar la función de impresión y eliminar el \ n)
(Editado para eliminar la función de impresión y cambiar n + 1, k + 1 a n, k + 2)
fuente
`i`
lugar destr(i)
. Y puede usar en"".join(...)
lugar de"".join([...])
, yrange(1,k,-1)
para eliminar el[...][::-1]
.n>0
puede sern
. Y quise decirrange(n,0,-1)
. Y uson and f(n-1)+...)or""
.Pyth, 8 bytes
Explicación
fuente
05AB1E , 6 bytes
Pruébalo en línea!
fuente
Mathematica, 36 bytes
Lanza un montón de advertencias que pueden ignorarse de forma segura.
Explicación
Usando la entrada
5
como ejemplo:Crea un rango
{1, 2, 3, 4, 5}
.Range
es listable para que podamos darle una lista de cualquiera de sus argumentos y automáticamente pasará ese argumento. Entonces esto nos da un montón de listas invertidas:Próximo:
Esto une la lista anidada con la cadena vacía. Dado que la lista anidada no contiene ninguna cadena, en realidad no puede unir los valores (que es donde se generan las advertencias), pero
""<>
tiene el efecto secundario de aplanar la lista. Entonces esto nos daAhora viene la hermosa característica de Mathematica que
Map
no le importa la estructura sobre la que está mapeando. Normalmente lo aplica a una lista, pero funciona con cualquier cabeza.f /@ h[a, b, c]
simplemente te dah[f[a], f[b], f[c]]
. En nuestro caso, la cabeza esStringJoin
y los valores son los enteros.Entonces esto simplemente convierte los enteros en cadenas. En ese momento
StringJoin[...]
sabe qué hacer con ellos y los une a todos en una sola cadena:fuente
GolfScript , 14 bytes
Pruébalo en línea!
Método habitual, por supuesto, pero este es GolfScript.
Explicación de este extenso código:
Tenga en cuenta que la salida es como un solo número. Arrastrando
\n
.fuente
R,
383344 bytesToma entrada a STDIN y realiza un bucle de 1 a n, creando la secuencia i a 1 para cada paso e imprimiéndola.
Editar: reemplazado
seq(i,1)
pori:1
guardar 5 bytes y mostrar por qué no debería jugar golf durante las reuniones.fuente
101
si la entrada es0
.if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")
Hace el truco.if(n<-scan())
Debería ser suficiente.MATL ,
1411 bytesPruébalo en línea!
Explicación
fuente
not split up by anything
, no creas que el segundo está permitido.brainfuck, 17 bytes
Explicación
Pruébalo en línea!
fuente
Python ,
635759 bytesUna solución recursiva que funciona tanto en Python 2 como en 3. Probablemente se pueda jugar más. Sugerencias de golf bienvenidas! Pruébalo en línea!
Editar: -6 bytes gracias a Jonathan Allan. +2 bytes gracias a mbomb007 por señalar un problema con mi respuesta.
Ungolfing
fuente
map
para guardar 6 bytes:lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
PHP,
353433 bytesSalvé un byte porque conté mal, ¡gracias Titus! ¡Y otro!
Ejecutar desde la línea de comando con
-r
.Respuesta bastante simple, recorre desde 1 hasta nuestra entrada
n
, pegando el número al comienzo de la cadena e imprimiéndolo.fuente
while($i++<$argv[1])echo$s=$i.$s;
CJam, 13 bytes
Interprete
fuente
ri{),:)W%}%