Tradutor de inglês para estrangeiro


18

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!


Não sei ao certo o que você também pode escrever outro tradutor para traduzir Alien-> English . Podemos escrever o tradutor reverso em vez do tradutor regular?
Dennis

4
Talvez seja só eu, mas não é óbvio para mim que também carrega esse significado aqui. De qualquer forma, não tenho certeza de como isso é uma regra, se não fizer parte da tarefa real.
Dennis

@ Dennis Você está sendo um pouco punudobontinental, mas eu o editei para torná-lo mais claro.
Shaun Wild

2
Por que o requisito para novas linhas? Na minha opinião, isso é desnecessário e não adiciona nada ao ponto principal do desafio.
Adnan

1
A entrada pode conter qualquer caractere ASCII ou apenas um subconjunto? Por exemplo, haverá sempre números na entrada?
Riley

Respostas:


14

Haskell, 100 91 bytes

(>>= \x->last$[x]:[y|(z:y)<-words"aobo eunu iini oapi uiki AObo EUnu IIni OApi UIki",z==x])

5
Hoboskunull certamente
jk.

12

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.

"("+Ans+")→Str1
"@a~obo@A~Obo@e~unu@E~Unu@i~ini@I~Ini@o~api@O~Api@u~iki@U~Iki@→Str2    <-- English to Alien
"@obo~a@Obo~A@unu~e@Unu~E@ini~i@Ini~I@api~o@Api~O@iki~u@Iki~U@→Str2    <-- Alien to English
For(I,2,length(Ans
If "@"=sub(Str2,I-1,1
Then
Str1+"~"+sub(Str2,I,inString(Str2,"@",I)-I
prgmQ
Ans→Str1
End
End

Subprograma ( prgmQ), 59 bytes:

Ans→Str9
inString(Ans,"~
sub(Str9,Ans,length(Str9)-Ans+1→Str8
Str9
prgmR
Repeat Str9=Ans+Str8
Ans+Str8→Str9
prgmR
End

Subprograma ( prgmR), 148 bytes:

Ans→Str0
inString(Ans,"~→Z
inString(Str0,"~",Ans+1→Y
inString(sub(Str0,1,Z-1),sub(Str0,Z+1,Ans-Z-1→X
sub(Str0,1,-1+inString(Str0,"~
If X
sub(Str0,1,X-1)+sub(Str0,Y+1,length(Str0)-Y)+sub(Str0,X+length(sub(Str0,Z+1,Y-Z-1)),Z-X-length(sub(Str0,Z+1,Y-Z-1

PS ~representa token 0x81e @representa token 0x7F, 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 ...


Eu acho que você misturou prgmRe prgmQem suas manchetes de código uma vez?
Byte Commander

Sim, obrigado por captura que @ByteCommander :)
Timtech

8

Perl, 56 bytes

Inclui +1 para -p

Dê entrada no STDIN

alien.pl:

#!/usr/bin/perl -p
s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg

Funciona como mostrado, mas substitua os \xXXescapes pelo personagem real para obter a pontuação reivindicada


1
Marcado com +1 apenas para o avatar Alien. Brincadeirinha, a solução é boa também.
Chaotic

1
Jesus Cristo .. Perl no seu melhor, senhoras e senhores.
Priidu Neemre

6

sed 89

s,a,&b\n,gi
s,i,&n\r,gi
s,o,&p\r,gi
s,u,&k\r,gi
s,e,&n\f,gi
y,aeouAEOU\n\r\f,ouaiOUAIoiu,

Isso funciona para entradas que contêm novas linhas?
Jordan

@ Jordan Faz. sed lê "uma linha de cada vez". Portanto, ele processará tudo até a primeira nova linha, imprima isso, imprima uma nova linha e inicie novamente se houver mais texto.
Riley

Ah, claro. 👍🏻
Jordan

@ Jordan Essa não era uma regra quando escrevi isso, mas acabou funcionando de qualquer maneira.
Riley

6

Python, 99 95 93 bytes

lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s)

Em 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 , -1portanto, 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ção c. As vogais traduzidas são agrupadas por ordem das letras (a primeira letra de cada tradução, depois a segunda e depois a terceira).


Uau, boa abordagem criativa. Estou impressionado :)
Byte Commander

1
Você pode remover o espaço em["aeiouAEIOU".find(c)::11] for
acrolith

6

05AB1E , 28 27 20 bytes

žÀ.•₅%~≠#ùÛãú•3ôD™«‡

Experimente online!

Unuxplobonobotiniapin

žÀ                    # the string "aeiouAEIOU"
  .•₅%~≠#ùÛãú•        # the string "obounuiniapiiki"
              3ô      # split in pieces of 3
                D™«   # concatenate with a title-case copy
                   ‡  # transliterate

2
Ini lapivunu gapilfining!
Shaun Wild

@BasicallyAlanTuring: Levei muito tempo para traduzir isso na minha cabeça. Eu acho que preciso de um tradutor reverso: P
Emigna

2
Vá em frente, não deve ser muito difícil: P
Shaun Wild

Assustador, acho que diz que eu amo golfe.
datagod 16/09/16

Alterei minha pergunta, o que faz com que você responda inválido. Este trabalho deve com novas linhas
Shaun selvagem

5

PHP, 91 bytes

<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]);

5

Python, 129 bytes

lambda s:"".join([str,str.capitalize][ord(l)<91]({"a":"obo","e":"unu","i":"ini","o":"api","u":"iki"}.get(l.lower(),l))for l in s)

Veja em execução em ideone.com

Aqui está uma versão mais bem formatada:

lambda s: \
    "".join(
        [str, str.capitalize][ord(l) < 91](
            {"a":"obo", "e":"unu", "i":"ini", "o":"api", "u":"iki"}
            .get(l.lower(), l)
        )
    for l in s)

As partes mais interessantes são as { ... }.get(l.lower(), l)que tentam procurar a letra armazenada em lletras minúsculas convertidas em minúsculas no dicionário e retornam a versão traduzida (se encontrada) ou a letra original
e [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 a str()função com a letra como argumento (se não for uma letra maiúscula, não faz nada) ou a str.capitalize()função (converte a primeira letra da sequência de argumentos em maiúsculas).


5

C (gcc) , 150 141 136 134 bytes

a;i;e(char*n){for(char*v=" AEIOUIAI",*t;i=*n++;printf(&a))t=index(v,i-i/96*32),a=t?t-v:0,a=a?v[a+3]|L" 潢畮楮楰楫"[a]<<8|i&32:i;}

Experimente online!

Com base na resposta de @algmyr e -8, graças a @ ASCII-only

Versão menos golfe

a;i;
e(char*n){
  for(char*v=" AEIOUIAI",*t;i=*n++;printf(&a))
    t=index(v,i-i/96*32),
    a=t?t-v:0,
    a=a?v[a+3]|L" 潢畮楮楰楫"[a]<<8|i&32:i;
}

149? 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;}
somente ASCII em

talvez também 149: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]));}
somente ASCII em

144: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]);}
Somente ASCII em

4

Lote, 215 bytes

@echo off
set/pt=
set s=
:l
if "%t%"=="" echo(%s%&exit/b
set c=%t:~0,1%
for %%a in (obo.a unu.e ini.i api.o iki.u Obo.A Unu.E Ini.I Api.O Iki.U)do if .%c%==%%~xa set c=%%~na
set s=%s%%c%
set t=%t:~1%
goto l

Recebe entrada em STDIN. O processamento de caractere por caractere tem a conveniência de fazer distinção entre maiúsculas e minúsculas.


Lote é apenas a pior ferramenta para tudo, não é? (Bem, pelo menos você venceu o TI-Basic :) É bom ver um codegolf no Batch, por sinal!
YoYoYonnY

4

Pitão, 42 bytes

#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J

Um programa que recebe entrada no STDIN e imprime a saída.

Experimente online

Como funciona

#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J  Program.
#                                           Loop until error statement:
   w                                         Get w, the next line of the input
                   "obounuiniapiiki"         Yield string literal "obounuiniapiiki"
                  c                 3        Split that into groups of three characters
                 J                           Assign that to J and yield J
                                     mrd3J   Map title case over J
                +                            Merge the lower and title groups
    "aeiouAEIOU"                             Yield string literal "aeiouAEIOU"
  X                                          Translate w from that to the three-character
                                             groups
 s                                           Concatenate that
                                             Implicitly print

4

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

a;l;i;e(char*n){for(;i=*n++;l=i>90,i-=32*l,a=!(i-65)+2*!(i-69)+3*!(i-73)+4*!(i-79)+5*!(i-85),printf(a?"%c%c%c":"%c",(a?"HOUIAI"[a]:i)+l*32,"ibnnpk"[a],"!ouiii"[a]));}

Comentado

a;l;i;
e(char*n)
{
    for(;
        i = *n++;  /* Get char and advance */
        l = i>90,  /* Is lowercase? */
        i -= 32*l, /* Make uppercase */

        /* Is 1,2,3,4,5 depeding on the vowel and 0 for no vowel */
        a = !(i-65) + 2*!(i-69) + 3*!(i-73) + 4*!(i-79) + 5*!(i-85),

        printf(a?"%c%c%c":"%c",        /* Print 1 or 3 chars? */
               (a?"HOUIAI"[a]:i)+l*32, /* Print appropriate char+case */
                  "ibnnpk"[a],            /* Print appropriate char */
                  "!ouiii"[a]));          /* Print appropriate char */
}

Há algo de especial em C e o quão horrível você pode ser com ponteiros e coisas do tipo.



@ceilingcat Eu diria que publique sua resposta por conta própria. É divergente o suficiente para merecer sua própria resposta. :)
algmyr 24/02


3

Javascript (ES6), 94 93 92 bytes

s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])

Guardado 1 byte graças a edc65
Guardado 1 byte graças a Neil

Demo

let f =
s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])

