Ratetod Text fexir

14

Ich habe diesen seltsamen Text, in dem vewols ratetod zu sein scheinen:

Ich bin ein schlecht geschriebener Text. Ein verrückter Typ spielte mit der Ordnung der Vokale. Bitte reparieren Sie mich!

Ich würde also ein Pragrom brauchen, das die vewols (und den 'y'-Buchstaben, wie es scheint) zurücksetzen kann, so dass der Text wieder raadeble ist.

Ouy kann die Lungaega von ouyr chieco privedod ouy meka ein cempleto pragrom (also nicht nur ein finctoun) wählen. Das Yntre kann ein Unpit Feild, ein Text Feli oder das Cammond Leni sein. Der Ausgang mya olsa vyra as ouy leki.

Natürlich werde ich schlechte Texte vereiteln. Es gibt keine Vulea in einem Pragrom, die Mekas-Texte nicht enden können. Aber Sie können Ihre Cemmonts und Qeistouns in ratetod-Texten schreiben, wenn Sie möchten.


Klarstellungen

  • Ihr Programm muss nur ASCII-Text verarbeiten.
  • Für die Zwecke dieser Frage sind die folgenden Zeichen Vokale: aeiouy
  • Die Positionen der Vokale in jedem Wort sollten gedreht werden. Es gibt eine gewisse Flexibilität bei der Entscheidung, was als Wort zu qualifizieren ist: Die Mindestanforderung besteht darin, dass zwei durch ein Leerzeichen getrennte Zeichen in unterschiedlichen Wörtern vorkommen und dass zwei alphabetische Zeichen ( a-zA-Z), die nur durch alphabetische Zeichen getrennt sind, im selben Wort vorkommen.
  • Die gewünschte Drehrichtung ist den nachfolgenden Testfällen zu entnehmen.

Testfälle

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

Eingabe: AeiOuy
Ausgabe:EioUya

Eingabe: Hyphenated-word
Ausgabe: Hephanetyd-wordoderHephanetod-wyrd

Denys Séguret
quelle
1
Definieren Sie den Vokal .
Peter Taylor
5
Ich leki "bewahren" in diesem centoxt.
Howard
2
Die Frage ist bewusst undurchsichtig. Angesichts der Tatsache, dass es mehrere mögliche Definitionen gibt (unter anderem nur die 10 Codepunkte, die aeiouAEIOUin ASCII / Basic Latin entsprechen; die Codepunkte plus alle anderen in Basic Latin und Latin-1 Supplement, bei denen diese Grundzeichen mit einem diakritischen Zeichen kombiniert sind) sollte die Frage explizit sein.
Peter Taylor
1
@ Peter Taylor Ich nehme ASCII
John Dvorak
8
Im Spiel sollte es nicht darum gehen, das Problem zu erraten. Lesen Sie die FAQ : "Alle Fragen auf dieser Site, egal ob Programmierpuzzle oder Codegolf, sollten ... eine klare Angabe darüber enthalten, was eine korrekte Einreichung ausmacht."
Peter Taylor

Antworten:

6

GolfScript, 68 67 57 Zeichen

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

Die Eingabe muss auf STDIN erfolgen. Beispiel ( online ):

> 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
quelle
5

Rubin, 91 90 Zeichen

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

Kaffeeskript, 148 Zeichen

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']()

Keine ussimtoans, außer dass "holf-cerract" ein Wort ist und nicht mein sulitoon.

Prüfung:

> 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
quelle
In Bezug auf den Ruby-Code: 1) Ersparen Sie 2 Zeichen, indem Sie $&anstelle des gsub()y-Parameters des zweiten Blocks verwenden. 2) ersparen Sie 1 Zeichen durch Verwenden von ?Zanstelle von 'Z'.
Manatwork
@manatwork $&kann nicht verwendet werden, da es geändert wird, bevor ich es verwende. z=$'[r]ändert es. In Bezug auf ?Z- danke, ich habe diese Syntax total vergessen.
John Dvorak
Hoppla. Keine Ahnung, wie ich es gestern getestet habe, also schien es zu funktionieren ...
manatwork
2

Haskell, 159 Zeichen

Es war nicht ganz so kurz, wie ich es mir erhofft hatte, aber ich beschloss es trotzdem zu posten:

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

Ungolfed-Version:

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

Dies ist ein schönes Beispiel dafür, wie man bei einer langsamen Auswertung coole Tricks machen kann. In rotateVowelswird jedes Mal , wenn ein neuer Vokal gefunden wird , wird es weitergegeben nach links, während er mit dem von rechts kommenden ersetzen. Dieser Teil der Ausgabe aus der Falte wird als Eingabe zurückgeführt, sodass der Vokal ganz links der Ersatz für den Vokal ganz rechts wird.

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

Python 2 , 172 Bytes

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

Probieren Sie es online!

ovs
quelle
@ KevinCruijssen repariert es
ovs