Eine Leerenliste ist eine Liste, die auf keiner Ebene Nichtlistenobjekte enthält. Oder wenn Sie eine rekursive Definition bevorzugen
Die leere Liste ist ungültig
Eine Liste, die nur andere Leerlisten enthält, ist ungültig
Alle Leerlisten haben eine endliche Tiefe.
Hier einige Beispiele für Void-Listen (mit Python-Syntax):
[]
[[]]
[[],[]]
[[[]]]
[[[]],[]]
[[],[[]]]
Hier sind einige Beispiele für Dinge, die keine ungültigen Listen sind:
["a"]
[[...]]
[1]
2
[[],([],[])]
Aufgabe
Schreiben Sie zwei separate Funktionen (oder Programme, wenn Sie es vorziehen). Man sollte eine positive Ganzzahl als Argument nehmen (Sie können auch Null einschließen, wenn Sie dies wünschen) und eine leere Liste zurückgeben, der andere sollte eine leere Liste nehmen und eine ganze Zahl zurückgeben. Diese beiden Funktionen sollten immer gegensätzlich sein. Das heißt, wenn Sie die Ausgabe von f
an übergeben g
, sollten Sie die ursprüngliche Eingabe von f
als Ergebnis von erhalten g
. Dies bedeutet, dass das Mapping 1: 1 sein muss, dh für jede Ganzzahl darf nur genau eine Leerenliste existieren , für die g
diese Ganzzahl vorliegt , und für jede Leerenliste sollte genau eine Ganzzahl existieren, für die f
diese Leerenliste vorliegt.
Sie erstellen im Wesentlichen eine Bijektion
Sie können eine Zeichenfolgendarstellung einer leeren Liste (mit oder ohne Kommas und Leerzeichen) anstelle des systemeigenen Listentyps Ihrer Sprache verwenden.
Wertung
Ihre Kerbe ist die Länge Ihrer zwei Funktionen zusammen. Dies ist Codegolf, daher sollten Sie versuchen, diese Summe zu minimieren.
Antworten:
Pyth, 27 + 29 = 56 Bytes
f
:Testsuite
g
:Testsuite
Das System ist sehr einfach: Ich erstelle alle möglichen Listen mit nicht mehr als einer bestimmten Anzahl von
[
. Dann sortiere ich sie so, dass die Listen, die ich noch nicht erstellt habe, fast fertig sind. Dies alles erledigt die Funktiony
, die in beiden Programmen identisch ist. Es ist geschrieben alsDann indiziere ich in dieser Liste nach
f
und suche darin nachg
.Die Anzahl der von mir erstellten Listen ist so groß gewählt, dass ich alle möglichen Listen erstellt habe, die an oder vor dem gewünschten Ort in der unendlichen sortierten Liste erscheinen würden.
Die Programme erlauben / geben optional 0 zurück.
quelle
Python 2 , 96 Bytes
Probieren Sie es online! um die Bijektion zu testen.
Verschiebt leere Listen in nicht negative ganze Zahlen. 42 Bytes.
Nimmt nicht negative ganze Zahlen in leere Listen auf. 54 Bytes. Ein rekursiverer Versuch ergab die gleiche Länge.
quelle
Java 7, 725 Bytes
f(int)
( 325 Byte ):g(String)
( 75 + 325 Byte ):Da die Methode
g
die Methode verwendetf
, um das Ergebnis zu berechnen, indem sie eine mögliche Leerenliste durchläuft, bis diejenige gefunden wird, die der eingegebenen entspricht, den Bytes vonf
zweimal gezählt (da beide Methoden für diese Herausforderung ohne die andere ausgeführt werden sollten).Erläuterung:
Im Allgemeinen
f
durchläuft die Methode einfach alle binären String-Darstellungen von Ganzzahlen und erhöht einen Zähler jedes Mal, wenn ein gültiger gefunden wird. Gültige Binär-Strings für diese Challenge entsprechen den folgenden Regeln: Sie beginnen mit einem1
und enden mit einem0
; Sie haben die gleiche Anzahl von Einsen und Nullen. und jedes Mal , entfernen Sie das erste1
und0
und validieren , was wieder verlassen, werden diese beiden Regeln gelten weiterhin . Nachdem der Zähler der Eingabe entspricht, konvertiert er diesen Binär-String in eine String-Leerenliste, indem er all1
mit[
und all0
mit ersetzt]
.Was die Methode betrifft
g
: Wir beginnen mit"[]"
(Darstellung der Leerenliste0
) und verwenden die Methode dann weiter,f
während eine Ganzzahl erhöht wird, bis sie mit der Eingabezeichenfolge übereinstimmt.Beispiel für Eingabe- und Ausgabefälle:
Probieren Sie es hier aus. (HINWEIS: In den letzten paar Testfällen ist es ziemlich langsam. Für alle dauert es ungefähr 10-15 Sekunden.)
quelle
[][]
das eine Liste ist. Vielleicht missverstehe ich die Art und Weise, wie Java das macht, was auch immer. Das Hinzufügen[...]
von allen und das Vorhandensein von 0 Maps[]
sollte ausreichen.K (ngn / k) , 49 Bytes
Probieren Sie es online!
Verwendet die Formel aus dem Beispiel in Bijection: Baumähnliche Listen - natürliche Zahlen
quelle
JavaScript (Node.js) , 82 Byte
Probieren Sie es online!
Xnors Idee
quelle
Python 3 - Vorzeichen / Abs, 73 Bytes
Probieren Sie es online!
Einfache Implementierung, unterstützt negative Zahlen.
Ganzzahl
i
wird codiert[sign(i), abs(i)]
, wobeisign(i)=[] if i > 0 else [[]]
undabs(i)=[[]] * i
, dh eine Liste leerer Listen mit der Länge abs (i).Python 3 - binär, 126 Bytes
Dies ist eine aufwändigere Version (und viel länger ...), bei der der absolute Wert in einer binären Listendarstellung codiert ist.
Probieren Sie es online!
quelle
Stax , 33 Gesamtbytes
Diese Programme sind gegensätzlich. Sie konvertieren in und aus allen Leerenlisten und allen nicht-negativen Ganzzahlen, also einschließlich 0. Dies scheint eine berühmte Funktion aus einer Art Algebra zu sein, die ich nicht kenne. Um mich darum zu kümmern, habe ich die Programme zunächst als Funktionen in Python implementiert.
Die stax-Programme haben das gleiche Verhalten.
Nicht negative Ganzzahl → Leere Liste, 15 Bytes
Führen Sie es aus und debuggen Sie es
Ungültigkeitsliste → Nicht negative Ganzzahl, 18 Bytes
Führen Sie es aus und debuggen Sie es
quelle