2次元プログラミング言語でゴルフをするための一般的なヒントは何ですか?コードゴルフの問題に適用でき、2Dプログラミング言語に固有のヒントを探していますが、特定の言語に固有のヒントはありません(「コメントの削除」や「M
操作の使用」などの回答は答えではありません)。
回答ごとに1つのヒントを投稿してください。
2次元プログラミング言語でゴルフをするための一般的なヒントは何ですか?コードゴルフの問題に適用でき、2Dプログラミング言語に固有のヒントを探していますが、特定の言語に固有のヒントはありません(「コメントの削除」や「M
操作の使用」などの回答は答えではありません)。
回答ごとに1つのヒントを投稿してください。
回答:
通常、簡単なプログラムは1行で記述できます。たとえば、古典的なcatプログラムは次のようになります。
>iv
^o<
しかし、ラッピング動作を悪用してこれを行うことができます。
io
または、そのようなラッピング動作のない言語では:
> ?oi<
(想定?
はポップしません。)非ラッピング言語の場合、多くの場合、明示的なループの方が適しています。
ジャンプおよび条件付きジャンプコマンドを使用する2D言語では、プログラムは次のようになります。
abc >de?v;
^hgf<
これも可能性があります。
abc de?!;hgf04&
(!
トランポリンであり&
、位置にジャンプする場合)
ioiioiioi
他のことをしませんか?
io;
ません、そして私が知っているのはそれ?
がポップしないことだけです。これらは魚のコマンドであるように見えますが、私はそれらが非常に標準的であるとは思いません。
作成できる2Dが少ないほど、優れています。キャリッジリターンは別のノーオペレーションです。@ATacoと@ASCIIのみのヒントを無視せずに、Yディメンションをできるだけ小さくしてください。
この
###
####
########
よりも良い
###
###
###
##
#
#
#
#
\n
(ラインフィード)は、POSIXシステムの左揃えテキストで通常使用される改行コードですが、WindowsおよびMac OS(pre-macOS)は\n
(ラインフィード)と\r
(キャリッジリターン)の組み合わせを使用します。
以下に、言語の性質に応じて特定のことを行う「イディオム」をいくつか示します。
動的なコード生成が必要な場合、擬似線形コードモデルを使用すると便利です。
v
\"line 1"
\"line 2"
.
.
\"line N"
彼らが通常行うことを想定\
してv
意味する。
ほとんどすべての2D言語で><
は、無限の壊れないループです。何らかの理由でこれを行う必要がある場合、これはどのように見えても最高です。
>v
^<
実際、コードを1ライナーにする場合は、^
またはv
をそのまま使用できます。
i?vo;
これによりv
、IPが自身に送信され、ラップアラウンドされます。方向コマンドが一連の(相対)no-opsを指す場合でも、このアプローチを使用できる可能性があります。
通常、文字列/引用フレームワークを持つ言語は、次のようなクインを持つことができます。
<quote><generate "><output stack><terminate>
> <>の場合、これは次のようになります。
":1-r>o<#
これを除き、終了としてエラーで終了します。それは恐らく最短の> <>クイン、あるいは少なくとも私が見つけた最短のものです。
<
> <>クインを持っているのですか?
"
間違った側になってしまいます。それ以外のヒントは良いです、私は私の一般的なフレームワークを私の答えの多くで使用しました