Tantangan
Program Anda harus mengambil 3 input:
- Integer positif yang merupakan jumlah variabel,
- Satu set pasangan bilangan bulat non-negatif yang tidak berurutan, di mana masing-masing pasangan mewakili kesetaraan antara variabel, dan
- Integer positif yang mewakili variabel awal,
Ini harus mengembalikan satu set bilangan bulat non-negatif yang mewakili semua variabel yang dapat ditunjukkan sama secara transitif dengan variabel awal (termasuk variabel awal itu sendiri).
Dengan kata lain, diberikan masukan N
, E
dan S
, kembali set Q
, sehingga:
S ∈ Q
.- Jika
Z ∈ Q
dan(Y = Z) ∈ E
kemudianY ∈ Q
. - Jika
Z ∈ Q
dan(Z = Y) ∈ E
kemudianY ∈ Q
.
Ini juga dapat dinyatakan sebagai masalah teori grafik :
Diberikan grafik tak berarah dan sebuah simpul dalam grafik, daftar simpul dalam komponen yang terhubung .
Spesifikasi
- Anda dapat memilih untuk menggunakan pengindeksan berbasis-0 atau berbasis-1.
- Input pertama menghitung jumlah variabel yang ada, di mana variabel diberikan sebagai angka. Atau, Anda tidak dapat mengambil input ini, dalam hal ini diasumsikan sama dengan indeks variabel tertinggi yang ada, atau satu lebih dari ini, tergantung pada skema pengindeksan Anda.
- Anda dapat mengasumsikan input terbentuk dengan baik: Anda tidak akan diberikan variabel di luar rentang yang ditentukan oleh input pertama. Misalnya,
3, [1 = 2, 2 = 0], 1
adalah input yang valid, sedangkan4, [1 = 719, 1 = 2, 3 = 2], -3
tidak. - Anda tidak dapat berasumsi bahwa variabel apa pun akan memiliki persamaan yang terkait dengannya. Jika diberi input ketiga yang "kesepian" (tidak memiliki persamaan), output yang benar adalah satu set tunggal yang hanya berisi input tersebut (karena sama dengan dirinya sendiri).
- Anda dapat mengasumsikan bahwa persamaan tidak akan mengandung kesetaraan dari variabel ke variabel itu sendiri, dan bahwa kesetaraan yang sama tidak akan diberikan beberapa kali (ini termasuk hal-hal seperti
1 = 2
dan2 = 1
). - Anda dapat mengasumsikan bahwa semua bilangan bulat yang diberikan akan berada dalam jangkauan representatif bahasa Anda.
- Anda dapat mengambil input kedua dalam format apa pun yang masuk akal.
Berikut beberapa format yang masuk akal:
0 = 2
0 = 3
1 = 0
{(0, 2), (0, 3), (1, 0)}
[0, 2, 0, 3, 1, 0]
0 2 0 3 1 0
Graph[{{0, 2}, {0, 3}, {1, 0}}]
[0 = 2, 0 = 3, 1 = 0]
- Anda dapat menampilkan dalam format apa pun yang wajar (mis. Set, daftar, dll.). Ketertiban tidak relevan.
Mencetak gol
Ini adalah kode-golf , sehingga program terpendek yang valid (dalam byte) menang.
Kasus Uji (0-diindeks)
3, [1 = 2, 2 = 0], 1 -> {0, 1, 2}
5, [0 = 2, 0 = 3, 1 = 2], 3 -> {0, 1, 2, 3}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 4 -> {2, 4}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 5 -> {0, 1, 3, 5}
5, [0 = 1, 2 = 0, 0 = 3, 4 = 0], 2 -> {0, 1, 2, 3, 4}
6, [0 = 1, 1 = 2, 2 = 3, 3 = 4, 4 = 5], 3 -> {0, 1, 2, 3, 4, 5}
4, [0 = 1, 1 = 2, 2 = 0], 3 -> {3}
5, [0 = 2, 2 = 4], 2 -> {0, 2, 4}
8, [], 7 -> {7}
Kasus Uji (1-diindeks)
3, [2 = 3, 3 = 1], 2 -> {1, 2, 3}
5, [1 = 3, 1 = 4, 2 = 3], 4 -> {1, 2, 3, 4}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 5 -> {3, 5}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 6 -> {1, 2, 4, 6}
5, [1 = 2, 3 = 1, 1 = 4, 5 = 1], 3 -> {1, 2, 3, 4, 5}
6, [1 = 2, 2 = 3, 3 = 4, 4 = 5, 5 = 6], 4 -> {1, 2, 3, 4, 5, 6}
4, [1 = 2, 2 = 3, 3 = 1], 4 -> {4}
5, [1 = 3, 3 = 5], 3 -> {1, 3, 5}
8, [], 8 -> {8}
code-golf
graph-theory
equation
Buah Esolanging
sumber
sumber
Jawaban:
Brachylog , 22 byte
Cobalah online!
Penjelasan
sumber
Python 2 ,
6563 byte-2 bytes terima kasih kepada ovs
Cobalah online!
sumber
Pyth , 12 byte
Suite uji.
sumber
Bersih ,
8581 byteCobalah online!
Menentukan fungsi
$ :: [[Int]] -> ([Int] -> [Int])
sumber
limit
kerjanya?Bahasa Wolfram (Mathematica) , 32 byte
Masukkan format:
{2<->3, 3<->1}, 3
. Tidak mengambil input pertama.Cobalah online!
sumber
Operasi bahasa skrip Flashpoint , 364 byte
Telepon dengan:
Keluaran:
Belum dibuka:
sumber
Python 2 , 53 byte
Cobalah online!
Panjang yang sama dengan fungsi:
Cobalah online!
Ini didasarkan pada solusi bagus Rod menggunakan pembaruan hubungan arus pendek
b|=b&p and p
. Mengambil jumlah variabel sebagai inputn
membantu mempersingkat kode loop.sumber
Jelly ,
121110 byte-1 berkat Erik the Outgolfer (ganti atom
œ&
denganf
)Tautan diad menerima
E
di sebelah kiri (sebagai daftar panjang-dua-daftar) danS
di sebelah kanan (sebagai bilangan bulat) mengembalikan daftar [de-duplikat].Cobalah online! atau lihat test-suite .
Bagaimana?
sumber
œ&
f
Nilai kembalian dan kembali selalu memiliki properti boolean yang sama.Perl 5
-n0
,4939 byteBerikan nilai awal pada garis pada STDIN diikuti oleh garis pasangan angka yang setara (atau berikan nilai awal terakhir atau di tengah atau berikan beberapa nilai awal, semuanya bekerja)
Cobalah online!
Ini dapat menampilkan elemen dalam hasil yang disetel beberapa kali. Variasi 48 byte ini menghasilkan setiap elemen yang setara hanya sekali:
Cobalah online!
sumber
Ruby , 39 byte
Cobalah online!
sumber
K (ngn / k) ,
373635 byteCobalah online!
{
}
fungsi dengan argumenx
,y
danz
mewakiliN
,E
danS
masing-masing!x
adalah daftar 0 1 ... x-1&2
adalah daftarnya0 0
y,,&2
kami menambahkan pasangan0 0
key
menghindari kasus khusus kosongy
+y,,&2
hal yang sama dialihkan dari daftar pasangan ke pasangan daftar{
}[+y,,&2]
adalah proyeksi, yaitu fungsi yangx
akan menjadi nilai+y,,&2
dany
akan menjadi argumen yang dilewatkan ketika memanggil proyeksi|y x
aday
di indeksx
, terbalik (|
)@[y;x;&;|y x]
mengubahy
indeksx
dengan mengambil minimum (&
) dari elemen yang ada dan elemen dari|y x
/
terus menelepon sampai konvergensia:
ditugaskan untuk aa[z]=z
topeng boolean dari elemena
sama denganz
-th&
mengonversi topeng boolean ke daftar indekssumber
Oktaf ,
4845 byteMengambil input sebagai "adjacency-matrix", misalnya penggunaan
[0 0 0; 0 0 1; 1 0 0]
untuk[2 = 3, 3 = 1]
, coba online!Penjelasan
Pertama kita membangun matriks adjacency lengkap untuk grafik transitif, menggunakan jumlah
eye(size(A))
(elemen refleksif),A
(input) danA'
(hubungannya simetris).Kami menghitung penutupan transitif dengan menghitung kekuatan
nnz(A)
yang mencukupi (nnz(A)
adalah batas atas untuk panjang lintasan), jadi dari sana semua yang tersisa adalah untuk mendapatkan baris kanan dengan(u,:)
danfind
semua entri bukan nol.sumber
Python 2 , 87 byte
Cobalah online!
sumber
Pari / GP , 80 byte
Cobalah online!
sumber
JavaScript (ES6), 87 byte
Deduplikasi akan dimungkinkan menggunakan
&&[...new Set(d[n]||[n])]
biaya 14 byte.sumber