Cree una función en el idioma elegido que imprima lo siguiente:
Old MacDonald had a farm, E-I-E-I-O,
And on that farm he had a cow, E-I-E-I-O,
With a moo moo here and a moo moo there,
Here a moo, there a moo, everywhere a moo moo,
Old MacDonald had a farm, E-I-E-I-O!
Las cadenas where cow
y moo
are en los parámetros de la función y, como tales, se pueden cambiar a pig
y oink
o sheep
y baa
, por ejemplo.
Debe tener en cuenta letras mayúsculas, guiones, signos de puntuación, espacios y saltos de línea.
Intente escribir la menor cantidad de caracteres Unicode en su código.
code-golf
kolmogorov-complexity
function
rybo111
fuente
fuente
echoes the following
. ¿Quiere decir que la función debería imprimirlo o devolverlo?a oink
o debería hacerse esoan oink
?Respuestas:
Javascript ES6 - 204
No es el más corto pero probablemente el más ofuscado.
Si su navegador no es compatible con ES6:
Copiar / pegar el código en la consola del navegador e intente
f('cow','moo')
,f('pig','oink')
,f('sheep','baa')
Cómo funciona ?
c
es un conjunto de 29 letras más el animal y su sonido (vamos a llamarlo nuestro alfabeto ).Entonces, los 31 caracteres caben en 5 bits (2 ^ 5 = 32).
Un carácter Unicode tiene 16 bits de longitud, por lo que puede codificar 3 caracteres de nuestro alfabeto con un bit de relleno.
El texto completo con las nuevas líneas tiene 186 caracteres de nuestro alfabeto , se puede codificar con 62 caracteres Unicode.
Por ejemplo,
Old
se codifica así:Si tiene problemas para leer algunos caracteres Unicode, instale la fuente Code2000
fuente
"cow"
y"moo"
se supone que son los parámetros de la función. Al hacer que la persona que llama pase una matriz, está guardando caracteres dentro de la definición de la función a expensas de agregar al recuento de caracteres del código de llamada. Esto me huele a trampa. Llevando ese enfoque al extremo, podría definirfunction f(a){alert(a)}
(23 caracteres) y decir que debe llamarse asíf("Old MacDonald had a ...")
.CJam - 142 / GolfScript - 144
Uso:
"cow""moo"F
para GolfScript reemplazar
'|
con"|"
yA
con10
Explicación:
La parte clave es
A,{`/\*}/
:A,{...}/
ejecuta el bloque para cada número de 0 a 9 (A = 10)`
convierte el número en cadena/\*
, reemplaza una cadena: si tenemos en la pila,"bar" "foo 1 baz" "1"
luego/
divide la cadena resultante["foo " " baz"]
,\
intercambia esta matriz con el elemento anterior ("bar") y se*
une a la matriz que resulta en"foo bar baz"
Entonces, el código reemplaza cada número en la cadena principal con una cadena que estaba previamente en la pila. Tenemos el animal y el sonido, luego "had", "a", etc. y finalmente ", EIEIO" y la cadena principal, "10, ...!". Para evitar el uso de demasiadas comillas, puse todas las cadenas (excepto los parámetros) en una cadena, luego la dividí y volqué la matriz resultante (
'|/~
)La cadena principal pasa por las siguientes transformaciones:
reemplazar
"0"
con", E-I-E-I-O"
:reemplazar
"1"
con"Old MacDonald765"
:reemplazar
"2"
con"here"
, luego"3"
con"68 8"
etc.8 corresponde al sonido y 9 al animal.
fuente
E-I-
ser una cadena que luego se repite? :)Bash + iconv, 128 caracteres Unicode
Toma el siguiente cuerpo de función pure-bash / ascii y codifica en reversa en caracteres unicode:
Define una función de shell
m
. Llamar como:Bash puro, 171 bytes (solo ascii)
Creo que vale la pena señalar que el verso original (con "vaca" y "muu") es solo 203 caracteres.
Define la función de shell
m
. Llamar como:fuente
C ++ (403)
Muy bien, esto es un poco arriesgado, pero ¿a quién no le gusta definir demasiado?
fuente
#define X define
y luego usar#X Y Z
. Lamentablemente, esos días embriagadores IOCCC son ahora mucho más allá ...+
lugar de<<
? O usando enchar*
lugar destring
? // Solo se puede usar uno de estos al mismo tiempo.Python, 116 caracteres Unicode
Sin embargo, StackOverflow se está comiendo mis caracteres especiales, así que aquí está el archivo en base64:
Los datos se empaquetan usando zlib, que codifica eficientemente cadenas repetidas (zlib es bueno para comprimir texto en general). Para aprovechar la regla de "caracteres Unicode", el fragmento zlib de 121 bytes se rellena y se divide a la mitad en una cadena Unicode de 61 caracteres interpretando la cadena de bytes como UTF-16.
Llame a la función como
fuente
.decode('zip')
.)Pitón, 217
Realmente no puedes jugar tanto al golf. Acabo de sacar la evidente repetición frontal y ...
Javascript, 241 - truco JSCrush
Hecho esto con JSCrush ... no es realmente una respuesta real, sería interesante ver si alguien puede superar esto en un lenguaje convencional. ( EDITAR : uh)
fuente
Java, 246
Uso:
f(new String[]{"cow","moo"});
fuente
Java -
262258Una optimización adicional es definitivamente posible.
fuente
Perl 5 (UTF-8) - 131 caracteres, 313 bytes
El siguiente script debe guardarse como UTF-8 sin BOM.
Uso:
f("cow", "moo");
.Perl necesita haber sido ejecutado con la
-M5.010
bandera para habilitar las características de Perl 5.10. ( Esto está permitido )Me gusta bastante la simetría de la cuenta de caracteres (131) y la cuenta de bytes (313). Es muy yin y yang.
Perl 5 (ASCII): 181 caracteres, 181 bytes
Uso:
f("cow", "moo");
.Nuevamente, perl necesita haber sido ejecutado con la
-M5.010
bandera para habilitar las características de Perl 5.10.fuente
CJam (no ASCII) - 77 caracteres
Uso:
"cow""moo"F
La cadena es mi otra solución CJam convertida de la base 127 a la base 56000.
Es posible que se requiera un entorno local UTF-8.
Por cierto, ahora puedes probar esto en línea en http://cjam.aditsu.net/
fuente
JavaScript: 152 caracteres / ES6: 149 caracteres
Aquí hay una función JS llamada "z" que hace el trabajo en 214 caracteres. (¡no lo ejecutes!)
Lo "empaqué" en caracteres unicode usando una técnica creada por @subzey y yo para 140byt.es).
ejecute ese último fragmento, luego llame
z("cow","moo")
y obtendrá esta cadena:Más información aquí: http://xem.github.io/golfing/en.html#compress
Versión ES6:
fuente
C # - 339 bytes
Uso:
x("cow","moo");
fuente
Rebol,
206202Uso:
f "cow" "moo"
fuente
Delphi XE3 (
272252)Sin golf
fuente
Lua 237
Al definir
c=b.." "..b
, puedo guardar una docena de caracteres. Al definird
como lo hago, guardo 23 caracteres. Ya no veo cómo puedo acortar esto. Esto se llama víaf("<animal>","<sound>")
.fuente
Java 8 (411)
Abusando de lambda, colocó los reemplazos en un LinkedhashMap para mantenerlos en un orden definido y luego usó un lambda foreach para reemplazar la clave con el valor en la Cadena principal. los parámetros se agregan como los últimos 2 reemplazos en el mapa. ese argumento varargs es eliminar algunos bytes en el encabezado del método
Versión sin golf:
fuente
JavaScript 220
Llamado por
fuente
C puro, 298 bytes, sin unicode
En mi función, tomo un solo argumento, que en realidad es un montón de
char*
paquetes. Cada cadena está terminada en nulo, y hay un terminador nulo adicional al final. Esto me permite verificarstrlen(a)
al final de cada ciclo, en lugar de mantener una variable de contador.mcdonald.c:
C Principal:
Salida:
fuente
Cobra - 203
Incluso para un lenguaje con poco o nada de líneas múltiples y reglas de sangría estrictas, Cobra todavía funciona bastante bien.
fuente
C: 224 bytes
Al usar el especificador de precisión printf , podemos usar la misma cadena como la cadena de formato printf y como dos de los parámetros.
Con espacio en blanco y la cadena dividida en líneas:
fuente
PHP: 272 caracteres, 272 bytes
Uso:
m("cow", "moo");
,m("fox", "Hatee-hatee-hatee-ho");
Parámetros con
@#%^<>&*(
crash la salida.fuente
Haskell (282 y todavía algo legible :))
El archivo:
fuente
wc -c
, pero prefiero usar mothereff.in/byte-counter y asegurarme de que no haya una línea vacía al final a menos que sea necesario para que el programa funcione.ES6, 2 soluciones de
179186 caracteres sin ningún unicodeY el segundo:
He agregado una llamada de alerta (+7 caracteres).
fuente
JavaScript (E6) 140 caracteres
Contador de caracteres: https://mothereff.in/byte-counter , 140 caracteres, 425 bytes en UTF-8
Código ASCII original 188 bytes
Comprimido con http://xem.github.io/obfuscatweet/
Prueba en la consola FireFox / FireBug
Salida
fuente