(Zufällig inspiriert von https://codegolf.meta.stackexchange.com/a/17272/42963 )
Bei einer rechteckigen Ziffernmatrix (dh 0 - 9
) werden die "Teile" der Matrix so ausgegeben, als ob die Ziffern in aufsteigender Reihenfolge durch die Ziffern zu einem einzigen Stück zusammengefügt wären. Die Teile werden garantiert nur orthongonal verbunden - kein Teil wird diagonal verbunden. Es gibt immer nur maximal 10 Teile (dh ein Teil 3
erscheint nicht zweimal in derselben Matrix).
Zum Beispiel angesichts der Matrix
0 1 1 1
0 0 1 2
3 3 2 2
Das Folgende sind die Stücke und eine Beispielausgabe:
0
0 0
1 1 1
1
2
2 2
3 3
Der Abstand ist wichtig, um die Form der Teile beizubehalten, aber die Teile benötigen nicht unbedingt einen Innenabstand. Die Teile selbst sollten auf einheitliche Weise voneinander unterschieden werden (z. B. eine neue Linie zwischen den Teilen, um sicherzustellen, dass jedes einen anderen Charakter hat usw.). Darüber hinaus sind überflüssige Leerzeichen (z. B. nachfolgende Zeilenumbrüche oder führende Spalten) nicht zulässig. Zum Beispiel wäre auch Folgendes gültig:
0
00
111
1
2
22
33
oder
#
##
###
#
#
##
##
Folgendes wäre jedoch nicht der Fall (beachten Sie die nachgestellten Leerzeichen hinter dem 0
s):
0
0 0
Drehungen oder Reflexionen sind ebenfalls nicht zulässig. Zum Beispiel Ausgabe
1
111
für die obige Matrix ist auch ungültig.
Die Matrixstücke können Löcher haben oder nur ein einzelnes Element sein:
0 0 0 1
0 2 0 1
0 0 0 3
Oder das Stück kann die gesamte Matrix sein:
0 0 0
0 0 0
Hier ist ein größerer, komplizierterer Testfall:
1 1 1 1 1 2 2
3 4 4 4 2 2 2
5 5 4 4 2 0 0
5 6 6 6 6 7 7
5 6 8 8 6 6 7
9 6 6 6 7 7 7
Und eine Beispielausgabe:
00
11111
22
222
2
3
444
44
55
5
5
6666
6 66
666
77
7
777
88
9
Regeln und E / A.
- Die Ein- und Ausgabe kann mit jeder geeigneten Methode erfolgen .
- Sie können es in STDOUT drucken oder als Funktionsergebnis zurückgeben.
- Entweder ein vollständiges Programm oder eine Funktion sind akzeptabel.
- Führende Leerzeichen zum Beibehalten der Form (z. B. die "T" -Form des
1
Beispiels) sind erforderlich, konsistente Leerzeichen, um die Teile zu unterscheiden, und eine einzelne nachfolgende neue Zeile am Ende ist zulässig, aber keine anderen Leerzeichen sind zulässig. - Sie können sicher davon ausgehen , dass die Stücke sind nummeriert ,
0
umN
zusammenhängend, was bedeutet , dass (beispielsweise)3
nicht in einer sechsteiligen Matrix übersprungen werden. - Standardlücken sind verboten.
- Dies ist Code-Golf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Bytes) gewinnt.
-1
oder einem Leerzeichen, das ein leeres Leerzeichen darstellt, oder wenn möglich ohne Element)?0
als Füllwert verwendet wird? Also würde jedes Stück mit den restlichen Werten in der Matrix ausgegeben werden, die auf0
-1
oder einem anderen Wert anstelle von nichts / Leerzeichen wäre jedoch nicht in Ordnung.' '
in diesem Fall das Leerzeichen ( ) verwendet werden?Antworten:
05AB1E ,
2019 Bytes-1 Byte dank @ Mr.Xcoder .
Gibt 2D-Stücklisten (mit
1
und Leerzeichen" "
) pro Zeilenumbruch aus.Probieren Sie es online aus oder überprüfen Sie alle Testfälle oder drucken Sie alle Testfälle aus .
Erläuterung:
quelle
Haskell,
133132129 BytesNimmt die Matrix als Liste von Zeichenfolgen und gibt eine Liste von Zeichenfolgen zurück.
Probieren Sie es online aus!
quelle
Gelee , 18 Bytes
Probieren Sie es online aus!
Gibt eine Liste von Teilen zurück, wobei
1
ein Teil eines Teils dargestellt wird und' '
aufgefüllt wird. Nachgestellte' '
s werden entfernt.quelle
ẎQ=€
sollte tun, obwohl wir die Stücke in aufsteigender Reihenfolge benötigen, also9Ż=€
(es sei denn, wir dürfen in diesem Fall keine "nicht existierenden Stücke" einschließenẎQṢ=€
)9Ż=€
es nicht funktioniert (ich denke, "[...] fremde Leerzeichen sind nicht erlaubt" erstreckt sich auch auf Arrays, deshalb schneide ich zu).Python 3 ,
271209206183176172191 BytesProbieren Sie es online aus!
Edit: Einige Aufräumarbeiten und -5 dank @ Jonathan Frech .
Edit:
-3-26 noch einmal danke an @ Jonathan Frech .Edit: -7 nochmal danke an @ Jonathan Frech .
Bearbeiten: +19: Wie von @ nimi angegeben, hatte die zuvor ausgegebene Ausgabe ein falsches Format.
Eingabe ist Matrix als Liste von Listen:
Ausgabe ist Liste der Matrizen:
Ungolfed:
quelle
Python 2 ,
173172165 BytesProbieren Sie es online aus!
-15 Bytes aus einer Beobachtung von Nimi .
Nimmt in Programmform eine Liste von Listen mit einzelnen Zeichen als Eingabe; Ausgaben durch Drucken der gefundenen Teile anhand ihres Charakters.
quelle
C # (.NET Core) ,
258, 238 ByteOhne LINQ.
EDIT: Verkörperung der Ignoranz, die auf bessere Var-Deklarationen hinweist! Ty ty.
Probieren Sie es online aus!
quelle
Python 2 , 291 Bytes
Probieren Sie es online aus!
Erwartet einen durch Anführungszeichen getrennten Stich als Eingabe. Ein halb lächerlicher Prozentsatz des Codes ist für die Verarbeitung von nicht durch Leerzeichen getrennten / nicht durch Leerzeichen aufgefüllten Eingaben bestimmt.
Nicht Golf Golf Erklärung:
quelle
Netzhaut , 75 Bytes
Probieren Sie es online aus! Erläuterung:
Fügen Sie dem Eingang eine Ziffer hinzu. Dies stellt den Schleifenzähler dar. Die neue Zeile vereinfacht das Entfernen von nachgestellten Leerzeichen.
Standardausgabe sperren und genau 10 Mal wiederholen.
Stellen Sie die Schleifenziffer vor.
Geben Sie das Ergebnis des restlichen Skripts aus, stellen Sie dann den Puffer wieder her.
Ersetzen Sie alle Ziffern, die nicht mit der Schleifenziffer übereinstimmen, durch Leerzeichen. (Da hierfür ein Lookahead verwendet wird und an dieser Stelle nichts zu sehen ist, wird auch die Schleifenziffer ersetzt.)
Entfernen Sie alle nachgestellten Leerzeichen.
Entfernen Sie alle Leerzeilen.
Wiederholen, solange keine Zeile mit einer Ziffer beginnt ...
... löschen Sie das erste Zeichen in jeder Zeile.
Wenn noch etwas übrig ist, fügen Sie eine neue Zeile hinzu, um jede Form von der nächsten zu trennen. (Dies geschieht, um verirrte Zeilenumbrüche für fehlende Ziffern zu vermeiden.)
quelle
Holzkohle , 43 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Lesen Sie die Eingabe in ein Array. (Dies könnte entfernt werden, wenn ich ein hässliches Eingabeformat verwende.)
Schleife über die 10 Ziffern.
Holen Sie sich die Zeilen, die diese Ziffern enthalten.
Überprüfen Sie, ob die Ziffer tatsächlich gefunden wurde (um zu verhindern, dass falsche Zeilenumbrüche ausgegeben werden).
Schalten Sie die automatische Polsterung aus.
Schleife über die gefundenen Zeilen.
Schleife über jede Spalte ...
... wenn das aktuelle Eingabezeichen der aktuellen Schleifenziffer entspricht, drucken Sie es aus, andernfalls bewegen Sie den Cursor nach rechts.
Gehen Sie zum Anfang der nächsten Zeile. Mit solchen Bewegungsbefehlen kann Charcoal den Ausgang auf beiden Seiten trimmen.
Entleere und lösche die Leinwand für die nächste Ziffer. Dadurch können die verschiedenen Ziffern unterschiedlich beschnitten werden.
Ich habe einen programmatischen Ansatz ausprobiert, aber dieser wog 47 Bytes, obwohl er bei
Equals
Vektorisierung für kurze Zeit auch 43 Bytes gewesen wäre:Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Schalten Sie die automatische Polsterung aus.
Lesen Sie die Eingabe in ein Array.
Schleife über die 10 Ziffern.
Vergleichen Sie jedes Zeichen mit der Eingabe und erstellen Sie ein boolesches Array. Filtern Sie dann die Zeilen ohne Übereinstimmungen heraus.
Durchlaufen Sie die verbleibenden Zeilen und schneiden Sie von der frühesten Übereinstimmung in einer Zeile zur neuesten Übereinstimmung in der aktuellen Zeile. Ordnen Sie dann das boolesche Array wieder Ziffern oder Leerzeichen zu, die dann implizit als Array von Zeichenfolgen gedruckt werden.
quelle
Wolfram Language 101 Bytes
Es muss einen viel effizienteren Weg geben, um dies zu erreichen.
quelle
Perl 5, 97 Bytes
TIO
Erläuterung
quelle
APL (Dyalog Unicode) , 38 Byte SBCS
Anonyme stillschweigende Präfixfunktion. Nimmt eine numerische Matrix als Argument und gibt eine Liste von Listenzeichenfolgen zurück. Jede Liste von Zeichenfolgen repräsentiert ein Stück mit durch Leerzeichen getrennten
1
s. Führende und interne (aber nicht nachfolgende) Räume sind Räume.Probieren Sie es online aus!
∪∘,
die einzigartigen Elemente der Ravel-Matrix (abgeflacht)⊂{
… Rufen Sie}¨
für jede dieser as⍵
die folgende Funktion mit der gesamten Matrix auf als⍺
:⍺=⍵
Geben Sie an, wo sich die Nummer des Stücks in der Matrix befindet⊢
ergeben, dass (trennt2
von⍺
){
…}⍣2
Wenden Sie die folgende Funktion zweimal an (⍵
ist die Boolesche Matrix):∨/
Maske für Zeilen mit mindestens einer1
(zeilenweise ODER-Reduktion)⍵⌿⍨
Verwenden Sie dies, um die Zeilen zu filtern⍉
transponieren (also machen wir das auch auf den Spalten, dann transponieren wir zurück)' '@~
durch Leerzeichen an Positionen ersetzen, an denen dies nicht der Fall ist (dh wo0
)⍕
Format als Zeichenmatrix↓
in Liste von Zeichenfolgen aufgeteilt' +$'⎕R''
PCRE ersetzt nachgestellte Leerzeichen (beliebig viele Leerzeichen, gefolgt von einem Zeilenende) durch nichtsquelle
Japt , 29 Bytes
Probieren Sie es online aus!
Aktualisiert, um der strengeren Ausgabeformatierung zu entsprechen.
Gibt als Stückliste aus, wobei jedes Stück durch eine Liste von Zeilen dargestellt wird, wobei 2 als Füllzeichen verwendet wird.
Erläuterung:
quelle
false
aus den inneren Listen zu entfernen . Hier ein Pastebin, damit ich besser erklären kann, was die Ausgabe sein soll. Sie können OP gerne um Klärung bitten, aber soweit ich aus der Herausforderung heraus verstehe, sollten alle nachgestellten Leerzeichen überhaupt nicht in der Ausgabe vorhanden sein.Python 3 , 133 Bytes
Probieren Sie es online aus!
Nimmt eine durch Zeilenumbrüche getrennte Zeichenfolge und gibt eine Liste mit durch Zeilenumbrüche getrennten Zeichenfolgen zurück. Wird verwendet
textwrap.dedent
, um führende Leerzeichen zu entfernen.quelle
Gelee , 19 Bytes
Probieren Sie es online aus!
Ein monadischer Link, der die Matrix als Eingabe verwendet und eine Liste mit einer unregelmäßigen Liste pro Stück zurückgibt. Die Fußzeile zeigt dies hübsch an, aber ich denke, dass eine Ausgabe ohne dies den Regeln der Frage entspricht.
quelle