Briefing

Los extraterrestres se han asentado en la tierra y, curiosamente, su alfabeto es exactamente el mismo que el nuestro. Su lenguaje también es muy similar al nuestro con algunas diferencias muy distintas y fáciles de calcular.

Desafío

Toma una cadena y genera el equivalente en el idioma del alienígena. La traducción funciona como tal :

Intercambia todas las vocales de la palabra por las correspondientes:

 Vowel | With --------+-------- a | obo e | unu i | ini o | api u | iki 

También puedes escribir otro traductor para traducir Alien -> Inglés, esto es opcional sin embargo.

Ejemplos

Input: Shaun Output: Shoboikin Input: Java Output: Jobovobo Input: Hello, World! Output: Hunullapi, Wapirld! 

Si la vocal está en mayúscula, entonces debe escribir en mayúscula la primera letter ..

Input: Alan Output: Obolobon Input: Australia Output: Oboikistroboliniobo 

Reglas

  • Se aplican lagunas legales estándar
  • Debe funcionar para texto que contiene nuevos líneas
  • Puede escribir una función, lambda o programa completo

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Comentarios

  • Yo ‘ no estoy seguro de qué También puede escribir otro traductor para traducir Alien-

    Inglés se supone que significa. ¿Podemos escribir el traductor inverso en lugar del normal?

  • Tal vez ‘ sea solo yo, pero ‘ No es obvio para mí que también tenga este significado aquí. De todos modos, ‘ no estoy seguro de cómo esto es una regla si ‘ no es parte de la tarea.
  • @Dennis Tú ‘ estás siendo un poco punudobontinico, pero yo ‘ lo he editado para hacerlo más claro.
  • ¿Por qué el requisito de nuevas líneas? En mi opinión, esto es innecesario y no ‘ no agrega nada al punto principal del desafío.
  • ¿Puede la entrada contener cualquier carácter ASCII o solo un subconjunto . Por ejemplo, ¿habrá alguna vez números en la entrada?

Respuesta

Haskell, 100 91 bytes

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

Comentarios

  • Hoboskunull seguramente

Respuesta

TI-Basic, 173 + 59 + 148 = 380 bytes

Con suerte, los extraterrestres usan TI- 83/84 calculadoras;)

Programa principal, 173 bytes

BONUS: Mantenga la segunda o tercera línea dependiendo de si desea un traductor normal o inverso.

"("+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 

PD ~ representa el token 0x81 y @ representa el token 0x7F, obtenga más información aquí .

PPS Parte de la razón por la que estos programas tienen un número alto de bytes se debe a que sub(, inString(, length( , y todas las letras minúsculas tienen dos bytes cada una …

Comentarios

  • Creo que confundiste prgmR y prgmQ en los títulos de su código una vez?
  • Sí, gracias por captar eso @ByteCommander 🙂

Respuesta

Perl, 56 bytes

Incluye +1 para -p

Proporcione información sobre STDIN

alien.pl:

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

Funciona como se muestra, pero reemplace los \xXX escapes por el carácter real para obtener la puntuación reclamada

Comentarios

  • +1 Voto solo por el avatar de Alien. Es broma, la solución también es buena.
  • Jesucristo … Perl en su mejor momento, damas y caballeros.

Responder

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, 

Comentarios

  • ¿Esto ¿funciona para la entrada que contiene nuevas líneas?
  • @Jordan Lo hace. sed lee » una línea a la vez «. Entonces procesará todo hasta la primera línea nueva, imprimirá eso, imprimirá una línea nueva, luego comenzará de nuevo si hay más texto.
  • Ah, por supuesto. 👍🏻
  • @Jordan Esa no era ‘ una regla cuando escribí esto, pero terminó funcionando de todos modos.

Respuesta

Python, 99 95 93 bytes

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

En ideone.com …

Bastante simple. Simplemente tome el índice en el que encontramos cada carácter en la lista de vocales y utilícelo para extraer los tres caracteres que necesitamos.Si «no se encuentra, .find() devuelve -1, así que simplemente pegue el carácter actual al final de la cadena. Los espacios son necesarios, cualquier letra "a" no «incluye el c agregado. Las vocales traducidas están agrupadas por orden de letras (la primera letra de cada traducción, luego la segunda, luego la tercera).

Comentarios

  • Vaya, buen enfoque creativo. Estoy ‘ impresionado 🙂
  • Puede eliminar el espacio en ["aeiouAEIOU".find(c)::11] for

Respuesta

05AB1E , 28 27 20 bytes

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

Pruébelo en línea

Unuxplobonobotiniapin

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

Comentarios

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring: Me tomó demasiado tiempo traducir eso en mi cabeza. Creo que necesito un traductor inverso: P
  • Hazlo, no debería ‘ t ser demasiado difícil: P
  • Da miedo, creo dice que me encanta el golf.
  • He ‘ cambié mi pregunta, lo que hace que su respuesta no sea válida. Esto debe funcionar con líneas nuevas

Respuesta

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]); 

Respuesta

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) 

