古いマクドナルド関数


16

選択した言語で次を出力する関数を作成します。

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!

ここで、cow及びmoo関数のパラメータの文字列であり、そのように変更することができpig及びoink又はsheep及びbaa、例えば。

大文字、ハイフン、句読点、スペース、改行を考慮する必要があります。

コードに最小限のUnicode文字を入力することを目指します。


1
しかし、これはコルモゴロフの複雑さではないでしょうか?
mniip

6
あなたが言うechoes the following。関数はそれを出力するか返すかを意味しますか?
cjfaure

2
これを公平にするために、質問に正確な句読点、スペース、改行を含める必要があると思います。しかし、大文字/小文字についてはどう思いますか?単一のケースの方が簡単で、base64などの標準アプリケーションの負荷を回避できると考えました。結局のところ、唯一の大文字は行の先頭にあり、MacDonaldという単語とEIEIOにあるので、質問ごとに正確にそれを作成する方が面白いかもしれません。
レベルリバーセント

4
出力することは容認a oinkできますan oinkか?
ClickRick

4
@ rybo111:偉大なドナルドクヌースがこの種のことについて学術論文を書いたことを知っていましたか?実際に実際のジャーナルに掲載されました(4月版では確かに)。論文のPDFへのリンクを含む詳細:en.wikipedia.org/wiki/The_Complexity_of_Songs
トムチャントラー

回答:


15

Javascript ES6-204

コードに最小限のUnicode文字を入力することを目指します。

短くはありませんが、おそらく最も難読化されています。

f=(a,b)=>{for(c=[b,a].concat('!,-ADEHIMOWacdefhilmnortvwy \n'.split(o='')),i=62;i;o+=c[e>>10]+c[e/32&31]+c[e&31])e='ⱞᄤ⒇瓤抣瘭㾭癍㚏᫶⦮函࿋Π疽䌐獲樘ྰ㞠戝晐}疽䌐࿈䌐眲Π疽㛏戝癐Π疽伲࿌⒋ფᲉѽ疽䦯䨝抽瘭䦹容㾷碶ᅣᲉᄤྦྷ㜕㞱㗽㾲妴㣗畍⺏'.charCodeAt(--i);alert(o)}

ブラウザがES6をサポートしていない場合:

function f(a,b){for(c=[b,a].concat('!,-ADEHIMOWacdefhilmnortvwy \n'.split(o='')),i=62;i;o+=c[e>>10]+c[e/32&31]+c[e&31])e='ⱞᄤ⒇瓤抣瘭㾭癍㚏᫶⦮函࿋Π疽䌐獲樘ྰ㞠戝晐}疽䌐࿈䌐眲Π疽㛏戝癐Π疽伲࿌⒋ფᲉѽ疽䦯䨝抽瘭䦹容㾷碶ᅣᲉᄤྦྷ㜕㞱㗽㾲妴㣗畍⺏'.charCodeAt(--i);alert(o)}

そのコードをブラウザコンソールにコピー/貼り付けして試してください f('cow','moo')f('pig','oink')f('sheep','baa')

使い方 ?

c29 文字に動物とその音を加えた配列です(これをアルファベットと呼びましょう)。
したがって、31 文字すべてが5ビットに収まります(2 ^ 5 = 32)。
Unicode文字は16ビット長なので、アルファベットの 3文字をパディングビットでエンコードできます。
新しい行を含む全文はアルファベットの 186文字で、62個のUnicode文字でエンコードできます。

たとえば、次のOldようにエンコードされます。

alphabet value         O      l      d
alphabet index         11     20     15
unicode           0  01011  10100  01111  ===> \u2e8f (⺏)

Unicode文字の読み取りに問題がある場合は、Code2000フォントをインストールしてください


2
"cow"そして"moo"、関数のパラメーターであることになっています。呼び出し元に配列を渡すようにさせることで、呼び出しコードの文字数を増やすことを犠牲にして、関数定義内の文字を保存します。これは私にチートのようなにおいがする。そのアプローチを極端に取ってfunction f(a){alert(a)}(23文字)定義し、のように呼び出す必要があると言うことができますf("Old MacDonald had a ...")
tobyink

