タグ付けされた質問 「interpreter」

さまざまな言語や形式の通訳を書く作業。

10
難解な言語のジャンパー用のインタープリターを書く
難解な言語ジャンパーを考えました。後でその理由がわかります。 これは、バイトをセルとして使用するランダムアクセスメモリで動作します。RAMのインデックスはゼロで、最初はゼロで埋められています。 負のインデックスを持つセルにアクセスしようとすると、エラーが表示され、プログラムが終了します。 最後よりも大きいインデックスで読み取りを試みると、ゼロが返されます。 最後よりも大きいインデックスで書き込みを試みる場合、RAMを1024の倍数に増やし、新しいセルをゼロで埋める必要があります(技術的には、RAMを1024の倍数に増やすことはできません。理由はパフォーマンスが向上したためです。 1024の倍数にはできません)。 プログラムには、最初はゼロであるRAM内のセルへのポインターもあります プログラムが実行を開始すると、入力文字列のプロンプトが表示されます(またはコマンドライン引数から入力を取得します)。入力文字列にヌル文字(ゼロバイト)を含めることはできません。次に、ゼロインデックスから始まる入力文字列がRAMに書き込まれます。 プログラムが終了すると、プログラム出力を含むボックスが表示されます-ゼロインデックスから最初のゼロバイトを除くRAMの内容が表示されます さて、最も興味深い部分は構文です。 プログラムは、コマンド(単項演算子-接頭辞)とその引数で構成されます。コマンドと引数は、スペースまたは改行で区切ることができますが、必須ではありません。ただし、引数内のスペースは無効です。たとえば、# 2 = 4有効ですが有効で# 2 = 4 4はありません。 プログラム間でコメントを付けることができます()。コメントはネストできません。たとえば、(abc(def)ghi)コメントは(abc(def)です。コメントはどこにでも配置できます。 #123 RAMポインターを123(任意の正の10進整数またはゼロ)に設定します。 >123 RAMポインターを123(任意の正の10進整数)ずつ増やします。 <123 RAMポインターを123(任意の正の10進整数)減らします。 =123 現在のセルに123(符号なし8ビット10進整数)を書き込みます。 +123 123(符号なし8ビット10進整数)を現在のセル(モジュロ256)に追加します。 -123 現在のセル(モジュロ256)から123(符号なし8ビット10進整数)を減算します。 :123-"goto"-コマンド番号123に移動します(最初は0です)。プログラムのフローはgotoでのみ制御できます-ジャンプする必要があるため、この言語をJumperと呼ぶことにしました。 引数が欠落している場合- ><+-コマンドの場合は1、コマンドの場合は0 と考えて#=:ください。 また、コマンド修飾子があります- ?(コマンドのプレフィックス)、現在のセルがゼロでない場合にのみ次のコマンドを実行し、そうでない場合はそのコマンドをスキップします。任意のコマンドに適用できます。 たとえば、?:17-は、現在のセルがゼロでない場合、コマンド17に進みます。 プログラムが無効であるか、実行時にエラーが発生した場合、メッセージ「エラー」を表示できます。これはCodeGolfであるため、このような短いメッセージは問題ありません。 あなたのタスク この言語の最短のインタプリタを作成します。 いくつかのテストプログラム (prints "Hello world!" regardless of input) =72>=101>=108>=108>=111>=32>=119>=111>=114>=108>=100>=33>= (appends …

