Mengutip Kakak


16

Tugas: Mintalah program Anda secara acak memilih salah satu dari dua kutipan berikut pada saat runtime dan mencetak satu kutipan itu, persis seperti yang ditunjukkan.

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.

Pembatasan: Kata-kata spreading, chestnut, PEACE, FREEDOM, dan STRENGTH harus muncul dalam kode Anda. Tidak ada kata dari dua kutipan di atas yang dapat muncul dalam kode Anda lebih dari sekali .

Solusi terpendek menang.


1
Ok saya memilih yang pertama. Jujur! xkcd.com/221
edc65

9
@ edc65 Itu tidak lagi lucu .
Martin Ender

@ MartinBüttner bukan untuk menjadi lucu, tetapi untuk menyarankan aturan yang lebih eksplisit. Membaca pertama kali saya benar-benar berpikir saya bisa memilih yang acak dan kemudian mulai bekerja.
edc65

@ edc65 Ah saya mengerti, kata-katanya dulu berbeda.
Martin Ender

Jawaban:


3

PHP 179

Terinspirasi oleh jawaban 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 karakter)

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

Terima kasih @ core1024 untuk tips tentang bermain golf ini.


1
Anda dapat mengganti 6 dengan baris baru yang sebenarnya, letakkan tanda kutip "you"dan gunakan $$&1sebagai generator acak :)
core1024

3

Jawa, 338

Saya tidak bisa mendapatkannya di bawah 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);}}

Sedikit tidak diserang:

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


Terima kasih untuk tautannya! Akan mencari sesuatu yang berguna besok.
CoolWilly

@ Tentang Saya sudah mencoba beberapa trik, tetapi mereka tidak membantu. ( java.io.PrintStream p=System.out, ditambahkan 15 byte ke total static<T>void p(T o){System.out.print(o);},, ditambahkan 12). Ada saran lain?
CoolWilly

gunakan blok statis bukan deklarasi utama
Fabinout

Blok statis * 310 CHAR *: kelas B {static {String b = "Di bawah pohon berangan yang menyebar", c = "dijual", d = "kamu", e = "dan", f = "aku. \ NT", g = "di sini terletak", h = ". \ n", i = "IS"; if (Math.random ()>. 5) System.out.print (b + "\ nI" + c + d + e + d + c + f + g + "mereka," + e + g + "kita \ n" + b + h); selain System.out.print ("PERANG" + i + "PERDAMAIAN" + h + "KEBEBASAN" + i + "PERBANYAKAN "+ h +" IGNORANCE "+ i +" KEKUATAN "+ h);}}
Fabinout

2

Javascript 229 254 256

Sunting 1 gunakan new Dateseperti yang disarankan oleh @Doorknob - masih belum jelas bagi saya bagaimana javascript Tanggal berubah menjadi string atau integer atau apa pun

Sunting 2 disederhanakan. Banyak.

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 Datelebih pendek dariDate.now()
Doorknob

1
Untuk menjelaskan Datekonversi: > Tanggal JavaScript didasarkan pada nilai waktu yang milidetik sejak tengah malam 01 Januari 1970 UTC. Sehari menampung 86.400.000 milidetik. Rentang objek Tanggal JavaScript adalah -100.000.000 hari hingga 100.000.000 hari relatif terhadap 01 Januari 1970 UTC. , ketika Anda &itu secara otomatis dilemparkan ke a Number. Jadi pada dasarnya Anda membuat pilihan acak berdasarkan apakah itu milidetik genap atau ganjil sejak 1970-01-01T00:00:00.000Zzaman.
Bob

@ Doorknob dapatkah Anda menulis artikel pendek untuk generator angka acak pendek di codegolf.stackexchange.com/questions/2682/... Belum melihatnya di sana dan saya pikir itu bisa sangat berguna.
flawr

@ flawr Done
Doorknob

2

C # (268) (260) (256)

Ini dapat dieksekusi di LINQPad, menggunakan Dump()metode:

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

Tidak Disatukan:

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

Memperbarui:

Dengan menggunakan operator ternary dan 1 variabel tambahan, saya dapat memotong 6 karakter lainnya:

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

Tidak Disatukan:

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

Pembaruan2:

Berkat saran cerdik tsavinhosaya bisa menyelamatkan 4 karakter lagi dengan menempatkan kawat gigi di sekitar operasi 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();

Tidak Disatukan:

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
Anda dapat menyimpan 4 karakter lagi dengan menghapus a dan menggantinya dengan tanda kurung seperti ini: string b = "Di bawah pohon kastanye yang menyebar", c = "dijual", d = "Anda", e = "dan", f = "saya . \ nT ", g =" di sini terletak ", h =" IS "; (Acak baru (). Selanjutnya (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "mereka," + e + g + "kami \ n" + b + ".") :( "PERANG" + h + "PERDAMAIAN. \ n KEBEBASAN" + h + "PERBAIKAN. \ nIGNORANCE" + h + "KEKUATAN.")). Membuang();
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="")

Sedikit tidak berbulu:

# 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

Menggunakan -foperator untuk meletakkan string pada kutipan pertama, dan yang kedua diikuti oleh IS, setelah itu memilih elemen acak dari 2 kutipan tersebut dan mencetaknya ...



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

Hanya untuk bersenang-senang, saya telah membuat solusi lain dalam T-SQL, yang satu byte lebih pendek dari solusi Java 8 saya:

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

Dengan mendeklarasikan file yang charterlalu lama, Anda dapat menambahkan ruang 'otomatis', menghemat beberapa byte.

Menggunakan kode dalam pengeditan yang diusulkan oleh pengguna PenutReaper, Anda memang dapat mengurangi 10 byte.


Menggunakan variabel untuk pengembalian carriage tidak sepadan. Cukup gunakan yang literal.
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 ")

Tulis ini tanpa melihat jawaban lain. Manfaatkan tugas dengan baik sebagai ekspresi.


0

05AB1E , 119 byte

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

Cobalah online!


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

Cobalah online!


0

C (gcc) , 307 289 271 270 byte

-37 bytes berkat ceilingcat

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

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.