失われたRNGを作成する


17

Lostは、IPの開始位置と方向が完全にランダムな2次元プログラミング言語です。

これにより、決定論的なロストプログラムを作成することが非常に困難になります。しかし、今日は決定論的なプログラムを書いているのではなく、RNGを書いています。

入力を受け取らず、1桁(0、1、2、3、4、5、6、7、8、または9)を出力するロストプログラムを作成します。すべての数字は出力される確率が等しくなります。Lostの開始位置と方向がランダム性の唯一のソースであるため、これを行う唯一の方法は、ソースのすべての位置に0〜9の異なる数字を出力させ、各数字を同じ数字で出力することです。

-Qフラグを使用してこのpythonスクリプトにパイピングすることにより、各桁の確率を計算できます

import sys
a=sys.stdin.read().split()[:-1]
for x in range(10):print x,':',a.count(`x`)
print[x for x in a if x not in list("1234567890")]

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

これはため、回答はバイト単位でスコアリングされ、バイト数が少ない方が優れています。


ロストの概要

Lostは、クラインの型から多くを奪う、暗黙のIO 2D言語のラッピングです。失われたコマンドの機能の簡単なチートシートを次に示します

  • \/|ミラーIP

  • <^>vの方向でipポイント

  • [IPが東に移動している場合、IPを反映します。]IPが水平方向に移動している場合になります

  • ]IPが西に移動している場合、IPを反映します。[IPが水平方向に移動している場合になります

  • ! 次の操作をスキップします

  • ? スタックの一番上から飛び出し、ゼロでない場合はジャンプします

  • : スタックの最上部を複製します

  • $ スタックの上位2つのアイテムを交換します

  • ( スタックからポップし、スコープにプッシュします

  • ) スコープからポップしてスタックにプッシュします

  • 0- 9プッシュnはスタックの最上部へ

  • "文字列リテラルを開始および終了します。文字列リテラルでは、コマンドは実行されず、代わりに文字値がスタックにプッシュされます。

  • + 上位2つの数字を追加します

  • * 上位2つの数値を乗算します

  • - トップに-1を掛けます

  • % 安全をオフにします

  • # 安全をオンにします

  • @ 安全性がオフの場合、実行を終了します(オンに開始)


スタックから2つの値をスワップしようとしても値が1つしかない場合、または空のスタックからポップしようとした場合はどうなりますか?
-pppery

@ppperryスタックには暗黙のゼロが埋め込まれます。
ポストロックガーフハンター

1
言語に関する情報が少なすぎます。ラップしますか?「安全」とはどういう意味ですか?ブレースの説明は誤解を招きやすいですか?スコープはどのように使用されますか?
デッドポッサム

@DeadPossum簡潔にしようとしました。ラップします。安全性はすでに質問で説明されています。括弧の意味がわかりません。 []ドアとして機能し<>、方向を示し()、スコープから保存およびリコールします。スコープは値を保存するために使用されます。
ポストロックガーフハンター

@WheatWizardでは、安全性は単なる条件@であり、他のユースケースはありますか?括弧については、この部分がわかりません:becomes ] if the ip is moving horizontally。東への移動も水平方向ですね。
デッドポッサム

回答:


12

81 101バイト

これはさらにゴルフ可能かもしれません...

>%(0@>%(1@>%(2@>%(3@>%(4@>%(5@>%(6@>%(7@>%(8@>%(9@
^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<

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


1
興味深いアプローチ!私はそれを考えていなかった
ポストロックガーフハンター

1
二重印刷を修正する101バイト。セーフティをオフにする前にスタックポップを追加したので、開始時に数字にヒットすると、ポップして再度プッシュしてから死ぬことができます。これは...技術的にはまだ一様乱数かかわらずである場合、私は知らない
アーノルド・パーマー

1
私は文字通り同じアイデアを同時に思いついた
...-pppery

1
出力は均一ではありません。 0印刷中の101分の7機会は、(任意の<又は^そのブロックの下に、プラス>及び%記号)、1- 8101分の10チャンスを有し、9101分の11チャンスを有します。そうなると、永遠に続く可能性があるようです。
アーノルドパーマー

1
それは折り返さなければなりません。さもなければ、これは上行から始まるときに終了します。
-pppery

9

失われた、54バイト

>%(0@>%(1@
@>%(2@>%(3
5@>%(4@>%(
(7@>%(6@>%
%(9@>%(8@>

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

ppperyの回答からコピーして、ランダムな処理を行います。私は失われた言語について何も知りません。そして、私は上記のコードで何が起こっているのかさえ知りません。これでいいですか?(知りません)


あなたのコードはppperryの半分の出力を生成しますが、それはどのように-Q動作するのでしょうか?とにかく、出力は正常に分散されているようです。質問でリンクされた言語の完全な仕様があればよかったでしょう。
アーロン

@アーロン私はどのように-Q機能するかを説明する必要がありました。言語はランダムなので、検証はすべての可能性を実行することによって行われます。 -Qこれを行い、すべての結果を出力します。プログラムが短いほど可能性は低くなり、出力は少なくなります-Q
ポストロックガーフハンター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.