올드 맥도날드 기능


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!

여기서 cowmoo함수 파라미터의 문자열이며, 같은 변경 가능 pig하고 oink또는 sheepbaa예.

대문자, 하이픈, 문장 부호, 공백 및 줄 바꿈을 고려해야합니다.

코드에서 가장 적은 양의 유니 코드 문자를 입력하도록하십시오.


1
이것이 kolmogorov-complexity 이어야 합니까?
mniip

6
당신은 말합니다 echoes the following. 함수가 인쇄 또는 반환해야합니까?
cjfaure

2
이것을 공정하게하기 위해서는 질문에 정확한 구두점, 공백 및 캐리지 리턴이 있어야한다고 생각합니다. 그러나 대문자 / 소문자에 대해 어떻게 생각하십니까? 나는 단일 케이스가 더 쉬울 것이라고 생각하고 base64 또는 이와 유사한 표준 응용 프로그램의로드를 피합니다. 균형 잡히면, 유일한 자본은 라인의 시작 부분, MacDonald 및 EIEIO에 있습니다. 따라서 질문마다 정확하게 만드는 것이 더 흥미로울 수 있습니다.
Level River St

4
출력 a oink이 가능 an oink합니까, 아니면되어야 합니까?
ClickRick

4
@ rybo111 : 위대한 도널드 크 누스 (Donald Knuth)가 이런 종류의 일에 관한 학술 논문을 썼다는 것을 알고 계셨습니까? 실제로 실제 저널에 실 렸습니다 (4 월호에 실 렸습니다). 논문의 PDF에 대한 링크를 포함하여 여기에 더 있습니다 : en.wikipedia.org/wiki/The_Complexity_of_Songs
Tom Chantler

답변:


15

자바 스크립트 ES6-204

가장 적은 양의 유니 코드 를 입력하는 것을 목표로합니다 문자 하십시오.

더 짧지는 않지만 아마도 가장 난독 화되었을 것입니다.

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)에 맞습니다.
유니 코드 문자는 16 비트이므로 알파벳 의 3자를 패딩 비트로 인코딩 할 수 있습니다 .
새 줄이 포함 된 전체 텍스트는 알파벳 의 186 자이며 62 개의 유니 코드 문자로 인코딩 할 수 있습니다.

예를 들어 다음 Old과 같이 인코딩됩니다.

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

유니 코드 문자를 읽는 데 문제가 있으면 Code2000 글꼴을 설치 하십시오.


2
"cow""moo"함수 매개 변수로 가정된다. 호출자가 배열을 전달하게하면 호출 코드의 문자 수를 추가하는 대신에 함수 정의 내에 문자를 저장하게됩니다. 이건 나 한테 바람 냄새가나요 극단적 인 접근 방식을 취하면 function f(a){alert(a)}(23 자)를 정의 하고 호출해야한다고 말할 수 있습니다 f("Old MacDonald had a ...").
tobyink

1
나는 두 개의 분리 된 매개 변수로 문자열을 전달했지만 도전을 읽은 후에 문자열을 배열 형식으로 전달하지 않을 이유를 찾지 못했기 때문에 대답을 편집했습니다. 이것은 속임수가 아니며 가능할 때 문자를 거의 저장하지 않습니다. 이것이 규칙에 맞는지 @ rybo111이 결정하도록하십시오.
Michael M.

1
@tobyink 규칙에서 '문자열'(배열 아님)이라는 용어를 사용 했으므로 귀하가 옳다고 생각합니다. 그래도 '속임수'는 약간 거칠다고 생각합니다!
rybo111

2
왜 이렇게 많은 표가 있습니까? 200 개가 넘고 가장 짧은 자바 스크립트 솔루션도 아닙니다.
aditsu

thougth하고 잘 설명 했으므로 내 투표도 마찬가지입니다
edc65

5

