Chức năng MacDonald cũ


16

Tạo một chức năng trong ngôn ngữ bạn đã chọn in ra như sau:

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!

Trường hợp cowmoolà các chuỗi trong các tham số chức năng, và như vậy, có thể được thay đổi thành pigoinkhoặc sheep, và baa, ví dụ.

Nó nên đưa vào tài khoản chữ hoa, dấu gạch nối, dấu chấm câu, dấu cách và dấu ngắt dòng.

Nhằm mục đích nhập số lượng ký tự Unicode ít nhất trong mã của bạn.


1
Đây không phải là phức tạp kolmogorov mặc dù?
mniip

6
Bạn nói echoes the following. Bạn có nghĩa là chức năng nên in nó ra hoặc trả lại?
cjfaure

2
Để làm cho công bằng này, tôi nghĩ rằng điều này nên có dấu câu chính xác, dấu cách và trả lại vận chuyển trong câu hỏi. Nhưng bạn nghĩ gì về chữ hoa / chữ thường? Tôi nghĩ rằng một trường hợp duy nhất có thể dễ dàng hơn và tránh tải các ứng dụng tiêu chuẩn của Base64 hoặc tương tự. Về cân bằng, các chữ viết hoa duy nhất nằm ở đầu dòng, từ MacDonald và trong EIEIO, vì vậy có thể sẽ thú vị hơn khi đưa ra chính xác cho mỗi câu hỏi.
Cấp sông St

4
Có thể chấp nhận đầu ra a oinkhay nên được thực hiện an oink?
ClickRick

4
@ rybo111: Bạn có biết rằng Donald Knuth vĩ đại đã viết một bài báo học thuật về loại điều này không? Nó thực sự đã được xuất bản trong một tạp chí thực sự (thừa nhận trong phiên bản tháng tư). Thêm ở đây bao gồm một liên kết đến PDF của bài báo: en.wikipedia.org/wiki/The_Complexity_of_Songs
Tom Chantler

Câu trả lời:


15

Javascript ES6 - 204

Nhằm mục đích nhập số lượng tự Unicode ít nhất trong mã của bạn.

Không phải ngắn hơn nhưng có lẽ là khó hiểu nhất.

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)}

Nếu trình duyệt của bạn không hỗ trợ 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)}

Sao chép / Dán mã đó vào bảng điều khiển trình duyệt của bạn và thử f('cow','moo'), f('pig','oink').f('sheep','baa')

Làm thế nào nó hoạt động ?

clà một mảng gồm 29 chữ cái cộng với động vật và âm thanh của nó (hãy gọi đây là bảng chữ cái của chúng tôi ).
Vì vậy, tất cả 31 ký tự vừa với 5 bit (2 ^ 5 = 32).
Một ký tự Unicode dài 16 bit, vì vậy nó có thể mã hóa 3 ký tự của bảng chữ cái của chúng tôi bằng một bit đệm.
Toàn văn với các dòng mới là 186 ký tự của bảng chữ cái của chúng tôi , nó có thể được mã hóa với 62 ký tự Unicode.

Ví dụ: Oldđược mã hóa như thế này:

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

Nếu bạn gặp khó khăn khi đọc một số ký tự Unicode, hãy cài đặt phông chữ Code2000


2
"cow""moo"được cho là các tham số chức năng. Bằng cách khiến người gọi vượt qua một mảng, bạn đang lưu các ký tự trong định nghĩa hàm với chi phí thêm vào số ký tự của mã cuộc gọi. Điều này có mùi giống như một gian lận với tôi. Theo cách tiếp cận đó đến mức cực đoan, bạn có thể xác định function f(a){alert(a)}(23 ký tự) và nói rằng nó cần được gọi như thế nào f("Old MacDonald had a ...").
tobyink

1
Tôi đã vượt qua các chuỗi trong hai tham số riêng biệt nhưng sau khi đọc thử thách, tôi thấy không có lý do gì để không vượt qua các chuỗi ở định dạng mảng, vì vậy tôi đã chỉnh sửa câu trả lời của mình. Đây không phải là gian lận, chỉ tiết kiệm vài ký tự khi có thể. Hãy để @ rybo111 quyết định xem điều này có phù hợp với quy tắc hay không.
Michael M.

1
@tobyink Tôi đã sử dụng thuật ngữ 'chuỗi' (không phải mảng) trong các quy tắc, vì vậy tôi cho rằng bạn đúng. Tuy nhiên, tôi nghĩ rằng 'gian lận' là một chút khắc nghiệt!
rybo111

