Ihre Aufgabe ist es, den Text zu drucken Good morning, Green orb!
, wobei jedes Zeichen so oft an der richtigen Stelle wiederholt wird, wie das häufigste Byte in Ihrer Quelle (der Modus). Ein abschließender Zeilenumbruch ist zulässig und muss nicht wiederholt werden.
Zum Beispiel, wenn Ihre Quelle war
print p
Da p
erscheint zweimal und jedes zweite Byte erscheint einmal, wenn Sie drucken müssten
GGoooodd mmoorrnniinngg,, GGrreeeenn oorrbb!!
Die Antworten werden nach dem Produkt ihrer Byteanzahl und der Häufigkeit bewertet, mit der die Ausgabe wiederholt wird. Zum Beispiel würde der obige Code (wenn er funktioniert) 7 * 2 = 14 ergeben . Das Ziel sollte sein, die Punktzahl zu minimieren.
Ihr Code muss mindestens 1 Byte enthalten.
Verwenden Sie dieses Programm, um zu überprüfen, ob Ihr Code und Ihre Ausgabe übereinstimmen
quelle
Antworten:
Brain-Flak ,
384· 10 & sup6 ; 366 · 100 = 36.600Probieren Sie es online!
Erläuterung
Das erste, was ich tue, ist die Saite zu drücken
auf den Stapel mit ziemlich Standard-Brain-Flak-Kolmogorov-Komplexitätstaktik.
Dann legen wir einen Zähler auf den Stapel ab und teilen uns mit, wie oft jedes Zeichen dupliziert werden soll. Allerdings konnte ich nicht feststellen, was dieser Zähler war, bis ich mit dem Schreiben des Programms fertig war.
Als nächstes kehren wir gleichzeitig die Zeichenfolge um und duplizieren jedes Zeichen an der richtigen Stelle so oft wie nötig. Insbesondere der Zähler + 1.
Diese beiden Teile des Programms haben einen Modus von 99 offenen Klammern. Da wir jedoch höchstwahrscheinlich mindestens 1 Klammer benötigen werden. Hier ist mir aufgefallen, dass das letzte Zeichen, das wir gepusht
!
haben, den Zeichencode 33 hat, was bedeutet, dass wir damit 99 erstellen können, die exakte Zahl, die wir möchten, indem wir nur eine zusätzliche Klammer verwenden. Das ist ein ziemlicher Zufall, aber es funktioniert.quelle
Haskell , 37 Bytes × 3 = 111
-20 danke an H.PWiz. -25 danke an nimi.
Probieren Sie es online!
Haskells Betreiber FTW.
Selbstanzeige, zum auf Mobile nie zu golfen. Ich mache immer wieder blöde Fehler. Ich kann mindestens die Hälfte der Schuld auf das Handy schieben. : P
quelle
<*
, um Bytes zu speichern (Beachten Sie, dass ich seine Gültigkeit nicht überprüft habe)Brainfuck , 235 x 77 = 18.095 Punkte
Edit: -2 Bytes dank @Dennis
Probieren Sie es online!
TIO-Test
Warten Sie, das ist kein Code-Bowling? \ s
Mit nur 8 verwendbaren Zeichen ist Brainfuck eine der schlechtesten Sprachen, um diese Frage zu beantworten. Ich musste damit beginnen, zu minimieren, welcher Charakter zwangsläufig am häufigsten auftaucht, typischerweise entweder
+
oder-
. Nachdem ich die erste Iteration des Codes geschrieben hatte, fand ich ihn fürchterlich unausgewogen zugunsten von+
s. Ich habe Teile des Codes neu angeordnet, z. B. die Generierung größerer Zahlen, um mehr zu verwenden-
. Schließlich beenden I mit biseiner gleich bei 77 Menge der zwei Zeichenum eins kleiner ist-
als+
. Es ist sicherlich möglich, dies weiter zu reduzieren, was ich morgen ausprobieren werde.Aber hey, zumindest habe ich die Antwort von Brainflak geschlagen
quelle
;#
Schön, wenn es in der Sprache gemacht werden kann (͡ ° ͜ʖ ͡ °)Jelly , 13 Bytes * 1 = 13
Probieren Sie es online!
quelle
Alice , 49 Bytes * 2 = 98
144Probieren Sie es online!
Erläuterung
Dies ist der übliche Rahmen für lineare Programme, die vollständig im Ordinalmodus arbeiten. Wenn wir den Zick-Zack-Kontrollfluss entfalten, erhalten wir:
Die Grundidee ist, Zeichen zu vermeiden, die sich mit Hilfe einer Transliteration mehr als zweimal wiederholen. Die Transliteration, die wir machen werden, ist die folgende:
Die Art
from
und Weise, wie die Transliteration in Alice funktioniert, besteht darin, dass die undto
-Zeichenfolgen zunächst im LCM ihrer Länge wiederholt werden. In diesem Fall ist jedoch die Länge derfrom
Zeichenfolge ausschlaggebend.Auf diese Weise erhalten wir vier verschiedene Charaktere , die vertreten
o
s und drei jeweilsn
,r
und der Raum. Wir können diefrom
Zeichenfolge mithilfe der Bereichserweiterung wie folgt generieren :Das einzige Problem ist jetzt, dass wir vier
"
sowohl für dieinput
als auch für dieto
Zeichenfolge benötigen würden . Um dies zu vermeiden, setzen wir beide in eine einzelne Zeichenfolge und teilen sie an einem=
als Trennzeichen verwendeten Punkt auf.Der Rest ist nur:
quelle
Python 2 , 62 × 3 = 186
Probieren Sie es online!
quelle
C (gcc) ,
74 × 6 = 444durchgestrichen 444 ist immer noch regulär 44477 × 5 = 38581 × 4 = 324Probieren Sie es online!
quelle
C (gcc) , 68 × 3 = 204
Vielen Dank an @MDXF für das Speichern von 9 Punkten und für weitere 6 Punkte!
Probieren Sie es online!
Alternative Version, druckbares ASCII, 69 × 3 = 207
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 46 Bytes × 2 = 92
(Enthält nicht druckbare)
Probieren Sie es online!
+ Viele Bytes dank Dyalogs Codepage, danke an @ Adám für den Hinweis.
quelle
~⎕AV∊⍨⎕UCS 18
.Vim,
4241 Tastenanschläge × 3 = 123Erläuterung:
iGod morning, Green orb!<Esc>
Schreiben Sie die Zeichenfolge
God morning, Green orb!
(eineo
fehlt).2|
Springe zum ersten
o
.qsyl2pl@sq
Erstellen Sie ein rekursives Makro
s
. Verdreifachen Sie als Nebeneffekt den Stromo
.X0
Entfernen Sie eine
o
und springen Sie zum Anfang.@s
Führen Sie den Makro aus
s
, der jedes Zeichen zweimal wiederholt.quelle
C 78 × 4 = 312
Probieren Sie es online!
356332quelle
Japt , 24 Bytes * 2 = 48
Enthält eine nicht druckbare. Online testen!
Der größte Teil des Programms ist nur eine komprimierte Zeichenfolge, die nach dekomprimiert wird
und
m²
dannm
aps jedes Zeichen durch Wiederholen es²
wice Ordnung, das ein wenig strecken war . Leerzeichen ist das einzige Zeichen, das in der komprimierten Zeichenfolge dreimal vorkommt. Um eine Instanz zu speichern, ersetzen wir sie durch eine neue Zeile. Dann·¸
teilen wir sie in neue Zeilen und fügen sie sofort in Leerzeichen ein. Es ist zwar 2 Byte länger, verringert aber die Punktzahl erheblich (von 66 auf 48).Wenn es nur einen kurzen Weg gäbe, dies ohne Zeichen zweimal zu tun ...
quelle
*salute*
Und jetzt, wo ich mir Ihre AntwortSNOBOL4 (CSNOBOL4) , 97 Bytes * 10 = 970
Probieren Sie es online!
yeah ........ SNOBOL verlangt, dass die Operatoren durch Leerzeichen getrennt sind, und es gibt Leerzeichenanforderungen, die ziemlich umständlich sind. Der Code enthält 9
'\t'
und 10' '
, sodass für Verbesserungen eine erhebliche Änderung des Ansatzes erforderlich ist.quelle
R ,
65 Bytes * 5 = 325,59 Bytes * 5 = 295,62 Bytes * 4 = 248Probieren Sie es online!
Es gibt 4
(or,')
Zeichen.quelle
strrep
zuvor gesehen , dass sollte sich als nützlich erweisen.Ruby , 52 Bytes × 3 = 156
Probieren Sie es online!
quelle
Perl 5 , 59 × 2 = 118 Punkte
Probieren Sie es online!
Perl 5 , 51 × 3 = 153
156PunkteProbieren Sie es online!
Perl 5 , 43 × 4 = 172 Punkte
Probieren Sie es online!
Dank @Xcali wurden in jeder Lösung 2 Byte gespeichert (vor einigen Änderungen). Für alle Optimierungen schauen Sie sich die Bearbeitungen an.
quelle
-M5.010
, die auch zähltV , 35 Bytes * 2 = 70
Probieren Sie es online!
Hexdump:
quelle
SOGL V0.12 , 16 Bytes * 1 = 16
Probieren Sie es hier aus!
Kompression!
Wenn
Green
nicht so groß geschrieben, könnte dies 3 Bytes kürzer sein: /quelle
Python 2 , 62 * 4 = 248
Vielen Dank an @ovs und @Giuseppe!
Probieren Sie es online!
Python 2 , 51 * 6 = 306
Probieren Sie es online!
Python 2 , 70 * 5 = 350
Probieren Sie es online!
Vielen Dank an @Mr. Xcoder zum Speichern eines Bytes aus beiden Versionen!
quelle
6
und entfernenfor
.\x6f
s, die immer noch gut für 244 istOhm v2 , 20 Bytes * 1 = 20
Probieren Sie es online!
Ich muss die Komprimierung lieben, obwohl sie leider nicht so gut ist wie die von SOGL.
quelle
Sauber , 77 Bytes * 3 = 231
Probieren Sie es online!
quelle
CJam , 32 Bytes × 2 = 64
Probieren Sie es online!
Drückt eine Zeichenfolge, verknüpft die ersten 20 Zeichen mit XOR
[0, 1, …, 19]
und dupliziert dann jedes Zeichen.quelle
05AB1E , Score: 22 (22 Byte * 1)
Probieren Sie es online aus.
Erläuterung:
HINWEIS 1: Der eingebaute Wrap-Stack in Liste
)
wird anstelle des eingebauten Paars verwendet‚
, da das‚
bereits Teil des Wörterbuchworts istgood
.Hinweis 2: Die beiden Kommas im Code
‚
und,
kann gleich aussehen, aber verschiedene Unicode - Zeichen . Das erste wird normalerweise für das eingebaute Paar verwendet , und das zweite für den eingebauten Ausdruck an STDOUT mit nachfolgendem Zeilenumbruch . In diesem Fall werden sie jedoch für das Wörterbuchwortgood
und das erwartete Komma in der Ausgabe verwendet.Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie verwende ich das Wörterbuch? ) An, um zu verstehen, warum es
…‚¿•´,
ist"good morning,"
und„ˆ¨èã
ist"green orbit"
.quelle
PowerShell , 46 Byte * 4 = 184 Punkte
Probieren Sie es online!
quelle
$0
PowerShell ,
49 * 558 Byte * 4 = 232 Punkte-13 Punkte dank nur ASCII
Probieren Sie es online!
Verwendet die Formatierung von 5
o
s bis 4 s, um einige Zahlen auszublendenquelle
Gelee , 31 Bytes × 2 = 62 Punkte
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6), 61 Byte * 3 = 183
Code-Snippet anzeigen
JavaScript (ES6), 51 Byte * 4 = 204
Antwort vorgeschlagen von @ETHproductions .
Code-Snippet anzeigen
JavaScript (ES6), 73 Byte * 4 = 292
Code-Snippet anzeigen
JavaScript (ES6), 58 Byte * 6 = 348
Code-Snippet anzeigen
quelle
_=>_
'$&'
'$&$&$&$&$&$&'
für den ErsatzRetina , 36 × 4 = 144
Probieren Sie es online! Es gibt drei Zeilenumbrüche und vier Sekunden
o
, es ist also nichts mehr zu tun.quelle
Ruby, 55 x 4 = 220 Punkte
Ich bin ziemlich genervt, dass mit each_char die Anzahl von rs 5 macht.
quelle
Aufdringlich , 36 × 2 = 72
Probieren Sie es online!
Das Hauptprinzip dieser Antwort ist, dass jedes Zeichen wie
n
folgt gespeichertn + index - 29
wird, um die Wiederholung in der Originalzeichenfolge zu vermeiden. Durch diese Zuordnung wurde die Zeichenfolge in den Backticks erstellt. Der Rest des Programms dekodiert dies einfach und druckt jedes Zeichen zweimal aus:Bytes, die zweimal verwendet werden:
`'W
Änderungsprotokoll
quelle