Мой друг на днях сделал переводчик шрифтов, то есть он взял строку и преобразовал s => th и S => Th. Это было довольно долго, и я подумал, что это может быть в гольф.
Таким образом, задача состоит в том, чтобы создать программу / функцию, которая принимает входную строку, переводит ее в lisp и выводит строку
Прецедент
Sam and Sally like Sheep Tham and Thally like Thheep
Sally likes sausages Thally liketh thauthageth
Sally sells seashells Thally thellth theathhellth
Обратите внимание, что не имеет значения, что ч повторяется все время
Это код гольф, поэтому самый короткий ответ выигрывает
s
ниS
где - нибудь в нем.LOOK OUT A SNAKE!!! -> LOOK OUT A THNAKE!!!
Ответы:
Common Lithp, 62
Сначала
(read)
ввод (это должна быть строка). Строки в CL являются последовательностями, поэтому мы используемmap
итерацию для каждого символа. Первый аргументmap
представляет тип результата (например, я мог бы построить список из вектора). Когда этоnil
, иначе()
, результаты отбрасываются. Функция, которая отображается на входе простоprinc
(печатать нечитаемо) каждого символа, кроме тех, которые должны быть заменены.источник
s
наth
, как все остальные делали: взгляд на эти ответы Pyson.s
->th
,S
->Th
,th
->th
,Th
->Th
.(defmacro cathe (&rest args) `(case ,@args))
Сетчатка, 9 байт
Попробуйте онлайн!
Очевидный ответ.
источник
JavaThcript ETh6, 38 байт
Сначала я пошел с очевидным решением
Но я проиграл 4 байта
Это использует
i
флаг регулярного выражения , который ищет шаблоны без учета регистра. Хорошая вещь в Javascript заключается в том, что вы можете указать анонимную функцию для обработки (регулярного выражения) замены.Попробуй здесь
источник
'Tt'[b>'r']+'h'
, но это такая же длинаGNU Sed - 17
Очевидный ответ.
источник
Желе , 13 байт
Отбросив желе от нового тонкого атома трантхлата. Попробуйте онлайн!
источник
Python 3 - 40 байт
Первый гольф!
Он использует метод translate
str
модуля, который принимает таблицу перевода. Таблица перевода проста с ключевым кодом в качестве ключей и вместо него в качестве значения.dict
str
источник
JavaThcript ETh6, 43 байта
Тетт Туит:
источник
V 11 байт
Попробуйте онлайн!
На этом языке я сделал. Это не ограничено, но это действительно хорошо в regekth.
источник
C, 50 байтов
Заменить
\1
реальным\x01
байтом.jimmy23013 сохранил байт, а затем я сохранил еще два, используя его подход! Спасибо.
источник
&c
параметр не работает. Но это не так, потому что на архитектуре с прямым порядком байтов второй байт этогоint
будет0x00
и фактически завершит «строку» ... Это ужасно умно, я люблю это!s(c){c=getchar();c+=c-83&~32?0:26625;s(printf(&c));}
char
.'h\1'
05AB1E,
1412 байтПрямой ответ.
Попробуйте онлайн
Сохранено 2 байта благодаря @Adnan
источник
Ява,
7165 байтПервая попытка игры в гольф, так почему бы не с Java.
источник
replace
вместоreplaceAll
s->s.replace("S","Th").replace("s","th")
GNU AWK, 31 байт
Просто используйте
gsub
функцию для перевода нижнего или верхнего S через регулярное выражение и распечатайте его потом. Может работать с файлами или сstdin
как в этом случаеисточник
CJam, 15 байтов
Проверьте это здесь.
объяснение
источник
Python3 - 46 байт
Сбросил 4 байта с помощью @DenkerAffe !
источник
lambda s:s.replace("s","th").replace("S","Th")
немного короче.C # 6,0 - 58 байт
Принимает входную строку в качестве аргумента функции.
источник
Haskell, 36 байт
источник
f's'=...
Char
...Ржавчина, 46 байт
Попробуйте онлайн!
источник
PHP, 42 байта
если запустить из файла:
Беги как:
источник
php -d error_reporting=0
для подавления уведомлений.TI-Basic, 126 байт
источник
Str1
никогда не меняется, иAns
будет держать номер в конце.Str1
...Java, 101 байт
Обратите внимание, что это полная программа в отличие от предыдущего ответа Java .
Бонус (должен быть передан
препроцессору CTHE препротеор сначала):источник
Pyth, 14 байт
Тестирование
Спасибо @LeakyNun за обнаружение опечатки!
источник
MATL , 17 байт
Попробуйте онлайн!
объяснение
источник
Python 3, 53 байта
Использование:
источник
lambda s:s.replace("s","th").replace("S","Th")
Использование:(lambda s:s.replace("s","th").replace("S","Th"))(s)
Язык GameMaker, 74 байта
источник
Матлаб, 39 байт
Прямой подход:
источник
Emacth Lithp, 61 байт
Emacs Lisp пытается быть умным при замене текста, но эта сообразительность ломается, когда заменяемая строка занимает только один пробел, то есть заглавную букву S. Чтобы не допустить преобразования «Сэма и Салли» в «ТАМ и ТАЛЛИ», все слово сопоставляется вместо. Тем не менее, это также обрабатывает «SAM и Sally» так, как хотелось бы, то есть, создавая «THAM and Thally».
источник
машинный код x86, 19 байт
В шестнадцатеричном виде:
Ввод::
ESI
входная строка,:EDI
выходной буфер.Разборка:
источник
test al, 'S'
чтобы проверить оба сразуBefunge 98,
3749 байтОригинальная версия :
Завершение издания, согласно консенсусу:
Это оставляет большую дыру в решетке кода, которая меня не очень устраивает. Я посмотрю на это, когда у меня будет время.
49-й байт - это пробел в конце второй строки, включающий прямоугольную сетку, необходимую для предотвращения ошибок ccbi (и, возможно, других интерпретаторов) и печати бесконечной строки «Th».
источник
35 байт Юлии:
Попробуйте онлайн! (включает все тестовые случаи)
источник
SpecBASThpecBATh - 53 байтаисточник