Harto de la fiabilidad del almacenamiento flash, decidió almacenar todos sus programas en uno de esos viejos y flexibles disquetes de 1,440 KiB. Sin embargo, después de copiar ni siquiera 3.000 programas, el disco estaba lleno. ¿Cómo es eso posible? Experto en el arte del código de golf como eres, la mayoría de tus programas no tienen ni siquiera 100 bytes de longitud, por lo que debería quedar mucho espacio ...
Después de preguntar sobre eso en Super User, descubres que te ha perjudicado el tamaño del clúster del sistema de archivos , una trama malvada de los diseñadores de FAT12 que deja una porción significativa de tu disquete sin usar y te obliga a comprar más de lo que realmente necesitas.
¿Comprar más disquetes? ¡Nunca! El tamaño del clúster será un problema menor si simplemente guardamos varios programas en un archivo, lo cual es posible porque diferentes compiladores / intérpretes se comportarán de manera diferente para el mismo código fuente.
Tarea
Escriba un políglota que se ajuste a un solo clúster (512 bytes o menos) y resuelva la mayor cantidad posible de las siguientes tareas.
Lea todas las entradas e imprímalo.
Imprimir Hola, mundo! .
¡Lea una línea / argumento ( nombre ) como entrada e imprima Feliz cumpleaños, [nombre]! .
Lea todas las entradas e imprima ¡ Me encantan las pestañas! si contiene uno o más tabuladores (0x09) y odio los espacios! si no es así
Lea dos líneas / argumentos e imprima un valor verdadero si el segundo es una subcadena del primero y un valor falso si no.
Lea una línea / argumento e imprima un valor verdadero si sus caracteres están en orden estrictamente ascendente y un valor falso si no.
Lea una línea / argumento y un carácter e imprima los índices de todas las apariciones de ese carácter.
Lea una línea / argumento e imprima cualquiera de los caracteres con el mayor número de ocurrencias.
Lea dos enteros entre 0 y 255 e imprima su suma.
Lea un número entero entre 0 y 255 e imprima el cociente y el residuo de su división entre 7 .
Lea un número entero entre 1 y 255 e imprima un valor verdadero si es un número compuesto (ni 1 ni primo) y un valor falso si no.
Lea un número entero entre 1 y 255 e imprima un valor verdadero si es una potencia de 2 y un valor falso si no.
Lea dos enteros entre 0 y 255 e imprima el más grande.
Leer un entero decimal entre 0 y 255 imprime su representación hexadecimal.
Lea un número entero entre 0 y 255 e imprima su peso de Hamming (número de 1 bits).
Leer un solo número entero n entre 1 y 13 e imprimir el F n , el n ésimo número de Fibonacci .
Por ejemplo, para la entrada
13
, imprimir233
.
Leer una línea / argumento de entrada y enmarcarlo.
Por ejemplo, para la entrada
Programming Puzzles & Code Golf
, imprima esto:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Lea un bloque rectangular de caracteres y gírelo un cuarto de vuelta en el sentido de las agujas del reloj.
Por ejemplo, para la entrada
tye xll epb tma id sa s e i r hsn Tiu
imprime esto:
This text is simply unreadable
Leer un número entero entre 1 y 40 e imprima un diamante de esa longitud lateral.
Por ejemplo, para la entrada
3
, imprima esto:/\ / \ / \ \ / \ / \/
Imprime esto:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Tanteo
La respuesta que logra incorporar la mayor cantidad de programas en un solo archivo que cabe en un solo clúster de 512 bytes gana. Los empates se rompen por recuento de bytes (menor es mejor).
Reglas adicionales
Para cada tarea que reclame para su puntaje, el mismo archivo (byte por byte) debe constituir un programa completo, en el idioma que elija, que resuelva esta tarea en particular.
Cada tarea debe resolverse en un idioma diferente.
Los idiomas cuentan como diferentes si no son versiones diferentes del mismo idioma. Por ejemplo, solo hay un JavaScript, un Python y un TI-BASIC, pero C, C ++, Octave y MATLAB son cuatro lenguajes diferentes.
El lenguaje seleccionado para cada tarea debe satisfacer nuestra definición habitual de lenguaje de programación .
Además, el idioma debe haber sido publicado e implementado antes del 9 de septiembre de 2015.
Es posible que su compilador / intérprete no requiera ningún indicador no estándar para producir el comportamiento esperado.
Las excepciones a esta regla incluyen los indicadores necesarios para especificar un idioma en particular, para leer el programa desde un archivo (único) o para suprimir un banner.
La entrada para cada tarea consistirá en caracteres ASCII imprimibles (0x20 a 0x7E) y avances de línea (0x0A), y no excederá los 255 bytes de longitud.
Todos los enteros se pueden leer en decimal o unario, a menos que se indique lo contrario en la tarea.
El comportamiento de la entrada no válida no está definido.
Puede leer la entrada de STDIN (o su alternativa más cercana) o como argumentos de línea de comandos.
Si una tarea requiere leer dos entradas, puede leerlas, en cualquier orden, separadas por un delimitador de un byte de su elección, como argumentos de línea de comandos separados o uno de STDIN y el otro como argumento de línea de comandos.
Si una de las piezas de entrada es una línea, el único delimitador posible es un salto de línea.
Imprima el resultado en STDOUT (o la alternativa más cercana). Toda la salida a STDERR será ignorada.
Para cada tarea, se aplican las reglas estándar de código de golf .
En particular, esto incluye las lagunas que están prohibidas por defecto , con la excepción de la codificación de la salida , que está explícitamente permitida para este desafío.
2>/dev/null
y obtenemos la salida correcta a stdout, está bien? Sólo para estar seguro.Respuestas:
12 idiomas, 418 bytes
Este es un desafío divertido. Se está haciendo difícil incluir más idiomas, pero con estos bytes restantes, probablemente podría hacer uno más.
Hace uso gratuito de lenguajes 2D. Tenga en cuenta que el carácter entre
[ ]
la@-[ ]e<
línea es una pestaña. Además, esto requiere\n
terminaciones de línea para que TRANSCRIPT funcione.Preludio (Tarea 1 / Cat)
?(!?)
es solo una traducción directa de,[.,]
en BF. Los()
bucles Prelude actúan como[]
bucles BF , por lo que todo, desde la(
columna situada más a la izquierda hasta)
antes de que el programa principal no se ejecute.Las reglas de sintaxis de Prelude significan que los paréntesis deben coincidir (lectura de columna de izquierda a derecha), y solo puede haber un paréntesis por columna. Aparte de eso, es un lenguaje bastante fácil de encajar.
Asegúrese de que
NUMERIC_OUTPUT
esté configurado enFalse
si está utilizando el intérprete de Python.TRANSCRIPCIÓN (Tarea 2 / Hola mundo)
TRANSCRIPT es un esolang temático basado en ficción interactiva. Las líneas no reconocidas por TRANSCRIPT se ignoran, lo que facilita su adaptación.
Tr is here.
declara unaTr
variable de cadena y la segunda línea establece el contenido de la variable enHello, World!
.X Tr
(X
para examinar) luego genera la cadena.Aunque TRANSCRIPT es muy fácil de encajar, es un lenguaje bastante detallado, por lo que hice que sea el desafío más fácil.
Fisión (Tarea 3 / Mensaje de cumpleaños)
que imprime la primera parte, captura la entrada con un pequeño bucle 2D y luego muestra el signo de exclamación final. El
R
significa que un átomo comienza aquí moviéndose hacia la derecha, lo cual es útil porque este programa se puede mover a cualquier lugar.Carril (Tarea 4 / Pestañas)
Al igual que Fission, Rail es un lenguaje 2D que tiene la ventaja de poder moverse a cualquier lugar. La ejecución comienza desde
$
elmain
función, en dirección sureste.Primero nos dirigimos hacia abajo
\
, giramos a la izquierda en-
, golpeando[<tab>]
y empujando una pestaña.e<
luego ramas basadas en EOF - si EOF, nos dirigimos hacia abajo e imprimimos"I hate spaces!"
antes de detenernos, de lo contrario nos dirigimos hacia arriba. Si nos dirigimos hacia arriba, leemos el siguiente carácter y lo comparamos con la pestaña, una vez más bifurcando: si la pestaña, encabeza e imprime"I love tabs!"
antes de detenerse, de lo contrario, dirígete hacia abajo y continúa el ciclo de entrada.Este programa es bastante costoso, pero como TRANSCRIPT tomó Hello World, fue difícil elegir una tarea adecuada para Rail.
> <> (Tarea 6 / Entrada ascendente)
Imprime
1
si es estrictamente ascendente,0
contrario.> <> es otro lenguaje 2D, y la ejecución comienza desde la parte superior izquierda.
"..."
es el modo de cadena, empujando los caracteres internos uno a la vez. Después de la primera cadena que golpeamos#
, que refleja la IP hacia la izquierda, empujando más cadenas y envolviendo (> <> es toroidal) antes de golpear\
, un espejo que nos refleja hacia arriba.En la parte inferior del programa está
.91<
, que nos teletransporta a(9, 1)
, donde está el programa central. Después de que esto0[
elimine toda la basura de las cadenas,0
empuja un cero para representar la última lectura de caracteres, y después de esto solo lee los caracteres uno por uno, asegurándose de que sigamos ascendiendo.Probablemente sea mejor mover el programa central hacia abajo en lugar de teletransportarse, pero me ocuparé de eso más adelante si es necesario.
Befunge (Tarea 9 / Suma)
Probado con el intérprete encontrado aquí . Este es un programa bastante sencillo, con el comienzo empujando una cadena inútil y
#
saltando sobre el espacio. Después de eso es solo el programa central&&+.@
.Laberinto (Tarea 10 / Divmod por 7)
Convenientemente,
'
y"
son NOPs en Labyrinth que actúan como un camino transitable en el laberinto. Me saltearé la navegación desordenada, pero básicamente hay muchas vueltas y vagabundeos antes de llegar al?
, que es el comienzo del programa principal.El programa no está completamente al ras para dar cuenta de Prelude (p. Ej.
?
se lee la entrada en Prelude).Python 2 (Tarea 14 / Hexadecimal)
Los
xxx
s representan porciones irrelevantes comentadas por cadenas o comentarios multilínea. En el medio estáprint hex(input())
, el programa central. Esto se muestra con un encabezado0x
, pero supongo que está bien (si no, entonces es una solución fácil de todos modos).La primera línea es una cadena
"1\"# &&+.@\""
seguida de dos" "
s. El analizador concatena estas tres cadenas y las deja sin usar (esta primera línea funciona de manera similar para Ruby y Julia más adelante).GolfScript (Tarea 15 / Peso de Hamming)
La primera línea empuja tres cadenas, y la segunda línea es un comentario.
''''
empuja dos cadenas más, luego<<
hace dos comparaciones (s
se ignora). Finalmente,""'("'
empuja otras dos cuerdas.Todo esto es basura y luego se elimina envolviéndolo en una matriz y obteniendo el primer elemento (
]0=
), que es la entrada inicialmente en la pila. Luego evaluamos la entrada con~
, la convertimos en binaria con y2base
luego sumamos los bits con{+}*
. El siguiente}
no tiene comparación y supercomenta el resto del programa.Julia (Tarea 16, Fibonacci)
#=
comienza un comentario multilínea y=#
finaliza un comentario multilínea. El programa principal utiliza la exponenciación matricial para calcular los números de Fibonacci (tomados de Rosetta ).Ruby (Tarea 17 / marco ASCII)
Este programa asume que la entrada no termina con una nueva línea final.
Tenemos una cadena inútil, un comentario, otra cadena inútil, luego un heredoc que comenta la mayor parte del programa. Después de eso es el programa central, seguido de un
#
comentario de una sola línea .CJam (Tarea 19 / Diamante)
Las dos cadenas de espacio al final de la primera línea son para satisfacer CJam, ya que
#=
son dos operadores binarios. No voy a entrar en demasiados detalles con este, pero básicamente es un desastre, con el programa central siendo el meroentre.
El diferenciador clave entre GolfScript y CJam es que, en CJam, una comilla simple
'
no comienza ni termina las cadenas, sino que empuja el siguiente carácter a la pila. Esto significa que en CJamempuja un y
(
luego comienza una cadena con"
(el primer carácter del cual es'
), mientras que lo anterior es solo una cadena simple en GolfScript.Pruébalo en línea .
1>
se usa en lugar de(
dar cuenta de Prelude.Aquí hay 12 idiomas, 373 bytes . Se han movido algunas tareas, se ha eliminado TRANSCRIPT (hacía que Rail fuera demasiado costoso) y se ha agregado Scheme (chicken). Este es solo mi campo de golf para futuras actualizaciones, ya que la actualización de la publicación principal lleva una eternidad.
Podría guardar algunos bytes para Julia ya que los comentarios de varias líneas sin terminar generan un error en STDERR.
fuente
;)
estoy postergando cambiar cualquier cosa en mi respuesta, debido a la larga descripción. lol78910 idiomas,398431447507 bytesEsto es probablemente lo máximo que puedo encajar en la solución actual.
La última línea contiene el código de espacio en blanco codificado para que SE no lo coma. Para ejecutar el código, reemplace todo
S
con espacios,T
con pestañas yN
con nuevas líneas.C89, tarea 16
Esto es lo que ve el compilador:
Todo lo demás se elimina como comentarios o dentro del
#if 0
.C ++, tarea 14
Utilicé un truco robado de aquí para diferenciar entre C89 y C ++.
Lua, tarea 2
Aquí está la estructura básica.
Brainfuck, tarea 1
Solo tenía que asegurarme de que no
.,
se encontraran bucles infinitos o extraviados . Los comentarios multilínea de Lua también funcionan como comentarios BF. Todo, aparte de los primeros 2 caracteres, es un gran bucle NOP.Python, tarea 6
Nuevamente, estoy usando funciones específicas del idioma para NOP o comentar el otro código.
Pyth, tarea 17
Pyth es bueno para esto. Toma el primero
#
como unwhile True:
bucle que sale silenciosamente en caso de error . Entonces, simplemente hago que la mayoría del código sea una cadena (para evitar que;
finalice el bucle antes de tiempo), luego solo finalizo el bucle, salgo de otro creado por el comentario de Python y hago la tarea. Aquí está con todas las cadenas no vacías reemplazadas por" string "
, todavía es funcionalmente equivalente:> <>, tarea 3
Este es muy interesante. La ejecución rebota en el código, utilizando saltos cuando sea necesario para sortear obstáculos. Las partes relevantes:
Estrellado , tarea 9
Aquí tuve que comenzar a entrar en los idiomas "descartar todos los caracteres excepto". Cualquier otra cosa despojada, parece:
El código omite la mayor parte de la puntuación con un salto para evitar un momento difícil, simplemente usando el inicio y el final del código. El código es funcionalmente equivalente a
Befunge-98, tarea 10
Funciona de manera similar al> <> uno. Afortunadamente,
#
es un espejo en> <> y un salto en Befunge, por lo que podemos implementar diferentes comportamientos. Además,0/0 == 0
.Espacio en blanco , tarea 13
Esto fue lo último que encajé. Las primeras líneas solo están presionando ceros en la pila, ya que solo contienen espacios y líneas nuevas del código "normal". El código está codificado; reemplace todo
S
con espacio,T
con pestañas yN
con líneas nuevas.fuente
17 versiones diferentes de Pip, 383 bytes (inválido)
Si bien esta pregunta estaba en la zona de pruebas, revisé todas las revisiones de mi idioma Pip y se me ocurrió un políglota con 17 de ellas. Lamentablemente, las versiones del mismo idioma no están permitidas por las reglas de desafío ahora, pero con el permiso de Dennis y un descargo de responsabilidad, estoy publicando mi trabajo de todos modos.
El código en bruto
La estrategia
En Pip, las letras minúsculas son variables. Las letras mayúsculas son más complicadas: se dividen en series de dos caracteres como máximo, que pueden ser operadores o variables. Si un token en mayúscula no se define específicamente como una variable u operador, se supone que es una variable indefinida, que se evalúa como nula.
Entonces, para distinguir entre dos versiones de Pip, solo tengo que encontrar algún operador variable o alfabético que se haya agregado en el más nuevo de los dos. En el anterior, será nulo en su lugar. El código
v:uIN[...]
reúne una gran lista que contiene una de estas comprobaciones para cada versión que quiero probar, descubre cuántos nils hay en esa lista (lau
variable se inicializa explícitamente en nil) y almacena el número env
(para "versión") .Después de algunos otros cálculos, hay otra gran lista que calcula los resultados de 17 de las tareas del desafío y las utiliza
v
para seleccionar una en función de la versión que sea.Versiones y tareas
0.15.09.04
Diagnóstico:
(oTM0,0i)
(se corrigió un error con el operadorT
riM
donde recortar 0 caracteres de cada extremo de una cadena daría la cadena vacía; la indexación en una cadena vacía da cero)Tarea 18:
Iv<2W##YqlPBy
(configuración: leer todas las líneas de stdin siv
es menor que 2) seguido de((J_M ZRVl)|0)Jn
(invertir la lista de líneas, transponer y volver a unir en cadena)0.15.08.06
Diagnóstico:
EN1
(EN
operador de umerate agregado )Tarea 1:
Iv<2W##YqlPBy
(el mismo código de configuración que el anterior) seguido del?lJnl
(unirse en nuevas líneas)0.15.08.03
Diagnóstico:
1N1
(agregadoN
como versión corta deIN
operador)Tarea 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(configuración: generar una lista que contenga las mitades superior e inferior del tablero de ajedrez y almacenarlac
) seguido decJn
(unirse a la nueva línea)0.15.08.01
Diagnóstico:
Y1
(Y
operador ank agregado )Tarea 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(configuración: siv
es 3, construir la mitad superior del diamanted
) seguido ded.n.RVd
(invertir para la mitad inferior y unirse en la nueva línea)0.15.06.19
Diagnóstico:
RCk
( operadorR
andice hoice agregadoC
)Tarea 17:
m:'+.'-X#a+2.'+.n."| "
(configuración:+----+\n|
cadena de compilaciónm
) seguida dem.a.RVm
(entrada de entradam
y reversa dem
)0.15.06.12
Diagnóstico:
k
(k
variable preinicializada a", "
; anteriormente no estaba definida y, por lo tanto, era nula)Tarea 16:
Iv=5La{i+:oSio}
(siv
es 5, generar el número de Fibonacci eni
) seguido dei
0.15.06.08 (nota: el número de versión no se cambió hasta la siguiente confirmación)
Diagnóstico:
w
(preinicializadow
variable a`\s+`
)Tarea 15:
h:$+TBa
(convierta la entrada a dígitos binarios y de suma; guarde el resultadoh
para la tarea 12 más adelante)0.15.05.29
Diagnóstico:
(hR`1.+0``&2o`)@>3@AB0
Esta versión se agregó
&
como un patrón de reemplazo para toda la cadena combinada en un reemplazo de expresiones regulares (inspirado en sed). El código anterior tomah
(100
) y lo reemplaza con`&2o`
(es decir,"1002o"
en versiones más nuevas pero simplemente"&2o"
en versiones anteriores). Luego corta todos los caracteres después del tercero ("2o"
en versiones más recientes,""
en versiones anteriores) e intenta indexar en esa cadena. La indexación en una cadena vacía da cero.Tarea 7:
j:ak:b
(configuración: copia vars localesa
,b
a vars globalesj
,k
para que estén disponibles dentro de una función) seguido de({j@aEQk}FI0,#a).s
(filtrar los índices en losa
que el carácter correspondiente es igualb
y unirse en el espacio)0.15.05.26
Diagnóstico:
`u`
(tipo de patrón agregado; en versiones anteriores, los backticks se ignoran como caracteres no reconocidos y la expresión se evalúa comou
nula)Tarea 14:
aTB16
(convertirT
oB
ase 16)0.15.05.24
Diagnóstico:
rZ4
(r
variable especial creada que devuelve un valor aleatorio entre 0 y 1 cada vez que se hace referencia; anteriormente no estaba definida y, por lo tanto, la expresión se evaluó como nula)Tarea 13:
a>b?ab
(expresión ternaria)0.15.05.12
Diagnóstico:
rZ4
(agregadoZ
operador de ip )Tarea 12:
h=1
(la suma de bits de la tarea 15 debe ser igual a 1)0.15.05.11
Diagnóstico:
AB6
(AB
operador de valor agregado de soluto)Tarea 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(siv
es 11, salida1
si la entrada es mayor que 1 y un número menor lo divide exactamente0
; de lo contrario; siv
hay algo más, úselov
como índice de la lista para decidir qué salida)0.15.05.02
Diagnóstico:
({a}V7)
(V
operador agregado ; cuandoV
no estaba definido, esto envió argumentos nulo y 7 a una función{a}
que devuelve su primer argumento)Tarea 10:
a//7.s.a%7
(entrada int-dividida por 7 y mod 7, separada por espacios)0.15.04.26
Diagnóstico:
BN8
(se agregó el operador deB
egationN
)Tarea 9:
a+b
0.15.04.23
Diagnóstico:
AZ
(AZ
variable preinicializada al alfabeto en mayúscula)Tarea 5:
bINa
(IN
da cuenta de ocurrencias)0.15.04.20
Diagnóstico:
m@0:0
seguido de9@m
La
m
variable se preinicializa a 1000. En esta confirmación, el@
operador se arregló para devolver valores; anteriormente, asignando am@0
dio una advertencia y no hizo nada. Por lo tanto, después de la corrección de errores, la primera instrucción se establecem
en0000
, que es un índice legal para9
; pre-corrección de errores, sem
queda1000
, que no es un índice legal. (Los índices aún no eran cíclicos).Tarea 3:
"Happy Birthday, ".a.'!
0.15.04.18
Todos los diagnósticos anteriores hacen que se agregue un valor nulo a la lista de diagnóstico.
Tarea 2:
"Hello, World!"
La mayoría del otro código son ajustes que tuve que hacer para evitar errores en varias versiones. Esta publicación ya es demasiado larga, así que si quieres saber algo que no te he explicado, pasemos a la sala de chat de idiomas esotéricos .
fuente
6 idiomas, 226 bytes (¡229 según cómo
\x1b
se acepte!)Por lo tanto, no creo que haya hecho la mejor elección de idiomas e imagino que esto no es particularmente competitivo, ¡pero de todos modos me pareció un desafío interesante! En general, no se completan muchos desafíos, pero probablemente podría calzar un desafío en espacios en blanco o algo similar, pero esto es lo que tengo hasta ahora:
1. Brainfuck
Probado en http://copy.sh/brainfuck/ y http://brainfuck.tk/ .
Después de eliminar todos los caracteres ignorados, el programa anterior es todo lo que nos queda, que es solo el programa cat de ejemplo con algunos bucles vacíos adicionales para omitir el uso de los símbolos en otros idiomas.
2. Ruby
Uso:
Lo anterior es el código después de eliminar todos los comentarios. La primera línea es totalmente inútil en Ruby como lo definimos algunas expresiones regulares para contener el código Befunge-93 y brainfuck, entonces se crea una matriz para contener
Hello
yWorld
e imprimirlo usandoprintf
(para añadir la,
y!
).3. Perl
Uso:
Muy similar a Ruby, excepto que ya que estamos almacenando una referencia de matriz
$a
, cuando intentamos acceder$a[0]
está vacía, por lo que podemos reemplazarla con el texto del desafío 3Happy Birthday
ypop
(que muestra el último argumento para el programa de línea de comandos )4. JavaScript
Uso: pegar en la consola del navegador y ejecutar.
Al igual que Ruby y Perl, la primera línea esencialmente crea
RegExp
objetos inútiles , luego almacenamos una matriz inútil$a
e instanciamos dos cadenas inútiles, una que contiene el código Ruby / Perl y otra que contiene una nueva línea y a#
, luegoprompt()
ingresamos yalert()
el resultado esperado por la mayoría de los humanos para el desafío 4. Terminamos con otroRegExp
objeto inútil para cerrar el circuito de brainfuck.9. Befunge-93
Probado en http://www.quirkster.com/iano/js/befunge.html .
Según tengo entendido,
/
divide la pila y empuja el resultado que no tiene efectos nocivos, excepto presionarNaN
en el sitio anterior,&
solicita la entrada de un número entero para que leamos los dos números requeridos por el desafío 9 en la pila, lo que#
garantiza que omitimos el[
que está ahí para brainfuck,+
luego agrega los dos números superiores en la pila, los.
genera,#]
para brainfuck nuevamente y@
sale.13. PHP (ejecutándose en Bash)
Uso:
En PHP, todo lo que no está incluido dentro de las
<?
etiquetas se genera literalmente, por lo que genera el código Befunge-93 y brainfuck, por lo quedie()
inmediatamente en el código, mostramos una pantalla clara (\x1bc
) y luego losmax()
dos primeros argumentos.fuente
the first character in the first string literal is the byte ASCII 27
); su puntaje es 226..match'\x09'
(donde están los 'son') ¡tal vez veré si puedo agregar más en algún momento!6 idiomas,
450404 bytesbash, brainfuck, C, gawk4, JavaScript y Minimal-2D
Actualización: Golfed hacia abajo un poco. Todavía no estoy seguro de qué más agregar, y no estoy seguro de cómo pensarían los miembros competidores acerca de mí usando sus idiomas para diferentes tareas. Tratando de explicar el algoritmo brainfuck.
Bueno, esta es / fue mi primera experiencia políglota, así que tuve que aprender todo desde cero. Comenzar con awk no fue la idea más inteligente, creo, porque es relativamente implacable. Debido a que el número de tareas completadas es relevante, comencé con las tareas más fáciles primero. No estoy seguro si fue un movimiento inteligente. Esto no es mucho golf, porque tuve suficientes problemas para lograr que estos seis funcionen juntos, pero hice lo que pude para mantenerlo corto.
Aquí están los idiomas y lo que hacen en orden alfabético. Mostraré una manera fácil de probarlos todos más abajo. Debido a que algo de esto podría ser específico de la versión, le daré los números de versión de las herramientas que utilicé.
bash, tarea 3
Bueno, es obvio que usé sed. Traté de poner una secuencia de comandos sed en esto de alguna manera, pero no pude hacerlo funcionar, así que seguí la ruta bash. La forma en que lo hice, está dentro de un comentario en C y awk lo evalúa
False
.sed --version
dased (GNU sed) 4.2.2
bash --version
daGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Entonces la parte sed se reduce a
Agrupa la entrada, la pega en una nueva cadena e imprime el resultado. Cosas bastante comunes.
brainfuck, tarea 20
Bueno, esto siempre es bastante fácil de ocultar, supongo.
#//
C y awk ignoran una línea que comienza con . O al menos pueden vivir con la basura detrás de eso.bf
dabf - a Brainfuck interpreter version 20041219
Este es el código condensado. La primera línea es solo la basura de los otros idiomas.
Trataré de explicar cómo funciona
esto organiza la cinta y el puntero a este
la celda que contiene 8 es el contador global para el siguiente ciclo
, es el número de veces que se imprimen 3 mismas líneas
se establece
C1
en 3, el número de líneas igualesse establece
C2
en 4, el número de "....@@@@
" en una línea (al principio)imprime una línea completa decrementando
C2
en el procesocuando
C2
es cero, imprime una nueva línea y disminuyeC1
.si
C1
es cero la magia sucedeel 46 se mueve detrás del 64
el 10 y el contador global se mueve uno a la derecha
entonces se disminuye el contador global
si es cero, el programa sale
C, tarea 2
Agoto hasta la última pequeña habilidad de C aquí imprimiendo "¡Hola, mundo!". Bueno, alguien tenía que hacer el trabajo ...
gcc --version
dagcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
El código C real
El
#define func
objetivo es hacer bien a Awk con esto. Piensa que esta es una función awk. La abreviatura de func es una característica gawk.gawk4, tarea 18
Como he usado awk para casi todo aquí, decidí que tenía que estar en esto.
awk --version
daGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
awk ve esto
Los patrones de búsqueda incluyen
\t
evaluar afalse
. Elegí la pestaña aquí, porque creo que no puede estar en la entrada.sed
evalúa afalse
."the string"&&0
se evalúa como falso La función está bien. El programa se ejecuta si coincide un patrón vacío, que es para cualquier entrada.Hace esto
Entrada
Salida
Debe asegurarse de que todas las líneas de entrada tengan la misma longitud. Use espacios para llenarlos.
JavaScript, tarea 9
No estoy seguro de si esto es legítimo, porque fue demasiado fácil. Si le da al archivo del programa un final html y lo abre en un navegador (utilicé Firefox 40.0.3 y Chrome 45.0.2454.85), le pedirá una entrada. Debe ingresar dos números separados por espacio, y alertará la suma de esos.
Minimal-2D , tarea 1
Esto fue bastante fácil de encajar en las líneas de comentarios. Usé el intérprete , que se ejecuta en python, para probar esto. Imprime la entrada a la salida. El programa se ve así
RUDL son derecha, arriba, abajo e izquierda. Entonces comienza a ir bien, lee un carácter de stdin en la memoria y agrega uno. La barra oblicua omite el siguiente comando si la memoria tiene el valor 0. Esto es para finalizar esto. Si se lee un carácter con valor -1, la entrada ha finalizado. Entonces, si se lee -1, se salta la D y termina. Si se lee algo más, baja a la izquierda, agrega ese 1 de nuevo a la memoria e imprime el carácter en stdout. Luego va a la izquierda y arriba y comienza de nuevo.
Pruebas
Descargo de responsabilidad: no asumiré ninguna responsabilidad por los daños que pueda hacer a su sistema con esto.
Esto supone que tiene bash & co, gawk (al menos la versión 4, porque usa matrices multidimensionales), gcc, python, bf como un intérprete de brainfuck y Firefox instalado.
Para hacerlo más fácil, copie la fuente del programa en un archivo llamado
cluster.html
. Haga que el archivo sea ejecutable para la tarea bash. Copie y pegue el intérprete para Minimal-2d en un archivo nombradominimal2D.py
en el mismo directorio. Luego copie y pegue el siguiente script en un archivo de script y colóquelo en el mismo directorio, hágalo ejecutable y ejecútelo ... bueno, ¿con quién estoy hablando? Si lees esto, probablemente no necesites tanta explicación y de todos modos lograrás que se ejecute de alguna manera.Allí también encontrará el comando para ejecutar las pruebas individualmente.
¡Que te diviertas!
fuente