2
Tại sao điều này có nhiều phiếu bầu? Đó là hơn 200 và thậm chí không phải là giải pháp javascript ngắn nhất.
aditsu

Whell thougth và giải thích tốt vì vậy cũng có phiếu bầu của tôi
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;

Cách sử dụng: "cow""moo"F
Đối với GolfScript, thay thế '|bằng "|"Abằng10

Giải trình:

Phần quan trọng là A,{`/\*}/:
A,{...}/thực thi khối cho mỗi số từ 0 đến 9 (A = 10)
`chuyển đổi số thành
/\*chuỗi thay thế chuỗi: nếu chúng ta có trên ngăn xếp "bar" "foo 1 baz" "1"thì /tách chuỗi dẫn đến ["foo " " baz"], \hoán đổi mảng này với mục trước ("bar") và *tham gia mảng dẫn đến"foo bar baz"

Vì vậy, mã thay thế mỗi số trong chuỗi chính bằng một chuỗi trước đó trên ngăn xếp. Chúng tôi có động vật và âm thanh, sau đó "đã", ​​"a", vv và cuối cùng là ", EIEIO" và chuỗi chính, "10, ...!". Để tránh sử dụng quá nhiều dấu ngoặc kép, tôi đặt tất cả các chuỗi (trừ các tham số) vào một chuỗi, sau đó tách nó và đổ mảng kết quả ( '|/~)

Chuỗi chính trải qua các biến đổi sau:

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

thay thế "0"bằng ", 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!

thay thế "1"bằng "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!

thay thế "2"bằng "here", sau đó "3"với "68 8"vv

8 tương ứng với âm thanh, và 9 tương ứng với động vật.


Bạn có thể giải thích điều này? Tôi thậm chí còn không biết CJam là gì
Cruncher

@Cruncher CJam là ngôn ngữ tôi tạo ra, sf.net/p/cjam ; Tôi có thể giải thích điều đó một khi tôi hoàn thành việc chơi gôn :)
aditsu

1
@Cruncher thêm lời giải thích ngay bây giờ
aditsu

9
Và vào năm đó anh ấy bảy giờ sáu giờ, ze eee ro
aditsu

Có thể E-I-là một chuỗi mà sau đó được lặp lại? :)
rybo111

5

Bash + iconv, 128 ký tự Unicode

Lấy phần thân hàm bash / ascii thuần túy bên dưới và mã hóa ngược thành ký tự unicode:

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

Xác định hàm shell m. Gọi như:

$ m ngựa neigh
MacDonald cũ có một trang trại, EIEIO,
Và trong trang trại đó, anh ta có một con ngựa, EIEIO,
Với một neigh neigh ở đây và một neigh neigh ở đó,
Ở đây một neigh, có một neigh, ở khắp mọi nơi một neigh neigh,
MacDonald cũ đã có một trang trại, EIEIO!
$ 

Bash thuần, 171 byte (chỉ ascii)

Tôi nghĩ rằng đáng chú ý rằng câu gốc (với "bò" và "moo") chỉ là 203 ký tự.

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

Xác định hàm shell m . Gọi như:

$ m cừu baa
MacDonald cũ có một trang trại, EIEIO,
Và trong trang trại đó, anh ta có một con cừu, EIEIO,
Với một baa baa ở đây và một baa baa ở đó,
Ở đây một baa, có một baa, ở khắp mọi nơi một baa,
MacDonald cũ đã có một trang trại, EIEIO!
$

4

C ++ (403)

Được rồi, đây là một chút của một cú sút xa, nhưng ai lại không thích định nghĩa quá mức?

#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.bleting = true;
Proxy

Bất kỳ định nghĩa có thể đóng gói này chặt chẽ hơn?
einsteinsci

1
Nó được sử dụng để có thể #define X definevà sau đó sử dụng #X Y Z. Đáng buồn thay, những ngày IOCCC bá đạo đó đã qua rất lâu ...
nneonneo

Còn việc sử dụng +thay vì <<? Hoặc sử dụng char*thay vì string? // Chỉ một trong số này có thể được sử dụng cùng một lúc.
Qwertiy

2

Python, 116 ký tự Unicode

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

Tuy nhiên, StackOverflow đang ăn các ký tự đặc biệt của tôi, vì vậy đây là tệp trong cơ sở64:

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

