อ้างถึงพี่ใหญ่


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

9
@ edc65 ที่ไม่ตลก
Martin Ender

@ MartinBüttnerไม่ตลก แต่แนะนำกฎที่ชัดเจนกว่านี้ การอ่านครั้งแรกฉันคิดว่าฉันสามารถเลือกแบบสุ่มแล้วเริ่มทำงาน
edc65

@ edc65 อ่าฉันเห็นแล้วว่าถ้อยคำต่างออกไป
Martin Ender

คำตอบ:


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

Perl ( 191 184 ตัวอักษร)

$_=$$&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

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

Bit ungolfed:

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

1
ใช่คุณสามารถcodegolf.stackexchange.com/questions/6671/...
Fabinout

ขอบคุณสำหรับลิงค์! จะค้นหาสิ่งที่มีประโยชน์ในวันพรุ่งนี้
CoolWilly

@ Fabinout ฉันได้ลองใช้เทคนิคเล็กน้อย แต่พวกเขาไม่ได้ช่วย ( java.io.PrintStream p=System.out, เพิ่ม 15 ไบต์เป็นผลรวมstatic<T>void p(T o){System.out.print(o);},, เพิ่ม 12) ข้อเสนอแนะอื่น ๆ ?
CoolWilly

ใช้บล็อกแบบคงที่แทนการประกาศหลัก
Fabinout

บล็อกแบบคงที่ * 310 CHAR *: class B {static {String b = "ภายใต้ต้นเกาลัดที่แพร่กระจาย", c = "ขาย", d = "คุณ", e = "และ", f = "me. \ nT", g = "ที่นี่โกหก", h = ". \ n", i = "IS"; ถ้า (Math.random ()>. 5) System.out.print (b + "\ nI" + c + d + e + d + c + f + g + "พวกเขา" + e + g + "เรา \ n" + b + h); อื่น System.out.print ("สงคราม" + ฉัน + "สันติภาพ" + h + "เสรีภาพ" + i + "ทาส "+ h +" IGNORANCE "+ i +" STRENGTH "+ h);}}
Fabinout

2

Javascript 229 254 256

แก้ไข 1โดยใช้new Dateคำแนะนำโดย @Doorknob - ยังไม่ชัดเจนสำหรับฉันว่าจาวาสคริปต์จะเปลี่ยน morph เป็นสตริงหรือจำนวนเต็มหรืออะไรก็ได้

แก้ไข 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 จะขึ้นอยู่กับค่าเวลาที่เป็นมิลลิวินาทีตั้งแต่เที่ยงคืน 01 มกราคม 2513 UTC หนึ่งวันมี 86,400,000 มิลลิวินาที ช่วงวันที่ของวัตถุจาวาสคริปต์คือ -100,000,000 วันถึง 100,000,000 วันเทียบกับ 1 มกราคม 2513 UTC เมื่อคุณมันก็โยนโดยอัตโนมัติไปยัง& Numberโดยพื้นฐานแล้วคุณเลือกสุ่มโดยพิจารณาจากว่าเป็นมิลลิวินาทีหรือคี่นับตั้งแต่1970-01-01T00:00:00.000Zยุค
บ๊อบ

@Doorknob คุณสามารถเขียนบทความสั้น ๆ สำหรับเครื่องกำเนิดเลขสุ่มที่สั้นกว่าในcodegolf.stackexchange.com/questions/2682/…ยังไม่เห็นมันและฉันคิดว่ามันมีประโยชน์มาก
ข้อผิดพลาด

@flawr Done
Doorknob

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

Ungolfed:

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

Ungolfed:

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

Update2:

ขอบคุณคำแนะนำที่ชาญฉลาดของ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();

Ungolfed:

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
คุณสามารถบันทึกได้อีก 4 ตัวอักษรโดยการลบและแทนที่ด้วยเครื่องหมายวงเล็บเช่น: string b = "ภายใต้ต้นเกาลัดที่แพร่กระจาย", c = "ขาย", d = "คุณ", e = "และ", f = "ฉัน . \ nT ", g =" ที่นี่โกหก ", h =" IS "; (สุ่มใหม่ () ถัดไป (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "พวกเขา" + e + g + "เรา \ n" + b + ".") :( "สงคราม" + h + "ความสงบสุข \ nFREEDOM" + h + "ความสลาฟ \ n ความโดดเด่น" + h + "ความแข็งแกร่ง")) การถ่ายโอนข้อมูล ();
tsavinho

1

Python 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="")

ungolfed เล็กน้อย:

# 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กันหลังจากนั้นมันจะเลือกองค์ประกอบแบบสุ่มของ 2 เครื่องหมายคำพูดและพิมพ์มัน ...



1

JavaScript / 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

เพื่อความสนุกฉันได้สร้างโซลูชันอื่นใน T-SQL ซึ่งมีขนาดหนึ่งไบต์ที่สั้นกว่าโซลูชัน Java 8 ของฉัน:

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

Java Script (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 ไบต์

-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.