큰 형님 인용


16

작업 : 프로그램에서 런타임에 다음 두 따옴표 중 하나를 임의로 선택하고 표시된대로 정확하게 한 따옴표를 인쇄하십시오.

1:

Under the spreading chestnut tree
I sold you and you sold me.
There lie they, and here lie we
Under the spreading chestnut tree.

2 :

WAR IS PEACE.
FREEDOM IS SLAVERY.
IGNORANCE IS STRENGTH.

제한 : 단어 spreading, chestnut, PEACE, FREEDOM,하고 STRENGTH 있어야 코드에 나타납니다. 위의 두 따옴표 중 어떤 단어도 코드에 두 번 이상 나타날 수 없습니다 .

최단 솔루션이 승리합니다.


1
좋아, 나는 첫번째를 선택했다. 정직한! xkcd.com/221
edc65


@ MartinBüttner는 우스운 것이 아니라보다 명확한 규칙을 제안하는 것입니다. 처음에 독해를 시작하면 난수를 골라서 일을 시작할 수있었습니다.
edc65

@ edc65 아, 나는 표현이 달랐습니다.
마틴 엔더

답변:


3

PHP 179

es1024의 답변에서 영감을 얻었습니다 .

<?=strtr(rand()%2?"0
I 1 232 1 me.
T5 they,35 we
0.
":"WAR4PEACE.
FREEDOM4SLAVERY.
IGNORANCE4STRENGTH.
",["Under the spreading chestnut tree",sold,you," and "," IS ","here lie"]);

4

펄 ( 191184 자)

$_=$$&1?"0
I12321me6T4they,34we
06":"WAR5PEACE6FREEDOM5SLAVERY6IGNORANCE5STRENGTH6";s/\d/("Under the spreading chestnut tree"," sold ",you," and ","here lie "," IS ",".
")[$&]/ge;print

골프에 대한 팁을 @ core1024에게 감사드립니다.


1
당신은 실제 새로운 라인 (6)을 대체 주위에 따옴표를 놓을 수 있습니다 "you"및 사용에 $$&1임의의 발전기 :)로
core1024

3

자바, 338

338 미만으로는 얻을 수 없습니다 ...

class B{public static void main(String[]a){String b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=".\n",i=" IS ";if(Math.random()>.5)System.out.print(b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+h);else System.out.print("WAR"+i+"PEACE"+h+"FREEDOM"+i+"SLAVERY"+h+"IGNORANCE"+i+"STRENGTH"+h);}}

언 골프 비트 :

class B{public static void main(String[]a){String b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=".\n",i=" IS ";
if(Math.random()>.5)System.out.print(b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+h);
else System.out.print("WAR"+i+"PEACE"+h+"FREEDOM"+i+"SLAVERY"+h+"IGNORANCE"+i+"STRENGTH"+h);}}


링크 주셔서 감사합니다! 내일 유용한 정보를 검색 할 예정입니다.
CoolWilly

@ Fabinout 나는 몇 가지 트릭을 시도했지만 도움이되지 않았습니다. ( java.io.PrintStream p=System.out에 총 15 바이트 static<T>void p(T o){System.out.print(o);}추가, 12에 추가). 다른 제안?
CoolWilly

주요 선언 대신 정적 블록 사용
Fabinout

정적 블록 * 310 CHAR * : 클래스 B {static {String b = "확산 밤나무 아래", c = "판매", d = "당신", e = "및", f = "me. \ nT", g = "여기서", h = ". \ n", i = "IS"; if (Math.random ()>. 5) System.out.print (b + "\ nI"+ c + d + e + d + c + f + g + "그들,"+ e + g + "we \ n"+ b + h); 그렇지 않으면 System.out.print ( "WAR"+ i + "PEACE"+ h + "FREEDOM"+ i + "SLAVERY "+ h +"IGNORANCE "+ i +"STRENGTH "+ h);}}
Fabinout

2

자바 스크립트 229 254 256

new Date@Doorknob이 제안한대로 1편집하십시오 -여전히 javascript Dates가 문자열이나 정수 또는 기타 형식으로 어떻게 변형되는지는 분명하지 않습니다.

2 단순화 편집 . 많이.

t=(new Date&1
   ?'0WAR0 IS 0PEACE0.\n0FREEDOM020SLAVERY040IGNORANCE020STRENGTH.'
   :'0Under the spreading chestnut tree0\nI 0sold 0you 0and 04030me.\nT0here lie 0they, 05090we\n010.'
  ).split(0);
