Crie uma função no idioma escolhido que imprima o seguinte:
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!
Onde cow
e moo
são seqüências de caracteres nos parâmetros de função e, como tal, podem ser alterados para pig
e oink
ou sheep
e baa
, por exemplo.
Deve levar em conta letras maiúsculas, hífens, pontuação, espaços e quebras de linha.
Procure digitar a menor quantidade de caracteres Unicode no seu código.
code-golf
kolmogorov-complexity
function
rybo111
fonte
fonte
echoes the following
. Você quer dizer que a função deve imprimi-la ou devolvê-la?a oink
ou deve ser feito para seran oink
?Respostas:
Javascript ES6 - 204
Não é o mais curto, mas provavelmente o mais ofuscado.
Se o seu navegador não suportar o ES6:
Copiar / colar esse código em consola seu navegador e tente
f('cow','moo')
,f('pig','oink')
,f('sheep','baa')
Como funciona ?
c
é uma matriz de 29 letras mais o animal e seu som (vamos chamar isso de nosso alfabeto ).Portanto, todos os 31 caracteres cabem em 5 bits (2 ^ 5 = 32).
Um caractere Unicode tem 16 bits de comprimento, portanto pode codificar 3 caracteres do nosso alfabeto com um bit de preenchimento.
O texto completo com as novas linhas tem 186 caracteres do nosso alfabeto , ele pode ser codificado com 62 caracteres Unicode.
Por exemplo,
Old
é codificado assim:Se você tiver problemas para ler alguns caracteres Unicode, instale a fonte Code2000
fonte
"cow"
e"moo"
devem ser os parâmetros de função. Ao fazer com que o chamador passe uma matriz, você está salvando caracteres na definição da função à custa de adicionar à contagem de caracteres do código de chamada. Isso cheira como uma trapaça para mim. Tomando essa abordagem ao extremo, você pode definirfunction f(a){alert(a)}
(23 caracteres) e dizer que precisa ser chamado assimf("Old MacDonald had a ...")
.CJam - 142 / GolfScript - 144
Uso:
"cow""moo"F
Para GolfScript, substitua
'|
por"|"
eA
por10
Explicação:
A parte principal é
A,{`/\*}/
:A,{...}/
executa o bloco para cada número de 0 a 9 (A = 10)`
converte o número em string/\*
e substitui uma string: se tivermos na pilha"bar" "foo 1 baz" "1"
,/
dividimos a string resultando em["foo " " baz"]
,\
troca essa matriz pelo item anterior ("bar") e*
junta-se à matriz, resultando em"foo bar baz"
Portanto, o código substitui cada número na cadeia principal por uma cadeia anteriormente na pilha. Nós temos o animal e o som, então "tivemos", "a", etc e, finalmente, ", EIEIO" e a corda principal, "10, ...!". Para evitar o uso de muitas aspas, coloquei todas as strings (exceto os parâmetros) em uma string, depois a dividi e joguei a matriz resultante (
'|/~
)A cadeia principal passa pelas seguintes transformações:
substitua
"0"
por", E-I-E-I-O"
:substitua
"1"
por"Old MacDonald765"
:substitua
"2"
por"here"
e depois"3"
por"68 8"
etc.8 corresponde ao som e 9 ao animal.
fonte
E-I-
ser uma string que é então repetida? :)Bash + iconv, 128 caracteres Unicode
Pega o corpo da função pure-bash / ascii abaixo e codifica reversamente em caracteres unicode:
Define uma função de shell
m
. Ligue como:Pure bash, 171 bytes (somente ascii)
Eu acho que vale a pena notar que o verso original (com "vaca" e "moo") tem apenas 203 caracteres.
Define a função shell
m
. Ligue como:fonte
C ++ (403)
Tudo bem, isso é um tiro no escuro, mas quem não gosta de definir demais?
fonte
#define X define
e depois usar#X Y Z
. Infelizmente, esses dias IOCCC inebriantes agora são passado longo ...+
vez de<<
? Ou usando emchar*
vez destring
? // Apenas um deles pode ser usado ao mesmo tempo.Python, 116 caracteres Unicode
O StackOverflow está comendo meus caracteres especiais, então aqui está o arquivo em base64:
Os dados são compactados usando o zlib, que codifica com eficiência sequências repetidas (o zlib é bom para compactar texto em geral). Para tirar proveito da regra "Caracteres Unicode", o pedaço de zlib de 121 bytes é preenchido e dividido pela metade em uma cadeia de caracteres Unicode de 61 caracteres, interpretando a sequência de bytes como UTF-16.
Chame a função como
fonte
.decode('zip')
.)Python, 217
Você não pode realmente jogar tanto. Acabei de tirar a repetição flagrante do front-end e ...
Javascript, 241 - fraude JSCrush
Feito isso com JSCrush ... não é realmente uma resposta real, seria interessante ver se alguém consegue superar isso em uma linguagem convencional. ( EDIT : uh)
fonte
Java, 246
Uso:
f(new String[]{"cow","moo"});
fonte
Java -
262258Otimização adicional é definitivamente possível.
fonte
Perl 5 (UTF-8) - 131 caracteres, 313 bytes
O script abaixo precisa ser salvo como UTF-8 sem BOM.
Uso:
f("cow", "moo");
.O Perl precisa ter sido executado com o
-M5.010
sinalizador para ativar os recursos do Perl 5.10. ( Isso é permitido .)Eu gosto bastante da simetria da contagem de caracteres (131) e da contagem de bytes (313). É muito yin e yang.
Perl 5 (ASCII) - 181 caracteres, 181 bytes
Uso:
f("cow", "moo");
.Novamente, o perl precisa ter sido executado com o
-M5.010
sinalizador para ativar os recursos do Perl 5.10.fonte
CJam (não ASCII) - 77 caracteres
Uso:
"cow""moo"F
A string é minha outra solução CJam convertida da base 127 para a base 56000.
Um de idioma UTF-8 pode ser necessário.
A propósito, agora você pode tentar isso on-line em http://cjam.aditsu.net/
fonte
JavaScript: 152 caracteres / ES6: 149 caracteres
Aqui está uma função JS chamada "z" que faz o trabalho em 214 caracteres. (não execute!)
Eu o "empacotei" em caracteres unicode usando uma técnica criada por @subzey e eu para 140byt.es).
execute o último trecho, chame
z("cow","moo")
e você obterá esta sequência:Mais informações aqui: http://xem.github.io/golfing/en.html#compress
Versão ES6:
fonte
C # - 339 bytes
Uso:
x("cow","moo");
fonte
Rebol,
206202Uso:
f "cow" "moo"
fonte
Delphi XE3 (
272252)Ungolfed
fonte
Lua 237
Ao definir
c=b.." "..b
, posso salvar uma dúzia de caracteres. Ao definird
como eu faço, salvo 23 caracteres. Não vejo mais como diminuir isso. Isso é chamado viaf("<animal>","<sound>")
.fonte
Java 8 (411)
Abusando do lambda, colocou as substituições em um LinkedhashMap para mantê-las em uma ordem definida e, em seguida, usou um lambda foreach para substituir a chave pelo valor na String principal. Os parâmetros são adicionados como 2 últimas substituições no mapa. esse argumento varargs é cortar alguns bytes no cabeçalho do método
Versão não destruída:
fonte
JavaScript 220
Chamado por
fonte
C puro, 298 bytes, sem unicode
Na minha função, adotei um único argumento, que na verdade é um monte de
char*
pacotes. Cada sequência é terminada em nulo e há um terminador nulo extra no final. Isso me permite verificarstrlen(a)
no final de cada loop, em vez de manter uma variável de contador.mcdonald.c:
main.c:
Resultado:
fonte
Cobra - 203
Mesmo para um idioma com regras de recuo múltiplo e estrito, o Cobra ainda se sai muito bem.
fonte
C: 224 bytes
Usando o especificador de precisão printf , podemos usar a mesma string que a string de formato printf e dois dos parâmetros.
Com espaço em branco e a sequência dividida em linhas:
fonte
PHP - 272 caracteres, 272 bytes
Uso:
m("cow", "moo");
,m("fox", "Hatee-hatee-hatee-ho");
Parâmetros com
@#%^<>&*(
falha na saída.fonte
Haskell (282 e ainda um pouco legível :))
O arquivo:
fonte
wc -c
, mas eu prefiro usar mothereff.in/byte-counter e garantir que não haja uma linha vazia no final, a menos que seja necessário para o programa funcionar.ES6, 2 soluções de
179186 caracteres sem nenhum unicodeE o segundo:
Adicionei chamada de alerta (+7 caracteres).
fonte
Caracteres JavaScript (E6) 140
Contador de caracteres: https://mothereff.in/byte-counter , 140 caracteres, 425 bytes em UTF-8
Código ASCII original 188 bytes
Compactado com http://xem.github.io/obfuscatweet/
Teste no console do FireFox / FireBug
Resultado
fonte