Pour ce défi, une liste est considérée comme valide si et seulement si elle se compose entièrement d'entiers et de listes valides (définitions récursives \ o /). Pour ce défi, étant donné une liste valide et un entier, retournez une liste de toutes les profondeurs auxquelles l'entier peut être trouvé.
Exemple
Prenons la liste [1, [2, [3, [1, 2, 3], 4], 1], 1]
et l'entier 1
. Ensuite, nous pouvons dresser la liste comme ceci:
Depth 0 1 2 3
Num 1
2
3
1
2
3
4
1
1
Vous remarquerez que cela 1
apparaît en profondeur 0, 1, 3
. Ainsi, votre sortie doit être 0, 1, 3
dans un format raisonnable (l'ordre n'a pas d'importance).
La profondeur peut être indexée 0 ou 1, mais veuillez préciser dans votre soumission de laquelle il s'agit.
Cas de test (indexés 0)
Pour la 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]
Pour la liste [[[[[1],0],1],0],1]
:
0 -> 1, 3
1 -> 0, 2, 4
Pour la liste [11,22,[33,44]]
:
11 -> [0]
22 -> [0]
33 -> [1]
44 -> [1]
Renvoie une liste vide si le terme de recherche n'existe nulle part dans la liste.
Les valeurs négatives et nulles sont valides dans la liste et le terme d'entrée.
la source
Réponses:
Mathematica, 25 octets
(retourne une sortie indexée 1)
Explication
la source
Haskell ,
102938076 octetsMerci à Bruce Forte d' avoir enregistré quelques octets et à Laikoni d'en avoir économisé plus.
Merci à 4castle d' avoir économisé 4 octets.
Haskell n'a pas de type de données pour ce type de liste, j'ai donc créé la mienne.
Cette solution est
1-indexed
Essayez-le en ligne!
Je définis d'abord (récursivement) un type de données
T
T
a un typeE Int
(élément unique de typeInt
) ouL[L]
(liste de typeT
).(%)
est une fonction qui prend des2
arguments, de typeT
, la liste à travers laquelle nous recherchons, etx
, le queInt
nous recherchons.Chaque fois qu'il
(%)
trouve quelque chose qui est un seul élémentE n
, il vérifie l'n
égalité avecx
et renvoie0
si True.Quand
(%)
est appliqué à unL s
(oùs
a un type[T]
), il s'exécute(%)
sur tous les élémentss
et incrémente le résultat (car la profondeur augmente depuis que nous regardons à l'intérieurs
), et le concatène le résultat.nub
supprime ensuite les doublons de la listeNB.
import Data.List
est seulement pournub
.la source
E n
etL s
.Python 2 , 68 octets
Essayez-le en ligne!
la source
Python 2 , 72 octets
Essayez-le en ligne!
la source
Gelée ,
118 octetsEssayez-le en ligne!
Comment ça fonctionne
Exemple d'exécution
Pour l'argument de gauche
W
donne d'abord le tableau suivant.ẎÐĿ
concatène plusieurs fois tous les éléments à la profondeur 1 , réduisant la profondeur de la matrice de 1 à chaque étape. Cela donne le tableau suivant de résultats intermédiaires.Pour l'argument de droite 1 ,
ċ€
compte les occurrences de 1 dans chaque résultat intermédiaire.I
prend maintenant toutes les différences en avant.Les différences non nulles correspondent aux étapes dans lesquelles au moins un autre 1 a été ajouté à la profondeur 1 . Ainsi, une différence non nulle à l'indice k indique la présence d'un 1 à la profondeur k .
T
trouve les indices de tous les éléments véridiques, donnant le résultat souhaité:la source
R ,
1019592100octetsEssayez-le en ligne!
Solution récursive; c'est assez inefficace en octets, mais R
lists
est super ennuyeux de travailler avec.Fondamentalement, prend
L
, et pour chaque élémentx
deL
, (qui est soit unlist
ou unatomic
vecteur d'un élément), vérifie sin
est%in%
x
, puis vérifie six
est unlist
. Si ce n'est pas le cas, alorsx==n
nous retournons la profondeurd
; Sinon , nous appelons récursivef
surx
, incrémenterd
.Ceci, bien sûr, renvoie un
list
, que nousunlist
etunique
pour assurer la bonne sortie (renvoyant un vecteur de profondeurs entières); renvoieNULL
(une liste vide) pour invaliden
.Apparemment,
%in%
ne recherche pas récursivementlist
comme je le pensais, donc je doisunlist(x)
pour +8 octets :(la source
APL (Dyalog) , 39 octets *
Programme complet. Demande la liste, puis le numéro. Imprime la liste basée sur 1 sur STDOUT.
Essayez-le en ligne!
⎕
invite pour la liste⊢
rendement qui (sépare0
et⎕
)⎕JSON⍠'Compact'0
convertir en chaîne JSON en retrait avec des retours à la ligne⎕FMT
convertir en matrice (une ligne délimitée par une nouvelle ligne par ligne)⍞⍷
demander le nombre sous forme de chaîne et indiquer où il commence dans ce∨⌿
réduction verticale OU (c'est-à-dire dans quelles colonnes il commence)⍸
indices de ces débuts2÷⍨
réduire de moitié (les niveaux sont en retrait avec deux espaces)⌊
arrondir vers le bas (car la première colonne de données est la colonne 3)* Dans Dyalog Classic, en comptant
⍸
comme⎕U2378
et⍠
comme⎕OPT
.la source
PHP , 117 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
7968 octetsRenvoie un ensemble. Si cela est inacceptable, utilisez
&&[...r]
au coût de 5 octets.la source
Gelée ,
1716 octetsUn programme complet prenant deux arguments de ligne de commande la liste et un élément à vérifier et imprimant la profondeur ou les profondeurs (le cas échéant) auxquelles l'élément existe. Les résultats sont indexés 1.
Essayez-le en ligne!
Comment?
la source
JavaScript (ES6),
7374 octetsExplication:
Cas de test
Afficher l'extrait de code
la source
e[0]
être nulle, ce qui ferait échouer votre test.e.pop
pour une perte d'un octet.Python 3 ,
1238682 octetsEssayez-le en ligne!
-37 octets grâce à Hyper Neutrino et ovs
-4 octets grâce à Jonathan Frech
la source
if type(a[i])!=int
pour -1 octetl+=[d]
pour -5 octetsl+=[d]*(a[i]==n)
pour -wwhat_number_of_bytes_it_is[]==a[i]*0
pour une vérification de type plus courtea
au lieu d'une plage et d'utilisergetitem
tellement pour - ~ 20 octetsAPL (Dyalog Classic) ,
3130 octetsUne fonction. L'argument gauche
⍺
est l'aiguille, l'argument droit⍵
est la botte de foin.Essayez-le en ligne!
la source
Octave ,
126122 octetsEssayez-le en ligne!
Pour plus de lisibilité, j'ai remplacé les espaces ou
;
les avec des fins de ligne lorsque cela était possible. Explication du code non golfé:la source
Java, 154 + 19 = 173 octets
Essayez-le en ligne
Méthode non golfée
la source