Ich möchte eine Decke, die so aussieht. Jeder Streifen geht über, unter, über, unter. Kannst du es drucken?
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
Leerzeichen am Ende jeder Zeile und Zeilenumbrüche sind zulässig.
Denken Sie daran, das ist Code-Golf , also gewinnt der Code mit den wenigsten Bytes.
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
quelle
Antworten:
Python 2, 84 Bytes
Dank Sp3000 für 6 Bytes von der Umwandlung der arithmetischen Operationen in bitweise.
quelle
i+~j>>2&1^i+j>>1&2^i&4
, vielleicht?Pyth, 36 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
Wir können das Symbol bestimmen, indem wir 3 Bedingungen überprüfen:
Wenn wir
[A,B,C]
als Binärzahl interpretieren , erhalten wir die folgende Zuordnung:Wir können auch
[A,B,C]
als Dezimalzahl interpretieren und eine modulare indizierte Suche in der Zeichenfolge durchführen. Das macht keinen Unterschied, weil10 mod 8 = 2
.Nun zum Code:
V24
iteriertN
(row-idx) über[0, 1, ..., 23]
.sm...48
d
Ordnet die Zahlen (column-idx)[0, 1, ..., 47]
den Zeichen zu und gibt die kombinierte Zeichenfolge aus.++BNd
erzeugt die Liste[N, N+d]
,+...t-Nd
hängt anN-d-1
. Wir haben also die Liste[N, N+d, N-d-1]
.m<3%k8
prüft für jede berechnete Zahlk
, ob3 < k % 8
, also ergibt dies die Liste mit den Bedingungen[A, B, C]
.i...T
Konvertiert dies in eine Dezimalzahl und führt dann@" \// \/\\"
die Suche in der Zeichenfolge durch.Mehr oder weniger derselbe Code in Python2: 98 Bytes :
quelle
Perl, 209 + 17 = 226 Bytes
Laufen Sie mit
-mList::Util=max -M5.010
(die zweite Flagge ist frei). Es gewinnt keine Bytezahl-Wettbewerbe, aber hier ist meine Lösung.Lesbar:
Erzeugt prozedural jedes Segment, wiederholt dann das Muster 6 Mal und gibt dann das Gesamtergebnis 3 Mal aus.
quelle
Python 3,
174172138 BytesFand das kleinste Muster, das ich in der Decke finden konnte (das "Unter" - und "Über" -Muster), steckte es in eine Liste und fügte etwas Listenverständnis und Zeichenkettenmanipulation hinzu, um alles zu entpacken. Ersetzte alle ausgeblendeten Backslashes durch "b" und ersetzte sie später wieder, um ein paar Bytes zu sparen.
Danke an Oliver für die 2 Bytes!
34 Bytes wurden durch Ändern des Musters entfernt - das gesamte Muster für die Decke befindet sich jetzt in einer einzigen Liste, sodass nur eine for-Schleife zum Auspacken des Musters erforderlich ist.
quelle
0*6
und entfernenu*6
print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
Python 2,
171170168 BytesNicht hübsch und nicht schlau. Setzt einfach Variablen für die am häufigsten verwendeten Zeichenfolgengruppen, kombiniert sie und gibt das Ergebnis dreimal aus. Versuchen Sie es später noch einmal, wenn ich keinen besseren Ansatz finde.
1 Byte, das durch Verwendung der unformatierten Eingabe für die Zuweisung gespeichert wurde. Vielen Dank @ nedla2004
-2 durch Zuweisung einiger Variablen, aber immer noch kein ernsthafter Konkurrent
quelle
*6
Tupelelement zu umgehen. Irgendwelche Ideen?exec r"print'\n'.join(d);"*3
.SOML , 106 Bytes
eine nicht konkurrierende Version mit einer Funktion, die ich erst kürzlich hinzugefügt habe: (
836766 Bytes)Erläuterung:
quelle
Ruby, 75 Bytes
Besser Golf spielen, wenn ein einzelner 8-Byte-String-Lookup verwendet wird, der von j & 4 zusätzlich zu den anderen Parametern indiziert wird, als ein modifizierbarer 4-Byte-String.
Ruby, 81 Bytes
Druckt die diagonalen Streifen zeichenweise. Das richtige Zeichen wird aus einer Folge von 4 Zeichen ausgewählt, abhängig vom Vorhandensein / Fehlen jedes Strangs. Der Überlappungscharakter variiert je nachdem, welcher Strang oben liegt.
Kommentiert
quelle
Perl,
132131113 BytesUngolfed:
quelle
05AB1E , 37 Bytes
Verwendet die CP-1252- Codierung.
Probieren Sie es online!
Erläuterung
Verwendet den Mod-8-Trick, der in Jakubes Pyth-Antwort fachmännisch erklärt wurde .
quelle
Python,
245236234233230216212198195 BytesOK, länger als meine letzte (und jede andere) Antwort, wäre aber an Rückmeldungen zum Ansatz interessiert.
Bearbeiten
-9, weil @ nedla2004 mehr am Ball ist als ich
-2, indem Sie das Lambda außerhalb der Schleife nehmen und so 2 Einrückungsfelder verlieren
-1 durch Verwenden von
in' '*3
anstelle von,in 0,1,2
da ichh
sowieso nicht verwende . Es ist nur ein Zähler.-3 Warum, warum, warum habe ich zwischen dem zweiten für und dem Druck eine neue Zeile und zwei Einzüge gelassen ??? Es ist spät. Werde morgen wiederkommen.
-14 Kann tatsächlich das Lambda vollständig verlieren und den Basis-3-Decoder direkt nach der Druckanweisung einschließen. Sieht chaotisch aus, aber das ist doch Codegolf :)
-4 Es macht keinen Sinn, eine Variable für die Ganzzahlliste festzulegen. Verwenden Sie es einfach direkt in der zweiten for-Schleife.
-14 und kein Punkt mit der äußeren Schleife. Multipliziere einfach das ganzzahlige Tupel mit 3 (schamlos von @ nedla2004 gestohlen, um unter 200 zu kommen :))
-3 3 gespeichert, indem \ = 0, / = 1 und Leerzeichen = 2 gesetzt werden. Dadurch wird die Ganzzahlliste kürzer, da drei der Basis-3-Zahlen jetzt führende Nullen haben
Wie es funktioniert
Da nur 3 Zeichen verwendet werden:
1 ist eine Liste der 8 sich wiederholenden Muster als ganzzahlige Äquivalente ihrer Basis-3-Darstellung unter der Annahme, dass "" = 0, "\" = 1 und "/" = 2
Das LambdaDer erste Code nach der print-Anweisung ist ein einfacher Konverter von einer Ganzzahl in eine Zeichenfolge zur Basis 3Die erste Schleife wird dreimal wiederholt, und die zweite Schleife gibt jede Zeile mit den Basiszeichen 3 multipliziert mit 6 aus und wird durch /, \ oder Leerzeichen ersetzt.
Ich bin sicher, ich könnte einen regulären Ausdruck anstelle des verschachtelten Ersatzes () verwenden, aber ich bin zu müde, um es jetzt zu versuchen. Dies war nur ein Experiment und länger als meine vorherigen Python-Versuche, aber ich habe nur Kommentare zu diesem Ansatz veröffentlicht (und auch, weil ich noch nie in Base 3 gearbeitet habe und den Konverter sehr genossen habe).
quelle
Ruby, 135 Bytes
puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3
Das Zahlenarray entspricht jeder Komponente jeder Zeile, wird in Basis 3 übersetzt:
= 0,
\
= 1,/
= 2 und dann in Dezimalzahl konvertiert. Die Aufrufe von gsub () sind jedoch zu groß.Und gerade jetzt habe ich die Antwort von @ ElPedro gesehen. :-( Nur Zufall.
quelle
e.to_s(3).rjust(8,"0")
→("%8s"%e.to_s(3))
;gsub("0"," ").gsub("1","\\")..gsub("2","/")
→tr("013"," \\/")
;"\n"
→$/
;.join
→*""
. Sie können auch ein Byte speichern , indem alle Zahlen in der Anordnung von 4 und ersetzt Dividierene
mit(e*4)
.tr("021"," /\\")
.PHP
157126 BytesDie Änderungen in @ Titus-Listen in den Kommentaren übernehmen ... Ich bin verärgert, dass ich Punkt 1 verpasst habe, den ich hätte fangen sollen, aber ich wusste nicht, dass strtr () existiert, wo die meisten Einsparungen anfallen - gute Arbeit, Titus!
NEU:
ALT:
Da alle Backslashes maskiert werden müssen, wird viel Platz gespart, um sie als andere Zeichen zu packen und für die Ausgabe zu ersetzen. Wenn ich dann str_replace () aufrufe, ist es sinnvoll, sie so oft wie möglich zu verwenden.
quelle
-r
. Verwenden Sie diese fünf Schritte, um weitere 30 Byte zu sparen: ideone.com/wt4HGB 1) Verwenden Sie$a[...]
direkt alsstr_replace
Parameter, anstatt ihn zuzuweisen . 2)strtr
stattstr_replace
. 3) Verwenden Sie Ziffern anstelle von Buchstaben. 4) Nehmen Sie die Zuordnung in das Echo auf. 5) Nicht zuweisen$a
, nur benutzen.Python 2,
169161165160155154152Basierend auf der Antwort von @ ElPedro mit kleinen Verbesserungen. Die Erklärung finden Sie in der Antwort . Dies ist Python 2, obwohl es in der Nähe von anscheinend Klammern gibt
print
.8 Bytes mit einer Variablen für gespeichertDas funktioniert nur für Strings und die Verwendung einer Funktion dafür wäre länger.replace
.4 Bytes gespart, als @ElPedro merkte, dass sie l nicht brauchten, und ich auch nicht.
5 Bytes gespart, indem das Symbol nicht umgedreht
range(8)
wird und anstatt+=
an r anzuhängen, r am Ende der neuen Ziffer hinzugefügt wird. Versuchen Sie es mit repl.it5 Bytes durch Stehlen der neuen Werteliste von @ ElPedro gespart.
1 Byte durch Entfernen des Leerzeichens zwischen
in
und gespart(
.2 Bytes gespart durch Entfernen der Variablen a.
quelle
in
und(
im ersten füra=3**i
. Verwenden Sie einfachfor i in range(8):r=
x / 3 ** i% 3+r
, um ein Paar zu retten. Operator Vorrang kümmert sich um den Rest :)PHP, 184 Bytes
Ausgabe:
quelle
Batch, 152 Bytes
Die String-Verarbeitung in Batch ist zum Kotzen, daher ist dies wahrscheinlich der beste Ansatz. Call-and-Fall-Through ist etwas kürzer als eine verschachtelte
for
Schleife. Zumindest muss ich meine Backslashes nicht zitieren!quelle
APL, 110 Bytes
Ich bin neu in APL, das ist also eine vereinfachte Lösung.
Hier ist mein Ansatz: Beachten Sie, dass sich das Muster nach den ersten 8 Zeilen der Decke wiederholt. Daher muss ich nur die ersten 8 Zeilen definieren und kann sie dann 3 Mal wiederholen. Beachten Sie auch, dass sich jede Zeile nach den ersten 8 Zeichen wiederholt. Um eine einzelne Zeile zu definieren, muss ich daher nur die ersten 8 Zeichen definieren und diese dann 8 Mal wiederholen.
Hier ist eine ungolfed Lösung:
Ich habe oben bemerkt, dass D die Umkehrung von B ist, E die Umkehrung von A ist und H die Umkehrung von F. In meinem tatsächlichen Code nutze ich dies, indem ich D, F oder H nicht definiere und die Umkehrungsfunktion verwende
⊖
:24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F
quelle
Ruby, 132 Bytes
sehr einfache Antwort.
quelle
Haskell, 96 Bytes
quelle