La tarea es mostrar n caracteres de la tabla ASCII .
Puede escribir una función (o un programa que tome el argumento como parámetro, también se permite STDIN) que tome un parámetro n , que será el índice del último carácter a imprimir.
La tarea es bastante simple, así que a modo de ejemplo, aquí hay una posible implementación en Python 2.7:
(lambda n:map(chr, range(n)))(256)
Como dije, es una tarea simple. ¡Así que este es el código de golf y gana el código más corto!
EDITAR
Como algunos de ustedes señalaron, este código no imprime el resultado. Es solo un ejemplo, ya que podría tener dificultades para explicar el problema en inglés ;-).
EDIT2
Siéntase libre de publicar la respuesta en cualquier lenguaje de programación, incluso si no es el código más corto. ¡Tal vez hay algunas implementaciones interesantes por ahí!
EDITAR3
Se corrigió el ejemplo para que imprima el resultado.
for x in range(input()):print chr(x)
Realmente imprimiría los caracteres, si desea editar su ejemplo.[i for i in range(n)]
es bastante similar arange(n)
Respuestas:
CJam, 4 bytes
Programa completo que lee desde STDIN (campo de entrada en el intérprete en línea ).
Esto simplemente se ejecuta
range(chr(int(input())))
, aprovechando el hecho de que,
devuelve una matriz de caracteres si su argumento es un carácter.Llamo a dibs en
c,
(2 bytes), en caso de que se suponga que la entrada ya está en la pila está permitida.fuente
n
, ya que las primeras docenas de caracteres ASCII son caracteres no imprimibles. Dato curioso: este programa también genera la tabla Unicode, por ejemplo n = 9999brainfuck
169146142 bytesLimitaciones:
No es la respuesta más corta aquí, pero oye, ¡maldición! Este sería un desafío muy, muy bueno, excepto el hecho de que requiere una entrada legible por el ser humano sin garantizar el número de dígitos. Podría haber requerido una entrada para tener ceros a la izquierda para tener 3 caracteres de largo, pero ¿qué tan divertido es eso? : D Un problema importante con la toma de entrada de esta manera es que la única estructura de ramificación o bucle de brainfuck verifica si la celda actual es cero o no. Cuando la entrada puede contener ceros, puede hacer que su código tome ramas que no debería tomar. Para resolver este problema, almaceno cada dígito de entrada más 1 , luego resto el exceso en el último segundo posible. De esa manera, siempre sé dónde están mis ceros.
Dije que esto habría sido un gran desafío mental sin tener que analizar la entrada. ¿Porqué es eso? Bueno, supongamos que no tomamos una entrada numérica. Diremos que el desafío es "Dado un byte de entrada, genera todos los caracteres ASCII debajo de ese byte". Aquí está mi respuesta sería:
brainfuck - 8 bytes
¡Es una gran diferencia! El programa real usa 135 instrucciones para recopilar la entrada (¡más del 95% del programa!), Solo porque es un humano escribiéndolo. Almacenar el número como un byte y dar que a mí, y sólo se necesita una.
(Dato curioso: si entendiste el programa hipotético, ¡entonces felicidades! Entiendes brainfuck en su totalidad. Todo el lenguaje tiene solo ocho comandos, y ese programa usa cada uno exactamente una vez).
Explicación
fuente
>[-]<[->.+<]
establezca la celda junto a la celda actual en 0, luego haga una cuenta regresiva de la celda actual mientras aumenta la celda al lado e imprime simultáneamente el valor.>[-]<
parte porque ya estaba al lado de una celda vacía. :)Pyth , 4 bytes
Básicamente, una traducción del programa Python 3:
fuente
Befunge 93 -
2321Befunge 93 -
1513 (por Ingo Bürk)Este imprime la lista al revés, pero OP solo dijo que necesitamos imprimir los primeros
n
caracteres, no es que tenga que estar en orden.No podría seguir siendo golfable sin pasar a Befunge98 (para el operador ";", vea la respuesta de @ Kasran )
Pruébalo aquí:
Mostrar fragmento de código
fuente
&> #- #1:# :#,_@
(solo lo imprime al revés)Java,
151128776256 bytesPrimero intente en el golf de código.
Uso:
Gracias a @Shujal, @flawr, @Ingo Bürk y @Loovjo por la seria reducción de bytes.
fuente
int i,n=new Scanner(...
y cambiando el ciclo afor(;++i<n;)
. Además, no necesita invocarCharacter.toString
. Simplemente puede alimentar System.out con un valor de char y felizmente lo generará.a
como entrada. Y creo que puede acortar elfor
bucle abusando del lugar de incremento como cuerpo del bucle:for(;++i<n;System.out.print((char)i));
(pero puede que tenga que cambiar la inicialización o el valor final en + - 1)++i<n+1
debería ser equivalente a++i<=n
. Tenga=
en cuenta el allí, sin embargo! Solo ahorra un byte. Esto funciona para mi.void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}
62 bytes. Al menos no veo más al golf ahora. :)APL, 5
Ejemplo de uso:
fuente
JavaScript, ES6 -
525856534442 bytesPega esto en la consola de Firefox. Corre como
f(NUM)
.Tuve que hacerlo más largo porque el primero no aceptó correctamente la entrada.Abajo 3, gracias edc65! ¡Hasta 44 gracias a Swivel!
fuente
f=n=>String.fromCharCode(...Array(n).keys())
Haskell,
1723 bytesNo estoy seguro de si es posible hacerlo mejor sin importaciones.
Editar
Mi primera solución en realidad no imprimió el resultado, así que permita 6 caracteres más para eso:
Además, no más corto (25 caracteres con impresión, 19 sin), pero un enfoque alternativo interesante (aunque requiere 'Data.List'):
fuente
(`take`['\0'..])
Guarda un byte.Bash + BSD utilidades comunes, 9 bytes
GNU dc, 20 bytes
fuente
DO,
31302827Dado que putch no es estándar, aquí está la versión totalmente compatible:
Debe llamarse desde main:
EDITAR: Mejorado aprovechando el valor de retorno de putchar
EDITAR 2: Reducido por otro personaje a través de la recursividad
fuente
Perl, 17 bytes
fuente
print chr for 0..$ARGV[0]
shift
lugar de$ARGV[0]
guardar 2 bytes.say
. Además, el recuento de caracteres es más corto si lo haces de una sola vez-n
.echo "90" | perl -nE'say chr for 0..$_'
contaría como18
personajes.17
porsay chr for 0..$_
más1
para eln
.say
no funcionará con todas las versiones de perl.CJam, 3
Supuse que el argumento era el elemento de la pila superior.
Ejemplo de uso:
fuente
Ruby, 30 caracteres.
fuente
awk - 27
Para dar el parámetro en stdin, ejecútelo como:
Solo por diversión: la "versión positiva" que comienza con un definitivo
yes
:NR-1
que se necesita para imprimir(char)0
paraNR==1
. :-(¿Y por qué no tenemos un
no
comando? Eso es un poco malo!fuente
alias no='yes no'
J - 5 bytes
{.
es Head,a.
es Alphabet (una lista de todos los caracteres) y los&
une, generando un verbo monádico llamado like:Nota : Parece que esto no funciona de manera interactiva: Jconsole y jQt parecen configurar una traducción, generando caracteres de cuadro en lugar de algunos caracteres de control. Sin embargo, en un script o desde la línea de comandos, funciona:
fuente
{.&a. 127
, no es?char
o equivalentes.gs2, 2 bytes
¡Esto debería estar compitiendo, creo! Hubiera funcionado incluso en los primeros días de gs2. Pruébalo aquí.
fuente
Brainfuck, 44 bytes
Espera una cadena decimal sin una nueva línea final.
Pruébalo en línea.
Leer números enteros en el rango
[0, max_cell_size]
de brainfuck no es difícil. Te animo a inventar un método limpio por tu cuenta. Considero que este es un ejercicio para principiantes. (La operación inversa de imprimir el valor numérico de una celda es más complicada y podría considerarse una tarea de nivel intermedio).Aquí hay una versión de 58 bytes que puede manejar
256
implementaciones de 8 bits:fuente
Golfscript - 5
Thanks to @Dennis
fuente
~,""+
is shorter and correctly processes input from STDIN.;"65"
, since the input from STDIN will always be a string.Lua -
4341 Bytesfuente
a=""for i=1,arg[1]do print(a.char(i))end
for i=1,arg[1]do print(("").char(i))end
Befunge 98, 22
Kind of sad that this is so long.
fuente
Python 3.4 - 36 bytes / 43 bytes
255 input()
How this works is:
The second one just removes the space separating each character in exchange for 7 bytes.
fuente
map
returns a list, so you could just dof=lambda i:map(chr,range(i))
Pascal 87
Pascal 73
Builds and runs fine from http://www.onlinecompiler.net/pascal
fuente
var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end.
pastebin.com/aFLVTuvhx86 ASM (Linux) (many many bytes unless you compile it)
Written as a function, assumes parameter is passed in AX (I forget the number for the read syscall) Also doesn't preserve [SP] or BX.
fuente
Perl - 29
fuente
Ruby, 23
Explanation
*
) invokes#to_ary
on the Range to print every character on its own line.fuente
Julia: 20 characters (REPL)
This is close to the question's example: just generates the characters and let the REPL to do whatever it wants with them.
Julia: 33 characters
Prints each character in a separate line.
fuente
M (MUMPS) - 21
R n F i=1:1:n W $C(i)
In expanded form:
READ n FOR i=1:1:n WRITE $CHAR(i)
fuente
T-SQL:
6863As a print loop
T-SQL:
9586As a query
Edit: Made changes and fixes pointed out by Muqo. Thanks. Fixes and golfing suggested by @t-clausen.dk
fuente
GOTO
with label. For the query, maybe specifymsdb.sys.objects
to guarantee enough objects. Also, it doesn't output CHAR(0). However, as consolation you canORDER BY @
.BrainFuck -
140112 BytesTry It Here!
Saved 28 bytes by changing
[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]
to[<<<->->->-]
.What it does
fuente
Keg, 4 bytes (SBCS)
TIO
Push input, output ASCII table.
fuente