Desafio
Escreva um programa ou função que utilize uma string s
e um número inteiro n
como parâmetros. Seu programa deve imprimir (ou retornar) a string quando transformada da seguinte maneira:
Começando no canto superior esquerdo e movendo-se para baixo e para a direita, escreva s
como uma onda de altura n
. Em seguida, de cima para baixo, combine cada linha como uma sequência (sem espaços).
Exemplo
Dada a sequência "WATERMELON" e uma altura de 3:
A onda deve ficar assim:
W R O
A E M L N
T E
Em seguida, combine as linhas de cima para baixo:
WRO
AEMLN
TE
Portanto, seu programa deve retornar a string "WROAEMLNTE"
Da mesma forma, "WATERMELON" com altura 4 deve produzir a seguinte onda:
W E
A M L
T R O
E N
Seu programa deve retornar a string "WEAMLTROEN"
Regras
Entrada
A entrada pode ser obtida em qualquer formato razoável. A string pode estar em qualquer caso que você preferir. Você pode assumir que0 < n <= s.length
Saída
A saída deve consistir apenas na sequência transformada (retornada ou impressa em STDOUT), além de quaisquer novas linhas finais.
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence! As brechas padrão não são permitidas.
Casos de teste
Input Output
programmingpuzzles, 5 -> piermnlsomgzgapzru
codegolf, 3 -> cgoeofdl
elephant, 4 -> enlatehp
1234567, 3 -> 1524637
qwertyuiop, 1 -> qwertyuiop
n
> 1? Por favor, esclareça e, se não adicionar, um caso de testen > 0
, masn=1
é um caso válido. Vou atualizar a pergunta agora.Respostas:
Casca , 6 bytes
Experimente online!
Funciona para
n = 1
também.Explicação
A função de ordem superior funciona
δ
assim sob o capô. Suponha que você tenha uma função de ordem superior que utilize uma função unária e uma lista e retorne uma nova lista. Por exemplo,Ö
pega uma função e classifica uma lista usando-a como chave. Em seguida,δÖ
pega uma função binária e duas listas, fecha as listas juntas, aplicaÖ
- se à classificação dos pares usando a função binária como chave e, finalmente, projeta os pares na segunda coordenada. UsamosK
como função-chave, que simplesmente retorna seu primeiro argumento e ignora o segundo.fonte
MATL , 16 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere entradas
5
,'programmingpuzzles'
.fonte
Haskell , 64 bytes
Experimente online!
fonte
J ,
54, 29, 2726 bytes-1 byte graças a hoosierEE
Experimente online!
fonte
n=1
desde o início #|@i:
em vez de[:|i:
salva um byteR , 68 bytes
Experimente online!
n=1
caso corrigidos graças a @ J.Doefonte
Python 2 ,
11910898929197939190 bytesExperimente online!
-1 byte, graças a Jonathan Frech
fonte
05AB1E (herdado) ,
118 bytesInspirado por @LuisMendo resposta MATL 's .
-3 bytes graças a @Adnan porque sou um idiota ..>.>
Experimente online .
Explicação:
NOTA:
counter_variable
É usado, porque na versão Legacy do Python do 05AB1E,Σ
ele não possuía um índice internoN
- que ele possui na nova versão de reescrita do Elixir do 05AB1E. Então, por que ainda uso a versão herdada? Como na reescrita do Elixir, ele transforma implicitamente a string em uma lista de caracteres, exigindo um adicional}J
para transformá-lo novamente em uma string para a saída (e também contém um bug no momento, ondeè
não funciona de todo para indexar na lista alongada) ..: S)fonte
¹g∍
peça, pois 05AB1E usa a indexação cíclica paraè
.Japonês , 16 bytes
Teste online!
Explicação
fonte
ü
método é novo?-P
bandeira para salvar outro 2.Gelatina , 8 bytes
6 byter falha na altura 1; dois bytes usados para endereçá-lo ... talvez um 7 possa ser encontrado?
Um link diádico que aceita um número inteiro positivo e uma lista de caracteres que produz uma lista de caracteres.
Experimente online!
Quão?
fonte
JavaScript (ES6), 75 bytes
Fórmula mais curta sugerida por @MattH (-3 bytes)
Toma entrada como
(string)(n)
.Experimente online!
JavaScript (ES7), 78 bytes
Guardado 4 bytes graças a @ETHproductions
Toma entrada como
(string)(n)
.Experimente online!
fonte
o
com emx/n&1?n-x%n:x%n
vez den*n-(x%(n*2)-n)**2
.K ( Kona ), 23 bytes
Uma tradução da resposta J de Galen
fonte
MBASIC ,
146159155 bytesAtualizado para lidar com n = 1
Saída:
fonte
Perl 6 , 49 bytes
Experimente online!
Recebe a entrada como uma função ao curry.
Explicação:
A sequência pela qual é classificada é assim (para
n=5
):fonte
J , 24 bytes
Experimente online!
Verbo diádico explícito. Execute como
'codegolf' f 3
.Como funciona
Normalmente, a função explícita assume 5 bytes adicionais na forma de
n :'...'
. Mas se a manipulação de erros for adicionada, a diferença será reduzida para 2 bytes devido à parênteses e espaço(tacit)<space>::
.fonte
sort up
?! Seu verbo explícito ainda é 3 bytes mais curto. Boa decisão!APL (Dyalog Classic) , 23 bytes
Experimente online!
fonte
Powershell,
9995 bytesScript de teste:
Saída:
Explicação
O script:
A expressão
((1..$n+$n..1)*$s.Length|gu
gera uma sequência como1,2,3,3,2,1,1,2,3,3,2,1...
e remove duplicatas adjacentes.gu
é o alias para Get-Unique .$n=3
a sequência deduplicada é:1,2,3,2,1,2,3,2,1...
$n=1
a sequência deduplicada é:1
A expressão
$i++*($n-gt1)
retorna um índice na sequência deduplicada.=$i++
se$n>1
não=0
fonte
Ruby ,
7565 bytesExperimente online!
Recebe entrada como uma matriz de caracteres, retorna string
Como funciona:
h
stringsh
e desce até0
e assim por diante)fonte
C,
142134 bytes8 bytes economizados graças a Jonathan Frech
Código:
Explicação:
Experimente online!
fonte
Carvão , 21 bytes
Experimente online! Link é a versão detalhada do código. Funciona observando que os índicesm dos caracteres online Eu satisfazer a relação m ± i = 0( mod2 n - 2 ) . Explicação:
fonte
SNOBOL4 (CSNOBOL4) , 191 bytes
Experimente online!
Leva
S
entãoN
em linhas separadas.Explicação:
fonte
Limpo ,
10584 bytesExperimente online!
fonte
JavaScript (Node.js) , 83 bytes
Experimente online!
fonte
Pitão ,
2221 bytesRecebe as entradas,
n
seguidas pors
linhas separadas. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .Editar: salvou um byte movendo a verificação vazia para o final do processamento. Versão anterior:
seMhD,V*lz|+PUQP_UQ]0z
fonte
Vermelho , 153 bytes
Experimente online!
Explicação:
fonte
Eu tenho duas soluções para o problema. A primeira solução que eu fiz primeiro, então pensei em outra maneira de fazê-lo, que eu pensaria em salvar bytes, mas não o fez, então eu o incluí de qualquer maneira.
Solução 1
PHP ,
152144116 bytesExperimente online!
Solução 2
PHP , 162 bytes
Experimente online!
fonte
$f
e$n-1-$i
pode ser$n-~$i
. 144 bytesn=1
. Este funciona para a mesma contagem de bytes.echo
a salvar mais 5 bytesRuby , 84 bytes
Experimente online!
fonte