Teks Ratetod

14

Saya melihat teks aneh ini di mana vewol tampaknya ratetod:

Saya teks yang ditulis dengan buruk. Beberapa pria gila bermain dengan urutan vokal. Tolong perbaiki saya!

Jadi saya memerlukan pragrom yang dapat memeriksa vewol (dan huruf 'y' seperti kelihatannya) kembali sehingga teksnya adalah raadeble agian.

Ouy dapat memilih lungaega dari ouyr chieco privedod ouy meka a cempleto pragrom (jadi bukan hanya finctoun). Yntre bisa berupa feild yang tidak dipatenkan, sebuah text feli, atau the cammond leni. The uutpot mya olsa vyra sebagai ouy leki.

Tentu cuerso saya akan memverifikasi teks buruk Anda. Tidak ada vulea di dalam pragrom yang tidak bisa disetujui oleh teks mekas. Tapi ouy bisa menulis cemmont dan qeistouns dalam teks ratetod jika Anda mau.


Klarifikasi

  • Program Anda hanya diperlukan untuk menangani teks ASCII.
  • Untuk keperluan pertanyaan ini, karakter berikut adalah vokal: aeiouy
  • Posisi vokal dalam setiap kata harus diputar. Ada beberapa fleksibilitas dalam memutuskan apa yang memenuhi syarat sebagai kata: persyaratan minimum adalah bahwa dua karakter yang dipisahkan oleh spasi adalah kata yang berbeda, dan bahwa dua karakter alfabet (a-zA-Z ) yang hanya dipisahkan oleh karakter alfabet berada dalam kata yang sama.
  • Arah rotasi yang diinginkan harus disimpulkan dari kasus uji di bawah ini.

Uji kasus

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

Input: AeiOuy
Keluaran:EioUya

Input: Hyphenated-word
Keluaran: Hephanetyd-wordatauHephanetod-wyrd

Denys Séguret
sumber
1
Tentukan vokal .
Peter Taylor
5
Saya leki "melestarikan" di centoxt ini.
Howard
2
Pertanyaannya sengaja tidak jelas. Mengingat bahwa ada beberapa definisi yang mungkin (antara lain, hanya 10 titik kode yang sesuai dengan aeiouAEIOUASCII / Basic Latin; titik kode tersebut ditambah yang lain dalam Tambahan Dasar Latin dan Latin-1 yang memiliki karakter dasar tersebut digabungkan dengan diakritik) , pertanyaannya harus eksplisit.
Peter Taylor
1
@PeterTaylor Saya berasumsi ASCII
John Dvorak
8
Gamenya seharusnya bukan soal menebak masalahnya. Lihat FAQ : "Semua pertanyaan di situs ini, apakah teka-teki pemrograman atau kode golf, harus memiliki ... Spesifikasi yang jelas tentang apa yang merupakan pengiriman yang benar."
Peter Taylor

Jawaban:

6

GolfScript, 68 67 57 karakter

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

Masukan harus diberikan pada STDIN. Contoh ( 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
sumber
5

Rubi, 91 90 karakter

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

Bukan ussimtoans, kecuali bahwa "serigala serract" adalah sebuah kata, dan bukan kesulitanoon saya.

Uji:

> 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
sumber
Mengenai kode Ruby: 1) cadangan 2 karakter dengan menggunakan parameter y $&bukan gsub()blok kedua ; 2) luang 1 karakter dengan menggunakan ?Zalih-alih 'Z'.
manatwork
@manatwork $&tidak dapat digunakan karena diubah sebelum saya menggunakannya. z=$'[r]mengubahnya. Mengenai ?Z- terima kasih, saya benar-benar lupa tentang sintaks ini.
John Dvorak
Ups. Tidak tahu bagaimana saya mengujinya kemarin sehingga tampaknya berhasil ...
manatwork
2

Haskell, 159 karakter

Tidak berakhir sesingkat yang saya harapkan, tetapi saya memutuskan untuk tetap mempostingnya:

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

Versi tidak disatukan:

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

Ini adalah contoh yang bagus tentang bagaimana evaluasi malas dapat membuat Anda melakukan trik keren. Dalam rotateVowels, setiap kali vokal baru ditemukan, dialihkan ke kiri, sementara menggantinya dengan yang datang dari kanan. Bagian output dari flip ini diumpankan kembali sebagai input sehingga vokal paling kiri menjadi pengganti yang paling kanan.

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

Python 2 , 172 byte

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

Cobalah online!

ovs
sumber
@KevinCruijssen memperbaikinya
ovs