Ini golf kode. Pemenangnya adalah kode yang valid dengan jumlah byte terkecil.
Tantangan
Diberikan input M dan N , lebar dan tinggi kotak persegi panjang, menghasilkan poligon yang memenuhi berikut:
- Tepi poligon hanya terdiri dari tepi persegi: tidak ada tepi diagonal - semuanya vertikal atau horizontal.
- Poligon tidak memiliki lubang: setiap kotak di luar poligon dapat dicapai dengan langkah ortogonal pada kotak di luar poligon, mulai dari kotak di luar poligon pada batas luar persegi panjang.
- Poligon tidak memiliki persimpangan-sendiri: dari pertemuan tepi persegi pada titik, tidak lebih dari 2 dapat menjadi bagian dari perimeter poligon.
- Poligon terhubung: setiap kotak dalam poligon harus dapat dijangkau dari kotak lain dalam poligon melalui langkah ortogonal yang tetap berada dalam poligon.
- Poligon memiliki perimeter maksimum yang mungkin: sesuai dengan rumus di bawah ini.
Kode Anda harus berfungsi untuk M dan N dari 1 hingga 255.
Formula untuk batas maksimum
Tantangannya di sini adalah menemukan poligon yang paling golf dengan batas maksimum. Batas maksimum itu sendiri selalu ditentukan oleh rumus:
Ini benar karena untuk perimeter maksimum, setiap titik persegi harus pada perimeter. Untuk jumlah simpul yang ganjil, ini tidak mungkin dan yang terbaik yang bisa dicapai adalah satu simpul lebih sedikit (karena perimeter selalu genap).
Keluaran
Keluarkan bentuk sebagai string karakter yang dipisahkan baris baru ( N baris tepat karakter M ). Di sini saya menggunakan ruang untuk kotak di luar poligon, dan '#' untuk kotak di dalam poligon, tetapi Anda dapat menggunakan dua karakter yang berbeda secara visual, asalkan artinya konsisten untuk semua input.
Anda dapat memasukkan hingga satu baris baru dan satu baris baru.
Jika Anda mau, Anda bisa menghasilkan baris M dengan karakter N persis , dan Anda dapat memilih output M demi N untuk beberapa input dan keluaran N oleh M untuk yang lain.
Contohnya
Tidak valid karena lubang:
###
# #
###
Tidak valid karena persimpangan (menyentuh secara diagonal - sebuah simpul dengan 4 tepi persegi pada perimeter) dan, kebetulan, sebuah lubang:
##
# #
###
Tidak valid karena terputus:
#
# #
#
Poligon valid perimeter maksimum:
# #
# #
###
Kredit
Saya awalnya meremehkan seberapa cepat nilai perimeter maksimum dapat dihitung, dan hanya akan meminta nilai itu sebagai output. Terima kasih kepada orang-orang yang sangat membantu dalam obrolan karena menjelaskan cara mengerjakan batas maksimum untuk N dan M yang sewenang-wenang dan membantu menjadikannya sebuah tantangan yang akan bertahan selama lebih dari satu jawaban ...
Secara khusus terima kasih kepada:
Sparr , Zgarb , feersum , jimmy23013 .