Mengingat notasi Dowker tentang simpul dan tanda-tanda penyeberangannya, hitung polinomial braketnya.
Meskipun ada definisi yang lebih teknis, untuk tantangan ini cukup memikirkan simpul sebagai sesuatu yang dibuat secara fisik dengan menyatukan kedua ujung tali menjadi satu. Karena simpul ada dalam tiga dimensi, ketika kita menggambarnya di atas kertas, kita menggunakan diagram simpul - proyeksi dua dimensi di mana persilangannya persis dua garis, satu di atas dan satu di bawah.
Di sini (b) dan (c) adalah diagram yang berbeda dari simpul yang sama.
Bagaimana kita menggambarkan diagram simpul di atas kertas? Sebagian besar dari kita bukan Rembrandt, jadi kami mengandalkan notasi Dowker , yang berfungsi sebagai berikut:
Pilih titik awal sembarang pada simpul. Bergerak ke arah yang sewenang-wenang di sepanjang simpul dan beri nomor penyeberangan yang Anda temui, mulai dari 1, dengan modifikasi berikut: jika itu adalah bilangan genap dan Anda saat ini sedang melewati penyilangan, meniadakan angka genap itu. Akhirnya, pilih angka genap sesuai dengan 1, 3, 5, dll.
Mari kita coba sebuah contoh:
Pada simpul ini, kami memilih "1" sebagai titik awal kami dan terus bergerak ke atas dan ke kanan. Setiap kali kita melewati atau di bawah seutas tali, kita menetapkan titik persimpangan nomor alami berikutnya. Kami meniadakan angka genap yang sesuai dengan untaian yang melewati persimpangan, misalnya [3,-12]
dalam diagram. Jadi, diagram ini akan diwakili oleh [[1,6],[2,5],[3,-12],[-4,9],[7,8],[-10,11]]
. Mendaftar teman dari 1, 3, 5, 7, dll memberi kita [6,-12,2,8,-4,-10]
.
Ada beberapa hal yang perlu diperhatikan di sini. Pertama, notasi Dowker tidak unik untuk simpul yang diberikan, karena kita dapat memilih titik awal dan arah yang sewenang-wenang. Tetapi, mengingat notasi, seseorang dapat sepenuhnya menentukan struktur simpul (secara teknis, hingga refleksi dari komponen simpul utama). Meskipun tidak semua notasi Dowker dapat membentuk simpul yang mungkin, dalam masalah ini Anda dapat mengasumsikan bahwa input mewakili simpul yang sebenarnya.
Untuk menghindari ambiguitas antara refleksi simpul, dan untuk membuat tantangan lebih mudah diselesaikan, Anda juga akan diberikan daftar tanda persimpangan sebagai input.
Dalam persilangan positif, garis bawah mengarah ke kiri dari sudut pandang garis atas. Pada persimpangan negatif, ia menuju ke kanan. Perhatikan bahwa membalik arah berputar di sekitar simpul (yaitu membalikkan garis over dan under line) tidak mengubah tanda silang. Dalam contoh kita tanda-tanda persimpangan adalah [-1,-1,-1,1,-1,1]
. Mereka diberikan dalam urutan yang sama dengan notasi Dowker, yaitu untuk penyeberangan bernomor 1, 3, 5, 7, dll.
Satu-satunya loop tanpa persimpangan memiliki polinomial 1.
Jika kita memiliki diagram yang terdiri dari
Pada gambar di atas, persilangan garis besar pada diagram pertama, yang berbentuk , dapat ditransformasikan menjadi seperti pada gambar kedua (alias perataan positif ), atau seperti pada gambar ketiga ( perataan negatif ).
Bingung belum? Mari kita lakukan sebuah contoh, mencoba menemukan polinomial braket dari (Catatan: ini adalah dua simpul yang dihubungkan bersama. Diagram semacam ini tidak akan menjadi input potensial dalam tantangan ini karena input hanya akan menjadi simpul tunggal, tetapi mungkin muncul sebagai hasil antara dalam algoritme.)
Kami pertama kali menggunakan aturan 3
Kami menggunakan aturan 3 lagi pada kedua simpul baru
Kami mengganti 4 simpul baru ini ke dalam persamaan pertama.
Menerapkan aturan 1 dan 2 ke 4 ini memberi tahu kami
Jadi, ini beritahu kami
Selamat telah menyelesaikan pengantar singkat Anda untuk teori simpul!
Memasukkan
Dua daftar:
Notasi Dowker, mis
[6,-12,2,8,-4,-10]
. Penomoran persimpangan harus dimulai dari 1. Angka ganjil yang sesuai[1,3,5,7,...]
adalah implisit dan tidak boleh diberikan sebagai input.Tanda-tanda (
1
/-1
atau jika Anda lebih suka0
/1
ataufalse
/true
atau'+'
/'-'
) untuk persimpangan sesuai dengan notasi Dowker, misalnya[-1,-1,-1,1,-1,1]
.
Alih-alih sepasang daftar, Anda bisa memiliki daftar pasangan, misalnya [[6,-1],[-12,-1],...
Keluaran
[[1,-2],[5,0],[1,1],[-1,3]]
[0,1,0,5,1,0,-1]
Aturan
Ini adalah tantangan kode-golf . Tidak ada celah standar yang dapat digunakan, dan perpustakaan yang memiliki alat untuk menghitung notasi Dowker, atau polinomial Braket, tidak dapat digunakan. (Bahasa yang berisi pustaka-pustaka ini masih bisa digunakan, hanya saja bukan pustaka / paket).
Tes
// 4-tuples of [dowker_notation, crossing_signs, expected_result, description]
[
[[],[],[[1,0]],"unknot"],
[[2],[1],[[-1,3]],"unknot with a half-twist (positive crossing)"],
[[2],[-1],[[-1,-3]],"unknot with a half-twist (negative crossing)"],
[[2,4],[1,1],[[1,6]],"unknot with two half-twists (positive crossings)"],
[[4,6,2],[1,1,1],[[1,-7],[-1,-3],[-1,5]],"right-handed trefoil knot, 3_1"],
[[4,6,2,8],[-1,1,-1,1],[[1,-8],[-1,-4],[1,0],[-1,4],[1,8]],"figure-eight knot, 4_1"],
[[6,8,10,2,4],[-1,-1,-1,-1,-1],[[-1,-7],[-1,1],[1,5],[-1,9],[1,13]],"pentafoil knot, 5_1"],
[[6,8,10,4,2],[-1,-1,-1,-1,-1],[[-1,-11],[1,-7],[-2,-3],[1,1],[-1,5],[1,9]],"three-twist knot, 5_2"],
[[4,8,10,2,12,6],[1,1,-1,1,-1,-1],[[-1,-12],[2,-8],[-2,-4],[3,0],[-2,4],[2,8],[-1,12]],"6_3"],
[[4,6,2,10,12,8],[-1,-1,-1,-1,-1,-1],[[1,-10],[2,-2],[-2,2],[1,6],[-2,10],[1,14]],"granny knot (sum of two identical trefoils)"],
[[4,6,2,-10,-12,-8],[1,1,1,1,1,1],[[1,-14],[-2,-10],[1,-6],[-2,-2],[2,2],[1,10]],"square knot (sum of two mirrored trefoils)"],
[[6,-12,2,8,-4,-10],[-1,-1,-1,1,-1,1],[[1,-2],[1,6],[-1,10]],"example knot"]
]
Sumber daya eksternal
Tidak perlu untuk tantangan, tetapi jika Anda tertarik:
terima kasih @ChasBrown dan @ H.Wiz untuk menangkap kesalahan dalam definisi notasi Dowker saya
sumber
Jawaban:
K (ngn / k) ,
196193 byteCobalah online!
sumber
Brain-Flak , 1316 byte
Cobalah online!
Aku tidak menyesali apapun. Input adalah daftar pasangan yang rata.
sumber