引言
2×n布尔矩阵可以表示为四个字符的字符串. ':
。该字符串有一个“上排”和一个“下排”,点代表1,空白代表0。例如2×6矩阵
1 0 1 0 0 1
0 0 0 1 0 1
可以表示为' '. :
。您的任务是采用这种“压缩形式”的矩阵,并像传送带一样将其入口顺时针旋转一步。
输入项
您的输入是字符上的单个字符串. ':
。它的长度保证至少为2。
输出量
您的输出应为输入字符串,但每个点均沿顺时针方向旋转一步。更明确地说,除了最右边的行向下移动之外,最上面一行的点向右多一个位置。除最左端的点向上移动外,下一行的点向左移动一级。特别是,输出字符串必须与原始字符串具有相同的长度,并且空格很重要。
例
考虑输入字符串:..:'.
,它对应于2×6矩阵
1 0 0 1 1 0
1 1 1 1 0 1
该矩阵的旋转版本为
1 1 0 0 1 1
1 1 1 0 1 0
对应于字符串::. :'
。
规则和计分
您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。您可以确定输入和输出是否用引号引起来,并且两个尾随的换行符也是可接受的。
测试用例
这些测试用例用双引号引起来。
" " -> " "
" ." -> ". "
". " -> "' "
"' " -> " '"
" '" -> " ."
": " -> "''"
"''" -> " :"
":." -> ":'"
":.'" -> ":'."
"..." -> ":. "
": :" -> "':."
"':." -> ".:'"
".:'" -> ": :"
" " -> " "
"::::" -> "::::"
":..:'." -> "::. :'"
" : .:'" -> ". '.. :"
": ''. :" -> "'' :'.."
"........" -> ":...... "
":::: " -> ":::'' "
" ::::" -> " ..:::"
" : : : : " -> ". : : : '"
".'.'.'.'.'" -> "'.'.'.'.'."
".. :: '.' :." -> ": ..'' .' :.'"
".' '.:: :.'. . ::.' '. . .::' :.'." -> "' ' .:.''..'.'. ..:' ' .'. ...'''..'.'"
s=>s.replace(/./g,(c,i)=>" '.:"[(i?q>' '&q!=".":c>"'")+(q=c,s[++i]?s[i]>"'":c>' '&c!=".")*2])
翻转2个部分,这样我就可以增加i,减少正则表达式,并简化测试,将prev c保存在q中)