function translate() {
  document.getElementById("o").value = f(document.getElementById("i").value);
}
translate();
<input id="i" size=80 oninput="translate()" value="Hello, World!"><br><input id="o" size=80 disabled>


1
Para verificar o valor de retorno .indexOfe .searchutilizar ~em vez de<0
edc65

1
Eu olhei para ver o que aconteceria se você apenas substituísse as vogais e, originalmente, obtive s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])93 bytes. Mas como cagora é conhecido como uma vogal, agora você pode usar em searchvez de indexOfsalvar um byte!
Neil

@Neil - Nice! Tentei os dois, na verdade, mas não pensei em combiná-los.
Arnauld

2

Java 8, 172 bytes

String f(String s){String v="AEIOUaeiou",r="OboUnuIniApiIkiobounuiniapiiki",o="";for(char c:s.toCharArray()){int n=v.indexOf(c);o+=n>-1?r.substring(n*3,n*3+3):c;}return o;}

ungolfed:

String f(String s){
    String v="AEIOUaeiou",r="OboUnuIniApiIkiobounuiniapiiki",o="";
    for(char c:s.toCharArray()){
        int n=v.indexOf(c);
        o+=n>-1?r.substring(n*3,n*3+3):c;
    }
    return o;
}

E Alien de volta ao inglês (171 bytes):

