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

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

28
スタックスニペットを使用して将来の投稿をオンラインで実行可能にする
スタックスニペットが最近PPCGに追加されました!JSFiddleを連想させるスタックスニペットにより、HTML、CSS、およびJavaScriptを投稿で直接実行できます。 これは非常に単純なStack Snippetです: alert('This is JavaScript') h3 { color: red } /* This is CSS */ <h3>This is HTML</h3> コードスニペットを実行する結果を非表示スニペットを展開 Stack Exchangeのこの機能は、次の場合に非常に役立ちます。、JavaScript以外の言語がサポートさます。(課題への回答はその場でテストすることができ、サンプル入力は動的に生成することができます。など)ここがあなたの出番です。 チャレンジ このチャレンジの目標は、通訳を書くことですスタックスニペットとJavaScriptを使用して、一部のプログラミング言語のです。ポイントは、将来のPPCGの質問と回答で簡単にコピーして使用できるものを作成することです。 多かれ少なかれ、「実行」ボタンと、コード用と入力用の2つのテキストボックスを持つスタックスニペットを作成する必要があります。[実行]ボタンをクリックすると、入力(解釈している言語で記述された)でコードが実行され、結果が(おそらく別のテキストボックスに)表示されます。スニペットはcjam.aditsu.netまたはサンプル回答のようなものである必要があります。 ほとんどの言語では、入力と出力がそれぞれstdinとsdoutを表すのが理にかなっています。また、コマンドラインに別の入力ボックスがある場合があります。しかし、すべての言語にこのような従来のI / Oメカニズムがあるわけではありません。HQ9 +たとえば、は入力すらしていないため、テキストボックスが無意味になります。したがって、この仕様ではなく、言語を自由に設計してください。主な要件は、受け入れられている用語の意味で、スタックスニペットで言語を「実行可能」にすることです。 ノート 理想的ではありますが、言語のすべての機能を実装する必要はありません。ファイルの読み書きやライブラリのインポートのようなものは、扱いにくいか不可能かもしれません。このサイトで使用するためのユーティリティを最大化するインタープリターの作成に焦点を当てます。 あなたが書いていない「言語XからJavaScript」インタープリターを投稿することは問題ありません(帰属あり)。 Stack Exchangeは回答を30,000文字に制限しているため、インタープリターが長くなる可能性がある場合は適宜計画してください。 インタープリターのバージョンをできるだけ簡単にして、将来の投稿に含めることをお勧めします。たとえば、サンプルの回答では、スニペット全体の未加工のマークダウンが提供され、コードと入力を配置する明らかな場所があります。 この質問は、適切な挑戦というよりも通訳者の大要になることを意図していますが、それでも人気コンテストなので、最も投票数の多い答えが勝ちます。 現在の通訳者のリスト (言語名のアルファベット順にソート) ビーム Befunge-93 ブレインファック ブレインファック CHIQRSX9 + 死んだ魚 Deadfish(プリセットコードのみを実行) フーリエ FRACTRAN こんにちは++ HQ9 …

30
Brainfを解釈する***
Brainfuckプログラムを解釈するために、お気に入りの言語で最短のプログラムを作成してください。プログラムはファイルから読み取られます。入力と出力は、標準入力と標準出力です。 セルサイズ:8ビット符号なし。オーバーフローは未定義です。 配列サイズ:30000バイト(丸で囲まれていない) 悪いコマンドは入力の一部ではありません コメントは#で始まり、行末まで続きますコメントはすべてではありません+-.,[]<> EOFシンボルなし 非常に良いテストがここにあります。数値を読み取り、その数値までの素数を出力します。リンクの腐敗を防ぐために、コードのコピーを次に示します。 compute prime numbers to use type the max number then push Alt 1 0 =================================================================== ======================== OUTPUT STRING ============================ =================================================================== >++++++++[<++++++++>-]<++++++++++++++++.[-] >++++++++++[<++++++++++>-]<++++++++++++++.[-] >++++++++++[<++++++++++>-]<+++++.[-] >++++++++++[<++++++++++>-]<+++++++++.[-] >++++++++++[<++++++++++>-]<+.[-] >++++++++++[<++++++++++>-]<+++++++++++++++.[-] >+++++[<+++++>-]<+++++++.[-] >++++++++++[<++++++++++>-]<+++++++++++++++++.[-] >++++++++++[<++++++++++>-]<++++++++++++.[-] >+++++[<+++++>-]<+++++++.[-] >++++++++++[<++++++++++>-]<++++++++++++++++.[-] >++++++++++[<++++++++++>-]<+++++++++++.[-] >+++++++[<+++++++>-]<+++++++++.[-] >+++++[<+++++>-]<+++++++.[-] =================================================================== ======================== INPUT NUMBER ============================ =================================================================== + cont=1 [ …

