Sebuah Graceful Grafik adalah jenis Grafik Sederhana . Grafik yang anggun adalah istimewa karena ada cara untuk memberi label semua node mereka dengan bilangan bulat positif sehingga ketika ujung-ujungnya juga dilabeli dengan perbedaan node yang mereka sambungkan, tidak ada dua tepi yang memiliki label yang sama dan setiap label hingga jumlah tepi digunakan.
Contoh Berolahraga
Berikut ini adalah grafik Sederhana yang kami curigai adalah grafik Anggun
Mari kita coba pelabelan berikut:
Catatan kami diizinkan untuk melewati bilangan bulat dalam pelabelan simpul kami. Sekarang kami memberi label setiap sisi dengan perbedaan positif antara node yang terhubung. Untuk meningkatkan visibilitas, saya menandainya dengan warna merah.
Setiap tepi memiliki nomor unik dan tidak ada angka antara 1 dan 7 (jumlah tepi yang kita miliki) ditinggalkan. Jadi grafik kita anggun.
Tugas
Diberikan grafik, melalui metode input yang masuk akal, menghasilkan nilai kebenaran jika anggun dan nilai palsu sebaliknya.
Ini adalah kode-golf sehingga tujuannya adalah untuk meminimalkan jumlah byte Anda.
Uji Kasus
Di sini grafik direpresentasikan sebagai larik tepi:
3 nodes:
[(0,1),(0,2),(1,2)]
True
Labeling:
Node 0 -> 0
Node 1 -> 2
Node 2 -> 3
5 nodes:
[(0,1),(0,4),(1,2),(2,3),(3,4)]
False
5 nodes:
[(0,1),(1,2),(2,3),(3,4)]
True
Labeling:
Node 0 -> 0
Node 1 -> 1
Node 2 -> 3
Node 3 -> 6
Node 4 -> 10
9 nodes
[(0,1),(1,2),(1,7),(1,8),(2,3),(2,6),(3,4),(4,5)]
True
Labeling:
Node 0 -> 0
Node 1 -> 1
Node 2 -> 3
Node 3 -> 6
Node 4 -> 10
Node 5 -> 15
Node 6 -> 11
Node 7 -> 7
Node 8 -> 8
5 nodes
[(0,1),(0,2),(1,2),(1,3),(1,4),(3,4)]
False
sumber
[(0,1),(1,2),(2,3),(3,4)]
mungkin merupakan kasus tepi yang patut diperhatikan.{(k-1,k) : 0 < k < n}
memerlukan label tertinggi dari semua grafik dengan jumlah simpul yang sama.n(n+1)/2
sebagai label tertinggi mereka. Saya telah menambahkan test case Anda.Jawaban:
Jelly , 12 byte
Mengambil array tepi sebagai pasangan simpul yang diindeks 1.
Cobalah online! (Sangat tidak efisien. Jangan repot-repot dengan test case yang sebenarnya.)
Bagaimana itu bekerja
sumber
ḅ-
adalah salah satu trik Jelly favorit saya :-)Mathematica,
121116 byteSunting: Disimpan 5 byte berkat JungHwan Min dan Martin Ender
Penjelasan
Fungsi murni yang mengambil
Graph
objek Mathematica dengan simpul{1, 2, ..., k}
untuk beberapa bilangan bulat negatifk
. Dalam kasus terburuk, kita hanya perlu label vertex mulai dari1
hingga1 + (1 + 2 + ... EdgeCount@#)
. Karena ini akan menyelamatkan kita beberapa byte nanti, kita akan membiarkannyae
menjadi daftar tepi dann
menjadi daftar{1, 2, ..., EdgeCount@#}
, sehingga bobot titik akan diambilRange[1+Tr[n=Range@Length[e=EdgeList@#]]]
. Kami membuat daftar semuaTuples
panjangVertexCount@#
, kemudian kami memilihCases
yang memberi label anggun dan memeriksa untuk melihat bahwa hasilnya adalahUnequal
daftar kosong{}
. Keanggunan dari daftar bobot titikw
diperiksa dengan melakukanMap
ping fungsiAbs[#-#2]&@@w[[List@@#]]&
pada daftar tepie
,Sort
melihat hasilnya, dan memeriksa apakah hasilnyaEqual
untukn
. Berikut ini rincian fungsi itu:sumber
VertexCount[#]
->VertexCount@#
Tr
trik untukLength
tidak lagi menyimpan byte jika Anda perlu menambahkan tanda kurung.Length[e=EdgeList@#]
memiliki panjang yang sama. Tapi lebih pendek untuk menghindari itu sama sekali dan menulis ulang angka segitiga di sanaTr@Range@EdgeCount@#
(dan kemudian gantie
di akhir denganEdgeList@#
. Kedua, operator fungsi jarang menyimpan byte, dalam hal ini saya pikir lebih pendek untuk digunakanCases
daripadaSelect
dan kemudianw_/;
alih-alihw
.