El texto puede traducirse a una versión escrita del lenguaje TUT reemplazando cada letra por la "palabra TUT" correspondiente, como se indica en la siguiente tabla (adaptada del artículo vinculado) * :
a e h hash o o u yu
b bub i ay p pup v vuv
c kut j jag q kwak w waks
d dud k kak r rut x eks
e i l lul s sus y yak
f fuf m mum t tut z zuz
g jug n nun
* Exceptions:
(1) Upper case letters have corresponding TUT words in upper case.
(2) A doubled letter becomes 'skwer' ('SKWER') followed by the TUT word for that letter.
- An n-fold letter is treated as a number of doubles, followed by a single if needed.
- To be considered a double or n-fold letter, the letters must be in the same case.
(3) 'rut' ('RUT') is replaced by 'rud' ('RUD') if immediately followed by 'dud' ('DUD').
Escriba un programa con el siguiente comportamiento de E / S:
Entrada (desde stdin): un indicador binario (0/1) iy una cadena ASCII s .
- Si i = 0, s puede contener cualquier texto ASCII.
- Si i = 1, entonces s debe ser la salida del lenguaje TUT para alguna entrada válida.
Salida (a stdout): un indicador binario (0/1) j y una cadena ASCII t .
- Si i = 0, entonces j = 1 yt es la traducción de s al lenguaje TUT.
- Si i = 1, entonces j = 0 yt es la traducción de s del lenguaje TUT.
- Para cualquier entrada válida, la aplicación del programa a su propia salida debe reproducir exactamente la entrada original; es decir, programa ( programa ( i , s )) = ( i , s ). La entrada y la salida deben tener exactamente el mismo formato.
Puntuación : La puntuación es el número de caracteres en el programa: gana la puntuación más baja.
Ejemplos
(0, 'Look for the birds.')
(1, 'LULskwerokak fuforut tuthashi bubayruddudsus.')
(0, '"Mrs. Hogwallop up and R-U-N-N-O-F-T."')
(1, '"MUMrutsus. HASHojugwakseskwerlulopup yupup enundud RUT-YU-NUN-NUN-O-FUF-TUT."')
( c )
(0, 'QWX WWW Rrrrd deeeeep')
(1, 'KWAKWAKSEKS SKWERWAKSWAKS RUTskwerrutruddud dudskweriskweriipup')
( d )
(0, 'aa AA aA Aa rd RD rD Rd')
(1, 'skwere SKWERE eE Ee ruddud RUDDUD rutDUD RUTdud)
(((Aparte sobre la pronunciación: Las palabras TUT para las vocales ( e
, i
, ay
, o
, yu
) se supone que representan los sonidos habituales de (a, e, i, o, u) al recitar el alfabeto - es decir, con rima (mayo , mi, mi, cortar, mew) en las palabras TUT de tres o más letras, los símbolos (. u
, a
, e
) se supone que el sonido como en (pero, el palo, apuesta), respectivamente - son reemplazos para ASCII ( ʌ
æ
ɛ
) en el artículo vinculado.)))
AA
,SKWERE
oskwerE
? ¿Qué pasa con las letras triplicadas? es quewakswakswaks
,skwerwakswaks
,waksskwerwaks
, o inclusokyubwaks
, o podemos elegir?rrd
debería traducir askwerruddud
; ¿Se nos permite dejarlo enskwerrutdud
?0,"AA"
traduce a1,"ee"
? En cuanto a1,"SKWERE"
, supongo que quisiste decir0,"AA"
, no0,"EE"
.Respuestas:
Rubí,
310311 caracteresManeja correctamente:
AA
debe convertirse enskwerE
, intercambie las líneas 3 y 4aA
yAa
debo convertirme eneE
yEe
respectivamenterrd
se traduce como `skwerruddud (el despliegue gana 3 caracteres)rrrd
se convierte enskwerrutruddud
.rrrrd
se convierteskwerrutskwerruddud
La entrada requiere que no haya una nueva línea entre el indicador y la cadena, la salida la coloca allí (corrección: 1 carácter).Salida de la consola suprimida en este punto para evitar la mezcla con STDIN. Descomprima gratis, es un poco más feo.Entrada de ejemplo:
Salida:
fuente
getc
tiene el prefijoSTDIN.
(seis caracteres más).For any valid input, applying the program to its own output must exactly reproduce the original input; i.e., program (program (i, s)) = (i, s).
pero solo costaría 1 carácter arreglar eso.Perl,
453443309307303299Casos de prueba:
He probado con éxito los casos de prueba (a), (b), (c) y (d) proporcionados en el OP.
Una versión * algo * más legible:
fuente
qw(bub kut ... yak zuz)
a(bub,kut ... yak,zuz)
), también puedes reemplazarlokeys%x
con@b
(ya que sabes a qué se deben las claves$x
). Un pequeño cambio para salvar a otros tres es$1eq uc($1)
hacerlouc$1eq$1
. También puede soltar el+
antes!
de la impresión para que ese byte adicional lo lleve a 443. Espero que todo sea válido, ¡he probado casos de prueba limitados!uc$1eq$1
podría ser asíuc$1 eq$1
, pero no estoy seguro ... ¡Lo siento si eso está mal!APL (Dyalog) (372)
Realmente se puede decir que APL no tiene funciones integradas de manejo de cadenas (excepto las genéricas). Tuve que escribir el mío
tolower
(esL
). Como siempre con Dyalog APL multilínea, para probarlo, péguelo en una ventana de edición y luego llámelo (T
).Uso:
fuente
Tcl,
395394392Notas:
skwerruddud
pararrd
.skwereskweree
paraaaaaa
.Entrada de ejemplo:
Salida:
Cómo funciona:
m
es al principio una cadenaঙ
).fuente
\ufff
Iirc. Realmente no importa. Cualquier personaje que no sea ascii lo haría.\u999
. Como dije, lo único importante era: no un personaje ascii.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
no se mencionaSKWER
.Perl 385
El resaltador de sintaxis odia este ...
Espera entrada en STDIN, el formato es
0 (or 1) String to convert here.
:Editar : He notado un problema con la traducción de X (se convierte en 'aks' en la reversión, lo investigaré más tarde. Es posible que deba volver a ordenar el hash :(.
fuente
GNU Sed, 514
Probablemente podría acortarse, aunque he terminado por ahora.
Utiliza una tabla de búsqueda para manejar las conversiones en ambas direcciones, debe manejar todas las excepciones, incluido el caso de skwer y ruddud / RUDDUD correctamente.
entrada tomada en cada línea como 0/1 seguida de la cadena. Usos
\v
(pestaña vertical) como cursor.fuente