シェークスピアプログラミング言語でゴルフをするための一般的なヒントは何ですか?コードゴルフの問題に適用でき、少なくともSPLに固有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。
回答ごとに1つのヒントを投稿してください。
シェークスピアプログラミング言語でゴルフをするための一般的なヒントは何ですか?コードゴルフの問題に適用でき、少なくともSPLに固有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。
回答ごとに1つのヒントを投稿してください。
回答:
(まあ...これは私の採用言語1なので、ここに何かを追加する義務があるように感じます)
ええ、ええ、ええ、それはコードゴルフの標準です。1文字の変数名を使用するだけで、ここではニュースはありません。それともありますか?SPLを作成したチャップは、言語の変数に名前を付けられないほど奇抜だったためです。それらは、キャラクターの長さの点で王室の苦痛であるシェイクスピア劇に由来する必要があります-しかし、SPLでコーディングしている場合、あなたはすでにそれを知っています。したがって、私のアドバイスは、インスタンスごとにカンタベリーの大司教の代わりに、Ajax、Ford、PageまたはPuckなどの短い名前の文字を使用することです。
私はそれがすべてだ、私は恐れている。
(前の手順を実行した後、いくつかのことを思い出しました)
これが何を意味するかを説明するための例。
Ajax:
You are as warm as a big red rich fair cute bold cat!
そして
Ajax:
Thou art as blossoming as an embroidered trustworthy bottomless peaceful charming handsome chihuahua!
まったく同じ結果が得られます。つまり、話されているキャラクターの値が64になります(SPLとの長い戦いを読んだと仮定すると、両方の行が2 * 2 * 2 * 2 * 2 * 2 *に相当することがわかります) 1); ただし、最初のバイトは59バイトで、2番目のバイトは107バイトです。
それでも、誰もSPLでコードゴルフチャレンジに参加できるほど痴呆になることはないので、...
a big big big big big big cat
、さらに4バイトを節約しますか?私はそれが芸術性を台無しにすることを知っています...しかし、これは結局コードゴルフです。;)
つまり、次の代わりに:
Scene I
Scene II
Scene III
Scene IV
Scene V
できるよ:
Scene L
Scene I
Scene C
Scene X
Scene V
D
有効なローマ数字?IIRC、500(ただし、SPLで有効かどうかはわかりません)
これを見てください(読みやすくするために改行と空白を挿入します):
Puck:You is a big big cat!
Open your heart!
Ajax:Be you worse than I?
If so, let us return to Scene V!
If not, you is a cat.
You is the sum of I and the sum of a cat and you
Speak thy mind!
[Exeunt]
ええ、かなりゴルフに見えますか?以下は、さらにわかりにくい形式です。
Puck:You big big cat!
Open heart!
Ajax:Be you worse I?
If so, let us Scene V!
If not, you cat.
You is the sum of I the sum of a cat you
Speak mind!
参考までに、コードから簡単に削除できる単語のリストを次に示します。
big cat
ます。それ以外の場合は、「is」が必要です伝説:
X
そしてY
、のような定数cat
、I
またはyou
[op]
以下のような操作はnicer
、the sum of
他に出くわした場合は、リストに追加します。
追加の参照用に、プログラムを開始するための最も短いヘッダーを次に示します。
,.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]
必要に応じて、PageとFordを追加の文字として追加します。
だからここにある:
a
代わりに使用します。これらはで機能しないためです。an
the
the sum of
a
am
、be
またはis
代わりのare
かart
。I
代わりに使用します。me
myself
you
代わりにthee
、thou
、thyself
またはyourself
。big
形容詞に使用します。cat
正数に使用します。pig
負の数に使用します。zero
ゼロに使用します。worse
します。A < B
smaller
punier
nicer
のためにA > B
(代わりにbetter
、bigger
、fresher
、friendlier
またはjollier
)。「シーンXに戻りましょう」は、話しているキャラクターが舞台裏にいる場合でも使用できます。代わりに:
Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
Ajax:If not,let us return to scene III.
[Exit Puck]
[Enter Page]
Ajax:You is a big big big big big big cat.
できるよ:
Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
[Exit Puck]
[Enter Page]
Ajax:If not,let us return to scene III.You is a big big big big big big cat.
些細なもの(2つの隣接するスペース、句読点に隣接する、改行に隣接する、末尾)を除き(いくつかの例外を除き)、次のトークンの後のスペースを削除できます。
the sum of
let us
the ghost
(このように)(しかし、このキャラクターをとにかく使用する人)if so
そしてif not
(削除,
この後、および任意のスペースを追加する必要はありません例:。 if solet usact I
)listen to
(このようにlisten tothy
動作します)注:これはPerlインタープリターでは機能しません。これはおそらく、Flexの解析動作によって引き起こされる意図しない効果にすぎません。「言語の標準は、」そのことについては明らかではありません。
return to
シーンが先であっても使用でき、その逆も可能です。実際、インタプリタは完全に省略しても気にしません。つまり、これら3つのステートメントは100%同等です。
Let us proceed to Scene X.
Let us return to Scene X.
Let us Scene X.
通常、行為の最初のシーンは常に[Enter Ajax and Puck]
最初のものであるため、行為の最初のシーンを再利用することはできません。ただし、[Exeunt]
プレイの最初のシーンを再利用できるように、これを前に付けることができます。[Exeunt]
は、新しいシーンを宣言するよりも1バイト短く、Actにジャンプすることは、シーンにジャンプするより2バイト短くなります。
例:簡単な猫プログラム
,.Ajax,.Page,.Act I:.Scene I:.[Enter Page and Ajax]Scene V:.Ajax:Open mind!Speak thy!Let usScene V!
に:
,.Ajax,.Page,.Act I:.Scene I:.[Exeunt][Enter Page and Ajax]Ajax:Open mind!Speak thy!Let usAct I!
たとえば、あなたが持っている場合
Ajax:You is a fat fat fat fat fat fat fat fat fat fat cat!
Puck:You is the sum of thyself and a fat fat fat fat fat fat fat fat fat fat cat
Ajax:You is the sum of the difference of me and thyself and a fat fat fat fat fat fat fat fat fat fat cat!
一番上に別の人を宣言するだけです
Ford,a fat fat fat fat fat fat fat fat fat fat cat.
コードを
Ajax:You is Ford.
Puck:You is the sum of thyself and Ford.
Ajax:You is the sum of the difference of me and thyself and Ford.
.
やを必要としません!
。これはの前にも使用でき[
ます。(jimmy23013に感謝)
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat[Exeunt]
例:
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]
動作しません:
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax]
(直後Scene {number}:
)(ただし、これが機能するのに、理由はわかりません),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart
(およびより短いバリアント),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I
(およびより短いバリアント),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall
(唯一の空の後Recall
、Recall x
またはRecall@
その他作品),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(なしmind
)Speak thy
かLet us Scene I
の代わりに:
You is the sum of a big big big big cat a big big big cat.
つかいます:
You is twice twice twice the sum of a big cat a cat.
のtwice
2回の使用big
は8バイト(スペースを含む)でtwice
あり、6バイトしかないため、これは2バイトを節約します。