9
99の通訳を書く
99(「ナインティーナイン」と発音)は、まったく新しい難解なプログラミング言語です(99と混同しないでください、イタリック体に注意してください)。このチャレンジでのあなたの仕事は、可能な限り短い99のインタープリターを書くことです。最少バイトの送信が勝ちです。Tiebreakerは、最初に投稿されたサブミッションに進みます。 この質問の深さは通常よりも少し深いため、良い答えを探しているので、お気に入りの答え(必ずしも勝者とは限りません)に対して250の報奨金を授与します。 99スペック 99は必須言語です。99プログラムの各行は1つのステートメントであり、実行中、命令ポインターは先頭行から始まり、後続の各行を順番に通過して、途中で実行します。プログラムは、最後の行が実行されると終了します。Gotoステートメントは、命令ポインターのパスを再ルーティングできます。 改行、スペース、および99のプログラム9で重要な唯一の3文字です。他のすべての文字は完全に無視されます。さらに、各行の末尾のスペースは無視され、行の複数のスペースは1つのスペースとして読み取られます。(「改行」とは、一般的な改行エンコーディングを指します。インタープリターがどちらを使用するかは関係ありません。) したがって、このプログラム: 9 BLAH 99 9a9bb9c9 9 this line and the next have 6 trailing spaces 9 このプログラムと同じです: 9 99 9999 9 9 変数 99の変数はすべて、1つ以上9の(9+正規表現で)結合された名前を持っています。たとえば、9、99、および9999999999すべての異なる変数です。当然、無限に多くあります(メモリの制限がなければ)。 各変数の値は、符号付きの任意精度整数です。デフォルトでは、各変数は独自の数値表現に割り当てられます。したがって、再割り当てされていない限り、変数の値は99番、変数の値は9999番などとなります。明示的に割り当てられるまで、変数を単純な数字として扱うと考えることができます。 V以下の任意の変数名を参照するために使用します。 各インスタンスVに置き換えることができ9、99、999、9999、など 声明 99には5つの異なるステートメントタイプがあります。99プログラムの各行には、1つのステートメントのみが含まれています。 ここで説明する構文は、無関係な文字がすべて削除され、末尾のスペースがすべて削除され、複数のスペースのシーケンスがすべて単一のスペースに置き換えられていることを前提としています。 1.操作なし 空の行は何もしません。何もしません(命令ポインタをインクリメントする以外)。 2.出力 V 行の1つの変数Vは、その変数を標準出力に出力します。 のV奇数9(9、999など)がある場合、V9 で割った整数値が(10進数で)出力されます。 場合Vの偶数有する9S」( 99、9999など)をアスキーコードで文字V9で除算し、MOD 128が印刷されます。(つまり(V / 9) % 128、0〜127の値です。) 例:プログラム …

