Alıntı Big Brother


16

Görev: Programınızın çalışma zamanında aşağıdaki iki tırnaktan birini rastgele seçmesini ve tam olarak gösterildiği gibi bir alıntı yazdırmasını sağlayın.

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.

Kısıtlamalar: kelimeler spreading, chestnut, PEACE, FREEDOM, ve STRENGTH gereken kodunuzda görünür. Yukarıdaki iki alıntıdan hiçbir kelime kodunuzda birden fazla görünmeyebilir .

En kısa çözüm kazanır.


1
Tamam ilkini seçtim. Dürüst! xkcd.com/221
edc65


@ MartinBüttner komik olmamalı, daha açık bir kural öne sürmelidir. İlk defa okuduğumda, rastgele bir tane seçip çalışmaya başlayabilirdim.
edc65

@ edc65 Ah anladım, ifadeler farklıydı.
Martin Ender

Yanıtlar:


3

PHP 179

Es1024'ün cevabından ilham aldı .

<?=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 ( 191184 karakter)

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

Bu golf hakkında ipuçları için @ core1024 teşekkürler.


1
6'yı gerçek yeni satırlarla değiştirebilir, teklifleri bırakabilir "you"ve $$&1rastgele bir jeneratör olarak kullanabilirsiniz :)
core1024

3

Java, 338

338'in altına inemiyorum ...

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

Biraz çözülmemiş:

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


Bağlantı için teşekkürler! Yarın faydalı bir şeyler arayacağım.
CoolWilly

@Fabinout Birkaç püf noktası denedim, ama yardım etmediler. ( java.io.PrintStream p=System.out, toplamda 15 bayt static<T>void p(T o){System.out.print(o);}eklendi, 12 eklendi). Başka öneriniz var mı?
CoolWilly

ana deklarasyon yerine statik blok kullan
Fabinout

Statik blok * 310 CHAR *: sınıf B {statik {String b = "Yayılan kestane ağacının altında", c = "satıldı", d = "siz", e = "ve", f = "ben. \ NT", g = "burada yalan var", h = ". \ n", i = "IS"; eğer (Math.random ()>. 5) System.out.print (b + "\ nI" + c + d + e + d + c + f + g + "onlar," + e + g + "biz \ n" + b + h); başka System.out.print ("SAVAŞ" + i + "BARIŞ" + h + "ÖZGÜRLÜK" + i + "SLAVERY "+ h +" IGNORANCE "+ i +" STRENGTH "+ h);}}
Fabinout

2

JavaScript 229 254 256

Düzenleme 1 kullanarak new Date@Doorknob önerdiği gibi - hala belirsiz bana nasıl javascript Tarihler dizeleri veya tamsayılar ya da her türlü dönüşüvermişti

Düzenleme 2 basitleştirilmiş. Çok.

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 Datedaha kısaDate.now()
Kapı Tokmağı

1
DateDönüşümü açıklamak için : > JavaScript tarihi 01 Ocak 1970 UTC gece yarısından bu yana milisaniye olan bir zaman değerine dayanmaktadır. Bir gün 86.400.000 milisaniyedir. JavaScript Tarihi nesne aralığı 01 Ocak 1970 UTC'ye göre -100.000.000 gün ila 100.000.000 gündür. , &otomatik olarak a Number. Yani, rastgele seçim, 1970-01-01T00:00:00.000Zçağdan bu yana çift mi yoksa tek milisaniye olsun .
Bob

@Doorknob Eğer bu kısa rasgele sayı üreteci için kısa yazı yazabilirim codegolf.stackexchange.com/questions/2682/... henüz görmedin ve bunu oldukça kullanışlı olabileceğini düşünüyorum.
flawr

@flawr Done
Doorknob

2

C # (268) (260) (256)

Bu Dump()yöntem LINQPad'de çalıştırılabilir :

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

Güncelleme:

Üçlü operatör ve 1 ekstra değişken kullanarak, 6 karakter daha kesebildim:

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:

Ustaca önerisi tsavinhosayesinde üçlü operasyonun etrafına parantez koyarak 4 karakter daha kaydedebildim:

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
A'yı kaldırarak ve bunun gibi köşeli parantezlerle değiştirerek 4 karakter daha kaydedebilirsiniz: string b = "Yayılan kestane ağacının altında", c = "satıldı", d = "siz", e = "ve", f = "ben . \ nT ", g =" burada yalan var ", h =" IS "; (yeni Rastgele (). Sonraki (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "onlar," + e + g + "biz \ n" + b + ".") :( "SAVAŞ" + h + "BARIŞ. \ nFREEDOM" + h + "GÜZEL. \ nIGNORANCE" + h + "GÜÇLÜ.")). ) (dökümü;
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="")

Hafifçe soluksuz:

# 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İlk alıntıya dizeler koymak için operatörü kullanır ve ikincisi birleştirilir IS, bundan sonra bu 2 alıntıdan rastgele bir öğe seçer ve yazdırır ...



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

Sadece eğlence için, T-SQL'de, Java 8 çözümümden bir bayt daha kısa olan başka bir çözüm yaptım:

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

charBirini çok uzun olarak bildirerek, birkaç bayt tasarruf ederek 'otomatik' bir alan ekleyebilirsiniz.

PenutReaper kullanıcısı tarafından önerilen düzenlemedeki kodu kullanarak, gerçekten 10 bayt tıraş olabilirsiniz.


Satır başı için bir değişken kullanmak buna değmez. Sadece değişmez olanları kullanın.
Muqo

1

Java Komut Dosyası (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 ")

Bunu başka cevaplara bakmadan yazdı. Ödevleri ifade olarak iyi kullanır.


0

05AB1E , 119 bayt

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

Çevrimiçi deneyin!


0

Python 3 , 222 bayt

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

Çevrimiçi deneyin!


0

C (GCC) , 307 289 271 270 bayt

Tavan kedisi sayesinde -37 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.