1
私は2つの別々のパラメータで文字列を渡しましたが、チャレンジを読んだ後、配列形式で文字列を渡さない理由がないので、答えを編集しました。これはごまかしではなく、可能な場合はほんの少しの文字を保存するだけです。@ rybo111に、これがルールに適合するかどうかを判断させます。
マイケルM.

1
@tobyinkルールでは「文字列」という用語(配列ではない)を使用したので、あなたは正しいと思います。「不正行為」は少し厳しいと思います!
rybo111

2
なぜこれは非常に多くの票を持っていますか?200以上あり、最短のJavaScriptソリューションでもありません。
aditsu

thougthよくもそう、私の票を持って説明しWhell
edc65

5

CJam-142 / GolfScript-144

{" had| a |farm|68, |68 8|here|Old MacDonald765|, E-I-E-I-O|10,
And on that 5 he7690,
With3 2 and3 t2,
Here4t24everyw23,
10!"'|/~A,{`/\*}/}:F;

使用法:"cow""moo"F
GolfScriptの場合は'|"|"およびAで置き換えます10

説明:

重要な部分であるA,{`/\*}/
A,{...}/(A = 10)0から9までの各番号のブロックを実行する
`文字列に数値を変換
/\*文字列は置き換えない:我々はスタックに持っている場合"bar" "foo 1 baz" "1"、次に/、その結果の文字列を分割し["foo " " baz"]\前の項目でこの配列をスワップ( "bar")そして*配列を結合し、結果として"foo bar baz"

そのため、このコードは、メイン文字列の各数値を以前にスタックにあった文字列に置き換えます。動物と音があり、それから「持っていた」、「a」など、最後に「、エイエイオ」とメインストリング「10、...!」があります。引用符を使いすぎないように、すべての文字列(パラメーターを除く)を1つの文字列に入れ、それを分割して、結果の配列('|/~

メイン文字列は、次の変換を通過します。

10,
And on that 5 he7690,
With3 2 and3 t2,
Here4t24everyw23,
10!

置き換える"0"", E-I-E-I-O"

1, E-I-E-I-O,
And on that 5 he769, E-I-E-I-O,
With3 2 and3 t2,
Here4t24everyw23,
1, E-I-E-I-O!

置き換える"1""Old MacDonald765"

Old MacDonald765, E-I-E-I-O,
And on that 5 he769, E-I-E-I-O,
With3 2 and3 t2,
Here4t24everyw23,
Old MacDonald765, E-I-E-I-O!

に置き換え"2""here"から、"3""68 8"など

8は音に対応し、9は動物に対応します。


これを説明できますか?私もCJamがあるかわからない
たけ

@Cruncher CJamは私が作った言語sf.net/p/cjamです。ゴルフを終えたら説明できます:)
aditsu

1
@Cruncherが説明を追加しました
aditsu

9
♬そしてその5つについて、彼は6つ、9つ、9つを選択します♬
aditsu

E-I-繰り返される文字列にすることはできますか?:)
rybo111

5

Bash + iconv、128 Unicode文字

以下のpure-bash / ascii関数本体を取り、Unicode文字に逆エンコードします。

m()(c=`iconv -t unicode<<<㵳⁜屡␠ਲ㵨敨敲攊ⰽ⁜ⵅⵉⵅⵉ੏㵯伢摬䴠捡潄慮摬栠摡愠映牡⑭≥攊档␢Ɐ䄊摮漠桴瑡映牡敨栠摡愠␠␱ⱥ圊瑩⑨⁳㈤␠⁨湡⑤⁳㈤琠栤ਬ效敲猤‬⑴⑨ⱳ攠敶祲⑷⑨⁳㈤ਬ漤™ਠ`
eval "${c:2}")

シェル関数を定義しますm。として電話をかける:

$ mポニーネイ
オールドマクドナルドにはEEIIOという農場があり、
そして、その農場で彼はポニー、EIEIO、
ここで隣人とそこに隣人がいると、
ここでは隣人、隣人、どこでも隣人、
古いマクドナルドには、EIEIOの農場がありました!
$ 

純粋なbash、171バイト(asciiのみ)

オリジナルの詩(「牛」と「moo」を含む)はわずか203文字です。

m()(s=\ a\ $2
h=here
e=,\ E-I-E-I-O
o="Old MacDonald had a farm$e"
echo "$o,
And on that farm he had a $1$e,
With$s $2 $h and$s $2 t$h,
Here$s, t$h$s, everyw$h$s $2,
$o"!)

シェル関数を定義しますm。として電話をかける:

$ m羊バア
オールドマクドナルドにはEEIIOという農場があり、
そして、その農場で彼は羊EEIIOを持っていました。
ここにbaa baaとそこにbaa baaがあり、
ここにバー、バー、どこでもバー、
古いマクドナルドには、EIEIOの農場がありました!
$

4

C ++(403)

さて、これは少し長いショットですが、過剰定義が嫌いな人はいますか?

#define O ", E-I-E-I-O"
#define E O<<","
#define I "Old MacDonald had a farm"
#define H(a) "And on that farm he had a "<<a<<E
#define D(s) s<<" "<<s
#define W(s) "With a "<<D(s)<<" here and a "<<D(s)<<" there,"
#define V(s) "Here a "<<s<<", there a "<<s<<", everywhere a "<<D(s)<<","
#define F I<<O<<"!"
#define N endl
void m(string a, string s){cout<<I<<E<<N<<H(a)<<N<<W(s)<<N<<V(s)<<N<<F<<N;}

2
this.eyes.bleeding = true;
プロキシ

これをさらにきめ細かく定義できる定義はありますか?
アインシュタインシチ

1
それはに可能にするために使用#define X defineしてから使用します#X Y Z。悲しいことに、それらの酔わせるようなIOCCCの日は今長い過去です...
nneonneo

+代わりに使用するのは<<どうですか?またはのchar*代わりに使用しstringますか?//同時に使用できるのはこれらの1つだけです。
Qwertiy 14年

2

Python、116 Unicode文字

def f(**a):print u'鱸쿳光䷰癌쿉ы㊲匒ሔ툕謒畲尔㵵䅵忘쮇⼱ⅅ伿⒡넣Ⰴ邩ઑ꩕醪徜妮ꊌ㰺⒳Ⰳ鮕꾟ౙ㎧譒ᕒ끒镈롴쀼怪㪢愐腤닔ꋔ狊兔Ⲹ㾗꽡Ȩ똀䝸å'.encode('u16')[2:].decode('zip')%a

StackOverflowは私の特殊文字を食べていますが、base64のファイルは次のとおりです。

77u/ZGVmIGYoKiphKTpwcmludCB1J+mxuOy/s+WFieS3sOeZjOy/idGL44qy5YyS4YiU7YiV6KyS55Wy5bCU47W15IW15b+Y7K6H4ryx4oWF5Ly/4pKh64Sj4rCE6YKp4KqR6qmV6Yaq5b6c5aau6oqM47C64pKz4rCD6a6V6r6f4LGZ446n6K2S4ZWS74yS64GS6ZWI7pKA66G07IC85oCq46qi5oSQ6IWk64uU6ouU54uK5YWU4rK4476X6r2hyKjrmIDknbjDpScuZW5jb2RlKCd1MTYnKVsyOl0uZGVjb2RlKCd6aXAnKSVh

データはzlibを使用して圧縮されます。zlibは繰り返し文字列を効率的にコーディングします(zlibは一般にテキストの圧縮に適しています)。「Unicode文字」ルールを利用するために、バイト文字列をUTF-16として解釈することにより、121バイトのzlibチャンクがパディングされ、61文字のUnicode文字列に半分になります。

として関数を呼び出す

f(cow='pig', moo='oink')

いいですが、牛とモーは関数パラメータの文字列であり、そのため、たとえば豚とand、羊と馬に変更できます。出力はcow / mooにハードコーディングされているようです。
デジタル外傷

@DigitalTrauma:読解に失敗しました!修繕。
nneonneo

それは良い:) +1
デジタル外傷

115。末尾の改行を数える必要はありません。
nyuszika7h 14年

@ nyuszika7hいいえ、116です。最初に「UTF-8 BOM」(EF BB BF)を数えるのを忘れていました。これはPython 2が非ASCIIソースを受け入れるために必要です。(これはPython 3ではありません.decode('zip')
。Python3

1

Python、217

そんなにゴルフはできません。露骨なフロントエンドの繰り返しを取り出して...

m,f="Old MacDonald had a farm, E-I-E-I-O",lambda x,y:m+",\nAnd on that farm he had a %s, E-I-E-I-O,\nWith a %shere and a %sthere,\nHere a %s, there a %s, everywhere a %s %s,\n%s!"%((x,)+((y+' ')*2,)*2+(y,)*4+(m,))

Javascript、241-JSCrushチート

JSCrushでこれを作りました...本当の答えではありません。主流の言語で誰かがこれを打ち負かすことができるかどうかを見るのは面白いだけです。(編集:ええと)

_='var f=function(c,a){var b=a "+a;return"Anon that he hadcWith  and tHere  t   everyw!"};OlMacDonalhaa a "+, O,\\nhere+"b farm a, d E-I-';for(Y in $=' ')with(_.split($[Y]))_=join(pop());eval(_)

1

Java、246

void f(String[] a){String o="Old MacDonald had a farm",e=", E-I-E-I-O",x=" a "+a[1],s=x+" "+a[1];System.out.print(o+e+",\nAnd on that farm he had a "+a[0]+e+",\nWith"+s+" here and"+s+" there,\nHere"+x+", there"+x+", everywhere"+s+",\n"+o+e+"!");}

使用法: f(new String[]{"cow","moo"});


1

Java- 262 258

void m(String...s){String b=s[1],c=b+" "+b,d="E-I-E-I-O",e="Old MacDonald had a farm, "+d;System.out.print(e+",\n"+"And on that farm he had a "+s[0]+", "+d+",\nWith a "+c+" here and a "+c+" there,\nHere a "+b+", there a "+b+", everywhere a "+c+",\n"+e+"!");}

さらなる最適化は間違いなく可能です。


printf
aditsu

Trevin Averyはこの編集を提案しました:Java-243-void String ... a){String c = "a" + a [1]、d = c + "" + a [1]、e = "、EIEIO"、f = 「古いマクドナルドには農場がありました」+ e; System.out.print(f + "、\ nそしてその農場では、彼は「+ a [0] + e +」、\ nWith" + d + "があり、そこに「+ d +」がありました、\ nHere "+ C +"、そこに"+ C +"」、どこでも"+ D +" \ n "は+ F +" ");}さらなる最適化は間違いなく可能です!
ジャスティン・

1

Perl 5(UTF-8)-131文字、313バイト

以下のスクリプトは、BOMなしでUTF-8として保存する必要があります。

use utf8;use Encode;eval encode ucs2,'獵戠晻③㴤∮灯瀻⑥㴢Ⱐ䔭䤭䔭䤭伢㬤漽≏汤⁍慣䑯湡汤⁨慤⁡⁦慲洤攢㬤ⰽ≥牥⁡∻獡礢⑯Ⰺ䅮搠潮⁴桡琠晡牭⁨攠桡搠愠䁟⑥Ⰺ坩瑨⁡③③⁨␬湤⁡③③⁴桥牥Ⰺ䠤Ⱔ戬⁴栤Ⱔ戬⁥癥特睨␬③③Ⰺ⑯™紱';

使用法:f("cow", "moo");

Perlは-M5.010、Perl 5.10の機能を有効にするフラグを使用して実行されている必要があります。(これは許可されています。)

文字数(131)とバイト数(313)の対称性が非常に気に入っています。それは非常に陰と陽です。

Perl 5(ASCII)-181文字、181バイト

sub f{$b=$".pop;$e=", E-I-E-I-O";$o="Old MacDonald had a farm$e";$,="ere a";say"$o,
And on that farm he had a @_$e,
With a$b$b h$,nd a$b$b there,
H$,$b, th$,$b, everywh$,$b$b,
$o!"}

使用法: f("cow", "moo");

繰り返しますが、-M5.010Perl 5.10の機能を有効にするには、perlをフラグ付きで実行する必要があります。


うーん、おなじみのcodegolf.stackexchange.com/a/26633/11259に見える;-)
デジタル外傷

実際、codegolf.stackexchange.com / a / 26628/12469が私の出発点でした。さらに長さを短縮するいくつかの追加変数をテストし、他の実装のいくつかが使用するUTF16トリックを適用しました。
tobyink

1

CJam(非ASCII)-77文字

"啝裢樃濿䶹讄團챤鋚䖧雿ꆪꆵ䷶텸紎腕Խꍰ搓᩟童䚯⤭刧损⬛豳Ẍ퍾퓱郦퉰怈䡞௳閶蚇⡾쇛蕟猲禼࿆艹蹚㞿䛴麅鞑椢⧨餎쏡첦휽嬴힡ݷ녣㯂鐸㭕"56e3b127b:c~

使用法: "cow""moo"F

文字列はベース127からベース56000に変換された他のCJamソリューションです。
-8ロケールが必要になる場合があります。

ところで、今、あなたはこれをhttp://cjam.aditsu.net/でオンラインで試すことができます


1

JavaScript:152文字/ ES6:149文字

214文字でジョブを実行する「z」と呼ばれるJS関数を次に示します。(実行しないでください!)

function z(a,b){c=' a '+b;d=c+' '+b;e=', E-I-E-I-O';f='Old MacDonald had a farm'+e;return(f+',\nAnd on that farm he had a '+a+e+',\nWith'+d+' here and'+d+' there,\nHere'+c+', there'+c+', everywhere'+d+',\n'+f+'!')}

@subzeyと私が140byt.esで作成した手法を使用して、ユニコード文字で「パック」しました。

eval(unescape(escape('𩡵𫡣𭁩𫱮𘁺𚁡𛁢𚑻𨰽𙰠𨐠𙰫𨠻𩀽𨰫𙰠𙰫𨠻𩐽𙰬𘁅𛑉𛑅𛑉𛑏𙰻𩠽𙱏𫁤𘁍𨑣𡁯𫡡𫁤𘁨𨑤𘁡𘁦𨑲𫐧𚱥𞱲𩑴𭑲𫠨𩠫𙰬𧁮𠑮𩀠𫱮𘁴𪁡𭀠𩡡𬡭𘁨𩐠𪁡𩀠𨐠𙰫𨐫𩐫𙰬𧁮𥱩𭁨𙰫𩀫𙰠𪁥𬡥𘁡𫡤𙰫𩀫𙰠𭁨𩑲𩐬𧁮𢁥𬡥𙰫𨰫𙰬𘁴𪁥𬡥𙰫𨰫𙰬𘁥𭡥𬡹𭱨𩑲𩐧𚱤𚰧𛁜𫠧𚱦𚰧𘐧𚑽').replace(/uD./g,'')))

最後のスニペットを実行してからを呼び出すz("cow","moo")と、次の文字列が取得されます。

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!"

詳細はこちら:http : //xem.github.io/golfing/en.html#compress

ES6バージョン:

eval(unescape(escape('𮠽𚁡𛁢𚐽🡻𨰽𙰠𨐠𙰫𨠻𩀽𨰫𙰠𙰫𨠻𩐽𙰬𘁅𛑉𛑅𛑉𛑏𙰻𩠽𙱏𫁤𘁍𨑣𡁯𫡡𫁤𘁨𨑤𘁡𘁦𨑲𫐧𚱥𞱲𩑴𭑲𫠨𩠫𙰬𧁮𠑮𩀠𫱮𘁴𪁡𭀠𩡡𬡭𘁨𩐠𪁡𩀠𨐠𙰫𨐫𩐫𙰬𧁮𥱩𭁨𙰫𩀫𙰠𪁥𬡥𘁡𫡤𙰫𩀫𙰠𭁨𩑲𩐬𧁮𢁥𬡥𙰫𨰫𙰬𘁴𪁥𬡥𙰫𨰫𙰬𘁥𭡥𬡹𭱨𩑲𩐧𚱤𚰧𛁜𫠧𚱦𚰧𘐧𚑽').replace(/uD./g,'')))

あなたは物事を正しくコピー&ペーストしなかったと思います、あなたのコードは250文字以上を持っているようです-おっと、そうでないかもしれませんが、私のテキストエディタは奇妙に振る舞います、私は調査します。
aditsu

ああ、あなたのキャラクターのほとんどはいくつかのアストラルプレーンからのものです(それがおそらくここで2つのキャラクターとしてカウントされる理由です)...そして未割り当てです。これは少しルールを
拡張し

まあ、これは不正行為だとは思いません。これらのシンボルはUnicode文字であり、2文字としてカウントすべきではありません。また、Twitterはそれぞれを1文字としてカウントします。ツイートでES6バージョンをコピーすると、9文字長すぎます。だから、149それは:)
xem

