Wir alle kennen den klassischen Vaterwitz, der ungefähr so aussieht:
Jemand sagt einen Satz, um sich selbst zu beschreiben (zB
I'm tired
oderI'm confused
).Ein Dad-Joke-Enthusiast kommt vorbei und antwortet
Hi <adjective>, I'm Dad!
, weil die Einführungen dem gleichen Format folgen (I'm Peter
folgt dem gleichen Format wieI'm hungry
).
Ihre Aufgabe ist es, eine Eingabe in Form eines Selbstdeskriptors aufzunehmen und das entsprechende Dad-Joke-Formular auszugeben. Statt des Wortes "Dad" verwenden Sie jedoch den Namen der Programmiersprache, die Sie programmieren im.
Testfälle (setzen voraus, dass sie von Python analysiert werden):
I'm amazing Hi amazing, I'm Python!
I'm tired Hi tired, I'm Python!
I'm hungry Hi hungry, I'm Python!
I'm fat Hi fat, I'm Python!
Nehmen wir nun an, dass diese Testfälle von Golfscript analysiert werden:
I'm a programmer Hi a programmer, I'm Golfscript!
I'm a question-writer Hi a question-writer, I'm Golfscript!
I'm a Stack-Overflow-er Hi a Stack-Overflow-er, I'm Golfscript!
Die genaue Herausforderung:
Nehmen Sie eine Zeichenfolge im Selbstdeskriptor-Format (
I'm <adjective>
oderI'm a(n) <noun>
) über die Standardeingabe oder über eine Funktion auf.Angenommen, es gibt keine abschließende Interpunktion.
Angenommen, das Wort
I'm
wird verwendet und nichtI am
.
Konvertieren Sie es in ein Dad-Joke-Format - sehen Sie sich die obigen Beispiele an, um genau zu sehen, wie das aussehen soll.
Andere Sachen:
Das ist Code-Golf , also gewinnt die kürzeste Anzahl an Bytes.
Befolgen Sie die Standardregeln für Lücken - bitte keine.
Habe Spaß!
Bestenliste
Sie können die Bestenliste für diesen Beitrag anzeigen, indem Sie das Widget / Snippet unten erweitern. Damit Ihr Beitrag in die Rangliste aufgenommen wird, benötigen Sie einen Header ( # header text
) mit folgenden Informationen:
Der Name der Sprache (Ende mit Komma
,
oder Bindestrich-
), gefolgt von ...Die Anzahl der Bytes als letzte Zahl in Ihrer Kopfzeile.
Beispielsweise JavaScript (ES6), 72 bytes
ist gültig, aber Fortran, 143 bytes (8-bit)
ungültig, da die Byteanzahl nicht die letzte Zahl in der Kopfzeile ist (Ihre Antwort wird als 8 Byte erkannt - nutzen Sie dies nicht).
<iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=185872" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
quelle
Antworten:
V , 13 Bytes
Probieren Sie es online!
Inspiriert von der Antwort von tsh
Dies macht sich die Tatsache zunutze, dass
I'm
beim Löschen des Texts von Anfang an vom Anfang der Zeichenfolge an gereiht und<C-r>"
im Einfügemodus bis zum Ende eingefügt wird .quelle
I'm
zu<C-O>p
und dann feststellen , dass Ihre Antwort ...escape
dauert 5 Zeichen?0x1B
, aber es ist einfacher und offensichtlicher, was es bedeutet, wenn Sie es als schreiben<esc>
. Das gleiche für<C-r>
, was wirklich ist0x12
C (gcc) ,
594233 Bytes-17 Bytes dank @Conor O'Brien, der bemerkte, dass der Import nicht notwendig war
-9 Bytes dank @tsh, das auf eine kürzere UB-Schreibweise der Funktion hinweist
Probieren Sie es online!
Schneidet die ersten 3 Zeichen der Eingabe ab (entfernt
I'm
) und umgibt sie mit dem gewünschten Text.quelle
int
ist auch optional.char*
vielleicht auch ...; Soa(x){printf("Hi%s, I'm C!",x+3);}
sollte es funktionierenint
kann,char*
ohne es abzuschneiden), trotz des undefinierten Verhaltens. Auf x86-64 gcc unter Linux schlägt die Ausführung einer PIE-Datei immer fehl (normalerweise befinden sich keine Zeiger in den niedrigen 32 Bit des virtuellen Adressraums, und gcc kopiert die hohen 32 Bit nicht, währendx+3
aus der Funktion arg in berechnet wird das FEI-Register). In einer nicht von PIE ausführbaren Datei befinden sich statische Adressen jedoch in den niedrigen 31 Bit des virtuellen Adressraums. Wenn der Aufrufer also ein Zeichenfolgenliteral oder einen statischen Puffer übergeben würde, würde dies funktionieren.V , 13 Bytes
Probieren Sie es online!
Neu bei
V
. Ich wusste es gerade vor ungefähr 30 Minuten. Wie auch immer, diese Sprache wird nur gewählt, weil ihr Name nur 1 Byte kostet. Ich bin nicht sicher, wie ich<End>
Schlüssel in V senden soll . Die meisten vim-Umgebungen würden in diesem Beispiel<End>
als Ersatz akzeptieren<Esc>A
. Aber Sie wissen, V ist 2 Zeichen kürzer als vim. :)Spart dank @Candy Gumdrop 1 Byte.
quelle
c3l
zucE
.E
vorher nicht.cW
(was anders scheint, aber tatsächlich identisch istcE
) oder3s
. Gute Arbeit! Ich wollte gerade fast genau diese Antwort posten, als ich sah, dass es bereits 2 V-Antworten gab, was eine schöne Überraschung war. Ich habe verschiedene Ansätze ausprobiert, bin mir aber nicht sicher, ob es möglich sein wird, <13 Bytes zu erhalten.Stax , 13 Bytes
Führen Sie es aus und debuggen Sie es
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Ich habe den letzten Kommentar um eine Zeile nach oben verschoben, da einem nicht abgeschlossenen Zeichenfolgenliteral möglicherweise nichts folgt.
Führen Sie dieses aus
quelle
Gehirnfick, 164
Probieren Sie es online!
Der "Brainfuck!" Ein Teil der Saite wird mit diesem Werkzeug erzeugt, kann wahrscheinlich von Hand weiter golfen werden.
quelle
Excel,
3633 Bytes-3 Bytes danke an Johan du Toit.
Die Eingabe erfolgt in A1.
Erster Versuch:
quelle
="Hi "&MID(B13,4,99)&", I'm Excel"
34 BytesA1
stattdessenB13
also eigentlich 33 bytes.Python 3 ,
3534 BytesProbieren Sie es online!
-1 Byte dank Verkörperung der Ignoranz
Dank Gábor Fekete auch 34 Bytes mit den neueren formatierten Zeichenfolgen:
Probieren Sie es online!
quelle
lambda s:
und das Ersetzen%s[3:]
mit%input()[3:]
? (-4 Bytes)print()
7 weiteren Bytes umhüllt werden. Aus diesem Grund verwenden Python-Antworten normalerweise Lambdas.lambda s
ich eine (anonyme) Funktion definiert. Wenn Sie sich die Kopf- und Fußzeile im TIO-Link ansehen, benenne ich diese Funktionf
und rufe sie dann mit auff("I'm whatever")
. Dann gibt die Funktion die erwartete Ausgabe zurück. Mit Ihrem Snippet können Sie eine Funktion weder drucken noch zurückgeben. Sie haben nur ein bisschen Code, der das richtige Ergebnis liefert, aber nichts damit anfängt. Sie können Programme mehrfach ausführen, Funktionen mehrfach aufrufen, aber ein Snippet ist nur ein Snippet.R
454439 Bytes@ Giuseppe Bearbeiten
@ AaronHayman Bearbeiten
Probieren Sie es online!
quelle
"(I'm )
mit"(.* )
I'm a programmer
(viele Leerzeichen) wegen Giersub
to"I'm(.*)" and "Hi\\1, I'm R"
und 3 Bytes durch Eingeben von stdin mitscan
: OnlinePHP ,
3432 BytesProbieren Sie es online!
Eingabe über
STDIN
, Aufruf mit -F.quelle
x86 ,
3736 BytesZerlegt:
Ein eigenständiges ausführbares DOS-Programm. Eingabe über die Befehlszeile, Ausgabe auf dem Bildschirm.
Laden Sie DAD.COM herunter und testen Sie es .
* Der genaue Name der "Sprache" ist hier etwas mehrdeutig, da der CPU-Maschinencode nicht wirklich eine Sprache im formalen Sinne ist. Mit "x86" als allgemein bekanntem und akzeptiertem Namen für die Zielplattform.
quelle
Java, 36 Bytes
Probieren Sie es online aus.
quelle
Leerzeichen , 267 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Da Whitespace jeweils ein Zeichen eingibt, sollte die Eingabe eine abschließende neue Zeile enthalten, damit bekannt ist, wann das Lesen von Zeichen zu beenden ist und die Eingabe abgeschlossen ist.
Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erklärung im Pseudocode:
Die Zeichen von
", I'm Whitespace!"
werden in umgekehrter Reihenfolge verschoben und dann in einer Schleife gedruckt. Alle Werte dieser Zeichen werden ebenfalls um 102 verringert, die vor dem Drucken in der Schleife hinzugefügt werden, um Bytes zu sparen. Diese Konstante 102 zum Verringern jedes Zeichens mit wird mit diesem Java-Programm erzeugt . Anstatt den Wert-70
für beide Leerzeichen zweimal zu verschieben, wird das zweite Leerzeichen"!ecapsetihW m'I ,"
aus dem ersten mit der eingebauten Copy-Funktion kopiert, um einige Bytes zu sparen.quelle
IBM / Lotus Notes Formula Language,
6162 Byte+1 weil ich das
!
am Ende der Ausgabe nicht bemerkt hatte .Berechnete Feldformel, deren Eingabe von einem bearbeitbaren Feld stammt
i
. Es würde für "Ich bin ein Ich" scheitern, aber da das überhaupt keinen Sinn ergibt, gehe ich davon aus, dass es nicht passieren wird.Schade, dass bei 32 Bytes der Name der Sprache mehr als die Hälfte der Gesamtlänge der Formel beträgt!
Screenshot unten mit einem Beispiel für Ein- und Ausgabe:
quelle
Formula
Perl
als Ersatz fürPerl 5
oderPerl 5 -p
.sed (
-r
),312825 Bytes-3 Bytes dank Shaggy -3 Bytes, da
-r
in der Ausgabe nicht benötigtTIO
quelle
-r
aber es lohnt sich, Meta zum Abwägen zu bringen.Japt , 18 Bytes
Wenn die String-Komprimierungsbibliothek von Japt eine Komprimierungsrate von 0% erreicht ...
Versuch es
Eine weitere 18-Byte-Alternative:
quelle
Oktave , 35 Bytes
Probieren Sie es online!
42 Bytes:
Ich habe versucht, "Octave" irgendwie abzurufen, ohne es aufzuschreiben, da 6 Zeichen im Vergleich zu einigen anderen Sprachnamen hier ziemlich viel sind. Leider konnte ich nur feststellen
ver
, welche Struktur mit kommagetrennten Feldern ausgegeben wird. Nimmt weit mehr als 6 Bytes. :(Probieren Sie es online!
quelle
Ruby
-p
,322726 Bytes-5 Bytes durch Nutzung von Nick Kennedys Jelly-Antwort .
-1 Byte vom Teilen an einem anderen Punkt in der Zeichenfolge. Außerdem wurde mir klar, dass mein alter bytecount falsch war.
Erläuterung
Probieren Sie es online!
quelle
Rust , 41 Bytes
Probieren Sie es online!
quelle
Batch, 22 + 3 = 25 Bytes
+3 Byte für die Benennung dieser Datei
I'm
(mit der erforderlichen.bat
Erweiterung für Batch-Dateien). Rufen Sie as aufI'm hungry
, wenn es wiedergegeben wirdHi hungry, I'm Batch!
.quelle
I'm
aber hier ist es der Name des Skripts weiß nicht, ob es gültig ist, oder es ist der Interpreter mit dem Skript im aktuellen PfadCMD
, also würde mir das eigentlich 2 Bytes sparen?Perl 6 ,
30 2827 BytesProbieren Sie es online!
quelle
Perl 5
-p
,3124 BytesKürzung basierend auf Erläuterungen von OP und einem Vorschlag von @NahuelFouilleul.
Probieren Sie es online!
quelle
$^X $]
könnten auch spezielle Variablen verwendet werden, jedoch ist 5 kürzer als$]
5
als Teil des Namens der Sprache? Könnten Sie also argumentieren, dass Perl 5 sich selbst als "Perl" betrachtet? Das war der Fall, bevor Perl 6 existierte und Codegolf-Antworten nur an mindestens einer Implementierung der Sprache arbeiten müssen. Wählen Sie also eine alte aus?Perl
ausreichend ist. Und dass die Verwendung der-p
Option nicht als Teil des Sprachnamens betrachtet werden muss.Jelly ,
1615 BytesEin vollständiges Programm, das ein (Python-formatiertes) String-Argument akzeptiert, das das Ergebnis ausgibt.
Probieren Sie es online!
Wie?
Hinweis:
Ḋ⁾Hio...
funktioniert auch.quelle
Jelly ,
2017 BytesProbieren Sie es online!
Ein monadischer Link, der die Eingabe als Argument verwendet und eine Jelly-Zeichenfolge zurückgibt.
Erläuterung
quelle
VBA (Excel), 27
28BytesDie Eingabe erfolgt in Zelle A1 des aktiven Arbeitsblatts in Excel. Führen Sie den Code im Direktfenster aus
Nutzt die Tatsache aus, dass
"SomeString"SomeValue
undSomeValue"SomeString"
implizit verkettet wird, und dass das Weglassen des dritten Arguments in derMID
Funktion alle Zeichen vom Ende der Eingabe in eine Funktion zum Speichern der Anfangszeichen umwandelt(-1 Byte dank Shaggy, aber +1, wenn OP bestätigt, dass alle Antworten mit einem Ausrufezeichen enden sollen)
(-1 Byte dank Taylor Scott, der mich daran erinnert, dass das letzte Anführungszeichen optional war)
quelle
Hi
und Ersetzen5
mit4
?"
aus dieser Lösung entfernen. Wenn Sie die Auswertungsnotation (die eckigen Klammern) verwenden, sollten Sie diese Lösung als Excel VBA kennzeichnen, da diese Notation nur in ExcelJ , 22 Bytes
Probieren Sie es online!
quelle
05AB1E ,
2321 Bytes2 Bytes dank Kevin Cruijssen gespeichert
Probieren Sie es online!
Erläuterung
quelle
•äƵí•hR
ist 1 Byte kürzer als"05AB1E"
. :)•äƵí•hR
, aber wie du sagst, speichert es hier leider keine.QuadR , 22 Bytes
Probieren Sie es online!
Dies ersetzt:
^...
drei Anfangsbuchstabenund
$
das Zeilenendemit
Hi
und
,I'm QuadR
jeweils
quelle
⎕R
APL-Betreiber.Netzhaut ,
2221 BytesProbieren Sie es online! Link enthält Testfälle. Funktioniert nicht in Retina 0.8.2, passen Sie stattdessen die QuadR-Antwort von @ Adám an. Erläuterung: Das Muster ist leer, sodass es an jeder Position in der Eingabezeichenfolge übereinstimmt. Wir brauchen aber nur die dritte (oder vierte) Übereinstimmung. Die Auswechslung wird dann auf diese Übereinstimmung angewendet.
$'
Bezieht sich innerhalb dieser Ersetzung auf den Rest der Zeichenfolge und$`
auf den Anfang der Zeichenfolge.quelle
Retina 0.8.2 ,
262523 Bytes-1 Byte danke an @attinat .
-2 Bytes durch Portierung der QuadR-Antwort von @ Adám , also stelle sicher, dass du ihn positiv bewertest !!
PS: @Neil hat in der neuen Version eine kürzere Retina-Antwort gepostet , daher habe ich diese Antwort explizit auf Retina 0.8.2 geändert.
Probieren Sie es online aus.
Erläuterung:
Ersetzen Sie die ersten drei Zeichen durch "Hi":
Und fügen Sie dann ein abschließendes ", ich bin Retina!" (durch Ersetzen des Stringendes):
quelle
Bash, 24 Bytes
TIO
quelle
bash
mit$0
, um ein paar Bytes zu speichern$0
würde den Namen des Skripts ausgeben oder ausführen,bash -c 'echo Hi ${@:2}, $1 $0!' bash $@
sollte aber in der Größe zählen