5 idiomas 11 caracteres = 0.4545
Tomó este desafío como una oportunidad para ver algunos lenguajes nuevos (CJam, Burlesque, zsh, gs2). Primera vez que trabajo con estos idiomas.
El método detrás de la creación de la salida es diferente en casi cada idioma. Solo el método CJam y gs2 son idénticos. Los 4 métodos son, crear un rango [1, 100] y cortarlo con módulo (CJam y gs2), crear el rango [1, ..., 100] y filtrar elementos que son 1 mod 7 (Pyth), creando el rango [1, ..., 100], divídalo en fragmentos de len 7 y use el primer elemento de cada fragmento (Burlesque), y cree la secuencia directamente (zsh).
Traté de diseñar cada programa de tal manera que parezca perfecto para alguien que no está familiarizado con el idioma.
edición 1: agregado burlesco, 2 idiomas anteriores con 10 caracteres = 0.2
edit 2: gs2 agregado, 3 idiomas anteriores con 11 caracteres = 0.2727
edit 3: zsh agregado, 4 idiomas anteriores con 11 caracteres = 0.3636
CJam
q~\1+,0-\%p
Pruébalo línea con la entrada 100 7
.
q~ push the evaluated input (100 7)
\ swap (7 100)
1 push 1 (7 100 1)
+ add last to elements (7 101)
, create the range (7, [0, 1, ..., 100])
0 push 0 (7, [0, 1, ..., 100], 0)
- delete 0 from the range (7, [1, 2, ..., 100])
\ swap ([1, 2, ..., 100], 7)
% use every 7th entry ([1, 8, ..., 99])
p print pretty
Burlesco
jrojcoq-]m[
Además de zsh, este es el único programa de golf. Burlesque es bastante impresionante, tiene una amplia gama de funciones diferentes, como ro
. Lamentablemente, no hay nada como el [::a]
operador de corte Python .
No hay un intérprete en línea, pero puede obtener Burlesque aquí. . Como Burlesque no admite funciones o IO, primero debe colocar los valores en la pila, como100 7 jrojcoq-]m[
j Swap (7 100)
ro Range (7 {1 2 ... 100})
j Swap ({1 2 ... 100} 7)
co ChunksOf ({{1 2 .. 7} {8 ... 14} ... {99 100}})
q Create Block ({{1 2 .. 7} {8 ... 14} ... {99 100}} {})
-] head (first element) ({{1 2 .. 7} {8 ... 14} ... {99 100}} {-]})
m[ map the chunks to the head-block
gs2
read-nums dup head inc range tail swap reverse head mod unlines
Sí, esto es solo 11 caracteres. En gs2 cada byte tiene un significado diferente. Pero debido a que escribir en bytes es bastante difícil y no es divertido, también puede escribir en mnemotécnicos, que puede compilar en el código gs2 real. El código gs2, que se ejecuta es
W@!'."B !4+
o como volcado hexadecimal:
57 40 21 27 2e 22 42 20 21 34 2b
Dato curioso: no escribí en mnemotecnia, sino directamente los números del volcado hexadecimal.
Puede probarlo descargando el compilador . Compile el archivo mnemonics con python gs2c.py < mnemonics.txt > compiled
o simplemente cópielo W@!'."B !4+
en un archivo llamado compiled
y luego ejecútelo conecho 100 7 | python gs2.py compiled
.
La mnemotecnia es bastante autoexplicable, pero esto es lo que está sucediendo en la pila.
57 40 21 27 2e 22 42 20 21 34 2b
57 read-nums ([100 7])
40 dup ([100 7] [100 7])
21 head ([100 7] 100)
27 inc ([100 7] 101)
2e range ([100 7] [0 1 ... 100])
22 tail ([100 7] [1 2 ... 100])
42 swap ([1 2 ... 100] [100 7])
20 reverse ([1 2 ... 100] [7 100])
21 head ([1 2 ... 100] 7)
34 mod ([1 8 ... 99])
2b unlines ('1\n8\n...\n99')
everything on the stack gets printed
Por cierto, son posibles 8 bytes, quizás incluso menos.
editar: bifurqué gs2, manipulé ligeramente un comando e hice una solicitud de extracción, que ya está fusionada. Entonces, la tarea se puede hacer con 6 bytes: lo read-nums extract-array swap range1 mod unlines
que se traduce en 57 0e 42 2f 34 2b
, que es incluso mejor que la pyth óptima.
zsh
f() seq 1 $2 $1
Esto define una función f
, que crea una secuencia. Para usarlo en Windows, instalé el shell babun , donde simplemente puede escribir estos comandos. Simplemente escriba f() seq 1 $2 $1
y en la siguiente línea f 100 7
.
Primero intenté escribir esto en Bash, pero allí tienes que escribir ()
alrededor del bloque de código, como f() ( seq 1 $2 $1 )
. Entonces cambié a zsh en su lugar.
Pyth
fq1%TeQUhhQ
Esto realmente duele, ya que, por supuesto, veo el obvio golf de 7 bytes. Puede probarlo en línea con la entrada 100, 7
.
Q = input()
UhhQ the range [0, 1, ..., Q[0]]
f filtered (only use those elements T, which satisfy the equation
q1%TeQ 1 == T % Q[1]
NumberOfLanguages / CodeSize
?