2D语言打高尔夫球的技巧


18

您对二维编程语言打高尔夫球有什么一般提示?我正在寻找可应用于代码高尔夫球问题的提示,这些提示特定于2D编程语言,但不特定于任何一种语言(“删除注释”和“使用M操作”之类的响应不是答案)。

请为每个答案发布一个提示。


这个问题不应该在Meta上吗?
李斯特先生,

2
还有一个相关的问题荟萃这里:什么 2D节目的大小?覆盖区域?凸包的面积?轴对齐的包含矩形的区域?与某种形式的ASCII大小相比,所有方法可能都是更好的方法。
MSalters

@MrLister提示问题是主站点的主题。如果您看一下,可以看到在提示标签下我们已经有很多问题。
小麦巫师

@MSalters就像所有其他编程语言的长度一样,以字节为单位。一些语言设计师允许以不同的方式排列2D语言,例如Hexagony或Cubix,仅此而已。
小麦巫师

Answers:


19

避免水平间隙

通常,代码会在程序的左侧留下较大的空白,就像这样。

abc
  d
  e

如果可以通过左对齐避免这种情况,则会增加4个字节。

cde
b
a

如果需要使用较大的空白间隙,请尝试使它们垂直而不是水平。

########
#      #
#      #
#      #

####
#
#
#
#
#
#
####

11

尽可能使用一维

通常,更简单的程序可以写在一行上。例如,经典的cat程序可以是:

>iv
^o<

但是,一个人可能会滥用包装行为,并且这样做:

io

或者,在没有这种包装行为的语言中:

> ?oi<

(假设?不会弹出。)对于非包装语言,显式循环通常会更好。

使用跳转命令

在带有跳转和条件跳转命令的2D语言中,程序可能如下所示:

abc >de?v;
    ^hgf<

也可能是:

abc de?!;hgf04&

(如果!是蹦床,并且&跳到位置)


你的第三个例子不是ioiioiioi吗?
ASCII码,仅ASCII

仅@ASCII确实可以。哎呀。
科纳·奥布莱恩

1
您可能应该说明一些不太常规的命令的功能。例如,我不知道该怎么io;办,而我所知道的就是那?不会弹出。似乎这些是fish命令,但我认为它们不是非常标准的命令。
小麦巫师

2
在某些没有条件跳过命令的2D语言中(例如迷宫),您也经常可以通过有条件地终止除以零的程序来编写循环单行程序。
马丁·恩德

10

回车太字节

制作的2D越少越好。回车是另一个禁忌。不要忽略@ATaco和@ ASCII-only的提示,请尝试使Y尺寸尽可能小。

这个

###
####
########

胜过

###
###
###
##
#
#
#
#

回车并非总是字节。\n尽管Windows和Mac OS(pre-macOS)使用\n(换行)和\r(回车)的组合,但(换行)是在POSIX系统上经常在左对齐文本中使用的换行符。
wizzwizz4 '17

9

干(不要重复自己)

尽管在Code Golf中使用函数进行抽象通常会更长一些,但对于2D语言来说确实可以提供帮助。尝试重新编写代码,以便它可以重复使用同一代码段,并通过两个不同的执行分支来输入/退出它。


8

交错路径

通常以2D语言显示的IP会根据方向命令移动。由于空格是浪费的字节,因此重新安排程序几乎总是更有效的,因此它尽可能频繁地向左移动,从而节省了不必要的填充空格。


2

使用镜子

有时有时可以同时在两个路径中使用镜子(每个路径从镜子的一侧反弹)。这似乎无济于事,但它可能使您可以重新排列程序,或者如果方向改变了很多,则可以用较少的镜像替换它们。


2

记住成语

根据语言的性质,这里有一些做某些事情的“成语”。

伪线性码

如果需要动态代码生成,则可以使用伪线性代码模型:

v
\"line 1"
\"line 2"
.
.
\"line N"

假设\v表示他们通常做什么。

无限循环

在几乎所有2D语言中,><都是无限的,不可破坏的循环。如果出于某种原因需要这样做,那么这是最好的方法,尽管看起来可能不错:

>v
^<

实际上,如果将代码设置为1-liner,则可以使用^v,如下所示:

i?vo;

v将把IP发送给自己,并环绕。在定向命令指向一系列(相对)无操作的情况下,您仍然可以使用此方法。

Quine框架

通常,具有字符串/引用框架的语言可以具有如下所示的quine:

<quote><generate "><output stack><terminate>

对于> <>,​​这看起来像:

":1-r>o<#

除此之外,退出时会出错并终止。它可能是最短的> <> quine,或者至少是我发现的最短的。


这似乎并不是一个提示。
小麦巫师

@WheatWizard我将它们放在一起是因为将它们拆分对我来说意义不大,因为它们都是常见的程序布局习惯用法。
科纳·奥布莱恩

为什么<在> <> quin中有?
Jo King

@JoKing我不太确定大声笑
Conor O'Brien

而且,"最终结果落在了错误的一边。否则,提示会很好,我在很多答案中都使用了该通用框架
Jo King
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.