我想知道是否有任何针对文本输出和ASCII艺术的深奥或高尔夫语言?
例如,05AB1E至少从定位基本转化开始。是否有任何针对文本输出和文本输出美术的高尔夫语言?
如果是这样,他们是否在这里有提示页,并且它们是常用的吗?
注意:我不是在寻找能够输出ASCII艺术的语言,而是在寻找一种有意设计成能够以相对简短的方式完成ascii艺术挑战的语言。
我想知道是否有任何针对文本输出和ASCII艺术的深奥或高尔夫语言?
例如,05AB1E至少从定位基本转化开始。是否有任何针对文本输出和文本输出美术的高尔夫语言?
如果是这样,他们是否在这里有提示页,并且它们是常用的吗?
注意:我不是在寻找能够输出ASCII艺术的语言,而是在寻找一种有意设计成能够以相对简短的方式完成ascii艺术挑战的语言。
Answers:
好吧,事实上,有!一种这样的语言是我一直致力于V的一种语言。
在后台,V只是vim,但是所有击键都会自动运行,并且在程序结束时,vim缓冲区的内容会打印到STDOUT。这只是使其运行起来更加方便。
关于该语言的一些历史。当我开始将vim文本编辑器用于代码高尔夫球时,我发现它实际上很不错,但是具有一些令人讨厌的功能,使其更难以竞争。例如,您可以通过以下方式设置排序的“ while循环”
qq<foobar>@qq@q
重复<foobar>
直到发生错误。这有7个字节的样板代码。在V中,它缩短为ò<foobar>ò
。
一些使V非常适合ASCII艺术的事情:
它是天生的二维。一个功能是具有“光标”位置,其中大多数命令根据光标在文本中的位置来执行某些操作。其他命令移动光标的位置。例如,x删除单个字符,但是Wx向前移动一个单词,然后删除一个字符。由于大多数其他语言不是有意使用二维的,因此在将文本放置在2D空间中的挑战时,这提供了一个不错的优势
它完全基于字符串。您可以使用一些数学运算,但是这些通常是实现目标的较长方法。
它使用正则表达式压缩来快速更改文本。
程序结束时,将隐式地打印所有的内部存储器(只是2D字符数组)。此外,所有输入都隐式地添加到其内部存储器中,这在大多数挑战都在于以某种方式更改输入时非常有用。
因此,我非常喜欢使用这种语言,如果您正在寻找一种特别的ascii艺术语言,我强烈建议您使用它。但是,我也要声明一些免责声明。
学习非常混乱。它也非常强大,但是由于它基于30年前非常流行的文本编辑器,因此有很多晦涩的功能可能会很容易使新用户感到困惑。
尽管它比vim更好地处理数字,但它对数字的支持仍然不是很好。就个人而言,我认为这使工作变得更加有趣(就像使用视网膜执行regex从未打算执行的任务一样)。:D
它仍然是一个在制品。有一些错误,有些事情我还没补充。
它没有太多的用户。(当前用户数:1)。
如果您想了解更多信息,这里有一些很好的资源:
虽然05AB1E并非直接用于ASCII艺术,但我已经赢得了2个挑战。关于05AB1E的最好之处在于,即使使用简单的基本转换,也可以使用许多技巧来扩展甚至减少字节数。在ASCII挑战中,通常存在重新排列技巧,您可以使用这些技巧仅绘制一半图案,然后翻转并连接。如果是四向模式,则可以执行诸如zip和分叉的操作,仅绘制模式的一角。有很多数据结构操作技术可以与这种简单的基本压缩思想结合使用。
这是基本转换策略的速成课程:
在05AB1E中,我列举了ASCII艺术中使用的所有字符,例如:
--===___===--
将导致:
-
=
_
然后,我给它们分配从1开始的数字,然后从0到2:
- is 1.
= is 0.
_ is 2.
我用数字替换原始字符串中的字符:
1122200022211
我使用最低的底数(3)转换为十进制:
879412
然后将其转换为以214为基数:
Jh]
然后,将其包装在以下代码中:
•Jh]•3B…102…-_=‡
最终解释:
•Jh]• # Push the compressed ASCII integer.
3B # Convert it to base 3.
…102 # Push the keys to the conversion.
…-_= # Push the values to the conversion.
‡ # Transliterate, replace 0, 1 and 2 with the symbols.
现在,面对这个特定的挑战,字符串是如此之短,以至于没有意义。我可能只是将一半的弦推入,然后将Palindromize压缩10个字节,"--===__"û
或者像Adnan那样用析因,聪明的人打高尔夫,就打高尔夫球•Jh]•3B5!…-=_‡
。他也是(之一?)的创造者(S?) 05AB1E的。
更复杂的示例:
另外,也许尝试丹尼斯的kolmogorov复杂性语言:Bubblegum;不知道该如何使用。
•Jh]•3B5!…-=_‡
"--===__"û
10;)。