O idioma geobitsiano é uma nova perversão do inglês, onde uma palavra é dividida em segmentos que devem começar com uma letra diferente. Toda vez que uma dessas letras iniciais aparece em outra sequência, ela é substituída por todo o segmento correspondente, mantendo a capitalização.
Esse processo é chamado de geobitsizing .
Por exemplo, a palavra " Geobits " poderia ser quebrada geo bits
e o poema sem sentido
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
seria Geobitsized com ele como
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
porque todo g
se torna geo
, todo G
(embora não exista) se torna Geo
, todo b
se torna bits
e todo B
se torna Bits
.
Observe que cada substituição é executada em relação à sequência original, não a nenhuma etapa intermediária. por exemplo, se geo
tivesse sido gbo
, os b
criados não seriam substituídos por bits
.
Desafio
Escreva um programa ou função que possa gerar linguagem Geobitsian.
Pegue uma cadeia de linha única composta por letras minúsculas (az) e espaços. Essa será a palavra usada como argumento de Geobitsizing, com os espaços separando os segmentos. Você pode assumir:
- Os segmentos não estarão vazios. Portanto, os espaços não serão vizinhos nem estarão no início ou no final da string.
- Cada segmento começa com uma letra diferente. Portanto, não pode haver mais de 26.
Por exemplo, algumas cordas segmentados válidos você deve apoiar são geo bits
, butt ner
, alex
, e do o r k nob
(segmentos de uma única letra não têm efeito, mas são válidos). Mas geo
, butt ner
, Alex
, e do o r k n ob
são inválidos.
Seu programa ou função também precisa incluir outra sequência arbitrária para aplicar o Geobitsizing e imprimir ou retornar o idioma geobitsiano resultante.
Você pode assumir que essa sequência contém apenas novas linhas e ASCII imprimível.
Lembre-se de que as maiúsculas e minúsculas devem ser preservadas da entrada para a saída.
Aqui estão mais alguns exemplos usando no pro gr am m ing
como argumento Geobitsizing:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(sem alteração)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Observe que os resultados devem ser idênticos, independentemente da organização do argumento, por exemplo, ing pro m no am gr
devem produzir os mesmos resultados acima.
O código mais curto em bytes vence.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
embora isso lhe custe 5 bytes.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
que deve abranger todos os casos de ponta, e há um monte deles, se alguém tentar usar expressões regulares ...Respostas:
Gelatina , 18 bytes
Experimente online!
Versão alternativa, 15 bytes (não concorrente)
A função maiúscula de Jelly teve um bug; não capitalizou a primeira palavra. Isso foi corrigido, então o seguinte funciona agora.
Esse código faz o mesmo que na versão concorrente, exceto que
Œt
(maiúscula) substitui a maiúscula condicional obtida porŒu1¦€
.Como funciona
fonte
Python 3, 71 bytes
Teste em Ideone .
Como funciona
No Python 3 , o interno
str.translate
pega uma string e um dicionário e substitui cada caractere na string cujo ponto de código é uma chave desse dicionário pelo valor correspondente, que pode ser uma string, um número inteiro ou None (equivalente ao string vazia).Converter a sequência de palavras w em maiúsculas (ou seja, colocar em maiúscula a primeira letra de cada palavra) e anexá-la ao resultado
w+' '
cria uma sequência de palavras separadas por espaço com a versão em maiúsculas e minúsculas (primeira letra). Sem um segundo argumento,str.split
divide-se em espaço em branco e(w+' '+w.title()).split()
cria a lista de todas as palavras.Finalmente, a compreensão do dicionário
{ord(t[0]):t for t in...}
transforma cada palavra t em uma entrada de dicionário com a chaveord(t[0])
(ponto de código da primeira letra) e o valor t , de modostr.translate
que as substituições pretendidas serão executadas.fonte
Python,
126999581 bytesMuito obrigado a Dennis:
Edit1: não precisa anexar a um arquivo temporário
Edit2:
S
pode conter letras maiúsculas ...Edit3: não duplique G
Edit4: compactou um pouco mais e empurrou-o em uma linha
Edit5: usando lambda sem nome e
j=join' '
fonte
Pitão, 19 bytes
Experimente online!
fonte
Vim, 46 pressionamentos de teclas
Feio e Hacky.
fonte
Retina , 36 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
fonte
Pyth,
1816Experimente aqui
Define uma função
g
que executa o geobitsising. Como programa, isso seria um pouco mais curto se a segunda string fosse de linha única, mas a entrada de múltiplas linhas não valesse a pena:A idéia geral aqui era nomear maiúsculas e minúsculas a string geobitsiana e anexá-la à string original. Em seguida, divida-o em espaços e, para cada sequência, pegue a primeira letra e mapeie-a para a sequência que representa. Dessa forma
X
, a primeira letra de cada palavra será convertida em palavra completa.fonte
Python 2,
8378 bytesTeste em Ideone .
Como funciona
Nós iteramos sobre todos os caracteres c na string s .
Anexamos um espaço à sequência de palavras w e , em seguida, procuramos uma ocorrência de minúsculas c , precedida por um espaço.
Se essa ocorrência existir,
find
retornará o índice do espaço na string' '+w
, que corresponde ao índice de c em w .w[...:]
assim, retorna a cauda de w , começando na palavra com a primeira letra c .split()
divide a cauda em espaços,[0]
seleciona o primeiro pedaço (a palavra) e[1:]
remove sua primeira letra.Depois de anexar c ao resultado anterior, obtemos a palavra com letra correta que começa com c .
Se nenhuma palavra começar com c ,
find
retornará -1 .Assim,
w[...:]
gera o último caractere de w ,split()
agrupa-o em uma matriz,[0]
desfaz a quebra automática e[1:]
remove o único caractere da sequência.Após anexar c , obtemos a string singleton cujo caractere é c , portanto, toda a operação é não operacional.
Por fim,
''.join
concatena todas as seqüências resultantes, retornando a versão Geobitsized de s .fonte
Julia,
7268 bytesExperimente online!
fonte
CJam, 19 bytes
Teste aqui.
Explicação
fonte
JavaScript ES6,
676370 bytesTeste isso no Firefox. bugs estão fazendo isso mais do que eu gostaria
Explicação
fonte
f("abracadabra")("1Dbw")
retorna"1abracadabraDbracadabrababracadabrawbracadabra"
.Ruby,
656058 bytesExperimente online!
fonte