Dữ liệu được đóng gói bằng zlib, mã hóa hiệu quả các chuỗi lặp lại (zlib rất tốt trong việc nén văn bản nói chung). Để tận dụng quy tắc "Ký tự Unicode", đoạn mã zlib 121 byte được đệm và giảm một nửa thành chuỗi Unicode 61 ký tự bằng cách hiểu cách viết tắt là UTF-16.

Gọi hàm là

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

Đẹp, nhưng Trường hợp bò và moo là các chuỗi trong các tham số chức năng, và như vậy, có thể được thay đổi thành lợn và oink hoặc cừu và baa, ví dụ . Có vẻ như đầu ra của bạn được mã hóa cứng thành bò / moo.
Chấn thương kỹ thuật số

@DigitalTrauma: Đọc hiểu của tôi thất bại! Đã sửa.
nneonneo

đó là tốt hơn :) +1
Chấn thương kỹ thuật số

115 . Không cần phải đếm dòng mới.
nyuszika7h

@ nyuszika7h Không, đó là 116. Bạn đã quên đếm BÙA UTF-8 BOM (EF BB BF) ngay từ đầu, điều này là cần thiết để Python 2 chấp nhận nguồn không phải ASCII. (Đây không phải là Python 3, không có .decode('zip').)
Anders Kaseorg

1

Con trăn, 217

Bạn không thể thực sự chơi golf nhiều như vậy. Tôi vừa lấy ra sự lặp lại trắng trợn và ...

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 - Công ty cổ phần gian lận

Thực hiện điều này với JSCrush ... không thực sự là một câu trả lời thực sự, thật thú vị để xem liệu có ai có thể đánh bại điều này bằng ngôn ngữ chính hay không. ( EDIT : ừ)

_='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+"!");}

Sử dụng: 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+"!");}

Tối ưu hóa hơn nữa là chắc chắn có thể.


Bạn có thể sử dụng printf
aditsu

Trevin Avery đã đề xuất chỉnh sửa này: Java - 243 - void String ... a) {String c = "a" + a [1], d = c + "" + a [1], e = ", EIEIO", f = "MacDonald cũ có một trang trại" + e; System.out.print (f + ", \ nVà trang trại đó anh ấy có" + a [0] + e + ", \ nWith" + d + "ở đây và" + d + "ở đó , \ nCó "+ c +", có "+ c +" ', ở mọi nơi "+ d +", \ n "+ f +"! ");} Tối ưu hóa thêm là hoàn toàn có thể
Justin

1

Perl 5 (UTF-8) - 131 ký tự, 313 byte

Kịch bản dưới đây cần được lưu dưới dạng UTF-8 không có BOM.

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

Cách sử dụng : f("cow", "moo");.

Perl cần phải được chạy với -M5.010cờ để kích hoạt các tính năng Perl 5.10. ( Điều này được cho phép .)

Tôi khá thích tính đối xứng của số ký tự (131) và số byte (313). Nó rất âm dương.

Perl 5 (ASCII) - 181 ký tự, 181 byte

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

Cách sử dụng : f("cow", "moo");.

Một lần nữa, perl cần phải được chạy với -M5.010cờ để kích hoạt các tính năng Perl 5.10.



Trên thực tế codegolf.stackexchange.com/a/26628/12469 là điểm khởi đầu của tôi. Tôi đã thử nghiệm thêm một vài biến số giúp cắt giảm độ dài hơn nữa, và sau đó áp dụng thủ thuật UTF16 mà một số cách triển khai khác sử dụng.
tobyink

1

CJam (không phải ASCII) - 77 ký tự

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

Sử dụng: "cow""moo"F

Chuỗi là giải pháp CJam khác của tôi được chuyển đổi từ cơ sở 127 sang cơ sở 56000.
Có thể cần một ngôn ngữ UTF-8.

Nhân tiện, bây giờ bạn có thể thử trực tuyến này tại http://cjam.aditsu.net/


1

JavaScript: 152 ký tự / ES6: 149 ký tự

Đây là một hàm JS được gọi là "z", thực hiện công việc trong 214 ký tự. (đừng thực hiện nó!)

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+'!')}

Tôi "đóng gói" nó trong các ký tự unicode bằng cách sử dụng một kỹ thuật được tạo bởi @subzey và tôi cho 140byt.es).

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

thực hiện đoạn mã cuối cùng đó, sau đó gọi z("cow","moo")và bạn sẽ nhận được chuỗi này:

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

Thêm thông tin ở đây: http://xem.github.io/golfing/en.html#compress

Phiên bản ES6:

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

