Abzocke einer Abzocke einer Abzocke einer Abzocke . Geht und stimmt denen zu!
Wenn Sie es akzeptieren möchten, müssen Sie ein Programm / eine Funktion schreiben, das / die die Eingabe / das Argument¹ ausgibt / zurückgibt. Der schwierige Teil ist, dass, wenn ich Ihren Quellcode ² transponiere, die Ausgabe / das Ergebnis ebenfalls transponiert werden muss.
Sie können auswählen, welche Art von 2D-Daten Ihre Lösung akzeptieren kann. Zum Beispiel eine Liste von Listen, eine Matrix, eine Liste von Zeichenfolgen usw. Geben Sie an, welche (s) es behandelt. Sie können davon ausgehen, dass die Eingabe immer rechteckig ist und in jeder Dimension eine Länge von 1 oder mehr aufweist.
Beim Transponieren werden kurze Zeilen in Ihrem Quellcode als mit Leerzeichen aufgefüllt betrachtet, bis sie rechteckig sind. Diese aufgefüllten Leerzeichen tragen jedoch nicht zu Ihrer Codelänge bei.
Da es sich um Code-Golf handelt , besteht das Ziel darin, die Byte-Anzahl des ursprünglichen Quellcodes (nicht der transponierten Version) zu optimieren.
Beispiele
Angenommen, Ihre Lösung verwendet eine numerische Matrix und Ihr Quellcode lautet
AB
DEF
und seine Eingabe / Argument ist [[1,2],[3,4],[5,6]]
. Wenn ich schreibe
AD
BE
F
Stattdessen muss die Ausgabe / das Ergebnis lauten und ausgeführt werden [[1,3,5],[2,4,6]]
.
Angenommen, Ihre Lösung besteht aus einer durch Zeilenvorschub getrennten Zeichenfolge, und Ihr Quellcode lautet
ABC
und seine Eingabe / Argument ist "96\n"
. Wenn ich schreibe
A
B
C
Stattdessen muss die Ausgabe / das Ergebnis lauten und ausgeführt werden "9\n6\n"
.
Antworten:
Python 3 + Anzahl, 45 Bytes
Probieren Sie es online!
Vielen Dank an @EriktheOutgolfer, der auf einen Fehler der Vorgängerversion hinweist
Transponiert:
Probieren Sie es online!
Die Funktionen nehmen eine Zahlenmatrix als Eingabe und geben eine Zahlenmatrix aus. Die Lösung basiert nicht wie viele andere Lösungen auf Kommentaren, sondern nutzt mehrzeilige Zeichenfolgen.
quelle
\
wirft die eineSyntaxError
. Sie müssen die Anführungszeichen in beide Richtungen verschieben, um dies zu beheben.Gelee , 2 Bytes
Eingabe ist eine Liste von Listen. Vielen Dank an Luis Mendo und Nick Kennedy für die Verbesserung der Antwort.
Probieren Sie es online! Probieren Sie es transponiert!
Das Programm transponiert die Eingabe zweimal und gibt die ursprüngliche Eingabe zurück. Die transponierte Version ignoriert die erste Zeile und transponiert nur einmal.
quelle
R ,
54 BytesProbieren Sie es online!
Eine R-Funktion, entweder die Identitätsfunktion
I
oder die transponierte Funktion,t
wenn transponiert. Die Fußzeile auf TIO zeigt die Ausgabe von beiden.Vielen Dank an @RobinRyder für das Speichern eines Bytes!
quelle
#
.C (gcc) ,
209205203201 BytesNormal
Probieren Sie es online!
Transponiert
Probieren Sie es online!
quelle
Haskell , 51 Bytes
Diese Version ist gültig, wird aber bei
[]
Eingabe nicht angehalten .Probieren Sie es online!
Transponiert, 75 Bytes
Probieren Sie es online!
Haskell , 51 Bytes
Diese Version ist gültig, stürzt aber mit
[]
als Eingabe für die transponierte Version ab.Probieren Sie es online! Transponiert
Haskell ,
756757 BytesMindestens 7 Bytes gespart dank Ørjan Johansen
Diese Version wird
[]
ausgegeben, wenn sie[]
als Eingabe angegeben wird.Probieren Sie es online!
Transponiert
quelle
Python 3 , 51 Bytes
Probieren Sie es online!
Basierend auf Joels Ansatz . Die Eingabe ist a
tuple
vontuple
s, und die Ausgabe ist azip
(tuple
zur besseren Sichtbarkeit in eine über TIO konvertiert ).Transponiert:
Probieren Sie es online!
quelle
Perl 6 ,
2011 BytesProbieren Sie es online!
Transponiert
Probieren Sie es online!
Beide Funktionen arbeiten mit Listenlisten.
*[ ]
ist ein WhateverCode, der das Zen-Segment seines Arguments zurückgibt, also die Identitätsfunktion.&[Z]
ist der Zip-Operator.quelle
Haskell,
185161 BytesProbieren Sie es online!
Transponiert:
Probieren Sie es online!
Keine Kommentare, keine String-Literale, nur einige zusätzliche Funktionsdefinitionen.
Edit: -24 Bytes dank @ Ørjan Johansen.
quelle
PHP (7.4),
1148670 BytesMeine allererste Erfahrung mit so etwas in PHP, es muss einen besseren Weg geben, den ich nicht sehen kann! Input ist ein Array von Arrays wie
[[1,2],[3,4],[5,6]]
.Normal:
Probieren Sie es online!
Transponiert (mit Leerzeichen):
Probieren Sie es online!
quelle
Holzkohle , 19 Bytes
Probieren Sie es online! Nimmt Eingaben als ein Array von Zeichenfolgen. Erläuterung:
A
Gibt implizit die explizite Eingabe aus, während¿⁰
es sich bei0
der Bedingung um eine Bedingung handelt , die daher immer falsch ist.«
Dann beginnt ein Block mit bedeutungslosem Charcoal-Code, der niemals ausgeführt wird. (Es könnte möglich sein, einige dieser Bytes zu entfernen, aber in diesem Fall bin ich mir nicht sicher, ob Charcoal das Programm korrekt analysieren würde.) Transponiert, 17 Bytes:Probieren Sie es online! Erläuterung: Ähnlich wie im vorherigen Programm, mit Ausnahme des Hinzufügens des Transponierungsbefehls
‖↗
.Ich habe eine alternative Lösung, bei der sowohl das ursprüngliche als auch das transponierte Programm 18 Bytes umfasst:
Probieren Sie es online! Erklärung:
A
wie oben;⊞υ
verschiebt einen Wert in die vordefinierte leere Liste (was sich nicht auf die Ausgabe auswirkt);”y
Beginnt eine beliebige Zeichenfolge (endet am Ende des Programms oder des Abgleichs”
). Transponiert:Probieren Sie es online! Erklärung:
A‖↗
wie oben;⊞υ
wie oben; Der kleine Unterschied besteht darin, dass ich Verkettungen kleinerer Zeichenfolgen drücke, da ich das nicht wiederholen möchte”
.quelle
Brain-Flak (BrainHack) ,
382375337 BytesKeine Kommentare!
Probieren Sie es online!
Für die Eingabe sind die ersten beiden Zahlen die Dimensionen der Matrix und der Rest ist der Inhalt der Matrix. Die Ausgabe erfolgt im gleichen Format.
Transponiert
Brain-Flak (BrainHack) , 465 Bytes
Probieren Sie es online!
quelle
Japt , 2 Bytes
Versuchen Sie es | Transponiert
quelle
JavaScript (Node.js) , 62 Byte
Probieren Sie es online!
Verbessert mit einem anderen Layout
quelle
Haskell ,
153144 Bytes(Danke, Sriotchilism O'Zaic )
Probieren Sie es online!
Probieren Sie es transponiert!
quelle
foldr
Rekursion für beide Versionen), das gefällt mir nicht.APL (Dyalog Unicode) , 7 Bytes
Probieren Sie es online!
Transponiert:
Wahrscheinlich eine ziemlich langweilige Antwort, aber hier geht es trotzdem.
Die Inline-Funktionsdefinition
{...}
kann mehrere Zeilen umfassen. In diesem Fall wird jede Zeile nacheinander ausgeführt, aber jede Zeile ohne Zuweisung gibt←
sofort ihren berechneten Wert zurück. Die erste Funktion kehrt also zurück,⍵
während die zweite zurückkehrt⍉⍵
.Eine noch langweiligere Antwort wäre der Missbrauch von Kommentaren:
APL (Dyalog Unicode) , 4 Bytes
Es ist wohl kein TIO nötig ...
quelle
05AB1E , 3 Bytes
Probieren Sie es online aus.
Versuchen Sie es transponiert.
Erläuterung:
Im Gegensatz zu einigen anderen Sprachen werden Zeilenumbrüche in 05AB1E einfach ignoriert, daher halte ich ein 2-Byte-Format nicht für möglich (obwohl ich mich gerne als falsch erweisen würde).
quelle
Ruby , 35 Bytes
Probieren Sie es online!
Hüfte, zum quadratisch zu sein! (Fast)
Akzeptiert Ruby-Matrizen als Eingabe (Arrays von Arrays)
quelle
Sauber , 64 Bytes
Probieren Sie es online!
Probieren Sie es transponiert!
quelle
Python 3 ,
11895 BytesEingabe und Ergebnis sind Tupellisten.
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 13 Byte
Probieren Sie es online! / Transponiert
quelle
Cjam , 13 Bytes
Probieren Sie es online!
Transponierte Fassung:
Probieren Sie es online!
Eingabeformat
Das Eingabeformat ist das Standard-CJam-Array-Format:
[[1 2] [3 4]]
Keine Absturzversion, 12 Bytes
Die normale Version stürzt nach dem Drucken des Arrays ab. Eine Version, die nicht abstürzt, wäre:
Probieren Sie es online!
oder transponiert:
Probieren Sie es online!
Es gibt wahrscheinlich ein paar zusätzliche Bytes, die gespeichert werden können. Ich habe versehentlich zuerst an der transponierten Version gearbeitet, was zu ein paar zusätzlichen Zeilenumbrüchen führte und es ist lange her, seit ich CJam das letzte Mal verwendet habe. Verbesserungen sind willkommen.
quelle
Zsh , 75 Bytes
TIO: Normal transponiert
Der Papierkorb unter dem Hauptdruck ist harmlos. Er gibt einen Fehler aus, wenn nach dem Drucken eine neue Zeile angezeigt wird,
fa<
und wird beendet. 86 Bytes, um diesen Fehler zu beheben.Die transponierte Fassung ist hier. Nach dem Drucken wird es am
<
Zeilenende fehlerhaft angezeigt und beendet.quelle
Runenverzauberungen , 88 Bytes
Probieren Sie es online!
Probieren Sie es transponiert!
Die Eingabe ist für jeden Wert durch Leerzeichen und für jede Zeile durch Kommas getrennt (Zeilenumbrüche sind optional) und unterstützt sowohl Zeichenfolgen als auch Zahlen (ungleich Null). Dies erleichtert das Parsen der Eingabe, da die Eingabe automatisch durch Leerzeichen und Zeilenumbrüche unterbrochen wird. So zum Beispiel die Eingabe:
Würde in geschachtelter Arrayform dargestellt als
[[1,2,3],[4,5,6],[7,8,9]]
. Minimale Unterstützung für gezackte Arrays (nur das letzte Array kann kurz sein). Da die Eingaben jedoch rechteckig sein sollen, wird diese Anforderung erfüllt.Die Ausgabe wird im gleichen Format dargestellt (Ausgabe in transponierter Version mit Zeilenumbrüchen, jedoch mit unterschiedlichen Nullbytes, um stattdessen ein Leerzeichen zu verwenden). Normale Version hat ein Leerzeichen am Ende, transponierte Version hat ein Komma am Ende und eine neue Zeile (aufgrund der Schwierigkeit festzustellen, wann keine Daten mehr zu drucken sind).
In der normalen Version gibt es an seltsamen Stellen (z. B.
7̸0
) Modifikatorzeichen. Dies liegt jedoch daran, dass diese beim Transponieren der Quelle an der richtigen Stelle benötigt werden und bei der normalen Ausführung nur die linke Spalte der Anweisungen verwendet wird.Erläuterung
Die Erläuterung der transponierten Quelle erfolgt in nicht transponierter Form. Pfeile repräsentieren die IP-Richtung am Ein- und Ausgang verschiedener Blöcke.
Die Eingabe wird gelesen, und wenn ein
,
Zeichen gefunden wird, wird ein neuer Teilstapel verschoben. Dadurch kann jeder Stapel jede Zeile separat im Speicher halten. Öffnet den nächsten Abschnitt von oben.[0
(nach links ausgeführt) Richtet einen leeren Stapel als Grenze zwischen der ersten und der letzten Reihe ein und dreht sich dann zum ersten Stapel ({̹
) und startet das Drucken von Elementen und das Drehen von Stapeln. Dasi!
wird nicht ausgeführt und{̹L [0r
wird nur einmal ausgeführt. Wenn ein Stapel mit der Größe Null gefunden wird, wird die Schleife beendet.Wenn der leere Stapel gefunden wird, werden ein
,
und eine neue Zeile gedruckt, und die Werteschleife wird erneut eingegeben. Ausführungsreihenfolge (zur besseren Lesbarkeit gespiegelt) , wo.
ein nicht ausgeführten Befehl:\',$!.6ak$?....../
. Ändernak
zu'<space>
würde drucken Leerzeichen statt Zeilenumbrüchen.Die Ausführung wird angehalten, wenn das Programm versucht, von einem leeren Stapel zu schreiben. Aus diesem Grund funktioniert nur die Zackigkeit
,
in der letzten Zeile richtig und die Ausgabe weist einen Fehler auf : Das Komma wurde bereits gedruckt, bevor das Programm weiß, dass keine Daten mehr vorhanden sind.quelle