Big Brother zitieren


15

Aufgabe: Lassen Sie Ihr Programm zur Laufzeit nach dem Zufallsprinzip eines der beiden folgenden Anführungszeichen auswählen und genau wie gezeigt ausdrucken.

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.

Einschränkungen: Die Worte spreading, chestnut, PEACE, FREEDOM, und STRENGTH muss im Code erscheinen. Kein Wort aus den beiden obigen Anführungszeichen darf mehrmals in Ihrem Code vorkommen .

Kürzeste Lösung gewinnt.


1
Ok, ich habe den ersten gewählt. Ehrlich! xkcd.com/221
edc65

9
@ edc65 Das ist nicht mehr lustig .
Martin Ender

@ MartinBüttner nicht lustig zu sein, sondern eine explizitere Regel vorzuschlagen. Als ich das erste Mal gelesen habe, habe ich wirklich gelernt, dass ich einen zufälligen auswählen und dann anfangen kann zu arbeiten.
Edc65

@ edc65 Ah wie ich sehe, war der Wortlaut früher anders.
Martin Ender

Antworten:


3

PHP 179

Inspiriert von der Antwort von 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 Zeichen)

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

Vielen Dank an @ core1024 für die Tipps zum Golfen.


1
Sie können 6 durch aktuelle neue Zeilen ersetzen, die Anführungszeichen "you"$$&1
herumwerfen

3

Java, 338

Ich kann es nicht unter 338 bekommen ...

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

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


Danke für den Link! Ich werde morgen nach etwas Nützlichem suchen.
CoolWilly

@Fabinout Ich habe ein paar Tricks ausprobiert, aber sie haben nicht geholfen. ( java.io.PrintStream p=System.out, addierte 15 Bytes zur Gesamtsumme,, static<T>void p(T o){System.out.print(o);}addierte 12). Irgendwelche anderen Vorschläge?
CoolWilly

Verwenden Sie statischen Block anstelle einer Hauptdeklaration
Hauptdeklaration

Statischer Block * 310 CHAR *: Klasse B {static {String b = "Unter dem sich ausbreitenden Kastanienbaum", c = "verkauft", d = "du", e = "und", f = "ich. \ NT", g = "hier liegen", h = ". \ n", i = "IS"; if (Math.random ()>. 5) System.out.print (b + "\ nI" + c + d + e + d + c + f + g + "sie" + e + g + "wir \ n" + b + h), sonst System.out.print ("WAR" + i + "PEACE" + h + "FREEDOM" + i + "SLAVERY "+ h +" IGNORANCE "+ i +" STRENGTH "+ h);}}
Fabinout

2

Javascript 229 254 256

Bearbeiten Sie 1 mit, new Datewie von @Doorknob vorgeschlagen - mir ist immer noch unklar, wie sich Javascript-Daten in Zeichenfolgen oder Ganzzahlen oder was auch immer verwandeln

Edit 2 vereinfacht. Viel.

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 Dateist kürzer alsDate.now()
Türklinke

1
So erklären Sie die DateKonvertierung: > Das JavaScript-Datum basiert auf einem Zeitwert, der seit dem 01. Januar 1970 (UTC) um Mitternacht Millisekunden beträgt. Ein Tag hält 86.400.000 Millisekunden. Der JavaScript-Datumsobjektbereich beträgt -100.000.000 Tage bis 100.000.000 Tage im Vergleich zum 01. Januar 1970 UTC. Wenn Sie &es tun , wird es automatisch auf a geworfen Number. Sie treffen also im Grunde genommen die zufällige Wahl basierend darauf, ob es sich seit der 1970-01-01T00:00:00.000ZEpoche um eine gerade oder eine ungerade Millisekunde handelt .
Bob

@Doorknob könntest du einen kurzen Artikel für diesen kürzeren Zufallszahlengenerator in codegolf.stackexchange.com/questions/2682/… schreiben ? Hab ihn dort noch nicht gesehen und ich denke, er könnte sehr nützlich sein.
Fehler

@flawr Fertig
Türklinke

2

C # (268) (260) (256)

Dies ist in LINQPad unter Verwendung des Befehls ausführbar Dump() Methode :

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

Aktualisieren:

Mit dem ternären Operator und 1 zusätzlichen Variablen konnte ich weitere 6 Zeichen ausschneiden:

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:

Dank des genialen Vorschlags von konnte tsavinhoich 4 weitere Zeichen sparen, indem ich Klammern um die ternäre Operation setzte:

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
Sie können 4 weitere Zeichen speichern, indem Sie a entfernen und durch Klammern wie diese ersetzen: Zeichenfolge b = "Unter dem sich ausbreitenden Kastanienbaum", c = "verkauft", d = "Sie", e = "und", f = "ich . \ nT ", g =" hier liegen ", h =" IS "; (new Random (). Next (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "sie" + e + g + "wir \ n" + b + ".") :( "KRIEG" + h + "FRIEDEN. \ nFREIHEIT" + h + "Sklaverei. \ nBetrug" + h + "STÄRKE.")). Dump ();
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="")

Leicht 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

Verwendet den -fOperator, um Zeichenfolgen in das erste Anführungszeichen einzufügen, und das zweite wird verbunden IS, danach wählt er ein zufälliges Element dieser beiden Anführungszeichen aus und druckt es aus ...



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

Aus Spaß habe ich in T-SQL eine weitere Lösung erstellt, die ein Byte kürzer ist als meine Java 8-Lösung:

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

Wenn Sie chars als zu lang deklarieren , können Sie einen "automatischen" Speicherplatz hinzufügen, der einige Bytes einspart.

Wenn Sie den Code in der vorgeschlagenen Bearbeitung durch den Benutzer PenutReaper verwenden, können Sie in der Tat 10 Bytes sparen.


Die Verwendung einer Variablen für Wagenrückläufe lohnt sich nicht. Verwenden Sie einfach wörtliche.
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 ")

Schrieb dies, ohne auf andere Antworten zu achten. Verwendet Zuweisungen als Ausdrücke.


0

05AB1E , 119 Bytes

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

Probieren Sie es online!


0

Python 3 , 222 Bytes

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

Probieren Sie es online!


0

C (GCC) , 307 289 271 Bytes

main(){int*r[]={"WAR"," IS ","PEACE.\nFREEDOM",r[1],"SLAVERY.\nIGNORANCE",r[1],"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++]);}

-36 bytes dank ceilingcat

Probieren Sie es online!


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.