您可能已经在儿童科学博物馆中看到了雅各的阶梯。如果您不熟悉它们的外观,那么Wikimedia Commons上有一些图像和视频示例。今天的挑战是创建电子设备的动画ASCII版本。最后,它应该看起来像这样:
梯子构造
这是高度(H)为6 的梯子的基本形状:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
左侧的数字仅表示此示例的行号,不应包含在输出中。我们将通过数字(R)引用给定的行。第0行是底部¯¯
。从1到H的每一行包括四个部分:
- 空格
(U + 0020)重复(H - R)次
- 反斜线
\
(U + 005C) - 空格
(U + 0020)重复(2 * R)次
- 正斜杠
/
(U + 002F)
第0行是相同的,除了两个斜杠都用宏¯
(U + 00AF)代替。在每行末尾或梯形图下方都可以留有空白。前导空格不是。
电弧构造
构造好梯子后,即可在左侧和右侧之间创建圆弧。一个弧线完全位于一行内,并替换了前导\
和尾随之间的空间/
。因此,第2行的弧中将包含4个字符,第3行的弧中将包含6个字符,依此类推。每个弧均使用以下规则组成:
- 唯一允许的字符是
_/¯\
(U + 005F,U + 002F,U + 00AF,U + 005C) - 为了确保外观平滑,请在
¯
或/
后面加上¯
或。\
- 为了确保外观平滑,请在
_
或\
后面加上_
或。/
- 上面的两个规则也适用于梯子的边缘
- 这三个规则上面实际上意味着,在圆弧的第一个字符必须是
_
或者/
最后一个字符必须是_
或\
(\¯\_//
是两端无效,但\_/¯\/
就是OK) - 每个允许的字符在给定的点上必须有一个非零的机会
- 每个弧彼此独立
动画
通过从第1行开始并每次将其“移动”到上一行直到到达顶部,来创建单个电弧的寿命。IE,首先在第1行生成弧,然后将其设置回空格并在第2行生成弧,依此类推。给定多个要显示的弧(N),请遵循以下准则一次显示一个弧的完整寿命:
- 任何时候都只有一个弧是“活动的”。下一条弧线无法开始,直到当前的弧线到达顶部然后熄灭为止。
- 弧线寿命的每一行应精确显示一帧
- 在新弧开始之前(仅在第一弧之前),应该只有一帧基本梯子(无弧)
- 动画应显示N弧的整个寿命。如果N = 0,则应永久设置随机弧的动画,直到停止。
- 如果N > 0,您可能仍会永远循环播放动画,但它必须是一遍又一遍相同弧线的循环。(这篇文章顶部的示例GIF具有H = 6和N = 3,但它会永远循环。)
- 动画应在原地进行。也就是说,每个帧都应完全覆盖下一帧并位于同一位置。
- 每帧的长度可以是您想要的任何长度,但可以使人观看(IE,使用您的常识:0.01s /帧和30s /帧都是不可接受的。)
输入输出
- 输入和输出可以是任何标准格式
- 您可以导出GIF,在屏幕上写文本,为每帧输出一个文件,或任何其他合理的方式
- 禁止出现标准漏洞
- 梯子H的高度将为正整数
- 显示N的弧数将为非负整数
- 无论^ h和ñ被视为任何你选择的顺序(请在你的答案的顺序)输入
获奖条件
这是代码高尔夫球,因此最短的代码获胜。
1
圆弧能否通过其中心对称地生成?我在规则中看不到对此的限制
—
Dead Possum
我可以将每帧打印到控制台吗?
—
TF场,2018年
@DeadPossum我想你是对的,尽管事实上它也不会显得很雷-Y,但它实际上是由两个规则的组合不允许:
—
工程师吐司
the first character in the arc must be _ or / and the last character must be _ or \
和There must be a non-zero chance for each allowable character to occur at a given point
。为了对称,第一个字符和最后一个字符都必须_
每次都出现一次,这意味着出现/
或出现\的可能性为零。
@TFeld只要每个帧出现在屏幕上的相同位置,就可以。这意味着您每次都必须清除控制台(或者,如果可能的话,可以向下滚动)。
—
工程师吐司