Citando a Gran Hermano


16

Tarea: Haga que su programa elija aleatoriamente una de las siguientes dos citas en tiempo de ejecución e imprima esa cita exactamente como se muestra.

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.

Restricciones: Las palabras spreading, chestnut, PEACE, FREEDOM, y STRENGTH deben aparecer en el código. Ninguna palabra de las dos citas anteriores puede aparecer en su código más de una vez .

La solución más corta gana.


1
Ok, elegí el primero. ¡Honesto! xkcd.com/221
edc65

99

@ MartinBüttner no es divertido, sino que sugiere una regla más explícita. Leyendo por primera vez, realmente pensé que podía elegir uno aleatorio y luego comenzar a trabajar.
edc65

@ edc65 Ah, ya veo, la redacción solía ser diferente.
Martin Ender

Respuestas:


3

PHP 179

Inspirado por la respuesta de 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 caracteres)

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

Gracias @ core1024 por los consejos para jugar al golf.


1
Puede reemplazar 6 con nuevas líneas reales, descartar las comillas "you"y usar $$&1como generador aleatorio :)
core1024

3

Java, 338

No puedo ponerlo por debajo de 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);}}

Poco sin golf:

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


Gracias por el enlace! Voy a buscar algo útil mañana.
CoolWilly

@Fabinout He intentado algunos trucos, pero no me han ayudado. ( java.io.PrintStream p=System.out, se agregaron 15 bytes al total static<T>void p(T o){System.out.print(o);}, se agregaron 12). ¿Cualquier otra sugerencia?
CoolWilly

use bloque estático en lugar de una declaración principal
Fabinout

Bloque estático * 310 CHAR *: clase B {estática {Cadena b = "Debajo del castaño", c = "vendido", d = "usted", e = "y", f = "yo. \ NT", g = "here lie", h = ". \ n", i = "IS"; if (Math.random ()>. 5) System.out.print (b + "\ nI" + c + d + e + d + c + f + g + "ellos", + e + g + "we \ n" + b + h); de lo contrario System.out.print ("WAR" + i + "PAZ" + h + "FREEDOM" + i + "ESCLAVITUD "+ h +" IGNORANCIA "+ i +" FUERZA "+ h);}}
Fabinout

2

Javascript 229 254 256

Edite 1 usando new Datelo sugerido por @Doorknob: todavía no me queda claro cómo las fechas de JavaScript se transforman en cadenas o enteros o lo que sea

Edición 2 simplificada. Mucho.

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 Datees más corto queDate.now()
Pomo de la puerta

1
Para explicar la Dateconversión: > La fecha de JavaScript se basa en un valor de tiempo que es milisegundos desde la medianoche del 01 de enero de 1970 UTC. Un día tiene 86,400,000 milisegundos. El rango de objetos de fecha de JavaScript es de -100,000,000 días a 100,000,000 días en relación con el 01 de enero de 1970 UTC. , cuando &se convierte automáticamente en a Number. Entonces, básicamente, está haciendo una elección aleatoria en función de si es un milisegundo par o impar desde la 1970-01-01T00:00:00.000Zépoca.
Bob

@Doorknob, ¿podría escribir un breve artículo para ese generador de números aleatorios más corto en codegolf.stackexchange.com/questions/2682/… Todavía no lo he visto allí y creo que podría ser bastante útil.
flawr

@flawr Hecho
Pomo

2

C# (268) (260) (256)

Este es ejecutable en LINQPad, usando el Dump() método:

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

Sin golf:

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

Actualizar:

Usando el operador ternario y 1 variable adicional, pude cortar otros 6 caracteres:

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

Sin golf:

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

Actualización2:

Gracias a la ingeniosa sugerencia de tsavinhoque pude guardar 4 caracteres más colocando llaves alrededor de la operación ternaria:

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

Sin golf:

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
Puede guardar 4 caracteres más quitando a y reemplazándolo con corchetes como este: string b = "Debajo del árbol de castañas", c = "vendido", d = "usted", e = "y", f = "me . \ nT ", g =" here lie ", h =" IS "; (new Random (). Next (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "ellos," + e + g + "we \ n" + b + ".") :( "GUERRA" + h + "PAZ. \ nFREEDOM" + h + "ESCLAVITUD. \ nIGNORANCE" + h + "FUERZA".)). Tugurio();
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="")

Ligeramente no golfista:

# 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

Utiliza el -foperador para poner cadenas en la primera cita, y se une a la segunda IS, luego selecciona un elemento aleatorio de esas 2 citas y lo imprime ...



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

Solo por diversión, hice otra solución en T-SQL, que es un byte más corto que mi solución 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.'

Al declarar el chars demasiado largo, puede agregar un espacio 'automático', ahorrando unos pocos bytes.

Usando el código en la edición propuesta por el usuario PenutReaper, puede recortar 10 bytes.


Usar una variable para retornos de carro no vale la pena. Solo usa los literales.
Muqo

1

Script 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 ")

Escribió esto sin mirar otras respuestas. Hace buen uso de las asignaciones como expresiones.


0

05AB1E , 119 bytes

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

Pruébalo en línea!


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

Pruébalo en línea!


0

C (gcc) , 307 289 271 270 bytes

-37 bytes gracias a 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++]);}

Pruébalo en línea!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.