Garland Words
Uma palavra de guirlanda é uma palavra que pode ser amarrada como uma guirlanda, porque termina com as mesmas letras com que começa. Esses grupos de letras podem até se sobrepor!
Por exemplo, underground
é uma palavra de ordem da guirlanda 3
, porque começa e termina com os mesmos três caracteres und
,. Isso significa que pode ser amarrado juntos undergroundergrounderground...
.
alfalfa
também é uma palavra guirlanda! É da ordem 4. Começa e termina com alfa
. Ele pode ser amarrados juntos assim: alfalfalfalfa
.
Um processo que chamo de garlandificação é o local em que, depois de determinar a ordem n
de uma palavra da guirlanda, você pega a palavra original e adiciona o segmento necessário para que ela faça um loop como um período da guirlanda n
. Portanto, como onion
é uma 2
palavra de guirlanda de ordem , você deve onion
cortar, cortar as primeiras 2
letras para obter ion
e adicionar ao final dos 2
tempos onionionion
.
Objetivo
Faça um programa ou função que receba entrada da entrada padrão ou de um argumento de função e imprima ou retorne a palavra garlandified.
Todas as palavras serão minúsculas e a ordem mais alta possível para uma palavra é length(word) - 1
.
Exemplo de E / S
"onion" --> "onionionion"
"jackhammer" --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
"" --> ""
"zvioz" --> "zviozvioz"
"alfalfa" --> "alfalfalfalfalfalfa"
"aaaa" --> "aaaaaaa"
Isso é código-golfe , portanto, o menor número de bytes vence.
Respostas:
Pitão,
1918 bytesExperimente on-line: demonstração ou equipamento de teste
Explicações:
fonte
Python, 60 bytes
Estava esperando por melhor, mas tudo bem.
s.find
funciona ordenadamente aqui no lugar denot s.startswith
.fonte
Retina , 58 bytes
Cada linha deve ir para seu próprio arquivo, mas você pode executar o código como um arquivo com o
-s
sinalizador.Os quatro pares de substituição fazem o seguinte:
order
número de caracteres.order
tempos da peça .A cadeia afirma para o exemplo
onion
:fonte
Haskell, 64 bytes
Testes:
fonte
Java,
160157 bytesEntrada / Saída:
Espaçados e com guias para facilitar a leitura:
Sugestões são bem-vindas.
fonte
i=0;
?Sed:
8784 caracteres(Código de 83 caracteres + opção de linha de comando de 1 caractere.)
Exemplo de execução:
fonte
CJam,
2423 bytesSó para começar com algo ..
Experimente online aqui
fonte
Matlab:
978982 bytesFunção que usa uma expressão regular com lookbehind e um grupo de captura:
Isso
sum
é necessário para manipular a entrada de sequência vazia (converter[]
em0
).Exemplos:
fonte
REGXY,
5349 bytesUsa REGXY , um idioma baseado em substituição de regex
Visão geral: são aplicadas várias expressões regulares. Um exemplo de execução seria semelhante a:
Explicação detalhada A seguir, é apresentada uma divisão por linha dos regexes:
Esta é uma substituição de regex que corresponde à primeira string vazia (ou seja, o início da string) e a substitui por tudo à direita da match (
$'
) seguida por um hash. Por exemplo, ele se transformaráonion
emonion#onion
.Essa linha localiza a seção que se sobrepõe, procurando por um grupo de caracteres imediatamente anteriores ao # (
(.+)
), que são iguais no outro lado do # (\1
). O \ K significa apenas 'esqueça que correspondi a qualquer coisa', o que significa que na verdade não será substituído na substituição. Isso efetivamente significa que basta adicionar um # à posição após a sobreposição ter sido encontrada, transformandoonion#onion
- se emonion#on#ion
.O inicial 'a' é apenas um rótulo para a regex. Depois disso, encontramos o primeiro # seguido de um único caractere (
.
) e capturamos tudo depois disso até o próximo # (.*#
). Substituímos isso por tudo à direita da partida, ou seja, o último token ($ '), seguido de um # ($1
), seguido pelo segundo token menos um caractere (tratamos isso como um contador, diminuindo a cada iteração). No caso de cebola em # # iónica, as duas fichas que backreference são apresentadas entre parêntesis, e a secção de todo o partidas regex é entre os tubos:onion|(#)o(n#)|ion
. Em seguida, substituímos os bits com os quais correspondemos (entre os tubos) por$'
(tudo à direita da correspondência, ou seja, 'ion'), depois $ 1 (o #), depois $ 2 (n #), o que significa que terminamos comonion|(ion)(#)(n#)|ion
(colchetes mostrados os três tokens na cadeia de substituição).Se a regex falhar na correspondência na primeira alternância (tudo antes do canal), devemos ter diminuído nosso contador para zero, significando que não há caracteres dentro do segundo token. Em vez disso, olhamos para a segunda parte do padrão
#.*
,. Isso simplesmente substitui tudo após o primeiro # por$'$1$2
. Como não há referências anteriores criadas por essa alternância e não há nada à direita da partida (.*
correspondências até o final da sequência), encerramos a correspondência e retornamos o resultado.Isso é apenas um ponteiro para a linha anterior, garantindo que continuemos executando a substituição de regex até que ela não corresponda mais.
fonte
jq 1.5: 91 caracteres
(Código de 87 caracteres + opção de linha de comando de 4 caracteres.)
Exemplo de execução:
fonte
rs ,
5148 bytesTOMAR ISSO, RETINA E SED !!!!! ;)
Corte 3 bytes graças a @randomra.
Demonstração ao vivo e casos de teste.
Observe que o
jackhammer
caso de teste não está lá. Há um erro na manipulação de espaços na interface da web que faz com que ela imprima uma saída incorreta. A versão offline dors
lida com isso corretamente.Versão de 51 bytes:
Demonstração ao vivo e casos de teste para o original.
fonte
JavaScript (ES6), 95 bytes
Demo
Firefox apenas por enquanto:
fonte
JavaScript (ES6), 82 bytes
[Excluí minha resposta original, porque agora aprendi o ES6 e estava interessado em encontrar uma solução recursiva para esse desafio]
Exemplo
fonte
CoffeeScript + ES6, 77 bytes
A mesma abordagem da minha resposta JavaScript.
fonte
C
Golfe: 195 bytes - GCC
fonte
int
implícito nas (versões suficientemente antigas do) C?Groovy
755755 bytesIncrível como voltar a algo no dia seguinte pode ajudar
Ungolfed:
fonte
Caso alguém precise do código em JS para testá-lo. Nota: Passei a corda do final para aumentar a eficiência:
fonte