У некоторых из ваших сотрудников сломаны ключи от заглавных букв, и вы слишком дешевы, чтобы заменить их. Помогите им, создав самую короткую программу, чтобы исправить их работу! Просто преобразуйте каждый символ в данной строке из прописных в строчные и наоборот ... но есть поворот!
Вы также очень рады за Рождество! Таким образом, вы собираетесь оставить крошечную «ошибку», которая не исправляет буквы, которые находятся в пределах последовательности Christmas
(без учета регистра).
вход
Для ввода вы будете использовать одну строку (или массив байтов), которая может содержать символы новой строки и ascii между 0x20 и 0x7e ( -
~
). Вам не нужно беспокоиться о возврате каретки или любых других символах в строке.
Выход
Вывод должен содержать только предоставленную строку с заменой заглавных и строчных букв (и, конечно же, рождественская ошибка!). Он может содержать до одного дополнительного конечного пробела.
Рождественский жук
Давайте объясним это на примере:
Input: i CAN HARDLY WORK LIKE THIS please GET ME A NEW KEYBOARD FOR cHRISTMAS
Output: I Can HaRdly work lIke thiS PLEASE geT Me A new keyboard for ChriStmas
can
содержит «с», которая является первой буквой Рождества, так что это не изменилось. Следующая буква в Christmas
- это «h», которая находится в hardly
(которая также содержит «r»), так что она не изменилась и т. Д. Christmas
Сама по себе имеет только одну букву без изменений, потому что к тому времени, когда код достигает ее, она фактически ищет «с», а не «с».
Как только последовательность найдена, она должна начинаться заново с «c» и начинать итерацию Christmas
еще раз. Так ChristmasChristmas
что останется без изменений.
Тестовые случаи
Input: Hello World!
Output: hELLO wORLD!
Input: I like pie :)
Output: i LIKE PIE :)
Input: hELP my KeYboarD
iS BROKEN
Output: Help MY kEyBOARd
Is broken
Input: cHRISTMAS IS COMING REALLY SOON!
Output: cHRISTMAS is Coming really soon!
Input: C is the first letter in cHRISTMAS
Output: C IS ThE FIrST LETTER iN ChriSTMAS
победитель
Это код-гольф, поэтому выигрывает самый короткий ответ!
Christmas
последовательно, поэтому «h» игнорируется, пока не находит «c», затем он ищет «h», затем «r» и т. Д.Ответы:
05AB1E , 16 байтов
Спасибо Emigna за сохранение байта и исправление ошибки!
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
u
его, он должен работать.V ,
38, 36 байтовПопробуйте онлайн! (содержит входные данные и ожидаемый результат для сравнения)
Когда я впервые увидел это, я подумал, что это будет чрезвычайно легко. В самом деле, если бы это было не для «Рождества» ошибки, это будет просто 2 байта:
V~
. Рождественский баг значительно усложняет задачу, для очень хакерского ответа.Как обычно, здесь есть hexdump:
источник
PHP,
113110102 байтапринимает входные данные из первого аргумента командной строки. Беги с
-r
.сломать
источник
МАТЛ ,
3630 байтСтроки с символами новой строки должны быть определены путем конкатенации с кодом ASCII
10
(см. Пример в ссылке с контрольными примерами).Попробуйте онлайн!Или проверьте все тестовые случаи .
объяснение
источник
Пайк,
3125 байтПопробуй это здесь!
источник
\n
и окружаете входные данные,"
тогда даPerl 6 , 84 байта
источник
C # 197 байт
Не выиграю с этим, но, надеюсь, самая маленькая реализация C #, которая работает ...
Объяснение:
источник
JavaScript,
12211811410710493 байтаисточник
k!=c?k:c.toUpperCase()
сэкономить несколько байтов?Perl 6 , 80 байт
Попытайся
источник
my $i=0;
законно. И я не удивлюсь, если появятся больше синтаксических ошибок, связанных с пробелами.$/ eq $/.lc
а не$/.lc eq $/
так, чтобы я мог удалить пространство раньшеeq
.Java 7, 200 байт
Безобразно, но это работает .. Определенно, без сомнения, можно играть в гольф больше .. Я ржавый ..
Ungolfed:
Тестовый код:
Попробуй это здесь.
Выход:
источник
Python 100 байт
источник
Рубин, 63 + 1 = 64 байта
Использует
-p
флаг.источник
C # 239 символов
более явная версия:
Это довольно наивное решение, и, возможно, его можно улучшить (может быть, мы можем разрешить неявное преобразование в char?).
предполагается, что он находится внутри функции, читает из консоли (stdin) и записывает в нее (stdout).
edit: Char.IsUpper (s [j]) на 2 байта длиннее, чем s [j]> 64 && s [j] <91, Char.ToUpper тоже длиннее моей версии.
источник
Haskell,
222207 байтобновлено:
Как это работает:
источник