这种挑战来自灵感这个答案在向Ubuntu的堆栈交换。
介绍
还记得带有管道的Windows ME屏幕保护程序吗?是时候带回怀旧了!
挑战
您应该编写一个程序或函数来输出屏幕保护程序的ASCII表示。在屏幕保护程序中,应该有一个沿半随机方向增长的管道。
管道的起点将随机放置在屏幕的任何边界处,并且管件应垂直于边界(拐角的第一根管道可以是水平的也可以是垂直的)。每次滴答时,管道都会朝着其面对的方向(水平/垂直)生长,80%
或者会偶然发生拐角20%
。
管道表示
要创建管道,将使用6个unicode字符
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
输入项
程序/功能将采用3个输入值,这些值可以通过功能参数收集或提示给用户。
- 刻度线数量
- 屏幕宽度
- 屏幕高度
刻度线数量
对于每个刻度,都会在屏幕上添加一条管道。如果管道在同一位置生成,管道将覆盖旧管道。
例如,以3x3大小的屏幕
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
每当管道退出屏幕时(如上一个示例中的5个滴答所示),就会在随机边界处生成一个新管道。例如:
ticks == 6
│┐
└┘
─
新管道应具有50%的水平或垂直机会。
屏幕宽度/高度
如果您选择的语言更可取,则屏幕宽度和高度可以合并为一个值。屏幕的宽度和高度将始终具有最小值1和最大值255。如果您选择的语言支持的控制台或输出屏幕小于255x255的字符网格,则可以假定宽度和高度将为永远不要超出控制台的界限。(例如:Windows 80x25 cmd窗口)
输出量
程序/函数的输出应打印到屏幕上,或从函数返回。对于程序的每次运行,应生成一组不同的管道。
测试用例
以下测试用例均为有效输出的随机示例
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
显然,出现的滴答声越多,证明程序有效性的难度就越大。因此,最好发布运行输出的gif文件。如果无法做到这一点,请发布您的代码版本,其中包括打印输出。显然,这不会计入您的分数。
规则
- 这是代码高尔夫球,最短的字节数获胜
- 适用标准漏洞
- 如果您在源代码中使用unicode管道字符,则可以将它们视为一个字节
这是一个相当艰巨的挑战,可以通过许多创造性的方法来解决,尽管已经有简短的解决方案,但仍鼓励您用更加冗长的语言编写答案。这将创建每种语言的最短答案的目录。花式彩色gif的奖金投票;)
打高尔夫球快乐!
免责声明:我知道Unicode字符不是ASCII,但是由于缺少更好的名称,我将其称为ASCII艺术。欢迎提出建议:)