通常,代码高尔夫意味着以下两件事之一:

  • 缩短一段代码的行为。

  • 互联网上一个非常不起眼的社区,他们竞相编写_非常_短代码。对某些人来说,他们被视为“把玩笑开得太远”的群体,但对我来说,他们是工匠

不过,代码高尔夫挑战并不总是与编写最短的代码有关。有些比赛的得分在创造性。有些问题甚至只是问_这可能吗?_——结果很漂亮。稍后,我们将看到一个只匹配自身的 RegEx。

代码高尔夫比赛最常见的衡量标准是答案所需的字节数,通常可以理解为 UTF-8 字符的数量。print('Hello, World!')将是一个 22 字节的答案。就像高尔夫一样,得分最低的获胜。

对于“打印程序没有的每个 ASCII 字符”,Umbrella是目前 84 字节的 JavaScript 的领导者——相对较长。

// Alerts 'bcdfghijkmnpquvxyz6840'
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)

让我们看一个极端的例子,GolfScript条目。语言参考此处为。

# Outputs the remaining ASCII characters
{`),32>^.}.~

GolfScript 相当 难以遵循。大多数时候,我们为人类而不是机器编写代码。在代码高尔夫中,一个人写来得分。标准编程语言虽然经常使用,但可能具有限制性。例如,我从未见过 C# 或 Java 答案在最短答案获胜挑战中名列前茅。

深奥语言

深奥的语言:

  • 次实验奇怪的想法。

  • 可能很难在](https://esolangs.org/wiki/Unreadable)中执行[程序。

  • 甚至可能被设计为笑话。

  • 可能不实用。

就像主流编程语言随着时间的推移而发展一样,代码高尔夫语言也是如此。这些语言的设计目标不同。有些人希望能够编写最小的程序。有些写只是因为。

Hexagony是一种二维编程语言。让我们看一个打印“Hello, World!”的程序。您可以在tio.runa.k.a. Try It Online 上在线运行它 - 636 语言的开源游乐场。

   H ; e ;
  l ; d ; *
 ; r ; o ; W
l ; ; o ; * 4
 3 3 ; @ . >
  ; 2 3 < \
   4 ; * /

感兴趣?我最喜欢的代码高尔夫写作之一是语言创建者对他的素数测试程序的描述。阅读这些解决方案并尝试自己的解决方案,可以锻炼我解决问题的能力。它帮助我学习我的语言的优势。

社区

与开源社区类似,代码高尔夫通常是一种协作努力。语言是在开放的情况下开发的,问题会找到有用的答案。比赛的“参赛作品”也将得到礼貌的帮助。我记得我第一次尝试代码高尔夫,我收到了欢迎消息和减少字节的建议。

StackExchange 的Programming Puzzles & Code Golf部分是 Internet 上最活跃的代码高尔夫社区,在这里您可以找到许多正在使用的这些语言。Esolangs是一个社区 wiki,其中深入介绍了最深奥的语言。 Twitter 上的#codegolf 标签很慢但很受欢迎。

只匹配自身的正则表达式

正如所承诺的,这个帖子很有趣。海报首先说明_这很可能是不可能的_,然后再详细说明挑战。幸运的是,jimmy23013向我们展示了这个挑战不仅是可能的,而且确实可以非常简洁地解决。

# RegEx that only matches itself
# in (PCRE) Perl Compatible Regular Expressions
<^<()(?R){2}>\z|\1\Q^<()(?R){2}>\z|\1\Q>

# A more widely compatible version:
/^\/()(?R){2}\/\z|\1\Q^\/()(?R){2}\/\z|\1\Q/

这个数是质数吗?

让我们从 Python答案(59 个字节)开始。它与质数检查一样天真,但在创造性上很短。它演示了一个典型的代码高尔夫答案:解决问题,然后应用语法技巧。 (我自己的评论)。

# take a number via stdin
n=int(input())
# build an array of this number's factors from 1 to n
# if there is only one factor (the number one) then it is prime!
print([i for i in range(1,n)if n%i==0]==[1])

领先的 JavaScript 答案有点难以区分。

// Alert true or false given an input number
alert(!/^(?!(..+)\1+$)../.test(prompt()))

海报告诉我们它使用“酷一元正则表达式来确定素数”。进一步研究发现这个~5000 字的文章解释了所述的 RegEx 表达式。您可能已经开始意识到,代码高尔夫就像编程一样,它是一个没有尽头的兔子洞。但是你越深入,它确实会获得更多的回报。

网络上的其他地方

JS1k是一个 JavaScript 演示,与 1024 字节以下的“花式 JavaScript 演示”竞争。它们在视觉上非常令人印象深刻。

还有始于 1984 年的国际混淆 C 代码竞赛。虽然它比高尔夫更接近寻宝!这是 1995 年的迷宫生成器条目,作者 Carlos Duarte(来源):

[1995/cdua](https://res.cloudinary.com/practicaldev/image/fetch/s--CKJl5xzO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3 .amazonaws.com/i/uv0hztfowvptckm4x5jg.png)

向我最喜欢的两个 esolang05AB1E和Jelly致敬。它们都很好地应对挑战,并且通常伴随着精心编写的解释,这是学习它们的一个很好的切入点。


加入 150 多人的行列,订阅我的时事通讯,了解编程和个人成长!

我在推特上发布了关于 tech@healeycodes的信息。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