6
Anyfix表記を実装してください!
プレフィックス表記では、演算子は引数の前に来るため、演算子next()が再帰的に呼び出されることを想像できます。中置記法では、演算子は引数の間を行き来するので、単純に構文解析ツリーと考えることができます。後置記法では、演算子は引数の後に来るため、スタックベースと考えることができます。 anyfix表記では、演算子はどこにでも行くことができます*。演算子が表示され、十分な引数がない場合、演算子は十分な引数があるまで待機します。この課題のために、非常に基本的なanyfix評価器を実装することになります。(anyfixは、ここで遊んだり、ここでチェックしたりできるように放棄したレクリエーション言語であることに注意してください) 次のコマンドをサポートする必要があります。 (アリティ1) 複製する 負 (アリティ2) 添加 乗算 等式:0またはを返します1。 これらのコマンドには、任意の5つの非空白記号を使用できます。デモンストレーションのために、"複製、×乗算、加算として使用し+ます。 リテラルについては、負でない整数のみをサポートする必要がありますが、インタープリターはすべての整数(言語の(合理的な)整数範囲内)を含めることができる必要があります。 例を見てみましょう10+5。ストレージは、キューではなくスタックとして動作する必要があります。最初に、スタックはから始まり[]、キューに入れられた演算子リストはから始まり[]ます。次に、リテラル10が評価され、スタックが作成されます[10]。次に、演算子+が評価されます。これには2つの引数が必要です。ただし、スタックには引数が1つしかないため、キュー演算子リストはになり['+']ます。次に、リテラル5が評価され、スタックが作成されます[10, 5]。この時点で、演算子'+'を評価して、スタック[15]とキューを作成できます[]。 最終的な結果は、あるべき[15]ために+ 10 5、10 + 5と10 5 +。 より難しい例を見てみましょう10+"。スタックとキューは[]andで始まります[]。10最初に評価され、スタックが作成されます[10]。次に、+が評価されますが、これはスタックを変更せず(十分な引数がないため)、queueを作成します['+']。次に、"評価されます。これはすぐに実行できるため、スタックが作成されます[10, 10]。+これで、スタックが[20]キューになるように評価できます[]。最終結果は[20]です。 操作の順序はどうですか? を見てみましょう×+"10 10。スタックとキューは両方とも次のように開始します[]。 ×:スタックは変更されず、キューは ['×']ます。 +:スタックは変更されず、キューは ['×', '+']ます。 ":スタックは変更されず、キューは ['×', '+', '"']ます。 10:スタックはになり[10]ます。にもかかわらず×、それが最初に表示されますので、最初の演算子が評価されるようにする必要があり、"それが評価されるので、すぐに実行しないと演算子のどれもそれができる前にすることができます。スタックがに[10, 10]なり、キューになります['×', '+']。×これで評価できるようになり、スタック[100]とキューが作成されます['+']。 10:スタックはになり[100, 10]、+評価できるようになります。スタックがに[110]なり、キューになります[]。 最終結果は [110]です。 これらのデモで使用されるコマンドは、anyfix言語のコマンドと一致しています。ただし、最後の例は、インタープリターのバグが原因で機能しません。(免責事項:あなたの提出物はanyfixインタープリターでは使用されません) チャレンジ 5つの空白以外の数字以外の文字のセットを選択し、上記の仕様に従ってanyfixインタープリターを作成します。プログラムは、特異配列またはそれに含まれる値を出力できます。値のスタックには実行の終了時に単一の値のみが含まれ、演算子のキューは実行の終了時に空になることが保証されています。 これはコードゴルフなので、バイト単位の最短コードが勝ちです。 テストケース これらのテストケースでは、duplicate is "、negative …

5
ais523のBackFlipを実行してください!
この課題は、のための賞であるais523のための勝利「新人王」のカテゴリを「PPCG 2016のベスト」。おめでとう! BackFlipは、ユーザーais523によって作成された難解なプログラミング言語です。ais523は、他にも30以上の興味深いesolangを作成しています。 BackFlipはBefungeや> <>のような2D言語で、命令ポインターがテキストのグリッド(プログラム)を横断し、上、下、左、右に移動し、文字に応じて方向を変えます。重大なことに、BackFlipプログラムのグリッドは、ラングトンのAntのように、移動中に変化します。 この課題では、BackFlipプログラムは常にテキストの長方形のグリッド(すべての行が同じ長さ)で、サイズが少なくとも1×1で、文字のみを含むと想定できます./\<>^V。(.スペースではなく、可視性のために使用されます。)ここで使用するBackFlipは、意味的には元のspecと同じです。 BackFlipの命令ポインター(IP)は、常にプログラムの左上隅のすぐ右から始まります。遭遇する可能性のあるコマンドには3つのタイプがあります。 .ノーオペレーションです。IPは、進行方向に進みます。ノーオペレーションはノーオペレーションのままです。 /と\ミラーです。それらは、角度で示される方向にIPを反射し、その後、他のタイプのミラーに変わります。 たとえば、IPが左に向かう場合、\左ではなく上方向に動き始め、はに\なります/。 <、>、^、およびV矢印です。IPを指し示す方向にリダイレクトし、IPが来た方向(IPが動いていた方向とは反対)を指す矢印に変わります。 たとえば、IPが下に向かう場合、IPは下>ではなく右に移動し始めます。これは、IPの方向で>ある^ためです。 BackFlipプログラムは、IPが範囲外に移動すると、つまりグリッドから外れると終了します。それは結局のところ、すべての無限ループが不可能であるため、バク転プログラムが最終的に終了します。(これは真実であると仮定できます。) この課題の目標は、BackFlipプログラムを取り込んで、プログラムが終了する前に命令ポインターが取る移動数を出力するプログラムまたは関数を作成することです。つまり、プログラムの実行中にIPは何ステップを実行しますか?これには、グリッドへの最初のステップとグリッドからの最終ステップが含まれます。 たとえば、指示ポインターは、単純なグリッドで5つのステップを取ります....。 .... <- empty 4×1 grid 012345 <- step number of the IP したがって、への出力....は5です。 より複雑な4×2グリッド \... \.>< IPは9番目のステップでグリッドを終了するため、出力は9次のようになります。 step grid IP position (@) 0 \... @.... \.>< .... 1 \... @... \.>< .... 2 /... .... …

