Créez une fonction dans la langue de votre choix qui imprime ce qui suit:
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!
Où cow
et où moo
sont les chaînes dans les paramètres de fonction, et en tant que telles, peuvent être changées en pig
et oink
ou sheep
et baa
et par exemple.
Il doit prendre en compte les majuscules, les tirets, la ponctuation, les espaces et les sauts de ligne.
Essayez de taper le moins de caractères Unicode dans votre code.
echoes the following
. Voulez-vous dire que la fonction doit l'imprimer ou la renvoyer?a oink
ou devrait-on le fairean oink
?Réponses:
Javascript ES6 - 204
Pas le plus court mais probablement le plus obscur.
Si votre navigateur ne prend pas en charge ES6:
Copier / Coller ce code dans votre console de navigateur et essayez
f('cow','moo')
,f('pig','oink')
,f('sheep','baa')
Comment ça fonctionne ?
c
est un tableau de 29 lettres plus l'animal et son son (appelons cela notre alphabet ).Ainsi, tous les 31 caractères tiennent sur 5 bits (2 ^ 5 = 32).
Un caractère Unicode mesure 16 bits, il peut donc coder 3 caractères de notre alphabet avec un bit de remplissage.
Le texte complet avec les nouvelles lignes est de 186 caractères de notre alphabet , il peut être encodé avec 62 caractères Unicode.
Par exemple,
Old
est codé comme ceci:Si vous rencontrez des problèmes pour lire certains caractères Unicode, installez la police Code2000
la source
"cow"
et"moo"
sont censés être les paramètres de la fonction. En demandant à l'appelant de passer un tableau, vous enregistrez des caractères dans la définition de fonction au détriment de l'ajout au nombre de caractères du code appelant. Cela me sent comme une triche. En prenant cette approche à l'extrême, vous pouvez définirfunction f(a){alert(a)}
(23 caractères) et dire qu'elle doit être appelée commef("Old MacDonald had a ...")
.CJam - 142 / GolfScript - 144
Utilisation:
"cow""moo"F
Pour GolfScript, remplacez
'|
par"|"
etA
par10
Explication:
La partie clé est
A,{`/\*}/
:A,{...}/
exécute le bloc pour chaque nombre de 0 à 9 (A = 10)`
convertit le nombre en/\*
chaîne remplace une chaîne: si nous avons sur la pile"bar" "foo 1 baz" "1"
puis/
divise la chaîne résultant en["foo " " baz"]
,\
échange ce tableau avec l'élément précédent ("bar") et*
rejoint le tableau résultant en"foo bar baz"
Ainsi, le code remplace chaque numéro de la chaîne principale par une chaîne qui se trouvait précédemment sur la pile. Nous avons l'animal et le son, puis "had", "a", etc et enfin ", EIEIO" et la corde principale, "10, ...!". Pour éviter d'utiliser trop de guillemets, j'ai mis toutes les chaînes (sauf les paramètres) dans une seule chaîne, puis je l'ai séparée et j'ai vidé le tableau résultant (
'|/~
)La chaîne principale passe par les transformations suivantes:
remplacer
"0"
par", E-I-E-I-O"
:remplacer
"1"
par"Old MacDonald765"
:remplacer
"2"
par"here"
, puis"3"
par"68 8"
etc.8 correspond au son et 9 à l'animal.
la source
E-I-
être une chaîne qui est ensuite répétée? :)Bash + iconv, 128 caractères Unicode
Prend le corps de la fonction pure-bash / ascii ci-dessous et encode à l'envers en caractères unicode:
Définit une fonction shell
m
. Appelez comme:Pure bash, 171 octets (ascii uniquement)
Je pense qu'il vaut la peine de noter que le couplet original (avec "vache" et "moo") n'est que de 203 caractères.
Définit la fonction shell
m
. Appelez comme:la source
C ++ (403)
D'accord, c'est un peu long, mais qui n'aime pas trop définir?
la source
#define X define
utiliser, puis de l'utiliser#X Y Z
. Malheureusement, ces jours grisants de l'IOCCC sont désormais révolus ...+
au lieu de<<
? Ou en utilisantchar*
au lieu destring
? // Un seul d'entre eux peut être utilisé en même temps.Python, 116 caractères Unicode
StackOverflow mange mes caractères spéciaux, alors voici le fichier en base64:
Les données sont compressées à l'aide de zlib, qui code efficacement les chaînes répétées (zlib est bon pour compresser du texte en général). Pour tirer parti de la règle des "caractères Unicode", le bloc zlib de 121 octets est rembourré et réduit de moitié en une chaîne Unicode de 61 caractères en interprétant le bytestring comme UTF-16.
Appelez la fonction comme
la source
.decode('zip')
.)Python, 217
Vous ne pouvez pas vraiment beaucoup jouer au golf. Je viens de supprimer la répétition frontale flagrante et ...
Javascript, 241 - Triche JSCrush
Fabriqué avec JSCrush ... pas vraiment une vraie réponse, il serait juste intéressant de voir si quelqu'un peut battre cela dans un langage courant. ( MODIFIER : euh)
la source
Java, 246
Usage:
f(new String[]{"cow","moo"});
la source
Java -
262258Une optimisation supplémentaire est certainement possible.
la source
Perl 5 (UTF-8) - 131 caractères, 313 octets
Le script ci-dessous doit être enregistré au format UTF-8 sans nomenclature.
Utilisation:
f("cow", "moo");
.Perl doit avoir été exécuté avec l'
-M5.010
indicateur pour activer les fonctionnalités de Perl 5.10. ( C'est permis .)J'aime bien la symétrie du nombre de caractères (131) et du nombre d'octets (313). C'est très yin et yang.
Perl 5 (ASCII) - 181 caractères, 181 octets
Utilisation:
f("cow", "moo");
.Encore une fois, perl doit avoir été exécuté avec l'
-M5.010
indicateur pour activer les fonctionnalités de Perl 5.10.la source
CJam (non ASCII) - 77 caractères
Usage:
"cow""moo"F
La chaîne est mon autre solution CJam convertie de la base 127 à la base 56000.
Une locale UTF-8 peut être requise.
Au fait, vous pouvez maintenant essayer ceci en ligne sur http://cjam.aditsu.net/
la source
JavaScript: 152 caractères / ES6: 149 caractères
Voici une fonction JS appelée "z" qui fait le travail en 214 caractères. (ne l'exécutez pas!)
Je l'ai "emballé" en caractères unicode en utilisant une technique créée par @subzey et moi pour 140byt.es).
exécutez ce dernier extrait, puis appelez
z("cow","moo")
, et vous obtiendrez cette chaîne:Plus d'informations ici: http://xem.github.io/golfing/en.html#compress
Version ES6:
la source
C # - 339 octets
Usage:
x("cow","moo");
la source
Rebol,
206202Usage:
f "cow" "moo"
la source
Delphi XE3 (
272252)Non golfé
la source
Lua 237
En définissant
c=b.." "..b
, je peux enregistrer une douzaine de caractères. En définissantd
comme je le fais, j'enregistre 23 caractères. Je ne vois plus comment raccourcir cela. Cela s'appelle viaf("<animal>","<sound>")
.la source
Java 8 (411)
En abusant de lambda, mis les remplacements dans un LinkedhashMap pour les garder dans un ordre défini, puis utilisé un foreach lambda pour remplacer la clé par la valeur dans la chaîne principale. les paramètres sont ajoutés en tant que 2 derniers remplacements dans la carte. cet argument varargs est de raser certains octets dans l'en-tête de la méthode
Version non golfée:
la source
JavaScript 220
Appelé par
la source
C pur, 298 octets, pas d'unicode
Dans ma fonction, je prends un seul argument, qui est en fait un tas de
char*
emballés ensemble. Chaque chaîne est terminée par null et il y a un terminateur null supplémentaire à la fin. Cela me permet de vérifierstrlen(a)
à la fin de chaque boucle, plutôt que de conserver une variable de compteur.mcdonald.c:
principal c:
Production:
la source
Cobra - 203
Même pour une langue avec peu ou pas de lignes multiples et des règles strictes d'indentation, Cobra se débrouille toujours assez bien.
la source
C: 224 octets
En utilisant le spécificateur de précision printf , nous pouvons utiliser la même chaîne que la chaîne de format printf et deux des paramètres.
Avec un espace blanc et la chaîne divisée en lignes:
la source
PHP - 272 caractères, 272 octets
Utilisation:
m("cow", "moo");
,m("fox", "Hatee-hatee-hatee-ho");
Les paramètres avec
@#%^<>&*(
plantent la sortie.la source
Haskell (282 et encore quelque peu lisible :))
Le fichier:
la source
wc -c
, mais je préfère utiliser mothereff.in/byte-counter et m'assurer qu'il n'y a pas de ligne vide à la fin, sauf si le programme fonctionne.ES6, 2 solutions de
179186 caractères sans unicodeEt le deuxième:
J'ai ajouté un appel d'alerte (+7 caractères).
la source
JavaScript (E6) 140 caractères
Compteur de caractères: https://mothereff.in/byte-counter , 140 caractères, 425 octets en UTF-8
Code ASCII d'origine 188 octets
Compressé avec http://xem.github.io/obfuscatweet/
Test dans la console FireFox / FireBug
Production
la source