String g(String s){String[] v="AEIOUaeiou".split(""),r="Obo Unu Ini Api Iki obo unu ini api iki".split(" ");for(int i=0;i<v.length;i++)s=s.replaceAll(r[i],v[i]);return s;}

Ungolfed:

String g(String s){
    String[] v="AEIOUaeiou".split(""),r="Obo Unu Ini Api Iki obo unu ini api iki".split(" ");
    for(int i=0;i<v.length;i++)s=s.replaceAll(r[i],v[i]);
    return s;
}

2

Tcl, 75 bytes

Cadeia a ser traduzida é na variável s.

string map {A Obo a obo E Unu e unu I Ini i ini O Api o api U Iki u iki} $s

2

Mathematica, 128 bytes

#~StringReplace~{"a"->"obo","A"->"Obo","e"->"unu","E"->"Unu","i"->"ini","I"->"Ini","o"->"api","O"->"Api","u"->"iki","U"->"Iki"}&

Não tenho certeza se um programa mais curto pode ser obtido usando IgnoreCase->Truejunto com uma verificação de caso.


2

C 178 bytes

char*p[256],*a="obo\0unu\0ini\0api\0iki\0Obo\0Unu\0Ini\0Api\0Iki",*b="aeiouAEIOU";main(c){for(c=0;b[c];++c)p[b[c]]=a+4*c;for(;(c=getchar())>0;)p[c]?printf("%s",p[c]):putchar(c);}


