Sandbox postar aqui .
Crie uma função ou programa que "Springifica" uma seqüência de caracteres.
- A entrada será uma String em Stdin, ou a alternativa mais próxima
- A entrada conterá apenas ASCII e / ou espaços imprimíveis
- A saída será para Stdout, ou a alternativa mais próxima
- Novas linhas e espaços à direita são aceitáveis
Como springify uma String
- Formate o String em quantas bobinas de mola ASCII forem necessárias
- Preencher as bobinas com espaços, até a bobina mais próxima
- Leia os caracteres, seguindo a mola ao redor das bobinas
Esta é uma bobina de mola ASCII:
#
# ####
# #
# ####
#
Onde #
s são os caracteres da String
Aqui está um exemplo:
abcdefghijklmnopqrstuvwxyz
torna-se
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Onde eles .
substituem espaços para visibilidade.
Em seguida, a string é lida novamente, seguindo a mola ASCII para baixo, ao redor dos loops, pressionando a tecla g
e u
duas vezes:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
... dando:
abgjklmhfedcginopuxyz vtsrquw
(com um espaço à direita)
Casos de teste
(cotações adicionadas para destacar espaços à direita - ignore em termos de IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Observe que o comprimento de saída é sempre um múltiplo de 15, o comprimento de uma bobina de mola
Isso é código-golfe , então a resposta mais curta em bytes vence.
Respostas:
Geléia , 26 bytes
TryItOnline!
Quão?
fonte
Python 2,
10410298 bytesObrigado pelo comentário ajuda!
https://tio.run/#2VDVy
Original:
fonte
input()
e receber entradas no formato"<stuff>"
.lambda
para fornecer uma função anônima em vez de um programa - isso geralmente é mais curto .+13
para+14
e o+1
para+(len(t)%14>0)
fazer isso, mas deve haver uma maneira mais curta.JavaScript (ES6), 79 bytes
Sequência hexadecimal roubada descaradamente de @ETHproductions.
fonte
Retina , 71 bytes
Experimente online!
Permutar strings não é exatamente conciso na Retina ...
fonte
JavaScript (ES7),
144143141114 114104103 bytesGraças a ETHProductions por uma economia de 10B!
Exemplo
Resultado
fonte
+('0x'+whatever)
para convertê-la em um número:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
para economizar um par de parênteses :-)Perl 6 , 61 bytes
Como funciona
A estrutura básica é esta:
A expressão usada para indexar em cada segmento de 14 caracteres é
"abgjklmhfedcgin".ords X- 97
, que funciona da seguinte maneira:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 bytes
Experimente online!
Como funciona
A estrutura básica é esta:
Mesmos índices que acima, mas uma vez que estamos chamando
.flat
de qualquer maneira, podemos usar uma expressão aninhada (mas 1 byte mais curto) para eles:0,1,6,9..12,7,5...2,6,8,13
.(Parece trivial, mas na verdade se baseia em uma peculiaridade de análise do Rakudo Perl 6 que provavelmente é um bug . Para escrevê-lo sem explorar esse bug, seria necessário adicionar parênteses ao redor do
5...2
.)fonte
Befunge-93, 97 bytes
Experimente online!
Este é um detalhamento do código-fonte com as várias partes do componente destacadas.
O loop principal inicia a execução da direita para a esquerda, envolvendo o lado direito do campo de jogo. É aqui que lemos o primeiro caractere de stdin e terminamos se for um EOF.
A próxima seção garante que quaisquer caracteres EOF sejam convertidos em espaços usando a fórmula
c = c + 31*!(c+1)
. Embora isso não se aplique na primeira iteração, pode ocorrer nas passagens subsequentes.Uma cópia do caractere é salva na memória temporária e, em seguida, é executada uma pesquisa no índice atual na tabela da linha quatro ( ) para determinar se o caractere deve ser produzido ou não.
Se o caractere precisar ser produzido, pegamos o ramo esquerdo. Uma troca é realizada aqui para cancelar a troca que ocorrerá a seguir e, em seguida, um zero é pressionado para forçar a ramificação da direita.
Se o caractere não foi emitido, nós o trocamos pela pilha abaixo do contador do índice (este é o swap que é cancelado no ramo esquerdo). Nos dois casos, salvamos o caractere na memória no deslocamento atual do índice, incrementamos o índice e verificamos se ele é maior que 13.
Caso contrário, lemos o próximo caractere do stdin e repetimos o loop interno.
Se for, teremos terminado um conjunto de 14 caracteres, 7 sendo produzidos (
abgjklm
) e 7 restantes na pilha (cdefhin
). Nós deixamos cair os dois últimos, de saída os restantes 5 (hfedc
), e depois recuperar e saída casos especiaisg
,i
en
da memória.E isso nos leva de volta ao início do loop principal, onde repetimos o processo novamente para os próximos 14 caracteres.
fonte
Mathematica,
7772 bytesObrigado a JungHwan Min por salvar 5 bytes!
Função sem nome, recebendo uma lista de caracteres como entrada e retornando uma lista de caracteres.
Partition[#,14,14,{1,1}," "]
divide a entrada em sublistas de comprimento 14, preenchendo espaços se necessário.LetterNumber@"abgjklmhfedcgin"
é avaliado como{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, o que indica a ordem em que cada sub-lista de tamanho 14 está em (repetindo o sétimo elemento adequadamente). Em seguida,[[;;,...]]
pega os elementos de todo o comprimento 14 sublista nessa ordem eJoin@@
junta as respostas.Submissão anterior:
fonte
LetterNumber@"abgjklmhfedcgin"
é uma maneira mais curta de compactar a lista. Além disso, em;;
vez deAll
salva um byte.Python 3 , 86 bytes
Experimente online!
Como bônus, a sequência
Tq>]zQ|1/X;:L$o
é um programa CJam válido que imprime os caracteres exclusivos na entrada padrão, classificados. Experimente online! (+ explicação)fonte
PHP, 94 bytes
divide o argumento da linha de comandos em pedaços de 14 bytes e percorre a cadeia de conversão como índice da sub-cadeia. Corra com
php -nr '<code>' <string>
.Fiquei feliz em descobrir que
??
também aceita a string vazia (para um índice "inválido") como nula.fonte
Ruby, 83 bytes
A primeira idéia foi usar números hexadecimais, mas o ord-48 salva outro byte (roubado da resposta da throx).
fonte