Fondo
Estás trabajando para algún fabricante de juegos de mesa y necesitas producir fichas de madera con los números del 0 al n grabados en ellas para algún juego. Sin embargo, sin más preámbulos, algunos azulejos se vuelven indistinguibles, por ejemplo, 6y 9. Para evitar esto, debe equipar números que puedan confundirse con otros (y solo con ellos) con un punto desambiguado, por ejemplo, tendría fichas como 9.o 6089..
Desafortunadamente, necesita usar un dispositivo de grabado en madera antiguo pero programable para esto, cuya interfaz está tan rota que tiene que codificar a mano todos los caracteres del programa en un proceso indescriptiblemente tedioso. Afortunadamente, el dispositivo comprende todos los lenguajes de programación existentes. Por lo tanto, está buscando el programa más corto que imprima dichos mosaicos.
Tarea real
Escribe el programa más corto que:
- Toma un entero positivo n como entrada. Cómo se lee la entrada depende de usted.
- Imprime cada uno de los números del 0 al n (0 yn incluidos) exactamente una vez en el orden que elija, separados por un solo espacio en blanco (incluida la nueva línea). Los números deben imprimirse sin ceros a la izquierda.
- Agrega un punto (.) A cada número que se convierte en otro número válido después de la rotación por π (180 °), incluso si ese número es mayor que n. Su tipo de letra 0 y 8 son simétricos a la rotación y el 9 es un 6. girado. Los 2 y 5 son distintos al girar; el 1 no es simétrico a la rotación. Los números con ceros a la izquierda no son válidos.
Ejemplos
Cada uno de los siguientes números debe imprimirse exactamente de esta manera:
2
4
5
6.
8
9.
16
60
66.
68.
69
906
909.
8088.
9806.
9886
9889.
60
ser60.
?8088.
en sus ejemplos un número inseguro de rotación que no tenga un 6 o un 9.Respuestas:
Pyth - 34
38Debo agradecer a @ Sp3000 por ayudarme a eliminar 4 bytes. Originalmente tenía un cheque adicional
&@JK
que se aseguraba de que hubiera un 6 o 9 en el número, pero después de leer las respuestas antes de publicar, leí su respuesta y noté que mi traducción e inversión idénticas ya se habían ocupado de eso.También gracias a @isaacg por señalar que las cadenas son iterables, y puede usar operaciones de configuración en ellas. También para hacer el código actual;)
Explicación:
fuente
K
yJ
, solo use cadenas en su lugar. El cambioK
a <backtick> 69 yJ
a <backtick> N guarda algunos caracteres, al igual que la alineaciónK
en el programa resultante. Lo más corto que pude obtener con esa técnica fueVhQJ``N+J*\.&nJX_J``69``96&eN!-J"0689
, 34 caracteres. (Dos backticks son realmente uno.)hell`o wo`rld
_
, antes del`96
.CJam,
46444342 bytesCreo que hay margen de mejora.
Pruébalo aquí.
Explicación
fuente
n
en Entrada.CJam,
46 45 4342 bytesCreo que se puede jugar un poco más al golf.
Toma
n
de STDIN.Pruébalo en línea aquí
fuente
APL 66
Explicación:
Pruébalo en tryapl.org
Tenga en cuenta que en el intérprete en línea la función ⍎ no funciona, así que tuve que sustituirla por 2⊃⎕VFI, que hace lo mismo en este caso, ejecuta y devuelve el número, dada una cadena.
fuente
⊃,/
o,/
puedes usar uno∊
en el frente.Perl 5, 53 bytes
Demo en línea.
Utiliza la función Perl 5.10+
say
, por lo que debe ejecutarse conperl -M5.010
(operl -E
) para habilitarla. (Consulte este metaproceso ) . Lee la entrada de stdin, imprime en stdout.fuente
Python 2,
130116113 bytesDefine una función
f
que imprime los números en STDOUT, en orden ascendente.Esta vez pensé en sacar una hoja del libro de @ feersum con
.translate
:)Expandido:
Solución previa:
Gracias a @xnor por mostrarme el
.replace
truco hace algún tiempo.fuente
(u''+S[::-1])
lugar deunicode(S[::-1])
. Además, si intercambia laprint
llamada y la llamada recursiva, los números saldrán en orden creciente.u""+
que realmente funcionaríaC #,
343309caracteresManera demasiado largo, pero de todos modos:
¿Como funciona? Para agregar un punto al número, debe coincidir con los siguientes requisitos:
0
,8
,6
y9
.6
sy9
s, yc
= el número con todo6
s reemplaza con9
s,c
==c
,Los números están separados por un espacio.
Código con sangría:
fuente
M (MUMPS) -
7270La mayoría de los comandos y funciones incorporados en M tienen versiones abreviadas. He usado los nombres completos a continuación.
READ n
- Lea una cadena del teclado y guárdelan
.FOR i=0:1:n
- Bucle de cero an
, incrementándosei
en 1 cada vez. (El resto de la línea constituye el cuerpo del bucle).WRITE !,i
- Imprima una nueva línea seguida del valor dei
.SET r=$TRANSLATE($REVERSE(i),69,96))
- Inviertai
, reemplace nueves con seis y seis con nueves, y guárdelo enr
.WRITE:r=+r*r'=i*'$TRANSLATE(i,0689) "."
:
- Denota una expresión postcondicional, por lo que elWRITE
comando solo se ejecuta si ser=+r*r'=i*'$TRANSLATE(i,0689)
evalúa como un valor verdadero.r=+r
- Compruebe quer
no tiene un cero a la izquierda. El+
operador unario convierte una cadena en un número, que elimina los ceros a la izquierda si los hay.*
- Operador de multiplicación. M no tiene orden de operaciones; Todos los operadores binarios se evalúan en el orden en que aparecen de izquierda a derecha.r'=i
- Compruebe quei
no es lo mismo que su versión invertidar
.'$TRANSLATE(i,0689)
- Elimine todos los ceros, seises, ochos y nuevesi
, y verifique que no quede nada. ('
es el operador de negación lógica)."."
- Finalmente el argumento delWRITE
comando (una cadena literal).Editar: lo hizo un poco más corto al abusar del operador de multiplicación. Versión previa:
fuente
APL, 53 caracteres
∊{⍵,'. '↓⍨∨/(3≡⊃i)(5∊i),⍵≡'9608x'[i←⌽'6908'⍳⍵]}∘⍕¨0,⍳
fuente
C # 205
209C # no tiene que ser tan largo ...
más o menos, un puerto de mi respuesta de JavaScript
Sin golf
fuente
Rubí, 81
La entrada se toma de la línea de comando.
Genera una lista de
String
s desde0
hastan
. Se enrolla a través de ellos y los imprime. Agrega un punto si se cumplen todas las condiciones:6
s con9
s no produce el original0
,6
,8
y9
0
fuente
JavaScript (ES6) 101
104 106 109Una función con n como argumento, salida a través de console.log
Edite usando% 10 para probar la reorganización de la
Edición 0 inicial
for
, no necesito la comprensión de la matriz después de que toda laEdición 3 modificó (nuevamente) la verificación de la inicial 0
Sin golf y más fácil de probar
Salida
fuente
[]
? Estoy buscando una documentación, porque hasta ahora solo sabía esto de Python.Bash + coreutils, 105
Prueba:
fuente
sed, 467
Más largo que C # ...
Casi completé esto cuando @ edc65 señaló que las respuestas necesitan procesar los números 0-ny no solo n. Agregar el código sed para incrementar 0-n agrega MUCHO más código, ya que esta tarea no es adecuada para sed sin aritmética.
Según el OP, el orden no importa, por lo que trabajamos hacia abajo de n a 0.
Salida:
fuente
AWK: 120
Lea el valor n de stdin.
Prueba:
fuente
Rebol - 195
Ungolfed + algunas anotaciones:
fuente
aC, 158
Después de hacer esto puramente en sed usando todas las operaciones de cadena y expresión regular sin aritmética nativa, tenía curiosidad por ver cómo se vería al revés, es decir, todas las operaciones aritméticas y lógicas y sin cadena / expresión regular:
La salida se ordena en orden descendente.
Salida:
fuente
Python - 152
fuente
"."if a[i]else"" -> "."*a[i]
,int(raw_input()) -> input()
(que es en realidadeval(raw_input())
)str(i)
con`i`
. (2) Se usaa
solo una vez, entonces, ¿por qué asignarlo a una variable?str(i)
varias veces. ¿Con cuál puedo reemplazari
?i
, peroi
con backticks, lo cual es sinónimo derepr(i)
. Puede usarlo en lugar de enstr(i)
todas partes, aunque si tienestr(i)
tantas veces, podría ser más corto asignarlo a una variable y usarlo además de usar backticks. (es decirx=`i`; (do stuff with x)
)JavaScript -
168 129 119 113 111108O versión legible:
No estoy muy contento con la expresión regular, ¿alguna idea?
Edición : truco ordenado aprendido con
~
yfor (... of ...)
de @ edc65Edición2 : condiciones reorganizadas
Edición3 : sugerencias aplicadas por @ edc65
fuente
i=n+"";for(c of i)
=>for(c of i=n+"")
guardar 2 bytesc==6?A:B
=>c!=6=>B:A
=>c-6?B:A
for(c of i=n+"")
es bastante lógico cuando lo veo, pero no pensaría en ello.c-6?B:A
Dios no lo quiera, nunca puse esto en el código de producción05AB1E ,
38373029 bytesPruébalo en línea.
Explicación:
Explicación adicional para algunas partes:
fuente
Perl - 84
fuente
Powershell,
111102 bytesScript de prueba explicado:
Salida:
fuente
Stax , 27 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente