Für diese Herausforderung gilt eine Liste nur dann als gültig, wenn sie vollständig aus Ganzzahlen und gültigen Listen besteht (rekursive Definitionen \ o /). Geben Sie für diese Abfrage bei einer gültigen Liste und einer Ganzzahl eine Liste aller Tiefen zurück, in denen die Ganzzahl gefunden werden kann.
Beispiel
Betrachten wir Liste [1, [2, [3, [1, 2, 3], 4], 1], 1]
und Ganzzahl 1
. Dann können wir die Liste so zeichnen:
Depth 0 1 2 3
Num 1
2
3
1
2
3
4
1
1
Sie werden bemerken, dass 1
sich das in den Tiefen zeigt 0, 1, 3
. Daher sollte Ihre Ausgabe 0, 1, 3
in einem vernünftigen Format vorliegen (Reihenfolge spielt keine Rolle).
Die Tiefe kann entweder 0- oder 1-indiziert sein, aber bitte geben Sie in Ihrer Einreichung an, um welche es sich handelt.
Testfälle (0-indiziert)
Für die Liste [1,[2,[3,4],5,[6,7],1],[[[[5,2],4,[5,2]]],6],3]
:
1 -> [0, 1]
2 -> [1, 4]
3 -> [0, 2]
4 -> [2, 3]
5 -> [1, 4]
6 -> [1, 2]
7 -> [2]
Für die Liste [[[[[1],0],1],0],1]
:
0 -> 1, 3
1 -> 0, 2, 4
Für die Liste [11,22,[33,44]]
:
11 -> [0]
22 -> [0]
33 -> [1]
44 -> [1]
Gibt eine leere Liste zurück, wenn der Suchbegriff nirgendwo in der Liste vorhanden ist.
Negative und Nullwerte sind in der Eingabeliste und im Term gültig.
quelle
Antworten:
Mathematica, 25 Bytes
(gibt 1-indizierte Ausgabe zurück)
Erläuterung
quelle
Haskell ,
102938076 BytesVielen Dank an Bruce Forte für das Speichern einiger Bytes und an Laikoni für das Speichern weiterer Bytes .
Danke 4castle für das Speichern von 4 Bytes.
Haskell hat keinen Datentyp für diese Art von Liste, daher habe ich meinen eigenen erstellt.
Diese Lösung ist
1-indexed
Probieren Sie es online!
Zuerst definiere ich (rekursiv) einen Datentyp
T
T
hat entweder TypE Int
(einzelnes Element des TypsInt
) oderL[L]
(Liste des TypsT
).(%)
ist eine Funktion, die2
Argumente vom TypT
, der Liste, in der gesucht wird, undx
derInt
gesuchten Funktion annimmt .Wenn
(%)
etwas gefunden wird, das ein einzelnes Element istE n
, prüft esn
auf Gleichheit mitx
und gibt den0
Wert True zurück.Wenn
(%)
es auf einenL s
(wheres
has type[T]
) angewendet wird, läuft es(%)
auf allen Elementen vons
und inkrementiert das Ergebnis (da die Tiefe zunimmt, seit wir nach innen schauens
) und verkettet das Ergebnis.nub
Entfernt dann die Duplikate aus der ListeNB.
import Data.List
ist nur fürnub
.quelle
E n
und entfernenL s
.Python 2 , 68 Bytes
Probieren Sie es online!
quelle
Python 2 , 72 Bytes
Probieren Sie es online!
quelle
Jelly ,
118 BytesProbieren Sie es online!
Wie es funktioniert
Beispiellauf
Für linkes Argument
W
first ergibt das folgende Array.ẎÐĿ
wiederholt verkettet alle Elemente in der Tiefe 1 , indem die Tiefe des Feldes zu reduzieren 1 in jedem Schritt. Dies ergibt die folgende Reihe von Zwischenergebnissen.Für rechtes Argument 1 ,
ċ€
zählt das Auftreten von 1 in jedem Zwischenergebnis.I
jetzt nimmt alle vorwärts unterschiede.Unterschiede ungleich Null entsprechen Schritten, in denen mindestens eine weitere 1 zur Tiefe 1 hinzugefügt wurde . Somit zeigt eine Differenz ungleich Null am Index k das Vorhandensein einer 1 in der Tiefe k an .
T
Findet die Indizes aller wahrheitsgemäßen Elemente und liefert das gewünschte Ergebnis:quelle
R ,
1019592100 BytesProbieren Sie es online!
Rekursive Lösung; Es ist ziemlich ineffizient in Bytes, aber
lists
es ist super nervig mit R zu arbeiten.Grundsätzlich prüft take
L
und für jedes Elementx
vonL
(das entweder einlist
oder einatomic
Vektor eines Elements ist), ob an
ist%in%
x
und dann, ob ax
istlist
. Wenn nicht, gebenx==n
wir die Tiefe zurückd
. sonst rekursiv rufen wirf
aufx
, erhöht wirdd
.Dies gibt natürlich a zurück
list
, was wirunlist
undunique
um die richtige Ausgabe sicherzustellen (Rückgabe eines Vektors mit ganzzahligen Tiefen); GibtNULL
(eine leere Liste) für ungültig zurückn
.Anscheinend
%in%
sucht man nicht rekursiv durch einlist
wie ich dachte, also muss ich nachunlist(x)
+8 Bytes suchen :(quelle
APL (Dyalog) , 39 Byte *
Volles Programm. Fordert zur Eingabe der Liste und dann der Nummer auf. Druckt eine 1-basierte Liste nach STDOUT.
Probieren Sie es online!
⎕
Eingabeaufforderung für Liste⊢
ergeben, dass (trennt0
und⎕
)⎕JSON⍠'Compact'0
Konvertieren in eingerückte JSON-Zeichenfolge mit Zeilenumbrüchen⎕FMT
In Matrix konvertieren (eine durch neue Zeilen getrennte Zeile pro Zeile)⍞⍷
Eingabeaufforderung für Zahl als Zeichenfolge und geben Sie an, wo es damit beginnt∨⌿
vertikale ODER-Verkleinerung (dh in welchen Spalten beginnt sie)⍸
Indizes dieser Anfänge2÷⍨
halbieren (Ebenen werden mit zwei Leerzeichen eingerückt)⌊
Abrunden (da die erste Datenspalte Spalte 3 ist)* In Dyalog Classic zählen
⍸
als⎕U2378
und⍠
als⎕OPT
.quelle
PHP , 117 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
7968 BytesGibt ein Set zurück. Wenn dies nicht akzeptabel ist, verwenden Sie es
&&[...r]
zu einem Preis von 5 Byte.quelle
Jelly ,
1716 BytesEin vollständiges Programm, das zwei Befehlszeilenargumente für die Liste und ein zu überprüfendes Element verwendet und die Tiefe oder Tiefen (falls vorhanden) ausgibt, in denen das Element vorhanden ist. Die Ergebnisse sind 1-indiziert.
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6),
73 bis74 ByteErläuterung:
Testfälle
Code-Snippet anzeigen
quelle
e[0]
, Null zu sein, was Ihren Test abwerfen würde.e.pop
für einen Verlust von einem Byte.Python 3 ,
1238682 BytesProbieren Sie es online!
-37 Bytes dank Hyper Neutrino und Ovs
-4 Bytes dank Jonathan Frech
quelle
if type(a[i])!=int
für -1 Bytel+=[d]
mit -5 Bytesl+=[d]*(a[i]==n)
für -was auch immer_von_Bytes_es_ist[]==a[i]*0
für eine kürzere Art checka
anstelle eines Bereichs eine Iterationgetitem
APL (Dyalog Classic) ,
3130 BytesFunktion. Das linke Argument
⍺
ist die Nadel, das rechte Argument⍵
ist der Heuhaufen.Probieren Sie es online!
quelle
Oktave ,
126122 BytesProbieren Sie es online!
Aus Gründen der Lesbarkeit habe ich Leerzeichen oder
;
's nach Möglichkeit durch Zeilenenden ersetzt. Erklärung des ungolfed Codes:quelle
Java, 154 + 19 = 173 Bytes
Probieren Sie es online
Ungolfed-Methode
quelle