Introdução
Alice é uma linguagem 2D de Martin Ender que possui dois modos de execução diferentes, cardinal e ordinal . Quando o ponteiro de instrução passa através de um espelho (um /
ou \
), ele alterna de um modo para o outro.
Neste desafio, focaremos no modo ordinal , onde os comandos operam nas seqüências de caracteres e o ponteiro da instrução se move na diagonal, batendo nas bordas do código.
Programas simples que operam apenas no modo ordinal podem ser escritos em um estilo bastante compacto, como no exemplo a seguir:
/fbd/
@aec\
Aqui, o IP é iniciado no modo cardinal da primeira célula indo para o leste, passa pelo primeiro espelho e começa a se mover na diagonal e saltar, executar comandos a
, b
e c
. Em seguida, ele encontra o espelho Nordeste que torna vá para o sul em direção ao outro espelho e, em seguida, começar a saltar de volta para o oeste, encontrando comandos d
, e
, f
, e, finalmente @
, que termina o programa.
Esse tipo de estrutura é bastante compacto, mas não é fácil escrever e manter (adicionar um único comando pode nos forçar a reordenar a maior parte do código!), Portanto, gostaria que você me ajudasse na formatação.
A tarefa
Dada uma sequência de comandos, em que cada comando é um único caractere ASCII imprimível, reordene-os em duas linhas para que a primeira metade da sequência possa ser lida iniciando no primeiro caractere da segunda linha e depois movendo-se sempre na diagonal para a direita, enquanto a segunda metade pode ser lida, levando os caracteres restantes da direita para a esquerda. Não se preocupe com espelhos e o símbolo de terminação, eu mesmo os adicionarei.
Então, por exemplo, dada a entrada que abcdef
você deve gerar
fbd
aec
Caso a entrada seja de tamanho ímpar, você deve adicionar um único espaço (que é um noop em Alice) em qualquer lugar, desde que a sequência de comandos encontrados permaneça a mesma. Você também pode optar por imprimir duas linhas com comprimento diferente por um caractere; nesse caso, a menor é considerada como tendo um único espaço no final.
Regras
Isso é código-golfe , a resposta mais curta, em bytes, vence!
- Você pode entrada / saída através de qualquer um dos métodos de entrada / saída padrão
- A entrada consiste em uma única linha de caracteres ASCII imprimíveis
- Uma única nova linha à direita é permitida na saída
- Algumas saídas do seu programa podem não ter um comportamento completamente correto quando executadas como programas da Alice (por exemplo, se o espaço de preenchimento for inserido dentro de uma string literal). Você não precisa se preocupar com essas situações
- As brechas padrão são proibidas
Casos de teste
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Geléia ,
2322 bytes-1 byte graças a Leo (canto inferior esquerdo pode ser o preenchimento)
Um programa completo imprimindo o resultado (o link monádico retorna uma lista de listas de caracteres).
Experimente online!ou veja uma suíte de testes .
Como?
fonte
JavaScript (ES6), 104 bytes
Funciona emulando o caminho de execução e preenchendo os comandos conforme ele é executado.
fonte
1&~i
atinge o zig-zag vertical, enquanto oi+i>l?l-i:i
atinge o espelho intermediário. Uma vez que todos os comandos foram inseridos nas posições de execução desejadas, a matriz é então coletada para produzir o resultado desejado.