Véalo ejecutándose en ideone.com

Aquí «una versión con un formato más agradable:

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) 

Las partes más interesantes son { ... }.get(l.lower(), l) que intenta buscar la letra almacenada en l convertida a minúsculas en el diccionario y devuelve la versión traducida (si se encuentra), o bien la letra original,
y [str, str.capitalize][ord(l) < 91]( ... ) que verifica si la letra original era mayúscula ( Punto de código ASCII inferior a 91) y luego llama a la función str() con la letra como argumento (si no era «una letra mayúscula, no hace nada) o la str.capitalize() función (convierte la primera letra de la cadena de argumentos a mayúsculas).

Responder

C (gcc) , 150141136 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;}  

¡Pruébelo en línea!

Basado en la respuesta de @algmyr y -8 gracias a @ ASCII-only

Versión menos golfista

 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; }  

Comentarios

  • 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;}
  • quizás también 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]));}
  • 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]);}

Respuesta

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 

Toma entrada en STDIN. El procesamiento carácter por carácter tiene la conveniencia de distinguir entre mayúsculas y minúsculas.

Comentarios

  • Batch es la peor herramienta para todo, isn ‘ ¿no es así? (Bueno, al menos venciste a TI-Basic 🙂 ¡Es bueno ver un codegolf en Batch, por cierto!

Respuesta

Pyth, 42 bytes

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

Un programa que toma la entrada en STDIN e imprime la salida.

Pruébelo en línea

Cómo 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 

Respuesta

C, 167 bytes

I Realmente no quería romper mi hábito de hacer siempre funciones principales al codificar C, pero esta es sustancialmente más corta que la versión con main y de esta manera obtuve otra letra para deletrear lo que quería.

Golfed

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 */ } 

Hay algo especial en C y lo horrible que puedes estar con punteros y demás.

Comentarios

  • 151 bytes
  • @ceilingcat I ‘ diga que publique su respuesta por sí solo. Es ‘ s lo suficientemente divergente como para merecer su propia respuesta. 🙂

Respuesta

Retina , 60 bytes

El recuento de bytes asume la codificación ISO 8859-1.

