pengantar
Tangram adalah teka-teki klasik yang melibatkan penataan / pemasangan balok ke dalam berbagai bentuk. Dari bahasa Cina 七巧板 - secara harfiah berarti "tujuh papan keterampilan". Mari kita ambil ide ini dan gunakan tujuh potong Tetromino untuk mengisi kotak.
Tantangan
Tulis fungsi atau program yang menggunakan array koordinat grid sebagai input, dan output grid 10 kali 20 diisi diisi dengan potongan Tetris kecuali dalam koordinat yang ditentukan.
Optimalkan skor Anda dengan berusaha menjaga distribusi potongan seragam.
Kriteria
Gunakan pastebin ini koordinat ini untuk menyelesaikan tugas Anda. Ada lima set koordinat. Jangan ragu untuk memodifikasi format di mana koordinat ditulis, tetapi bukan nilainya.
Kumpulan data # 2 tidak dapat dipecahkan - dalam hal ini, cukup masukkan kisi-kisi dengan sel input terisi (yaitu, X
di mana lubang berada).
Memasukkan
Koordinat kisi mewakili 'lubang' di kisi. Ini adalah sel yang tidak bisa mengandung bagian Tetromino.
Koordinat kisi:
(0,0), (1,0), (2,0), ... (9,0)
(0,1), (1,1), (2,1), ... (9,1)
.
.
.
(0,19), (1,19), (2,19), ... (9,19)
Gunakan gaya array bahasa pemrograman pilihan Anda untuk memasukkan koordinat.
Menampilkan lubang pada kisi dengan ASCII yang dapat dicetak
X
atau lainnya .
Keluaran
Menggunakan kisi Tetris standar ukuran 10 sel lebar 20 sel tinggi , cetak kisi solusi jika dan hanya jika kisi dapat diisi sepenuhnya dan dengan sempurna menggunakan potongan Tetromino.
Potongan dibangun dengan huruf I
, O
, L
, J
, T
, Z
, S
sebagai berikut:
I
I L J
I OO L J T ZZ SS
I OO LL JJ TTT ZZ SS
Contoh
Contoh solusi output tanpa koordinat input:
ZZIIIILLLI
JZZTTTLLLI
JJJSTLOOLI
SZZSSLOOLI
SSZZSLLJJI
TSOOSLLJII
TTOOSSLJII
TZOOSSLZII
ZZOOSSZZII
ZJJJJSZLLI
TTTJJOOILI
ITZJJOOILI
IZZTTTLIII
IZOOTZLIII
IJOOZZLLII
LJJJZSSTII
LLLTSSTTTI
LLLTTSSZJI
OOLTSSZZJI
OOIIIIZJJI
Dengan distribusi sebagai berikut:
I
I L J
I OO L J T ZZ SS
I OO LL JJ TTT ZZ SS
11 6 8 6 6 7 6
Catatan
Koordinat mewakili satu X
dan Y
posisi di grid. Grid didasarkan pada 0, artinya koordinat (0,0)
harus berupa sel kiri atas atau kiri bawah, pilihan penulis.
Batu bata bisa:
- dipilih atas kebijakan penulis.
- diputar sesuai keinginan penulis.
- ditempatkan di grid di mana saja atas kebijaksanaan penulis (alias: tidak ada gravitasi Tetris)
Batu bata tidak bisa:
- ditempatkan di luar batas grid.
- tumpang tindih dengan batu bata atau lubang yang ada di grid.
- menjadi potongan Tetromino Tetris non-standar.
Mencetak gol
Skor Anda dalam format:
(1000 - [byte dalam kode]) * (M / 10 + 1)
Di mana M adalah pengganda untuk distribusi potongan yang digunakan dalam set solusi Anda.
Skor tertinggi oleh Ides of March menang.
Untuk menghitung M, tambahkan nilai distribusi tetromino individu terendah untuk setiap set dan kemudian ambil rata-rata dibulatkan ke bawah untuk menghitung M.
Sebagai contoh:
Set 1: 5
Set 2: 4
Set 3: 5
Set 4: 6
Set 5: 3
6 + 4 + 5 + 4 + 4 = 21/5 = 4,6
Jadi, Anda akan menggunakan 4
sebagai nilai M Anda .
Catatan: Jika suatu set tidak memiliki solusi, jangan faktor yang mengatur ke dalam penghitungan M, karena itu tidak akan memiliki distribusi tetromino.
sumber
Jawaban:
Python 3 , 819 byte, M = 0, Skor = 181
Ini adalah program DFS brute force. Itu membangun array numpy, dan memasukkan semua lubang yang dimasukkan. Kemudian mengambil ubin paling tidak terisi kiri pada baris tertinggi yang memiliki satu, dan menempatkan tetromino. Secara rekursif, kita sekarang melakukannya lagi - ketika kita tidak dapat menemukan solusi, atau mundur dan mencoba bagian lain pada kesempatan pertama.
Ini memiliki M 0, karena mencoba menggunakan potongan-potongan dalam urutan yang ditentukan, dan hampir selalu menemukan solusi tanpa yang terakhir dalam daftar. Saya mencoba menggunakan daftar yang dipesan secara acak setiap siklus untuk membuat distribusi yang lebih merata, tetapi saya hanya mendapat nilai M 2, yang tidak sebanding dengan byte yang diperlukan untuk mengimpor random.shuffle .
Saya tidak dapat mengomentari kode di bawah ini, karena dalam bermain golf saya sudah lama lupa apa yang dilakukannya. Gagasan umum:
Cobalah online!
Tes sampel:
sumber