Геобицианский язык - это новое извращение английского языка, где слово разбивается на сегменты, каждый из которых должен начинаться с другой буквы. Затем каждый раз, когда одна из этих начальных букв появляется в другой строке, она заменяется всем соответствующим сегментом, сохраняя заглавные буквы.
Этот процесс называется Geobitsizing .
Например, слово « Geobits » может быть взломаноgeo bits
, и бессмысленное стихотворение
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
будет Geobitsized с ним как
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
потому что каждый g
становится geo
, каждый G
(хотя их нет) становится Geo
, каждый b
становится bits
, и каждый B
становится Bits
.
Обратите внимание, что каждая замена выполняется относительно исходной строки, а не какого-либо промежуточного шага. например, если geo
бы gbo
вместо этого b
созданный объект не был бы заменен на bits
.
Вызов
Напишите программу или функцию, которая может генерировать геобитский язык.
Возьмите одну строку из строчных букв (az) и пробелов. Это будет слово, используемое в качестве аргумента Geobitsizing, с пробелами, разделяющими сегменты. Вы можете предположить:
- Сегменты не будут пустыми. Таким образом, пробелы не будут соседствовать друг с другом и не будут находиться в начале или конце строки.
- Каждый сегмент начинается с другой буквы. Таким образом, не может быть больше 26.
Например, некоторые действительные сегментированные строки , которые вы должны поддерживать это geo bits
, butt ner
, alex
, и do o r k nob
(отдельные сегменты письма не имеют никакого эффекта , но действуют). Но geo
, butt ner
, Alex
и do o r k n ob
являются недействительными.
Ваша программа или функция также должна принять другую произвольную строку, чтобы применить геобитизирование к, и напечатать или вернуть полученный геобитский язык.
Вы можете предположить, что эта строка содержит только переводы строки и печатный ASCII.
Помните, что буквенные регистры должны быть сохранены от входа до выхода.
Вот еще несколько примеров использования no pro gr am m ing
в качестве аргумента Geobitsizing:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(без изменений)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Обратите внимание, что результаты должны быть идентичны независимо от того, как устроен аргумент, например, ing pro m no am gr
должны давать те же результаты, что и выше.
Самый короткий код в байтах побеждает.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
хотя это стоит 5 байт.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Это должно охватывать все крайние случаи, и есть много из них , если кто -то пытается использовать регулярные выражения ...Ответы:
Желе , 18 байт
Попробуйте онлайн!
Альтернативная версия, 15 байт (не конкурирует)
У функции case в Jelly есть ошибка; это не стало заглавной буквой первого слова. Это было исправлено, поэтому теперь работает следующее.
Этот код делает то же самое, что и в конкурирующей версии, за исключением того, что
Œt
(регистр заголовка) заменяет условный верхний регистр, достигнутый с помощьюŒu1¦€
.Как это устроено
источник
Python 3, 71 байт
Проверьте это на Ideone .
Как это устроено
В Python 3 встроенный
str.translate
принимает строку и словарь и заменяет каждый символ в строке, кодовая точка которого является ключом этого словаря, соответствующим значением, которое может быть строкой, целым числом или None. (эквивалентно пустая строка).Преобразование строки слов w в регистр заглавия (т.
w+' '
Е. Использование заглавных букв в первой букве каждого слова) и добавление ее к результату создает строку слов, разделенных пробелом, с прописной и строчной версией (первая буква). Без второго аргументаstr.split
разделяется пробелами, поэтому(w+' '+w.title()).split()
создает список всех слов.Наконец, словарное понимание
{ord(t[0]):t for t in...}
превращает каждое слово t в словарную запись с ключомord(t[0])
(кодовая точка первой буквы) и значением t , поэтомуstr.translate
будут выполняться предполагаемые замены.источник
Питон,
126999581 байтБольшое спасибо Деннису:
Edit1: не нужно добавлять к временному
Edit2:
S
может содержать заглавные буквы ...Edit3: не дублировать G
Edit4: сжал немного больше и сдвинул его в одну строку
Edit5: используя неназванную лямбду и
j=join' '
источник
Pyth, 19 байт
Попробуйте онлайн!
источник
Vim, 46 нажатий клавиш
Гадкий и Хаки.
источник
Сетчатка , 36 байт
Количество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
источник
Pyth,
1816Попробуй здесь
Определяет функцию,
g
которая выполняет геобицизацию. Как программа это будет немного короче, если вторая строка будет одной строкой, но многострочный ввод не стоит:Общая идея здесь состояла в том, чтобы назвать регистр строки геобицита и добавить его к исходной строке. Затем разделите это на пробелы и для каждой строки возьмите первую букву и сопоставьте ее со строкой, которую она представляет. Таким образом
X
, первая буква каждого слова превратится в полное слово.источник
Python 2,
8378 байтПроверьте это на Ideone .
Как это устроено
Мы перебираем все символы c в строке s .
Мы добавляем пробел к строке слов w , затем ищем вхождение строчной буквы c , которому предшествует пробел.
Если такое вхождение существует,
find
вернет индекс пробела в строке' '+w
, который соответствует индексу c в w .w[...:]
таким образом возвращает хвост w , начиная со слова с первой буквой c .split()
разбивает хвост на пробелы,[0]
выделяет первый фрагмент (слово) и[1:]
удаляет его первую букву.После добавления c к предыдущему результату, мы получаем правильно набранное слово, которое начинается с c .
Если нет слова начинается с с ,
find
вернет -1 .Таким образом,
w[...:]
дает последний символ w ,split()
упаковывает его в массив,[0]
отменяет перенос и[1:]
удаляет единственный символ из строки.После добавления c мы получаем строку-одиночку с символом c , поэтому вся операция не выполняется.
Наконец,
''.join
объединяет все получающиеся строки, возвращая версию Geobitsized s .источник
Юлия,
7268 байтПопробуйте онлайн!
источник
CJam, 19 байтов
Проверьте это здесь.
объяснение
источник
JavaScript ES6,
676370 байтПроверьте это на Firefox. ошибки делают это дольше, чем хотелось бы
объяснение
источник
f("abracadabra")("1Dbw")
возвращается"1abracadabraDbracadabrababracadabrawbracadabra"
.Рубин,
656058 байтПопробуйте онлайн!
источник