[A-Z] »$& T`L`l i ini u iki e unu a ·b· o api · o T`»l`_L`». 

¡Pruébelo en línea!

Respuesta

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 gracias a edc65
Guardado 1 byte gracias a Neil

Demostración

 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 size=80 oninput="translate()" value="Hello, World!"><br><input size=80 disabled> 

Comentarios

  • Para verificar el valor de retorno de .indexOf y .search usa ~ en lugar de <0
  • Miré para ver qué pasaría si solo reemplazaras las vocales, y originalmente obtuve s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]), que sigue siendo 93 bytes . Pero dado que ahora se sabe que c es una vocal, ahora puedes usar search en lugar de indexOf ¡para guardar un byte!
  • @Neil – ¡Bien! Probé ambos, en realidad, pero no ‘ no pensé en combinarlos.

Respuesta

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;} 

sin golf:

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; } 

Y Alien de vuelta al 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;} 

Sin golf:

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; } 

Respuesta

Tcl, 75 bytes

La cadena a traducir está en la variable s.

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

Respuesta

Mathematica, 128 bytes

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

No estoy seguro de si se puede obtener un programa más corto usando IgnoreCase->True junto con una verificación de caso.

Respuesta

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);} 

Comentarios

  • 153 bytes
  • @ceilingcat & c puede estar bien si guarda el número como byte1 byte2 byte3 … Por ejemplo 255 en la memoria como ff 00 00 00 pero si hay otro endian para 255 tenemos 00 00 00 ff e imprimimos la cadena vacía …

Respuesta

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;}  

Comentarios

  • poner char*t="aeiou"; en el bucle for guarda 1 byte
  • 144 bytes

Respuesta

C #, 133 121 bytes

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

Edit (gracias a milk)

gracias 🙂 De hecho, conozco esta sobrecarga, pero de alguna manera la olvidé por completo al escribir esto ..

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

Comentarios

  • Puede usar la Select(char, int) sobrecarga para que no ‘ no necesite declarar i y puede ponerlo todo en una línea. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Responder

C, 207 202 bytes (gracias 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) Odio omitir el texto antes de cualquier tipo de declaración

2) No me gusta mucho poner código inutilizable (sin la función main ())

Uso:

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

Comentarios

  • ¡Bienvenido a PPCG!
  • @MartinEnder, eso ‘ es inesperado … pero gracias 🙂
  • (c=getchar())!= EOF puede convertirse en ~(c=getchar())
  • 143 bytes

Respuesta

Swift 2.2 196 bytes

¯ \ _ (ツ) _ / ¯

Golf

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);} 

noGolf

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

Comentarios

  • ¿Son los espacios en var r = [ ¿necesario?
  • Sí, en la aplicación de parques infantiles, si no ‘ t pone un espacio entre una tarea, le dará un error y le indicará que agregue espacios. . Swift es probablemente uno de los peores lenguajes para jugar al golf, pero pensé que sería divertido probarlo.
  • Y fue interesante, no ‘ no me dio eso. error cuando estaba asignando una variable a un cierre. De ahí el hombre que se encoge de hombros
  • sí, yo también lo noté. Esa ‘ es la razón por la que estaba confundido.

Respuesta

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")}  

Ampliado:

 # 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  

Respuesta

C – 192 bytes

(nuevas líneas agregadas para mayor claridad)

 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]);}}  

Solo busque tablas y un modificador booleano.

Busque cada letra en la tabla (cadena) de vocales; si lo encuentra, modifíquelo de acuerdo con la regla de la tabla s. Imprime cada carácter seguido de una cadena: si se encontró una vocal, imprime el carácter modificado por el valor en s seguido del resto de la sílaba almacenada en la tabla f; si no se encontró una vocal, imprima el carácter original y una cadena vacía.

Comentarios

Respuesta

Ruby, 102 93 91 88 78 bytes

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

Explicación:

Ejecute la línea como ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", el siguiente tipo, por ejemplo, Australia debería mostrar: Oboikistroboliniobo.

Es bastante sencillo, reemplace todas las vocales con una subcadena basada en el índice de la vocal a reemplazar en (b), multiplicado por 3 y los siguientes 3 caracteres en la cadena de traducción.

Comentarios

  • Sospecho que las comillas iniciales y finales (y escapes internos si la entrada tiene comillas ) en la salida podría descalificar esto. De todos modos, puede guardar dos bytes moviendo la asignación de b en Regexp (/[#{b=...}/).
  • Creo que el espacio p $* es innecesario
  • Utilice el indicador -p para ahorrar bytes adicionales. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Cuento 78 + 2 (-pe). ¿Cómo se obtiene 71?
  • @NotthatCharles, ¿realmente importan los caracteres necesarios para la ejecución en este caso? Simplemente no ‘ no los conté.

Responder

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 encontraría otra TI -¡Respuesta BÁSICA aquí!

De todos modos, la entrada es una cadena en inglés en Ans.
La salida es la cadena traducida.

Ejemplos:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Explicación:
(Se agregaron líneas nuevas para facilitar la lectura. Varias líneas de la misma línea se marcarán con un : en el siguiente bloque 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 es un lenguaje tokenizado. El recuento de caracteres no igual número de bytes.

  • Las letras minúsculas en TI-BASIC son dos bytes es cada uno.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *