私と一緒にゴルフ言語を構築する


30

多くのPPCGユーザーが、チャットとサンドボックスの両方で、特にMartin EnderAdmBorkBorkEmigna、およびuser202729でこの課題の作成を支援しました。

私たちのコミュニティは、ゴルフのために特別に設計された一連の言語、つまり「ゴルフ言語」を作成する必要があると考えています。このような言語は、かつては見栄えがよく、今ではぎこちないGolfScriptから、JellyHuskなどの洗練された簡潔な言語に進化しました。ご覧のとおり、これらの言語は、一連のタスクでますます短くなっています。ですから、ここの周りのゴルフの言語に関する明白な専門家として、私たちは競争する勇気がある他のすべての言語を打ち負かすために一緒に言語を設計するべきです。ビューグルの紹介!

ラッパ:頭字語からBuGoL:Bu ilt Go lfing L anguage。

この課題の仕組み

導入部で私がほのめかしているものが得られなかった場合、この課題は課題であり、それぞれが新しいゴルフ言語の通訳者に何かを提供し、各回答でPPCGで競争する能力を向上させます。

言語仕様/通訳の基礎からなる最初の回答を投稿しますが、他のすべての回答はそれから継続します。新規提出により、次のものが提供されます。

  • 言語の仕様の変更
  • 最新の通訳者で、変更点に正確に対応しているもの
  • 言語の更新されたスコア(詳細は少し)

次の3つの方法のいずれかで仕様を変更できます。

  • 単一のコマンドを追加できます
  • 2つの新しいコマンドを追加できます
  • 1つの既存のコマンドの動作を編集できます

新しいインタープリターに関しては、Pythonで書かれた最新バージョンを使用する必要あります。ゴルフする必要はありません。以前に追加したコマンドはすべて、最新のインタープリターと最新のコマンド(追加したコマンド)でテスト可能でなければなりません。また、コメントや文字列リテラルなどのように、インタープリターを更新するときは、攻撃的な言語を使用しないでください。

追加されたコマンドは、あなたが望むことをするかもしれません。唯一の要件は次のとおりです。

  • 攻撃的な出力を生成しません
  • 別のコマンドとは異なります
  • サンプルの課題の1つが完了するのを妨げません

これらとは別に、必要に応じて特定または一般的なものにすることができます。また、任意の文字を使用できます。追加したコマンドが「新しいコマンド」であるかどうかわからない場合は、コメントでお気軽にお問い合わせください。

言語のスコア

あなたは、すべての新しい提出物に言語のスコアを含める必要があることに気づいたかもしれません。そのスコアは、このチャレンジが永遠に続くことを防ぐものであり、次のように定義されます。

現在のスコアは、言語が20以下のタスクを完了するために必要なバイトカウントの合計です。

各タスクには、標準I / Oルールが適用され、標準の抜け穴適用されます。

20のタスク:

  1. "こんにちは世界!" –文字列を出力するHello, World!
  2. 1、2、Fizz、4、Buzz – 1から100までの各整数を別々の行に出力します。3のFizz倍数が、5のBuzz倍数が、両方の倍数が、FizzBuzz
  3. ソースコードに数字を含めずに数字2014を生成する – 外部変数やランダムシードにアクセスせずに、ソースコードの文字を使用せずに数字2014を出力します0123456789
  4. 難読化されたHello WorldHello, World!次のセットの少なくとも2つの文字を使用せずに文字列を出力します:hlwdeor01および27(大文字と小文字を区別しない)
  5. お気に入りのプログラミング言語にハッピーバースデーを歌う –選択した言語で、次を出力します。

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. 私たちはゴルフをコーディングするのは見知らぬ人ではありません、あなたはルールを知っています、そして私もそうです - 「Never Gonna Give You Up」の完全な歌詞を出力する

  7. 出力記号 -番号を考えるには、印刷-1それは否定的であれば、0を、それがある場合は0または1、それが正の場合
  8. Collat​​z予想(OEIS A006577) –整数から開始し、偶数の場合は2で除算し、奇数の場合は3で乗算して1を加算し、1に達するまでプロセスを繰り返します。出力は反復回数です1に到達します。
  9. 課題の配列#1:交互配列 -整数の配列を指定して、すべての偶数インデックスのアイテムが等しいかどうか、すべての奇数インデックスのアイテムが等しいかどうかを確認し、それに応じて真実または偽の値を出力します
  10. 私は取るに足らない配列ですか?–整数の配列が与えられた場合、連続する要素間の絶対差がすべて1以下であるかどうかを確認し、それに応じて真実または偽の値を出力します
  11. この数は素数ですか?–正の整数を指定して、それが素数であるかどうかを確認する完全なプログラムを作成し、それに応じて真実または偽の値を出力します
  12. 私は回文です。あなたは?–文字列を指定して、それが回文であるかどうかを確認します。プログラム/関数も回文であり、それに応じて2つの異なる一貫した値を出力します
  13. 標準入力で数値を合計します-STDINから一連の数値を取得し、その合計を出力します。
  14. 階乗を見つける - n整数を指定する1と、それ以上のすべての整数の積を出力しますn
  15. 無限出力を生成するための最短コード -入力なしで無限出力を生成し、理論的には出力を停止しません。
  16. Piのスライスを焼く -この正確なテキストを出力します。
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Nを除算しない最小の数を見つける -正の整数Nが与えられた場合、Nを除算しない最小の正の整数を出力します。
  2. これは偶数か奇数ですか?-整数Nを指定すると、そのパリティを真実/偽の値として出力します。
  3. コードと同じ長さの出力 -出力がコードと同じ長さである最短のコードを記述します。出力はコードと同じではありません。
  4. 馬鹿馬鹿しいゴルフを!- あなたの言語で最短のを書きます。

