Was passiert, wenn die CapsLockTaste auf Ihrer Tastatur keine Kerbe aufweist?
"Das ist HPPENS."
Das Ziel dieses Programms ist es, Tastaturfehlschläge konsequent zu emulieren, bei denen jedes ADrücken durch ersetzt wird CapsLock. Großbuchstaben von der Quelle sollten den gleichen Effekt erzielen. Wenn CapsLockaktiviert, wird die Großschreibung umgekehrt.
Testfälle
"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?"
Das Gewinnkriterium ist wie üblich die Größe des Quellcodes des eingereichten Programms.
teSTateSTateSTateST
Antworten:
AutoHotKey , 7 Bytes
// Ist das gültig? Dies ist wirklich das, was der OP will - ersetzen adurch CapsLock (vk14).
Führen Sie dieses Programm aus und geben Sie die Eingabe über die Tastatur ein.
quelle
V , 9 Bytes
Probieren Sie es online!
Hexdump:
Erläuterung:
quelle
Vim, 16 Bytes
Angenommen, die Eingabe erfolgt in einer einzelnen Zeile
Erläuterung
quelle
\c
überall in einer Regex-Suche ermöglicht Groß -und Kleinschreibungg~$
es funktioniert? Weil es bei mir nur die Groß- / Kleinschreibung bis zum Ende der Zeile invertiert, nicht die gesamte Datei, so dass dies bei mehrzeiligen Dateien für mich nicht wirklich funktioniert.g~vG
oder ausführenvG~
.C 72 Bytes
Vielen Dank an @Ton Hospel für die Unterstützung beim Sparen von 16 Bytes!
Probieren Sie es online!
quelle
t
seine0/32
anstelle von gerade / ungerade (xor t mit 32 für jedena
) und dann xor Buchstaben direkt mitt
a
's zu erkennen6305%c
ist 0, wennc
ist 13.Schale , 11 Bytes
Probieren Sie es online!
Erläuterung
Ich benutze die etwas obskure Überladung von
Γ
calledlistNF
, die rekursive Funktionen aufbaut, die mit Listen arbeiten. Es entspricht dem folgenden Haskell-Muster:Die Idee ist, dass
listNF
eine Hilfsfunktion verwendet wirdf
und eine neue Funktion zurückgegeben wirdg
, die eine Liste verwendet. Die Funktionf
nimmt eine Funktion, die es immer geben wirdg
, sowie den Kopfx
und den Schwanzxs
der Liste und macht etwas mit ihnen. In unserer Anwendungf
ruftg
rekursiv aufxs
. Das Programm wird folgendermaßen interpretiert:quelle
Ḟ·+m\ṁx'Ax'a
. Könnten wir eine Erklärung bekommen? Ich kann keine Informationen darüber finden, wasΓ
genau funktioniert, und dies scheint eine gute Chance zu sein, etwas zu lernen.Γ
ist ein bisschen schwer zu erklären, ich hoffe, Sie können einen Sinn daraus machen.Γ
scheint im Allgemeinen langsam zu sein. Wenn Sie mit Husk nicht vertraut sind, wird ein Programm interpretiert, indem Sie alle möglichen Strukturen des Programms (im Wesentlichen die möglichen Klammerpositionen) und alle Überladungen jedes eingebauten Programms durchlaufen und die erste auswählen, bei der das Ergebnis gut ist. getippt. Der Interpreter ist klug genug, um einige Möglichkeiten frühzeitig abzulehnen, aber es scheint, dass die rekursive Version vonΓ
mit diesem Schritt in Konflikt geraten und ihn dazu zwingen kann, eine Reihe von Entscheidungen zu durchlaufen.Γ
etwas ausführlicher erklärt .Retina ,
332117 BytesProbieren Sie es online aus
Erläuterung:
-12 Bytes dank Martin
-4 Bytes dank Leo
quelle
iT`aAlL`__Ll`a[^a]*a?
funktioniert auch für 21 Bytes.C # , 121 Bytes
** Update (danke an @John & @aloisdg) **
C # , 69 Bytes
quelle
new[] { 'a', 'A' }
zu'a', 'A'
JavaScript (ES6),
93888482 Byte(5 Bytes dank @Shaggy, 4 Bytes dank @ user81655 und 2 Bytes dank @ l4m2 eingespart.)
Testfälle:
Code-Snippet anzeigen
quelle
['to${c<'a'?'Low':'Upp'}erCase']
Sie sollten ein paar Bytes sparen, indem Sie einfache Anführungszeichen durch Backticks ersetzen.^1
haveu
be können Sie die Parität kürzer initialisieren:s=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
kürzeren Buchstaben zua=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
Operator so benutzt. Immer mehr zu lernen!R , 92 Bytes
Vielen Dank an @ Giuseppe für die Korrektur der Antwort.
Erläuterung
Probieren Sie es online!
quelle
toupper
), was eine Voraussetzung ist.c(F,T)
, obwohl @Broadwell recht hat; sieht aus wie eschartr("a-zA-Z","A-Za-z",v)[w]
eher als sein wirdtoupper
PowerShell Core , 105 Byte
Probieren Sie es online!
Was, wenn es keinen echten ternären Operator und keinen Standardalias für das Drucken auf dem Bildschirm gibt, ist es nicht so kurz.
% t*y
erweitert sich zu| ForEach-Object -Method ToCharArray
äquiv. von"$args".ToCharArray()
Write-Host -n
ist für den Parameter-NoNewLine
"$_"
Schaltet den[char]
Typ zurück auf[string]
(Zeichen haben keine Groß- / Kleinschreibung in .Net)|% *per
führt die gleiche Methode wie zuvor aus, aber für.ToUpper()
, dasselbe mit.ToLower()
($a,$b)[boolean test]
als fake-ternary operator missbraucht!!$c
Kraft wirft , um[bool]
es beginnt hier nicht definiert ,$null
so dass es es in der Existenz gezwungen wird als „Caps Lock: $ false“.quelle
|% t*y
ist ein guter Trick, an den ich mich erinnern muss. Kürzer als[char[]]
, was ich viel benutze. Ich würde fast sagen, dass das auf den Tips-Thread gehen sollte.-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. danke für einen|% *ethod
operator!Perl 5
-p
,313029 Bytes-1 Byte danke an @nwellnhof
-1 Byte danke an @ikegami
Probieren Sie es online!
quelle
s/a(.*?)(a|$)/uc$1/egi
(22 Bytes)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
ist ein Byte kürzer.a([^a]*)a?
ist kürzer alsa(.*?)(a|$)
Python, 63 Bytes
Eine andere Python-Lösung funktioniert in Python 2 und 3. Es dauert sehr lange, bis auf kleine Eingaben.
quelle
6502 Maschinencode- Routine (C64), 51 Bytes
Erwartet einen Zeiger auf eine 0-terminierte Eingabezeichenfolge
$fc/$fd
, die auf dem Bildschirm ausgegeben wird .Kommentierte Demontage
Beispiel für ein Assembler-Programm mit der Routine:
Online-Demo
Code in ca65- Syntax:
quelle
Java 8,
11910898 Bytes-11 Bytes dank @ OlivierGrégoire .
-10 Bytes dank @Nevay .
Erläuterung:
Probieren Sie es online aus.
quelle
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 BytesVielen Dank für @Martin Ender für die Codeüberprüfung: Ich habe die Stream-Verarbeitung auf String-Verarbeitung umgestellt, um die Wiederverwendbarkeit zu verbessern. Vielen Dank auch an @RiaD und @ceilingcat für ihre Vorschläge.
Probieren Sie es online!
Wie funktioniert es?
Anmerkungen
s[][]
Hier geschieht die Magie:[][0]
Ist die Vergleichsfunktion und[][1]
ist die zugehörige Transformationsfunktion für jeden Zustand.!
wird auf die Vergleichsfunktion angewendet, um sie in den Bereich [0,1] zu zwingen.quelle
d
dieser Art verlassen, da dies bedeutet, dass Ihre Funktion nicht wiederverwendbar ist . Ein einfacherd=0;
sollte es beheben.void f(){int c,d=0;[...]
. In jedem Fall stirbt der Stream, eine Bearbeitung ist also in Ordnung!Haskell , 92 Bytes
Probieren Sie es online!
Erläuterung
Zuerst erklären wir, dass
g
es sich um die Funktion handelt, die Kleinbuchstaben auf Großbuchstaben und Großbuchstaben auf Kleinbuchstaben abbildet. Dies ist eigentlich der größte Teil unseres bytecount. Dann definieren wir die Funktionf
. Wenn die Eingabe zuf
der Form ist, diea:b
wir tuna
undA
passen Sie das erste Muster an, und daher wenden wirf
es bei umgekehrter Schreibweise auf den Eingang an. Ansonsten ziehen wir nacha
vorne und bewerben unsf
beib
.quelle
Wolfram Language (Mathematica) , 70 Byte
Probieren Sie es online!
Nimmt die Eingabe und Ausgabe als Liste von Zeichen. Der Einfachheit halber habe ich Code in die Fußzeile eingefügt, um dies von und zurück in eine Zeichenfolge zu konvertieren.
Wie es funktioniert
Der
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
Teil ist Standard: Wir finden den erstenA
(Groß- oder Kleinschreibung), den umgekehrten Fall nach demA
und wiederholen ihn, bis keine weiteren mehrA
zu finden sind.Der interessante Teil ist, wie wir die Groß- und Kleinschreibung umkehren: die Funktion
ToUpperCase@# + ToLowerCase@# - #&
. Wir addieren die Großbuchstabenversion der Eingabe und die Kleinbuchstabenversion der Eingabe und subtrahieren dann die tatsächliche Eingabe. Wenn Sie beispielsweise die Liste angeben, die{"I","n","P","u","T"}
dies berechnetwelche Threads über Listen wie
und obwohl Mathematica keine bestimmte Möglichkeit zum Hinzufügen von zwei Zeichenfolgen hat, ist es klug genug
a+b-a
, diesb
für alle Werte vona
undb
, einschließlich Zeichenfolgenwerten, zu vereinfachen, sodass dies vereinfacht wird{"i","N","p","U","t"}
.quelle
Ruby ,
4241 BytesProbieren Sie es online!
Ein Lambda, das eine Zeichenfolge akzeptiert, die Zeichenfolge an der richtigen Stelle mutiert und sie zurückgibt. Der Trick dabei ist, dass
sub
die Zeichenfolge (ein wahrer Wert) zurückgegeben wird, wenn eine Ersetzung vorgenommen wurde, undnil
ansonsten zurückgegeben wird. Die Existenz vonswapcase
ist auch ziemlich praktisch.-1 Byte: Ersetzen Sie die boolesche Logik durch einen ternären Operator, dank Asone Tuhid
quelle
PHP
10199 BytesLaufen Sie wie folgt:
Ungolfed:
Dies durchläuft die Zeichenkette nur mit einer for-Schleife und überprüft bei jeder Iteration, ob der aktuelle Buchstabe vorhanden ist
a
. Wenn dies der Fall ist, wird die gesamte Zeichenkette umgedreht (Methode von hier ). Wenn nicht, wird der aktuelle Buchstabe gedruckt.quelle
$argn
,$argv
,$_GET
). Im Moment ist dies also keine korrekte Einreichung. Return muss editiertecho
oderreturn
editiert sein (nur für Funktionen von c erlaubt).Jelly , 14 Bytes
Probieren Sie es online!
Volles Programm.
Erläuterung:
quelle
MATL ,
2320 BytesProbieren Sie es online!
Erläuterung:
Ältere Antwort (23 Bytes):
"H @ 'aA'm? ~ XHx} @ w ~? Yo] & h
Andere Methoden, die ich ausprobiert habe:
quelle
Schale , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
Japt v2.0a0, 16 Bytes
Versuch es
Erläuterung
quelle
SNOBOL4 (CSNOBOL4) ,
14192 BytesProbieren Sie es online!
Nimmt eine einzelne Eingabezeile an.
Satte 49 Bytes, die von @ninjalj gespeichert wurden !
Line
S
erledigt die ganze Arbeit, die unten erklärt wird:quelle
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Fortran (GFortran) , 307 Bytes
Probieren Sie es online!
Da Fortran keine "fortgeschrittenen" Werkzeuge für den Umgang mit Strings hat, habe ich mir dieses kleine Monster ausgedacht.
Eingerückt und kommentiert:
quelle
Stax , 12 Bytes
Führen Sie es online aus und debuggen Sie es
Es teilt sich auf einem regulären Ausdruck und wechselt dann abwechselnd zwischen Groß- und Kleinschreibung. Hier ist das gleiche Programm, entpackt, ungolfed und kommentiert.
Führen Sie dieses aus
quelle
Javascript (ES6),
80 bis79 Byte(Teilweise basierend auf dieser Antwort von Rick Hitchcock. Posten als separate Antwort, da ich nicht den Ruf habe, einen Kommentar abzugeben.)
(1 Byte dank @ l4m2s Beitrag hier gespeichert .)
quelle
Schmutzig , 55 Bytes
Probieren Sie es online!
Kann wohl um ein Drittel kürzer sein.
Ich schreibe eine Erklärung auf und spiele noch ein bisschen Golf, wenn ich auf einem Desktop bin.
quelle
Python 3,
7872 Bytesquelle
m[1]
anstelle vonm.group(1)
auf Python 3.6+ verwenden.