Co się stanie, gdy CapsLockklawisz na klawiaturze nie będzie miał wycięcia?
„Ten hPPENS”.
Celem tego programu jest konsekwentna emulacja chybotania klawiatury, gdzie każde Anaciśnięcie jest zastępowane CapsLock. Wielkie litery „A” ze źródła powinny dawać ten sam efekt. Po CapsLockwłączeniu wielkie litery są odwracane.
Przypadki testowe
"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?"
Kryterium wygranej jest, jak zwykle, rozmiar kodu źródłowego przesłanego programu.
teSTateSTateSTateST
Odpowiedzi:
AutoHotKey , 7 bajtów
// Czy to jest ważne? To naprawdę robi to, czego chce OP - zastąp aprzez CapsLock (vk14).
Uruchom ten program i wpisz dane wejściowe z klawiatury.
źródło
V , 9 bajtów
Wypróbuj online!
Hexdump:
Wyjaśnienie:
źródło
Vim, 16 bajtów
Zakłada, że dane wejściowe są w jednej linii
Wyjaśnienie
źródło
\c
dowolnym miejscu wyszukiwania wyrażenia regularnego umożliwia rozróżnianie wielkości literg~$
do działania? Ponieważ dla mnie odwraca tylko wielkość liter do końca wiersza, a nie cały plik, więc to tak naprawdę nie działa dla plików wielowierszowych.g~vG
lubvG~
.C, 72 bajty
Dzięki @Ton Hospel za pomoc w oszczędzaniu 16 bajtów!
Wypróbuj online!
źródło
t
być0/32
zamiast parzyste / nieparzyste (xor T z 32 dla każdegoa
), a następnie xor litery bezpośrednio zt
a
„s6305%c
wynosi 0, jeślic
wynosi 13.Łuska , 11 bajtów
Wypróbuj online!
Wyjaśnienie
Używam nieco niejasnego przeciążenia
Γ
wywołanialistNF
, które konstruuje funkcje rekurencyjne działające na listach. Odpowiada następującemu wzorowi Haskella:Chodzi o to, że
listNF
przyjmuje funkcję pomocnikaf
i zwraca nową funkcjęg
, która pobiera listę. Funkcjaf
przyjmuje funkcję, która zawsze będzieg
, a także głowęx
i ogonxs
listy i coś z nimi robi. W naszej aplikacjif
połączeniag
rekurencyjnie są włączonexs
. Program jest interpretowany w następujący sposób:źródło
Ḟ·+m\ṁx'Ax'a
. Czy możemy uzyskać wyjaśnienie? Nie mogę znaleźć żadnych informacji na temat tego, coΓ
dokładnie robi, a to wydaje się być dobrą szansą na naukę.Γ
jest nieco trudna do wyjaśnienia, mam nadzieję, że możesz to zrozumieć.Γ
wydaje się być ogólnie powolne. Jeśli nie znasz Huska, program interpretuje się, przechodząc przez wszystkie możliwe struktury programu (w zasadzie możliwe położenia nawiasów) i wszystkie przeciążenia każdego wbudowanego, i wybierając ten pierwszy, w którym wynik jest dobrze- wpisane. Tłumacz jest wystarczająco inteligentny, aby odrzucić niektóre możliwości wcześniej, ale wydaje się, że rekurencyjna wersjaΓ
może zepsuć ten krok i zmusić go do zapętlenia wielu wyborów.Γ
szczegółowo .Retina ,
332117 bajtówWypróbuj online
Wyjaśnienie:
-12 bajtów dzięki Martinowi
-4 bajtów dzięki Leo
źródło
iT`aAlL`__Ll`a[^a]*a?
działa również na 21 bajtów.C # , 121 bajtów
** Aktualizacja (dzięki @John i @aloisdg) **
C # , 69 bajtów
źródło
new[] { 'a', 'A' }
na'a', 'A'
JavaScript (ES6),
93888482 bajtów(zapisane 5 bajtów dzięki @Shaggy, 4 bajty dzięki @ user81655 i 2 bajty dzięki @ l4m2.)
Przypadki testowe:
Pokaż fragment kodu
źródło
['to${c<'a'?'Low':'Upp'}erCase']
powinien zaoszczędzić kilka bajtów, zastępując pojedyncze cudzysłowy odwrotnymi znakami.^1
mająu
być parytet mogę pozwolić ci zainicjalizować ją skrócić:s=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
krótszego listu :a=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
operatora. Zawsze więcej do nauki!R , 92 bajty
Dziękujemy @Giuseppe za naprawienie odpowiedzi.
Wyjaśnienie
Wypróbuj online!
źródło
toupper
), co jest wymogiem.c(F,T)
, chociaż @Broadwell ma rację; wygląda na to, że będziechartr("a-zA-Z","A-Za-z",v)[w]
raczej niżtoupper
PowerShell Core , 105 bajtów
Wypróbuj online!
Co nie ma prawdziwego operatora trójskładnikowego i nie ma domyślnego aliasu do drukowania na ekranie, to nie jest takie krótkie.
% t*y
rozwija się do| ForEach-Object -Method ToCharArray
ekwiwalentu. z"$args".ToCharArray()
Write-Host -n
jest dla parametru-NoNewLine
"$_"
zmienia[char]
typ z powrotem na[string]
(znaki nie mają wielkich / małych liter w .Net)|% *per
robi ten sam skrót wywołania metody jak wcześniej, ale dla tego.ToUpper()
samego z.ToLower()
($a,$b)[boolean test]
nadużywane jako fałszywy operator trójskładnikowy!!$c
force-casts[bool]
tutaj zaczyna się niezdefiniowany,$null
więc zostaje zmuszony do istnienia jako „caps lock: $ false”.źródło
|% t*y
fajna sztuczka, którą muszę zapamiętać. Krótszy niż[char[]]
, z którego często korzystam. Prawie powiedziałbym, że powinien przejść do wątku Porady.-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. dzięki za|% *ethod
operatora!Perl 5
-p
,313029 bajtów-1 bajt dzięki @nwellnhof
-1 bajt dzięki @ikegami
Wypróbuj online!
źródło
s/a(.*?)(a|$)/uc$1/egi
(22 bajty)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
jest o jeden bajt krótszy.a([^a]*)a?
jest krótszy niża(.*?)(a|$)
Python, 63 bajty
Kolejne rozwiązanie Python, działa w Python 2 i 3. Zajmuje bardzo dużo czasu dla wszystkich danych oprócz małych.
źródło
Procedura kodu maszynowego 6502 (C64), 51 bajtów
Oczekuje wskaźnika do łańcucha wejściowego zakończonego na 0 w
$fc/$fd
, który jest wyświetlany na ekranie.Skomentowano demontaż
Przykładowy program asemblera wykorzystujący procedurę:
Demo online
Kod w składni ca65 :
źródło
Java 8,
11910898 bajtów-11 bajtów dzięki @ OlivierGrégoire .
-10 bajtów dzięki @Nevay .
Wyjaśnienie:
Wypróbuj online.
źródło
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);}
DO,
167168158131 bajtówDzięki za @Martin Ender za przegląd kodu: zmieniłem przetwarzanie strumienia na przetwarzanie ciągów, aby pomóc w ponownym użyciu. Dziękujemy również @RiaD i @ceilingcat za sugestie.
Wypróbuj online!
Jak to działa?
Uwagi
s[][]
tam, gdzie dzieje się magia:[][0]
jest funkcja porównania i[][1]
jest powiązaną funkcją transformacji dla każdego stanu.!
jest stosowany do funkcji porównania w celu wymuszenia jej w zakresie [0,1].źródło
d
ponieważ oznacza to, że twojej funkcji nie można ponownie użyć . Prostyd=0;
powinien to naprawić.void f(){int c,d=0;[...]
. W każdym razie strumień umiera, więc edycja jest w porządku!Haskell , 92 bajty
Wypróbuj online!
Wyjaśnienie
Najpierw deklarujemy,
g
że jest funkcją, która odwzorowuje małe litery na wielkie i wielkie litery na małe. Jest to właściwie większość naszego bajtu. Następnie definiujemy funkcjęf
. Jeśli dane wejściowe mająf
postać,a:b
którą wykonujemya
iA
dopasuj pierwszy wzorzec, a zatem zastosujemyf
do danych wejściowych z odwróconą wielkością liter. W przeciwnym razie ruszamya
z przodu i ubiegamy sięf
ob
.źródło
Wolfram Language (Mathematica) , 70 bajtów
Wypróbuj online!
Pobiera dane wejściowe i wyjściowe jako listę znaków. Dla wygody dodałem kod w stopce, aby przekonwertować to zi na ciąg znaków.
Jak to działa
Część
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
jest standardowa: znajdujemy pierwsząA
(wielką lub małą), odwrotna wielkość jest następująca poA
i powtarzamy, aż nie będzie już więcejA
.Interesującą częścią jest to, jak odwracamy wielkość liter: funkcja
ToUpperCase@# + ToLowerCase@# - #&
. Dodajemy razem wielkoformatową wersję danych wejściowych i małą literę wersji danych wejściowych, a następnie odejmujemy rzeczywiste dane wejściowe. Na przykład, biorąc pod uwagę listę{"I","n","P","u","T"}
to obliczaktóre wątki nad listami jako
Mathematica i chociaż nie ma żadnego szczególnego sposobu dodawania dwóch ciągów, jest wystarczająco inteligentny, aby uprościć
a+b-a
dob
wszelkich wartościa
ib
, w tym ciągów znaków, więc ten upraszcza się{"i","N","p","U","t"}
.źródło
Rubin ,
4241 bajtówWypróbuj online!
Lambda przyjmuje łańcuch, mutuje go w miejscu i zwraca. Sztuczka polega na tym, że
sub
zwraca łańcuch (wartość zgodna z prawdą), jeśli dokonano podstawienia, i zwracanil
inaczej. Istnienieswapcase
jest również bardzo przydatne.-1 bajt: Zastąp logikę logiczną operatorem trójskładnikowym, dzięki Asone Tuhid
źródło
PHP
10199 bajtówUruchom tak:
Nie golfowany:
To po prostu zapętla łańcuch za pomocą pętli for, a na każdej iteracji sprawdza, czy bieżąca litera jest
a
, jeśli tak, to odwróć wielkość liter całego łańcucha (metoda stąd ), a jeśli nie, to wydrukuj bieżącą literę.źródło
$argn
,$argv
,$_GET
). W tej chwili nie jest to prawidłowe zgłoszenie. Return musi byćecho
edytowany lubreturn
edytowany (dozwolony tylko dla funkcji ofc).Galaretka , 14 bajtów
Wypróbuj online!
Pełny program
Wyjaśnienie:
źródło
MATL ,
2320 bajtówWypróbuj online!
Wyjaśnienie:
Starsza odpowiedź (23 bajty):
„H @ aA'm? ~ XHx} @ w ~? Yo] & h
Inne metody, które wypróbowałem:
źródło
Łuska , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Japt v2.0a0, 16 bajtów
Spróbuj
Wyjaśnienie
źródło
SNOBOL4 (CSNOBOL4) ,
14192 bajtówWypróbuj online!
Zakłada pojedynczy wiersz danych wejściowych.
Aż 49 bajtów zapisanych przez @ninjalj !
Linia
S
wykonuje całą pracę, wyjaśniono poniżej:źródło
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Fortran (GFortran) , 307 bajtów
Wypróbuj online!
Ponieważ Fortran nie ma „zaawansowanych” narzędzi do radzenia sobie ze strunami, wymyśliłem tego małego potwora.
Wcięte i skomentowane:
źródło
Stax , 12 bajtów
Uruchom i debuguj online
Dzieli się na regex, a następnie na przemian przełącza wielkość liter. Oto ten sam program, rozpakowany, nieposortowany i skomentowany.
Uruchom ten
źródło
JavaScript (ES6),
8079 bajtów(Częściowo na podstawie tej odpowiedzi Ricka Hitchcocka. Publikowanie jako osobna odpowiedź, ponieważ nie mam wystarczającej reputacji, aby komentować.)
(Zapisano 1 bajt dzięki postowi @ l4m2 tutaj .)
źródło
Brudny , 55 bajtów
Wypróbuj online!
Prawdopodobnie może być o jedną trzecią krótszy.
Napiszę wyjaśnienie i pograć w golfa, gdy będę na komputerze.
źródło
Python 3,
7872 bajtówźródło
m[1]
zamiastm.group(1)
Python 3.6+.