有効にするためには、新しい提出物は、少なくとも2つの問題について、それぞれ少なくとも1バイトずつ、提出されたものでなければなりません。他の提出の長さを増やすことはできますが、合計スコアは回答ごとに少なくとも2減少する必要があります。また、更新されたプログラムへのリンクを含めることを検討してください。更新されたソリューション、以前のバージョンのインタープリターで実行されたときに機能してはなりません

クッキーを取得する方法

私は5つのチャレンジのリストを持っています。これらは挑戦することを強制するものではなく、あなたのスコアには関係ありませんが、ビューグルが十分に能力があるかどうかをテストするための追加チャレンジです。あなたの答えにこれらのいくつもの解決策を自由に含めてください:

  1. 自己通訳を作成する
  2. ペイロード対応のクインを作成する
  3. 文字列を暗号化する
  4. ハイパープログラミング:N + N、N×N、N ^ Nをすべて1つに
  5. 「KNOT」または「NOT」?

誰もがチャレンジに参加できる必要はないため、説明は含まれていません。

勝つ方法

最小スコア(ダウンするゴルフの試みは大歓迎ですが、16であると信じています)に到達すると、ソリューションがより良いスコアを取得できないため、明らかにチェーンが終了しました。16に到達すると、チャレンジはその後1か月間存続し、誰でもソリューションをゴルフする機会を与えます。今月が過ぎた後、課題は終わりました。

課題が終わったら、インタープリターをGitHubリポジトリーに移行し、安定した言語をリリースするという通常の策略を実行します。また、この言語を使用して、この時点でPPCGの課題に対する解決策の投稿を開始することもできますが、フロントページに回答があふれないようにしてください。代わりに、一定期間にわたってそれらを広げます。

書式設定

回答で情報を見つけやすくするために、次のようにフォーマットしてください。

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

[N]回答番号はどこですか(1つ目は1、2つ目は2など)

ルール

  • 回答を投稿するまでに3時間待つ必要があります
  • 10日間(正確には240時間)回答が投稿されていない限り、連続して2回投稿することはできません。
  • 以前のコマンドを削除することはできません。
  • あなたの通訳はゴルフをする必要はありません、そしてそのバイト数はここでは完全に無関係です。
  • あなたの答えが最新である間に誰かがプログラムにゴルフを提案した場合、あなたはゴルフを編集し、あなたのスコアを更新しなければなりません
    • スコアがそれ以降の回答より低くならない限り、回答がチェーンの途中にあるときにもこれを行うことができます。
  • 少なくとも課題が終わるまで、この言語を使用して既存のPPCG課題に答えることは控えてください
  • インタプリタはPython 3で記述されており、チェーン全体を通してその方法を継続する必要があります。言語の変更は禁止されています。
  • 繰り返しになりますが、有効にするには、少なくとも2つの問題について、それぞれ少なくとも1バイトずつ、新しい提出物を提出する必要があります。

始めましょう!



1
同様に質問するかもしれません:誰でも下票を説明したいですか?私はあなたが与えたいと思うすべてのフィードバックを大切にします。
コメアリンガーアーイング

2
@Kaldoよくわかりません。クインは2バイト以上である必要がありますが、空のプログラムがを出力する場合、Hello, World!19バイトです。空のプログラム変更の動作は、入力に依存し、それができるかもしれない場合でも減少させることができる
coinheringaahing caird

1
@WeijunZhou「少なくともこの課題が終わるまで、この言語を使用して既存のPPCG課題に回答することはご遠慮ください」
共催

1
@LyricLy構文コンストラクト(forループなど)が許可され、追加されることが推奨されます
共編

回答:


3

3.スコア: 2938 2583 2532(-51)

新しい通訳はこちらです。

主にクインをゴルフして出力を簡単にするために、スタック/デックを複製し、整数ではなくレンダリングされたテキスト形式でモデル全体を出力する機能を追加しました。