30
小さな「H」から「H」を作成する
チャレンジ 整数を指定するとsize、次のことを行う関数またはプログラムを作成します。 size1に等しい場合、出力 H H HHH H H 場合はsize1、出力よりも大きく、 X X XXX X X どこXのプログラム/関数の出力size - 1 (必要に応じて0、回答で指定する限り、ベースケースをに対応させることができます) 次の出力形式のいずれかが受け入れられますが、どちらがより便利です。 任意の二つの異なる文字に対応する必要な構造の文字列Hとspace 対応する任意の二つの別個の値を要求される構造を有する二次元アレイ、H及びspace 任意の二つの別個の値は、対応する各列における出力の一つの行と列/文字列のリスト、Hおよびspace 各行に一定量の先行スペースがある限り、先行スペースを使用できます。2つの異なる出力文字は、異なる限り、選択したものに依存します。 コードが返す出力形式を指定します。 テストケース 1 H H HHH H H 2 H H H H HHH HHH H H H H H HH HH H HHHHHHHHH H HH HH …
73 code-golf  ascii-art  fractal  code-golf  code-golf  string  code-golf  string  matrix  code-golf  graph-theory  maze  binary-matrix  code-golf  kolmogorov-complexity  random  code-challenge  metagolf  test-battery  brain-flak  text-processing  code-golf  matrix  code-golf  number-theory  primes  code-golf  string  matrix  code-golf  binary  bitwise  code-golf  number  factorial  floating-point  code-golf  number  sequence  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-golf  string  code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

30
;#インタープリターを作成する
私は最近、;#2つのコマンドのみを持つ新しい言語(「セミコロンハッシュ」と発音)を作成しました。 ; アキュムレーターに1つ追加します #アキュムレータを127でモジュロし、ASCII文字に変換して、改行なしで出力します。この後、アキュムレータを0にリセットします。はい、127は正しいです。 その他の文字は無視されます。それはアキュムレータに影響を与えず、何もしません。 あなたの仕事は、この強力な言語のインタープリターを作成することです! 完全なプログラムか、;#プログラムを入力として受け取り、正しい出力を生成する関数のいずれかでなければなりません。 例 Output: Hello, World! Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# Output: ;# Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# Output: 2d{ (unprintable characters here; should have 4 `\000` bytes between the `d` and the `{` and 3 after the `{`) Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;hafh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;f;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###ffh#h#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ffea;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#au###h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;o Output: Fizz Buzz output Program: link below Output: ! Program: …

30
文字列の長さを追加する
チャレンジ: s文字a- z、A- Z、0-の文字列を指定すると9、の長さsをそれ自体に追加し、長さの追加の文字をの全長の一部としてカウントしsます。 入力: 任意の長さの文字列(空にすることもできます)。 出力: 同じ文字列ですが、長さが末尾に追加されます。長さを表す文字も長さの一部としてカウントする必要があります。追加する有効な長さが複数ある場合は、可能な限り短いものを選択してください(例については、テストケースを参照してください)。 テストケース: INPUT -> OUTPUT // Comment aaa -> aaa4 -> 1 // Empty string aaaaaaaa -> aaaaaaaa9 // aaaaaaaa10 would also normally be valid, but violates using the smallest number rule mentioned above aaaaaaaaa -> aaaaaaaaa11 a1 -> a13 // Input can …
51 code-golf  string  code-golf  string  random  code-golf  array-manipulation  code-golf  ascii-art  kolmogorov-complexity  random  code-golf  array-manipulation  code-golf  stateful  code-golf  hello-world  code-golf  string  code-golf  interpreter  lisp  code-golf  restricted-source  quine  palindrome  code-golf  ascii-art  random  generation  challenge-writing  ascii-art  random  polyglot  maze  answer-chaining  string  cops-and-robbers  whitespace  code-golf  string  cops-and-robbers  whitespace  code-golf  number  sequence  code-golf  date  code-golf  ascii-art  decision-problem  code-golf  combinatorics  chemistry  code-golf  kolmogorov-complexity  source-layout  radiation-hardening  code-golf  ascii-art  path-finding  maze  code-golf  string  ascii-art  game  animation  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  restricted-source  new-years 

