Para este desafío, una lista se considera válida si y solo si consiste enteramente de enteros y listas válidas (definiciones recursivas \ o /). Para este desafío, dada una lista válida y un número entero, devuelve una lista de todas las profundidades a las que se puede encontrar el número entero.
Ejemplo
Consideremos la lista [1, [2, [3, [1, 2, 3], 4], 1], 1]y el entero 1. Entonces, podemos dibujar la lista así:
Depth 0 1 2 3
Num 1
2
3
1
2
3
4
1
1
Notarás que 1aparece en las profundidades 0, 1, 3. Por lo tanto, su salida debe estar 0, 1, 3en algún formato razonable (el orden no importa).
La profundidad puede ser 0 o 1 indexada, pero especifique en su envío cuál es.
Casos de prueba (indexados 0)
Para la lista [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]
Para la lista [[[[[1],0],1],0],1]:
0 -> 1, 3
1 -> 0, 2, 4
Para la lista [11,22,[33,44]]:
11 -> [0]
22 -> [0]
33 -> [1]
44 -> [1]
Devuelve una lista vacía si el término de búsqueda no existe en la lista en ninguna parte.
Los valores negativos y cero son válidos en la lista de entrada y el término.
fuente

Respuestas:
Mathematica, 25 bytes
(devuelve salida indexada 1)
Explicación
fuente
Haskell ,
102938076 bytesGracias Bruce Forte por guardar algunos bytes, y Laikoni por guardar algunos más.
Gracias 4castle por guardar 4 bytes.
Haskell no tiene ningún tipo de datos para este tipo de lista, así que hice el mío.
Esta solución es
1-indexedPruébalo en línea!
Primero defino (recursivamente) un tipo de datos
TTtiene tipoE Int(elemento único de tipoInt) oL[L](lista de tipoT).(%)es una función que toma2argumentos, de tipoT, la lista a través de la cual estamos buscando yxlaIntque estamos buscando.Siempre que
(%)encuentra algo que es un elemento únicoE n, comprueba lanigualdad conxy devuelve0si es verdadero.Cuando
(%)se aplica a unL s(dondestiene tipo[T]) se ejecuta(%)en todos los elementosse incrementa el resultado (a medida que aumenta la profundidad ya que estamos mirando hacia adentros), y concatena el resultado.nubluego elimina los duplicados de la listaNÓTESE BIEN.
import Data.Listes solo paranub.fuente
E nyL s.Python 2 , 68 bytes
Pruébalo en línea!
fuente
Python 2 , 72 bytes
Pruébalo en línea!
fuente
Jalea ,
118 bytesPruébalo en línea!
Cómo funciona
Ejecución de ejemplo
Para argumento izquierdo
Wprimero produce la siguiente matriz.ẎÐĿconcatena repetidamente todos los elementos en la profundidad 1 , reduciendo la profundidad de la matriz en 1 en cada paso. Esto produce el siguiente conjunto de resultados intermedios.Para el argumento correcto 1 ,
ċ€cuenta las ocurrencias de 1 en cada resultado intermedio.Iahora lleva todas las diferencias hacia adelante.Las diferencias distintas de cero corresponden a los pasos en los que se agregó al menos otro 1 a la profundidad 1 . Por lo tanto, una diferencia distinta de cero en el índice k indica la presencia de un 1 en la profundidad k .
Tencuentra los índices de todos los elementos de verdad, produciendo el resultado deseado:fuente
R ,
1019592100 bytesPruébalo en línea!
Solución recursiva; es bastante ineficiente en bytes, pero R
listses muy molesto trabajar conBásicamente, toma
L, y para cada elementoxdeL, (que eslisto unatomicvector de un elemento), verifica sines%in%x, luego verifica sixes alist. Si no es así, entoncesx==ndevolvemos la profundidadd; de lo contrario, de forma recursiva llamamosfenx, incrementandod.Esto, por supuesto, devuelve a
list, que nosotrosunlistyuniquepara garantizar la salida correcta (devolviendo un vector de profundidades enteras); devuelveNULL(una lista vacía) para inválidon.Aparentemente,
%in%no busca de forma recursiva a través de lolistque pensé, así que tengo queunlist(x)buscar +8 bytes :(fuente
APL (Dyalog) , 39 bytes *
Programa completo Solicita la lista, luego el número. Imprime la lista basada en 1 en STDOUT.
Pruébalo en línea!
⎕solicitud de lista⊢rendimiento que (separa0y⎕)⎕JSON⍠'Compact'0convertir a una cadena JSON sangrada con nuevas líneas⎕FMTconvertir a matriz (una línea delimitada por nueva línea por fila)⍞⍷solicite el número como cadena e indique dónde comienza en ese∨⌿reducción OR vertical (es decir, en qué columnas comienza)⍸índices de esos comienzos2÷⍨reducir a la mitad eso (los niveles están sangrados con dos espacios)⌊redondear hacia abajo (porque la primera columna de datos es la columna 3)* En Dyalog Classic, contando
⍸como⎕U2378y⍠como⎕OPT.fuente
PHP , 117 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
7968 bytesDevuelve un conjunto. Si esto es inaceptable, úselo
&&[...r]a un costo de 5 bytes.fuente
Jalea ,
1716 bytesUn programa completo que toma dos argumentos de línea de comando de la lista y un elemento para verificar, e imprime la profundidad o las profundidades (si las hay) en las que existe el elemento. Los resultados están indexados en 1.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6),
7374 bytesExplicación:
Casos de prueba
Mostrar fragmento de código
fuente
e[0]ser cero, lo que anularía su prueba.e.poppor una pérdida de un byte.Python 3 ,
1238682 bytesPruébalo en línea!
-37 bytes gracias a Hyper Neutrino y ovs
-4 bytes gracias a Jonathan Frech
fuente
if type(a[i])!=intpor -1 bytel+=[d]por -5 bytesl+=[d]*(a[i]==n)con -whatever_number_of_bytes_it_is[]==a[i]*0para un cheque de tipo más cortoalugar de un rango y usegetitemtanto para - ~ 20 bytesAPL (Dyalog Classic) ,
3130 bytesFunción. El argumento izquierdo
⍺es la aguja, el argumento derecho⍵es el pajar.Pruébalo en línea!
fuente
Octava ,
126122bytesPruébalo en línea!
Para facilitar la lectura, reemplacé espacios o
;'s con extremos de línea siempre que sea posible. Explicación del código no golfizado:fuente
Java, 154 + 19 = 173 bytes
Pruébalo en línea
Método sin golf
fuente