解決策

1. 「こんにちは、世界!」-17バイト(-3)

#"Hello, World!"a

5. お気に入りのプログラミング言語にハッピーバースデーを歌う -95バイト(-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. 私たちはゴルフをコーディングするのは見知らぬ人ではありませんルールを知っているので、私もそうです -1884バイト(-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Piのスライスを焼く-149バイト(-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. 素晴らしいゴルフをお楽しみください!-23バイト(-39)

$"R34RdR36Ra"R34RdR36Ra

追加された言語機能

  • a

    • すべて:モデル全体をテキストとして印刷します。例:#"Hello, World!"a印刷Hello, World!
  • d

    • Stack / Deque:スタックをそれ自体の上にプッシュします。

8

2.スコア:2938 2583

変更されたインタープリターはTIOにありますます。

文字列リテラルは、主に課題に対処するための最も明白な言語への追加です。

解決策

1. 「こんにちは、世界!」-20バイト(-28)

#"Hello, World!"[o>]

任意のチャレンジは#"<string>"[o>]、文字列に到達した後0になるまで指定された文字列を出力する構造を使用して完了することができます。

2 1、2、フィズ、4、バズ - 419 64バイト(-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

これで素晴らしいゴルフをしてくれた@ user202729に感謝します。

3. ソースコードに数字を含めずに数字2014を作成します -9バイト(-4)

#"ĒĎ"[O>]

Bugleコードポイントで2つの文字20と14を使用します。

4. 難読化されたHello World -19バイト(-153)

#"Ifmmp!Xpsme"[-o>]

ルール#1(いいえHLWDhlwd)および#3(いいえ27)を。

5. お気に入りのプログラミング言語にハッピーバースデーを歌う -98バイト(-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. 私たちはゴルフをコーディングするのは見知らぬ人ではありませんルールを知っているので、私もそうです -1887バイト(-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Piのスライスを焼く -149バイト(-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. 素晴らしいゴルフをお楽しみください!-62バイト(-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

追加された言語機能

  • "...":文字列リテラル。
    • Stack / Deque:各文字のBugleコードポイントをスタック/ dequeの先頭/前にプッシュします。
    • テープ/グリッド:各文字のビューグルコードポイントを、現在のセルから開始して、右側のテープ/グリッドに書き込みます。カーソルを移動しません。
    • \n 他の文字と同様に処理されます。
    • 現在のところ、エスケープされた文字はないため、"このコマンドを使用してメモリに(34)を書き込むことはできません。ここにリストされているすべての課題"は出力に含まれていないため、少なくとも今のところはそれほど大きな問題ではありません。

特に「決してあきらめない」と馬のために、それ以上のゴルフはいつでも歓迎です。具体的には、上記のクインは私がこれまでに作った非常に最初の非自明なクインなので、誰かがもっと短いものを思いつくことができると強く信じています。


特定の課題のためにビルトインを追加するだけでなく、他の皆が行うことを望んでいる種類の追加があります。+1
ケアード・コヒーリングアーイング

@ user202729バグを導入したのはおそらく私です。それとFizzBu​​zzソリューションを修正してくれてありがとう。
バブラー

3

1.スコア:9638

ベースのインタープリターはここにあり、提出物はここにあります。かなり長いので、ほとんどの記事を取り上げるのではなく、GitHubに含めました。

解決策

これらのソリューションはすべてユニコードプログラムであり、-uコマンドラインフラグを使用して実行されますが、スコアはBugleのコードページでエンコードされているかのようにカウントされます。

1. 「こんにちは、世界!」-48バイト

$72o101o108o108o111o44o32o87o111o114o108o100o33o

単にプッシュしてから、文字列内の各文字の文字コードを出力します。

2. 1、2、Fizz、4、バズ -1396バイト

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Hello、World!と同じテクニック 例

3. ソースコードに数字を含めずに数字2014を作成します -13バイト

#++O--O+O+++O

#テープを使用し+、セルをインクリメントOし、整数として出力し、-デクリメントします

4. 難読化されたHello World -172バイト

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Brainfuckに固有の類似性を使用します。ルール#1および#3に適合

5. お気に入りのプログラミング言語にハッピーバースデーを歌います -328バイト

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

課題はすべて、はこのような構造を持っています。

6. 私たちはゴルフをコーディングするのに見知らぬ人ではありません、あなたはルールを知っています、そして私もそうです -6893バイト

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. 符号を出力 -18バイト

$?:Zs0=0s-s:1s-++O

入力がゼロより大きいか、ゼロより小さいか(ゼロでは-1なくyield に変更される1)、ゼロに等しいかどうかをチェックしてから、合計を取ります。

8. Collat​​z予想(OEIS A006577) -36バイト

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

これにより、スタックでループが実行されますが、テープに切り替えて、反復ごとにカウントが増加します。

9.課題の配列#1:交互配列 -35バイト

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

これは、既存の課題に対するMitch Schwartzの回答をわずかに修正したものです。

10. 私は取るに足らない配列ですか?-46バイト

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

すべての信用はに行くEmignaために作り、これを

11. この数は素数ですか?-31バイト

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

ウィルソンの定理を使用して計算します (n-1)!² % n

12. 私は回文です。あなたは?-13バイト

$?:R=:O:=R:?$

プログラムの前半までOは、スタックを[x, x]where またはのxいずれかに設定します。トップ値をポップして出力します。プログラムの残りの部分は、エラーが発生しないことを確認するだけです。幸いなことに、ファイルの終わりに達すると、プッシュするだけですTrueFalseO?''(空の文字列)。

13. 標準の数値を -19バイトで合計します

$?:[?:];L0s[+L1s-]O

これは2つの部分に分割できます:?:[?:];L0s[+L1s-]。最初の部分は、スタックへのすべての入力を収集します。2番目の部分は、長さが1より大きい間、上位2つの要素の合計をプッシュします。

14. 階乗を見つける -25バイト

$?:[:1s-:];L1s-Z[×L1s-]O

これはsumプログラムと似た構造を持っていますが、ltiple入力をプッシュする代わりに[:1s-:];、範囲を1 .. nスタックにプッシュし、[×L1s-]、積取ります。

15. 無限の出力を生成する最短コード -5バイト

#+[O]

whileループを使用1し、ポインタの下で継続的に使用します。1永遠に出力します。

16. Piのスライスを焼く -439バイト

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Nを分割しない最小の数を見つける

$?:1:[:rs%0=s1+srr:Rs]1s-O

これは試行除算を使用し、モジュロの結果が等しくないときに終了します0

18. これは偶数ですか、それとも奇数ですか?-5バイト

$2?%O

2によるモジュロ

19. コードと同じ長さの出力 -16バイト

$16:[32+:o33s-:]

最初の16個の印刷可能なASCII文字を逆順に出力します。 0/.-,+*)('&%$#"!

20. 素晴らしいゴルフをお楽しみください!

$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次元グリッド、両方向に無限、0s のみを含む
  • 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つの分岐コマンドがあり、どちらも]文字で終了しています。

  • [):Brainfuckスタイルのwhileループ。これらは、使用されている場合はスタック/デックから値をポップするか、テープ/グリッド内のポインターの下のセルにアクセスします。

    例:#?[-O]入力からカウントダウン0

  • if / else({および})。whileループの単一実行。ポップされた値がfalseの場合、if句はスキップされ、else句に移動し}ます。メモリアクセスに関するwhileループと同じように動作します。

    例:{0}1]は論理否定ゲートです

組み込み関数

一連の数字は整数として解釈され、現在のメモリモデルにそのままプッシュ/書き込まれます。

明らかに、チェーンの進行に合わせて他の人がさらに追加できるように、Bugleにいくつかの基本的な組み込み関数を、できる限り少なくしました。基本コマンドは次のとおりです。

  • +

    • Stack / Deque:上位2つの値を追加します
    • テープ/グリッド:現在のセルをインクリメント
  • -

    • Stack / Deque:上位2つの値を減算します
    • テープ/グリッド:現在のセルをデクリメントします
  • %

    • Stack / Deque:上位2つの値をモジュロ
  • :

    • Stack / Deque:最上位の値を複製します
  • ;

    • Stack / Deque:一番上の値をポップします
    • テープ/グリッド:現在のセルをゼロにする
  • <

    • テープ/グリッド:左に1セル移動
  • =

    • スタック:上位2つの値は等しいですか?
    • グリッド:1セル下に移動
  • >

    • テープ/グリッド:1つのセルを右に移動
  • ?

    • Stack / Deque:入力行を評価します
    • テープ/グリッド:入力文字を取得します
  • L

    • スタック/デック:スタック/デックの長さをプッシュします
  • O

    • すべて:現在の値を出力します
  • R

    • スタック:可能であれば最上部の要素を反転し、そうでなければスタックを反転します
  • Z

    • スタック:上の要素は正ですか?
  • ^

    • グリッド:1セル上に移動
  • h

    • すべて:完全なメモリモデルを印刷します
  • o

    • すべて:現在の値を文字として出力します
  • r

    • スタック:上位3つの値を回転します
    • Deque:deque n時間を回転します。ここnで、最高値です
  • s

    • Stack / Deque:上位2つの値を交換します
    • スタック:最高値
  • ×

    • スタック:上位2つの値を乗算します
    • グリッド:ポインター値を現在のセルに書き込みます
  • ÷

    • スタック:上位2つの値を除算します
    • グリッド:現在のセルをポインター値に書き込みます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.