В английском языке есть забавная и простая разница между an
и a
: вы используете, an
когда предшествует слово, начинающееся с гласного звука, и a
когда слово начинается с согласного звука.
Ради простоты в этом вызове an
предшествует слову, начинающемуся с гласной ( aeiou
), и a
предшествует слову, начинающемуся с согласной.
вход
Строка, содержащая только печатаемые символы ASCII, и [?]
появляется в местах, где вы должны выбрать для вставки an
или a
. [?]
всегда будет появляться перед словом. Вы можете предположить, что предложение будет грамматически правильным и отформатированным как обычно.
Выход
Входная строка [?]
заменяется на соответствующее слово ( an
или a
). Вы должны беспокоиться о капитализации!
Когда извлечь выгоду
Заглавное слово, если перед ним нет символов (это первый во входных данных) или если перед ним стоит один из символов, .?!
за которым следует пробел.
Примеры
Input: Hello, this is [?] world!
Output: Hello, this is a world!
Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.
Input: [?] giant en le sky.
Output: A giant en le sky.
Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!
Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.
Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?
Это код-гольф , поэтому выигрывает самый короткий код в байтах!
источник
[?]
и словом не должно быть лишних пробелов ?[?] hour ago I met [?] European.
чтобы все съежились.[?] hour ago I met [?] horse.
Ответы:
V , 41 байт
Попробуйте онлайн! , что также удобно использовать для проверки всех тестовых случаев без дополнительного количества байтов.
Это использует V "Regex Compression". Он использует много непечатаемых символов, поэтому вот hexdump:
источник
Perl, 48 байт
Сохранено 1 байт благодаря Тону Хоспелу .
Считая Шебанг как единое, ввод берется из стандартного ввода.
объяснение
Образец использования
источник
/[.?!]/
пробела отсутствует\G
чтобы идти задом наперед. PPS, немного короче:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Рубин,
7872 байтаUngolfed
источник
"anAn"[...]
действительно умный Save Вы можете сохранить несколько байтов, пропустив внутреннийsub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 байт
Мне нравятся решения, более полные время от времени ...
но я должен признать, что это немного излишне, хотя еще не закончено.
Сохранить в файл, запустить
php <filename>
с вводом из STDIN.контрольные примеры
сломать
источник
[?][?][?]s [?]lert!
Минколанг 0,15 , 75 байт
Попробуй это здесь!
объяснение
Обратите внимание, что, поскольку Minkolang является тороидальным, когда счетчик программ сдвигается от правого края, он снова появляется слева. Конечно, можно играть в гольф, но поскольку мне пришлось добавить 21 байт из-за спецификации, я не могу попробовать.
источник
JavaScript (ES6), 90
86 87 85Изменить еще раз, как изменилась спецификация для заглавных букв (теперь более разумно)
Отредактируйте еще раз 1 байт
Отредактируйте еще 2 байта для управления кавычками и тому подобным, как указывает IsmaelMiguel (даже если я не знаю, запрашивается ли это оп). Обратите внимание, что ранее я насчитал 86 байт, но их было 85
Попытка следовать правилу использования заглавных букв, указанному в комментарии, если оно неполное (по крайней мере)Тестовое задание
источник
[?][?]
даватьAna
? И не должен[?][?] a.
производитьAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
кавычки не имеют значения) и для[?] "A".
(это прекрасно работает[?] A.
).[?] "[?]"
не является допустимым вводом.[?] will always appear before a word
и "[?]" это не слово.]
не нужен./(\w )?\[\?](\W*.)/g
Пакет, 136 байт
Занимает строку ввода на STDIN.
источник
PHP,
10092 байтаУдалось дальше поиграть в гольф регулярными выражениями.
Дает уведомление о неопределенной константе, но все еще работает.
Редактировать: 8 байтов сохранено благодаря primo
источник
[n,A,a]
с помощью проверочных утверждений (\K
и(?= )
).Python 3.5.1,
153147124байтаВход:
[?] apple [?] day keeps the doctor away. [?] lie.
Выход :
An apple a day keeps the doctor away. A lie.
Версия 123 байта - Это не обрабатывает правило заглавных букв.
Идео это!
источник
;
и играть в гольф.m.start() for
должно бытьm.start()for
,s[i+2] in 'aeiouAEIOU'
должно бытьs[i+2]in'aeiouAEIOU'
. Легкое бритье на 3 байта из-за пробелов.('an','a')[s[i+2]in'aeiouAEIOU']
инвертировано, вы можете использовать это,'a'+'n'*(s[i+2]in'aeiouAEIOU')
чтобы исправить это и сохранить 2 байта. Здесь вы можете найти множество советов по гольфу .enumerate()
это круто. Спасибо @chepner.Ява,
180178 байтВ своем первом посте я использовал часть поста Кевина Круйссена, но, применяя другой подход, он помог мне немного сократить это, благодаря ему!
Вот это не одурачено:
И результат
Простое объяснение, я использую рекурсивный подход, чтобы найти каждый
[?]
.Я не мог найти способ использовать спички с нечувствительным регистром (не уверен, что это возможно).
178 байт: Спасибо Мартину Эндеру!
источник
]
в своем регулярном выражении.05AB1E ,
383635 байтПопробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
]
после::
}
позже, потому что думал, что это спасет байт, но вы действительно правы, что это не помогает в[?] vowel
случаях ... Спасибо, что сообщили мне об этом!C #,
204235 байтРазвернутая полная программа:
Я уверен, что это можно улучшить, особенно в части Regex, но сейчас я не могу придумать ничего.
источник
Java 7,
239214213 байтUngolfed и тестовые случаи:
Попробуй это здесь.
Выход:
источник
isEmpty
использование регулярных выражений^$
. Я верю, что в итогеString c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}
так определенно короче, чем мой ответ-петля. :)Ракетка 451 байт (без регулярного выражения)
Это, очевидно, длинный ответ, но он также заменяет a и a на заглавные:
Тестирование:
Выход:
Подробная версия:
источник
J , 113 байт
Попробуйте онлайн!
Позор, позор!
источник
Сетчатка ,
6660 байтПопробуйте онлайн.
Объяснение:
Выполните поиск без учета регистра, за
[?]
которым следует гласная или согласная, где необязательный гласный сохраняется в группе записи 2, а все совпадения в группе записи 1:Замените это на «а»
a
, после чего укажите длину второй группыn
(то есть 0 или 1n
), а затем букву (буквы) группы захвата 1:Затем сопоставьте
a
либо в начале строки, либо после любого из.?!
плюс пробел:И в верхнем регистре, что A, без удаления других символов группы захвата 1:
источник
Java (JDK) , 154 байта
Попробуйте онлайн!
Объяснение:
источник
C (gcc) ,
225207202201 байтБлагодаря Celercat за -24 байта
Попробуйте онлайн!
источник
Groovy,
73162 байтаредактировать: блин, заглавные буквы здесь все сложнее
источник
C # 209 байт
string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}
отформатирован
источник
Perl 6 , 78 байт
Объяснение:
Тестовое задание:
источник
} $1
в конце (сделать это}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Луа, 131 байт.
Хотя Луа - ужасный язык для игры в гольф, я чувствую, что справился довольно хорошо.
источник
Пип ,
62555450 байтПринимает строку в качестве аргумента командной строки.
Попробуйте онлайн!
Объяснение:
источник
Ракетка (с регулярным выражением) 228 байт
Тестирование:
Выход:
источник
Python 3 ,
104103 байта-1 байт, неэкранированный
]
Попробуйте онлайн!
Запускает путем замены всех вхождений
[?]
сa
,затем заменяет все
a
следует гласная, сan
.Затем заменяет все
a
в начале ввода или предложение наA
.Предполагается, что
[?]
никогда не будет касаться другого слова, и что строчные буквыa
никогда не должны начинать предложение.источник
PowerShell , 124 байта
вдохновлен ответом Ави для Java .
Попробуйте онлайн!
источник