4
ASCIIアートで長い分割を視覚化する
ASCIIアートで長い除算を視覚化するプログラムを作成します。入力は、選択した入力形式を使用して、分子と分母の2つの整数で構成されます。 例: 1234÷56: 22 ---- 56|1234 112 --- 114 112 --- 2 1002012÷12: 83501 ------- 12|1002012 96 --- 42 36 -- 60 60 -- 12 12 -- 0÷35 0 - 35|0 ルール: プログラミング言語の除算演算子の使用は許可されています。 大きな整数のサポートの使用も許可されています。 一貫性のために: 商がゼロの場合、ダイビングボードの最後にゼロを1つ出力します。 余りがゼロの場合、印刷しないでください。 数字に先行ゼロを印刷しないでください。 末尾の余分な改行と右側の末尾のスペースは許可されます。 最小の文字数のソリューションが勝ちです。 制限: 0 <=分子<= 10 72 - 1 1 <=分母<= 9999999 …

11
+ pコードを解釈する
別の2文字の言語に対する最近の流行に触発されて、 ;# イントロ コミュニティのコンセンサスによると、このサイトで受け入れられる回答には、少なくとも次のプログラミング言語を使用する必要があります。 自然数が素数かどうかを判断できます 2つの自然数を加算できます 数字のリスト/タプル、および単一の数字を表すことができます この課題のために、#3は無視します。したがって、このサイトで使用できる最も単純な言語(#3を無視)には、正確に2つのコマンドがisPrimeありaddます。解釈とバイトカウントを簡単にするisPrimeためにp、とaddに割り当てましょう+。したがって、言語があり+pます。あなたの課題は、いくつかの+pコードを解釈することです。 動作 + その add命令は、2つの数値をとり、それらを加算し、その結果を出力します pisPrime命令は、単一の番号、および出力をとり1、それが素数であれば、そして0それがない場合には ルール 文字列を指定すると、その文字列を+pコードとして解釈するプログラム/関数を作成する必要があります。あなたは、十分に形成された入力(のみ取ることができる+とp文字)。 入力は柔軟です。プログラムを文字列、文字配列、コードポイントの整数配列などとして取り込むことができます。解釈されるプログラムの入力も柔軟です。整数配列を取り込んで、プログラムの実行中にエントリを使い果たすか、各命令(+およびp)が個別に入力を要求する場合があります。すべての命令に対して十分な入力があると仮定することができます。入力は、0〜200の数字で構成されることが保証されています(ただし、アルゴリズムは、正の整数入力に対して理論的に機能するはずです)。 出力も柔軟です。結果を印刷したり、リストとして返したり、すべての結果を含む文字列を返したりすることができます。印刷または文字列として返す場合、出力は改行などの数字以外の一貫した区切り文字で区切る必要があります。タブ、スペース、または,文字。末尾のセパレータまたは末尾の空白がある場合があります。また、pの出力は、1またはではなく、作業中の言語で定義されているように、任意の真実または偽の値である可能性があります0。 インタプリタは終了する場合と終了しない場合があります(完全なプログラムの場合)が、すべての命令が解釈された後に印刷を停止する必要があります。(区切り文字やヌル文字などを永久に出力し続けることはできません)。 これらの標準的な抜け穴はデフォルトで禁止されています これはcode-golfで、バイト数が最小の答えが勝ちます テストケース Program: + Input: [56, 50] Output: 106 ---------------------------------- Program: p Input: [12] Output: 0 ---------------------------------- Program: p Input: [13] Output: 1 ---------------------------------- Program: ++ Input: [172, 120, 33, 58] …

