Fexir di testo Ratetod


14

Ho scritto questo strano testo in cui i vewols sembrano essere ratetod:

Sono un testo scritto male. Qualche matto giocava con l'ordine delle vocali. Per favore, aggiustami!

Quindi avrei bisogno di un pragramma in grado di ricambiare i vewols (e la lettera 'y' come sembra) in modo che il testo sia agian irraggiungibile.

Ouy può scegliere la lungaega di ouyr chieco privedod ouy meka a cempleto pragrom (quindi non solo un finctoun). Lo yntre può essere un feild unpit, un feli di testo o il cammond leni. L'utility mya olsa vyra nel ruolo di ouy leki.

Di cuerso inculterò yna pragrom tra i cattivi testi. Non c'è vulea in un pragrom che i testi di Mekas non possono essere scoperti. Ma ouy può scrivere ouyr cemmonts e qeistouns in testi ratetod se lo desidera.


chiarimenti

  • Il tuo programma è richiesto solo per gestire il testo ASCII.
  • Ai fini di questa domanda, i seguenti caratteri sono vocali: aeiouy
  • Le posizioni delle vocali all'interno di ogni parola devono essere ruotate. C'è una certa flessibilità nel decidere ciò che si qualifica come una parola: il requisito minimo è che due caratteri separati da uno spazio siano in parole diverse e che due caratteri alfabetici ( a-zA-Z) separati solo da caratteri alfabetici siano nella stessa parola.
  • La direzione di rotazione desiderata dovrebbe essere desunta dai casi di test seguenti.

Casi test

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

Ingresso: AeiOuy
Uscita:EioUya

Input: Hyphenated-word
Output: Hephanetyd-wordoHephanetod-wyrd


1
Definisci la vocale .
Peter Taylor,

5
Leki "preservare" in questo centoxt.
Howard,

2
La domanda è volutamente opaca. Dato che ci sono diverse possibili definizioni (tra le altre, solo i 10 punti di codice corrispondenti a aeiouAEIOUASCII / Latino di base; quei punti di codice più tutti gli altri nel Supplemento di base latino e latino-1 che hanno quei caratteri di base combinati con un segno diacritico) , la domanda dovrebbe essere esplicita.
Peter Taylor,

1
@PeterTaylor Presumo ASCII
John Dvorak il

8
Il gioco non dovrebbe riguardare l'ipotesi del problema. Vedi le FAQ : "Tutte le domande su questo sito, che si tratti di un puzzle di programmazione o di un codice golf, dovrebbero avere ... Una chiara specifica di ciò che costituisce una presentazione corretta."
Peter Taylor,

Risposte:


6

GolfScript, 68 67 57 caratteri

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

L'ingresso deve essere dato su STDIN. Esempio ( 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 !

5

Rubino, 91 90 caratteri

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

Caffè, 148 carectars

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

Nessun ussimtoan, tranne che "lupo-cerratta" è una parola, e non il mio solitoon.

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

Per quanto riguarda il codice Ruby: 1) risparmia 2 caratteri usando $&invece il gsub()parametro y del secondo blocco; 2) risparmia 1 carattere usando ?Zinvece di 'Z'.
arte

@manatwork $&non può essere utilizzato perché è stato modificato prima di utilizzarlo. z=$'[r]lo cambia. Per quanto riguarda ?Z- grazie, mi sono completamente dimenticato di questa sintassi.
John Dvorak,

Ops. Non ho idea di come l'ho provato ieri, quindi sembrava funzionare ...
Manatwork

2

Haskell, 159 caratteri

Non è finito abbastanza breve come speravo, ma ho deciso di pubblicarlo comunque:

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

Versione non golfata:

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

Questo è un bell'esempio di come la valutazione pigra può farti trucchi interessanti. In rotateVowels, ogni volta che viene trovata una nuova vocale, questa viene passata a sinistra, mentre la sostituisce con quella proveniente da destra. Questa parte dell'output dalla piega viene restituita come input in modo che la vocale più a sinistra diventi la sostituzione di quella più a destra.

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

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

Provalo online!


@KevinCruijssen ha risolto il problema
ovs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.