Briefing
Os estrangeiros se estabeleceram na Terra e, estranhamente, o alfabeto deles é exatamente o mesmo que o nosso. A linguagem deles também é muito parecida com a nossa, com algumas diferenças muito distintas e fáceis de calcular.
Desafio
Pegue uma corda e produza o equivalente em idioma do estrangeiro. A tradução funciona da seguinte maneira:
Troque todas as vogais da palavra pelo correspondente:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
Você também pode escrever outro tradutor para traduzir Alien-> English, mas isso é opcional.
Exemplos
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Se a vogal estiver em maiúscula, você maiúscula a primeira letra.
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
Regras
- Aplicam-se brechas padrão
- Deve funcionar para o texto que contém novas linhas
Você pode escrever uma função, lambda ou programa completo
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Respostas:
Haskell,
10091 bytesfonte
TI-Basic, 173 + 59 + 148 = 380 bytes
Espero que os alienígenas usem calculadoras TI-83/84;)
Programa principal, 173 bytes
BÔNUS: Mantenha a segunda ou terceira linha, dependendo se você deseja um tradutor normal ou reverso.
Subprograma (
prgmQ
), 59 bytes:Subprograma (
prgmR
), 148 bytes:PS
~
representa token0x81
e@
representa token0x7F
, saiba mais aqui .PPS Parte da razão pela qual estes programas têm uma alta contagem de byte é porque
sub(
,inString(
,length(
, e todas as letras minúsculas são dois bytes cada ...fonte
prgmR
eprgmQ
em suas manchetes de código uma vez?Perl, 56 bytes
Inclui +1 para
-p
Dê entrada no STDIN
alien.pl
:Funciona como mostrado, mas substitua os
\xXX
escapes pelo personagem real para obter a pontuação reivindicadafonte
sed 89
fonte
Python,
999593 bytesEm ideone.com ...
Bem simples. Basta pegar o índice em que encontramos cada caractere na lista de vogais e usá-lo para extrair os três caracteres de que precisamos. Se não for encontrado,
.find()
retorna ,-1
portanto, basta colar o caractere atual no final da string. Os espaços são necessários para que qualquer letra"a"
não inclua a adiçãoc
. As vogais traduzidas são agrupadas por ordem das letras (a primeira letra de cada tradução, depois a segunda e depois a terceira).fonte
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 bytesExperimente online!
Unuxplobonobotiniapin
fonte
PHP, 91 bytes
fonte
Python, 129 bytes
Veja em execução em ideone.com
Aqui está uma versão mais bem formatada:
As partes mais interessantes são as
{ ... }.get(l.lower(), l)
que tentam procurar a letra armazenada eml
letras minúsculas convertidas em minúsculas no dicionário e retornam a versão traduzida (se encontrada) ou a letra originale
[str, str.capitalize][ord(l) < 91]( ... )
que verifica se a letra original era uma letra maiúscula ( Ponto de código ASCII menor que 91) e, em seguida, chama astr()
função com a letra como argumento (se não for uma letra maiúscula, não faz nada) ou astr.capitalize()
função (converte a primeira letra da sequência de argumentos em maiúsculas).fonte
C (gcc) ,
150 141 136134 bytesExperimente online!
Com base na resposta de @algmyr e -8, graças a @ ASCII-only
Versão menos golfe
fonte
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i-32*l),a=t?t-v:0]))l=i>96;}
a;l;i;e(char*n){for(char*v="AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i&95),a=t&&t-v<5?t-v+1:0]));}
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;)printf("%c%c%c"+4*!a,a?" OUIAI"[a]|i&32:i," bnnpk"[a]," ouiii"[t=index(v,i-i/96*32),a=t?t-v:0]);}
Lote, 215 bytes
Recebe entrada em STDIN. O processamento de caractere por caractere tem a conveniência de fazer distinção entre maiúsculas e minúsculas.
fonte
Pitão, 42 bytes
Um programa que recebe entrada no STDIN e imprime a saída.
Experimente online
Como funciona
fonte
C, 167 bytes
Eu realmente não queria quebrar meu hábito de sempre executar funções principais ao codificar C, mas isso é substancialmente mais curto que a versão com main e, dessa forma, recebi outra letra para soletrar o que queria!
Golfe
Comentado
Há algo de especial em C e o quão horrível você pode ser com ponteiros e coisas do tipo.
fonte
Retina , 60 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
fonte
Javascript (ES6),
949392 bytesGuardado 1 byte graças a edc65
Guardado 1 byte graças a Neil
Demo
fonte
.indexOf
e.search
utilizar~
em vez de<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
93 bytes. Mas comoc
agora é conhecido como uma vogal, agora você pode usar emsearch
vez deindexOf
salvar um byte!Java 8, 172 bytes
ungolfed:
E Alien de volta ao inglês (171 bytes):
Ungolfed:
fonte
Tcl, 75 bytes
Cadeia a ser traduzida é na variável
s
.fonte
Mathematica, 128 bytes
Não tenho certeza se um programa mais curto pode ser obtido usando
IgnoreCase->True
junto com uma verificação de caso.fonte
C 178 bytes
fonte
C,
163162159 bytesfonte
char*t="aeiou";
no loop economiza 1 byteC #,
133121 bytesEditar (graças a
milk
)obrigado :) Eu realmente conheço essa sobrecarga, mas de alguma forma esqueci completamente ao escrever isso ..
fonte
Select(char, int)
sobrecarga para não precisar declarari
e colocar tudo em uma linha.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C,
207202 bytes (graças a Cyoce)1) Detesto omitir o tipo antes de qualquer tipo de declaração
2) Eu realmente não gosto de colocar código inutilizável (sem a função main ())
Uso:
fonte
(c=getchar())!= EOF
pode se tornar~(c=getchar())
Swift 2.2 196 bytes
¯ \ _ (ツ) _ / ¯
Golfe
unGolfed
fonte
var r = [
necessários?Perl 6 ,
8482 bytesExpandido:
Uso:
fonte
C - 192 bytes
(novas linhas adicionadas para maior clareza)
Basta procurar tabelas e um switch booleano.
Pesquise cada letra na tabela (string) de vogais; se encontrado, modifique-o de acordo com a regra na tabela
s
. Imprima cada caractere seguido de uma sequência: se uma vogal for encontrada, imprima o caractere modificado pelo valor ems
seguido pelo restante da sílaba armazenada na tabelaf
; se uma vogal não foi encontrada, imprima o caractere original e uma string vazia.fonte
Ruby,
10293918878 bytesExplicação:
Execute a linha como
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
, em seguida, digite, por exemplo,Australia
a saída:Oboikistroboliniobo
.É bem simples, substitua todas as vogais por uma substring baseada no índice da vogal a ser substituída em (b), vezes 3 e nos próximos 3 caracteres na sequência de conversão.
fonte
b
para o Regexp (/[#{b=...}/
).p $*
é desnecessário-p
sinalizador para salvar bytes adicionais.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). Como você consegue 71?TI-BASIC,
201197195 bytesPensar que eu encontraria outra resposta TI-BASIC aqui!
De qualquer forma, a entrada é uma string em inglês
Ans
.A saída é a sequência traduzida.
Exemplos:
Explicação:
(Novas linhas adicionadas para facilitar a leitura. Várias linhas da mesma linha serão indicadas com um
:
no seguinte bloco de código.)Notas:
TI-BASIC é uma linguagem tokenizada. Contagem de caracteres não é igual à contagem de bytes.
Letras minúsculas no TI-BASIC têm dois bytes cada.
fonte