2021年 Wolfram 一行代码大赛优胜者

2021-12-28 16:38:56 浏览数 (1)

本文译自Wolfram博客:https://blog.wolfram.com/2021/11/24/the-winners-of-the-2021-one-liner-competition/ Wolfram语言(https://www.wolfram.com/language/)因其简便知名,在Wolfram虚拟科技大会(https://www.wolfram.com/events/technology-conference/2021/)连续举办10届的一行代码大赛就能很好地说明这一点。这个大赛让参赛者们挑战如何在128个字符以内写出尽可能最好的程序(这也是一条推特的原始长度限制)。奖励会授予给三个最好的作品,今年的大赛竞争很激烈,但裁判们还是在参赛作品中选出了值得奖励的作品。

必须提醒的是,提交的作品必须是128个字符以内的线性字符串,不允许出现二维排版架构。裁判标准极度主观,且会受到六位裁判自己的任性的突发奇想影响(但大会主持Daniel Lichtblau会公正地适时拉回这一趋势),但无论如何,作品应体现Wolfram语言的简洁、艺术性、原创性并给人眼前一亮的感觉。Wolfram员工不允许参与比赛。

Benny Cheng

分叉图(126个字符)

这个作品在一位裁判心中拥有特殊位置,让这位裁判想起了上世纪90年代使用QBasic(https://en.wikipedia.org/wiki/QBasic)在青少年代码实验中编写同样程序的经历。那个经历中不太愉快的部分是,使用当时代码爱好者可以接触到的工具,需要使用大量的时间和代码才能达到相似的结果。我们真的进步了很多!

裁判委员会也一致认为输出的图像效果很不错。使用16个字符添加 Background→Black 改变图像背景看上去物有所值。毕竟十月是万圣月。

三等奖

James Lu

三问表 Computa UltraTerse(122个字符)

我们三等奖的获奖者通过他的一段故事将他的作品提升到了一个新的高度。他是这么说的:

三问表是机械表和高级钟表(https://www.chrono24.com/magazine/what-is-haute-horlogerie-p_20847/)的完美结合。按钮按下去,三问表会分别报出小时、刻和分的声音。比如,如果现在的时间是上午3:34,那么三问表会先发出三声低沉的响声,代表三点,随后是两声双响,表示2 × 15 = 30分钟,然后是四声清亮的声音表示4分钟:“叮叮叮;叮 咚,叮 咚;叮叮叮叮。”这种钟表在夜间照明普及前发明,对夜间报时无比重要。在现代,虽然三问表已经失去了其原始作用,但仍由于其复杂和创新的设计被钟表爱好者追捧。

三问表的结构机制非常拥有独创性,除机械技术外,还要求制表人对发出的声音有音乐性上的判断。而且,三问表的另一个成就顶峰是把自己塞进小型表壳子中。为了致敬这一机械设计,我使用了Wolfram语言中的计算“齿轮”并使用了一小段简洁到可以塞进128个字符“壳子”中的代码。按下“计算”键,这个可以报时的三问表不但可以带你听到用现代算法发出的来自那个年代的声音。

评委们很喜欢这节历史课,也很喜欢这个视力受损人群仍可以使用的程序。注意代码中,编程者很聪明地在#1~Table~#2中使用了中缀符,巧妙地在Table[#1,#2]上省下了一个字符的空间。

二等奖

Michael Sollami

可怜人的假期(126个字符)

每个人都可能不时需要一个休假,对吗?而且在新冠疫情的时期,我们还希望可以进行虚拟旅行。这个作品让用户可以动态选择全球任意一个度假胜地,并展示从WebImageSearch(https://reference.wolfram.com/language/ref/WebImageSearch.html)中获取的图像,来告诉你如果你去那里旅游的话你会看到什么风景。注意这里d=Dynamic (https://reference.wolfram.com/language/ref/Dynamic.html)的定义实际上让整个编程节省了4个字符。而且不使用分号而是通过添加 [NewLine] ( https://reference.wolfram.com/language/ref/character/NewLine.html)字符的代码的方法,类似CompoundExpression (https://reference.wolfram.com/language/ref/CompoundExpression.html)中,作者让我们可以同时浏览多个链接Dynamic的表达式——很巧妙的想法!

一等奖

Michael Sollami

推特中的国际象棋盘(128个字符)

谁能想到仅用128个字符的Wolfram语言可以构建一个功能完整的国际象棋盘呢?!在这段优雅的代码中,一等奖的获得者Michael Sollami做到了!我们来看一看这段代码和输出的结果:

出乎意料的是,真的可以用这个棋盘来下国际象棋。可以在前端和象棋进行交互进行点击拖拽的功能完全由Graphics(https://reference.wolfram.com/language/ref/Graphics.html)中的Locator(https://reference.wolfram.com/language/ref/Locator.html)提供,显示了Wolfram语言加上Wolfram前端动态能力的强大功能。裁判们对该代码可以在字符限制范围内淋漓地展示功能的程序印象深刻。在灰度函数中使用Raster(https://reference.wolfram.com/language/ref/Raster.html)和Array (https://reference.wolfram.com/language/ref/Array.html )使得将棋盘可视化的代码浓缩到仅仅27个字符。Array的第一个参数巧妙使用了Plus(https://reference.wolfram.com/language/ref/Plus.html)的前缀,因此 ## 等价于#1 #2,但少用了3个字符。还有要注意的是,象棋棋子的图像是标准UTF-8字符,这样根据大赛规则每枚棋子只占用一个字符。要不要叫上朋友来一局?

你还在等什么?

在看过用少量的Wolfram语言可以做出怎样的成果后,你可以看一看今年的作品(https://content.wolfram.com/uploads/sites/39/2021/11/WTC21-One-Liner-Submissions-1.nb),我们希望你也能从中得到一些灵感并做出属于自己的独一无二的作品。如果你也写出了一行代码,可以通过推特Wolfram程序(https://twitter.com/wolframtap)(这里(https://blog.wolfram.com/2014/09/18/introducing-tweet-a-program/)有具体描述),来向世界分享你的成果。

0 人点赞