for(i=o='';j=t[++i];)o+=t[j|0||i];alert(o)

new Date보다 짧은Date.now()
Doorknob

1
Date변환 을 설명하려면 : > JavaScript 날짜는 1970 년 1 월 1 일 자정 (UTC) 이후의 시간 값 (밀리 초)을 기준으로합니다. 하루는 86,400,000 밀리 초입니다. JavaScript Date 객체 범위는 1970 년 1 월 1 일 UTC 기준으로 -100,000,000 일에서 100,000,000 일입니다. , &자동으로에 전송됩니다 Number. 따라서 기본적으로 1970-01-01T00:00:00.000Z신기원 이래로 짝수 또는 홀수 밀리 초인지 여부에 따라 무작위로 선택합니다 .
Bob

@Doorknob 당신의 그 짧은 난수 생성기에 대한 짧은 기사 쓸 수 codegolf.stackexchange.com/questions/2682/...이 아직 그것을 보지 못했지만를하고 나는 그것이 매우 유용 할 수 있다고 생각.
flawr

@flawr 완료
손잡이

2

C # (268) (260) (256)

LINQPad에서 다음 Dump()방법을 사용하여 실행 가능합니다 .

string b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=" IS ";if(new Random().Next(9)>4)(b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+".").Dump();else("WAR"+h+"PEACE.\nFREEDOM"+h+"SLAVERY.\nIGNORANCE"+h+"STRENGTH.").Dump();

언 골프 드 :

string b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=" IS ";

if(new Random().Next(9)>4)
    (b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+".").Dump();
else
    ("WAR"+h+"PEACE.\nFREEDOM"+h+"SLAVERY.\nIGNORANCE"+h+"STRENGTH.").Dump();

최신 정보:

삼항 연산자와 1 개의 추가 변수를 사용하여 6자를 더 잘라낼 수있었습니다.

string a,b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=" IS ";a=new Random().Next(9)>4?(b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+"."):("WAR"+h+"PEACE.\nFREEDOM"+h+"SLAVERY.\nIGNORANCE"+h+"STRENGTH.");a.Dump();

언 골프 드 :

string a,b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=" IS ";

a=new Random().Next(9)>4 ?
    (b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+".") :
    ("WAR"+h+"PEACE.\nFREEDOM"+h+"SLAVERY.\nIGNORANCE"+h+"STRENGTH.");

a.Dump();

업데이트 2 :

독창적 인 제안 덕분에 tsavinho삼항 작업 주위에 중괄호를 배치하여 4 문자를 더 절약 할 수있었습니다.

string b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=" IS ";(new Random().Next(9)>4?(b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+"."):("WAR"+h+"PEACE.\nFREEDOM"+h+"SLAVERY.\nIGNORANCE"+h+"STRENGTH.")).Dump();

언 골프 드 :

string b="Under the spreading chestnut tree",c="sold ",d="you ",e="and ",f="me.\nT",g="here lie ",h=" IS ";
(new Random().Next(9)>4?
    (b+"\nI "+c+d+e+d+c+f+g+"they, "+e+g+"we\n"+b+"."):
    ("WAR"+h+"PEACE.\nFREEDOM"+h+"SLAVERY.\nIGNORANCE"+h+"STRENGTH.")
).Dump();

