Ratetod Text Fexir


14

나는 vewols가 평가되는 것처럼이 이상한 텍스트를 습격합니다 :

나는 잘못 쓴 글입니다. 어떤 미치광이 남자는 모음 순서로 연주했습니다. 나를 고쳐주세요!

그래서 나는 vewols (그리고 'y'글자)를 다시 평가하여 텍스트가 거칠어 질 수있는 pragrom이 필요합니다.

Ouy는 ouyr chieco privedod ouy meka의 cempleto pragrom (finctoun뿐만 아니라)의 폐가를 choeso 할 수 있습니다. yntre는 unpit feild, text feli 또는 cammond leni 일 수 있습니다. ouy leki로 uutpot mya olsa vyra.

cuerso의 나는 나쁜 텍스트를 모욕 yna pragrom uutpitong합니다. pragrom에는 vulea가 없으며 mekas 텍스트는 무시할 수 없습니다. 그러나 ouy는 원하는 경우 ouyr cemmonts와 qeistouns를 ratetod 텍스트로 작성할 수 있습니다.


설명

  • 프로그램은 ASCII 텍스트 만 처리해야합니다.
  • 이 질문의 목적 상 다음 문자는 모음입니다. aeiouy
  • 각 단어 내 모음의 위치는 회전해야합니다. 단어로 규정되는 항목을 결정하는 데 약간의 유연성이 있습니다. 최소 요구 사항은 공백으로 구분 된 두 문자가 다른 단어에 있고 알파벳 문자 a-zA-Z만으로 구분 된 두 개의 알파벳 문자 ( )가 같은 단어에 있어야합니다.
  • 원하는 회전 방향은 아래 테스트 사례에서 추론해야합니다.

테스트 사례

입력 : 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
나는이 centoxt에서 "보존"을 leki한다.
Howard

2
문제는 의도적으로 불투명합니다. 몇 가지 가능한 정의가 있습니다 ( aeiouAEIOUASCII / Basic Latin에 해당하는 10 개의 코드 포인트 만 해당 코드 포인트와 기본 문자가 분음 부호와 결합 된 Basic Latin 및 Latin-1 Supplement의 다른 코드 포인트) 질문은 분명해야합니다.
피터 테일러

1
@PeterTaylor 나는 ASCII를 가정합니다
John Dvorak

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) $&두 번째 gsub()블록의 y 매개 변수 대신 2자를 사용하여 예비합니다 . 2) ?Z대신을 사용하여 1자를 절약하십시오 'Z'.
manatwork

@manatwork $&는 사용하기 전에 변경되어 사용할 수 없습니다. z=$'[r]그것을 바꿉니다. 에 관하여 ?Z- 감사합니다, 나는 완전히이 구문에 대해 잊어 버렸습니다.
John Dvorak

죄송합니다. 내가 어제 그것을 어떻게 테스트했는지 전혀 모른다. 그래서 작동하는 것처럼 보였다…
manatwork

2

하스켈, 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.