Украдена у @Downgoat с разрешения
Смысл этой проблемы состоит в том, чтобы (не) урегулировать дискуссию о произношении «gif».
Произношение gif обсуждается, и хотя оно должно быть (и должно быть) произносится как jif , оно все еще широко оспаривается.
В этом задании вам дадут набор слов, имеющих g или j , представляющих звук, которым произносится это слово. Вы также получите текст, в котором вы должны исправить неправильное написание GIF .
Потому что это интернет и все всегда неправы. Это (не) обычная вежливость, чтобы исправить их.
Пример неправильного произношения:
Был подарок мыши, которая ела буррито
Неправильное написание GIF ? Неприемлемо! Это должно быть исправлено немедленно:
Был джиф (как в банке) мыши, которая ела буррито
Мы все? Нет, ты все еще не прав.
Ты всегда неправ
Это должно работать по-другому:
В джифе кот носил шляпу кота
Это очевидное опечатка должна быть исправлена, мы исправим это так:
В гифке (как на рисунке) кот носил шляпу кота
правила
- Ввод - это строка (предложение) и массив строк (или любая разумная альтернатива, такая как строка, разделенная запятыми) в любом порядке.
- Вы можете взять
g
иj
слова в любом порядке. Они могут быть взяты отдельно. - Каждый экземпляр
gif
(любого случая) в предложении должен быть заменен наjif (as in ___)
где___
единообразно случайно выбранное слово, начинающееся сj
массива строк, и наоборот дляjif
слов, начинающихся сg
. - ТОЛЬКО слова
gif
иjif
должны быть заменены (то есть "jiffy" не должен быть изменен). Эти слова не сделали ничего плохого. - Вам гарантировано, что хотя бы одно слово в массиве начинается с
g
и хотя бы одно начинается сj
. - Кейс должен быть сохранен (например,
GiF
->JiF
). - Вы можете написать программу или функцию
- Применяются стандартные лазейки
- Нам нужно (не) быстро разрешить спор; самый короткий код в байтах выигрывает
Примеры
Вход и выход разделены одной строкой:
graphic, jar, jam, gram
I saw a jif of how to pronounce gif that showed gif is pronounced jif
I saw a gif (as in graphic) of how to pronounce jif (as in jar) that showed jif (as in jam) is pronounced gif (as in gram)
gravy, jeff
G is for gIf, h is for JiF, i is for gIF, j is for JIf
G is for jIf (as in jeff), h is for GiF (as in gravy), i is for jIF (as in jeff), j is for JIf (as in gravy)
joke, june, gorilla, great
Jiffy should not be treated as a GIF or JIF, like gifted.
Jiffy should not be treated as a JIF (as in june) or GIF (as in great), like gifted.
The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced **gif,** it's still commonly disputed.
FTFY;)Ответы:
Mathematica,
164165 байтовЭто мерзость, но я хочу, чтобы кто-то поделился моей болью.
Function
который ожидает первый аргумент#
будет предложением, которое будет (не) исправлено, а второй аргумент#2
будет строкой слов, разделенных запятыми.f[f@"g"="j"]="g";f[f@"G"="J"]="G"
определяет функцию,f
которая принимает буквыg
,G
,j
иJ
их соответствующие замены. Это немного корочеf@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"
.Я тоже поставил
z
равным,IgnoreCase->True
так как я буду использовать его дважды.x:"g"|"j"~~y:"if "
это то,StringExpression
что соответствует"gif "
или"jif "
, называя первую буквуx
и последние три символаy
. Так как опцияz
(также известный какIgnoreCase->True
) передаетсяStringReplace
, эти буквы могут быть в любой комбинации верхнего и нижнего регистра.Затем я заменяю каждый такой матч
RandomChoice@StringCases[#2,f@x~~Except[","]..,z]
случайным образом выбирает слово из второго аргумента,#2
который начинается сf[x]
, снова игнорируя регистр, потому чтоz
задана опция .источник
IgnoreCase->True
=>IgnoreCase->1<2
True
до1>0
, просто не в моем объяснении :)z
равнойIgnoreCase->True
. Я сделал то же самое позже: «который начинается сf[x]
».¯\_(ツ)_/¯
Рубин ,
888791 байт-1 байт от ETHпродукции. +4 байта, потому что слова, содержащие "gif" или "jif", не должны заменяться. -2 байта, потому что списки заменяющих слов теперь можно брать отдельно.
Попробуйте онлайн!
источник
([gj])
на(g|j)
? (очень много Ruby, но я знаю регулярные выражения)CJam , 78 байт
Попробуйте онлайн!
Требует, чтобы список заменяющих символов был разделен только запятыми.
Объяснение:
источник
Python 3 , 237 байт
Попробуйте онлайн!
Это лучшее, что я могу сделать - возможно, это был какой-то способ сделать это быстрее (возможно, с помощью регулярных выражений), но мой мозг сейчас болит.
Пояснение:
q
это простое отображение словаря, надеюсь, это понятно.s,g,j
являются входной строкой, списком g-слов и списком j-слов.' '.join
объединяет понимание списка сделано черезfor w in s.split()
, поэтому для списка слов в s.Средний бит - черная магия, которую я разрушу по кусочкам. Во- первых, условие:
False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!.")
.w[0]in q
проверяет первый символ в ключахq
которого есть'g','G','j','J'
. Причиной выделенияq
в качестве переменной является то, что мы также используем ее в качестве dict / map позже.w[1:2]in ['i','I']
проверяет, что вторым символом является либо я, либо я. Параметр: 2 необходим, потому что простое размещениеw[1]
приведет к падению однобуквенных слов, но срезы не делают этого по какой-то причине (я думал, что они сделали, что угодно!)w[2:3]in ['f','F']
аналогично. Я кратко назвал это всего лишь 2: прежде чем я понял, что мне нужно учитывать gif или jif, а затем пунктуацию!w[3:]in",;!?."
проверяет, что последующие символы являются пунктуацией Я признаю, что мой код не работает, если кто-то вставляет «GIF ?!» но я не могу быть идеальным Кто-то еще может принять вызов открытия кавычек перед GIF или JIF тоже.False in(,,,)
в основном большой NAND. На самом деле это тот же bytecount, что и разделение четырех элементов сand
помощью аргументов и их замена, но это выглядит круче и работает лучше, если вам нужно расширить его до пятойand
единицы.w if
означает, что если False находится в условном списке, мы просто возвращаем слово без изменений - оно не соответствует нашим критериям.else
мы изменим это на:q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]
ХОРОШО.
q[w[0]]
подставляет первую букву правильно.w[1:3]
кнопки на i или I и f или F,w[3:]
кнопки на любой конечной пунктуации. Это оставляет как в пункте." (as in "+choice(g if w[0]in 'jJ'else j)+')'
вставляет очевидный строковый литерал в начале и завершающие скобки, интересный бит здесь,choice(g if w[0]in 'jJ'else j)
который случайным образом выбирает изg
илиj
, в зависимости от того,w[0]
находится ли в'jJ'
. и я только что понял, что у меня это немного задом наперед, так что все исправлено, сделано.Это был долгий день.
choice
находится вrandom
модуле, следовательно, импорт. Я думаю, что это все.источник
JavaScript (ES6), 142 байта
Принимает отдельные
g
иj
списки слов.источник
Javascript (ES6), 151 байт
Я, вероятно, могу больше играть в гольф на троичной части, но я не могу думать о том, как сейчас. Кроме того, это берет слова g и j отдельно.
источник