有没有特别擅长ASCII艺术的语言?


20

我想知道是否有任何针对文本输出和ASCII艺术的深奥或高尔夫语言?

例如,05AB1E至少从定位基本转化开始。是否有任何针对文本输出和文本输出美术的高尔夫语言?

如果是这样,他们是否在这里有提示页,并且它们是常用的吗?

注意:我不是在寻找能够输出ASCII艺术的语言,而是在寻找一种有意设计成能够以相对简短的方式完成挑战的语言。


1
自从您提到它以来,以我的经验,05AB1E非常擅长应对ascii艺术挑战。
DJMcMayhem

1
我希望看到一种称为“ ASC和II将接收”的ASCII艺术语言。(但是,严重的是,如果还没有退出的话,那里就有很大的潜力。)
Hactar

我设计了一种名为Crayon的语言,专门用于创建ASCII艺术,但不幸的是我还没有时间实现它。
ETHproductions's

仅@ASCII,我一直在研究ASCII艺术语言。它仍处于设计阶段,但我们希望您(或任何人)的投入。如果您有兴趣,请加入我们的聊天室
DLosc

好吧,我当时在想我的想法很独特...我问这个问题是因为我想写一种基于CharMatrix的语言。没有人提到我想要的功能之一,所以我还是可以继续做下去。顺便说一下,所有的答案和评论都很棒,谢谢大家
Socratic Phoenix

Answers:


15

好吧,事实上,有!一种这样的语言是我一直致力于V的一种语言。

在后台,V只是vim,但是所有击键都会自动运行,并且在程序结束时,vim缓冲区的内容会打印到STDOUT。这只是使其运行起来更加方便。

关于该语言的一些历史。当我开始将vim文本编辑器用于代码高尔夫球时,我发现它实际上很不错,但是具有一些令人讨厌的功能,使其更难以竞争。例如,您可以通过以下方式设置排序的“ while循环”

qq<foobar>@qq@q

重复<foobar>直到发生错误。这有7个字节的样板代码。在V中,它缩短为ò<foobar>ò

一些使V非常适合ASCII艺术的事情:

  • 它是天生的二维。一个功能是具有“光标”位置,其中大多数命令根据光标在文本中的位置来执行某些操作。其他命令移动光标的位置。例如,x删除单个字符,但是Wx向前移动一个单词,然后删除一个字符。由于大多数其他语言不是有意使用二维的,因此在将文本放置在2D空间中的挑战时,这提供了一个不错的优势

  • 完全基于字符串。您可以使用一些数学运算,但是这些通常是实现目标的较长方法。

  • 它使用正则表达式压缩来快速更改文本。

  • 程序结束时,将隐式地打印所有的内部存储器(只是2D字符数组)。此外,所有输入都隐式地添加到其内部存储器中,这在大多数挑战都在于以某种方式更改输入时非常有用。

因此,我非常喜欢使用这种语言,如果您正在寻找一种特别的语言,我强烈建议您使用它。但是,我也要声明一些免责声明。

  • 学习非常混乱。它也非常强大,但是由于它基于30年前非常流行的文本编辑器,因此有很多晦涩的功能可能会很容易使新用户感到困惑。

  • 尽管它比vim更好地处理数字,但它对数字的支持仍然不是很好。就个人而言,我认为这使工作变得更加有趣(就像使用视网膜执行regex从未打算执行的任务一样)。:D

  • 它仍然是一个在制品。有一些错误,有些事情我还没补充。

  • 它没有太多的用户。(当前用户数:1)。

如果您想了解更多信息,这里有一些很好的资源:

  • 一个聊天室,我很乐意回答您的任何问题,并帮助您解释它的工作原理。

  • 在vim中打高尔夫球的技巧提示线,但是大多数技巧会保留下来。

  • 一个更详细地描述V 的元文章


8

我最近制作了一种新的编程语言,称为 Turtlèd,该用乌龟在字符网格上操作,该字符在网格内移动,写入网格,并控制网格。网格在末尾隐式打印。由于这个事实,它不必写空格,并且可以在空间上而不是从左到右,从上到下书写文本,这很可能使其符合给定的定义,并且擅长于装饰艺术。

当前,没有任何文档,因此除非您想阅读我的解释器,否则您可能将无法使用它,而这可能不是您想要的。我认为解释器中可能还存在错误,但是该规范还不够完善,无法说明它是否是错误。不过,Turtlèd可能即将完成所有文档和所有文档


3

05AB1E的ASCII高尔夫简介(基本转换[简单])

虽然05AB1E并非直接用于ASCII艺术,但我已经赢得了2个挑战。关于05AB1E的最好之处在于,即使使用简单的基本转换,也可以使用许多技巧来扩展甚至减少字节数。在ASCII挑战中,通常存在重新排列技巧,您可以使用这些技巧仅绘制一半图案,然后翻转并连接。如果是四向模式,则可以执行诸如zip和分叉的操作,仅绘制模式的一角。有很多数据结构操作技术可以与这种简单的基本压缩思想结合使用。


这是基本转换策略的速成课程:

在05AB1E中,我列举了ASCII艺术中使用的所有字符,例如:

--===___===--

将导致:

-
=
_

然后,我给它们分配从1开始的数字,然后从0到2:

- is 1.
= is 0.
_ is 2.

我用数字替换原始字符串中的字符:

1122200022211

我使用最低的底数(3)转换为十进制:

879412

如何使用05AB1E做到这一点

然后将其转换为以214为基数:

Jh]

如何使用05AB1E做到这一点

然后,将其包装在以下代码中:

05AB1E,16个字节

•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的。


更复杂的示例:

/codegolf//a/106621/59376


另外,也许尝试丹尼斯的kolmogorov复杂性语言:Bubblegum;不知道该如何使用。


2
Bubblegum并不是ASCII艺术的真正好语言,因为它不可能接受输入(两个示例除外),这是大多数ASCII艺术挑战所必需的。Cinnamon Gum可能是一个更好的选择,尽管我对此了解不多,据我所知没有文档
ETHproductions

1
并不是很重要,但是您可以将其•Jh]•3B5!…-=_‡
打下去

1
@Adnan "--===__"û10;)。
魔术章鱼缸

2

画笔

画笔是我自己(Hyper Neutrino)创建的一种娱乐编程语言,目的是擅长ASCII艺术。在许多情况下,它与木炭的竞争不佳,但它可以接受输入并做其他各种事情。它在2D字符网格上运行,并且能够操纵背景字符,操纵当时被视为背景字符的对象,移动行和列,移动行和列,复制行,列或整个网格等。

可以在GitHub存储库中找到一些示例。

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.