8
チューリングマシンシミュレータ
チューリングマシンシミュレータを作成します。 簡単にするために、ステータスを整数、シンボルをchar、空白シンボルが空白に等しいと想定できます。 現在の状態、入力シンボル、次の状態、出力シンボル、方向(左または右)の形式の5タプル。順序は必須ではありませんが、スワップするかどうかを指定します 不明な状態になったときにマシンを停止する必要があり、他の停止条件は許可されません。 テープは両方向に無限にあり、いつでも空の文字を読むことができます。 入力:初期テープ、初期状態、およびプログラム。好きな形式でどこからでも自由にデータを読むことができます 出力:プログラムの実行後のテープ 必須:シミュレーター上で実行されるサンプルプログラム これはコードコルフなので、最短のコードが優先されます。 今後数時間以内に実装とサンプルプログラムを投稿します。

12
glob Matcherを実装する
一致するパターンと文字列の関数を実装し、パターンがWHOLE文字列に一致する場合はtrueを返し、そうでない場合はfalseを返します。 globパターンの構文は次のとおりです。 ? 任意の1文字と一致します + 1つ以上の文字に一致します * 0個以上の文字に一致します \ 逃げる ルール: 評価なし、正規表現への変換なし、システムglob関数の呼び出しなし。 I / Oは不要です。関数を書くだけです 最短勝ち 例: glob('abc', 'abc') => true glob('abc', 'abcdef') => false IMPORTANT! glob('a??', 'aww') => true glob('a*b', 'ab') => true glob('a*b', 'agwijgwbgioeb') => true glob('a*?', 'a') => false glob('?*', 'def') => true glob('5+', '5ggggg') => true …

4
StackyMathを解釈してください!
あなたが私の新しいスタックベースの言語を実装する時間です!StackyMathと呼ばれます。これは、スタック上の8つの操作とスタックに番号を追加する方法を備えたスタックベースの言語になります。 操作のリスト: /:部門。スタックの上位2桁で実行されます。結果をスタックにプッシュします。 *:乗算。スタックの上位2桁で実行されます。結果をスタックにプッシュします -:減算。スタックの上位2桁で実行されます。結果をスタックにプッシュします +:追加。スタックの上位2桁で実行されます。結果をスタックにプッシュします ^:べき乗。スタックの上位2桁で実行されます。結果をスタックにプッシュします %:モジュロ。スタックの上位2桁で実行されます。結果をスタックにプッシュします !:階乗。スタックの一番上の番号で実行されます。結果をスタックにプッシュします D:スタックの一番上の番号を複製します 擬似コードで定義された操作: /: push(pop divided by pop) *: push(pop times pop) -: push(pop minus pop) +: push(pop plus pop) ^: push(pop to the pop) %: push(pop mod pop) !: push(factorial pop) D: t = pop; push(t); push(t) 数字をスタックにプッシュする方法: スタックに番号を追加するのは簡単です。必要な場所にプログラムに生の番号を入れるだけです。スタックに複数の数字を配置する必要がある場合は、コンマ(,)で区切ることができます。あなたのプログラムは-入力の数字を処理する必要はありません。ユーザーが数字を望むなら、否定したい数字、ゼロ、-。プログラムの入力の数値も正の整数に制限されます。 入力: プログラムは、コマンドラインで入力するか、標準入力から入力する必要があります。入力は,、必要に応じて区切られた数字(科学表記法または小数なし)と上記で定義された操作のみで構成されます。 …

