... und echtes Golf für meine Codefreunde.
Dies ist eine Herausforderung, die auf einem einjährigen XKCD-Comic basiert, der hauptsächlich aus Toasts (Parodien der ersten im Comic) besteht, die einem bestimmten Muster folgen, jedoch geringfügige Abweichungen aufweisen.
Ihre Aufgabe ist es, ein Programm (oder eine Funktion) zu schreiben, das die erste Hälfte eines Toasts aus dem Comic (bis einschließlich friends
) als Eingabe (über stdin oder ein Funktionsargument) entnimmt und den genauen Text von ausgibt (oder zurückgibt) die zweite Hälfte. Sie müssen keine ungültigen Eingaben verarbeiten, es gelten Standardlücken, der kürzeste Code in Bytes gewinnt.
Beispiele
Um diejenigen zu unterstützen, die die Toasts nicht von irgendwo anders kopieren möchten, finden Sie hier alle, die in Eingabe und Ausgabe unterteilt sind.
Input: Champagne for my real friends
Output: and real pain for my sham friends!
Input: Pseudopods for my real friends
Output: and real pods for my pseudo-friends!
Input: Petticoats for my real friends
Output: and real coats for my petty friends.
Input: Loosestrife for my real friends
Output: and real strife for my loose friends!
Input: Ladybugs for my real friends
Output: and real bugs for my lady friends!
Input: Single-payer for my real friends
Output: and RealPlayer for my single friends.
Input: Tumbleweeds for my real friends
Output: and real weed for my Tumblr friends!
Input: Fauxhawks for my real friends
Output: and real hawks for my faux friends!
Input: Platonic solids for my real friends
Output: and real solids for my platonic friends!
Single-payer
(anstelle vonSingle-player
).Single-payer
.Antworten:
Netzhaut , 119 Bytes
Die Vorgängerversion hat den Platz in "platonischen Festkörpern" nicht richtig geschafft, dieser funktioniert und ist kürzer :)
Probieren Sie es online!
Dadurch wird die Eingabe durch eine Reihe von Ersetzungen in die Ausgabe umgewandelt.
Der interessanteste Teil ist diese Substitution (eine Art Regex-Golf):
Das erledigt fast die ganze Arbeit, indem es das erste Wort aufteilt, seine Teile an den richtigen Stellen platziert, zusätzliche Leerzeichen entfernt und die Struktur der Ausgabe aufbaut. Um im Testfall "Tumbleweeds" korrekt zu funktionieren, hängt dies von der vorherigen Substitution "eds" -> "ed" ab.
Der Rest setzt sich hauptsächlich aus Substitutionen zusammen, die sich mit Sonderfällen befassen. Andere interessante Teile sind:
Dadurch wird alles außer "T" (für Tumblr) in Kleinbuchstaben umgewandelt.
Dies setzt ein "." am Ende jedes Satzes, der ein Wort mit einem "y" enthält, einige Buchstaben nach einem "p" ("petty" und "payer" in der Praxis). Dann setzt ein "!" am Ende aller Sätze, die mit einem "s" enden (alle anderen).
quelle
platonic
. Vorgeschlagener Fix: TIO (+5 Bytes)Python 2,
291269293255247 BytesVielen Dank
Erik the Outgolfer
für das Speichern von 22 Bytes!+24 Bytes, um einige Ausgaben zu berücksichtigen, die auf
.
anstatt enden!
Einfache Lösung für den Anfang. Überprüft den achten Buchstaben der Eingabe, wie in den Kommentaren vorgeschlagen, und sucht die entsprechende Ausgabe in
einem Wörterbuch undeinem Array.Probieren Sie es online!
quelle
Single-payer for my real friends
...RealPlayer
ist ein SonderfallSOGL , 143 Bytes
Dies verwendet diese Zeichenfolge als Hauptteil. "|" Sind die Teiler und "_" sind Leerzeichen Platzhalter, so würde das Teilen korrekt funktionieren.
Eingabebeispiel: "Platonische Körper für meine wahren Freunde" Erläuterung:
quelle
Python 3 ,
788,403,359,396 BytesLetzte Version
Dies ist jetzt mein fünfter Versuch. Ich habe es geschafft, die Hälfte meines ursprünglichen Programms zu erreichen. Es enthält jetzt das fehlende "-" und ist meiner Meinung nach eine vollständige Lösung. Ich vermute immer noch, dass es sperrig ist; aber viel näher am Ziel. Ich hatte viel Hilfe . Vielen Dank für die hilfreiche Anleitung.
Probieren Sie es online!
Ursprüngliche Buchung
Dies ist mein erster Beitrag zum Thema Codegolf, daher entschuldige ich mich im Voraus für mein ungeschicktes Programm. Kann nicht sehen, wie ein Programm gemacht werden kann, um "Champagner" in "Schmerz", "Schein" umzuwandeln, indem die Wörter analysiert werden. Ich würde jedoch gerne sehen, dass jemand anderes das löst. Da mein Kenntnisstand vorschreibt, dass mein Programm im Voraus wissen muss, dass "Champagner" "Schmerz", "Schein" ist, schien es wenig sinnvoll, eine Eingabeanforderung tatsächlich zu codieren. Infolgedessen habe ich es ausgelassen und war mit meiner Druckausgabe ein bisschen wörtlich. Hoffe das ist ok :)
quelle
Röda ,
299292288259 BytesDank @fergusq wurden 4 Bytes für die Verwendung
,
anstelle..
derpush
Anweisungen gespeichertDank @fergusq gespeicherte Bytes zeigen mir den Weg von
indexOf
Probieren Sie es online!
So nah an Python ... so nah an ...
Dein Zug, Python.Erläuterung
quelle
..
mit,
.r=indexOf(a[7:8],"noarspekc")
.JavaScript (ES6),
230228221216 BytesPrüfung
Code-Snippet anzeigen
quelle
PHP,
202220204203 Bytesquelle
Perl,
173168 BytesDas Entfernen von Zeilenumbrüchen und Einrückungen ergibt 173 Byte Perl5-Code. Schamlos gestohlen erste Regexp von Leo Retina Antwort. (Meins war ein paar Zeichen länger)
Für die Version perl5> = 5.14 können mit eval und dem neuen Substitutionsmodifikator / r regexp weitere 5 Bytes abgeschnitten werden. Endet mit 168 Bytes:
Probieren Sie es online!
quelle
C 367 Bytes
Nicht so kurz, wie es schien.
quelle
Java 7,
585553 Bytes-32 Bytes dank @Zircon .
Kann definitiv mit etwas anderem als einer Karte gespielt werden.
Erläuterung:
Testcode:
Probieren Sie es hier aus. (ideone.com ist in letzter Zeit fehlerhaft, daher benutze ich jetzt TIO ..)
quelle
put
anstelle von verwendenm.put
.C (gcc) , 311 Bytes
Klare Muster, aber so viele Ausnahmen. Trotzdem muss es einen besseren Weg geben!
Probieren Sie es online!
quelle