your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
Описание
Вход две строки, s1
и s2
, равны по длине. Каждый из них будет содержать только печатный ASCII и иметь длину не менее одного символа. Вы можете ввести их как две строки, массив из двух строк, или одну строку с s1
и s2
разделены либо вкладки или символ новой строки.
Вывод следующий:
Для каждого персонажа
c
вs1
:Если символ не буква, выведите его без изменений.
В противном случае, если
c
это письмо:Найдите соответствующий символ (тот же индекс) в
s2
.Если это заглавная буква, то вывод
c
заглавными.Если это строчная буква, выведите
c
строчную.В противном случае вывод
c
без изменений.
Затем сделайте то же самое, за исключением
s1
иs2
переключился.
По сути, все буквы, s1
для которых совпадающий символ в s2
является заглавной, должны быть заглавными, а все буквы s1
с строчной буквой в том же индексе s2
должны быть строчными (и наоборот).
Контрольные примеры
Входные данные:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Выход:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Входные данные:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Выход:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Входные данные:
AAAbbb111
Cc2Dd3Ee4
Выход:
AaABbb111
CC2dd3Ee4
Ответы:
Pyth,
1918 байтЭто определяет функцию y, которая принимает и возвращает список строк.
Проверьте все тестовые случаи одновременно в Pyth Compiler / Executor .
Спасибо @Jakube за отыгрывание 1 байта.
Как это работает
источник
CJam, 25 байтов
Это анонимная функция, которая извлекает массив строк из стека и оставляет одну взамен.
В поддерживаемых браузерах вы можете проверить все тестовые случаи одновременно в интерпретаторе CJam .
Контрольные примеры
Код
вход
Выход
Как это работает
источник
C 126 байтов
Это моя первая попытка в коде гольф, когда-либо. Дайте мне знать, если я сделал что-то не так.
Я использую побитовые операции для переключения
Golfed:
Ungolfed:
изменить: заменить && на *
источник
SQL (PostGreSQL), 427 байт
Несмотря на его огромный размер, он оказался немного меньше, чем я ожидал. Я не был уверен, что смогу сделать это, если честно. Я подозреваю, что многое еще можно сделать :)
Отформатировано и прокомментировано
Тестовый забег
источник
Юлия, 140 байт
Это создает функцию, которая принимает две строки и возвращает кортеж строк. Ничего особенно умного здесь не происходит; мы просто определяем внутреннюю функцию, которая непосредственно реализует алгоритм в спецификации, и вызываем ее дважды.
Ungolfed:
источник
JavaScript ES6,
128108 байтJavaScript
toUpperCase()
иtoLowerCase()
занимают много байтов, ноString.fromCharCode()
еще дольшеисточник
s2
не является буквой, а соответствующий символ вs1
верхнем регистре. В этом случае,c
вs1
должны быть возвращены без изменений.Mathematica,
173169155 байтовЭто функция, принимающая массив из двух строк, например,
{"Foo","bAR"}
и выводящая массив из двух строк. Un-пространственно-сжать его, перезапись схему ,f@x
какf[x]
там , где она появляется, расширяя обозначения сокращений (f=0>1
он жеFalse
,t=!f
иначеTrue
,c=Characters
иu=ToUpperCaseQ
), и снимите замены UpperCaseQ [#] с#==u@#
(этот символ равен ее версии в верхнем регистре), это:Интерфейс: трейлинг
&
делает это функцией. Его аргумент вставляется как "#" в обоих случаях/@ #
. Например,f=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
производит вывод{AaABbb111,CC2dd3Ee4}
.Обработка: Сказано в обычном снаружи в порядке:
MapThread[...]
является список из двух списков символов. StringJoin применяется к каждому из этих двух списков символов, чтобы сформировать список из двух строк, выводимых.MapThread[#[#2]&, ... , 2]
действует на массив из двух списков элементов размером 2 на n. Первый список представляет собой массив функций 2 на n. Второй список представляет собой массив символов 2 на nCharacters /@ #
, списки символов в двух входных строках. Работает на глубине 2, т. Е. Над функциями и отдельными персонажами.Reverse[...]
меняет местами два подсписка функций, так что MapThread будет применять функции второй строки к первой строке и наоборот.{ ... } &
является анонимной функцией, которая применяется к каждой из двух входных строк.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
разбивает строку на список символов, а затем заменяет каждый символ двумя списками элементов. В этих двух списках элементов первый элемент - этоTrue
если символ является буквой, а вFalse
противном случае аналогичным образом второй элемент указывает, является ли символ заглавным.UpperCaseQ[]
не может вернуть истину, если не получил письмо./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
заменяет эти два списка элементов функциями. (Расширение сокращенийt
иf
происходит до того , как совпадающая попытку.) Если список из двух элементов имеют вFalse
качестве своего первого элемента, он заменяется функцией(# &)
, функция идентификации. (Скобки необходимы, в противном случае стрелка связывается более тесно, чем амперсанд.) В противном случае список из двух элементов начинается с тогоTrue
, что символ представляет собой букву, и мы выводим функцииToUpperCase
иToLowerCase
соответствуют их регистру. (Проверять это последнееFalse
не нужно, на самом деле{_,_}->ToLowerCase
сработало бы, отлавливая все, что еще не было заменено, но это было бы не короче и не мрачнее.)Единственная проблема заключалась в том, чтобы найти краткий способ объединить двумерный массив функций в массив аргументов.
Изменить: Благодаря @Martin Büttner для ловли «полезно» вырезать / вставить LineBreak обратных косых черт, то
1>0
и1<0
аббревиатуры, а также для указания посчитать длину в байтах не символы (независимо от тех , которые :-))Edit2: Кроме того, спасибо @Martin Büttner за то, что он указал на то, что загрязнение глобального пространства имен является приемлемым гольфом, напомнив мне об одном приложении функции символа и предложив заменить две заглавные функции на одну аббревиатуру и использовать одну для эмуляции другой (сохранение четыре символа). (Я думаю, что он делал это раньше. :-))
источник
f@g
вместоf[g]
(по всему коду). Я также уверен, что вам не нужен блок. Просто делай(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. Это загрязняет глобальное пространство имен, но мы полностью согласны с этим при игре в гольф. Кроме того, я не учел, но вы могли бы сохранить байты, сохраняяToUpperCase
в переменной (u
скажем) и заменяяUpperCaseQ@#
на#==u@#
.Python 3, 131 байт
Функция возвращает строки в кортеже
источник
Эрланг, 157 байт
Упакует две строки (фактически, списки) в список с двумя символами-кортежами и отображает каждый символ в соответствующий регистр, используя понимание списка.
источник
Python 2, 101 байт
Анонимная функция, которая принимает две строки и возвращает выходные строки в списке. Я пометил это как Python 2, потому что Python 3 не позволяет
I,I[::-1]
сидеть одному в конце, как это.источник
Python, 126 байт
Функция
f
возвращает строки в кортежеисточник
C 181 байт
Были проблемы с укорочением имен стандартных библиотек (# определение их занимает 11 символов). Использует основную рекурсию и глобальные переменные x и y в качестве аргументов.
main (<non-zero>, argv) = вызвать main (0, {argv [1], argv [2]}), затем вывести новую строку, затем вызвать main (0, {argv [2], argv [1]})
main (0, {x, y}) = если x является концом строки, возвращает 0, иначе выведите правильный регистр первого символа x и вызовите main (0, {x + 1, y + 1}).
Запустите с двумя строками в качестве аргументов.
источник
C -
164153 байта - GCCgcc prog.c
./a.out AfdgF a2dfsd
Будет ли обновление, если я могу получить wc -c. Работает очень хорошо на самом деле
источник
F #, 211 символов
могло быть лучше ...
источник
Матлаб, 140
Ungolfed:
Пример:
источник
C 164 байта
В значительной степени реализует алгоритм, как описано в задаче. Принимает 2 строки в качестве входных параметров.
Ungolfed:
источник
Руби, 102
Принимает оригинальные строки, пары букв в массивах. Если они ниже / cap или cap / ниже, то поменяйте местами на обоих. Затем перенесите массивы обратно в наш упорядоченный массив.
Это требует запятой новой строки при вводе.
источник
Perl 5.10+,
10199 байт96 байтов + 3 байта для флагов командной строки
p00
. Принимает одну строку с разделителями новой строки в качестве входных данных:Или вы можете ввести ввод на STDIN:
Сломано:
источник
Первая попытка в скале, 138 символов
f - это функция, которая принимает две входные строки и выполняет работу с локальной функцией, используемой два раза, для изменения регистра строк.
Тот же код, с отступом и просто более читаемыми именами:
источник
Желе , 13 байт
Монадическая ссылка, принимающая и возвращающая списки из двух «строк» (списки символов в желе).
Попробуйте онлайн!
источник
Python 2 , 97 байт
Попробуйте онлайн!
источник
Tcl , 194 байта
Попробуйте онлайн!
источник
Haskell ,
10991 байтСпасибо @Laikoni за 16 байтов!
Попробуйте онлайн!
источник