J, 126 124 121 119 116 115 113 105 116 115 112 Zeichen
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Übernimmt Eingaben von der Tastatur. Beispiel:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
6302715408
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Der Haupttrick dabei ist der Missbrauch von Js Boxen durch Neudefinition der verwendeten Zeichen. Es verwendet einen globalen Parameter - 9!:7
- dies zu tun. Es mag Raum für weiteres Golfen geben, aber um ehrlich zu sein, war ich nur froh, dass etwas funktionierte, das meinen letzten Versuch mit dieser Frage kompensieren sollte .
Passt in einen Tweet mit genügend Zeichen, um "Gaz made this" zu sagen :-).
Bearbeiten: 3 Zeichen Einsparungen sind auf die Ausleihe 2 6$' || (__)'
von Jesse Millikans Antwort zurückzuführen.
Weitere Bearbeitung: Es sind 11 Zeichen verloren gegangen, die zusätzliche Leerzeichen an beiden Seiten hinzugefügt haben, von denen ich nicht bemerkt habe, dass sie nicht vorhanden sind.
Erläuterung:
Der Code besteht aus drei Hauptabschnitten:
1) Setup
[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Dies ist selbst in zwei Teile.
9!:7'\=/<=>/=\|='
Definiert die Zeichen, die J zum Anzeigen von Feldern verwendet, neu. Js Boxen sieht normalerweise so aus:
2 2$<"0[1 2 3 4
┌─┬─┐
│1│2│
├─┼─┤
│3│4│
└─┴─┘
aber nach der Neudefinition sieht es so aus:
2 2$<"0[1 2 3 4
\===/
|1|2|
<===>
|3|4|
/===\
(s=:[,.~,.)
definiert ein Verb, das ich später ein paar Mal verwenden werde. Dies erweist sich als der beste Ort, um es zu deklarieren. Es nimmt ein Zeichen auf der linken Seite und ein Array von Zeichen auf der rechten Seite und schiebt das Array zwischen die Zeichen. Beispielsweise:
3 5$'abcdefghijklmno'
abcde
fghij
klmno
'-' s 3 5$'abcdefghijklmno'
-abcde-
-fghij-
-klmno-
Das Finale [
dient nur dazu, das Setup vom nächsten Teil zu trennen.
2) Eingabe und Darstellung
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
".,.1!:1[1
Nimmt die Eingabe von der Tastatur und trennt sie in einzelne Ziffern:
".,.1!:1[1
314159
3 1 4 1 5 9
((i.5)</5|])
Erstellt eine Null- und eine Einsdarstellung des unteren Teils des Abakus:
((i.5)</5|]) 3 1 4 1 5 9
1 1 1 1 0 1
1 0 1 0 0 1
1 0 1 0 0 1
0 0 1 0 0 1
0 0 0 0 0 0
|:@(1,.<&5)
Erstellt eine Nullen- und Eine-Darstellung des oberen Teils des Abakus:
|:@(1,.<&5) 3 1 4 1 5 9
1 1 1 1 1 1
1 1 1 1 0 0
Diese beiden Teile sind wie folgt zusammengepackt ;
:
(|:@(1,.<&5);((i.5)</5|])) 3 1 4 1 5 9
\=======================/
|1 1 1 1 1 1|1 1 1 1 0 1|
|1 1 1 1 0 0|1 0 1 0 0 1|
| |1 0 1 0 0 1|
| |0 0 1 0 0 1|
| |0 0 0 0 0 0|
/=======================\
Dann werden die Kästen übereinander gelegt, um die Basis des Abakus zu bilden, was ergibt:
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
/===========\
3) Ausgabe
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>
&.>
bedeutet, dass das Folgende abwechselnd auf beide Boxen angewendet wird.
(,-.)
Dies ist ein Hook, der die Eingabe negiert und an das Ende des Originals anfügt:
2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
(,-.) 2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
0 1 0 1 0
0 1 0 1 0
Dies ist wirklich ein Teil der Darstellung, aber für Golfzwecke ist es besser, es in diesem Abschnitt zu haben. Auf die vorherige Eingabe angewendet:
(,-.)&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
|0 0 0 0 0 0|
|0 0 0 0 1 1|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
|0 0 0 0 1 0|
|0 1 0 1 1 0|
|0 1 0 1 1 0|
|1 1 0 1 1 0|
|1 1 1 1 1 1|
/===========\
[:,.(_6[\' || (__)'){~
Die Nullen und Einsen werden nun verwendet, um eine Zeichenfolge auszuwählen, die eine Perle darstellt, oder um die Abwesenheit einer solchen Zeichenfolge zu kennzeichnen:
([:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\====================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<====================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/====================================\
Aber jetzt, wie Howard mir sagte, ist auf beiden Seiten der Perlen ein Leerzeichen frei. Daher verwenden wir das vordefinierte s
Verb, um den Inhalt jeder Box zwischen zwei Spalten mit Leerzeichen einzuschließen:
(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\======================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<======================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/======================================\
Nachdem Sie das getan haben, müssen Sie es nur noch in eine Zeichenfolge konvertieren, ":
damit wir es zwischen zwei Spalten einbetten können |
:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|