Intro
Komplexer als ein Textquadrat, da dies Auffüllen erfordert und die Eingabe einen unbekannten Datentyp hat.
Jedes Jahr veranstaltet Dyalog Ltd. einen Studentenwettbewerb. Die Herausforderung besteht darin, guten APL-Code zu schreiben . Dies ist eine sprachunabhängige Code-Golf- Ausgabe des diesjährigen zehnten Problems.
Ich habe die ausdrückliche Erlaubnis, diese Herausforderung hier vom ursprünglichen Autor des Wettbewerbs zu posten. Sie können dies überprüfen, indem Sie dem angegebenen Link folgen und den Autor kontaktieren.
Problem
Schreiben Sie ein Programm / eine Funktion, die eine bestimmte Zeichenfolge oder numerische Liste in das kleinste Quadrat umformt, das alle Elemente der Eingabe enthält, und füllen Sie sie gegebenenfalls mit zusätzlichen Elementen auf. Das Pad-Element sollte das Standardfüllelement für den angegebenen Datentyp oder ein beliebiges Element Ihrer Wahl sein. Die Elemente des Quadrats sollten in einer solchen Reihenfolge sein, dass durch Abflachen die ursprüngliche Reihenfolge der Eingabedaten erhalten wird (ggf. mit nachfolgenden Auffüllelementen).
Testfälle
[1,2,3,4]
→
[[1,2],
[3,4]]
[1,2,3,4,5]
→
[[1,2,3],
[4,5,0],
[0,0,0]]
"Dyalog APL"
→
[["Dyal"], [["D","y","a","l"],
["og A"], or ["o","g"," ","A"],
["PL "], ["P","L"," "," "],
[" "]] [" "," "," "," "]]
[100]
→
[[100]]
[]
→
Ihre Sprache entspricht am ehesten einer leeren Matrix, z. B. []
oder[[]]
[1,2,3,4,'O']
oder wird sie garantiert nicht auftreten? 3. Ignoriert die erforderliche Reihenfolge nach dem Abflachen die Pad-Elemente (z. B. könnte eine Eingabe der[1,2,3,4,5]
Ausbeute[[0,0,0],[0,1,2],[3,4,5]]
oder sogar[[0,1,0],[2,0,3],[0,4,5]]
)?Antworten:
MATL ,
129 BytesDank Luis drei Bytes gespeichert.
he
stattUGwewe
, abert
am Anfang ein hinzufügen .Probieren Sie es online aus!
Dies gibt die Ergebnisse zurück, ist jedoch im Vergleich zum Ergebnis in OPs post (was in Ordnung ist) transponiert.
Erläuterung:
Dies funktioniert sowohl für numerische als auch für Zeichenfolgeneingaben auf dieselbe Weise, da MATL sie auf dieselbe Weise behandelt.
Angenommen, die Eingabe ist
'Dyalog APL'
Dies gibt nichts für leere Eingaben aus, was zufällig so ist, wie MATL leere Matrizen / Strings ausgibt.
quelle
tnX^Xkt3$e
macht den Job auchtnX^Xkthe
reshape
und bemerkte nicht das sehr Offensichtliche :$: Specified inputs
. Und ich wusste nicht, dass Sie die Dimensionen als Vektor übergeben können. Ich wusste , dass es einen Weg geben musste, ohne zwei Umformen durchlaufen zu müssen. Vielen Dank! :)JavaScript (ES7), 70 Byte
Gibt
[]
für ein leeres Array / eine leere Zeichenfolge zurück. Wirdundefined
als Füllwert verwendet. Für ES6 ersetzen(...)**.5
mitMath.sqrt(...)
(5 Byte).quelle
Brachylog , 10 Bytes
Probieren Sie es online aus!
Nimmt Zeichenfolgen als Zeichenlisten (der Fragesteller hat bestätigt, dass dies in Ordnung ist).
Dies ist bei längeren Eingaben sehr ineffizient, da alle möglichen Umformungen der Eingabe brutal erzwungen werden und zunehmend mehr Polsterung versucht wird, bis eine gefunden wird, die zufällig quadratisch ist.
Erläuterung
Die verwendeten Auffüllelemente sind Prologs "Beliebiger Wert" -Wert
_
, der normalerweise als_G
plus einige zufällige Ziffern bei der Ausgabe gerendert wird (damit die Prolog-Engine Beziehungen zwischen diesen Allzweckwerten ausdrücken kann).Übrigens gab es vor wenigen Tagen einen Bugfix für SWI-Prolog, der dieses Programm ermöglicht (obwohl es anscheinend immer noch auf älteren, fehlerhaften Versionen funktioniert). Die von implizierte Einschränkung "Es ist rechteckig"
\
wurde zuvor aufgehoben, aber rechtzeitig für die Herausforderung behoben.quelle
Python 2 , 105 Bytes
Probieren Sie es online aus!
quelle
PHP, 139 Bytes
Ausgabezeichenfolge als 2D-Zeichenarray
arbeitet mit
[]
als leeres ArrayProbieren Sie es online aus!
PHP, 143 Bytes
braucht
[[]]
als leeres ArrayAusgabezeichenfolge als 1D-Zeichenfolgenarray
Probieren Sie es online aus!
quelle
Gelee , 13 Bytes
Ein monadischer Link, der eine flache Liste erstellt und eine Liste von Listen zurückgibt.
Testsuite bei Try it online!
Wie?
Hängt so viele Nullen (das Auffüllelement) an, wie Elemente in der Eingabe vorhanden sind, und formt sie dann in ein Quadrat um, wobei alle Nullen, die den Anforderungen im Prozess entsprechen, entfernt werden.
quelle
R 91 Bytes
Standardmäßig füllt R Matrizen auf, indem es Elemente des Eingabevektors recycelt und Matrizen in Spaltenreihenfolge codiert. Gibt eine
0x0
Matrix für eine Eingabe vondouble(0)
(ein leeres Doppelarray) oder zurück''
.Die erste Zeile (die
if
Anweisung) teilt eine Zeichenfolge in einen Vektor ihrer konstituierenden Zeichen auf. Wenn ich stattdessen diesen Vektor aufnehmen kann, kann diese Zeile entfernt werden.Probieren Sie es online aus!
quelle
Bash ,
91776967 BytesProbieren Sie es online aus!
Formatiert Text, Pads mit Leerzeichen. Gibt bei leerer Eingabe nichts zu stdout aus.
Update : Ok , ein paar Tricks aus den Antworten hier .
quelle
Haskell, 87 Bytes
Probieren Sie es online aus!
Das Füllelement ist
error[]
der kürzeste Wert eines beliebigen Typs (undefined
etwas länger).Hinweise zum TIO-Link:
Sie können nicht drucken
error
, daher verkette ich Matrizen mit Füllelementen zurück zu einer Liste und drucke deren LängeTIO hat keine
Data.Lists
, nurData.List.Split
so zeigt es 5 weitere Bytes.So funktioniert es: Berechnen Sie die Länge
c
der c-mal-c-Matrix. Nehmen Sie die erstenc
Elemente der Liste der Längenabschnittec
der Eingabeliste, gefolgt von einer Liste der Füllelemente, die dieselbe Länge wie die Eingabeliste hat. Z.B :quelle
Dyalog APL,
20 bis19 Byte-1 Byte danke an @ Adám!
Probieren Sie es online aus!
quelle
{(,⍨⍴⍵↑⍨×⍨)⌈.5*⍨≢⍵}