@ceilingcat & c pode estar ok se salvar o número como byte1 byte2 byte3 ... Por exemplo, 255 na memória como ff 00 00 00, mas se houver o outro endian para 255, temos 00 00 00 ff e imprimimos a string nula ...
RosLuP

2

C, 163 162 159 bytes

char*t="aeiou";n,k;q(char*x){for(;*x;n<0||(*x=t[n>1?n%2?0:2:n+3])&&k>90||(*x-=32),printf("%c%.2s",*x++,n<0?"":&"bonunipiki"[2*n]))n=strchr(t,tolower(k=*x))-t;}

colocar char*t="aeiou";no loop economiza 1 byte
Mukul Kumar


2

C #, 133 121 bytes

s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}

Editar (graças a milk )

obrigado :) Eu realmente conheço essa sobrecarga, mas de alguma forma esqueci completamente ao escrever isso ..

s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Você pode usar a Select(char, int)sobrecarga para não precisar declarar ie colocar tudo em uma linha. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
milk

2

C, 207 202 bytes (graças a Cyoce)

#include <stdio.h>
#define r(c,t) case c:printf(t);continue;
int main(){int c;while(~(c=getchar())){switch(c){r('a',"obo")r('e',"unu")r('i',"ini")r('o',"api")r('u',"iki")default:putchar(c);}}return 0;}

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:

c89 cg.c -o cg; echo "Testing" | ./cg

Bem-vindo ao PPCG!
Martin Ender

@MartinEnder, que é inesperado ... mas obrigado :)
Xdevelnet

(c=getchar())!= EOFpode se tornar~(c=getchar())
Cyoce 20/09/16


1

Swift 2.2 196 bytes

¯ \ _ (ツ) _ / ¯

Golfe

var r = ["a":"obo","e":"unu","i":"ini","o":"api","u":"iki"];var q={(s:String) in var o = "";for var i in s.lowercaseString.characters{o += r[String(i)] != nil ? r[String(i)]!:String(i)};print(o);}

unGolfed

var r = ["a":"obo","e":"unu","i":"ini","o":"api","u":"iki"]
var q={(s:String) in
    var o = ""
    for var i in s.lowercaseString.characters {
        o += r[String(i)] != nil ? r[String(i)]!:String(i)
    }
    print(o)
}

