ビッグブラザーを引用


15

タスク:実行時にプログラムに次の2つの引用符のいずれかをランダムに選択させ、その1つの引用符を表示どおりに印刷します。

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.

制限事項:言葉spreadingchestnutPEACEFREEDOM、とSTRENGTH しなければならないあなたのコードで表示されます。上記の2つの引用符からの単語は、コード内で複数回使用できません。

最短のソリューションが勝ちます。


1
はい、私は最初のものを選びました。正直!xkcd.com/221
edc65


@MartinBüttnerは面白くないが、より明確なルールを提案する。初めて読んだときに、ランダムなものを選択して仕事を始めることができると本当に思った。
edc65 14

@ edc65ああ、昔は言葉遣いが違っていました。
マーティンエンダー14

回答:


3

PHP 179

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文字)

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

これをゴルフするためのヒントを@ core1024に感謝します。


1
6を実際の新しい行に置き換え、引用符をドロップしてランダムジェネレーターとして"you"使用できます$$&1:)
core1024 14

3

Java、338

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

ビットなし:

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

@Fabinoutいくつかのトリックを試しましたが、助けにはなりませんでした。(java.io.PrintStream p=System.out、合計に15バイトをstatic<T>void p(T o){System.out.print(o);}追加、12を追加)。他の提案はありますか?
CoolWilly 14

代わりメイン宣言の使用静的ブロック
Fabinout

静的ブロック* 310 CHAR *:クラスB {static {String b = "栗の木の下で"、c = "販売済み"、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);}}
Fabinout 14

2

Javascriptを229 254 256

new Date@Doorknobが示唆するように1編集します。javascriptの日付が文字列や整数などにどのように変化するかはまだわかりません。

編集2を簡略化しました。たくさん。

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 Dateより短いDate.now()
ドアノブ

1
Date変換の説明:> JavaScriptの日付は、UTC 1970年1月1日午前0時からのミリ秒単位の時間値に基づいています。1日は86,400,000ミリ秒です。JavaScript Dateオブジェクトの範囲は、1970年1月1日UTCを基準として-100,000,000日から1億日です。&それは自動的ににキャストされますNumber。したがって、基本的には、1970-01-01T00:00:00.000Zエポックからの偶数または奇数ミリ秒に基づいてランダムに選択します。
ボブ14

@Doorknobあなたはにより短い乱数生成のための短い記事書くことができcodegolf.stackexchange.com/questions/2682/...はまだそれを見ていないが、私はそれが非常に有用である可能性だと思います。
flawr

@flawr 完了
ドアノブ

2

C#(268)(260)(256)

これは、次のDump()メソッドを使用して、LINQPadで実行可能です。

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

ゴルフをしていない:

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

更新:

三項演算子と1つの追加変数を使用して、さらに6文字をカットできました。

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

ゴルフをしていない:

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:

tsavinho私の独創的な提案のおかげで、三項演算の周りにブレースを配置することで、さらに4文字を節約できました。

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

ゴルフをしていない:

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を削除し、次のような括弧で置き換えることにより、さらに4文字を保存できます。string b = "Under the the 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。"))。投げ捨てる();
tsavinho 14

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

わずかに未使用:

# 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演算子を使用して、最初の引用符に文字列を配置し、2番目の引用符をで結合しますIS。その後、これらの2つの引用符のランダム要素を選択して出力します...



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

楽しみのために、T-SQLで別のソリューションを作成しました。これは、私のJava 8ソリューションよりも1バイト短くなっています。

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

charsの宣言が長すぎると、「自動」スペースを追加して、数バイト節約できます。

ユーザーPenutReaperが提案する編集のコードを使用すると、実際に10バイトを削ることができます。


キャリッジリターンに変数を使用する価値はありません。リテラルのものを使用してください。
ムコ14

1

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

他の答えを見ずにこれを書いた。式として割り当てを有効に活用します。




0

C(GCC) 307の 289 271 270バイト

ceilingcatのおかげで-37バイト

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

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.