Ihre Eingabe wird ein englischer Satz, eine Phrase oder ein Wort sein. Es wird nur enthalten a-zA-Z' -,.!?
. Ihre Aufgabe ist es, die Eingabe zu übernehmen, Leerzeichen zu entfernen und dann die Großschreibung neu zu verteilen, sodass Buchstaben in Indizes, die zuvor großgeschrieben wurden (und nur Buchstaben in Indizes, die zuvor großgeschrieben wurden), großgeschrieben werden.
Wenn die Eingabe beispielsweise lautet A Quick Brown Fox Jumped Over The Lazy Dog
, lauten die (0-basierten) Indizes der Großbuchstaben 0, 2, 8, 14, 18, 25, 30, 34, 39
. Dann entfernen Sie Leerzeichen aus dem Eingang: AQuickBrownFoxJumpedOverTheLazyDog
. Als nächstes schreiben Sie alle Buchstaben in Kleinbuchstaben, aber in Großbuchstaben bei 0, 2, 8, 14, 18, 25, 30, 34, 39
:, AqUickbrOwnfoxJumpEdovertHelazYdog
was Ihre Ausgabe ist.
Eingang
Ihre Eingabe wird ein englischer Satz, eine Phrase oder ein Wort sein. Es darf nur Kleinbuchstaben, Großbuchstaben, Bindestriche, Apostrophe, Kommas, Punkte, Fragezeichen, Ausrufezeichen und Leerzeichen enthalten.
Ausgabe
Die Eingabe mit entfernten Leerzeichen, Kleinbuchstaben-d, mit Buchstaben am Index der Großbuchstaben in Großbuchstaben-d.
HINWEIS: Ihr Programm kann nicht mit einem IndexOutOfRange-Fehler oder einem ähnlichen Fehler abstürzen (Fehler, bei dem die Ausführung abgebrochen wird).
Testfälle
Hi! Test!
Hi!tEst!
A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog
testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG
TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo
Enter PASSWORD ---------
Enterpassword---------
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz
TEST
teST
0, 2, 8, 14, 18, 23, 27, 32
0, 2, 8, 14, 18, 25, 30, 34, 39
Antworten:
Jelly ,
1413 BytesProbieren Sie es online!
Wie es funktioniert
quelle
C (gcc) ,
82797472696766 BytesProbieren Sie es online!
quelle
Python 2 , 114 Bytes
Probieren Sie es online!
Äquivalent:
Python 2 , 114 Bytes
Probieren Sie es online!
quelle
''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])
für -5 Bytes.Python 3 ,
787572 BytesVielen Dank an @xnor für das Golfen mit 6 Bytes!
Probieren Sie es online!
quelle
s
statts[0]
?(c*2).title()
kann euch beide fälle zwar vertauschen.c>' '!=f()
äquivalent zu ist(c>' ') and (' '!=f())
.05AB1E ,
1514 Bytes-1 Byte danke an Emigna
Probieren Sie es online!
quelle
Haskell ,
9895898881 BytesVielen Dank an @name, @nimi, @Zgarb und @Laikoni, die geholfen haben, insgesamt 14 Byte zu sparen
Ungolfed:
quelle
filter(>' ')
für ein Byte wenigerlast(toLower:[toUpper|isUpper p])c
zipWith
sollte ein Byte mehr sparen:f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
.V , 24 Bytes
Probieren Sie es online!
Diese Art von Herausforderungen ist genau das, wofür V gemacht wurde. :)
Erläuterung:
quelle
Python 2, 100 Bytes
quelle
Alice , 32 Bytes
Probieren Sie es online!
Erläuterung
Dies ist eine Standardvorlage für Programme, die vollständig im Ordinalmodus arbeiten. Ausgepackt sieht das Programm wie folgt aus:
quelle
JavaScript (ES6),
949185 ByteVersuch es
quelle
'@'<s[i]&s[i]<'['?
?Retina ,
7771 BytesProbieren Sie es online! Link enthält Testsuite. Erläuterung: In der ersten Stufe wird die Zeile dupliziert, während in der zweiten Stufe das Duplikat unterstrichen und die Leerzeichen gelöscht werden. Die dritte Stufe durchläuft dann jeden Großbuchstaben von rechts nach links und versucht, in der zweiten Zeile ein Leerzeichen vor dem entsprechenden Zeichen einzufügen. Die erste Zeile wird gelöscht und die Leerzeichen werden verwendet, um die relevanten Zeichen des Ergebnisses in Großbuchstaben zu schreiben. Bearbeiten: 6 Bytes dank @Kobi gespeichert.
quelle
(.?)
und$4
Teile benötigt? Es sieht so aus, als hätte eine optionale Gruppe am Ende nichts zu tun.Perl,
9594 + 1 = 95 Bytes+1 Byte Strafe für -n
Speichern Sie ein Byte, indem Sie von
s/\s//g
bis ersetzens/ //g
Probieren Sie es online!
Erläuterung:
Erstellen Sie eine Kopie der Eingabezeichenfolge.
Entfernen Sie alle Leerzeichen und wandeln Sie die Zeichenfolge in Kleinbuchstaben um.
Beginnen Sie dann mit der Schleife über jeden Buchstaben. Testen Sie den Buchstaben in Großbuchstaben an derselben Position in der gespeicherten Zeichenfolge. Wenn es oben ist, wird der aktuelle Buchstabe mit einem Großbuchstaben versehen. Brief drucken.
Beachten Sie, dass Perl mit der Befehlszeilenoption "-n" ausgeführt werden muss
quelle
+1
Byte für die-n
Flagge zählen müssen. Davon abgesehen sieht das gut aus! Willkommen auf der Seite! :)MATL , 18 Bytes
Gleicher Ansatz wie die 05AB1E-Antwort von Riley .
Probieren Sie es online!
quelle
Python 3 , 117 Bytes
Probieren Sie es online!
Dies ist so ziemlich mein erster Code Golf, also ist es wahrscheinlich schlecht, abzüglich der Hilfe aus den Kommentaren unten!
PS Ja, es ist dumm, dass das Definieren und Inkrementieren
i
Bytes über den Bereich (len (y)) spart. Naja.quelle
return
.C # (.NET Core) ,
108101 BytesProbieren Sie es online!
char
Klasse statischToUpper()
undToLower()
methodisch ist.quelle
Holzkohle , 33 Bytes
Probieren Sie es online!
Da ich immer noch nicht weiß, wie man eine Zeichenfolge mit Leerzeichen als einzelnen Eingabeparameter in den Charcoal-Code übergibt, weise ich im Header der Charcoal-Variablen die Testzeichenfolge zu, die die erste Eingabe darstellt (
θ
):Der Code hat also die gleiche Anzahl von Bytes, als ob die Zeichenfolge als erste Eingabe übergeben worden wäre.
Sie können hier die ausführliche Version des Codes sehen.
quelle
PHP, 181 Bytes
Ich versuche die kleinere Anzahl von Bytes zu bekommen, dies ist mein Code:
Probieren Sie es online!
quelle
PREG_OFFSET_CAPTURE
kann man den Wert verwenden256
,$argn
ist eine kürzere Variable alsreadline()
für eine Eingabe und ich denkectype_upper
und benutzelcfirst
unducfirst
speichere viele Bytes mit einer Schleife und benutze einen$$i
ternären OperatorJava 8,
184177161 BytesKann definitiv noch mehr golfen werden.
- 16 Bytes dank @ OlivierGrégoire, indem die Eingabe als
char[]
statt genommen wirdString
.Erläuterung:
Probieren Sie es hier aus.
quelle
char[]
anstelle eines Strings für diesen, Sie sparen viele Bytes!String
, out =char[]
:-)Common Lisp, 104 Bytes
Probieren Sie es online!
Ungewöhnlich kurz für das wortreiche Common Lisp!
Einfacher Code:
quelle
Java (OpenJDK 8) ,
15011711397 BytesProbieren Sie es online!
Beim Golfspielen bin ich auf 102 Bytes gekommen:
Probieren Sie es online!
Aber ich erinnerte mich, dass dies allmählich so aussah, als würde Dennis 'C antworten, und so portierte ich einfach sein bisschen herumwirbeln und ... Magie geschah. Der große Vorteil des Hafens besteht darin, dass die Zweige und die darin enthaltenen Wiederholungen entfernt werden.
quelle
Hi! Test!
sollte werdenHi!tEst!
, aber mit deiner lösung wird esHi!Test
.Google Sheets, 213 Bytes
Die Eingabe erfolgt in Zelle
A1
und die Formel gliedert sich wie folgt:ArrayFormula()
Lassen Sie uns jeden BegriffROW()
unabhängig bewertenJOIN()
Verkettet alle diese unabhängigen Ergebnisse zu einer einzigen ZeichenfolgeIF(REGEXMATCH(),UPPER(),LOWER()
Dies bewirkt, dass abwechselnd Groß- und Kleinbuchstaben verwendet werden, je nachdem, an welcher Position in der Eingabe die Groß- und Kleinschreibung vorlagROW(OFFSET())
ein Array von Werten zurückgibt ,1
umA1.length
die in dem eingespeist wirdMID()
Funktion , so dass wir jedes Zeichen wiederum auswerten können ,Ergebnisse von Testfällen: (Es ist einfacher zu lesen, wenn Sie auf die größere Version klicken.)
quelle
Ruby , 80 Bytes
Probieren Sie es online!
quelle
n.gsub(/./){}
stattn.size.times{};n
:n.gsub(/./){(?A..?Z)===a[i]?$&.upcase: $&}
.Perl, 92 Bytes
Erläuterung:
quelle
-n
Flag hinzufügen , damit Ihre Antwort gültig ist. Ein paar Dinge zum Golfen:s/ //g
ist genug (keine Notwendigkeit\s
),y/a-z/A-Z/
ist dasselbe wietr[a-z][A-Z]
, Sie können die-p
Flagge verwenden, damit Sie nicht die letzte brauchenprint
, Sie brauchen die Klammer in nichtlc$&
.C 103 Bytes
Probieren Sie es online!
quelle
Python 3 ,
125, 124 BytesProbieren Sie es online!
quelle
Python 2,
106105 BytesBearbeiten: Speichern Sie ein Byte über
print ''.join
=>print''.join
.Lambda-Form, 99 Bytes
quelle
SCALA, 128 Zeichen, 128 Byte
Danke für diese Herausforderung. Probieren Sie es online!
quelle
q / kdb + 49 Bytes
Lösung:
Beispiele:
Erläuterung:
Suchen Sie nach Indizes, bei denen die Eingabe in Großbuchstaben erfolgt, und wenden Sie die Funktion
upper
auf diese Indizes in einer Version der Eingabezeichenfolge an, bei der keine Leerzeichen verwendet werden. Beachten Sie, dass wir die Funktion nicht über die Länge der Zeichenfolge hinaus anwenden können. Verwenden Sie daher take (#
), um die Eingabezeichenfolge auf die Länge der durch Leerzeichen entfernten Version in Kleinbuchstaben zu kürzen.Bonus:
Nachdem ich die Antworten gelesen hatte, dachte ich, ich würde eine Lösung ausprobieren, bei der ich über die Eingabe iteriere. Bisher habe ich nur eine 53-Byte-Lösung verwaltet:
quelle
Swift 3.0, 199 Bytes
Probieren Sie es online!
quelle
Perl 5 , 40 Bytes
37 Byte Code +
-F
Flag. (Beachten Sie, dass Sie in alten Versionen von Perl möglicherweise-an
Flags hinzufügen müssen. )Probieren Sie es online!
Erläuterungen:
Dank
-F
,@F
eine Liste mit allen Zeichen des Eingangs enthält.for/\S/g
Durchläuft jedes Nicht-Leerzeichen der Eingabe. Wir verwenden, um$i
zu zählen, bei welcher Iteration wir uns befinden. Wenn$F[$i++]
es sich um ein Großbuchstaben (/[A-Z]/
) handelt, drucken wir den aktuellen Großbuchstaben (uc
), andernfalls den Kleinbuchstaben (lc
). Beachten Sie diesuc
undlc
geben Sie das Argument unverändert zurück, wenn es sich nicht um einen Buchstaben handelt.Vorherige Version (weniger Golf: 47 Bytes):
Probieren Sie es online!
quelle