No cemitério do rei Silo das Astúrias, há uma inscrição que diz SILO PRINCEPS FECIT (o rei Silo fez isso ).
A primeira letra é encontrada bem no meio, e a partir daí se lê indo em qualquer direção não diagonal, irradiando para fora. A letra final é encontrada nos quatro cantos. Neste desafio, você generalizará o processo para fazê-los.
Entrada
Uma sequência ( ou equivalente ) e um número inteiro. Você pode fazer as seguintes suposições sobre a entrada:
- A cadeia terá um comprimento ímpar.
- O número inteiro será um número ímpar entre 1 e um menos que o dobro do comprimento da sequência.
Saída
Um inscriptio labyrinthica para a string, usando o número inteiro para a altura ou largura (consulte os modelos para obter exemplos de altura). A saída deve ser cada letra sem espaços, com quebra de linha como padrão no seu sistema / idioma.
Casos de teste
Observe que uma entrada de 1 ou (comprimento * 2 - 1) resultará em um palíndromo horizontal ou vertical.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
Pontuação
Este é o código-golfe, pelo que a resposta mais curta em bytes vence. Falhas padrão proibidas.
Respostas:
J , 27 bytes
Experimente online!
Um exemplo esclarecerá a abordagem de alto nível.
Considerar
'ABCDE' f 3
Percebemos que o que buscamos é simplesmente a tabela "adição cruzada" de
1 0 1
e3 2 1 0 1 2 3
, que se parece com isso:Em seguida, puxe esses índices da string original:
[{~
.Todo o resto do código é apenas aritmética chata e o uso de
i:
para construir os argumentos1 0 1
e3 2 1 0 1 2 3
.fonte
Gelatina , 12 bytes
Experimente online!
Um link diádico que toma a string como esquerda e a altura como argumento correto. Retorna uma string com quebras de linha. Se uma lista de strings for aceitável para saída, eu posso remover o final
Y
salvamento de um byte. Curiosamente, o original "SILO PRINCEPS FECIT" me parece a arte ASCII de um diamante 3D quando olho para ele no TIO.Explicação
fonte
R ,
939187 bytes-2 bytes graças a Giuseppe. -4 bytes inserindo a largura em vez da altura, conforme permitido pelo OP.
Experimente online!
Recebe entrada como um vetor de caracteres. A parte principal é
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(precisamos adicionar 1 porque R é indexado em 1). O 0 no centro é o local onde deve ir a primeira letra da entrada.
O resto está formatando.
fonte
Carvão ,
2519 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Desenhe um quarto da inscrição.
Reflita para completar a inscrição.
fonte
Japonês
-R
,1916 bytesTente
fonte
Wolfram Language (Mathematica) ,
5754 bytesExperimente online!
Toma a largura como entrada.
fonte
g
não é avaliado na primeira vez que a função é chamada. Experimente online!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, quando o tempog
é definido.Japonês
-R
, 10 bytesToma largura em vez de altura.
Tente
Pseudocódigo (U é sequência, V é inteiro):
fonte
Perl 6 ,
6867 bytesExperimente online!
fonte
Python 3, 104 bytes
Não jogo há tanto tempo ... Tenho certeza que isso pode ser mais curto.
Detalhes
Este código define uma função que recebe dois argumentos (a sequência e a altura) e fornece o resultado na saída padrão.
O índice da string é a distância de Manhattan do centro da grade. Para uma grade de largura
w
e alturah
, a distância da célula em(x, y)
éabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.A largura da grade deve ser tal que a distância dos cantos de Manhattan (digamos
(0, 0)
) seja uma menor que o comprimento da corda. Substituindo(0, 0)
o acima e simplificando, descobrimos que a largura é simples2 * len(s) - h
.Código
Experimente online!
fonte
05AB1E , 10 bytes
Experimente online!
fonte
Pitão , 19 bytes
Experimente online!
fonte
Python 2 , 95 bytes
Experimente online!
fonte
Stax ,
119 bytesExecute e depure
Leva a largura e a sequência original, nessa ordem.
fonte
C # (.NET Core) , 146 bytes
Experimente online!
Resposta mais longa por tanto tempo. :-) Utiliza a distância de Manhattan até o centro da praça. Deve haver uma maneira mais curta, no entanto.
fonte
Tcl ,
188170162 bytesExperimente online!
Parece haver um milhão de maneiras ruins de resolver esse problema no TCL. Este não é o pior deles.
Salva no mínimo 18 bytes convertendo para lambda (pode economizar até 13 a mais se o valor de retorno de uma lista de linhas for aceitável)
Economizou 8 adicionais, já que o iterador lmap serviu como uma constante extra
fonte
Tela , 18 bytes
Experimente aqui!
A tela não cria substrings, então eu preciso tratá-la como um objeto de arte e obter uma subseção dessa maneira. Eu sinto que isso me custa 2 bytes, mas ei, o que você pode fazer.Parece que isso realmente não funciona como eu pensava: as funções palindromize do Canvas espelham certos caracteres (por exemplo, o V espelhado verticalmente se torna ^), e eu não posso exatamente desabilitar isso ... bem, eu acho
fonte
Ruby , 65 bytes
Experimente online!
fonte