Untuk tantangan ini, daftar dianggap valid jika dan hanya jika seluruhnya terdiri dari bilangan bulat dan daftar yang valid (definisi rekursif \ o /). Untuk tantangan ini, diberikan daftar yang valid dan bilangan bulat, kembalikan daftar semua kedalaman tempat bilangan bulat dapat ditemukan.
Contoh
Mari kita pertimbangkan daftar [1, [2, [3, [1, 2, 3], 4], 1], 1]
dan integer 1
. Kemudian, kita dapat menarik daftar seperti ini:
Depth 0 1 2 3
Num 1
2
3
1
2
3
4
1
1
Anda akan melihat yang 1
muncul di kedalaman 0, 1, 3
. Dengan demikian, output Anda harus 0, 1, 3
dalam format yang masuk akal (urutan tidak masalah).
Kedalamannya bisa 0 atau 1-diindeks, tetapi harap tentukan dalam kiriman Anda yang mana.
Kasus Uji (0-diindeks)
Untuk daftar [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]
Untuk daftar [[[[[1],0],1],0],1]
:
0 -> 1, 3
1 -> 0, 2, 4
Untuk daftar [11,22,[33,44]]
:
11 -> [0]
22 -> [0]
33 -> [1]
44 -> [1]
Kembalikan daftar kosong jika istilah pencarian tidak ada di daftar di mana pun.
Nilai negatif dan nol valid dalam daftar input dan istilah.
sumber
Jawaban:
Mathematica, 25 byte
(mengembalikan output 1-diindeks)
Penjelasan
sumber
Haskell ,
102938076 byteTerima kasih Bruce Forte karena menyimpan beberapa byte, dan Laikoni karena menyimpan lebih banyak.
Terima kasih 4castle untuk menghemat 4 byte.
Haskell tidak memiliki tipe data untuk daftar jenis ini, jadi saya membuatnya sendiri.
Solusi ini
1-indexed
Cobalah online!
Pertama saya mendefinisikan (secara rekursif) tipe data
T
T
memiliki tipeE Int
(elemen tipe tunggalInt
) atauL[L]
(daftar tipeT
).(%)
adalah fungsi yang mengambil2
argumen, berdasarkan tipeT
, daftar yang melaluinya kita mencari, danx
, yangInt
kita cari.Setiap kali
(%)
menemukan sesuatu yang merupakan elemen tunggalE n
, ia memeriksan
kesetaraan denganx
dan kembali0
jika Benar.Ketika
(%)
diterapkan padaL s
(di manas
memiliki tipe[T]
) itu berjalan(%)
pada semua elemens
dan meningkatkan hasilnya (karena kedalaman meningkat karena kita melihat ke dalams
), dan hasilnya adalah gabungan.nub
kemudian menghapus duplikat dari daftarNB.
import Data.List
hanya untuknub
.sumber
E n
danL s
.Python 2 , 68 byte
Cobalah online!
sumber
Python 2 , 72 byte
Cobalah online!
sumber
Jelly ,
118 byteCobalah online!
Bagaimana itu bekerja
Contoh dijalankan
Untuk argumen kiri
W
pertama menghasilkan array berikut.ẎÐĿ
berulang kali menggabungkan semua elemen pada kedalaman 1 , mengurangi kedalaman array sebesar 1 pada setiap langkah. Ini menghasilkan susunan hasil antara berikut.Untuk argumen 1 benar ,
ċ€
hitung kejadian 1 di setiap hasil antara.I
sekarang membawa semua perbedaan ke depan.Perbedaan yang tidak nol berhubungan dengan langkah-langkah di mana setidaknya satu 1 lainnya ditambahkan ke kedalaman 1 . Dengan demikian, perbedaan yang tidak nol pada indeks k menunjukkan adanya 1 pada kedalaman k .
T
menemukan indeks semua elemen kebenaran, menghasilkan hasil yang diinginkan:sumber
R ,
1019592100 byteCobalah online!
Solusi rekursif; itu cukup tidak efisien dalam byte, tetapi R
lists
sangat menjengkelkan untuk bekerja dengannya.Pada dasarnya, mengambil
L
, dan untuk setiap elemenx
dariL
, (yang baiklist
atauatomic
vektor dari satu elemen), memeriksa apakahn
ini%in%
x
, kemudian memeriksa apakahx
adalahlist
. Jika tidak, makax==n
kami mengembalikan kedalamannyad
; kalau tidak kita rekursif sebutf
dix
, incrementingd
.Ini, tentu saja, mengembalikan a
list
, yang kamiunlist
danunique
untuk memastikan hasil yang benar (mengembalikan vektor kedalaman bilangan bulat); kembaliNULL
(daftar kosong) untuk tidak validn
.Tampaknya,
%in%
tidak mencari secara rekursif melaluilist
seperti yang saya pikir, jadi saya harusunlist(x)
+8 byte :(sumber
APL (Dyalog) , 39 byte *
Program lengkap. Meminta daftar, lalu untuk nomor. Mencetak daftar berbasis 1 ke STDOUT.
Cobalah online!
⎕
meminta daftar⊢
menghasilkan yang (memisahkan0
dan⎕
)⎕JSON⍠'Compact'0
konversi ke string JSON indentasi dengan baris baru⎕FMT
konversikan ke matriks (satu baris dibatasi-baris per baris)⍞⍷
meminta nomor sebagai string dan menunjukkan dari mana itu dimulai∨⌿
pengurangan OR vertikal (yaitu kolom mana itu dimulai)⍸
indeks dari permulaan tersebut2÷⍨
membagi dua itu (level indentasi dengan dua spasi)⌊
round down (karena kolom data pertama adalah kolom 3)* Dalam Dyalog Classic, menghitung
⍸
sebagai⎕U2378
dan⍠
sebagai⎕OPT
.sumber
PHP , 117 byte
Cobalah online!
sumber
JavaScript (ES6),
7968 byteMengembalikan Set. Jika ini tidak dapat diterima, gunakan
&&[...r]
dengan biaya 5 byte.sumber
Jelly ,
1716 byteProgram lengkap yang mengambil dua baris perintah mendebat daftar dan elemen untuk diperiksa, dan mencetak kedalaman atau kedalaman (jika ada) di mana elemen itu ada. Hasilnya 1-diindeks.
Cobalah online!
Bagaimana?
sumber
JavaScript (ES6),
7374 bytePenjelasan:
Uji kasus
Tampilkan cuplikan kode
sumber
e[0]
menjadi nol, yang akan membuang tes Anda.e.pop
menjadi kehilangan satu byte.Python 3 ,
1238682 byteCobalah online!
-37 byte berkat Hyper Neutrino dan ovs
-4 byte terima kasih kepada Jonathan Frech
sumber
if type(a[i])!=int
-1 bytel+=[d]
untuk -5 bytel+=[d]*(a[i]==n)
untuk -apa[]==a[i]*0
untuk pemeriksaan tipe yang lebih pendeka
bukannya rentang dan gunakangetitem
begitu banyak untuk - ~ 20 byteAPL (Dyalog Classic) ,
3130 byteFungsi. Arg kiri
⍺
adalah jarum, arg kanan⍵
adalah tumpukan jerami.Cobalah online!
sumber
Oktaf ,
126122 byteCobalah online!
Agar mudah dibaca, saya mengganti spasi atau
;
dengan ujung baris jika memungkinkan. Penjelasan kode tidak disunat:sumber
Java, 154 + 19 = 173 byte
Cobalah secara Online
Metode tidak serigala
sumber