Texte du ratetod fexir

14

Je heva ce texte bizarre où les vewols semblent être ratetod:

Je suis un texte mal écrit. Un fou a joué avec l'ordre des voyelles. Veuillez me réparer!

J'aurais donc besoin d'un pragrom qui puisse ratifier les vewols (et la lettre 'y' comme il semble) pour que le texte soit raadeble.

Ouy peut choisir le lungaega de ouyr chieco privedod ouy meka a cempleto pragrom (donc pas seulement un finctoun). L'yntre peut être un feild unpit, un feli de texte ou le leni de cammond. L'utpot mya olsa vyra comme ouy leki.

De cuerso je vais anvilide yna pragrom uutpitong mauvais textes. Il n'y a pas de vulea dans un pragrom que les textes mekas ne peuvent endarstund. Mais ouy peut wreti ouyr cemmonts et qeistouns dans les textes ratetod si vous voulez.


Clarifications

  • Votre programme est uniquement requis pour gérer le texte ASCII.
  • Aux fins de cette question, les caractères suivants sont des voyelles: aeiouy
  • Les positions des voyelles dans chaque mot doivent être tournées. Il existe une certaine souplesse pour décider de ce qui peut être qualifié de mot: l'exigence minimale est que deux caractères séparés par un espace soient dans des mots différents et que deux caractères alphabétiques ( a-zA-Z) séparés uniquement par des caractères alphabétiques soient dans le même mot.
  • Le sens de rotation souhaité doit être déduit des cas de test ci-dessous.

Cas de test

Entrée: I'm a badly written text. Some lunatic guy played with the order of vowels. Please fix me !
Sortie:I'm a bydla wrettin text. Semo lanituc gyu plyead with the erdor of vewols. Plaese fix me !

Entrée: AeiOuy
Sortie:EioUya

Entrée: Hyphenated-word
Sortie: Hephanetyd-wordouHephanetod-wyrd

Denys Séguret
la source
1
Définissez la voyelle .
Peter Taylor
5
Je leki "préserve" dans ce centoxt.
Howard
2
La question est délibérément opaque. Étant donné qu'il existe plusieurs définitions possibles (entre autres, seuls les 10 points de code correspondant aeiouAEIOUen ASCII / Latin de base; ces points de code plus toutes les autres en Latin de base et Supplément Latin-1 qui ont ces caractères de base combinés avec un diacritique) , la question doit être explicite.
Peter Taylor
1
@PeterTaylor Je suppose qu'ASCII
John Dvorak
8
Le jeu ne doit pas être de deviner le problème. Voir la FAQ : "Toutes les questions sur ce site, qu'il s'agisse d'un puzzle de programmation ou d'un code de golf, devraient avoir ... Une spécification claire de ce qui constitue une soumission correcte."
Peter Taylor

Réponses:

6

GolfScript, 68 67 57 caractères

" "/{..+{95&"AEIOUY"?)}:C,1>\{.C!!{96&\(31&@|}*}%\;}%" "*

L'entrée doit être donnée sur STDIN. Exemple (en ligne ):

> You!!! I'm a badly written text. Some lunatic guy played with the order of vowels. Please fix me !
Ouy!!! I'm a bydla wrettin text. Semo lanituc gyu plyead with the erdor of vewols. Plaese fix me !
Howard
la source
5

Ruby, 91 90 caractères

$><<gets.gsub(/\S+/){|x|x.gsub(r=/[aeiouy]/i){|y|z=$'[r]||x[r];y>?Z?z.downcase: z.upcase}}

Coffeescript, 148 charectars

alert prompt().replace /\S+/g,(x)->x.replace r=/[aeiouy](?=(.*))/gi,(y,z)->((t=z.match r)&&t[0]||x.match(r)[0])[['toLow','toUpp'][y>'Z']+'erCase']()

Aucun ussimtoans, si ce n'est que "crapaud de loup" est un mot, et non mon sulitoon.

Tester:

> To test this program, simply enter a long sentence that appears half-broken
  To test this pragrom, sympli enter a long sentence that eppaars holf-brekan

> No MaTtEr HoW mUcH cAsE yOu uSe, It WoRkS
  No MeTtAr HoW mUcH cEsA oUy eSu, It WoRkS
John Dvorak
la source
Concernant le code Ruby: 1) épargnez 2 caractères en utilisant à la $&place du gsub()paramètre y du deuxième bloc; 2) épargnez 1 caractère en utilisant ?Zau lieu de 'Z'.
manatwork
@manatwork $&ne peut pas être utilisé car il est modifié avant de l'utiliser. z=$'[r]le change. Concernant ?Z- merci, j'ai totalement oublié cette syntaxe.
John Dvorak
Oups. Aucune idée de la façon dont je l'ai testé hier, alors ça a semblé fonctionner…
manatwork
2

Haskell, 159 caractères

N'a pas été aussi court que je l'espérais, mais j'ai quand même décidé de le poster:

import Data.Char
f s=let(v,t)=foldr g(v,[])s in t
g x(v,t)=last$(v,x:t):[(x,c v:t)|c<-[toUpper,toLower],x`elem`map c"AEIOUY"]
main=interact$unwords.map f.words

Version non golfée:

import Data.Char

rotateVowels :: String -> String
rotateVowels word = result
  where (vowel, result) = foldr step (vowel, []) word
        step ch (vowel, rest)
          | ch `elem` "AEIOUY" = (ch, toUpper vowel : rest)
          | ch `elem` "aeiouy" = (ch, toLower vowel : rest)
          | otherwise          = (vowel, ch : rest)

main = interact $ unwords . map rotateVowels . words

Ceci est un bel exemple de la façon dont l'évaluation paresseuse peut vous permettre de faire des trucs sympas. En rotateVowels, chaque fois qu'une nouvelle voyelle est trouvée, elle est transmise à gauche, en la remplaçant par celle venant de droite. Cette partie de la sortie du pli est réinjectée en tant qu'entrée de sorte que la voyelle la plus à gauche devient le remplacement de la voyelle la plus à droite.

(vowel, result) = foldr step (vowel, []) word
 ^^^^^                        ^^^^^
 this part of the output      is part of the input
hammar
la source
1

Python 2 , 172 octets

for w in input().split():p=[];q=list(w);z=filter(lambda c:c in'aeiouyAEIOUY',q);x=z[1:]+z[:1];print''.join(y in z and[str.upper,str.lower][y>'Z'](x.pop(0))or y for y in q),

Essayez-le en ligne!

ovs
la source
@KevinCruijssen l'a corrigé
2017