CJam-142 / 골프 스크립트-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,{...}/0 내지 9 (= 10 A)의 각 번호의 블록 실행
`문자열의 개수로 변환
/\*하는 문자열 교체 않는을 우리가 스택에있는 경우에 "bar" "foo 1 baz" "1"다음 /의 결과 스트링 분할 ["foo " " baz"], \스왑 이전 항목이 배열 ( "bar") 및 *배열을 결합하여"foo bar baz"

따라서 코드는 기본 문자열의 각 숫자를 이전에 스택에 있던 문자열로 바꿉니다. 우리는 동물과 소리를 가졌고, 그 다음에 "가지고 있었다", "a"등, 마지막으로 ", EIEIO"그리고 메인 줄 "10, ...!"이 있습니다. 따옴표를 너무 많이 사용하지 않으려면 모든 문자열 (매개 변수 제외)을 하나의 문자열에 넣은 다음 분할하여 결과 배열을 덤프합니다 ( '|/~)

기본 문자열은 다음과 같은 변환을 거칩니다.

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

@Cruncher CJam은 제가 만든 언어입니다 . sf.net/p/cjam ; 골프를 마치면 설명 할 수 있습니다. :)
aditsu

1
@Cruncher는 설명을 추가했습니다
aditsu

9
♬ 그리고 그 5시에 그는 여섯 아홉을 봤습니다, ze eee ro ♬
aditsu

E-I-그런 다음 반복되는 문자열 일 수 있습니까 ? :)
rybo111

5

배쉬 + iconv, 128 유니 코드 문자

아래의 순수 bash / ascii 함수 본문을 가져 와서 유니 코드 문자로 역 인코딩합니다.

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

쉘 함수를 정의합니다 m. 다음과 같이 전화하십시오 :

$ m 조랑말 이웃
올드 맥도날드는 농장, EIEIO,
그 농장에는 조랑말 EIEIO가 있었고
이웃이 있고 이웃이 있으면
여기, 이웃, 이웃, 이웃,
오래된 맥도날드는 농장, EIEIO!
$ 

순수 bash, 171 바이트 (아스키 전용)

나는 원래의 구절 ( "cow"와 "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 양 바아
올드 맥도날드는 농장, EIEIO,
그 농장에서 그는 양 EIEIO를 가졌습니다
여기에 바아 바아가 있고 거기에 바아 바아가 있다면
여기 바아, 바아, 어디서나 바아 바아,
오래된 맥도날드는 농장, 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;
프록시

더 단단히 포장 할 수있는 정의가 있습니까?
einsteinsci

1
예전에는 가능했다가 #define X define사용할 수 #X Y Z있었습니다. 안타깝게도,이 IOCCC 시대는 이제 오래되었습니다 ...
nneonneo

+대신 에 사용 하는 것은 <<어떻습니까? 또는 ? char*대신에 string?를 사용하십시오 . // 이들 중 하나만 동시에 사용할 수 있습니다.
Qwertiy

2

Python, 116 유니 코드 문자

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

StackOverflow는 내 특수 문자를 먹고 있으므로 base64의 파일은 다음과 같습니다.

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

반복되는 문자열을 효율적으로 코딩하는 zlib를 사용하여 데이터를 압축합니다 (zlib는 일반적으로 텍스트를 압축하는 데 적합합니다). "유니 코드 문자"규칙을 활용하기 위해 121 바이트 zlib 청크는 바이트 열을 UTF-16으로 해석하여 61 자 유니 코드 문자열로 채워지고 절반으로 줄어 듭니다.

함수를 다음과 같이 호출하십시오.

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

nice, 그러나 cow와 moo가 함수 매개 변수의 문자열 인 경우, 예를 들어 pig and oink 또는 sheep and baa로 변경할 수 있습니다 . 출력이 cow / moo로 하드 코딩 된 것 같습니다.
Digital Trauma

@DigitalTrauma : 내 독해력이 실패합니다! 결정된.
nneonneo

그게 더 나은 :) +1
디지털 외상

115 . 후행 줄 바꿈을 세지 않아도됩니다.
nyuszika7 시간

@ nyuszika7h 아니요, 116입니다. 처음에 "UTF-8 BOM"(EF BB BF)을 계산하는 것을 잊었습니다. 이는 Python 2가 비 ASCII 소스를 허용하는 데 필요합니다. (이것은 파이썬 3이 아닙니다 .decode('zip').)
Anders Kaseorg

1

파이썬, 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,))

자바 스크립트, 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

자바, 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

자바 - 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 = "오래된 MacDonald는 농장을 가졌습니다"+ e; System.out.print (f + ", \ n 그리고 그 농장에는"+ a [0] + e + ", \ nWith"+ d + "가 있고 여기에는"+ d + "가있었습니다 , \ n 여기 "+ c +", 거기에 "+ c +" ', 어디서나 "+ d +", \ n "+ f +"! ");} 추가 최적화가 가능합니다
Justin

1

Perl 5 (UTF-8)-131 자, 313 바이트

아래 스크립트는 BOM없이 UTF-8로 저장해야합니다.

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

사용법 : f("cow", "moo");.

Perl -M5.0105.10 기능을 사용하려면 Perl을 플래그 와 함께 실행해야 합니다. ( 허용 됩니다.)

나는 문자 수 (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/26628/12469 는 저의 출발점이었습니다. 길이를 더 줄이는 몇 가지 추가 변수를 테스트 한 다음 다른 여러 구현에서 사용하는 UTF16 트릭을 적용했습니다.
tobyink

1

CJam (비 ASCII)-77 자

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

용법: "cow""moo"F

문자열은 base 127에서 base 56000으로 변환 된 다른 CJam 솔루션입니다
. UTF-8 로케일이 필요할 수 있습니다.

그건 그렇고, 이제 http://cjam.aditsu.net/ 에서 온라인으로 시도 할 수 있습니다


1

자바 스크립트 : 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에 대해 I).

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 자로 계산되는 이유 일 것입니다 ...) 할당되지 않았습니다. 이것은 규칙을 약간 확장하고 있습니다 :)
aditsu

글쎄, 나는 이것이 속임수라고 생각하지 않습니다 : 그 기호는 유니 코드 문자이며 2 문자로 계산해서는 안됩니다. 또한 트위터는 각각 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

델파이 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

자바 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에 바꾸기를 정의 된 순서대로 유지하고 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

자바 스크립트 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 형식 문자열과 같은 문자열을 사용할 수있는 매개 변수의 두 가지로.

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

하스켈 (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 전 처리기 매크로이거나 개행 종료가 필요한 다른 경우가 아니면 281입니다. 대부분의 경우,에서 반환 한 바이트 수에서 1을 뺄 수는 wc -c있지만 mothereff.in/byte-counter를 사용 하고 프로그램이 작동하지 않으면 끝에 빈 줄이 없는지 확인하는 것이 좋습니다.
nyuszika7 시간

0

ES6, 2 용액 (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]))

그리고 두 번째 :

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

0

자바 스크립트 (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.