Ratetodテキストfexir


14

私はvewolsがratetodであるように見えるこの奇妙なテキストをhevaします:

私はひどく書かれたテキストです。一部の狂人は母音の順序で遊んだ。私を修正してください!

だから私はテキストがraadeble agianであるように戻ってvewols(と思われるように「y」文字)に評価することができるpragromが必要になるでしょう。

Ouyは、ouyr chieco privedod ouy meka a cempleto pragrom(単なるfinctounではない)のlungaegaを選択できます。yntreは、アンピットフィールド、テキストフェリ、またはカモンドレニです。ouy lekiとしてのuutpot mya olsa vyra。

cuersoの私はyna pragrom uutpitongの悪いテキストをアンビリします。merags text ouy can endarstundできないpragromにはvuleaはありません。しかし、ouyは、必要に応じて、ratetodテキストでouyr cemmontsとqeistounsを作成できます。


明確化

  • プログラムは、ASCIIテキストを処理するためにのみ必要です。
  • この質問の目的上、次の文字は母音です。 aeiouy
  • 各単語内の母音の位置を回転させる必要があります。単語として適格なものを決定する際にある程度の柔軟性があります:最小要件は、スペースで区切られた2つの文字が異なる単語にあり、アルファベット文字a-zA-Zのみで区切られた2つのアルファベット文字()が同じ単語にあることです。
  • 回転の望ましい方向は、以下のテストケースから推測する必要があります。

テストケース

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

入力:AeiOuy
出力:EioUya

入力:Hyphenated-word
出力:Hephanetyd-wordまたはHephanetod-wyrd


1
母音を定義します
ピーターテイラー

5
このセントオックストで「保存」します。
ハワード

2
質問は意図的に不透明です。いくつかの可能な定義があることを考えると(特にaeiouAEIOU、ASCII / Basic Latinに対応する10個のコードポイントのみ;それらのコードポイントに加えて、発音区別記号と組み合わせたこれらの基本文字を含むBasic LatinおよびLatin-1 Supplementのその他) 、質問は明示的でなければなりません。
ピーターテイラー

1
@PeterTaylor私はASCIIを仮定
ジョンドヴォルザーク

8
ゲームは問題を推測することではありません。FAQを参照してください。「このサイトのすべての質問は、プログラミングパズルであれコードゴルフであれ、正しい提出物を構成するものの明確な仕様です。」
ピーターテイラー

回答:


6

GolfScript、68 67 57文字

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

入力はSTDINで指定する必要があります。例(オンライン):

> 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

ルビー、91 90文字

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

Coffeescript、148文字

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

「holf-cerract」は言葉であり、私のスリトゥーンではないことを除いて、ussimtoansはいません。

テスト:

> 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コードについて:1)2 $&番目のgsub()ブロックのyパラメーターの代わりに2文字を使用します。2)の?Z代わりにを使用して1文字をスペアし'Z'ます。
マナトワーク

@manatwork $&は、使用する前に変更されるため使用できません。z=$'[r]それを変更します。に関して?Z-ありがとう、私はこの構文を完全に忘れていました。
ジョンドボラック

おっとっと。作品に登場して、私は昨日、それをテストする方法は考えていない...
manatwork

2

Haskell、159文字

期待したほど短くはありませんでしたが、とにかく投稿することにしました。

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

ゴルフされていないバージョン:

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

これは、遅延評価を使用してクールなトリックを実行できる方法の良い例です。ではrotateVowels、新しい母音が見つかるたびに左に渡され、右から来る母音に置き換えられます。フォールドからの出力のこの部分は、左端の母音が右端の母音の代わりになるように、入力としてフィードバックされます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.