4
それはほとんどLispです!
チャレンジ あなたの課題は、Lispに似た言語用のインタープリターを設計することです。GLispのプログラムコードは、次の形式の括弧で示された任意の量のネストされた式で構成されます。 (func arg1 arg2 ...) インタプリタは、括弧、関数、および引数の前後に余分な空白文字を許可する必要があることに注意してください。 タイプ 整数、リスト、ブール、関数の4つのタイプを実装します。整数とブール値は、独自の構文を使用してソースコードに明示的に挿入できます。インタープリターは、一連の数字が整数を示すと想定する必要があります(負の整数を明示的に挿入する構文を実装する必要はありません)。また、インタープリターはtrue、falseブール値が指定されていると想定する必要があります。関数はユーザーが明示的に定義することはできず、常に単一の値(任意の長さのリストが単一の値としてカウントされます)を返します。 関数 以下の関数は実装する必要があり、形式はFunction、Arityです。Arityの前にnプラス記号が付いている場合、それは1 nつ以上の引数を示しています。特に指定されない限り、関数に与えられたすべての引数は同じ型であると仮定することができます。また、certian型に動作が指定されていない場合、その関数の引数はその型にはならないと想定することもできます。引数は、次の図のように参照されます。 (func argument1 argument2 ... argumentn) +、2 + すべての引数がInteger型の場合、引数の合計を返す必要があります すべての引数がList型の場合、引数の連結を昇順(arg1+arg2+ ...)で返す必要があります すべての引数のタイプがBooleanの場合、引数のすべての論理シーケンスを返す必要があります (+ 1 2 3 4 5) -> 15 (+ (list 1 2) (list 3 4)) -> (list 1 2 3 4) (+ true true true) -> true …

6
サイクリックタグシステムのシミュレーション
環状タグシステムは、 2シンボルアルファベットからなる小さな、チューリング完全な計算モデル(私は使用しますである{0,1})、有限の空ではない環状リストプロダクションそれら二つのシンボルで構成され、無限語もから成りますこれらの2つのシンボル。 各ステップで: 単語の最初の要素が削除されます 0現在の生産だった場合はスキップされます それが1現在の生産であったならば、単語の終わりに追加されます。 次のプロダクションがアクティブになります。これが最後のプロダクションであった場合、最初のプロダクションに戻ります。 単語が空になると、システムは停止します。 例(ウィキペディアから): Productions: (010, 000, 1111) Initial word: 11001 Generation Production Word (before) Word (after) 0 010 11001 → 1001010 1 000 1001010 → 001010000 2 1111 001010000 → 01010000 3 010 01010000 → 1010000 4 000 1010000 → 010000000 5 1111 010000000 …

5
1Dセルラーオートマトンのシミュレーション
チャレンジ STDINから7つの数字を取得し、セルオートマトン(CA)の2次元の履歴をSTDOUTに出力する完全なプログラムを作成します。これはコードゴルフです。 入力フォーマット 入力は、コンマで区切られた7つの整数/文字列です。最初の数字は、Wolframコード(各ルールの標準名)に従ったルールの番号です。2番目は、最初の初期構成です。3番目と4番目は、開始パターンの左側に追加するパターンとその回数を示しています。パディングとして。5番目と6番目は右側についても同じことを行います。最後の数字は、シミュレーションを実行する世代の数です。 したがって、入力の例はです90,11,0,4,0,4,5。これにより、プログラムにルール90を実行していることがわかります。また、プログラムに、両端に11文字列を04回追加した初期構成にすることを伝える必要があるため、実際の開始パターンは0000110000です。また、このシミュレーションを5世代実行するようプログラムに指示します。 出力プログラムは、出力がCAの時空間図になるように、各世代のセルの配列全体(改行で区切られている)を印刷する必要があります。世代ごとに、各セルの状態は、その状態と、入力として提供されたルールに従って、すぐ左と右のセルの状態によって決定されます。シミュレーションはエッジの周りをラップする必要があります。最初に印刷されるのは、genとしての開始配列です。0。 入力90,11,0,4,0,4,5により、次の出力が可能な限り正確になります。 0000110000 0001111000 0011001100 0111111110 1100000011 0110000110 開始状態は5つの世代に含まれていないことに注意してください。また、シミュレーションがエッジの周りをラップしていることに注意してください。 その他の例 入力: 184,1100,01,2,01,1,4 出力: 0101110001 1011101000 0111010100 0110101010 0101010101 入力: 0,1011,1,0,0,1,2 出力: 10110 00000 00000 1D CAの仕組みと番号付け方法の詳細

26
シンプルなゴルフ通訳
チャレンジ: あなたの仕事は、単純なゴルフ言語の簡単な通訳を作成することです。 入力: 入力は、スペースで区切られた文字列の形式になります。 スペース区切りを必要なものに置き換えることができます 出力: すべての操作を実行した後に得られた結果(数値または文字列)を出力します。複数の出力がある場合、結合して単一の結果(セパレーターなし)にします。変数の初期値は常にゼロです。すなわち:で始まる0 言語構文: この言語には次の演算子があります。 inc ---> add one to variable dec ---> remove one from variable mult ---> multiply variable by 2 half ---> divide the variable by 2 Pri ---> print the variable to console (or whatever your language has) exit ---> end the …

