The Tangram adalah teka-teki diseksi terbuat dari tujuh bentuk: Lima segitiga berukuran berbeda, genjang dan persegi. Diberikan bentuk, tujuannya adalah menciptakan kembali bentuk menggunakan semua potongan dan tanpa tumpang tindih. Jelas ada banyak cara untuk mengatur set potongan-potongan ini di pesawat. Subset yang menarik adalah
Grid Tangrams
Kita bisa menggambar persegi Tangram "standar" menjadi persegi yang lebih besar yang dibagi lagi oleh sebuah kotak menjadi 16 kotak yang lebih kecil. Tangrams kotak hanya bentuk yang terbuat dari potongan tangram, sehingga semua simpul potongan berada di titik-titik grid.
Ini adalah jenis teka-teki Tangram yang ingin kita pertimbangkan dalam tantangan ini, karena mungkin lebih mudah ditangani daripada yang lebih umum.
Sebagai catatan tambahan: Matematikawan Cina Chuan-Chin Hsiung dan Fu Traing Wang membuktikan pada tahun 1942 bahwa hanya ada 13 tangram cembung. Mereka pertama-tama menunjukkan bahwa masalahnya dapat direduksi menjadi grid tangrams, dan kemudian menggunakan beberapa argumen kombinatorial dan geometris. Ini semua dari 13:
Tantangan
Diberikan tangram grid yang dapat dipecahkan, mengeluarkan pembedahan tangram grid menjadi tujuh potong tangram.
IO
Tangram diberikan sebagai gambar hitam dan putih (bentuknya hitam, latar belakang putih), dengan kedua sisi berlipat 50px. Grid memiliki lebar tepat 50px. Garis kisi paralel dengan sisi gambar.
EDIT: Gambar dapat diterima sebagai input dan dikembalikan sebagai output dalam format gambar raster yang nyaman seperti PNG, TIFF, PBM dll. Tetapi representasi sebagai array 2d biner atau string atau matriks dapat diterima.
Keluaran harus lagi memiliki ukuran yang sama dan harus memiliki lagi bentuk yang sama, tetapi dengan masing-masing bagian warna yang berbeda, atau sebagai alternatif dengan garis putih yang memisahkan semua bagian. Perlu dicatat bahwa segi empat yang tidak persegi dapat dibalik.
Pixel pada batas potongan tidak harus benar-benar cocok dengan yang ada di bentuk, juga jika ada efek aliasing atau fuzz lain ini masih ok.
Contoh Input dan Output:
Contoh:
Solusi yang memungkinkan:
Jawaban:
BBC BASIC,
570 514490 byte ASCIIUnduh juru bahasa di http://www.bbcbasic.co.uk/bbcwin/download.html
435 byte dibatalkan
Program lengkap menampilkan input dari
L.bmp
layar, lalu memodifikasinya untuk menemukan solusi.Penjelasan
Perhatikan bahwa di dasar BBC jarak 1 piksel = 2 unit, sehingga kisi 50x50 piksel menjadi kisi 100x100.
Kami menggunakan fungsi rekursif untuk menempatkan 2 segitiga besar, segitiga sedang, persegi dan jajaran genjang ke dalam bentuk. Bentuk sebelumnya dalam daftar dibuat sebelum panggilan rekursif berikutnya dibuat. jika panggilan rekursif kembali tanpa menemukan solusi, bentuk sebelumnya ditarik dalam warna hitam dan posisi baru bentuk sebelumnya akan dicoba.
Setelah lima bentuk ini digambar, menempatkan dua segitiga kecil hanyalah formalitas. Adalah perlu untuk menggambar salah satu dari mereka, untuk membedakan mereka jika mereka memiliki keunggulan bersama. Kami hanya mewarnai salah satu dari dua segitiga kecil. Yang lainnya dibiarkan hitam alami.
Penempatan setiap bentuk dicoba pada koordinat x, y yang berbeda dan dalam 4 rotasi yang berbeda. Untuk menguji apakah ada ruang kosong untuk menggambar bentuk, kami menggunakan templat di bawah ini, dengan sudut 45 derajat. Rotasi dibuat tentang
*
dan 8 piksel yang diuji berada dalam 2 setengah lingkaran dari jari-jari 9 dan 81 unit dan jatuh pada garis yang terpancar pada kelipatan ganjil 22,5 derajat ke sumbu x dan y.Untuk segitiga besar, semua 8 ruang harus jelas. Untuk bentuk lain hanya beberapa sel yang harus jelas sehingga masker diterapkan.
Setelah ditetapkan bahwa suatu bentuk akan cocok, itu harus ditarik. Jika itu adalah segitiga yang diplot dengan
PLOT 85
, jika itu adalah jajaran genjang, angkanya 32 lebih tinggi (perhatikan bahwa untukPLOT
tujuan kami menganggap kuadrat sebagai jajar genjang khusus). Dalam kedua kasus, 3 simpul berurutan harus diberikan. Vertex kedua adalah asal dari bentuk (ditandai*
dalam tabel di atas) kecuali dalam kasus segitiga besar, di mana (sebelum rotasi) itu adalah-1,-1.
2 simpul lainnya dapat memiliki koordinat x dan y-1,0 or 1
yang diekstraksi dari basis 3 angka yang disandikan, kemudian diskalakan dengan 99 dan diputar seperlunya dengan transformasi denganc
dans
.Kode tidak dikunci
Keluaran
Ini adalah montase dari solusi yang ditemukan oleh program untuk kasus uji. Penggunaan 99 bukannya 100 karena alasan golf menyisakan beberapa celah hitam kecil. Karena bentuk digambar ulang selama pencarian, dibutuhkan beberapa detik untuk menjalankan beberapa kasus, dan cukup menarik untuk ditonton.
sumber