(Significado: converter inglês para Bleet)
Louvamos as cabras como deus há anos.
Mas se não podemos traduzir o inglês para 'Bleet', a língua de Deus dos bodes, não podemos nos comunicar com eles.
Portanto, para nos comunicarmos com eles, pesquisamos as atividades das cabras e recuperamos esse padrão, que é o cerne da linguagem.
Diga 'Bleet' pelo comprimento de cada palavra. Isso significa que a quantidade de 'e's deve ser (comprimento-3) para palavras com mais de 3 letras. Por exemplo, 'be' se torna 'bl', mas 'cat' e 'boat' se tornam 'blt' e 'blet'.
Como parece, eles não alteram caracteres não alfabéticos para 'Bleet'. Nossa pesquisa mostrou que 'Olá, mundo!' para Bleet é 'Bleet, Bleet!' não 'Bleeet Bleeet'. Além disso, as cabras não são tão inteligentes (sem ofensas), por isso não parecem entender caracteres não-ascii ou diacríticos.
Agora, é hora de fazer um tradutor para se comunicar com os deuses das cabras.
Bleeeeet (Significado: Exemplos)
Hello, World! => Bleet, Bleet!
lorem ipsum dolor sit amet. => Bleet Bleet Bleet Blt Blet.
We praise the Goat God! => Bl Bleeet Blt Blet Blt!
I have a pen => B Blet B Blt
0123456789_ => 0123456789_
0te_st1 => 0Bl_Bl1
it's
tornaráBlt
ouBl't
ouBl'B
?Jimmy's
:Bleee't
), tratá-los como separações de palavra (Jimmy's
:Bleet'B
), ou tratá-los como parte de palavras (Jimmy's
:Bleeeet
). Se eu tivesse que escolher um, eu usaria a opção separador de palavras, pois é o que as 6 respostas fazem.Respostas:
Retina , 31 bytes
Experimente online!
Explicação
Transforme todas as letras em
e
s.Transforme a primeira
e
em cada corridaB
.Transformar
Be
emBl
.Transforme o último
e
em cada corridat
.fonte
T1L
aT
fase "envolve" os pares de tradução de modo que você pode transformar todas as letras assim parae
l
, não uma1
, mas não sei o que você quer dizer com "quebra". A transliteração simplesmente repete o último caractere no padrão de destino; portanto, se fosseT`lL`ef
, você mapeiaa
parae
e todas as outras letras paraf
, não alternadamente parae
ef
.JavaScript (ES6),
797774 bytesAbordagem alternativa, atualmente
8378 bytes:O melhor que pude fazer recursivamente foi 88 bytes:
fonte
'Blet'[i>1?2+!x[i+1]:i]
mas infelizmente é do mesmo tamanho.PHP,
11588867775 bytespreg_replace
com matrizes (requer PHP 5.4 ou posterior)Execute
echo '<string>' | php -nR '<code>'
ou teste on-line .demolir
Revisão 5: salvou 9 bytes com a cadeia regex de Martin Ender .
(Isso também corrigia casos com caracteres de palavra não alfabéticos = dígitos / sublinhados.)
fonte
Haskell ,
135128 bytesExperimente online! Uso
(""!) $ "some string"
. Sem regexes, isso acabou sendo bastante longo, talvez alguma outra abordagem seja mais curta. Editar: salvou 7 bytes graças a @nimi!fonte
b
paraa
que você pode aplicá-la imediatamente ao construir a string resultante e omitir a final=<<
:b!(l:t)|...|1<3=a b++l:""!t;b!_=a b;(""!)
.Perl 5 , 47 bytes
Economizou 15 bytes usando a mesma técnica da resposta Retina de Martin Ender . (Esta resposta é basicamente uma porta de sua resposta agora)
46 bytes de código +
-p
sinalizador.Experimente online!
Versões anteriores: 62 bytes:
E 68 bytes:
fonte
PHP, 84 bytes
PHP, 117 bytes
fonte
-1+$l=...
\bl
falhar por caracteres de palavras não-alfabéticos:_we_
. Você precisa de uma afirmação explícita:(?<!l)l
. O mesmo parae\b
->e(?!e)
(+7 bytes)C,
1201511401111081051049290 BytesTrabalhando para "É o teste de Jimmy" -> Bl'B Bleet'B Blet
A saída agora é um efeito colateral, destruindo a string original.
Eu acho que está correto pelo menos agora
fonte
Python 2.7,
129118114109959188 bytesApenas uma
re.sub
correntePasso a passo
Exemplo de entrada: " Louvamos ao Deus dos bodes! "
Alias sub para que possamos salvar bytes em chamadas repetidas
Substitua todos os caracteres de palavra por "e"
s("\w","e",i)
Resultado:
ee eeeeee eee eeee eee!
Substitua todos os "e" s precedidos por um limite de palavras (início da palavra) por "B"
s(r"\be","B",s("\w","e",i))
Resultado:
Be Beeeee Bee Beee Bee!
Substitua todos os "Be" por "Bl"
s("Be","Bl",s(r"\be","B",s("\w","e",i)))
Resultado:
Bl Bleeee Ble Blee Ble!
Substitua todos os "e" s que são seguidos por um limite de palavra por "t"
s(r"e\b","t",s("Be","Bl",s(r"\be","B",s("\w","e",i))))
Resultado:
Bl Bleeet Blt Blet Blt!
fonte
return
porprint
deve salvar um byte.r
de cordas matérias se eles não têm folgas neles salvar mais 3 bytesr
) e o reduzi a 95 bytes. Obrigado pela sugestão!Pip , 28 bytes
Recebe entrada como um argumento de linha de comando. Experimente online!
Explicação
Foi divertido - usei modificadores de regex e interpolação de strings.
fonte
Python 3, 271 bytes
Estou ciente de que isso é bastante longo e aceito sugestões de como reduzir o comprimento.
fonte
x.append(y)
ou em seu caso,a(x,y)
você pode fazerx+=y,
(vírgula necessário)empilhados , 57 bytes
Experimente online! Recebe entrada do topo da pilha.
Seja a ( n ) = A136412 ( n - 2) = (5 × 4 n - 2 + 1) ÷ 3. A conversão de a ( n ) na base 4 produz:
Mapeando índices 0..3 para a string
Blet
, obtemos:Agora, o prefixo
B
fornece a string desejada, considerando o comprimento. Na maioria das vezes. Basta lidar com os casos especiais para n ≤ 2. No meu caso, isso é resolvido subtraindo ( n - 2 <1) como um booleano numérico (1 para "true" e 0 para "false").Quanto aos detalhes da resposta:
fonte
Python 2 ,
137114 bytesExperimente online!
fonte
Java 7, 201 bytes
Não é realmente feliz com isso, e certamente pode ser jogado um pouco mais ..
Explicação:
Código do teste:
Experimente aqui.
Resultado:
fonte
s.split("")
em vez des.toCharArray()
poupa algum eu acreditox=c&~32
não funcionará em uma String ex>64&x<91
ambas não funcionarão mais). Se você pode torná-lo mais curto com a divisão, me avise.05AB1E , 36 bytes
Experimente online! ou como um conjunto de testes
Explicação
Prepare a entrada:
Isso cria uma lista como
['hello', ', ', 'world', '!']
para a entradaHello, World!
Repita a lista:
fonte