Передавая две строки букв, перенесите шаблон заглавных букв каждой строки на другую. Побеждает несколько байтов.
Input: CodeGolf xxPPCGxx
Output: coDEGOlf XxppCgxx
- Обе строки будут одинаковой длины и непустыми, только с буквами
a..z
иA..Z
. - Вы можете вывести две результирующие строки в любом порядке относительно входных данных.
- Вы можете представить пару строк как одну строку с однобуквенным разделителем символов для ввода и / или вывода.
- Вы можете представить строку в виде списка символов или односимвольных строк, но не в виде последовательности значений кодовых точек, если это не просто строки на вашем языке.
- Ваш ввод и вывод могут представлять строки по-разному.
Тестовые случаи:
CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx
lower UPPER -> LOWER upper
MiXeD lower -> mixed LoWeR
A A -> A A
ABcd EfGh -> AbCd EFgh
array[i++%n]+=...;
?array[t=i++%n]=array[t]+...;
работает отлично; иarray[i%n]+=...;i++;
прекрасно работает, но использованиеi++
или++i
с модулем и+=
добавление к строке в массиве не работает .. Вот Java 10 TIO в качестве примера, чтобы увидеть проблему. Это ошибка (или особенность: S) в Java 10 JDK или в компиляторе Java 10 TIO?String
вvar
.C (gcc) ,
86585553 байтаПопробуйте онлайн!
источник
f(S,Z)char*S,*Z;{for(int d;d=(*Z^*S)&32,*Z++^=d;)*S++^=d;}
c(a,s,e)char*a,*s;{for(;*s++^=e=(*s^*a)&32;)*a++^=e;}
(53 байта)Желе , 9 байт
Попробуйте онлайн!
Как это работает
источник
APL (Dyalog Classic) ,
1312 байтПопробуйте онлайн!
вход и выход - матрица символов 2 × N
⎕a
это прописные буквы английского алфавита'ABC...Z'
∊∘⎕a
возвращает булеву матрицу, указывающую, какие буквы на входе являются заглавными819⌶
преобразует свой правый аргумент в верхний или нижний регистр в зависимости от его логического левого аргумента («819» - leetspeak для «БОЛЬШОЙ»)819⌶¨⍨
делает это для каждого¨
символа ( ), swapping (⍨
) аргументы⊖
означает перевернуть вертикально; один⊖
действует как левый аргумент,819⌶
а другой - последнее действиеисточник
"819" is leetspeak for "BIG"
... Шутки в сторону? Это фактическое объяснение, почему это 819? 0_oPyth , 10 байт
Попробуй это здесь!
Пояснения и аккуратные трюки Pyth
rVV_mmrIk1
- Полная программа. Ввод берется из STDIN в виде списка из двух строк, а вывод записывается в STDOUT в виде списка из двух списков символов.mm
- Для каждого символа в каждой из строк:Ik
- Проверьте, является ли он инвариантным по отношению к ...r...1
- ... Преобразование в верхний регистр. Выходит True для прописных символов и False для строчных._
- Переверните этот список.VV
- И дважды векторизовать следующую функцию над двумя списками:r
- Преобразовать в верхний регистр, если значение равноTrue
(иначе1
), иначе преобразовать в нижний регистр.Это представление злоупотребляет тем фактом, что
r0
иr1
являются строчными и прописными функциями в Pyth, и мы используем значения истинности (значения, полученные путем проверки, является ли каждый символ заглавными и обратными), уступаяTrue
в верхнем иFalse
нижнем регистре. Тот факт, что логические значения являются подклассами целых чисел в Python, очень удобен для подхода, который использует этот ответ. Портирование подходов Dennis и Jonathan's Jelly привело к получению более 18 байт, поэтому я вполне доволен используемыми здесь специфическими приемами Pyth.источник
MATL , 11 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Haskell , 78 байт
Попробуйте онлайн!
источник
isUpper x
может бытьx<'a'
.J ,
36 3127 байт-9 байт благодаря FrownyFrog!
Попробуйте онлайн!
Предыдущее решение было:
J ,
3631 байт-5 байт благодаря FrownyFrog!
Попробуйте онлайн!
Как это работает:
источник
[:
Может быть 0 и(22 b.)
может бытьXOR
.&.(3&u:)
сохраняет 1 байт."
и$
? Благодарность!,:
, есть 2 строки на левой стороне. Нам нужно,"(1)
но"$
тоже работает, потому что это означает"1 _
.$ b.0
дает ранг $ (монадическое, диадическое левое, диадическое правое).R ,
118 94 7572 байтаПопробуйте онлайн!
Там должно быть гораздо лучше в гольф.-43 байта благодаря Джузеппе, который указал мне на решение MATL Луиса Мендо. Ссылка TIO содержит функциональное решение для того же количества байтов.Бонус: выход является именованным вектором, имена которого являются исходными входными строками!
источник
a<-
так как вы не используетеa
где-либо еще.машинный код x86-64, 14 байт
Вызывается из C (соглашение о вызовах SysV x86-64) с этим прототипом:
Версия с явной длиной с длиной в
rcx
имеет тот же размер.void casexchg(char *rdi, char *rsi, int dummy, size_t len);
При этом используется тот же алгоритм обмена битами, что и в ответах C и Java: если обе буквы имеют одинаковый регистр, их не нужно менять. Если они противоположны, они оба должны измениться.
Используйте XOR, чтобы отличить бит регистра двух строк.
mask = (a XOR b) AND 0x20
0 для одинаковых или 0x20 для разных.a ^= mask; b ^= mask
caseflip обе буквы, если они противоположны (Потому что буквенные коды ASCII для верхнего и нижнего отличаются только в бите 5.)Листинг NASM (с
nasm -felf64 -l/dev/stdout
). Используйте,cut -b 26- <casexchg.lst >casexchg.lst
чтобы превратить это в то, что вы можете собрать.Медленная
loop
инструкция также 2 байта, так же, как короткаяjcc
.scasb
все еще лучший способ увеличитьrdi
с помощью однобайтовой инструкции. Я думаю , мы могли быxor al, [rdi]
/stosb
. Это будет тот же размер, но, вероятно, быстрее дляloop
случая (память src + store дешевле, чем память dst + reload). И все равно установил бы ZF соответственно для случая неявной длины!Попробуйте онлайн! с _start, который вызывает его на argv [1], argv [2] и использует sys_write для результата
источник
k , 14 байтов
Попробуйте онлайн! Ввод / вывод - это список из двух строк.
источник
Python 3 , 83 байта
Попробуйте онлайн!
-3 байта благодаря мистеру Xcoder
-3 байта благодаря Часу Брауну
источник
Haskell , 78 байт
Попробуйте онлайн!
источник
QBasic, 133 байта
Принимает две строки через запятую и выводит результаты через новую строку. Использует алгоритм бит бит из ответа Денниса Желе . Кроме этого, основной трюк с гольфом заключается в том, что первая результирующая строка печатается напрямую, по одному символу за раз, что немного короче, чем сохранение обеих результирующих строк в переменных и печать их вне цикла.
источник
JavaScript,
777473 байтаПоказать фрагмент кода
Принимает массив char-массивов, выводит массив char-массивов.
-1 байт ( @Arnauld ):
c>'Z'
→c>{}
источник
c>{}
.Сетчатка , 75 байт
Попробуйте онлайн! Объяснение: Символы новой строки используются в качестве маркеров, чтобы определить, какая часть строки была обработана. Регулярное выражение пытается найти совпадение с заглавными буквами или с ошибкой в любых символах. Если заглавная буква совпадает, то другой символ пишется в верхнем регистре, в противном случае он в нижнем регистре и наоборот, в то время как переводы строки переносятся на следующий символ.
источник
Python 3 ,
7675 байтПопробуйте онлайн!
Выводит результат в виде одной строки с разделителем из одного символа.
Спасибо Джонатону Аллану за 1 байт.
источник
(y>'Z')*32
->ord(y)&32
Сборка (nasm, x64, Linux) , 25 байтов (источник 123 байта)
Шестнадцатеричные байты:
Точка входа в функцию at
a
, где строки передаются с использованиемRDI
иRSI
.Попробуйте онлайн!
источник
and al,32
только 2 байта, используя специальную кодировку AL, imm8, которую имеет большинство инструкций ALU. Вы можете потребовать длину строки в RCX и использоватьloop
. Я собирался сказать, что вы должны это сделать,test ah,ah
потому что это более эффективно, чемor
при одинаковой длине, но оно длиннее в исходном коде asm, поэтому старая идиома на самом деле имеет свои преимущества для игры в ас-исходный код: PЖеле , 13 байт
Попробуйте онлайн!
Также 13:
=ŒuṚ×32ạŒlO$Ọ
(или=ŒuṚæ«5ạŒlO$Ọ
)источник
Древесный уголь , 17 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод как массив из двух строк. Объяснение:
источник
F #, 120 байтов
Мудак.
Попробуйте онлайн!
Функция
g
принимает две строки в качестве параметров.Seq.fold2
применяет функцию с аккумулятором (a
) к каждому элементу (x
иy
) в строках. Изначальноa
это пустая строка, и она добавляет к ней преобразованный символ в каждой итерации.b
это основная функция. Сначала он преобразуется поf
отношению кs
, а затем преобразует поs
отношению кf
. Затем он возвращает кортеж с обоими значениями.источник
Пролог (SWI) , 121 байт
Попробуйте онлайн!
источник
Рубин ,
7469 байтПопробуйте онлайн!
Ввод и вывод - это массивы символов, поэтому нижний колонтитул выполняет преобразования строк и обратно.
Я еще не уверен, является ли это хорошим подходом к проблеме, но этот вызов определенно выглядит как хороший сценарий использования
swapcase
метода.источник
PHP 4.1.2 , 40 байт
Замените пару кавычек байтом A0 (в ISO-8859-1 или Windows-1252 это NBSP), чтобы отобразить счетчик байтов, затем запустите из веб-браузера (или из командной строки), предоставив строки в виде аргументы строки запроса (или переменные окружения)
a
иb
.В этой версии PHP, register_globals включен по умолчанию, поэтому строки будут автоматически назначаться переменным
$a
и$b
. Увеличьте значение2e5
(200000) при необходимости.PHP 7.1+, 58 байт
Запустите в командной строке, используя
php -r 'code here' string1 string2
:Значение
3e5
(300000) выбрано превышающим (MAX_ARG_STRLEN * 2 + 1) в большинстве систем Linux (в частности, x86 и других архитектурах, для которых PAGE_SIZE - 4096, а MAX_ARG_STRLEN - 131072), чтобы избежать проблем с любой возможной входной строкой. Увеличьте при необходимости.Попробуйте онлайн!
источник
Stax , 10 байт
Запустите и отладьте его
Вот незагрязненное представление той же программы, чтобы показать, как она работает.
Запустите этот
источник
Crystal , 108 байт
Попробуйте онлайн!
Как это работает?
источник