Monopolbehörde
Für diese Code-Golf-Herausforderung bauen wir das Brettspiel Monopoly auf.
Regeln:
- Nehmen Sie keine Eingabe.
- Geben Sie eine 11x11-Karte aus, bei der jedes ASCII-Zeichen, das die Karte bildet, der erste Buchstabe jedes Leerzeichens der US-Version der Monopoly-Karte ist.
- Die Zeichen müssen durch Leerzeichen getrennt werden.
Go
sollte unten rechts beginnen.
Die genaue zu produzierende Zeichenfolge ist
F K C I I B A V W M G
N P
T N
C C
S P
P S
V C
S P
E L
S B
J C V C O R I B C M G
Beachten Sie, dass die Quadrate von rechts unten nach links unten wie folgt sind:
G --> Go
M --> Mediterranean Avenue
C --> Community Chest
B --> Baltic Avenue
I --> Income Tax
...
J --> Jail
Bearbeiten Wow! euch hat das wirklich gefallen! :)
code-golf
string
ascii-art
kolmogorov-complexity
board-game
jacksonecac
quelle
quelle
Antworten:
Netzhaut , 74 Bytes
Die vorletzte und letzte Zeile sollte ein Leerzeichen enthalten.
Probieren Sie es online!
Erläuterung
Dadurch wird die (leere) Eingabe durch die Zeichenfolge in der zweiten Zeile ersetzt.
Dies ist eine geteilte Phase, bei der die Zeichenfolge um Übereinstimmungen der Regex
(._.)
( dh drei beliebige Zeichen mit einem_
in der Mitte) aufgeteilt wird. Der Grund, warum wir den gesamten regulären Ausdruck in eine Gruppe einteilen, ist, dass geteilte Phasen auch die Ergebnisse der Erfassung von Gruppen zurückgeben. ZB Splittingabcd
umbc
gibt[a, d]
, aber Splitting es umb(c)
gibt[a, c, d]
. Auf diese Weise erhalten wir alle._.
Teile in separaten Zeilen, aber auch die 11-stelligen Teile am Anfang und Ende. Wir verwenden die_
Option, um leere Ergebnisse zwischen den einzelnen._.
Übereinstimmungen wegzulassen . Das Ergebnis wäre:Als nächstes verarbeiten wir die Unterstriche:
Dadurch wird jeder Unterstrich durch neun
1
Sekunden ersetzt. Der Grund, warum wir1
hier s anstelle von Leerzeichen sofort verwenden, ist, dass es einfacher ist, die Leerzeichen als nächstes einzufügen.Denken Sie daran, dass in der zweiten Zeile ein Leerzeichen steht. Dadurch wird an jeder Stelle ein Leerzeichen eingefügt, das keine Wortgrenze ist, dh überall außer am Anfang und am Ende der Zeilen.
Und schließlich ersetzen wir all diese
1
s auch durch Leerzeichen.quelle
(._.)
.Jelly , 44 Bytes
Probieren Sie es online!
Idee
Wenn wir jede zweite Spalte entfernen und Zeilen mit Spalten transponieren, erhalten wir die folgende Tabelle.
Jetzt können wir jede Spalte um eine Einheit nach rechts drehen und alle verbleibenden Leerzeichen nach rechts verschieben.
Dann entfernen wir die übrigen Räume und ersetzen Zeilenvorschübe mit dem Buchstaben D .
Jetzt ersetzen wir jeden Buchstaben durch seinen 1-basierten Index im Alphabet.
Dann konvertieren wir dieses Ziffernfeld von der bijektiven Basis 23 in eine Ganzzahl.
Nun konvertieren wir diese Ganzzahl in die bijektive Basis 250 .
Schließlich verwenden wir diese Ziffern, um in Jellys Codepage zu indizieren .
Dies sind die codierten Daten, die in das Programm aufgenommen werden ( 29 Byte ). Um die gewünschte Ausgabe zu erzeugen, müssen wir nur die obigen Schritte umkehren.
Code
quelle
z
) mit einem Füllstoff verwenden.05AB1E ,
4847 BytesDanke an Emigna für das Speichern eines Bytes!
Erläuterung:
Zuerst etwas Komprimierung.
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•
ist eine komprimierte Version der folgenden Nummer:Danach wird dies in Basis 33 konvertiert , was zu der folgenden Zeichenfolge führt:
Die Nullen werden mit dem folgenden Code durch 9 Leerzeichen ersetzt
¾9ð×:
. DanachS
teilen wir den String in Zeichen und schneiden sie in Stücke von 11 Elementen (fertig mit11ô
). Wir erhalten das folgende zweidimensionale Array:Wir gittern dieses Array mit
»
und geben es implizit aus.Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•33B¾9ð×:S11ô»
Python 2, 89 Bytes
Erstellt die Vorlage
in Buchstaben durch Zeichenfolgenformatierung zu ersetzen. Die Vorlage verwendet zwei Arten von Linien:
l
von 11 Exemplaren von Buchstaben plus Leerzeichen, dann eine neue Zeile. Es wird auch für die erste und letzte Zeile verwendet. Es hat ein Leerzeichen.Mit Python 3.5 kann ein Byte beim Entpacken von Tupeln gespeichert werden
(*'...',)
.quelle
PowerShell v2 +,
13112311411099 ByteDies ist nur eine wörtliche Zeichenfolge mit Zeilenumbrüchen in der Pipeline, mit ein wenig
-replace
am Ende, um die0
in19
Leerzeichen zu verwandeln . Die erste und letzte Zeile sind nur wörtlich. Mit nur 10 Feldern und wenigen Wiederholungen war nicht genug Platz, um Golf zu spielen. Diese Zeichenfolge verbleibt in der Pipeline, und die implizite AusgabeWrite-Output
erfolgt bei Programmabschluss.quelle
Javascript ES6 REPL ,
105102101 BytesHier passiert nicht viel Interessantes. Fügen Sie in die Konsole ein, um die gewünschten Ergebnisse anzuzeigen
3 Byte dank @Arnauld
gespeichert 1 Byte mehr dank @Neil gespeichert
Code-Snippet anzeigen
quelle
1
s durch Leerzeichen und verwenden Sie stattdessen diesen regulären Ausdruck:.replace(/.( ?)/g,`$& `+`$1`.repeat(17))
1
a=>a-1?a.repeat(18):a+' '
/// ,
10098 BytesProbieren Sie es online!
Aus irgendeinem mysteriösen Grund scheinen sich nach dem
G
s Leerzeichen zu befinden . Ohne sie wäre mein Code 96 Bytes gewesen.Vielen Dank an 42545 (ETHproductions) und 56258 (daHugLenny) für die Reduzierung von jeweils 1 Byte!
quelle
G
s in der ersten und letzten Zeile ?Turtlèd , 72 Bytes
Probieren Sie es online aus
>
dreht Schildkröte,"foo"
schreibt Zeichenketten auf Raster. zuletzt"
war elidablequelle
V ,
75, 62, 59 BytesProbieren Sie es online!
Da dieser Codel Nicht-ASCII-Zeichen enthält, ist hier ein Hexdump:
Erläuterung. Zuerst geben wir den folgenden Text ein:
Dann kehren wir
<esc>
zum normalen Modus zurück. Zu diesem Zeitpunkt befindet sich der Cursor in der dritten Zeile der letzten ZeileG
. Praktischerweise gibt es einen Befehl, um uns in die erste Spalte der Zeile direkt über dem Cursor zu setzen. Dieser Befehl ist-
. Sobald wir in der zweiten Zeile (auf derN
) landen , führen wir die folgende Schleife aus:Erläuterung:
Der Puffer sieht nun so aus:
Jetzt verwenden wir einen komprimierten regulären Ausdruck, um jedes Zeichen durch dieses Zeichen und ein Leerzeichen zu ersetzen. Das ist der
Í./&
Teil. Dies übersetzt in den folgenden regulären Ausdruck:Was bedeutet:
quelle
R
149146 BytesNicht so beeindruckend, aber auch nicht sicher, wie das golfen würde.
paste
Irgendwie auszunutzen ist meine erste Vermutung. Vergleiche mit Rohtext von 241 Bytes.R-Geige
quelle
Python 2, 108 Bytes
Etwas anders als die andere Python-Antwort, ohne Ersetzungen, nur String-Joins.
quelle
Perl, 90 Bytes
Ziemlich langweiliger Ansatz, ich kann mir keinen besseren Weg zum Reduzieren vorstellen ... Erfordert
-E
keine zusätzlichen Kosten. Gibt am Ende jeder Zeile ein zusätzliches Leerzeichen aus. -2 Bytes dank @Dada !Verwendungszweck
quelle
perl -E 'say"FKCIIBAVWMG\nNZP\nTZN\nCZC\nSZP\nPZS\nVZC\nSZP\nEZL\nSZB\nJCVCORIBCMG"=~s/Z/$"x9/ger=~s/./$& /gr'
. (Ersetzen Sie\n
durch wörtliche Zeilenumbrüche, um zu 90 zu gelangen.)Jolf, 72 Bytes
Ersetzen Sie alles
♣
durch\x05
, oder probieren Sie es hier aus!Dies ergibt die gewünschte Zeichenfolge.
quelle
Java 7,
177165142131 Bytes-15 Bytes dank @BassdropCumberwubwubwub .
-11 Bytes dank @Numberknot .
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
String c(){String s=" ";return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace(""," ").replace("_",s);}
für 150 (beachte, dass stackexchange übermäßige Leerzeichen entfernt)s
Grund sollte es mehr Leerzeichen geben , die von stackexchange entfernt wurden. Hier ist die Idee , jetzt sogar bei 142 Bytess=" "
. In diesem Fall ist es in der Tat kürzer. Und.replace(""," ").replace("_",s);
kann.replace("_",s).replace(""," ");
stattdessen für zusätzliche -8 Bytes seinString c(){return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace("_"," ").replace(""," ");}
( 131 Bytes )Befunge, 120 Bytes
In der ersten Zeile wird die Zeichenfolge umgekehrt gedruckt (es sieht so aus, als wäre es nicht so, aber der Code wird in dieser Zeile rückwärts ausgegeben). In der zweiten Zeile werden die oberen und unteren Zeilen gedruckt. Die dritte Zeile und die linke Seite der vierten Zeile geben die mittleren Zeilen aus, und der kleine Block unten rechts macht eine interessante Sache: Er bewegt den Cursor zurück in die zweite Zeile, um die letzte Zeile auszudrucken, aber nachdem er fertig ist quitt.
Wie Sie in der ersten Zeile sehen können, werden die Zeichenfolgen durch Leerzeichen getrennt, um zwischen der ersten, mittleren und letzten Zeile zu unterscheiden. Die Leerzeichen können alles andere sein, und wenn ich die ASCII-Zeichen 0-9 verwendet hätte, hätte ich leicht 4 Bytes speichern können. Das $, das Sie sehen, ist nur ein Müll-Zeichen, das vorhanden sein muss und durch alles andere als ein Leerzeichen ersetzt werden kann.
quelle
J
7773 BytesBeachten Sie, dass 43 Bytes, also mehr als die Hälfte der Gesamtzahl, nur für die Zeichenfolge verwendet werden
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
.Erläuterung
Machen Sie zuerst eine Liste
Dann mach mal seinen Tisch
Dann auf Gleichheit mit Null prüfen
Machen Sie es flach, finden Sie die kumulativen Summen und multiplizieren Sie sie elementweise
Verbinden Sie dann mit Nullen, teilen Sie sie in Unterlisten der Länge 22 auf, lassen Sie den Kopf jeder Unterliste fallen und verwenden Sie die Werte als Indizes in der Zeichenfolge
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
quelle
(' ',@,.~]);._1';FKCIIBAVWMG;N_P;T_N;C_C;S_P;P_S;V_C;S_P;E_L;S_B;JCVCORIBCMG'rplc'_';9#' '
_11,@,.&' '\'FKCIIBAVWMGN_PT_NC_CS_PP_SV_CS_PE_LS_BJCVCORIBCMG'rplc'_';9#' '
Eigentlich 74 Bytes
Probieren Sie es online!
Dieses Programm basiert auf dem gleichen Grundprinzip wie die Antwort von xnor auf Python 2 .
Erläuterung (Zeilenumbrüche werden
\n
aus Gründen der Übersichtlichkeit durch ersetzt):quelle
C # 6,
192190 BytesOhne Leerzeichen; ohne nachlaufende newline.
Eine einfache Lösung. Beginnen Sie mit der Literalzeichenfolge.
Replace
!
um 9 Felder. DannSplit
in 11 Reihen durch~
und weiter zuchar
s (innerSelect
). Fügen Sie jedem Zeichen ein Leerzeichen hinzu und kehren Sie dannJoin
zu 11 Zeichenfolgen zurück. Endlich wieder einJoin
Newline-Charakter.quelle
Rubin, 92
Volles Programm, druckt auf Standardausgabe mit
$> <<
Es sind insgesamt 40 Buchstaben zu zeichnen. Die Buchstaben 10 bis 28 werden abwechselnd von einem Zeilenvorschub oder gefolgt
' '*19
. Die früheren und späteren Buchstaben werden durch einzelne Leerzeichen getrennt.quelle
Perl,
115112 BytesErzeugt die folgende Ausgabe:
Die erste und die letzte Ausgabezeile haben ein Leerzeichen am Ende. Der Code nutzt Regex-Ersetzungen und die Tatsache, dass Objekte, die nicht definiert sind, als Zeichenfolgen interpretiert werden (z. B. FKCIIBAVWMG wird als "FKCIIBAVWMG" behandelt. Die Anführungszeichen aus der letzten Zeile konnten aufgrund der vorhergehenden Zeile nicht entfernt werden Ich konnte nirgendwo anders fündig werden.
Edit 1: 3 Bytes gespart durch Ersetzen
" "
durch$"
, Entfernen der äußeren Klammern und Einfügen eines Leerzeichens nach dem Drucken, Entfernen der Klammern$"x19
und Hinzufügen eines Leerzeichens danach (das wird also.
nicht als Dezimalzahl interpretiert)quelle
s/(.)/\1 /
Kann durch ersetzt werdens/./$& /
. Lassen Sie das letzte Semikolon fallen. Verwenden Siesay
anstelle vonprint
(dafür müssen Sie entweder hinzufügen-M5.010
oder-E
anstelle von verwenden-e
, aber beide sind kostenlos (siehe hier )). Wörtliche Zeilenumbrüche statt\n
.Kohle , 66 Bytes
Probieren Sie es online!
Box(21, 11, 'F K C I I B A V W M GPNCPSCPLBG M C B I R O C V C JSESVPSCTN')
.Nicht konkurrierend, 36 Bytes
quelle
Python 2, 116 Bytes
Ziemlich einfach, aus welchem Grund auch immer, obwohl das Ersetzen von Saiten so ausführlich ist, war es das Beste, was ich mir einfallen lassen konnte. Möglicherweise
re
könnte die Verwendung kürzer sein.quelle
print'F K C I I B A V W M G\nN@P\nT@N\nC@C\nS@P\nP@S\nV@C\nS@P\nE@L\nS@B\nJ C V C O R I B C M G'.replace('@',' '*19)
ist auch 116 Bytes ohne Join, wenn Sie einfacher sein wollen. Alternativprint' '.join('FKCIIBAVWMG!N@P!T@N!C@C!S@P!P@S!V@C!S@P!E@L!S@B!JCVCORIBCMG').replace('! ','\n').replace('@',' '*17)
sind 115 Byte zulässig, wenn nachfolgende Leerzeichen zulässig sind. (Das zu ersetzende Argument ist '!' Anstelle von '!'.)Batch, 171 Bytes
quelle
GameMaker-Sprache, 148 Byte
Ich weiß, dass es ziemlich einfach ist, aber ich glaube nicht, dass dies in GML zu übertreffen ist ...
quelle
GDScript
Sprache derGodot
Spiel-Engine zu tun . Aber nicht sicher, ob es instring_repeat(" ",19)
ist die gleiche Länge wie" "
.Pip , 64 Bytes
63 Byte Code, +1 für
-S
Flag.Probieren Sie es online!
Erläuterung
Verwendete Operatoren:
.
(binäre) Verkettung (Funktioniert auf Listen).X
(binäre) String-Multiplikationen. (s
Ist eine Variable, für die vorinitialisiert wurde" "
.)^
(unary) teilt einen String in eine Liste von Zeichen..*
ist eine andere Möglichkeit, eine Zeichenfolge in Zeichen aufzuteilen. Es besteht aus unary.
, einem No-Op für Strings, gepaart mit dem*
Meta-Operator, der jedem Element in seinem (iterierbaren) Operanden einen unary-Operator zuordnet. Mit.*"..."
können Sie ein Byte vor(^"...")
den Klammern speichern, da diese.
Vorrang haben^
.PE
Stellt ein Element vor eine Liste.AE
Hängt ein Element an eine Liste an.Vor diesem Hintergrund ist hier der Code Schritt für Schritt:
Wenn dieses Ergebnis automatisch gedruckt wird, verbindet das
-S
Flag die Unterlisten in Leerzeichen und die Hauptliste in Zeilenumbrüchen und gibt die gewünschte Ausgabe aus.quelle
C,
171156 BytesGibt auch einen abschließenden Newline-Charakter aus ... Könnte wahrscheinlich ein bisschen mehr runtergolfen werden.
quelle
Perl 5,
9286 BytesVerwendet
sprintf
, Polsterung und den String-Repeat-Operatorx
.quelle
\n
mit wörtlichen Zeilenumbrüche, brauchen Sie keine Leerzeichen zwischen demx
Betreiber und der Zahl , die folgt, und schließlich ersetzensplit//,xxx
mitxxx=~/./g
.Haskell,
128125114 BytesProbieren Sie es hier aus
((:" ")=<<)
isconcatMap (\a -> [a,' '])
- pads durch Hinzufügen eines Leerzeichens hinter jedem Buchstaben in der Eingabequelle
Powershell, 95 Bytes
Inspiriert von der Antwort von @ AdmBorkBork .
Erläuterung
Der erste Ersetzungsoperator erstellt das Rechteck
11x11
.Der zweite Ersetzungsoperator fügt nach jedem Zeichen ein Leerzeichen ein. Das Ergebnis enthält nachgestellte Leerzeichen.
quelle