Что происходит, когда CapsLockна клавиатуре нет надреза?
"Это hPPENS."
Цель этой программы состоит в том, чтобы последовательно эмулировать пропуски клавиатуры, где каждое Aнажатие заменяется CapsLock. Прописные буквы «А» из источника должны дать тот же эффект. Когда CapsLockвключено, использование заглавных букв в обратном порядке.
Тестовые случаи
"The quick brown fox jumps over the lazy dog."
-> "The quick brown fox jumps over the lZY DOG."
"Compilation finished successfully."
-> "CompilTION FINISHED SUCCESSFULLY."
"What happens when the CapsLock key on your keyboard doesn't have a notch in it?"
-> "WhT Hppens when the CPSlOCK KEY ON YOUR KEYBOrd doesn't hVE notch in it?"
"The end of the institution, maintenance, and administration of government, is to secure the existence of the body politic, to protect it, and to furnish the individuals who compose it with the power of enjoying in safety and tranquillity their natural rights, and the blessings of life: and whenever these great objects are not obtained, the people have a right to alter the government, and to take measures necessary for their safety, prosperity and happiness."
-> "The end of the institution, mINTENnce, ND dministrTION OF GOVERNMENT, IS TO SECURE THE EXISTENCE OF THE BODY POLITIC, TO PROTECT IT, nd to furnish the individuLS WHO COMPOSE IT WITH THE POWER OF ENJOYING IN Sfety ND TRnquillity their nTURl rights, ND THE BLESSINGS OF LIFE: nd whenever these greT OBJECTS re not obtINED, THE PEOPLE Hve RIGHT TO lter the government, ND TO Tke meSURES NECESSry for their sFETY, PROSPERITY nd hPPINESS."
"aAaaaaAaaaAAaAa"
-> "" (Without the notch, no one can hear you scream)
"CapsLock locks cAPSlOCK"
-> "CPSlOCK LOCKS CPSlOCK"
"wHAT IF cAPSlOCK IS ALREADY ON?"
-> "wHt if CPSlOCK IS lreDY ON?"
Критерием выигрыша, как обычно, является размер исходного кода представленной программы.
teSTateSTateSTateST
Ответы:
AutoHotKey , 7 байтов
// Это верно? Это действительно делать то, что хочет ОП - заменить aна CapsLock (vk14).
Запустите эту программу и введите ввод с клавиатуры.
источник
V , 9 байт
Попробуйте онлайн!
HexDump:
Объяснение:
источник
Vim, 16 байт
Предполагается, что ввод в одной строке
объяснение
источник
\c
где-нибудь в поиске регулярных выражений обеспечивает нечувствительность к региструg~$
работы? Потому что для меня это инвертирует регистр только до конца строки, а не весь файл, так что это не работает для многострочных файлов для меня.g~vG
илиvG~
.C 72 байта
Спасибо @Ton Hospel за помощь в экономии 16 байт!
Попробуйте онлайн!
источник
t
быть0/32
вместо четного / нечетного (XOR т с 32 по каждомуa
) , а затем XOR букве непосредственноt
a
это6305%c
0, еслиc
есть 13.Шелуха , 11 байт
Попробуйте онлайн!
объяснение
Я использую несколько непонятную перегрузку
Γ
вызываемогоlistNF
, который создает рекурсивные функции, которые работают со списками. Это соответствует следующей схеме Haskell:Идея состоит в том, чтобы
listNF
получить вспомогательную функциюf
и вернуть новую функциюg
, которая принимает список. Функцияf
берет функцию, которая всегда будетg
и в голове,x
и в хвостеxs
списка, и что-то с ними делает. В нашем приложении рекурсивныеf
вызовыg
включеныxs
. Программа интерпретируется так:источник
Ḟ·+m\ṁx'Ax'a
. Можем ли мы получить объяснение? Я не могу найти какую-либо информацию о том,Γ
что именно, и это похоже на хороший шанс узнать.Γ
немного сложно объяснить, я надеюсь, что вы сможете понять ее.Γ
кажется, в целом медленный. Если вы не знакомы с Husk, программа интерпретируется путем циклического прохождения всех возможных структур программы (по существу, возможных положений круглых скобок) и всех перегрузок каждого встроенного элемента, а также выбора первой, где результат будет хорошим. набран. Интерпретатор достаточно умен, чтобы рано отвергать некоторые возможности, но кажется, что рекурсивная версияΓ
может испортить этот шаг и вынудить его пройти через множество вариантов.Γ
в некоторых деталях .Сетчатка ,
332117 байтПопробуйте онлайн
Объяснение:
-12 байт благодаря Мартину
-4 байт благодаря Лео
источник
iT`aAlL`__Ll`a[^a]*a?
также работает на 21 байт.C # , 121 байт
** Обновление (благодаря @John & @aloisdg) **
C # , 69 байт
источник
new[] { 'a', 'A' }
на'a', 'A'
JavaScript (ES6),
93888482 байта(Сохранено 5 байтов благодаря @Shaggy, 4 байта благодаря @ user81655 и 2 байта благодаря @ l4m2.)
Тестовые случаи:
Показать фрагмент кода
источник
['to${c<'a'?'Low':'Upp'}erCase']
должен сэкономить вам несколько байтов, заменив одинарные кавычки на обратные.^1
иметьu
паритет» может позволить вам короче инициализировать его:s=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
которое короче:a=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
оператора. Всегда больше учиться!R , 92 байта
Спасибо @Giuseppe за исправление ответа.
объяснение
Попробуйте онлайн!
источник
toupper
), что является обязательным требованием.c(F,T)
, хотя @Broadwell прав; Похоже, это будетchartr("a-zA-Z","A-Za-z",v)[w]
скорее, чемtoupper
PowerShell Core , 105 байт
Попробуйте онлайн!
Без реального троичного оператора и псевдонима по умолчанию для печати на экране, это не так уж и мало.
% t*y
расширяется до| ForEach-Object -Method ToCharArray
экв. из"$args".ToCharArray()
Write-Host -n
для параметра-NoNewLine
"$_"
поворачивает[char]
тип обратно[string]
(символы не имеют верхний / нижний регистр в .Net)|% *per
выполняет тот же ярлык вызова метода, что и ранее, но для того.ToUpper()
же.ToLower()
($a,$b)[boolean test]
злоупотребляют как фальшиво-троичный оператор!!$c
При приведении к принудительному приведению[bool]
здесь начинается неопределенное значение,$null
поэтому оно принудительно возникает как «caps lock: $ false».источник
|% t*y
хитрый трюк, который мне нужно запомнить. Короче, чем[char[]]
я пользуюсь много. Я бы почти сказал, что следует перейти к теме «Советы».-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. спасибо за|% *ethod
оператора!Perl 5
-p
,313029 байт-1 байт благодаря @nwellnhof
-1 байт благодаря @ikegami
Попробуйте онлайн!
источник
s/a(.*?)(a|$)/uc$1/egi
(22 байта)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
на один байт короче.a([^a]*)a?
корочеa(.*?)(a|$)
Python, 63 байта
Другое решение Python, работает в Python 2 и 3. Требуется очень много времени для всех, кроме небольших входов.
источник
6502 подпрограммы машинного кода (C64), 51 байт
Ожидает указатель на входную строку с нулем в
$fc/$fd
конце, выводит на экран.Прокомментировал разборку
Пример программы на ассемблере с использованием подпрограммы:
Онлайн демо
Код в синтаксисе ca65 :
источник
Java 8,
11910898 байт-11 байт благодаря @ OlivierGrégoire .
-10 байт благодаря @Nevay .
Объяснение:
Попробуйте онлайн.
источник
s->{int z=0,d;for(int c:s)if((d=c&95)==65)z^=1;else System.out.printf("%c",z<1|d<66|d>90?c:c<91?c|32:c&95);}
s->{int f=0,t;for(int c:s)if((t=c&95)==65)f^=1;else System.out.printf("%c",f<1|t<66|t>90?c:c^32);}
C
167168158131 байтСпасибо @Martin Ender за обзор кода: я переключил потоковую обработку для обработки строк, чтобы помочь с возможностью повторного использования. Также большое спасибо @RiaD и @ceilingcat за их предложения.
Попробуйте онлайн!
Как это работает?
Примечания
s[][]
где происходит волшебство:[][0]
это функция сравнения и[][1]
связанная функция преобразования для каждого состояния.!
применяется к функции сравнения, чтобы заставить его в диапазоне [0,1].источник
d
как это, потому что это означает, что ваша функция не может быть повторно использована . Простоеd=0;
должно это исправить.void f(){int c,d=0;[...]
. В любом случае, поток умирает, поэтому редактирование в порядке!Haskell , 92 байта
Попробуйте онлайн!
объяснение
Сначала мы объявляем
g
функцию, которая отображает строчные и прописные буквы, а прописные - строчные. Это на самом деле большинство нашего bytecount. Затем мы определяем функциюf
. Если входf
имеет форму, которуюa:b
мы делаемa
иA
соответствовать первому шаблону, и, таким образом, мы применяемf
к входу инвертированный регистр. В противном случае мы выходимa
вперед и обращаемсяf
кb
.источник
Wolfram Language (Mathematica) , 70 байт
Попробуйте онлайн!
Принимает ввод и вывод в виде списка символов. Для удобства я добавил код в нижний колонтитул, чтобы преобразовать его и обратно в строку.
Как это устроено
Часть
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
стандартна: мы находим первыйA
(верхний или нижний регистр), обратный регистр которого следует послеA
, и повторяем, пока больше неA
будет найдено.Интересная часть - как мы обращаем внимание на случай: функция
ToUpperCase@# + ToLowerCase@# - #&
. Мы складываем версию ввода в верхнем регистре и версию ввода в нижнем регистре, затем вычитаем фактический ввод. Например, учитывая список, который{"I","n","P","u","T"}
вычисляеткакие потоки над списками как
и хотя Mathematica не имеет какого - либо конкретного способа добавления двух строк, он достаточно умен , чтобы упростить ,
a+b-a
чтобыb
при любых значенияхa
иb
, в том числе строковых значений, так что это упрощает для{"i","N","p","U","t"}
.источник
Рубин ,
4241 байтПопробуйте онлайн!
Лямбда, принимающая строку, изменяющая строку на месте и возвращающая ее. Хитрость здесь в том, что
sub
возвращает строку (истинное значение), если была сделана замена, и возвращает вnil
противном случае. Существованиеswapcase
тоже очень удобно.-1 байт: заменить булеву логику на троичный оператор, благодаря Асоне Тухиду
источник
PHP
10199 байтЗапустите так:
Ungolfed:
Это просто перебирает строку с циклом for, и на каждой итерации проверяет, является ли текущая буква
a
, если так, то переворачивает регистр всей строки (метод отсюда ), а если нет, то печатает текущую букву.источник
$argn
,$argv
,$_GET
). Так что на данный момент это неверное представление. Возврат должен бытьecho
ed илиreturn
ed (разрешено только для функций ofc).Желе , 14 байт
Попробуйте онлайн!
Полная программа.
Объяснение:
источник
MATL ,
2320 байтПопробуйте онлайн!
Объяснение:
Старый ответ (23 байта):
«Н @ aA'm? ~ XHx} @ ш ~? Yo] & ч
Другие методы, которые я пробовал:
источник
Шелуха , 15 байт
Попробуйте онлайн!
объяснение
источник
05AB1E , 12 байтов
Попробуйте онлайн!
объяснение
источник
Japt v2.0a0, 16 байт
Попробуй
объяснение
источник
SNOBOL4 (CSNOBOL4) ,
14192 байтаПопробуйте онлайн!
Предполагает одну строку ввода.
Колоссальные 49 байтов сохранены @ninjalj !
Линия
S
выполняет всю работу, объясненную ниже:источник
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Фортран (GFortran) , 307 байтов
Попробуйте онлайн!
Поскольку у Fortran нет «продвинутых» инструментов для работы со строками, я придумал этого маленького монстра.
Отступы и комментарии:
источник
Stax , 12 байт
Запустите и отладьте его онлайн
Он разделяется на регулярное выражение, а затем поочередно переключает регистр. Вот та же самая программа, распакованная, разархивированная и прокомментированная.
Запустите этот
источник
Javascript (ES6),
8079 байт(Частично на основе этого ответа Рика Хичкока. Публикация в качестве отдельного ответа, потому что у меня недостаточно репутации, чтобы комментировать.)
(Сохранено 1 байт благодаря записи @ l4m2 здесь .)
источник
Грязный , 55 байт
Попробуйте онлайн!
Вероятно, может быть примерно на треть короче.
Я напишу объяснение и еще немного поиграю в гольф, когда буду на рабочем столе.
источник
Python 3,
7872 байтаисточник
m[1]
вместоm.group(1)
Python 3.6+.