您对莎士比亚编程语言的高尔夫有什么一般提示?我正在寻找可以应用于代码高尔夫球问题的想法,并且这些想法至少也特定于SPL(例如,“删除注释”不是答案)。
请为每个答案发布一个提示。
您对莎士比亚编程语言的高尔夫有什么一般提示?我正在寻找可以应用于代码高尔夫球问题的想法,并且这些想法至少也特定于SPL(例如,“删除注释”不是答案)。
请为每个答案发布一个提示。
Answers:
(嗯...因为这是我采用的语言1,我觉得我不得不在这里添加一些内容)
是的,这是代码高尔夫球的相当标准,您只使用一个字母长度的变量名,这里没有消息。还是在那里?因为创建SPL的家伙很古怪,不允许为其语言的变量输入任何名称:它们必须来自莎士比亚的戏剧,就字符长度而言,这是王室的痛苦-但是,如果您使用SPL编码,您已经知道。因此,我的建议是每个实例都使用带有短名称的字符,例如Ajax,Ford,Page或Puck,而不要使用Canterbury的大主教。
恐怕这就是我所拥有的。
(在做完前一个之后,我只记得了几件事)
一个例子,试图解释这意味着什么。
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个字节,而第二个具有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.
return to
即使场景在前方,也可以使用,反之亦然。实际上,即使您完全省略了解释器,它也不在乎。这意味着这三个语句是100%等效的:
Let us proceed to Scene X.
Let us return to Scene X.
Let us Scene X.
通常,您不能重用一个动作的第一个场景,因为它总是有[Enter Ajax and Puck]
第一件事。但是,您可以在此之前添加前缀,[Exeunt]
以能够重用剧本的第一个场景。[Exeunt]
比声明新场景短一个字节,跳转到Act比跳转到场景少两个字节。
例如:一个简单的猫程序
,.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