1

C#-339バイト

void x(string c, string d){var a="Old MacDonald had a farm";var b=", E-I-E-I-O";var f=" a ";var g=" there";Debug.WriteLine(a+b+",");Debug.WriteLine("And on that farm he had"+f+c+b+",");Debug.WriteLine("With"+f+d+" "+d+" here and"+f+d+" "+d+g+",");Debug.WriteLine("Here"+f+d+","+g+f+d+", everywhere"+f+d+" "+d+",");Debug.WriteLine(a+b+"!");

使用法: x("cow","moo");


1

Rebol、206 202

f: func[a b][print reword{$o$e,
And on that farm he had a $a$e,
With a $b $b here and a $b $b there,
Here a $b, there a $b, everywhere a $b $b,
$o$e!}[e", E-I-E-I-O"o"Old MacDonald had a farm"a a b b]]

使用法: f "cow" "moo"


0

Delphi XE3(272 252)

procedure k(a,s:string);const o='Old MacDonald had a farm';e=', E-I-E-I-O';n=','#13#10;begin s:=' '+s;write(o+e+n+'And on that farm he had a '+a+e+n+'With a'+s+s+' here and a'+s+s+' there'+n+'Here a'+s+', there a'+s+' every where a'+s+s+n+o+e+'!');end;

非ゴルフ

procedure k(a,s:string);
const
  o='Old MacDonald had a farm';
  e=', E-I-E-I-O';
  n=','#13#10;
begin
  s:=' '+s;
  write(o+e+n+'And on that farm he had a '+a+e+n+'With a'+s+s+' here and a'+s+s+' there'+n+'Here a'+s+', there a'+s+' every where a'+s+s+n+o+e+'!');
end;

0

ルア237

function f(a,b)c=b.." "..b;d="Old MacDonald had a farm, E-I-E-I-O"print(d..",\nAnd on that farm he had a "..a..", E-I-E-I-O,\nWith a "..c.." here and a "..c.." there,\nHere a "..b..", there a "..b..", everywhere a "..c..",\n"..d.."!")end

を定義することc=b.." "..bで、12個の文字を保存できます。定義することによりd、23文字を保存します。これをどのように短縮できるかわかりません。これは経由で呼び出されf("<animal>","<sound>")ます。


0

Java 8(411)

String m(String...m){LinkedHashMap<String,String>n=new LinkedHashMap<>();n.put("/","( * #, -");n.put("#","farm");n.put("-","E-I-E-I-O");n.put("+","here");n.put("*","had a");n.put("(","Old MacDonald");n.put("|"," a )");n.put(")","moo");n.put("moo",m[1]);n.put("cow",m[0]);m[0]="/,\nAnd on that # he * cow, -,\nWith|) + and|) t+,\nHere|, t+|, everyw+|),\n/!";n.forEach((k,v)->m[0]=m[0].replace(k,v));return m[0];}

ラムダを乱用し、置換をLinkedhashMapに入れて定義された順序でemを維持し、次にforeachラムダを使用してキーをメイン文字列の値に置き換えました。パラメータは、マップの最後の2つの置換として追加されます。そのvarargs引数は、メソッドヘッダーの一部のバイトを削除することです

ゴルフされていないバージョン:

String m(String... m)
{
    LinkedHashMap<String, String> n = new LinkedHashMap<>();
    n.put("/", "( * #, -");
    n.put("#", "farm");
    n.put("-", "E-I-E-I-O");
    n.put("+", "here");
    n.put("*", "had a");
    n.put("(", "Old MacDonald");
    n.put("|", " a )");
    n.put(")", "moo");
    n.put("moo", m[1]);
    n.put("cow", m[0]);
    m[0] = "/,\nAnd on that # he * cow, -,\nWith|) + and|) t+,\nHere|, t+|, everyw+|),\n/!";
    n.forEach((k, v) -> m[0] = m[0].replace(k, v));
    return m[0];
}

0

JavaScript 220

function f(a,b){c=' a '+b;d=c+' '+b;e=', E-I-E-I-O';f='Old MacDonald had a farm'+e;console.log(f+',\nAnd on that farm he had a '+a+e+',\nWith'+d+' here and'+d+' there,\nHere'+c+', there'+c+', everywhere'+d+',\n'+f+'!');}

によって呼び出された

f('cow', 'moo');

0

ピュアC、298バイト、ユニコードなし

私の関数では、単一の引数を取ります。これは、実際にはの束がchar*まとめられています。各文字列はnullで終了し、最後に余分なnullターミネーターがあります。これにより、確認することができますstrlen(a)、カウンター変数を保持するのではなく、各ループの最後でます。

mcdonald.c:

m(char*a){while(strlen(a)){printf("Old MacDonald had a farm, E-I-E-I-O\nAnd on that farm he had a %s, E-I-E-I-O,\nWith a ",a);a+=strlen(a)+1;printf("%s %s here and a %s %s there,\nHere a %s, there a %s, everywhere a %s %s,\nOld MacDonald had a farm, E-I-E-I-O!\n",a,a,a,a,a,a,a,a);a+=strlen(a)+1;}}

main.c:

int m(char *v);
int main(int argc, char **argv) {
    m("cow\0moo\0programmer\0meh\0\0");
    return 0;
}

出力:

clang main.c mcdonald.c && ./a.out
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!
Old MacDonald had a farm, E-I-E-I-O
And on that farm he had a programmer, E-I-E-I-O,
With a meh meh here and a meh meh there,
Here a meh, there a meh, everywhere a meh meh,
Old MacDonald had a farm, E-I-E-I-O!

0

コブラ-203

def f(a,b)
    d=" a [b] "+b
    e=", E-I-E-I-O"
    m="Old MacDonald had a farm[e]"
    print "[m],\nAnd on that farm he had a [a][e],\nWith[d] here and[d] there,\nHere a [b], there a [b], everywhere[d],\n[m]!"

マルチライニングがほとんどまたはまったくない言語、および厳密なインデント規則を備えた言語であっても、Cobraは依然として非常にうまく機能します。


0

C:224バイト

printf精度指定子を使用することにより、printf形式の文字列と2つのパラメーターの両方として同じ文字列を使用できます。

o(char*x,char*y){char*f="Old MacDonald had a farm, E-I-E-I-O,\nAnd on that farm he had a %s%.13sWith a %s %s here and a %s %s there,\nHere a %s, there a %s, everywhere a %s %s,\n%.35s!\n";printf(f,x,f+24,y,y,y,y,y,y,y,y,f);}

空白と文字列が行に分割されている場合:

o(char* x, char* y)
{
    char* f=
        "Old MacDonald had a farm, E-I-E-I-O,\n"
        "And on that farm he had a %s%.13s"
        "With a %s %s here and a %s %s there,\n"
        "Here a %s, there a %s, everywhere a %s %s,\n"
        "%.35s!\n";

    printf(f,x,f+24,y,y,y,y,y,y,y,y,f);
}

0

PHP-272文字、272バイト

function m($q,$w){for($e="@&And on that farm he had^<%&With *h# and*th#&H(th(everywh#^> >&@!",$r=1;;$e=$r){$r=str_replace(["@","#","^","%","<",">","&","*","("],["Old MacDonald had^farm%","ere"," a ",", E-I-E-I-O",$q,$w,",\n","^> > ","#^>, "],$e);if($e==$r)break;}echo $e;}

使用法:m("cow", "moo");m("fox", "Hatee-hatee-hatee-ho");

@#%^<>&*(出力がクラッシュするパラメーター。


0

Haskell(282でもまだ多少読みやすい:))