26
OOo CODEを翻訳
oOo CODEで記述されたプログラムの入力が与えられると、それが表すBFコードを出力します。 oOo CODEの仕組みの簡単な説明を次に示します。 最初に、アルファベット以外の文字がすべて削除されます(範囲外のすべて A-Za-z)。 たとえば、プログラムを使用しますPROgRam reVERsES giVeN iNPut sEqUENcE(esolangs wikiページに記載されている、期待どおりの動作をする例)。この最初のステップの後、次のようになりました PROgRamreVERsESgiVeNiNPutsEqUENcE。 次に、残りのすべての文字を3つのグループに分割します PRO,gRa,mre,VER,sES,giV,eNi,NPu,tsE,qUE,NcE。1文字または2文字の末尾グループがある場合、それを破棄します。 次の表に基づいて、3文字の各グループをBFコマンドに変換します。 ooo > ooO < oOo [ oOO ] Ooo - OoO + OOo . OOO , つまり、グループの最初の文字が小文字、2番目が大文字、3番目が小文字の場合、コマンドに変換され [ます。 この例では、これが最終的にBFプログラムになり、,[>,]<[.<]+実際に入力が逆になります。 これはcode-golfであるため、バイト単位の最短コードが優先されます。 テストケース: <empty string> -> <empty string> A -> <empty string> Ab -> <empty string> …

11
Stackylogicを実行する
Stackylogicは、私がそのテイクアップ作られたロジックベースのプログラミング言語である0のと1、入力用のを単一出力0または1上に完了したことを。 Stackylogicプログラムは、3文字01?だけでなく<、1行の最後に1 文字だけを含むことができる行で構成されます。行は空ではないかもしれないとして行が<少なくとも一つ持っている必要があります0、1または?それ以前に。 これは(説明しますが)2ビットのNANDを計算するサンプルプログラムです。 1 ?< 11 ? 0 Stackylogicプログラムのすべての行はスタックと見なされ、下が左、上が右になります。暗黙的に、プログラムの最初の行の前と最後の行の後に空のスタック(空の行)があります。 <我々は呼んでよこれ、カーソルを Stackylogicプログラムが実行されたときに起動するマークスタック。Stackylogicプログラムの実行は次のように進行します。 カーソルが現在指しているスタックから一番上の文字をポップします。 キャラクターがの場合、?ユーザーに0またはのプロンプトを表示し、それがキャラクターであるかのよう1に振る舞います。 文字がの場合、0カーソルを1スタック上に(現在の行の上の行に)移動します。 文字がの場合、1カーソルを1スタック下に(現在の行の下の行に)移動します。 カーソルの移動先のスタックが空の場合、スタックからポップされた最後の値(常にa 0または1)を出力し、プログラムを終了します。 それ以外の場合、カーソルの移動先のスタックが空でない場合は、手順1に戻ってプロセスを繰り返します。 Stackylogicプログラムは常にスタックを使い果たすため、常に終了することに注意してください。 NANDの例 NANDプログラムでは、カーソルは次の位置から始まります?。 1 ?< 11 ? 0 私たちは、入力、ユーザーを仮定します1一度?カーソルがこのようなプログラムを見て作り、下に移動することを意味している、ポップされます。 1 11< ? 0 これ1で、カーソルスタックの最上部にプレーンが表示されます。適切にポップされ、カーソルが再び移動します。 1 1 ?< 0 今、ユーザ入力仮定0のための?カーソルが上に移動することを意味し、: 1 1< 0 再び、a 1がカーソルスタック上にあるため、カーソルがポップして下に移動します。 1 < 0 最後に、カーソルスタックは空なので、最後にポップされた値が1出力され、プログラムが終了します。 であるため、これはNANDゲートに対して正確1 NAND 0です1。もちろん、これは他の3つの2ビット入力でも確認できます。 …

13
型なしラムダ計算のインタープリターを作成する
課題は、型付けされていないラムダ計算のインタプリタをできるだけ少ない文字で記述することです。型なしラムダ計算を次のように定義します。 構文 次の3種類の式があります。 ラムダ式は、フォームがあるいかなる法的な変数名となる可能性が法的表現を。ここはパラメータと呼ばれ、関数本体と呼ばれます。(λ x. e)xexe 簡単にするために、x現在スコープ内にあるのと同じ名前の変数があってはならないという制限を追加します。変数は、その名の間に表示されたときに範囲にあることが始まり(λと.し、対応するの範囲であることを停止します)。 関数適用の形式は(f a)where fおよびaareの正規表現です。ここfは関数とa呼ばれ、引数と呼ばれます。 変数は、フォームがある法的な変数名です。xx 意味論 関数は、関数本体内のパラメーターの各オカレンスを引数で置き換えることにより適用されます。より正式フォームの発現((λ x. e) a)、x変数名、eおよびa式に表現、評価する(又は減少)しているの各発生を交換した結果であるに有します。e'e'xea 正規形は、それ以上評価できない式です。 挑戦 あなたの使命は、それを受け入れることを選択した場合、自由変数を含まない型なしラムダ計算の入力を入力として受け取り、その出力として式の正規形(またはそれに一致する式)を生成するインタープリターを書くことです。式に正規形がないか、有効な式でない場合、動作は未定義です。 文字数が最小のソリューションが優先されます。 いくつかのメモ: 入力は、stdinまたはコマンドライン引数として指定されたファイル名から読み取ることができます(両方ではなく、どちらか一方のみを実装する必要があります)。出力は標準出力に送られます。 または、入力を文字列として受け取り、出力を文字列として返す関数を定義できます。 非ASCII文字に問題がある場合は、\λの代わりにバックスラッシュ()文字を使用できます。 バイトではなく文字数をカウントするため、ソースファイルがUnicodeとしてエンコードされている場合でも、λは1文字としてカウントされます。 有効な変数名は1つ以上の小文字、つまりaとzの間の文字で構成されます(英数字名、大文字、または非ラテン文字をサポートする必要はありません-もちろん、そうすることでソリューションが無効になることはありません)。 この課題に関する限り、オプションの括弧はありません。各ラムダ式と各関数アプリケーションは、ちょうど1組の括弧で囲まれます。変数名は括弧で囲まれません。 書き込みなどの糖衣構文(λ x y. e)のためには(λ x. (λ y. e))、サポートする必要はありません。 関数を評価するために100を超える再帰の深さが必要な場合、動作は未定義です。これは、すべての言語で最適化せずに実装するのに十分なほど低く、ほとんどの式を実行できるほど十分に大きい必要があります。 また、無入力の開始時と終了時または前にスペースすなわち、その間隔は例のようになりますと仮定しないかもしれないλか、.1つだけ空白の後.と関数とその引数の間と後λ。 サンプルの入力と出力 入力: ((λ x. x) (λ y. (λ z. z))) 出力: (λ y. …

27
チューリング完全言語通訳
私はそれは非常にクールだと思っ挑戦は作ることですインタプリタのためのチューリング完全お好みの言語を。 ルールは簡単です: このチャレンジよりも新しい言語であっても、任意の言語を使用してこのインタープリターを作成できます。 チューリング完全言語は、記述している言語と同じでない限り使用できます。 eval関数を使用するなど、コードを単純に評価することはできません。 あなたがこれにどのようにアプローチしたかの説明は素晴らしいでしょうが、必須ではありません。 これはバイト単位で記録されます。 各提出物は完全に機能している必要があります。つまり、選択した言語のすべての機能が存在する必要があります。 簡単に言えば: あなたの仕事は、あなたが選んだ言語でチューリング完全言語用の実用的なインタプリタを作成することです。 幸運を!

30
ビットとバイトを使用したプログラミング
この課題では、私が作成した単純な言語のインタープリターを作成します。この言語は、1バイトのアキュムレーターAに基づいています。プログラムの開始時、A =0。これらは言語の指示です。 !:反転 この命令は、単にアキュムレータのすべてのビットを反転します。すべてのゼロが1になり、すべてのゼロがゼロになります。シンプル! >:右シフト この命令は、Aのすべてのビットを1つ右にシフトします。左端のビットはゼロになり、右端のビットは破棄されます。 <:左シフト この命令は、Aのすべてのビットを1桁左にシフトします。右端のビットはゼロになり、左端のビットは破棄されます。 @:ナイブルを交換 この命令は、Aの上位4ビットを下位4ビットと交換します。たとえば、Aが01101010で実行する場合、Aは次のよう@になります10100110。 ____________________ | | 0110 1010 1010 0110 |_______| それがすべての指示です!シンプルでしょ? ルール プログラムは、最初に入力を1回受け入れる必要があります。これはコード行になります。これはインタラクティブなインタープリターではありません!入力を1回だけ受け入れることができ、その行が実行された後に開始にループバックする必要はありません。 プログラムは、上記の入力を評価する必要があります。上記以外の文字はすべて無視されます。 プログラムは、アキュムレータの最終値を10進数で出力する必要があります。 有効なプログラミング言語の通常の規則が適用されます。 標準の抜け穴は許可されていません。 これはcode-golfであり、最小バイトカウントが優先されます。 以下は、提出物をテストするための小さなプログラムです。矢印の前にコードがあり、その後に予想される結果があります。 ! -> 255 !>> -> 63 !<@ -> 239 !nop!&6*! -> 255 楽しい!

1
マッカーシーのLISP
マッカーシーの1959 LISP 1959年初頭、ジョン・マッカーシーは、たった9つの原始関数を定義する画期的な論文を書きました。これらの関数は、まとめると、今日のすべてのLISPのような言語の基礎となります。論文はここからデジタル化して入手できます。 http://www-formal.stanford.edu/jmc/recursive.pdf 、機能である:あなたの仕事は完全に1960年論文に記載どおりにマッカーシーのLISPのためのパーサとインタプリタを実装することでQUOTE、ATOM、EQ、CAR、CDR、CONS、COND、LAMBDA、およびLABELすべての機能にする必要があります。答えの正しさを検討する際、このチャレンジテキストよりも論文が優先されますが、以下の9つの機能を要約してみました。言語はすべて大文字であり、エラーチェックは必要ないことに注意してください。すべての入力が有効であると仮定する必要があります。 タイプ McCarthyのLISPには、アトムと、リストまたはアトムである可能性のあるヘッドとして再帰的に定義されるリンクリスト、およびヘッドがアタッチされるリスト(テール)の2つのタイプしかありません。NILは、アトムとリストの両方であるという特別な特性を持っています。 論文によると、原子名は大文字、数字、スペース文字のみで構成されますが、連続するスペースの文字列は1つのスペースと見なされ、先頭と末尾のスペース文字はすべて削除されます。例同等の原子名(スペース文字とアンダースコアに置き換えます): ___ATOM__1__ = ATOM_1。同等でない原子名の例:A_TOM_1 != ATOM_1 リストは括弧で示されNIL、すべてのリストの最後に暗黙が示されます。リストの要素はコンマで区切られており、最新のLispのように空白ではありません。したがって、リスト(ATOM 1, (ATOM 2))はになります{[ATOM 1] -> {[ATOM 2] -> NIL} -> NIL}。 QUOTE: アトム(単一要素)またはリンクリストのいずれかである引数を1つ取ります。引数を正確に返します。 テストケース: (QUOTE, ATOM 1) -> ATOM 1 (QUOTE, (ATOM 1, ATOM 2)) -> (ATOM 1, ATOM 2) ATOM: アトム(単一要素)またはリンクリストのいずれかである引数を1つ取ります。T引数がアトムの場合(true)、または引数がアトムでない場合NIL(false)を返します。 テストケース: (ATOM, (QUOTE, ATOM …

9
文字列をひっかく
スナックされた文字列は次のようになります。 T AnE eOf ifi ing h s x l A k e r isI amp Sna dSt あなたのタスク 文字列sとサイズをn取得し、スナックされた文字列を出力します。入力しThisIsAnExampleOfaSnakifiedString、3上記の例を生成します。 仕様書 s コードポイント33から126までのASCII文字のみが含まれます(スペースや改行は含まれません)。 s 長さは1〜100文字です。 n各出力文字列セグメントのサイズを表す整数です。「蛇」の曲線を構成する文字の各行(上/下または左/右)はn文字です。例については、テストケースを参照してください。 n 3〜10になります。 出力文字列は常に下向きになります。 各行の末尾のスペースは許可されます。 出力の最後にある末尾の改行も使用できます。 先行スペースは使用できません。 code-golfは、バイト単位の最短コードが勝つことを意味します。 テストケース a 3 a ---------- Hello,World! 3 H Wor e , l llo d! ---------- ProgrammingPuzzlesAndCodeGolf 4 …
35 code-golf  string  ascii-art  code-golf  code-golf  string  balanced-string  decision-problem  code-golf  string  geometry  grid  code-golf  tips  lisp  code-golf  quine  tips  king-of-the-hill  code-challenge  math  code-golf  string  palindrome  math  fastest-code  code-golf  string  counting  code-golf  code-golf  internet  code-golf  quine  source-layout  hello-world  code-golf  math  number  sequence  arithmetic  code-golf  ascii-art  grid  code-golf  number  grid  code-golf  string  crossword  code-golf  code-golf  ascii-art  grid  counting  code-golf  code-golf  math  sequence  arithmetic  number-theory  code-golf  code-golf  graphical-output  geometry  random  code-golf  ascii-art  grid  counting  code-golf  string  ascii-art  code-challenge  test-battery  code-golf  string  code-golf  ascii-art  kolmogorov-complexity  code-golf  interpreter  code-golf  math  sequence  code-golf  math  primes  set-partitions  code-golf 

3
Tiny Lisp、小さな通訳
Lispプログラマーは、Lispは非常に小さなプリミティブ操作のセットから構築できる強力な言語であることを自慢しています。と呼ばれる方言の通訳をゴルフで練習して、そのアイデアを実践しましょうtinylisp。 言語仕様 この仕様では、結果が「未定義」と記述されている条件は、インタープリターで何でもできます:クラッシュ、サイレントフェール、ランダムgobbldegookの生成、または期待どおりの動作。Python 3のリファレンス実装はこちらから入手できます。 構文 tinylispでのトークンは(、)、または括弧やスペースを除く一個の以上の印刷可能なASCII文字の任意の文字列。(つまり、次の正規表現:[()]|[^() ]+。)数字のみで構成されるトークンは、整数リテラルです。(先頭のゼロは大丈夫です。)非数字を含むすべてのトークンは、のようにも、数字に見える例、シンボルである123abc、3.14と-10。トークンを区切る場合を除き、すべての空白(少なくとも、ASCII文字32および10を含む)は無視されます。 tinylispプログラムは一連の式で構成されています。各式は、整数、記号、またはs式(リスト)のいずれかです。リストは、括弧で囲まれた0個以上の式で構成されます。アイテム間にセパレータは使用されません。式の例を次に示します。 4 tinylisp!! () (c b a) (q ((1 2)(3 4))) 整形式でない式(特に、括弧が一致しない式)は、未定義の動作をもたらします。(参照実装は、開いているかっこを自動的に閉じ、一致しない閉じたかっこで解析を停止します。) データ型 tinylispのデータ型は、整数、記号、およびリストです。組み込み関数とマクロも型と見なすことができますが、出力形式は未定義です。リストには、任意のタイプの値をいくつでも含めることができ、任意の深さにネストできます。整数は、少なくとも-2 ^ 31〜2 ^ 31-1でサポートされる必要があります。 空のリスト(()nilとも呼ばれる)と整数0は、論理的に偽と見なされる唯一の値です。他のすべての整数、空でないリスト、ビルトイン、およびすべてのシンボルは論理的に真です。 評価 プログラム内の式は順番に評価され、それぞれの結果はstdoutに送信されます(出力のフォーマットについては後で説明します)。 整数リテラルはそれ自体に評価されます。 空のリスト()はそれ自体に評価されます。 1つ以上の項目のリストは、最初の項目を評価し、それを関数またはマクロとして扱い、残りの項目を引数として呼び出します。アイテムが関数/マクロでない場合、動作は未定義です。 シンボルは名前として評価され、現在の関数でその名前にバインドされた値を提供します。名前が現在の関数で定義されていない場合、グローバルスコープでバインドされた値に評価されます。名前が現在のスコープまたはグローバルスコープで定義されていない場合、結果は未定義です(参照実装ではエラーメッセージが表示され、nilが返されます)。 組み込み関数とマクロ tinylispには7つの組み込み関数があります。関数は、いくつかの操作を適用して結果を返す前に、各引数を評価します。 c-cons [truct list]。値とリストの2つの引数を取り、リストの先頭に値を追加して取得した新しいリストを返します。 h-頭(車、Lisp用語では)。リストを取得し、リストの最初の項目を返します。nilが指定されている場合はnilを返します。 t-テール(Lisp用語ではcdr)。リストを取得し、最初のアイテム以外のすべてを含む新しいリストを返します。nilが指定されている場合はnilを返します。 s-引く。2つの整数を取り、最初のマイナス2番目を返します。 l- 未満。2つの整数を取ります。最初の値が2番目の値より小さい場合は1を返し、それ以外の場合は0を返します。 e-等しい。同じタイプの2つの値(整数、両方のリスト、または両方のシンボル)を取ります。2つが等しい(またはすべての要素で同一)場合は1を返し、そうでない場合は0を返します。組み込みの等価性のテストは未定義です(参照実装は期待どおりに機能します)。 v-評価。式を表す1つのリスト、整数、またはシンボルを取り、それを評価します。たとえば、行うこと(v (q (c a b)))は行うことと同じ(c a b)です。(v …

5
8ビット仮想マシン
バックグラウンド 私は古い8ビット6502チップが好きです。6502マシンコードでPPCGの問題を解決するのは楽しいことです。しかし、単純であるべきいくつかのこと(データの読み取りやstdoutへの出力など)は、マシンコードで行うのは不必要に面倒です。だから、私の頭の中には大まかなアイデアがあります。6502に触発された独自の8ビット仮想マシンを発明します。何かを実装し始めて、VMの設計が最小限に抑えられている場合、これ自体が素晴らしい挑戦であるかもしれないことに気付きました:) 仕事 次の仕様に準拠する8ビット仮想マシンを実装します。これはcode-golfであるため、バイト数が最も少ない実装が優先されます。 入力 実装には、次の入力が必要です。 単一の符号なしバイトpc、これは初期プログラムカウンター(VMが実行を開始するメモリ内のアドレス、0ベース) 256エントリの最大長を持つバイトのリスト。これは仮想マシンのRAM(初期コンテンツを含む) この入力は、適切な形式で入力できます。 出力 VMが終了した後のRAMの最終的な内容であるバイトのリスト(以下を参照)。最終的に終了することにつながる入力のみを取得すると仮定できます。賢明な形式はすべて許可されます。 仮想CPU 仮想CPUには 8ビットプログラムカウンター、 呼ばれる8ビットアキュムレータレジスタAと という8ビットのインデックスレジスタX。 3つのステータスフラグがあります。 Z -何らかの操作の結果、ゼロフラグが設定された 0 N -負のフラグは、何らかの操作の結果が負の数になった後に設定されます(結果のビット7が設定されます) C -キャリーフラグは、結果の「欠落」ビットの加算とシフトによって設定されます スタート時には、フラグが全てクリアされ、プログラムカウンタは、与えられた値との内容に設定されているAとX不定です。 8ビット値は、 符号なしの範囲の整数[0..255] 範囲の符号付き整数、2の補数[-128..127] コンテキストに応じて。操作がオーバーフローまたはアンダーフローすると、値は折り返されます(また、追加の場合、キャリーフラグが影響を受けます)。 終了 仮想マシンは次の場合に終了します HLT命令に到達します 存在しないメモリアドレスがアクセスされた プログラムカウンターはメモリ外で実行されます(VMに256バイトのメモリがすべて与えられてもラップアラウンドしないことに注意してください) ドレッシングモード 暗黙的 -命令には引数がありません。オペランドは暗黙的です 即時 -オペランドは命令の直後のバイトです relative-(分岐のみ)命令が署名された後のバイト(2の補数)。分岐が行われた場合にプログラムカウンターに追加するオフセットを決定します。0次の命令の場所です absolute-命令の後のバイトは、オペランドのアドレスです インデックス付き -命令プラスX(レジスタ)の後のバイトは、オペランドのアドレスです 説明書 各命令はオペコード(1バイト)で構成され、アドレッシングモードでは、immediate、relative、absolute、およびindexedの2番目の引数バイトです。仮想CPUが命令を実行すると、それに応じて(1または2)プログラムカウンターをインクリメントします。 ここに示されているすべてのオペコードは16進数です。 LDA -オペランドをロードする A オペコード:即時:00、絶対:02、インデックス付き:04 …

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