Os espaços são var r = [necessários?
Cyoce 20/09/16

Sim, no aplicativo playgrounds, se você não colocar um espaço entre uma tarefa, isso gera um erro e diz para você adicionar espaços. Swift é provavelmente um dos piores idiomas para jogar golfe, mas achei que seria divertido tentar.
Danwakeem 20/09/16

E foi interessante não me dar esse erro quando eu estava atribuindo uma variável a um fechamento. Daí o homem encolher os ombros
Danwakeem 20/09/16

Sim, eu notei isso também. Por isso fiquei confuso.
Cyoce 20/09/16

0

Perl 6 ,  84  82 bytes

{my%o=<a obo e unu i ini o api u iki>;S:i:g[<{%o.keys}>]=%o{$/.lc}.samecase($/~'a')}
{my%o=<a obo e unu i ini o api u iki>;S:i:g[<[aeiou]>]=%o{$/.lc}.samecase($/~'a')}

Expandido:

# bare block lambda with implicit parameter 「$_」
{
  # create the mapping
  my %v = <a obo e unu i ini o api u iki>;

  # replace vowels in 「$_」
  S
    :ignorecase
    :global
  [
    <[aeiou]>
  ]

  = # replace them with:

  %v{ $/.lc }
  # change it to be the same case as what was matched, and a lowercase letter
  .samecase( $/ ~ 'a' )
}

Uso:

my &english-to-alien = {my%o=<a obo e unu i ini o api u iki>;S:i:g[<[aeiou]>]=%o{$/.lc}.samecase($/~'a')}

say english-to-alien 'Australia'; # Oboikistroboliniobo

0

C - 192 bytes

(novas linhas adicionadas para maior clareza)

int c,j,b;main(){
char*f[]={"bo","nu","ni","pi","ki",""},
s[]={14,16,0,-14,-12};
while(c=getchar()){for(b=j=0;j<10;++j)
{if(c=="aeiouAEIOU"[j]){c+=s[j%=5];b=1;break;}}
printf("%c%s",c,f[b?j:5]);}}

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 tabelas . Imprima cada caractere seguido de uma sequência: se uma vogal for encontrada, imprima o caractere modificado pelo valor em sseguido pelo restante da sílaba armazenada na tabela f; se uma vogal não foi encontrada, imprima o caractere original e uma string vazia.



0

Ruby, 102 93 91 88 78 bytes

gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}

Explicaçã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.


1
Eu suspeito que as aspas à esquerda e à direita (e escapes internas se a entrada tiver aspas) na saída podem desqualificar isso. De qualquer forma, você pode salvar dois bytes movendo a atribuição de bpara o Regexp ( /[#{b=...}/).
Jordânia

1
Eu acho que o espaço p $*é desnecessário
Cyoce

1
Use o -psinalizador para salvar bytes adicionais. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
Value Ink

Eu conto 78 + 2 ( -pe). Como você consegue 71?
Não que Charles,

@NotthatCharles, os caracteres necessários para a execução realmente importam nesse caso? Eu apenas não os contei.
Biketire 27/09/16

0

TI-BASIC, 201 197 195 bytes

Ans+" →Str1:"AEIOUaeiou→Str2:"OUIAIouiai→Str3:"bonunipiki→Str4:1→X:While X<length(Str1:inString(Str2,sub(Str1,X,1→A:5fPart(.2A→B:If A:sub(Str1,1,X-1)+sub(Str3,A,1)+sub(Str4,2B-1,2)+sub(Str1,X+1,length(Str1)-X→Str1:X+1+2(A>0→X:End:sub(Str1,1,length(Str1)-1

Pensar 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:

"HE
HE
prgmCDGF1A
HUnu
"Hello
Hello
prgmCDGF1A
Hunullapi

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.)

Ans+" →Str1                     ;append a space to the input string and store the result
                                ; in "Str1"
"AEIOUaeiou→Str2                ;store the upper- and lowercase vowels in "Str2"
"OUIAIouiai→Str3                ;store the beginning letter of each corresponding translated
                                ; vowel in "Str3"
"bonunipiki→Str4                ;store the remaining letters of each translated vowel
                                ; in "Str4"
1→X                             ;store 1 in "X"
While X<length(Str1             ;loop until all English letters have been checked
inString(Str2,sub(Str1,X,1→A    ;get the current letter and store its index in "Str2"
                                ; into "A"
5fPart(.2A→B                    ;get which translated vowel end should be used
                                ; B ranges from 1 to 5
If A                            ;if the current letter is a vowel
sub(Str1,1,X-1)                 ;extract the substring of the input before the
                                ; current letter
: +sub(Str3,A,1)                ;append the translated vowel start
: +sub(Str4,2B-1,2)             ;append the translated vowel end
: +sub(Str1,X+1,length(Str1)-X  ;append the remaining substring of the input
: →Str1                         ;store the result of these concatenations into "Str1"
X+1+2(A>0→X                     ;check if A>0 (if the current letter was a vowel)
                                ; if true, increment "X" by three
                                ; if false, increment "X" by one
End
sub(Str1,1,length(Str1)-1       ;remove the trailing space and store the result in "Ans"
                                ;implicit print of "Ans"

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.