wc -c oldmacdonald.hs
     282 oldmacdonald.hs

ファイル:

main=mapM putStrLn[s"cow""moo",s"pig""oink",s"sheep""baa"]
s c m=o#",\nAnd on that farm he had"#b c#e#let n=m#" "#m in",\nWith"#b n#" here and"#b n#" there,\nHere"#b m#", there"#b m#", everywhere"#b n#",\n"#o#"!\n"
o="Old MacDonald had a farm"#e
e=", E-I-E-I-O"
b=(" a "#)
(#)=(++)

Cのプリプロセッサマクロまたは改行の終了を必要とするその他のものでない限り、通常は末尾の改行をカウントしません。ほとんどの場合、によって返されるバイトカウントから1を引くだけで済みますがwc -cmothereff.in / byte-counterを使用し、プログラムが機能するために必要でない限り、最後に空行がないことを確認することをお勧めします。
nyuszika7h 14年

0

ES6、2つのソリューション Unicodeなし 179 186文字の

f=(a,b)=>alert("325And on that farm he had a025With a11 h4nd a11 th45H41, th41, everywh411532!".replace(/\d/g,x=>[" "+a," "+b,", E-I-E-I-O","Old MacDonald had a farm","ere a",",\n"][x]))

2番目:

f=(a,b)=>alert("3625And on7at6 he ha8025With a11 h4n811745H41,741, everywh4115362!".replace(/\d/g,x=>(` ${a}0 ${b}0, E-I-E-I-O0Old MacDonald had a0ere a0,\n0 farm0 th0d a`).split(0)[x]))

アラートコール(+7文字)を追加しました。


今のところ、ユニコード化されていないものからの最短の解決策だと思います。
Qwertiy 14年

0

JavaScript(E6)140文字

文字カウンター:https : //mothereff.in/byte-counter、140文字、UTF-8で425バイト

eval(unescape(escape('𩠽𚁡𛁢𚐽🡡𫁥𬡴𚀧𜀱𜠵𠑮𩀠𫱮𘀶𨑴𜐳𩐳𨑤𝰠𞐲𝑗𪐶𘁡𞀸𜰴𝱮𩀠𨐸𞀠𝠴𝑈𝀷𞀬𘀶𝀷𞀬𘁥𭡥𬡹𭱨𝀷𞀸𝐰𜐲𘐧𛡲𩑰𫁡𨱥𚀯𧁤𛱧𛁣🐾𚀧𣱬𩀠𣑡𨱄𫱮𨑬𩀠𪁡𩀠𨐰𘁦𨑲𫐰𛀠𡐭𢐭𡐭𢐭𣰰𘁨𜁥𬡥𜀬𧁮𜁴𪀰𘁡𜀠𙰫𨠫𜀫𨐩𛡳𬁬𪑴𚀰𚑛𨱝𚐩𒠠').replace(/uD./g,'')))

元のASCIIコード188バイト

f=(a,b)=>alert('0125And on 6at13e3ad7 925Wi6 a88347nd a88 645H478, 6478, everywh47885012!'.replace(/\d/g,c=>('Old MacDonald had a0 farm0, E-I-E-I-O0 h0ere0,\n0th0 a0 '+b+0+a).split(0)[c]))

http://xem.github.io/obfuscatweet/で圧縮

FireFox / FireBugコンソールでテストする

f('mosquito','zzz')

出力

Old MacDonald had a farm, E-I-E-I-O,
And on that farm he had a mosquito, E-I-E-I-O,
With a zzz zzz here and a zzz zzz there,
Here a zzz, there a zzz, everywhere a zzz zzz,
Old MacDonald had a farm, E-I-E-I-O!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.