Ratetod metni fexiri


14

Ben vewols ratetod gibi görünüyor bu garip metin heva:

Kötü yazılmış bir metinim. Bazı deli adam ünlülerin sırası ile oynadı. Lütfen beni düzeltin!

Bu yüzden vewols (ve göründüğü gibi 'y' mektubu) geri oranlandırabilir bir pragrom gerekir böylece metin raadeble agian.

Ouy ouyr chieco privedod ouy meka bir cempleto pragrom lungaega choeso olabilir (bu yüzden sadece bir finctoun değil). Yntre, sabit olmayan bir his, bir metin feli veya cammond leni olabilir. Uutpot mya olsa vyra olarak ouy leki.

Cuerso Of kötü metinler uvarpi yna pragrom anvilid edeceğim. Bir pragromda mekas metinlerinin endarstund edilemeyeceği hiçbir vulea yoktur. Ama ouy, eğer istersen otorat metinlerinde ouyr cemmonts ve qeistoun'ları silebilir.


Açıklamalar

  • Programınızın yalnızca ASCII metnini işlemesi gerekir.
  • Bu sorunun amaçları için, aşağıdaki karakterler sesli harflerdir: aeiouy
  • Sesli harflerin her sözcük içindeki konumları döndürülmelidir. Bir kelime olarak neyin nitelendirildiğine karar verme konusunda esneklik vardır: minimum gereksinim, boşlukla ayrılmış iki karakterin farklı sözcüklerde olması ve a-zA-Zyalnızca alfabetik karakterlerle ayrılmış iki alfabetik karakterin ( ) aynı kelimede olmasıdır.
  • İstenen dönme yönü aşağıdaki test durumlarından çıkarılmalıdır.

Test senaryoları

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

Giriş: AeiOuy
Çıkış:EioUya

Giriş: Hyphenated-word
Çıkış: Hephanetyd-wordveyaHephanetod-wyrd


1
Sesli harfleri tanımlayın .
Peter Taylor

5
Ben bu centoxt içinde "koru" leki.
Howard

2
Soru kasıtlı olarak opak. Birkaç olası tanım olduğu göz önüne alındığında (diğerleri arasında, sadece aeiouAEIOUASCII / Temel Latince'de karşılık gelen 10 kod noktası ; bu kod noktaları artı Temel Latin ve Latin-1 Ekinde bu temel karakterlerin aksan ile birleştirildiği diğer tüm kodlar) , soru açık olmalıdır.
Peter Taylor

1
@PeterTaylor ASCII kabul ediyorum
John Dvorak

8
Oyun sorunu tahmin etmekle ilgili olmamalı. SSS bölümüne bakın : " İster bir programlama bulmacası ister bir kod golfü olsun, bu sitedeki tüm sorular ... Doğru bir sunumu neyin oluşturduğuna dair açık bir spesifikasyona sahip olmalıdır."
Peter Taylor

Yanıtlar:


6

GolfScript, 68 67 57 karakter

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

Giriş STDIN'de verilmelidir. Örnek ( çevrimiçi ):

> 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 !

5

Ruby, 91 90 karakter

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

Kahve, 148 karakter

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

"Usta-cerract" dışında hiçbir ussimtoans bir kelime, benim sulitoon değil.

Ölçek:

> 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

Ruby koduyla ilgili olarak: 1) $&ikinci gsub()bloğun y parametresi yerine kullanarak 2 karakter yedekleyin; 2) ?Zyerine kullanarak 1 karakter yedekleyin 'Z'.
manatwork

@manatwork $&kullanılamaz çünkü kullanmadan önce değiştirilir. z=$'[r]değiştirir. İlgili olarak ?Z- teşekkürler, bu sözdizimini tamamen unuttum.
John Dvorak

Hata. Dün nasıl test
ettiğime

2

Haskell, 159 karakter

Beklediğim kadar kısa olmadı, ama yine de göndermeye karar verdim:

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 sürümü:

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

Bu tembel değerlendirmenin havalı püf noktaları yapmanıza nasıl izin verebileceğinin güzel bir örneğidir. Gelen rotateVowelsher zaman, yeni bir sesli harf sağdan gelen bir değiştirmemiz ederken, sola geçirilir, bulunur. Kapaktaki çıktının bu kısmı giriş olarak geri beslenir, böylece en soldaki sesli harf en sağdaki yerin yerine geçer.

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

1

Python 2 , 172 bayt

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

Çevrimiçi deneyin!


@KevinCruijssen düzelttim
ovs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.