Цель состоит в том, чтобы, взяв строку в качестве входных данных, продублировать каждую латинскую букву и «переключить» ее регистр (т.е. верхний регистр становится строчным и наоборот).
Пример входов и выходов:
Input Output
bad bBaAdD
Nice NniIcCeE
T e S t Tt eE Ss tT
s E t sS Ee tT
1!1!1st! 1!1!1sStT!
n00b nN00bB
(e.g.) (eE.gG.)
H3l|@! Hh3lL|@!
Ввод состоит из печатных символов ASCII.
Вы не должны дублировать нелатинские буквы, цифры, специальные символы.
Ответы:
Желе, 5 байт
Попробуйте онлайн!
Как это работает
источник
Python,
5654 байтаПроверьте это на Ideone .
источник
*
имеет более высокий приоритет, чем+
, поэтому он влияет только наc
регистр с заменой.JavaScript ES6,
70686664 байтаСохранено 2 байта благодаря @Kevin Lau - не Кенни
Сохранено 2 байта благодаря @ Cᴏɴᴏʀ O'Bʀɪᴇɴ
объяснение
Это использует действительно hacky:
Который является негольфом:
В основном
l < "a"
проверяет, меньше ли кодовая точка буквы, чем кодовая точкаa
(следовательно, является заглавной буквой). Если это так, он будет делать то,to + Low + erCase
что сталоl['toLowerCase']()
и делает символ строчными.`
кавычки допускают форматирование строк, так что по сути вы можете думать о:as:
"to" + (l<"a" ? "Low" : "Upp") + "erCase"
генерирует вызываемую функцию (строчная или прописная строка). Мы поставили это в квадратных скобках[ ... ]
что позволяет нам получить доступ к свойству, указанному в виде строки. Это возвращает соответствующую функцию, а затем мы просто вызываем ее.источник
/[A-Z]/gi
это более короткое регулярное выражение: 3to${l<"a"?"Lower":"Upper"}Case
кto${l<"a"?"Low":"Upp"}erCase
l[`to${l<"a"?"Low":"Upp"}erCase`]()
Я думаю, что у нас есть новое определение зла.Руби,
3733 (30+-p
флаг) байтовswapcase
на помощь! Вроде. -4 байта от @Lynn.источник
gsub(/[a-z]/i){$&+$&.swapcase}
плюсp
флаг составляет 31 байт.p
флаг составляет около(space)-p
3 байтов.C
6360 байтИспользует тот факт, что
'a' XOR 32 == 'A'
и т. Д.Три байта сохранены благодаря FryAmTheEggman.
источник
s++
в последнийputchar
(&&putchar(32^*s++)
), чтобы сохранить один байт&&
на*
, не так ли?&&
короткое замыкание.f(char*s){isalpha(putchar(*s))&&putchar(32^*s);*s&&f(1+s);}
рекурсивных?f(char*s){*s&&f(1+s,isalpha(putchar(*s))&&putchar(32^*s));}
рекурсивных?CJam, 11 байт
Проверьте это здесь.
объяснение
источник
Pyth , 7 байт
Тестовый пакет .
источник
Python 3.5,
6056 байт:Полная программа. Постараюсь в гольф больше.
Попробуйте онлайн! (Ideone)
источник
Haskell, 73 байта
источник
Чеддер ,
118104 байтаПервый настоящий чеддерский ответ !!! Это гораздо менее болезненно, чем я думал, что это будет ...; _;
Работает с выпуском 1.0.0-бета.9 , не конкурирует.
Как вы можете сказать, я не придумал чеддер для игры в гольф: /
Ungolfed:
Использование:
Обновить: 14.07.16 Я закончил троичные, уменьшив до 84 байт
Чеддер, 84 байта
работает с версии v1.0.0-beta.14
источник
Сетчатка,
282721 байтЭто вкладки, а не пробелы.
Попробуйте онлайн
Спасибо всем за предложения.
источник
[A-Za-z]
->i`[A-Z]
_
. Я собираюсь использовать вкладки, чтобы я мог тестировать все тестовые случаи одновременно.С,
8780Передайте строку в качестве входных данных
f()
и выходные данные будут записаны в STDOUT. Строка не изменяется.источник
sed, 30 байтов
Код 29 байт + параметр 1 байт
-r
Использование:
источник
J,
3129 байтобъяснение
источник
Haskell,
121, 101, 85,82источник
isLower
короче конструкции сelem
, на 5 байтов больше.>>=
являетсяconcatMap
(илиconcat.map
) с аргументами перевернутых:f n = n >>= (\x->if isAlpha x then[x,r x]else[x])
. Вы можете пойти pointfree и опустить имя функции и заменить определениеf
с(>>= \x->if isAlpha x then[x,r x]else[x])
.otherwise
вы можете использовать любое выражение, которое оцениваетTrue
, например1<2
. Вы можете заменитьif .. then .. else
со списком понимания:\x->[x]++[g x|isAlpha x]
. О, и есть ошибка: второйtoUpper
вg
должно бытьtoLower
.[x]++
естьx:
.Perl, 36 байт (35 +
-n
флаг)(
-p
тег необходим)(-2 байта благодаря @Dom Hasting)
Краткое объяснение:
ord
возвращает числовое значение символа.ord(any lower case) >= 97
иord(any upper case) <= 90)
.Бежать с :
источник
/i
иначе ваше регулярное выражение будет соответствовать нескольким кодовым точкам между буквами.Рубин,
31 + 1 = 3230 + 1 = 31 байтС
-p
флагом бегиИспользует тот факт, что
swapcase!
будет возвращатьnil
что угодно, кроме буквы ASCII, которая при возврате изgsub
блока переводится в пустую строку . @Jordan сохранил байт, захватив предыдущий символ в просмотре.источник
//
и затем использовать$`[-1]
умно.gsub(/(?<=(.))/){$1.swapcase!}
. Однако это та же самая базовая концепция, поэтому не стесняйтесь ее использовать..swapcase!
. (Я имею в виду, удалить!
.)R
1911871681569899 байт99 байт благодаря улучшениям для Giuseppe и MickyT .
источник
readline()
можно использовать, но это будет стоить байтаscan
будет работать с вводом данных, заключенным в кавычки (как это часто бывает в случае аргументов командной строки на других языках)05AB1E , 7 байтов
Код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
Пайк,
86 байтПопробуй это здесь!
источник
V , 21 байт
Попробуйте онлайн!
Слишком много байтов ...
источник
На самом деле 8 байтов
Попробуйте онлайн!
Объяснение:
источник
MATL,
119 байтПопробуйте онлайн
объяснение
источник
Perl,
282221 байт (20 +-p
флаг)источник
$"
вместо' '
, но я не проверял.Stax ,
76 байтСпасибо @recursive за сохраненный байт!
Запустите и отладьте его на staxlang.xyz! (ссылка на распакованную версию)
Распаковано (7 байт):
Объяснение:
источник
u
вместо:g
. Он получит все уникальные элементы в массиве, а это именно то, что вам нужно в этом случае. Помимо этого, это выглядит хорошо в гольф.123
. Возможно, вам придется изменить формат для всех входных данных (т.е. указать их в кавычках). Ссылка тоже битая. Вам нужно заменитьm=11
наm=2
. На staxlang.xyz есть кнопка пост-генерации PPCG, так что вы можете использовать ее.Python, 59 байт
Отредактировано, чтобы исправить повторяющиеся не алфавитные символы
источник
Юлия, 40 байт
Попробуйте онлайн!
источник
not s is (list comprehension)
ладно, Юля ...PHP 4.1, 57 байт
Этот код предполагает доступ через веб-сервер (например, Apache) с использованием конфигурации по умолчанию.
Вы можете передать строку, посылая ключ
S
любым способом (POST
,GET
,COOKIE
,SESSION
...).источник
C #,
8271 байтC # лямбда, где вход и выход
string
. Попробуйте онлайн .11 байтов благодаря трюку @Lynn.
источник
Common Lisp (Lispworks), 262 байта
ungolfed:
Использование:
источник