Inilah yang saya pikir akan menjadi pertanyaan ini, sebelum saya sepenuhnya membacanya.
Sekelompok pegolf kode masuk ke The Nineteenth Bite Pizzeria dan memesan pizza. Itu datang dalam bentuk yang tidak teratur, terbuat dari kotak unit. Tugas Anda adalah membantu mereka memotongnya menjadi irisan yang identik. Artinya, irisan harus memiliki bentuk dan ukuran yang sama persis; mereka dapat diputar tetapi tidak terbalik / dicerminkan. Misalnya, jika mereka adalah potongan Tetris, mereka harus jenis yang sama, Anda tidak dapat menggunakan potongan L dan sepotong J.
Memasukkan
Anda akan diberi jumlah orang dalam grup di baris pertama (selalu bilangan bulat dari 2 hingga 10, inklusif), diikuti oleh matriks persegi karakter '' (spasi) dan '#', yang mewakili pizza. Semua karakter '#' terhubung melalui tepinya. Jumlah karakter '#' dijamin kelipatan dari jumlah orang.
Keluaran
Anda harus mencetak matriks yang sama, dengan setiap karakter '#' diganti dengan angka dari 0 hingga n-1 (n menjadi jumlah orang). Setiap digit harus menandai irisan. Bentuk irisan harus terhubung melalui tepi persegi. Penomoran irisan tidak perlu dalam urutan tertentu. Jika ada banyak cara untuk memotong pizza, salah satunya dapat diterima.
Jika tidak mungkin memotong pizza seperti yang diperlukan, Anda harus mencetak string "Tidak ada pizza untuk Anda!" sebagai gantinya.
Mencetak gol
Ini kode golf. Skor Anda akan menjadi jumlah byte dalam program. Karakter akan dihitung melalui pengkodean UTF-8 mereka. Skor terendah menang.
Contohnya
Memasukkan:
3
#
###
####
#
Keluaran:
0
100
1122
2
Memasukkan:
4
###
# #
###
Keluaran:
001
2 1
233
Memasukkan:
2
# #
######
Keluaran:
No pizza for you!
Memasukkan:
5
#
####
#####
#####
#####
####
#
Keluaran:
0
1000
21110
32221
43332
4443
4
Memasukkan:
4
#
####
######
#####
####
Keluaran:
0
1000
111203
12233
2233
Persyaratan
- Anda harus menulis program lengkap yang membaca dari input standar dan menulis ke output standar.
- Program harus dapat dijalankan di Linux menggunakan perangkat lunak yang tersedia secara bebas.
- Program Anda harus menyelesaikan masing-masing contoh di atas dalam waktu kurang dari 1 menit pada komputer modern.
- Tidak ada celah standar.
sumber
Jawaban:
Kode PHP,
1808971 byteImplementasi cepat dan kotor di PHP. Brute-force pertama semua bentuk slice yang mungkin, selanjutnya brute-force semua posisi dan orientasi irisan.
Pemakaian:
cat pizza.txt | php pizza.php
Sunting: mengurangi ukuran kode lebih dari 45% dengan algoritma rewring menggunakan rekursi daripada loop bersarang. Namun, ini memakan memori (dan pizza ;-)). Pizza yang lebih besar dari 8x8 mungkin akan kehabisan memori. Varian loop bersarang dapat dengan mudah menangani ukuran apa pun, tetapi dua kali ukuran kode.
Kode tidak terdokumentasi dan terdokumentasi
Di bawah ini adalah kode asli yang didokumentasikan. Untuk menjaga kewarasan saya, saya bekerja dengan kode sumber lengkap, dan menulis skrip minifier sederhana untuk menghapus pernyataan seperti
assert()
danerror_reporting()
, menghapus tanda kurung yang tidak perlu, mengganti nama variabel, fungsi dan konstanta untuk menghasilkan kode golf di atas.sumber
define('_',98)
, bukankah itu bertentangan denganfunction _
? Saya tidak tahu php jadi saya tidak tahu ...