Trích dẫn Big Brother


15

Nhiệm vụ: Yêu cầu chương trình của bạn chọn ngẫu nhiên một trong hai trích dẫn sau trong thời gian chạy và in một trích dẫn đó, chính xác như được hiển thị.

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.

Hạn chế: Những lời spreading, chestnut, PEACE, FREEDOM, và STRENGTH phải xuất hiện trong mã của bạn. Không có từ nào trong hai trích dẫn ở trên có thể xuất hiện trong mã của bạn nhiều lần .

Giải pháp ngắn nhất chiến thắng.


1
Ok tôi đã chọn đầu tiên. Thật thà! xkcd.com/221
edc65


@ MartinBüttner không phải là buồn cười, nhưng để đề xuất một quy tắc rõ ràng hơn. Đọc lần đầu tiên tôi thực sự nghĩ rằng tôi có thể chọn một ngẫu nhiên và sau đó bắt đầu làm việc.
edc65

@ edc65 Ah tôi thấy, từ ngữ được sử dụng là khác nhau.
Martin Ender

Câu trả lời:


3

PHP 179

Lấy cảm hứng từ câu trả lời của 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 ký tự)

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

Cảm ơn @ core1024 cho lời khuyên về việc chơi golf này.


1
Bạn có thể thay thế 6 bằng các dòng mới thực tế, bỏ các trích dẫn xung quanh "you"và sử dụng $$&1như một trình tạo ngẫu nhiên :)
core1024

3

Java, 338

Tôi không thể lấy nó dưới 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 vô dụng:

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


Cảm ơn các liên kết! Gonna tìm kiếm một cái gì đó hữu ích vào ngày mai.
CoolWilly

@Fabinout Tôi đã thử một vài thủ thuật, nhưng chúng không giúp được gì. ( java.io.PrintStream p=System.out, đã thêm 15 byte vào tổng số static<T>void p(T o){System.out.print(o);}, thêm 12). Bất cứ một đề nghị nào khác?
CoolWilly

sử dụng khối tĩnh thay vì khai báo chính
Fabinout

Khối tĩnh * 310 CHAR *: class B {static {String b = "Dưới tán hạt dẻ", c = "đã bán", d = "bạn", e = "và", f = "me. \ NT", g = "ở đây nói dối", 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); khác System.out.print ("WAR" + i + "PEACE" + h + "FREEDOM" + i + "SLAVERY "+ h +" IGNORANCE "+ i +" SỨC MẠNH "+ h);}}
Fabinout

2

Javascript 229 254 256

Chỉnh sửa 1 bằngnew Date như được đề xuất bởi @Doorknob - vẫn chưa rõ cho tôi cách javascript Hẹn hò với chuỗi hoặc số nguyên hoặc bất cứ điều gì

Chỉnh sửa 2 đơn giản hóa. Rất nhiều.

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 Datengắn hơnDate.now()
Doorknob

1
Để giải thích việc Datechuyển đổi: > Ngày JavaScript dựa trên giá trị thời gian là mili giây kể từ nửa đêm ngày 1 tháng 1 năm 1970 UTC. Một ngày giữ 86.400.000 mili giây. Phạm vi đối tượng Ngày JavaScript là -100.000.000 ngày đến 100.000.000 ngày so với ngày 1 tháng 1 năm 1970 UTC. , khi bạn &, nó tự động chuyển sang a Number. Vì vậy, về cơ bản, bạn đang thực hiện lựa chọn ngẫu nhiên dựa trên việc đó là một phần nghìn giây chẵn hay lẻ kể từ 1970-01-01T00:00:00.000Zkỷ nguyên.
Bob

@Doorknob bạn có thể viết một bài viết ngắn cho trình tạo số ngẫu nhiên ngắn hơn đó trong codegolf.stackexchange.com/questions/2682/ Lỗi Haven chưa thấy nó ở đó và tôi nghĩ nó có thể khá hữu ích.
flawr

@flawr Xong
Doorknob

2

C # (268) (260) (256)

Điều này được thực thi trong LINQPad, sử dụng Dump()phương thức:

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

Ung dung:

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

Cập nhật:

Sử dụng toán tử ternary và 1 biến phụ, tôi có thể cắt thêm 6 ký tự:

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

Ung dung:

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

Cập nhật2:

Nhờ vào sự gợi ý khéo léo của tsavinhotôi, tôi đã có thể tiết kiệm thêm 4 ký tự bằng cách đặt niềng răng xung quanh hoạt động của ternary:

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

Ung dung:

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
Bạn có thể lưu thêm 4 ký tự bằng cách xóa a và thay thế nó bằng dấu ngoặc như thế này: chuỗi b = "Dưới tán hạt dẻ", c = "sell", d = "you", e = "và", f = "me . \ nT ", g =" ở đây nói dối ", h =" IS "; (ngẫu nhiên mới (). Tiếp theo (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "họ," + e + g + "chúng tôi \ n" + b + ".") :( "WAR" + h + "PEACE. \ nFREEDOM" + h + "SLAVERY. \ nIGNORANCE" + h + "STRENGTH.")). Đổ ();
tsavinho

1

Con trăn 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="")

Hơi vô dụng:

# 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

Sử dụng -ftoán tử để đặt các chuỗi trên trích dẫn đầu tiên và chuỗi thứ hai được nối bởi IS, sau đó nó chọn một phần tử ngẫu nhiên của 2 trích dẫn đó và in nó ...



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

Để giải trí, tôi đã tạo một giải pháp khác trong T-SQL, ngắn hơn một byte so với giải pháp Java 8 của tôi:

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

Bằng cách khai báo charmột cái quá dài, bạn có thể thêm một không gian 'tự động', tiết kiệm một vài byte.

Sử dụng mã trong chỉnh sửa được đề xuất bởi người dùng PenutReaper, bạn thực sự có thể tắt 10 byte.


Sử dụng một biến cho lợi nhuận vận chuyển là không xứng đáng. Chỉ cần sử dụng những người theo nghĩa đen.
Muqo

1

Tập lệnh Java (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 ")

Đã viết này mà không nhìn vào câu trả lời khác. Làm cho việc sử dụng tốt các bài tập như biểu thức.


0

05AB1E , 119 byte

“‚  spreading chestnutíÍ““Iïê€î€ƒ€îïê€á.““€Çº¤€»,€ƒ€Îº¤€¦“).ªĆ»‘‡î€ˆ PEACE.
FREEDOM€ˆÃÒRY.
IGNORANCE€ˆ STRENGTH‘)'.«Ω

Hãy thử trực tuyến!


0

Python 3 , 222 byte

a,b,c,d,e,f='Under the spreading chestnut tree',' you ',' lie ','and','sold',' IS '
print({f'{a}\nI {e}{b}{d}{b}{e} me.\nThere{c}they, {d} here{c}we\n{a}.',f'WAR{f}PEACE.\nFREEDOM{f}SLAVERY.\nIGNORANCE{f}STRENGTH.'}.pop())

Hãy thử trực tuyến!


0

C (gcc) , 307 289 271 270 byte

-37 byte nhờ vào trần nhà

*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++]);}

Hãy thử trực tuyến!

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.