Für die heutige Herausforderung müssen Sie ein Programm oder eine Funktion schreiben, die den Fall einer Zeichenfolge abwechselt. Sie müssen jedoch nicht alphabetische Zeichen ignorieren. Dies bedeutet, dass jedes alphabetische Zeichen einen anderen Groß- und Kleinschreibung als das vorangehende und nachfolgende alphabetische Zeichen haben muss. Dies ist etwas komplexer als zum Beispiel das Großschreiben jedes anderen Buchstabens. Wenn Sie eine Zeichenfolge wie
hello world
Wenn Sie jedes andere Zeichen in Großbuchstaben umwandeln, erhalten Sie:
hElLo wOrLd
Wie Sie sehen, o
folgt auf den Kleinbuchstaben ein Kleinbuchstabe w
. Dies ist ungültig. Stattdessen müssen Sie das Leerzeichen ignorieren und uns das folgende Ergebnis geben:
hElLo WoRlD
Alle nicht alphabetischen Zeichen müssen gleich bleiben. Die Ausgabe kann mit Groß- oder Kleinbuchstaben beginnen, sofern sie sich ständig abwechselt. Dies bedeutet, dass auch Folgendes eine akzeptable Ausgabe wäre:
HeLlO wOrLd
Ihr Programm sollte unabhängig von der Eingabe funktionieren.
Die Eingabezeichenfolge enthält immer nur druckbares ASCII , sodass Sie sich nicht um nicht druckbare Zeichen, Zeilenumbrüche oder Unicode kümmern müssen. Ihre Einreichung kann entweder ein vollständiges Programm oder eine Funktion sein, und Sie können die Ein- und Ausgabe in jedem vernünftigen Format vornehmen. Zum Beispiel Funktionsargumente / Rückgabewert, STDIN / STDOUT, Lesen / Schreiben einer Datei usw.
Beispiele:
ASCII -> AsCiI
42 -> 42
#include <iostream> -> #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!! -> lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz. -> PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase -> tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase -> ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2 -> A1b2
Da es sich um Code-Golf handelt , gelten Standardlücken und die kürzeste Antwort in Bytes gewinnt!
cowsay
Antworten:
JavaScript (ES6),
6663 BytesBeginnt mit Großbuchstaben.
Testfälle
Code-Snippet anzeigen
quelle
s=!s
Trick?s
ist die Eingabezeichenfolge, die!s
zuerst ausgewertet wirdfalse
(es sei denn, die Eingabezeichenfolge ist leer, in diesem Fall würde sie ausgewertet werdentrue
- aber eine leere Zeichenfolge generiert ohnehin keine Übereinstimmung). Danach wird es einfach zu einer Standard-Booleschen Operation, bei der zwischenfalse
und gewechselt wirdtrue
. Es macht uns auch nichts aus, den Inhalt vons
zu diesem Zeitpunkt zu verlieren, da er bereits zum Füttern verwendet wurde.replace()
."A[I"
würde fehlschlagen.05AB1E ,
118 BytesCode:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung:
quelle
lvy¾Fš}Da½J
merke genau das was du schon hattest ._.Oh-Five-Ay-Bee-One-Eee
, ich bin kein kreativer Mann.GNU Sed, 33
Punktzahl beinhaltet +1 für
-r
Flagge zu sed.Probieren Sie es online aus .
quelle
Jelly , 13 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Japt ,
1614 BytesProbieren Sie es online!
Erläuterung
quelle
,
. Sofern es sich nicht um eine Zahl handelt[12]
, weiß Japt, dass es sich um verschiedene Elemente handelt. Ich glaube, Sie können das auch entfernen&1
._m"uv"gT°
Nett. Das wollte ich gerade vorschlagen.Python 3 ,
8676686663 Bytes-2 Bytes dank DJMcMayhem
-3 Bytes dank Cyoce
Probieren Sie es online! oder Probieren Sie alle Testfälle aus
quelle
print(end=(2*i).title()[x])
?Alice , 18 Bytes
Probieren Sie es online!
Erläuterung
Dieses Programm folgt einer weniger bekannten Vorlage für Programme ungerader Länge, die vollständig im Ordnungsmodus ausgeführt werden. Die linearisierte Version dieses Codes lautet:
Erklärung des Codes:
Ohne Verwendung
l
des DuplikatsN
wäre der Stapel danach["helloworld", "helloworld"]
. Ich vermute sehr, dass dies ein Fehler ist.quelle
C (TCC) ,
605756 ByteDank DigitalTrauma für das Erkennen von Bit 5 ist der einzige Unterschied für ASCII-Groß- / Kleinschreibung.
Besonderer Dank geht an zch für das Abschlagen von drei weiteren Bytes.
Speichern Sie ein weiteres Byte von RJHunters Idee
Probieren Sie es online!
quelle
strdup()
Zeiger auf den Lese-Schreib-Speicher abgerufen.*s&~32|++l%2<<5
, um 3 Bytes zu sparen.&~33
mit&95
einem weiteren Byte zu speichern.Java 8, 99 Bytes
Erläuterung:
Probieren Sie es hier aus.
quelle
(c+"").matches("[A-Za-z]")
oderCharacter.isLetter(c)
zu speichern.c>64&c<91|c>96&c<123
wenn. Und da ichint
sowieso für dieCharacter.toUpperCase(...)
und dieCharacter.toLowerCase(...)
Golfparts (diese:(char)(c&~32)
und(char)(c|32)
) benutze , bezweifle ich, dass ich es mit beiden kürzer machen könnte.a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;}
??Ruby,
57554741 BytesDie Byteanzahl umfasst zwei Bytes für Befehlszeilenoptionen.
Führen Sie es zum Beispiel so aus:
$ ruby -p0 alternate_case.rb <<< "some input"
Mit der
p0
Option wird die gesamte Eingabe auf einmal verbraucht und das magische Global$.
wird auf 1 erhöht. Dies wird später zwischen 0 und 1 umgeschaltet und zum Beibehalten des Status verwendet.Funktioniert mit mehrzeiliger Eingabe; Probieren Sie es online!
Vielen Dank an Ventero für die großartigen Beiträge. Weitere Informationen finden Sie in den Kommentaren.
quelle
$.
bei jedemgets
Aufruf automatisch erhöht wird , wäre ein vollständiges Programm mit der-p
Flagge kürzer gewesen ...1&$.+=1
Damit können Sie die Klammern fallen lassen. Und der Vollständigkeit halber gibt es eine weitere globale integer - es ist leider nur schreibgeschützt:$$
.-p0
Lässt den Interpreter alle verfügbaren Eingaben auf einmal lesen, sodass Ihr Code nur einmal aufgerufen wird und Sie ihn frei verwenden können$.
. Wenn Sie dies mit der Tatsachegsub
kombinieren , dass implizit so vorgegangen wird wie$_.gsub!
bei der Angabe,-p
wird ein vollständiges Programm bedeutend kürzer: 48 Zeichen fürgsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}
und 2 für dasp0
Flag.-p0
, können Sie tatsächlich ein paar weitere Zeichen beim$.
Hin- und Herblättern speichern : Da dies jetzt garantiert ist,1
wenn Ihr Code aufgerufen wird, können Sie sie einfach verwenden$.^=1
./\p{L}/
(Unicode-Kategorie Buchstabe ) ist ein Zeichen kürzer als/[a-z|/i
.Brachylog , 25 Bytes
Probieren Sie es online!
Das ist lang und langsam.
Erläuterung
quelle
MATL ,
1615 BytesProbieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Betrachten Sie die Eingabe "Hallo Welt"
'
quelle
Perl 6 ,
32-30BytesVersuch es
Versuch es
Erweitert:
quelle
q / kdb +,
514238 BytesLösung:
Beispiel:
Anmerkungen:
quelle
V ,
17, 13 BytesProbieren Sie es online!
Oder Überprüfen Sie alle Testfälle!
HeXdUmP:
Erläuterung:
Dies verwendet einen komprimierten regulären Ausdruck (regex ™ before). Bevor wir ihn erklären, sollten wir den regulären Ausdruck wie folgt erweitern:
Das
VU
konvertiert alles in Großbuchstaben. Dann führen wir Folgendes aus:Alte / interessantere Antwort:
quelle
PHP, 71 Bytes
Probieren Sie es online!
quelle
CJam ,
2624 BytesProbieren Sie es online!
Erläuterung
quelle
Pyth, 11 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
PowerShell, 86 Byte
Die Eingabe ist ein
[char[]]
Array.Kommentare im Code zur Erklärung
quelle
Haskell,
10583 +24 + 1 Byte Trennzeichen =1088688 ByteFunktion ist
(1#)
, startet Kleinbuchstaben. Probieren Sie es online!Das Traurige ist, dass dies länger ist als die Java- und C # -Antworten.Vielen Dank an Ørjan Johansen, der durch das Zusammenführen von drei Zeilen zu einer Zeile 22 Byte gespart hat!quelle
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
1#
zählt nicht als anonyme Funktion. Nach meinem Verständnis sollte man eine anonyme Funktion an einen Bezeichner binden können, aber zBf=1#
nicht funktionieren. Stattdessen benötigen Sie den Abschnitt(1#)
für +2 Bytes. Dies ist auch implizit in unseren Community-Richtlinien für das Golfen in Haskell festgelegt , obwohl diese möglicherweise angepasst werden sollten, um diesen Fall ausdrücklich zu erwähnen.Google Sheets, 264 Bytes
Es ist ein großes Durcheinander, aber es ist ein bisschen einfacher, wenn Sie es erweitern:
Die Pseudologik würde folgendermaßen ablaufen:
quelle
Perl 5 , 24 Bytes
23 Bytes + 1 Byte für
-p
.Vielen Dank an @Dada für -2 Bytes.
Probieren Sie es online!
quelle
\pl
anstelle von[a-z]
2 Bytes bis :)[a-z]
stattdessen!). Wenn Sie sich fragen, kommt es von Perlrecharclass ;)Netzhaut , 46 Bytes
Probieren Sie es online! Beinhaltet Testfälle.
quelle
C 64 Bytes
Nutzt die ASCII-Codierung, bei der Groß- und Kleinbuchstaben um 0x20 versetzt sind.
quelle
char
und*s
Netzhaut , 32 Bytes
Probieren Sie es online!
Konvertiert zuerst die Eingabe in Großbuchstaben und gruppiert sie dann in Übereinstimmungen mit bis zu zwei Großbuchstaben. Es enthält nur einen Buchstaben, wenn der letzte Buchstabe kein Paar enthält. Dann wird der erste Buchstabe jeder dieser Übereinstimmungen unterstrichen.
Das
01
in der zweiten Stufe bedeutet ungefähr: Ändern Sie das Verhalten dieser Stufe nicht anhand der Übereinstimmungsnummer, sondern wenden Sie die Änderungen nur auf das erste Zeichen jeder Übereinstimmung an.quelle
PHP 5, 54 Bytes
quelle
C #, 100 Bytes
quelle
Groovy, 79 Bytes
quelle
Python 3 , 192 Bytes
Probieren Sie es online!
quelle
Konvex , 16 Bytes
Probieren Sie es online!
Konvexer Port der Antwort von @Business Cat .
quelle