language-agnostic code-golf rosetta-stone

language agnostic - Codigo Golf: Cerdo Latino



language-agnostic code-golf (15)

Haskell: 244 199 222 214 caracteres

La solución proporciona una capitalización razonable a las palabras transformadas basadas en las mayúsculas originales. Ahora maneja adecuadamente los grupos principales de consonantes. Nota: no se incluye nueva línea al final de la última línea.

import Data.Char import Data.List q(x:y,z)|w x=x%(z++toLower x:y++"ay")|0<1=x:y++z q(_,z)=z++"way" x%(y:z)|isUpper x=toUpper y:z|0<1=y:z w=isAlpha main=interact$(>>=q.break(`elem`"aeiouAEIOU")).groupBy((.w).(==).w)

Entrada de prueba:

Did the strapping man say: "I am Doctor X!"?

Salida de prueba:

Idday ethay appingstray anmay aysay: "Iway amway Octorday Xay!"?

Reto:

Toma una oración de entrada de cualquier longitud y convierte todas las palabras de esa oración a cerdo latino. Si no sabes qué es el cerdo latino, lee Wikipedia: cerdo latino .

Presupuesto:

  1. Supongamos que todas las palabras están separadas por espacios y todas las oraciones terminan con una exclamación, un signo de interrogación o un punto.

  2. No utilice la variante para las vocales mencionadas en Wikipedia.

  3. Para palabras como pan y cuestionario, es perfectamente aceptable que se lean en voz alta, uizqay en lugar de eadbray e izquay.

  4. Las funciones o métodos son perfectamente aceptables. En otras palabras, no es necesario que tome la entrada del usuario, pero debe mostrar la salida del usuario.

  5. Supongamos que ninguna entrada contiene una palabra compuesta.

Ejemplo:

Input: I am a happy man. Output: Iway amway away appyhay anmay.

Cómo ganar:

El ganador es la persona que puede escribir un programa que hará el desafío con la menor cantidad de caracteres.


Lua, 109 caracteres

