Вы были наняты для написания некоторого кода для приложения для диктовки, которое принимает голосовой ввод из разговорного источника, анализирует его как слова и записывает его на экране.
Руководство на самом деле не доверяет вам всю мощь проекта - вы, к сожалению, весь день сидите и играете в гольф, а не выполняете свою работу, поэтому они просто дают вам действительно простую задачу: Предложение со вставленной пунктуацией в правильно отформатированном предложении, где «правильно отформатированный» определяется ниже.
Предложение - это строка ввода. Слово - это группа случайных непробельных символов. Пунктуация - это Слово, первым символом которого является
^.Слово пишется с большой буквы, если первая буква Слова не строчная (слова с заглавной буквы соответствуют регулярному выражению
/[^a-z].*/).Первое Слово Предложения должно быть написано заглавными буквами.
A
^COMMAявляется запятой,и имеет пробел после, но не перед ним.aaa ^COMMA bbbстановитсяaaa, bbb.А
^COLONэто запятая, которая выглядит так:.А
^SEMICOLONэто запятая, которая выглядит так;.А
^PERIODэто запятая, которая выглядит так.. Слово после a^PERIODдолжно быть написано заглавными буквами.А
^BANGэто период, который выглядит так!.A
^DASHявляется символом тире-и имеет пробел как перед, так и после.A
^HYPHENтакже является символом тире,-но не имеет пробела после или перед ним.Это
^EMDASHдефис (не тире!), Который пишется--.An
^OPENQUOTEявляется символом кавычки,"который имеет пробел перед, но не после. Слово, следующее за,^OPENQUOTEдолжно быть написано заглавными буквами. Если^OPENQUOTEперед словом стоит слово, которое не является пунктуацией, добавьте^COMMAмежду этим словом и^OPENQUOTE. Если^OPENQUOTEперед точкой стоит пунктуация, в которой следующее слово пишется с заглавной буквы, оно переходит^OPENQUOTEк следующему слову.A
^CLOSEQUOTE- орграф,", у которого есть пробел после, но не перед ним. Если^CLOSEQUOTEпредшествует^COMMA,^PERIODили^BANG, что пунктуации исчезает и^CLOSEQUOTEпишется,",."или!"соответственно. Если исчезающая пунктуация указывает на заглавную букву, эта заглавная буква должна все еще встречаться в следующем доступном слове.Начальные или конечные пробелы в полном конечном результате должны быть удалены, и любая строка из двух или более пробелов в строке должна быть свернута в один пробел.
Любой случай, не описанный выше (например,
^COMMA ^COMMAили^SEMICOLON ^CLOSEQUOTEили^UNDEFINEDPUNCTUATION), не будет иметь место в правильно сформированном вводе и, таким образом, будет неопределенным поведением.
Команда разработчиков сообщает вам следующее:
Проект написан на языке [ваш язык здесь] и должен быть максимально коротким, чтобы занимать как можно меньше места, когда это приложение для Android / iPhone. Вы пытаетесь объяснить, что не работает разработка приложений, но они не слушают. Но эй, какое совпадение! Вы удивительный игрок в гольф на [ваш язык здесь] !
Приложение не будет иметь каких-либо разрешений на веб-доступ, и не будет установлено никаких библиотек, которые выполняют это форматирование для вас. Вы, вероятно, можете убедить руководство группы позволить вам библиотеку регулярных выражений, если она существует для вашего языка, хотя, если вы считаете, что она вам нужна.
Поддержка вложенных цитат, которые правильно используют двойные / одинарные кавычки, планируется для более поздней версии приложения, но не для той версии, над которой вы работаете сейчас, так что не беспокойтесь об этом.
Руководство является большим поклонником разработки, основанной на тестировании, и поэтому команда разработчиков уже имела несколько несчастных клавиатурных обезьян, написавших некоторые тесты для вашей части программы: (добавлены новые строки для удобства чтения, рассматривайте их как пробелы)
Входные данные:
hello ^COMMA world ^BANGВыход:
Hello, world!Входные данные:
once upon a time ^COMMA there was a horse ^PERIOD that horse cost me $50 ^PERIOD ^OPENQUOTE eat your stupid oats ^COMMA already ^BANG ^CLOSEQUOTE I told the horse ^PERIOD the horse neighed back ^OPENQUOTE no ^CLOSEQUOTE and died ^PERIOD THE ENDВыход:
Once upon a time, there was a horse. That horse cost me $50. "Eat your stupid oats, already!" I told the horse. The horse neighed back, "No," and died. THE ENDВходные данные:
begin a ^PERIOD b ^COMMA c ^COLON d ^SEMICOLON e ^BANG f ^HYPHEN g ^DASH h ^EMDASH i ^OPENQUOTE j ^PERIOD ^OPENQUOTE k ^SEMICOLON ^OPENQUOTE l ^CLOSEQUOTE m ^BANG ^CLOSEQUOTE n ^PERIOD 0x6C6F6C endВыход:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
Это код гольф: выигрывает самый низкий балл. Вы можете написать функцию с одним строковым аргументом или программу, читающую из STDIN и записывающую в STDOUT.
prompt()?