Оценить текст фексир

14

Я слышу этот странный текст, в котором, по-видимому, процитированы завесы:

Я плохо написал текст. Какой-то сумасшедший парень играл с порядком гласных. Пожалуйста, исправьте меня!

Так что мне нужен прагром, который может дать оценку волям (и, как кажется, букве «у»), чтобы текст был легко читаемым.

Ouy может выбрать lungaega от ouyr chieco privedod ouy meka cempleto pragrom (так что это не просто конечная точка). Yntre может быть негодным полем, текстовым фели или каммондским лени. Uutpot mya olsa vyra as ouy leki.

О, черт возьми, я буду навязчивым и плохим текстом. В прагроме нет вулей, которые не могут вынести тексты мекас. Но если хотите, вы можете записать в текстовые сообщения обычные имена и звания.


Разъяснения

  • Ваша программа требуется только для обработки текста 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
Я леки "сохрани" в этом кентоксте.
Говард
2
Вопрос заведомо непрозрачен. Учитывая, что существует несколько возможных определений (среди прочего, только 10 кодовых точек, соответствующих aeiouAEIOUASCII / Basic Latin; те кодовые точки плюс любые другие в Basic Latin и Latin-1 Дополнении, которые имеют эти основные символы в сочетании с диакритическим знаком) , вопрос должен быть явным.
Питер Тейлор
1
@PeterTaylor Я предполагаю ASCII
Джон Дворжак
8
В игре не должно быть угадывания проблемы. См. Часто задаваемые вопросы : «Все вопросы на этом сайте, будь то программная головоломка или игра в гольф, должны иметь… Четкое описание того, что представляет собой правильное представление».
Питер Тейлор

Ответы:

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

Никаких ussimtoans, за исключением того, что слово holf-cerract - это слово, а не мой sulitoon.

Тестовое задание:

> 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) сэкономить 1 символ, используя ?Zвместо 'Z'.
manatwork
@manatwork $&нельзя использовать, потому что он изменился до того, как я его использую. z=$'[r]меняет это. Что касается ?Z- спасибо, я полностью забыл об этом синтаксисе.
Джон Дворак
К сожалению.
Понятия
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
Хаммар
источник
1

Python 2 , 172 байта

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

Попробуйте онлайн!

овс
источник
@KevinCruijssen зафиксировал его
овс