Ringkasan
Tujuan dari tantangan ini adalah untuk membuat versi gambar yang dibatalkan dari puzzle 15-puzzle / geser yang juga disebut taquin dalam bahasa Prancis.
Detail:
Diberikan input yang terdiri dari:
- sebuah gambar,
- bilangan bulat
n
, - bilangan bulat lainnya
r
,
program Anda, atau fungsi, atau apa pun yang cocok, harus menampilkan gambar yang sama ( yaitu ukuran dan format yang sama) sebagai input, tetapi yang menjalani proses berikut:
- bagilah gambar menjadi
n²
empat persegi panjang, - hapus salah satu dari empat persegi panjang itu, secara acak,
- pindahkan sejumlah acak persegi panjang yang berdekatan dari garis / kolom yang dipengaruhi oleh titik (2.) sehingga lubang yang dibuat diisi dan lubang lain dihasilkan di baris / kolom ini. Angka ini bisa
0
jika kosong di sudut atau di tepi.
Ulangi (3.) r
kali.
Klarifikasi:
- Jika Anda memindahkan persegi panjang dari garis di langkah (3.), Anda harus memindahkan persegi panjang dari kolom di pengulangan berikutnya,
- jika Anda memindahkan persegi panjang dari kiri ke kanan dalam langkah-langkah, mereka harus dipindahkan kanan-ke-kiri pada langkah-langkah berikutnya, sama untuk kolom terkait dari atas ke bawah dan dari bawah ke atas,
- Anda dapat mengasumsikan bahwa
n
akan dipilih sehingga ia membagi panjang sisi-sisi gambar.
Poin terakhir:
Sebuah animasi yang .gif
menunjukkan seluruh proses sangat disambut.
Saya mengusulkan untuk menggunakan gambar berikut (yang 1024x768
), dengan n=16
dan r=100
sebagai model, Anda dapat menggunakan gambar lain (selama itu relevan dan mematuhi aturan SE, tentu saja).
Perhatikan bahwa kebijakan standar lubang berlaku.
Ini adalah kode-golf , jadi pengiriman yang lebih singkat menang!
Karena contoh diminta, ini adalah satu, dibuat "dengan tangan", dengan n=4
danr=1
Langkah 1 dan 2
Langkah 3 : garis-bijaksana, 2 persegi panjang ke kiri
sumber
move a random number of contiguous rectangles
bisakah 0 persegi panjang? (Ini akan merepotkan untuk membuat program mengubah perilaku ketika kosong di tepi / sudut)Jawaban:
Mathematica, 246 byte
Fungsi anonim. Berisi U + F3C7, sesuai dengan
Transpose
operator Mathematica . Fungsi ini mengambilImage
objek dan mengembalikanImage
objek.Contoh Animasi, dengan
n=16
danr=100
Setelah 5000 iterasi:
(klik gambar untuk versi yang lebih besar)
Penjelasan
Inisialisasi
Simpan
Nest
fungsi (operasi berulang) din
.Simpan
RandomInteger
fungsi dalamk
, danReverse
fungsi dalamq
.Memisahkan gambar
Partisi gambar input menjadi (input kedua) ^ 2 ubin.
Hasilkan dua
RandomInteger
s antara 1 dan input kedua. Ini memilih ubin acak.Buat ubin itu putih. Menyimpannya dalam
i
.Ubin bergerak
Hasilkan dua bilangan bulat acak dari 0 hingga 1, dan simpan masing-masing dalam
t
danr
. Ini secara acak memilih arah.Tentukan fungsi
o
: komposisit
.r
kali baris .Berlaku
o
untuk input.Temukan kolom
i
(gambar putih).Kurangi satu dan temukan bilangan bulat acak antara 0 dan angka itu. Ini secara acak memilih berapa banyak ubin untuk dipindahkan.
Ketika jumlah ubin dikatakan terjadi sebelum
i
(gambar putih), ganti tempat mereka.Balikkan
o
fungsi dan terapkan itu ke hasil operasi di atas. Ini un-reverses dan un-transposes gambar.Perulangan dan Perakitan Gambar
Ulangi proses di atas (input ketiga) kali.
Satukan gambar.
sumber