Introducción
Puede sonar extraño, pero no lo hemos conseguido uno de los desafíos para el recuento de 1
a n
, ambos inclusive.
Esto no es lo mismo. Ese es un desafío (cerrado) no bien explicado.
Esto no es lo mismo. Esa se trata de contar indefinidamente.
Reto
Escribir un programa o función que imprime cada número entero de 1
que n
ambos inclusive.
Reglas
- Puedes conseguir de
n
cualquier manera. - Puede suponer que
n
siempre será un número entero positivo. - Puede ingresar
n
en cualquier base, pero siempre debe mostrar en decimal. - La salida debe estar separada por cualquier carácter (o patrón) que no esté en
0123456789
. Se permiten caracteres iniciales o finales no decimales (por ejemplo, cuando se utilizan matrices como[1, 2, 3, 4, 5, 6]
). - Las lagunas estándar son denegadas.
- Queremos encontrar el enfoque más corto en cada idioma, no el idioma más corto, por lo que no aceptaré ninguna respuesta.
- Debe actualizar sus respuestas después de esta edición, las respuestas publicadas antes de la última edición deben cumplir con la regla de cambio sobre las lagunas estándar (no quería negarlas, pero no quería hacer rugir a la comunidad, así que Los negué).
- Puede usar cualquier versión de idioma posterior a la fecha (o idioma). No puede usar ningún idioma o versión de idioma hecha solo para este desafío.
Bonos
20%
- Su programa debe poder contar al menos hasta
18446744073709551615
(2^64-1
). Por ejemplo, si un nuevo tipo de datos es la única forma de admitir enteros grandes, debe construirlo. Si su idioma no tiene ninguna forma de admitir enteros enormes de hasta 2 ^ 64-1, en su lugar debe admitirse el límite superior de ese idioma en particular.
EDITAR : he cambiado el límite de 2^64
a 2^64-1
para permitir más respuestas.
EDITAR : convertí la regla 2 ^ 64-1 en un extra, ya que no ha habido mucho interés en este desafío. Si su respuesta admite 2 ^ 64-1, ahora puede editarla para incluir la bonificación. Además, puede publicar una respuesta que no sea compatible, si es más corta.
n
cualquier manera". ¿Eso significa que podemos asumir que estamosn
guardados en una variable?n
cualquier manera. Puede guardarlo en una variable, pero no debe estar codificado.Respuestas:
MarioLANG , 29 bytes
Pruébalo en línea!
Sé que mi código es tristemente súper triste o enojado:
Happy MarioLANG, 46 bytes
Pruébalo en línea!
Un enfoque más feliz:
MarioLANG no emocional, 41 bytes
Pruébalo en línea!
fuente
:!
,;)=#
, o>(
, o(-[
etc. Además, no tengo idea de por qué, pero aparentemente hay una página de Wikipedia de Lista de emoticones , que no contiene:!
ni cualquiera de los que mencioné.Pyth, 1 byte
El cuerpo debe tener al menos 30 caracteres; entraste en 14.
fuente
Cjam, 5 bytes
Pruébalo en línea!
Este es un bloque sin nombre que espera
n
en la pila y deja una lista con el rango[1...n]
.Funciona simplemente construyendo el rango con
,
y luego incrementando cada elemento de rango:)
para hacer que el rango se base en uno.fuente
:)
Mathematica, 5 bytes
Suficientemente simple.
fuente
Hexagonía, 19
O en el formato de hexágono expandido:
Muchas gracias a Martin para básicamente viene con este programa, sólo se jugó golf para caber en un hexágono longitud del lado 3.
Pruébalo en línea!
No tengo los fantásticos programas relacionados con la Hexagonía de Timwi, por lo que esta explicación no será muy colorida. En cambio, puedes leer una gran cantidad de texto. ¿No es lindo?
En cualquier caso, la IP comienza en la esquina superior izquierda, en el
$
, moviéndose hacia el este si imagina que este programa se colocó con el norte hacia arriba en un mapa. Esto$
nos hace omitir la siguiente instrucción, que sería@
, que finalizaría el programa. En su lugar, ejecutamos lo?
que establece que el borde de la memoria actual sea el número de entrada. Ahora llegamos al final de la fila, que nos lleva a la fila central del hexágono, aún moviéndonos hacia el este.La mayor parte del resto del programa es un bucle. Comenzamos con lo
.
que es un no-op. Luego nos encontramos con una bifurcación en el ... uh ... hexágono ... la<
instrucción hace que la IP gire 60 grados a la derecha si el borde de memoria actual es positivo, de lo contrario giramos 60 grados a la izquierda. Como nos estamos moviendo hacia el este, terminamos con nuestro rumbo sur o noreste. Como la entrada es mayor que cero (y, por lo tanto, positiva), siempre comenzamos yendo hacia el sudeste.Luego golpeamos un
>
que nos redirige hacia el este; estos operadores solo se bifurcan si golpeas la parte de la bifurcación. Luego golpeamos en la parte inferior derecha. Esto imprime el mod 256 de borde de memoria actual como ASCII. Esto pasa a ser una nueva línea. Golpeamos, lo que nos lleva de vuelta al primer borde que tiene el valor que leemos.'
qué cambia qué borde de memoria estamos viendo. Luego tocamos)
que incrementa el valor del borde de memoria actual. Como todos los bordes de la memoria comienzan en 0, la primera vez que hacemos esto obtenemos un valor de 1. Luego saltamos a la segunda línea superior y ejecutamos, lo!
que imprime nuestro número. Luego nos movemos a otra arista con{
y almacenamos el valor ASCII de M multiplicado por 10 más 8 (778). Luego saltamos de regreso a la penúltima línea del hexágono y golpeamos el/
. Esto nos lleva a mudarnos al noroeste. Pasamos.
por la fila del medio y salimos por la;
'
/
a movernos hacia el Este nuevamente. Luego tocamos(
que disminuye el valor.=
hace que volvamos a mirar en la dirección correcta para el salto de borde de memoria futuro.Ahora, dado que el valor es positivo (a menos que sea cero) volvemos a la parte inferior del hexágono. Aquí golpeamos,
.
luego saltamos sobre el,;
así que no pasa nada, y volvemos al inicio del ciclo. Cuando el valor es cero, volvemos al comienzo del programa, donde vuelve a ocurrir lo mismo pero?
no encuentra otro número, y tomamos la otra ruta de ramificación. Ese camino es relativamente simple: tocamos lo{
que cambia el borde de la memoria, pero ya no nos importa, luego tocamos lo@
que finaliza el programa.fuente
MATL, 1 byte
Salida de ejemplo:
Pruébalo en línea aquí
fuente
GNU Coreutils, 6 bytes
respuesta dividida a bash puro, ver más abajo ...
fuente
R, 13 bytes
El cuerpo debe tener al menos 30 caracteres.
fuente
Javascript
182177160154139138132 bytes (válido)1 byte guardado gracias a @ShaunH
¡Precisión arbitraria al rescate!
Debido a que javascript solo puede contar hasta 2 ^ 53-1 (gracias a @ MartinBüttner por señalarlo), necesitaba crear una precisión arbitraria para hacer esto. Almacena datos en una matriz, y cada "marca" agrega 1 al último elemento, luego pasa por la matriz, y si algo excede 9, establece ese elemento en 0 y agrega 1 al que está en la mano izquierda.
Pruébalo aquí! Nota: presione F12, para ver realmente el resultado, ya que no quería hacerle esperar a los cuadros de texto.
BTW .: Yo era el único, que no sabía, los operadores ternarios son tan útiles en codegolf.
es más largo que
por 1 byte.
Javascript, 28 bytes (inválido - no puede contar hasta 2 64 )
fuente
&&
puede ser útil también, solo hay que tener cuidado con la cohesión.condition&&action()
e?c.unshift(1):0
parae&&c.unshift(1)
guardar un byteJava 8, 43/69/94 bytes
Tachado 44 sigue siendo un 44 normal - espera, no lo taché, solo lo reemplacé :(Si puedo devolver un
LongStream
: (43 bytes
)Esta es una lambda para a
Function<Long,LongStream>
. Técnicamente, debería usar enrangeClosed
lugar derange
, ya que estoy cortando uno de mi entrada máxima de esta manera, perorangeClosed
es más largo querange
.Si tengo que imprimir en la función: (
69 bytes
)Esta es una lambda para a
Consumer<Long>
. Técnicamente estoy abusandopeek
, ya que es una operación intermedia , lo que significa que esta lambda está volviendo técnicamenteLongStream
como el primer ejemplo; Debería estar usando en suforEach
lugar. Nuevamente, el golf no es un buen código.Por desgracia, ya que
long
's gama es una firmado entero de 64 bits, que no llega a la solicitada2^64-1
, sino que simplemente2^63-1
.Sin embargo , Java SE 8 proporciona funcionalidad para tratar
long
los mensajes de correo electrónico como si no estuvieran firmados, al llamarLong
explícitamente a métodos específicos de la clase. Desafortunadamente, como Java sigue siendo Java, esto es bastante largo, aunque más corto que la versión BigInteger que reemplaza. (94 bytes
)Este es un
Consumer<Long>
, como el anterior.Y demasiado tiempo para evitar el desplazamiento.
fuente
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
es que usar unint
(o inclusolong
) para el iterador no es lo suficientemente grande.long
sin firmar, por lo que utilizarlos es más corto que elBigInteger
enfoque. (No habría sido si hubiéramos tenido que implementar nuestro propio tratamiento largo sin firmar como lo había hecho antes de J8.)05AB1E , 1 byte
Código:
Pruébalo en línea! .
Un enfoque más interesante:
Explicación:
Pruébalo en línea! .
fuente
MATLAB, 7 bytes
Una función anónima sin nombre:
Correr como:
¡Pruébalo aquí!
Si se requiere un programa completo, 17 bytes:
¡Pruébalo aquí!
fuente
Haskell, 10 bytes
Ejemplo de uso:
f 4
->[1,2,3,4]
.fuente
n
, debe tomarn
.n
no está codificado aquí, es un argumento de función. La sintaxis de Haskell puede ser extraña para las personas acostumbradas a la sintaxis tipo C.MarioLANG , 19 bytes
Pruébalo en línea!
Los programas verticales suelen ser más golfables para bucles simples en MarioLANG. No estoy seguro de lo que hace el intérprete cuando se encuentra
[
dentro de un elevador, pero parece terminar el programa cuando la celda actual es 0. Ese es probablemente un truco útil en general.Explicación
MarioLANG es un lenguaje similar a Brainfuck (con una cinta de memoria infinita de enteros de precisión arbitraria) donde el puntero de instrucción se parece a Mario caminando y saltando.
Mario comienza en la esquina superior izquierda y cae hacia abajo.
;
lee un número entero de STDIN y lo coloca en la celda de memoria actual. Ahora tenga en cuenta que=
es una celda de tierra para que Mario camine,"
y#
forme un elevador (#
siendo el comienzo) y!
hace que Mario se detenga en el elevador para que no se vaya de inmediato. El>
y<
establece su dirección de movimiento. Podemos ver que esto da un bucle simple, que contiene el siguiente código:Ahora normalmente
[
, condicionalmente, Mario saltaría el siguiente dependiendo de si la celda actual es cero o no. Es decir, mientras el contador no sea cero, esto no hace nada. Sin embargo, parece que cuando Mario se encuentra un[
momento en un elevador y la celda actual es0
, el programa simplemente termina inmediatamente con un error, lo que significa que ni siquiera necesitamos encontrar una manera de redirigirlo correctamente.fuente
[
, lo que en realidad es aún más conveniente.Joe - 2 o 6
Si bien puede utilizar la variante inclusiva de la función de rango ...
..¡eso es aburrido! En su lugar, tomemos la suma acumulativa (
\/+
) de una tabla de unidades de forma n (1~T
).fuente
Pyth -
32 bytes1 bytes guardados gracias a @DenkerAffe.
Sin usar el incorporado.
Pruébalo en línea .
fuente
hM
si quieres ponerte realmente elegante :)-.-
Pyke, 1 byte
Pruébalo aquí!
O 2 bytes sin el incorporado
Pruébalo aquí!
Pruébalo aquí!
Pruébalo aquí!
fuente
dc, 15
Entrada leída desde stdin. Esto cuenta desde
n
, empujando una copia de cada número a la pila. La pila se genera como una con elf
comando, por lo que los números se imprimen en el orden ascendente correcto.Debido a que todos los números se envían a la pila, es muy probable que se quede sin memoria antes de acercarse a 2 ^ 64. Si esto es un problema, entonces podemos hacer esto en su lugar:
dc, 18
fuente
dc
, comobc
, usa matemática de precisión arbitraria por defecto, y por lo tanto, estos límites son irrelevantes para este lenguaje.ArnoldC, 415 bytes
Lo único interesante es usar nx (donde n es el objetivo yx la variable incrementada) para probar el final del ciclo while en lugar de tener una variable dedicada, así que termino teniendo nx y n- (nx) = x en cada ciclo
Nota : Solo puedo contar hasta 2 ^ 31-1. Bueno, supongo que los Terminators no son un verdadero peligro después de todo.
fuente
Piet, 64 codeles
Con codelsize 20:
Npiet traza imágenes
Primer bucle:
Rastro restante para
n=2
:Notas
¿Aún no responde Piet? ¡Déjame arreglar eso con mi primer programa Piet! Sin embargo, esto podría ser más corto con mejores rollos y menos manipulación del puntero ...
El límite superior admitido depende de la implementación del intérprete. Teóricamente sería posible admitir números arbitrariamente grandes con el intérprete correcto.
El delímetro es
ETX
(Ascii3
), sin embargo, esto no se puede mostrar correctamente en esta respuesta, así que los dejaré fuera. Funciona en la consola:Salida
Npiet traza para
n=2
fuente
ETX
carácter (Ascii3
) dividiendo las salidas, aunque el carácter ETX no se puede mostrar en este sitio.JavaScript (ES6),
7776635958 BytesToma la entrada
n
como una cadena, debe admitir hasta 9007199254740991999999999Explicado:
fuente
2^64-1
está bien, he cambiado las especificaciones.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
a[a]+b
GNU bc, 23
Entrada leída desde stdin.
bc
maneja números de precisión arbitrarios por defecto, por lo que 2 ^ 64 max no es un problema.fuente
En realidad, 1 byte
Aburrido aburrido es aburrido. Requiere una versión de 64 bits de Python 3 para llegar hasta el final
2**64
.Pruébalo en línea! (debido a las restricciones de memoria y longitud de salida, el intérprete en línea no puede ir muy alto).
Aquí hay una versión de 5 bytes que no requiere Python 3 de 64 bits y es un poco mejor en el uso de memoria:
Pruébalo en línea! (ver advertencias anteriores)
fuente
Fuzzy-Octo-Guacamole, 7 bytes
Explicación:
fuente
X
funciona en lugar deo;
, para 7 bytes.n
:
imprime la pila completa.X
es nuevo.^!$[_;]
.$
es el rangoOración, 31 bytes (no competitivos)
fuente
literally,
delante de cada declaración? (Pregunta 2: ¿Fechas anteriores o posteriores si es suya? Ambas son aceptables a menos que haya hecho esto para este desafío, en cuyo caso es una laguna)QBASIC, 43 bytes
fuente
INPUT e;a
oINPUT a
es suficiente? No te veo reutilizandoe
.1 TO
?:
entre declaraciones en lugar de una devolución y un número de línea? QB4.5 me permite hacer esto:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix , 17 bytes
Pruébalo aquí
Cubix es un lenguaje 2D creado por @ETHProductions donde los comandos se envuelven en un cubo. Este programa se ajusta a un cubo con una longitud de borde de 2 de la siguiente manera.
I
obtiene la entrada entera0
empuje 0 a la pila-
restar los elementos principales de la pila!
si la verdad salta el siguiente comando@
termina;
pop el resultado de la resta de la pila)
incrementar la parte superior de la pilaw
mover ip a la derecha y continuar. Esto hace que caiga a la siguiente líneaO
generar la parte superior de la pila como un númeroN
empujar salto de línea (10) a la pilao
dar salida a un salto de líneaw
mover ip a la derecha y continuar. Esto hace que caiga a la siguiente cara!
porque TOS de verdad, salta el@
final;
Pop el salto de línea de la pilaU
girar a la izquierda en la-
resta y reanudar desde allífuente
Python 2,
37333233 bytesPresumiblemente funciona hasta
2**64
y más allá.Derribó cuatro bytes gracias a @dieter , y otro gracias a @orlp . Pero aparentemente, como descubrió @ Sp3000,
range()
podría tener problemas con valores más altos, por lo que la función se cambió axrange()
. Nota: inclusoxrange()
podría tener problemas, al menos en 2.7.10 .fuente
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
y más allá". - dudarlo en Python 2, pero podría hacerlo conxrange
(editar: inclusoxrange
podría tener problemas, al menos en 2.7.10)-~
funciona Editar : lo descubrí. Además, buen truco!Zsh, 12 bytes
Esto funciona porque las variables se expanden antes de las llaves.
fuente
2^64-1
está bien ahora.2^63 - 1
V, 11 bytes
Como esto contiene UTF-8 desagradable e imprimibles, aquí hay un hexdump reversible:
V es un lenguaje inacabado que escribí, pero funciona desde commit 19 . Esta respuesta fue un poco más detallada de lo que me gustaría, pero eso se debe principalmente a que V no tiene conocimiento de enteros, solo cadenas. ¡Entonces es una respuesta decente! Esto va a trabajar hasta 2 ^ 64, pero es probable que tome una muy largo tiempo.
Para hacer que mi explicación sea más fácil de leer / escribir, trabajaré con esta "forma legible por humanos", que en realidad es cómo escribiría esto en vim.
Explicación:
Si se permiten lagunas, aquí hay una versión más corta que imprime 1 an, pero también imprime un 0 (8 bytes):
Y en forma legible:
Esto es más corto porque
<A-q>
al final está implícito, por lo que no lo necesitamos si no tenemos que eliminar la última línea.fuente