这是我的头:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
它正好由八根头发组成。我的头发太长了。请把每根绞线切成我指定的长度。
输入值
此部分的主要吸引力是实际的头发。这是懒惰的图形化,彩色编码的表示形式以及动画:
这是一组头发的完整规格:
- 每根头发,我们称之为股,将被做出来的的
/
,\
,|
,和-
ASCII字符,从此被称为原子。 - 整个听音头(所有线段的总和)将是
c
逐行的r
,其中c
≥1和r
≥2。 - 每条线将...
- 从头的最后一行开始(行
r
-1)。 - 具有长度
l
,其中l
≥2。
- 从头的最后一行开始(行
- 可以使用以下方法解析子线:
- 从链的底部开始。这将是一个
/
,|
或\
原子,其中我们将调用根。(从左到右,按根顺序对链进行解析。) - 找到指向根的原子。
- 一个
|
原子向上和向下指向。甲-
原子点左右(但绝不指向根因为只有根可以是底行中)。甲/
原子点左向下和向上,右,和\
原子则正好相反。 - 总会有一个原子指向根原子。
- 一个
- 找到一个未使用的原子(一个不属于任何原子链的原子),该原子指向该原子并且也不低于该原子(头发不能向下生长,但可以侧向生长)。
- 如果为零,则说明已到达链的末端!
- 如果有一个,则这是链的下一个原子。对该原子重复步骤3。(由于它是链的一部分,因此在步骤3中,该原子现在被标记为“已使用”。)
- 头部的任何位置都不会有多个未使用的原子。
- 从链的底部开始。这将是一个
该输入格式为:
- 一头头发。可以按原样输入(带换行符的多行输入),也可以选择定界符代替换行符。请注意,头部将始终是矩形;也就是说,将根据需要添加尾随空格(右侧的怪异直线头发只是为了消除多余的尾随空格,以免造成混淆)。
- ≥1的数字指定要剪多少根头发。下一节将对此进行详细描述。
您可以接受功能的输入,使用STDIN / STDOUT等(任何合理的方法)。
输出量
您的输出将是应用了理发的头发的头部。要进行理发,只需从头发的端点向根部移动开始,将每根头发的长度减少指定的数量(始终为1或更大)即可。但是,请始终保留根!
这是一个简单的例子。说头的输入是
\
/
|
|
使用的第二个输入2
,您将从链中切下两个原子并得到
|
|
输入为42
,则输出为
|
请注意,头部前后的空白完全无关紧要;您可以修剪多余的换行符,也可以添加更多的填充。没关系,只要头部保持完整即可。(您也可以对尾随空白进行任何操作。)
测试用例
对于所有测试用例,将使用本文开头的示例。
理发长度= 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
长度3:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
长度7:
|- / |
| | / |
| \ /| // \ |
1337长度:
| \ /| // \ |
计分
这是代码高尔夫球,因此最短的代码(以字节为单位)将获胜!
最下面一行是否有原子“-”?第2点似乎说是,第1点似乎说不。
—
edc65
@ edc65不,没有。(编辑以澄清)
—
门把手
我认为测试用例有误。在从底部起的第四行中,
—
feersum
-
从左边的点在第三条|
中左起第四条
@feersum正确。路径是通过确定哪些点的
—
门把手
-
,不是它指向。例如,|
不会/
在第一行中指向,而是由指向/
。(是的,我知道这很令人困惑;我不得不重做GIF几次,因为我甚至自己也感到困惑!)一种更容易理解的方法可能只是看第二个子句的顶部。
我知道这是由指向较早版本的文章确定的。我的观点是,
—
feersum 2014年
-
应当将第四条链而不是第三条链连接在一起。