print((io.read():gsub("(%A*)([^AEIOUaeiou]*)(%a+)",function(a,b,c)return a..c..b..(#b<1 and"way"or"ay")end)))

Entrada:

To be honest, I would say "No!" to that question.

Salida:

oTay ebay onesthay, Iway ouldway aysay "oNay!" otay atthay uestionqay.


DO# 257 96 caracteres

Versión legible:

string.Join(" ", args.Select(y => ("aeiouAEIOU".Contains(y[0]) ? y + "way" : y.Substring(1) + y[0] + "ay") ) );

Condensado

string.Join(" ",args.Select(y=>("aeiouAEIOU".Contains(y[0])?y+"way":y.Substring(1)+y[0]+"ay")));

Entrada:

LINQ me ayuda a escribir buenas respuestas de golf

Salida:

INQLay elpshay emay riteway oodgay olfgay answerswayway


GolfScript - 60 53 52 51 49 46 caracteres

)]('' ''/{1/(."AEIOUaeiou"-!{/119}*"ay "}%));+/+


Groovy, 117 100 91 85 83 79 caracteres

print args[0].replaceAll(/(?i)/b(/w*?)([aeiou]/w*)/,{a,b,c->c+(b?b:''w'')+"ay"})

Versión legible:

print args[0] .replaceAll( /(?i)/b(/w*?)([aeiou]/w*)/ , { a, b, c -> c + ( b ? b : ''w'' ) + "ay" })


Perl 87 , 56 , 47 caracteres

Trabaja con puntuación.

Gracias a mobrule.

s//b[aeiou]/w*/w$&/gi;s//b(/w)(/w*)//2/1ay/g

Uso:

echo ''I, am; a: happy! man.'' | perl -p piglatin.pl

Salida:

Iway, amway; away: appyhay! anmay.


Perl, 70 caracteres

Para hacer rodar la pelota:

while(<>){for(split){s/^([^aeiou]+)(.*)/$2$1ay / or $_.=''way '';print}}

Estoy seguro de que se puede mejorar en alguna parte.


Python - 107 caracteres

i=raw_input() print" ".join(w+"way"if w[0]in"aeiouyAEIOUY"else w[1:]+w[0]+"ay"for w in i[:-1].split())+i[-1]


Python 3 - 107 106 caracteres

No se conserva el uso de mayúsculas , como se permite en el comentario. Pero las puntuaciones se conservan. Los espacios en blanco y los saltos de línea se agregan solo para facilitar la lectura (por lo tanto ; después de la import re ).

import re; print(re.sub(''(?i)//b(qu|[^aeiou/W]*)(/w*)'', lambda m:m.group(2)+(m.group(1)or''w'')+''ay'', input()))

Se pueden eliminar 3 caracteres ( qu| ) si no manejamos las palabras "qu".

Ejemplo de uso:

$ python3.1 x.py The "quick brown fox" jumps over: the lazy dog. eThay "ickquay ownbray oxfay" umpsjay overway: ethay azylay ogday.


Python 3 - 100 103 106 caracteres

(similar a la de KennyTM; la expresión regular hace la diferencia aquí).

import re;print(re.sub(''(?i)(y|qu|/w*?)([aeiouy]/w*)'',lambda m:m.group(2)+(m.group(1)or''w'')+''ay'',input()))

Nota: pasó de 100 a 103 caracteres debido a la modificación de la expresión regular para dar cuenta de "qu".

Nota 2: Resulta que la versión de 103 caracteres falla cuando se usa "y" para un sonido de vocal. Bleh (Por otro lado, la versión de 106 caracteres de KennyTM también falla cuando se usa "y" para un sonido de vocal, por lo que sea).


Ruby 1.9+: 63 62 caracteres

Sólo una respuesta rápida, probablemente se puede acortar más

p gets.gsub(//w+/){|e|"#{e=~/^(qu|[^aeiou]+)/i?$''+$&:e+?w}ay"}

maneja el caso de la qu (pregunta => estionquay), e imprime con dobles qoutes. 3 bytes más para deshacerse de ellos (digo ninguna especificación sobre esto)

Edición 1: si usar Ruby 1.9 guarda un carácter ( ?w ), vamos a usarlo.


sed - 53/55 45/47 caracteres

Con la opción -r (2 + 43):

s//b[aeiou]/w*/w&/gi;s//b(/w)(/w*)//2/1ay/g

Sin la opción -r (47):

s//b[aeiou]/w*/w&/gi;s//b/(/w/)/(/w*/)//2/1ay/g


Boo (.NET): 91 caracteres

El mismo concepto que VB.NET responde, solo usa Boo para guardar algunas pulsaciones de teclas.

print /(?i)/b([^aeiou/s])(/S*)/.Replace(/(?i)/b([aeiou]/S*)/.Replace(s, "$1way"), "$2$1ay")

Vaya ... Acabo de darme cuenta de que esto no controla la puntuación final. O en realidad cualquier puntuación. Oh, bueno, tampoco muchas de las otras soluciones.


VB.NET: 106 caracteres

Asume que "s" es la entrada y también Imports System.Text.RegularExpressions . (Curiosamente, debido a la necesidad del prefijo literal @ cadena y el punto y coma final, esta versión de VB.NET supera al C # equivalente en 3 caracteres).

Return Regex.Replace(Regex.Replace(s, "(?i)/b([aeiou]/S*)", "$1way"), "(?i)/b([^aeiou/s])(/S*)", "$2$1ay")


PHP 102 bytes

<?foreach(split(~ß,SENTENCE)as$a)echo($b++?~ß:'''').(strpos('' aeuio'',$a[0])?$a.w:substr($a,1).$a[0]).ay;

PHP con uso de preg 80 bytes.

<?=preg_filter(''#/b(([aioue]/w*)|(/w)(/w*))/b#ie'',''"$2"?$2way:$4$3ay'',SENTENCE);