Introduções
Uma matriz booleana 2 × n pode ser representada como uma sequência de quatro caracteres . ':
. A cadeia possui uma "linha superior" e uma "linha inferior", com pontos representando 1s e espaços vazios representando 0s. Por exemplo, a matriz 2 × 6
1 0 1 0 0 1
0 0 0 1 0 1
pode ser representado como ' '. :
. Sua tarefa é pegar uma matriz nessa "forma compactada" e girar suas entradas um passo no sentido horário, como uma correia transportadora.
Entrada
Sua entrada é uma única sequência sobre os caracteres . ':
. É garantido que seu comprimento seja pelo menos 2.
Resultado
Sua saída deve ser a sequência de entrada, mas com cada ponto girado um passo no sentido horário. Mais explicitamente, os pontos na linha superior mais um lugar à direita, exceto o mais à direita, que se move para baixo. Os pontos na linha inferior movem um passo para a esquerda, exceto o mais à esquerda, que se move para cima. Em particular, a cadeia de saída deve ter o mesmo comprimento que o original e o espaço em branco é significativo.
Exemplo
Considere a sequência de entrada :..:'.
, que corresponde à matriz 2 × 6
1 0 0 1 1 0
1 1 1 1 0 1
A versão rotacionada dessa matriz é
1 1 0 0 1 1
1 1 1 0 1 0
que corresponde à string ::. :'
.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas. Você pode decidir se a entrada e a saída estão entre aspas, e uma nova linha à direita também é aceitável em ambas.
Casos de teste
Esses casos de teste estão entre aspas duplas.
" " -> " "
" ." -> ". "
". " -> "' "
"' " -> " '"
" '" -> " ."
": " -> "''"
"''" -> " :"
":." -> ":'"
":.'" -> ":'."
"..." -> ":. "
": :" -> "':."
"':." -> ".:'"
".:'" -> ": :"
" " -> " "
"::::" -> "::::"
":..:'." -> "::. :'"
" : .:'" -> ". '.. :"
": ''. :" -> "'' :'.."
"........" -> ":...... "
":::: " -> ":::'' "
" ::::" -> " ..:::"
" : : : : " -> ". : : : '"
".'.'.'.'.'" -> "'.'.'.'.'."
".. :: '.' :." -> ": ..'' .' :.'"
".' '.:: :.'. . ::.' '. . .::' :.'." -> "' ' .:.''..'.'. ..:' ' .'. ...'''..'.'"
s=>s.replace(/./g,(c,i)=>" '.:"[(i?q>' '&q!=".":c>"'")+(q=c,s[++i]?s[i]>"'":c>' '&c!=".")*2])
(Flip 2 partes para que eu possa aumentar i, menos regexp e teste mais simples, save prev c em q)