13
フィボナッチ製品
正のフィボナッチ数の一意の合計として、0より大きい数を分解できます。この質問では、可能な最大の正のフィボナッチ数を繰り返し減算することでこれを行います。例えば: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 ここで、フィボナッチ積を上記と同じリストと呼びますが、加算は乗算に置き換えられます。たとえば、f(100) = 89 * 8 * 3 = 2136。 正の整数nを指定して、その数のフィボナッチ積を返すプログラムまたは関数を作成します。 テストケース: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

1
SASマクロ変数を解決する
SASプログラミング言語は、まだ使用中今日の1966年に不格好、古風な言語デートバックです。元のコンパイラはPL / Iで記述されており、実際、構文の多くはPL / Iから派生しています。SASには、PL / Iの言語から派生したプリプロセッサマクロ言語もあります。この課題では、SASマクロ言語のいくつかの単純な要素を解釈します。 SASマクロ言語では、%letキーワードを使用してマクロ変数が定義され、ログへの出力はで行われ%putます。ステートメントはセミコロンで終わります。ここではいくつかの例を示します。 %let x = 5; %let cool_beans =Cool beans; %let what123=46.lel"{)-++; マクロ変数名は大文字と小文字を区別せず、常に正規表現と一致します/[a-z_][a-z0-9_]*/i。この課題のために、次のように言います。 マクロ変数は、印字可能なASCII文字のみで完全に成るの値を保持することができます以外に ;、&と% 値に先頭または末尾のスペースはありません 値は255文字を超えることはありません 値は空かもしれません 値の中の括弧と引用符は一致しない場合があります そこの前後にスペースの任意の量であることができる=で%let声明と、このスペースは無視されるべきです ステートメント;内の端末の前に任意の量のスペースがあり%let、このスペースも同様に無視する必要があります マクロ変数が呼び出されるとき、その値に「解決」すると言います。マクロ変数は、先頭に付加することで解決され&ます。識別子の終わりを示すオプションの末尾があり.ます。例えば、 %put The value of x is &X..; The value of x is 5.ログに書き込みます。1つの期間がに消費され&X.、解決されるため、2つの期間が必要であることに注意してください5。またx、小文字で定義したにもかかわらず、マクロ変数名では大文字と小文字が区別されないため&X、同じ&xです。 ここで注意が必要です。複数&のを一緒に連結して変数を解決&し、同じレベルのネストを同時に解決できます。例えば、 %let i = 1; %let coolbeans1 = broseph; …

3
パープルインタープリターのゴルフ
パープルインタープリターのゴルフ 紫のは2つの主な目的で設計されたエソランです。 の最小化 Au子の、自己修正可能な1命令言語が十分にないためです。 の可能性を認める 恐ろしく小さなゴルフ通訳者の。適度にフル機能のPython 2インタープリターでの最初のパスはわずか702バイトであり、経験豊富なゴルファーはそこからかなりの量を削ることができると確信しています。 あなたの目標は、この言語の通訳を書くことです。 紫に関する情報: 紫色のプログラムは、プログラムの最初の文字がアドレス0に配置されるように、無限のアドレス可能なメモリアレイに配置される文字のシーケンスです。配列の残りの部分(紫色のプログラムが格納される場所の前後両方)はゼロに初期化されます。 Purpleには、aおよびbおよびiと呼ばれる3つのレジスタがあり、それぞれが符号付き整数を保持でき、ゼロに初期化されます。iは命令ポインターでもあり、常に現在実行中のパープル命令を指します。 各サイクルで、インタプリタは命令ポインタによって示されたメモリ位置から始まる3つの連続した文字のシーケンスを読み取り、このシーケンスをパープル命令として実行しようとします。その後、命令ポインタは常に3ずつ増加します。 構文的には、Purple命令は、「xyz」のような3つの文字(またはそのエンコード)が連続して構成されています。 最初の文字xは次のいずれかです。 abABio これらの記号の意味は次のとおりです。 a - Place the result in register a. b - Place the result in register b. A - Place the result in the location in memory referred to by register a. B - Place …

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