1
a를 제거하고 다음과 같이 대괄호로 바꾸면 4자를 더 저장할 수 있습니다. string b = "확산 된 밤나무 아래", c = "sold", d = "you", e = "and", f = "me . \ nT ", g ="여기 거짓말 ", h ="IS "; (새로운 랜덤 (). 다음 (9)> 4? (b +"\ nI "+ c + d + e + d + c + f + g + "그들은"+ e + g + "we \ n"+ b + ".") :( "WAR"+ h + "PEACE. \ nFREEDOM"+ h + "SLAVERY. \ nIGNORANCE"+ h + "STRENGTH."). 덤프();
tsavinho

1

파이썬 3-228

for x in[b"AB:87078@624>049BA6",b"?;<61;=63;56"][id(id)%3-1]:print("and |FREEDOM|T|IGNORANCE|here lie |STRENGTH|.\n|you |sold |we|I | IS |PEACE|SLAVERY|they, |WAR|me|Under the spreading chestnut tree|\n".split("|")[x-48],end="")

약간 골퍼되지 않음 :

# id(id) returns an even number based on memory address of id
# id(id)%3-1 gives -1, 0 or 1
randomNumber = id(id)%3-1

# Word list
words = "and |FREEDOM|T|IGNORANCE|here lie |STRENGTH|.\n|you |sold |we|I | IS |PEACE|SLAVERY|they, |WAR|me|Under the spreading chestnut tree|\n".split("|")

# Byte Literals for Under the chestnut and WAR IS PEACE
# each byte correspond to the word's index in the word list
byteLiterals = [b"AB:87078@624>049BA6", b"?;<61;=63;56"]
choice = byteLiterals[randomNumber]

for x in choice: 
    print(words[x-48], end="") # Print each word out

1

PowerShell 205

("{0}.`nI{1}{2}{3}{2}{1} me.`nT{4}they,{3} {4}we`n{0}."-f"Under the spreading chestnut tree"," sold"," you"," and","here lie "),("WAR","PEACE.`nFREEDOM","SLAVERY.`nIGNORANCE","STRENGTH."-join" IS ")|Random

-f연산자를 사용하여 첫 번째 따옴표에 문자열을 넣고 두 번째 따옴표는로 묶인 다음 두 따옴표 중 IS임의의 요소를 선택하고 인쇄합니다.



1

자바 스크립트 / jQuery 396

var B={
U:"Under the spreading chestnut tree",
s:"sold ",
y:"you ",
l:"lie ",
a:"and ",
i:"IS ",
b:"</br>"
};
var A={
P:B.U+B.b+"I "+B.s+B.y+B.a+B.y+B.s+"me."+B.b
+"There "+B.l+"they, "+B.a+"here "+B.l+"we."+B.b+B.U,
Q:"WAR "+B.i+"PEACE."+B.b+"FREEDOM "+B.i+"SLAVERY."+B.b
+"IGNORANCE "+B.i+"STRENGTH."
};
$(function(){
var z=(Math.random()<0.5)?A.P:A.Q; 
$('#d').append(z);
});

1

T-SQL, 337 327

재미를 위해 Java 8 솔루션보다 1 바이트 짧은 T-SQL에서 다른 솔루션을 만들었습니다.

DECLARE @b char(33)='Under the spreading chestnut tree',@c char(5)='sold',@d char(4)='you',@e char(4)='and',@f char(9)='here lie',@ char='
',@h char(4)=' IS'IF rand()>.5PRINT @b+@+'I '+@c+@d+@e+@d+@c+'me.'+@+'T'+@f+'they, '+@e+@f+'we'+@+@b+'.'ELSE PRINT'WAR'+@h+'PEACE.'+@+'FREEDOM'+@h+'SLAVERY.'+@+'IGNORANCE'+@h+'STRENGTH.'

char너무 길게 선언하면 '자동'공간을 추가하여 몇 바이트를 절약 할 수 있습니다.

사용자 PenutReaper가 제안한 편집에서 코드를 사용하면 실제로 10 바이트를 줄일 수 있습니다.


캐리지 리턴에 변수를 사용하는 것은 가치가 없습니다. 문자 그대로 사용하십시오.
Muqo

1

자바 스크립트 (233)

Math.random()>0.5?(a="Under the spreading chestnut tree")+"\nI "+(s="sold")+(y=" you ")+(n="and")+y+s+" me.\nT"+(h="here ")+(l="lie ")+"they "+n+" "+h+l+"we\n"+a+".":["WAR","PEACE.\nFREEDOM","SLAVERY.\nIGNORANCE","STRENGTH."].join(" IS ")

다른 답변을 보지 않고 이것을 썼습니다. 과제물을 표현식으로 잘 활용합니다.




0

C (GCC) , 307 (289) 271 270 바이트

ceilingcat 덕분에 -37 바이트

*y=" IS ";main(){int*r[]={"WAR",y,"PEACE.\nFREEDOM",y,"SLAVERY.\nIGNORANCE",y,"STRENGTH.",0,"Under the spreading chestnut tree","\nI"," sold ","you"," and ",r[11],r[10],"me.\n","T","here lie ","they,",r[12],r[17],"we\n",r[8],".",0},z=r;for(z=z/2&8;r[z];)printf(r[z++]);}

온라인으로 사용해보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.