Fexir tekstu ratetod

14

Mam dziwny tekst, w którym vewols wydają się być ratetod:

Jestem źle napisanym tekstem. Jakiś szalony facet grał w kolejności samogłosek. Proszę mnie naprawić!

Potrzebowałbym więc pragromu, który może cofnąć vevols (i literę „y”, jak się wydaje), aby tekst był raadeble agian.

Ouy can choeso the lungaega of ouyr chieco privedod ouy meka a cempleto pragrom (więc nie tylko finctoun). Yntre może być nieprzyzwoitą cechą, tekstowym feli lub cammond leni. The uutpot mya olsa vyra as ouy leki.

O cuerso będę kowadł yna pragrom uutpitong złe teksty. W pragromie nie ma vulei, której teksty Mekas nie mogą się powtórzyć. Ale ouy może wreti ouyr cemmonts i qeistouns w tekstach ratetod, jeśli chcesz.


Wyjaśnienia

  • Twój program jest wymagany tylko do obsługi tekstu ASCII.
  • Do celów tego pytania następującymi znakami są samogłoski: aeiouy
  • Pozycje samogłosek w każdym słowie powinny zostać obrócone. Istnieje pewna elastyczność w podejmowaniu decyzji, co kwalifikuje się jako słowo: minimalnym wymogiem jest, aby dwa znaki oddzielone spacją były w różnych słowach, a dwa znaki alfabetyczne ( a-zA-Z) oddzielone tylko znakami alfabetycznymi znajdowały się w tym samym słowie.
  • Pożądany kierunek obrotu należy wywnioskować z poniższych przypadków testowych.

Przypadki testowe

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

Wejście: AeiOuy
Wyjście:EioUya

Wejście: Hyphenated-word
Wyjście: Hephanetyd-wordlubHephanetod-wyrd

Denys Séguret
źródło
1
Zdefiniuj samogłoskę .
Peter Taylor,
5
I leki „zachowują” w tym centoksie.
Howard
2
Pytanie jest celowo nieprzejrzyste. Biorąc pod uwagę, że istnieje kilka możliwych definicji (między innymi tylko 10 punktów kodowych odpowiadających aeiouAEIOUw ASCII / Basic Latin; te punkty kodowe oraz wszelkie inne w Basic Latin i Latin-1 Supplement, które mają te podstawowe znaki połączone ze znakiem diakrytycznym) pytanie powinno być jednoznaczne.
Peter Taylor,
1
@PeterTaylor Zakładam ASCII
John Dvorak
8
Gra nie powinna polegać na odgadywaniu problemu. Zobacz często zadawane pytania : „Wszystkie pytania na tej stronie, czy to puzzle programistyczne, czy golf kodowy, powinny mieć… Jasną specyfikację tego, co stanowi prawidłowe przesłanie”.
Peter Taylor

Odpowiedzi:

6

GolfScript, 68 67 57 znaków

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

Dane wejściowe należy podać na STDIN. Przykład ( 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
źródło
5

Ruby, 91 90 znaków

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

Coffeescript, 148 znaków

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

Żadnych usstoan, oprócz tego, że „holf-cerract” to słowo, a nie mój sulitoon.

Test:

> 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
źródło
W odniesieniu do kodu Ruby: 1) oszczędź 2 znaki, używając $&zamiast gsub()parametru y drugiego bloku; 2) oszczędzić 1 postać, używając ?Zzamiast 'Z'.
manatwork
$&Nie można użyć @manatwork, ponieważ został zmieniony przed użyciem. z=$'[r]zmienia to. Odnośnie ?Z- dzięki, całkowicie zapomniałem o tej składni.
John Dvorak,
Ups Nie mam pojęcia, jak go wczoraj przetestowałem, więc wydawało się, że działa…
manatwork
2

Haskell, 159 znaków

Nie skończyło się tak krótko, jak się spodziewałem, ale mimo to postanowiłem opublikować:

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

Wersja bez golfa:

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

To dobry przykład tego, jak leniwa ocena pozwala robić fajne sztuczki. Za rotateVowelskażdym razem, gdy zostanie znaleziona nowa samogłoska, jest ona przekazywana w lewo, zastępując ją tą, która pochodzi z prawej. Ta część danych wyjściowych ze zgięcia jest zwracana jako dane wejściowe, tak że samogłoska znajdująca się najbardziej po lewej stronie zastępuje prawą.

(vowel, result) = foldr step (vowel, []) word
 ^^^^^                        ^^^^^
 this part of the output      is part of the input
hammar
źródło
1

Python 2 , 172 bajty

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

Wypróbuj online!

ovs
źródło
@KevinCruijssen naprawić go
OVS