Sie bieten auf den technischen Support der Bruce Dickenson als er eine Blue Öyster Cult Aufnahme - Session erzeugt. Wenn er nach mehr Kuhglocke fragt , kannst du sie ihm geben.
Deine Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge (oder eine Entsprechung in Ihrer Sprache) als Eingabe verwendet und eine zugehörige Zeichenfolge ausgibt, die eine weitere Kuhglocke enthält.
Wie viele Kuhglocken enthält eine Schnur?
Die Anzahl der Kuhglocken, die eine Zeichenfolge enthält, entspricht der maximalen Anzahl unterschiedlicher Kopien von "Kuhglocken", die durch Permutieren der Zeichenfolgen erhalten werden können. Zum Beispiel "bbbccceeellllllooowwwwwwwww"
enthält 3 cowbells, während "bbccceeellllllooowwwwwwwww"
und "bbbccceeelllllooowwwwwwwww"
jeweils 2 cowbells enthalten und "cowbel"
enthält 0 cowbells.
In welcher Beziehung soll der Output zum Input stehen?
Die Ausgabe sollte aus der Verkettung der Eingabezeichenfolge und dem kürzesten Präfix der Eingabezeichenfolge in dieser Reihenfolge bestehen, die zum Erhöhen der Anzahl der Kuhglocken erforderlich sind.
Beispielsweise "bbbccceeelllllooowwwwwwwww"
benötigt nur eine zusätzliche "l"
, um 3 Kuhglocken anstelle von 2 zu enthalten; das kürzeste Präfix, das das enthält, "l"
ist "bbbccceeel"
. Wenn also der Eingang ist "bbbccceeelllllooowwwwwwwww"
, sollte der Ausgang sein "bbbccceeelllllooowwwwwwwwwbbbccceeel"
.
Technische Details
- Sie können davon ausgehen, dass die Eingabe nur druckbare ASCII-Zeichen enthält. Wenn ein oder zwei Zeichen für die Verarbeitung von Zeichenfolgen in Ihrer Sprache störend sind (z. B. Zeilenumbrüche oder
\
), können Sie davon ausgehen, dass die Eingabe diese Zeichen nicht enthält. Erwähnen Sie einfach diese Einschränkung. - Sie können außerdem davon ausgehen, dass die alphabetischen Zeichen in der Eingabe entweder in Klein- oder in Großbuchstaben eingegeben werden. Wenn Sie keine davon annehmen, zählen Sie die Kuhglocken ohne Berücksichtigung der Groß- und Kleinschreibung.
- Sie übernehmen kann ferner , dass die Eingabe mindestens eine Kopie von jedem der Zeichen enthält
b
,c
,e
,l
,o
, undw
. Dies entspricht der Annahme, dass ein Präfix der Zeichenfolge mit dieser verknüpft werden kann, um eine Zeichenfolge mit mehr Cowbell zu erstellen. (Beachten Sie, dass die Eingabezeichenfolge selbst keine Kuhglocke enthalten muss.) - Wenn deine Sprache ein eingebautes Programm hat, das dieses Problem löst, dann benutze es total, ernsthaft, wie großartig ist das?
Vergoldete Windeln
Da die Aufnahmezeit im Studio teuer ist, muss Ihr Code so kurz wie möglich sein. Der Eintrag mit den wenigsten Bytes ist der Gewinner!
Testfälle
( Pastebin-Link zum leichteren Kopieren / Einfügen)
Testeingang 1: "christopher walken begs for more cowbell!"
Testausgang 1: "christopher walken begs for more cowbell!christopher wal"
Testeingang 2: "the quick brown fox jumps over the lazy dog"
Testausgang 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"
Testeingang 3: "cowbell"
Testausgang 3: "cowbellcowbell"
Testeingang 4: "cowbell cowbell cowbell"
Testausgang 4: "cowbell cowbell cowbellcowbell"
Testeingang 5: "cowbell cowbell cowbel"
Testausgang 5: "cowbell cowbell cowbelcowbel"
Testeingang 6: "bcelow"
Testausgang Nr. 6: "bcelowbcel"
Testeingang Nr. 7: "abcdefghijklmnopqrstuvwxyz"
Testausgang Nr. 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"
Testeingang 8: "cccowwwwbbeeeeelllll"
Testausgang 8: "cccowwwwbbeeeeelllllccco"
Testeingang 9: "be well, programming puzzles & code golf"
Testausgang 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"
Testeingang Nr. 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"
Testausgang 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab"
Testeingang Nr. 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
"
Testausgang Nr. 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
c-c-b-c
i have a cow, i have a bell"
test case -> result
ein großer vorformatierter Codeblock verwendet. Ästhetisch ist es viel schöner und das Kopieren und Einfügen ist einfacher.L
s in dem Wort gibt, ist dies nicht das, was die Herausforderung fragt.Antworten:
Pip ,
504238 BytesÜbergeben Sie die Zeichenfolge als Befehlszeilenargument in Anführungszeichen, falls erforderlich. Probieren Sie es online!
Erläuterung
Ich werde dies in zwei Teilen erklären: der Kuhglockenfunktion und dem vollständigen Programm. Hier ist die Funktion, die die Menge der Kuhglocken in einer Zeichenfolge berechnet:
{...}
definiert eine Funktion. Viele Pip-Operatoren geben eine andere Funktion zurück, wenn sie auf eine Funktion angewendet werden. zum Beispiel-{a+1}
ist das gleiche wie{-(a+1)}
. Das obige ist also äquivalent zuwas wie folgt funktioniert:
Jetzt, da wir das haben, ist hier das vollständige Programm:
quelle
cowbell cowbell cowbee
und die Ausgabe war,cowbellcowbelcowbel
aber ich könnte die IDE falsch verwenden (neu bei PIP)cowbell cowbell cowbeecowbell
( online probieren ). Verwenden Sie TIO oder eine lokale Kopie?C
511488474470463454Probieren Sie es online aus
Lesbares Format + Erklärung:
Einige unterhaltsame Tricks:
• Wenn ich Zeichen überprüfe, gebe ich
'w'
für das Zeichen ein, das 3 Byte beträgt, aber für die Zeichen'c'
und'b'
ich können ihre ASCII-Werte 99 bzw. 98 eingeben, um jedes Mal ein Byte zu speichern. (Edit: Dank @Titus kann ich dies mit allen COWBELL-Buchstaben tun, indem ich nur Großbuchstaben verwende, die alle 2 Bytes numerische ASCII-Werte sind.)•
r=~-l/2
wirdr=(l-1)/2
mit bitshifts•
a[++i]
Ich erhalte das Zeichen bei Index (i) und durchlaufe den Index alle gleichzeitig. Ich beginne einfachi
beii=-1
anstatti=0
(ich mache dasselbe mitz
und starte esz=i
, um ein weiteres Byte zu speichern)quelle
c
) wird immer auf 1 gesetzt [...]." Wir würden uns freuen, wenn Sie uns mitteilen würden, warum Sie so denken, weil es für einige von uns nur seltsam erscheint.c,o,w,b,e
den gleichen Wert anstatt auf 1 initialisiert zu werden? Denn dein Tipp # 2 scheint nicht wahr zu sein, zumindest nicht für das CI. Könntest Du das erläutern? SO FragePython 2,
125113112 Bytesn
zählt die Anzahl der Kuhglocken-12 Bytes dank @Rod
-1 Bytes dank @Titus
quelle
[]
Listenverständnis, wenn es der einzige Parameter ist, und Sie können auch fallen lassenenumerate
:min(s.count(c)/-~(c=='l')for c in"cowbel")
Wo-~(n=='l')
ist ein kürzerer Weg zu schreiben1+(n=='l')
>>
nicht kürzer als/-~
?return
nicht in der while-Schleife?Perl 6 , 91 Bytes
Übernimmt die Eingabe in Kleinbuchstaben.
Wie es funktioniert
Innerhalb des Lambdas ist ein weiteres Lambda zum Zählen der Anzahl der Kuhglocken in einer Kette so definiert:
Der Rest des Codes verwendet dieses innere Lambda
&c
, um das Ergebnis wie folgt zu finden:quelle
MATL ,
3837 BytesDank der Idee von @ DLosc, die Template-Zeichenfolge
lcowbe
anstelle von zu verwenden, 1 Byte wenigercowbel
Eingabezeichen sind alle Kleinbuchstaben. Wenn die Eingabe Zeilenumbrüche enthält, muss das Zeilenumbruchszeichen als ASCII-Code eingegeben werden, der mit den normalen Zeichen verknüpft ist (siehe letzte Eingabe im Link zu allen Testfällen).
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
quelle
JavaScript (ES6), 106
107 113 126 141Eine Javascript-Portierung der Pip-Antwort von @DLosc. Ich brauchte etwas Zeit, um es vollständig zu verstehen, und es ist genial.
Bearbeiten Sie -15 Bytes, indem Sie dem Hinweis von @Titus folgen, Zeichen direkt an die Eingabezeichenfolge anhängen
a
und eine vorzeitige Rückkehr vermeiden (also neinfor/if
).Edit 2, das den Wert 6 für die Min-Funktion auflistet, speichert andere 13 Bytes
3 geänderte c-Funktion erneut bearbeiten . Ich dachte das wortreich
length
undsplit
wäre zu langwierig. Ich lag falsch.Annahme von Kleinbuchstaben
Weniger golfen
Prüfung
quelle
k[x]++
würde scheiternundefined
. Aber ich bin mir ziemlich sicher, dass dasfor(i=0;c(a)==c(a+=a[i++]);),a
funktioniert.>>!i
Spart 3 Bytes. Warum benutzt du nichtc(a+=z)
?c(a+=z)
. Nicht in der weniger golfenen Version, wie Sie sehen, weniger golfen. Mit wird>>!i
1 Byte gespeichert (in der Golfversion).Bash + Unix-Dienstprogramme, 184 Bytes
Probieren Sie es online!
Vielen Dank an @ AlbertRenshaw für das Golfen mit 2 Bytes weniger.
quelle
!=
JavaScript (ES6),
124114 ByteVielen Dank an Neil, der ein paar Bytes gespart hat
Da dies ganz anders ist als die bereits vorhandene JavaScript-Antwort und ich einige Zeit darauf verwendet habe, habe ich beschlossen, selbst eine Antwort zu erstellen.
Verwendungszweck
Ausgabe
quelle
.sort()[0]
ist eine wunderbare Idee.eval
ist böse. : DMath.min()
, aber das hat viele Charaktere gekostet und ich dachte, es gäbe einen kürzeren Weg. Und ja,eval
ist wirklich schön zum Golfen..sort()[0]
funktionieren würde, würde es nur 10 Bytes kosten, aber nicht, und.sort((a,b)=>a-b)[0]
kostet 20 Bytes,Math.min(...)
kostet aber nur 13.Oktave,
808797 BytesProbieren Sie es online!
quelle
l
, um die zusätzliche Kuhglocke fertigzustellen. Beispielsweise wird bei der Eingabecowbell
fälschlicherweisecowbellcowbel
eher als zurückgegebencowbellcowbell
. (Ich hoffe, Sie können es beheben - ich mag den atypischen Algorithmus!)CJam, 37
Probieren Sie es online aus
Wenn ich die Zeichen
"
und ausschließen kann\
, dann ...35 Bytes
Probieren Sie es online aus
Erläuterung
Der Code hängt nacheinander jedes Zeichen der Zeichenfolge an die ursprüngliche Zeichenfolge an (von der ursprünglichen zur doppelten Zeichenfolge), bestimmt die Anzahl der Kuhglocken für jede Zeichenfolge (zählt die Anzahl der Vorkommen jedes Zeichens in "Kuhglocken" und dividiert das Zeichen für "l". durch 2, dann das Minimum nehmen), findet die Position der ersten Zeichenfolge, an der die Anzahl der Kuhglocken um 1 zunimmt, nimmt dann das entsprechende Präfix der Eingabe und setzt es hinter die Eingabezeichenfolge.
Um auch die ursprüngliche Zeichenfolge (ohne angehängte Zeichen) einzuschließen, wird der Zeichenfolge, die iteriert wird, ein neutrales Zeichen vorangestellt. Die erste Version stellt ein Leerzeichen voran und die zweite Version verwendet die Zeichenfolgendarstellung, dh die Zeichenfolge zwischen doppelten Anführungszeichen.
quelle
PHP, 133 Bytes
Ein PHP-Port von @ edc65s JavaScript-Port von DLoscs Pip-Antwort.
Übernimmt die Eingabe in Kleinbuchstaben vom Befehlszeilenargument. Laufen Sie mit
-nr
.Nervenzusammenbruch
quelle