1.スコア:9638
ベースのインタープリターはここにあり、提出物はここにあります。かなり長いので、ほとんどの記事を取り上げるのではなく、GitHubに含めました。
解決策
これらのソリューションはすべてユニコードプログラムであり、-u
コマンドラインフラグを使用して実行されますが、スコアはBugleのコードページでエンコードされているかのようにカウントされます。
$72o101o108o108o111o44o32o87o111o114o108o100o33o
単にプッシュしてから、文字列内の各文字の文字コードを出力します。
$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o
Hello、World!と同じテクニック 例
#++O--O+O+++O
#
テープを使用し+
、セルをインクリメントO
し、整数として出力し、-
デクリメントします
#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o
Brainfuckに固有の類似性を使用します。ルール#1および#3に適合
$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o
コルモゴロフの複雑さの課題はすべて、現時点ではこのような構造を持っています。
$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o
$?:Zs0=0s-s:1s-++O
入力がゼロより大きいか、ゼロより小さいか(ゼロでは-1
なくyield に変更される1
)、ゼロに等しいかどうかをチェックしてから、合計を取ります。
#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O
これにより、スタックでループが実行されますが、テープに切り替えて、反復ごとにカウントが増加します。
#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O
これは、既存の課題に対するMitch Schwartzの回答をわずかに修正したものです。
$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O
すべての信用はに行くEmignaために作り、これを
$?:1s-:[:1s-:];L1s[×L2s-]:×%O
ウィルソンの定理を使用して計算します (n-1)!² % n
$?:R=:O:=R:?$
プログラムの前半までO
は、スタックを[x, x]
where またはのx
いずれかに設定します。トップ値をポップして出力します。プログラムの残りの部分は、エラーが発生しないことを確認するだけです。幸いなことに、ファイルの終わりに達すると、プッシュするだけですTrue
False
O
?
''
(空の文字列)。
$?:[?:];L0s[+L1s-]O
これは2つの部分に分割できます:?:[?:];
とL0s[+L1s-]
。最初の部分は、スタックへのすべての入力を収集します。2番目の部分は、長さが1より大きい間、上位2つの要素の合計をプッシュします。
$?:[:1s-:];L1s-Z[×L1s-]O
これはsumプログラムと似た構造を持っていますが、ltiple入力をプッシュする代わりに[:1s-:];
、範囲を1 .. n
スタックにプッシュし、[×L1s-]
、積取ります。
#+[O]
whileループを使用1
し、ポインタの下で継続的に使用します。1
永遠に出力します。
$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o
$?:1:[:rs%0=s1+srr:Rs]1s-O
これは試行除算を使用し、モジュロの結果が等しくないときに終了します0
。
$2?%O
2によるモジュロ
$16:[32+:o33s-:]
最初の16個の印刷可能なASCII文字を逆順に出力します。 0/.-,+*)('&%$#"!
$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]
これを行うためのクレジットはuser202729になります
言語仕様
呼び出し中
bugle.py
現在、一連のフラグを取得し、実行するファイル名/コードを取得します。まだ、4つのコマンドラインフラグがあります。
-f
/ --file
は、コードがファイルから読み取られることを指定します
-c
/ --cmd
/ --cmdline
は、コードがコマンドライン経由で提供されることを指定します。
-c
そして、-f
同じ呼び出しで使用することはできません
-u
/ --unicode
は、インタープリターにUnicodeエンコードでコードを読み取るように指示します。デフォルトでは、以下のBugleのエンコードを使用します
-l
/ --length
実行後にファイルの長さをバイト単位でSTDERRに出力します
次の呼び出しは、上記の提出をテストするために使用されました
$ python bugle.py -f -u [file]
コードページ
Bugleはコードページで512文字を使用します。この0xFF
文字は、次の16進値がコードページの後半にインデックスを付けることを示すために使用されるため、コマンドには使用されません。使用される文字は次のとおりです。
ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
または、表形式で表示します。\t
と\n
はそれぞれタブと改行を表すことに注意してください。また、16行目が印刷できない文字で終了していることに注意してください
。すべてのブラウザで表示されない場合があります。
記憶
インタープリターには現在5つのメモリモデルが組み込まれています。各メモリモデルには、インタープリターにそのモデルの使用を開始するよう指示する文字が必要です。
- スタック(
$
):プッシュ、ポップなどの値をサポートする標準スタック。
- 無限テープ(
#
):Brainfuckのようなテープ0
。最初はs だけです。
- 無限グリッド(
G
):2次元グリッド、両方向に無限、0
s のみを含む
- Deque(
D
):モジュールによって実装されるdequecollections
。
- レジスタ(
S
):1つの値。1つの値を格納するために使用できます。
グリッドのポインターには単一の値が保存されており、セルに書き込む、またはセルに書き込むことができます。
さらに、別の呼び出しコマンドを使用して、テープとグリッドのサイズと折り返し動作を変更できます。これらの異なるコマンドは、現在のメモリモデルから特定の数の値をカスタマイズパラメーターとして取得します。
- テープ(
À
):サイズ(int
)とラッピング(bool
)の2つの値を取ります
- テープ(
Á
):値(サイズint
)を1つ取ります。テープの終わりでラップ
- テープ(
Â
):値(サイズint
)を1つ取ります。最後にラップしません
- グリッド(
Ǵ
):4つの値を取ります-xサイズ(int
)、yサイズ(int
)、xラップ(bool
)およびyラップ(bool
)
使用されているメモリタイプは、プログラムの実行中に₀₁₂₃₄₅₆₇₈₉
0のインデックス付きのn
使用済みメモリタイプ(₀
1 ₁
番目、2番目など)にアクセスして変更できますが、現在、異なるメモリタイプ間で値を交換することはできません。
分岐
これまでのところ、ビューグルには2つの分岐コマンドがあり、どちらも]
文字で終了しています。
組み込み関数
一連の数字は整数として解釈され、現在のメモリモデルにそのままプッシュ/書き込まれます。
明らかに、チェーンの進行に合わせて他の人がさらに追加できるように、Bugleにいくつかの基本的な組み込み関数を、できる限り少なくしました。基本コマンドは次のとおりです。
+
- Stack / Deque:上位2つの値を追加します
- テープ/グリッド:現在のセルをインクリメント
-
- Stack / Deque:上位2つの値を減算します
- テープ/グリッド:現在のセルをデクリメントします
%
- Stack / Deque:上位2つの値をモジュロ
:
- Stack / Deque:最上位の値を複製します
;
- Stack / Deque:一番上の値をポップします
- テープ/グリッド:現在のセルをゼロにする
<
=
- スタック:上位2つの値は等しいですか?
- グリッド:1セル下に移動
>
?
- Stack / Deque:入力行を評価します
- テープ/グリッド:入力文字を取得します
L
- スタック/デック:スタック/デックの長さをプッシュします
O
R
- スタック:可能であれば最上部の要素を反転し、そうでなければスタックを反転します
Z
^
h
o
r
- スタック:上位3つの値を回転します
- Deque:deque
n
時間を回転します。ここn
で、最高値です
s
- Stack / Deque:上位2つの値を交換します
…
×
- スタック:上位2つの値を乗算します
- グリッド:ポインター値を現在のセルに書き込みます
÷
- スタック:上位2つの値を除算します
- グリッド:現在のセルをポインター値に書き込みます