Rock-and-Roll-Gründungsvater Chuck Berry ist heute leider verstorben.
Betrachten Sie den Refrain seines berühmten Liedes " Johnny B. Goode ":
Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode
(Es gibt andere Möglichkeiten , wie dies unterbrochen wurde, aber die oben genannten dienen den Zwecken der Herausforderung.)
Herausforderung
Geben Sie bei einer nicht leeren Kleinbuchstabenfolge az den Refrain von "Johnny B. Goode" mit allen Instanzen der Eingabezeichenfolge aus Go
oder go
ersetzen Sie sie durch die Eingabezeichenfolge, die auf die gleiche Weise in Großbuchstaben geschrieben wurde .
Optional kann ein abschließender Zeilenumbruch folgen. Sonst sollte sich im Refrain nichts ändern.
Wenn zum Beispiel die Eingabe ist,
code
muss die Ausgabe genau seinCode, code Code Johnny code, code Code Johnny code, code Code Johnny code, code Code Johnny code, code Johnny B. Codeode
optional gefolgt von einem Zeilenumbruch.
Beachten Sie, dass die Groß- und Kleinschreibung aller Wörter mit dem ursprünglichen Refrain übereinstimmt und (trotz fehlendem Rhythmus) das Go
In Goode
sowie die einzelnen Wörter Go
und ersetzt werden go
.
Der kürzeste Code in Bytes gewinnt.
Testfälle
"input"
output
"go"
Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode
"code"
Code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Johnny B. Codeode
"a"
A, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
Johnny B. Aode
"johnny"
Johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny B. Johnnyode
"fantastic"
Fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Johnny B. Fantasticode
an
,c
,cath
Antworten:
Los, 123 Bytes
Geh Johnny, geh !
Probieren Sie es online!
quelle
90
Bytes.VIM,
5449 Tastenanschläge (1 Tastenanschlag von Kritixi Lithos gespeichert )Beginnen Sie mit dem Wort in einer Zeile einer Datei, wobei sich der Cursor am ersten Zeichen befindet, und ersetzen Sie dann alles durch den Text Erläuterung
Probieren Sie es online! (Danke DJMcMayhem !)
quelle
Y
anstelle vonyy
und vielleicht sogarG
statt2j
<CR>
anstelle von<esc>o
hD
anstelle vondiw
Pure Bash,
6976 BytesProbieren Sie es online!
quelle
code
nur Kleinbuchstaben eingeben, erhalten Sie nicht die erforderliche Groß- und Kleinschreibung.05AB1E , 37 Bytes
Probieren Sie es online!
Erläuterung
quelle
Batch, 207 Bytes
quelle
JavaScript, 98
Verwendet die Array-zu-String-Serialisierung zum Erstellen von Kommas. Erstellt ein Array des Formulars:
Und verkettet es mit der Zeichenfolge des Formulars
", go\nJohnny B. Goode"
:quelle
JavaScript (ES6),
10410199 ByteVorherige Version:
Wie es funktioniert:
Es ist eine anonyme Funktion, die die Eingabe als Parameter verwendet
i
Definiert eine Variable
u
als Eingabe,i
bei der der erste Buchstabe groß geschrieben wird. (Es wird davon ausgegangen, dass die Eingabe nicht leer ist. Dies ist in Ordnung.)Erstellen Sie einfach direkt die Zeichenfolge, die aus diesen beiden Variablen zurückgegeben werden soll.
Durch
"go, \nGo Johnny go"
viermaliges Wiederholen der Zeichenfolge wird"Go Johnny go, go"
ein Byte gespeichert.Edit 1: Ich habe vergessen, das Semikolon auszuspielen, haha !! Auch die Bytes falsch gezählt, war es ursprünglich 102, nicht 104. Dank apsillers .
Edit 2: Anstatt
.repeat(4)
diesen String in eine Variable zu setzenx
und dabeix+x+x+x
zwei Bytes zu speichern.Testschnipsel
Code-Snippet anzeigen
quelle
V ,
41, 38 BytesProbieren Sie es online!
Die perfekte Herausforderung für V!
Erläuterung:
quelle
Pyth - 52 Bytes
Test Suite .
quelle
C,
156151 Bytesquelle
main()
, die die Funktion tatsächlich aufruft, funktioniert es ...Python 3, 88 Bytes
Eine einfache Formatzeichenfolge mit Positionsargumenten.
quelle
len("\n".__repr__()[1:-2])
ist 2. Ich habe das__repr__()
beim Messen der Programmlänge vergessen ."""
Markierungen anstelle von"
Markierungen umschließen .Netzhaut , 65 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
quelle
Jelly , 41 Bytes
Probieren Sie es online!
quelle
Python, 94 Bytes
quelle
C #,
219211212146122 BytesMehrere Vorschläge aus Kommentaren mit zusätzlicher Optimierung implementiert. Dies ist das Endresultat:
Probieren Sie es online!
Erklärung:
Ausgabe für Testfälle:
Edit: Danke an weston für den Vorschlag, eine Funktion zu verwenden
quelle
^32
. Das ist kürzer als das, was&~32
ich benutzt habe. Außerdem scheint ein Port meiner Java 7-Antwort kürzer zu sein:string x(string a){string x=(char)(a[0]^32)+a.Remove(0,1),n=a+"\n",c=", ",r=n+x+" Johnny "+a+c;return x+c+r+r+r+r+n+"Johnny B. "+x+"ode";}}
( 139 Bytes ) Probieren Sie es hier aus.string x(string a)
->(a)=>
, -13 Bytes) umwandeln , nur 1 Byte hinter mir;)Func<string, string>
kannst du einfacha=>
keine Notwendigkeit für die()
.MATLAB / Octave ,
133111 BytesEs ist ein Anfang. Kann hoffentlich weiter reduziert werden.
Grundsätzlich handelt es sich um eine anonyme Funktion, die eine Zeichenfolge eingibt und dann mithilfe von Regex die erforderliche Ausgabe erstellt.
Ein Beispiel:
Sie können eine Art Online ausprobieren! . Der Code funktioniert mit Octave nicht ganz so, wie alle Großbuchstaben werden${upper($0)}
, während dies in MATLAB in den tatsächlichen Großbuchstaben konvertiert wird.Da die Eingabe garantiert nur
a-z
(Kleinbuchstaben) ist, kann ich 22 Bytes einsparen, indem ich den ersten Buchstaben in der Zeichenfolge durch einfache Subtraktion von 32 in Großbuchstaben umwandle, anstatt Regex mit derupper()
Funktion zu verwenden.Infolgedessen funktioniert der Code jetzt auch mit Octave, sodass Sie ihn jetzt online testen können!
quelle
Ruby,
89888679 BytesMeine erste Golfeinreichung:
Vielen Dank an @manatwork für seinen tollen Kommentar: 7 Bytes weniger!
quelle
?
Notation geschrieben werden; Die Klammern um die letzten.gsub
Parameter werden nicht benötigt. pastebin.com/6C6np5DfNova , 105 Bytes
Da es sich bei Nova ( http://nova-lang.org ) um eine extrem frühe Beta (und Buggy) handelt, gibt es einige offensichtliche Nachteile, die verhindern, dass noch weniger Bytes benötigt werden.
Könnte zum Beispiel einen kapitalisierten Funktionsaufruf (der dreimal aufgerufen wird) in einer lokalen Variablen wie dieser gespeichert haben:
Das hätte die Anzahl der Bytes auf 89 Bytes verringert . Der Grund, warum dies jetzt nicht funktioniert, kann auf die Argumentbewertungsreihenfolge in der Sprache C zurückgeführt werden, da Nova zu C kompiliert wird. (Die Argumentbewertungsreihenfolge wird in einem zukünftigen Update behoben.)
Außerdem hätte ich eine "title" -Eigenschaft in die String-Klasse einfügen können (und das werde ich auch tun), um die Anzahl der Aufrufe der Großschreibung zu verringern:
und das würde 7 Bytes auf insgesamt 82 Bytes freisetzen .
Darüber hinaus (und weiter weg) wäre dies gültig, sobald die Inferenz des Lambda-Variablentyps hinzugefügt wird:
Die Anzahl konnte auf 72 Bytes gesenkt werden .
Übrigens ist dies mein erster Code-Golf, daher habe ich wahrscheinlich noch mehr Optimierungen verpasst, die hätte vorgenommen werden können. Und das eine ist nicht Golf centric , für allgemeine Zwecke Sprache, ich denke , es ist ziemlich beeindruckend.
Der erste 105-Byte-Code funktioniert in der aktuellen Version von Nova Beta v0.3.8, die unter http://nova-lang.org verfügbar ist
Ausgänge:
Vielen Dank, dass Sie sich meine schamlose Werbung für die Allzwecksprache Nova angehört haben (zu finden unter http://nova-lang.org ... jetzt kaufen !!)
quelle
Brainfuck, 352 Bytes
Probieren Sie es online!
Ich mag Herausforderungen in Brainfuck immer, also hat es Spaß gemacht. Es kann wahrscheinlich mehr Golf gespielt werden, aber Brainfuck ist ein bisschen lang.
quelle
PHP, 86 Bytes
quelle
Java 8,
151147146130 BytesErläuterung:
Probieren Sie es hier aus.
quelle
Gestapelt , 64 Bytes
Probieren Sie es online!
quelle
C # ,
159130128 BytesGolf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
- 2 bytes
- Swapped(i)=>
füri=>
dank TheLetalCoder Kommentar.-29 bytes
- Dank des letzten Updates von Sir Bitesalot , der sich an mich erinnerte, konnte ich die Zeichenfolge vor dem Formatieren bearbeiten.159 bytes
- Anfangslösung.Anmerkungen
Der Titel enthält einen Link zu einer Seite mit dem Code und den Testfällen. Drücken Sie einfach Go und das Ergebnis wird unter dem Code gedruckt.
quelle
()
Argument um dasFunc
Gerechte zu tuni=>
. Sie können wahrscheinlich auch interpolierte Zeichenfolgen aus C # 6 verwenden und die verlieren,string.Format
obwohl ich mir den Code nicht zu genau angesehen habe, um zu sehen, wie (sollte trivial sein).()
, aber ich bezweifle, dass ich interpolierte Zeichenfolgen verwenden kann, ohne die Größe des Codes zu erhöhen, da durch das Ersetzen die Wiederholung reduziert wird.Javascript -
72106 BytesEdit: Ups !! Ich habe die Großschreibung nicht beachtet! Nach einer Weile wird es länger dauernEdit 2: Sollte jetzt den Regeln folgen!
Könnte wahrscheinlich mehr Golf gespielt werden
Benutzt als:
quelle
Excel VBA,
137121112898784 BytesAnonyme VBE-Direktfensterfunktion, die die Eingabe des Typs
Variant/String
aus der Zelle übernimmt[A1]
und durch Drucken des VBE-Direktfensters ausgibt-16 Bytes für die Konvertierung in die Direktfensterfunktion
-9 Bytes für die Verwendung
[PROPER(A1)]
-23 Bytes für das Löschen einer
For ...
Schleife und den Missbrauch der?
Anweisung-2 Bytes zum Ersetzen
" Johnny "&[A1]&", "&[A1]
durch[" Johnny "&A1&", "&A1]
-3 Bytes, um
+
over&
für die String-Verkettung zu verwenden und den Terminal-String nicht zu schließenBeispielfall
quelle
Debug.?s
effektivDebug.Print
? Wie funktioniert das??
,i=1To
und&c
in ausführlichen , aber lesbar Bedingungen verdauen wiePrint
,i = 1 To
und& c
. Die Community hat entschieden, dass die komprimierte Version des Codes in Sprachen für Antworten akzeptabel ist (siehe codegolf.meta.stackexchange.com/questions/10258/… )?
Ich glaube, es ist ein Überbleibsel aus der alten Version von Excel (4.0 und niedriger) , in der Makroblätter anstelle von VBA über die VBE verwendet wurden, wo es als Schlüsselwort zum Drucken einer Zeichenfolge verwendet wurde, die danach an eine Vorgängerversion gesendet wurde. angegebene Textdatei. Das?
Schlüsselwort selbst ist für das Code-Golfen nach wie vor sehr nützlich, da esPrint
in aktuellen Versionen von VBA zum Schreiben von Zeichenfolgen in eine Textdatei verwendet wird. Beachten Sie, ich habe ein Gedächtnisproblem, also nehmen Sie das mit einem Körnchen Salz.CJam , 50 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Pyke , 43 Bytes
Probieren Sie es online!
Konstruiert und druckt die erste Zeile, fügt sie dann
Johnny go
vor dem Komma ein und dupliziert sie viermal. Konstruiert schließlich den letzten Teil.quelle
johnny
. tio.run/nexus/…Python, 258 Bytes
quelle
t
da sie nur einmal aufgerufen wird.Java 6,
258242 BytesDer längste Teil davon ist das Format für printf. Es gibt Probleme mit Eingaben, die sich von Zeichenfolgen von
a
bis unterscheidenz
(ja, ich weiß, dass ich nichts anderes unterstützen muss).Ungolfed mit Kommentaren:
EDIT: 16 Bytes dank Weston Golf
quelle
"Johnny"
wird immer von einem Leerzeichen gefolgt.b[0]^=32;
wird auch ohne die Notwendigkeit der(char)
Besetzung in Großbuchstaben geschrieben .Mathematica, 83 Bytes
Anonyme Funktion. Nimmt einen String als Eingabe und gibt einen String als Ausgabe zurück. Könnte wahrscheinlich weiter golfen werden.
quelle