Instrucciones
Los alienígenas 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
Tome una cadena y emita el equivalente del idioma del alienígena. La traducción funciona como tal:
Intercambia todas las vocales de la palabra con el correspondiente:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
También puede escribir otro traductor para traducir Alien-> English, sin embargo, esto es opcional.
Ejemplos
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Si la vocal está en mayúscula, entonces escribe en mayúscula la primera letra.
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
Reglas
- Se aplican lagunas estándar
- Debe funcionar para texto que contiene nuevas líneas
Puede escribir una función, lambda o un programa completo
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Respuestas:
Haskell,
10091 bytesfuente
TI-Basic, 173 + 59 + 148 = 380 bytes
Esperemos que los extraterrestres usen calculadoras TI-83/84;)
Programa principal, 173 bytes
BONIFICACIÓN: Mantenga la segunda o tercera línea dependiendo de si desea un traductor normal o inverso.
Subprograma (
prgmQ
), 59 bytes:Subprograma (
prgmR
), 148 bytes:PS
~
representa token0x81
y@
representa token0x7F
, obtenga más información aquí .PPS parte de por qué estos programas tienen un alto recuento de bytes se debe a que
sub(
,inString(
,length(
, y todas las letras minúsculas son dos bytes cada uno ...fuente
prgmR
yprgmQ
en los titulares de tu código una vez?Perl, 56 bytes
Incluye +1 para
-p
Dar entrada sobre STDIN
alien.pl
:Funciona como se muestra, pero reemplaza los
\xXX
escapes por el personaje real para obtener el puntaje reclamadofuente
sed 89
fuente
Python,
999593 bytesEn ideone.com ...
Bastante simple. Simplemente tome el índice en el que encontramos cada carácter en la lista de vocales y úselo para obtener los tres caracteres que necesitamos. Si no se encuentra,
.find()
regresa ,-1
así que simplemente pegue el carácter actual al final de la cadena. Los espacios son necesarios para que cualquier letra"a"
no incluya el agregadoc
. Las vocales traducidas se agrupan por orden de letras (la primera letra de cada traducción, luego la segunda, luego la tercera).fuente
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 bytesPruébalo en línea!
Unuxplobonobotiniapin
fuente
PHP, 91 bytes
fuente
Python, 129 bytes
Véalo en ideone.com
Aquí hay una versión con mejor formato:
Las partes más interesantes son las
{ ... }.get(l.lower(), l)
que intentan buscar la letra almacenada enl
minúsculas convertidas 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 comprueba si la letra original era mayúscula ( Punto de código ASCII inferior a 91) y luego llama a lastr()
función con la letra como argumento (si no fue una letra mayúscula, no hace nada) o lastr.capitalize()
función (convierte la primera letra de la cadena del argumento en mayúsculas).fuente
C (gcc) ,
150141136134bytesPruébalo en línea!
Basado en la respuesta de @algmyr y -8 gracias a @ ASCII-only
Versión menos golfizada
fuente
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
Toma entrada en STDIN. El procesamiento carácter por carácter tiene la conveniencia de ser sensible a mayúsculas y minúsculas.
fuente
Pyth, 42 bytes
Un programa que toma entrada en STDIN e imprime la salida.
Pruébalo en línea
Cómo funciona
fuente
C, 167 bytes
Realmente no quería romper mi hábito de hacer siempre las funciones principales al codificar C, pero esto es sustancialmente más corto que la versión con un principal y de esta manera obtuve otra letra para deletrear lo que quería.
Golfed
Comentado
Hay algo especial sobre C y lo horrible que puede ser con punteros y demás.
fuente
Retina , 60 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
fuente
Javascript (ES6),
949392 bytesGuardado 1 byte gracias a edc65
Guardado 1 byte gracias a Neil
Manifestación
fuente
.indexOf
y.search
usar en~
lugar de<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
que todavía son 93 bytes. ¡Pero comoc
ahora se sabe que es una vocal, ahora puede usarla ensearch
lugar deindexOf
guardar un byte!Java 8, 172 bytes
sin golf:
Y Alien vuelve al inglés (171 bytes):
Sin golf:
fuente
Tcl, 75 bytes
La cadena a traducir está en la variable
s
.fuente
Mathematica, 128 bytes
No estoy seguro de si se puede obtener un programa más corto al usarlo
IgnoreCase->True
junto con una verificación de casos.fuente
C 178 bytes
fuente
C,
163162159 bytesfuente
char*t="aeiou";
en for loop ahorra 1 byteC #,
133121 bytesEditar (gracias a
milk
)gracias :) En realidad conozco esta sobrecarga, pero de alguna manera la olvidé por completo al escribir esto ...
fuente
Select(char, int)
sobrecarga para no tener que declarari
y poner todo en una línea.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C,
207202 bytes (gracias a Cyoce)1) Odio omitir el tipo antes de cualquier tipo de declaraciones
2) Realmente no me gusta poner código inutilizable (sin la función main ())
Uso:
fuente
(c=getchar())!= EOF
puede convertirse~(c=getchar())
Swift 2.2 196 bytes
¯ \ _ (ツ) _ / ¯
Golfed
sin golf
fuente
var r = [
necesarios los espacios ?Perl 6 ,
8482 bytesExpandido:
Uso:
fuente
C - 192 bytes
(nuevas líneas agregadas para mayor claridad)
Simplemente busque tablas y un interruptor booleano.
Busque cada letra en la tabla (cadena) de vocales; si se encuentra, modifíquelo según la regla de la tabla
s
. Imprima cada carácter seguido de una cadena: si se encuentra una vocal, imprima el carácter modificado por el valors
seguido del resto de la sílaba almacenada en la tablaf
; Si no se encuentra una vocal, imprima el carácter original y una cadena vacía.fuente
Ruby,
10293918878 bytesExplicación:
Ejecutar la línea como
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
, hasta el próximo tipo, por ejemplo,Australia
que la Salida:Oboikistroboliniobo
.Es bastante sencillo, reemplace todas las vocales con una subcadena basada en el índice de la vocal que se va a reemplazar en (b), multiplicado por 3 y los siguientes 3 caracteres en la cadena de traducción.
fuente
b
a Regexp (/[#{b=...}/
).p $*
es innecesario-p
bandera para guardar bytes adicionales.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). ¿Cómo se obtiene 71?TI-BASIC,
201197195 bytes¡Pensar que encontraría otra respuesta TI-BASIC aquí!
De todos modos, la entrada es una cadena en inglés
Ans
.La salida es la cadena traducida.
Ejemplos:
Explicación:
(Se agregaron nuevas líneas para facilitar la lectura. Múltiples líneas de la misma línea se denotarán con un
:
en el siguiente bloque de código).Notas:
TI-BASIC es un lenguaje tokenizado. El recuento de caracteres no es igual al recuento de bytes.
Las letras minúsculas en TI-BASIC son de dos bytes cada una.
fuente