Tôi nghĩ rằng bạn đã không sao chép-dán chính xác mọi thứ, mã của bạn dường như có hơn 250 ký tự - rất tiếc, có thể không, nhưng trình soạn thảo văn bản của tôi đang hành xử kỳ lạ, tôi sẽ điều tra.
aditsu

Ồ, hầu hết các nhân vật của bạn đến từ một số máy bay thiên văn (có lẽ đó là lý do tại sao họ được tính là 2 nhân vật ở đây) ... và cũng không được phân bổ. Điều này đang kéo dài các quy tắc một chút :)
aditsu

Chà, tôi không nghĩ đây là gian lận: những biểu tượng đó là ký tự unicode và không nên tính là 2 ký tự. Ngoài ra, Twitter tính mỗi người trong số họ là 1 char. Nếu bạn sao chép phiên bản ES6 trong một tweet, nó cho biết nó quá dài bằng 9 ký tự. Vì vậy, 149 đó là :)
xem

1

C # - 339 byte

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+"!");

Sử dụng: x("cow","moo");


1

Nổi loạn, 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]]

Sử dụng: 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;

Bị đánh cắp

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

Lua 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

Bằng cách xác định c=b.." "..b, tôi có thể lưu một tá ký tự. Bằng cách xác định dnhư tôi làm, tôi lưu 23 ký tự. Tôi không thấy làm thế nào tôi có thể rút ngắn điều này nữa. Điều này được gọi thông qua 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];}

Lạm dụng lambda, đưa các thay thế vào LinkedhashMap để giữ em theo thứ tự xác định sau đó sử dụng lambda foreach để thay thế khóa bằng giá trị trong Chuỗi chính. các tham số được thêm vào như 2 lần thay thế cuối cùng trong bản đồ. đối số varargs đó là để loại bỏ một số byte trong tiêu đề phương thức

Phiên bản bị đánh cắp:

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+'!');}

Gọi bằng

f('cow', 'moo');

0

Pure C, 298 byte, không có unicode

Trong chức năng của mình, tôi lấy một đối số duy nhất, thực sự là một nhóm các char*gói được đóng gói cùng nhau. Mỗi chuỗi bị hủy kết thúc và có thêm một kết thúc null ở cuối. Điều này cho phép tôi kiểm trastrlen(a) ở cuối mỗi vòng lặp, thay vì giữ một biến đếm.

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;}}

C chính:

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

Đầu ra:

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

Rắn hổ mang - 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]!"

Ngay cả đối với một ngôn ngữ có ít hoặc không có nhiều quy tắc và quy tắc thụt lề nghiêm ngặt, Cobra vẫn làm khá tốt.


0

C: 224 byte

Bằng cách sử dụng bộ xác định độ chính xác của printf , chúng ta có thể sử dụng cùng một chuỗi là cả chuỗi định dạng printf và là hai trong số các tham số.

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);}

Với khoảng trắng và chuỗi chia thành các dòng:

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 ký tự, 272 byte

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;}

Cách sử dụng: m("cow", "moo");,m("fox", "Hatee-hatee-hatee-ho");

Các thông số với sự @#%^<>&*(cố đầu ra.


0

Haskell (282 và vẫn có thể đọc được một chút :))

wc -c oldmacdonald.hs
     282 oldmacdonald.hs

Tập tin:

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 "#)
(#)=(++)

Đó là 281, bạn thường không tính dòng mới, trừ khi đó là macro tiền xử lý C hoặc thứ gì khác yêu cầu chấm dứt dòng mới. Trong hầu hết các trường hợp, bạn chỉ có thể trừ 1 từ số byte được trả về wc -c, nhưng tôi thích sử dụng mẹeff.in/byte-count và đảm bảo không có dòng trống nào ở cuối trừ khi chương trình hoạt động.
nyuszika7h

0

ES6, 2 giải pháp của 179 186 ký tự mà không có bất kỳ unicode nào

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]))

Va thu hai:

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]))

Tôi đã thêm cuộc gọi cảnh báo (+7 ký tự).


Tôi nghĩ rằng, đó là giải pháp ngắn nhất từ ​​những người chưa được giải mã cho đến nay.
Qwertiy

0

JavaScript (E6) 140 ký tự

Bộ đếm Char: https://otherseff.in/byte-count , 140 ký tự, 425 byte trong UTF-8

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

Mã ASCII gốc 188 byte

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]))

Được nén với http://xem.github.io/obfuscatweet/

Thử nghiệm trong bảng điều khiển FireFox / FireBug

f('mosquito','zzz')

Đầu ra

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!
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.