Citando o Big Brother

15

Tarefa: Faça com que seu programa escolha aleatoriamente uma das duas cotações a seguir em tempo de execução e imprima essa cotação, exatamente como mostrado.

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.

Restrições: As palavras spreading, chestnut, PEACE, FREEDOM, e STRENGTH deve aparecer em seu código. Nenhuma palavra das duas aspas acima pode aparecer em seu código mais de uma vez .

A solução mais curta vence.

cupofjoe
fonte
1
Ok, eu escolhi o primeiro. Honesto! xkcd.com/221
edc65
9
@ edc65 Isso não é mais engraçado .
Martin Ender
@ MartinBüttner não para ser engraçado, mas para sugerir uma regra mais explícita. Lendo a primeira vez que realmente pensei, poderia escolher uma aleatória e começar a trabalhar.
Edc65
@ edc65 Ah, entendo, o texto costumava ser diferente.
Martin Ender

Respostas:

3

PHP 179

Inspirado pela resposta 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"]);
core1024
fonte
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

Obrigado @ core1024 por dicas sobre isso.

es1024
fonte
1
Você pode substituir 6 com novas linhas de reais, soltar as aspas "you"e uso $$&1como um gerador aleatório :)
core1024
3

Java, 338

Não consigo obtê-lo abaixo 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);}}

Pouco não destruído:

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);}}
CoolWilly
fonte
1
Sim, você pode codegolf.stackexchange.com/questions/6671/… .
Fabinout 5/08
Obrigado pelo link! Vou procurar algo útil amanhã.
CoolWilly
@Fabinout Eu tentei alguns truques, mas eles não ajudaram. ( java.io.PrintStream p=System.out, adicionou 15 bytes ao total static<T>void p(T o){System.out.print(o);}, adicionou 12). Alguma outra sugestão?
CoolWilly #
usar protetor estático em vez de uma declaração principal
Fabinout
Bloco estático * 310 CHAR *: classe B {estática {String b = "Sob o castanheiro que se espalha", c = "vendido", d = "você", e = "e", f = "eu. \ NT", g = "aqui está", h = ". \ n", i = "IS"; if (Math.random ()>. 5) System.out.print (b + "\ nI" + c + d + e + d + c + f + g + "eles" + e + g + "nós \ n" + b + h); else System.out.print ("WAR" + i + "PAZ" + h + "LIBERDADE" + i + "ESCRAVIDÃO "+ h +" IGNORÂNCIA "+ i +" FORÇA "+ h);}}
Fabinout 6/14/14
2

Javascript 229 254 256

Edite 1 usando new Datecomo sugerido por @Doorknob - ainda não está claro para mim como as datas javascript se transformam em seqüências de caracteres ou números inteiros ou o que for

Edite 2 simplificado. Muito.

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)
edc65
fonte
new Dateé mais curto queDate.now()
Doorknob
1
Para explicar a Dateconversão: > A data do JavaScript é baseada em um valor de tempo que é milissegundos desde meia-noite de 01 de janeiro de 1970, UTC. Um dia possui 86.400.000 milissegundos. O intervalo de objetos Data do JavaScript é de -100.000.000 dias a 100.000.000 dias em relação a 01 de janeiro de 1970, UTC. , quando você &é convertido automaticamente para a Number. Então, você está basicamente fazendo a escolha aleatória com base em milissegundos pares ou ímpares desde a 1970-01-01T00:00:00.000Zépoca.
Bob
@ Doorknob, você poderia escrever um pequeno artigo para esse gerador de números aleatórios mais curto em codegolf.stackexchange.com/questions/2682/… Ainda não o vi por lá e acho que pode ser bastante útil.
flawr
@flawr Concluído
Maçaneta da
2

C # (268) (260) (256)

Isso é executável no LINQPad, usando o 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();

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

Atualizar:

Usando o operador ternário e uma variável extra, consegui cortar outros 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();

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:

Graças à sugestão engenhosa, tsavinhopude economizar mais 4 caracteres colocando chaves ao redor da operação ternária:

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();
Abbas
fonte
1
Você pode salvar mais 4 caracteres removendo a e substituindo-o por colchetes como este: string b = "Sob o castanheiro espalhado", c = "vendido", d = "você", e = "e", f = "me . \ nT ", g =" aqui está ", h =" IS "; (new Random (). Next (9)> 4? (b +" \ nI "+ c + d + e + d + c + f + g + "eles", + e + g + "nós \ n" + b + ".") :( "GUERRA" + h + "PAZ. \ nFREEDOM" + h + "ESCRAVIDÃO. \ NIGNORÂNCIA" + h + "FORÇA.")). Despejo ();
tsavinho 6/08/2014
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="")

Ligeiramente não destruído:

# 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
Vetorizado
fonte
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

Usa o -foperador para inserir strings na primeira cotação e a segunda é unida por IS, depois disso, ele seleciona um elemento aleatório dessas 2 cotações e o imprime ...

DarkAjax
fonte
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);
});
bacchusbeale
fonte
1

T-SQL, 337 327

Por diversão, criei outra solução no T-SQL, que é um byte menor que a minha solução 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.'

Ao declarar o chars por muito tempo, você pode adicionar um espaço 'automático', economizando alguns bytes.

Usando o código na edição proposta pelo usuário PenutReaper, você pode economizar 10 bytes.

CoolWilly
fonte
Usar uma variável para retornos de carro não vale a pena. Basta usar literais.
Muqo 18/09/14
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 ")

Escreveu isso sem olhar para outras respostas. Faz bom uso de atribuições como expressões.

MegaTom
fonte
0

05AB1E , 119 bytes

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

Experimente online!

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

Experimente online!

Jitse
fonte
0

C (GCC) , 307 289 271 270 bytes

-37 bytes graças ao 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++]);}

Experimente online!

girobuz
fonte