SKOR YANG DIPERBARUI : Karena tantangan ini lebih sulit daripada yang saya perkirakan, saya telah menyesuaikan skor. Suatu program yang dapat memecahkan input satu mirror adalah jawaban yang valid. Program yang lebih canggih mendapatkan bonus untuk skor mereka.
Ada beberapa teka-teki pada PPCG untuk menemukan jalur laser di dalam kotak cermin. Dalam teka-teki ini, Anda harus membuat sekotak cermin agar sesuai dengan sejumlah tujuan laser.
Anda diberi kotak dan spesifikasi tempat laser masuk dan keluar. Program Anda perlu menempatkan persis N cermin dua sisi dalam kotak untuk memenuhi spesifikasi. Cermin harus miring pada 45 derajat tetapi dapat miring ke depan atau miring ke belakang.
Memasukkan
Program Anda harus menerima kisi kotak melalui STDIN, argumen baris perintah, atau file dalam contoh format berikut:
+--G--+ +abcde+
G | f/////d
| /| a// c
+-----+ f |
+-b-e-+
Pasangan huruf ([a-zA-Z] dapat digunakan) menunjukkan input / output hingga 52 laser. Di dalam kotak akan ada N /
mirror. Dimensi kotak akan menjadi 3 <= W, H <= 200. Kotak terbuat dari +|-
karakter. Mungkin ada sejumlah mirror di dalam kotak termasuk nol.
Keluaran
Keluaran harus sesuai dengan input, kecuali /
karakter dapat dipindahkan dan / atau diubah menjadi \
karakter. Program Anda harus mengirim string kotak cermin yang benar ke STDOUT atau file, mengikuti baris baru opsional. Jika tidak ada penempatan mirror yang dapat memenuhi spesifikasi input, output Impossible\n
. Contoh solusi yang mungkin:
+--G--+ +abcde+
G / | f \ \ d
| | a/ \ c
+-----+ f / //|
+-b-e-+
Contoh pengujian
Memasukkan:
+abcdefghijklmnopqrstuvwxyA-+
|/////////////// |
|/////////////// |
| |
+-Abcdefghijklmnopqrstuvwxya+
Contoh output:
+abcdefghijklmnopqrstuvwxyA-+
|\ \|
|/ / |
|\\\\\\\\\\\\\\\\\\\\\\\\\\ |
+-Abcdefghijklmnopqrstuvwxya+
Penilaian (DIPERBARUI)
Ini adalah kode-golf dengan bonus. Anda harus mencalonkan dengan jawaban Anda berapa banyak mirror yang dapat diselesaikan oleh program Anda (N). Skor Anda adalah panjang program Anda dalam byte yang dibagi dengan N. Ini memungkinkan orang untuk masuk dengan program sederhana, tetapi memberi penghargaan lebih banyak programmer ambisi dengan bonus.
Celah standar tidak diijinkan.
* 2^30
komponen di sana jugaJawaban:
C # -
897862 byteMenemukan bug serius dengan meletakkan cermin di tempat yang tidak mungkin. Semoga berhasil, semoga! Juga melakukan golf ringan, tidak bisa meninggalkan loop sementara di sana ... memalukan.
Program lengkap, mengambil input dari STDIN, output ke STDOUT.
Ini sangat menyenangkan, bisa mengatasi masalah 7 dengan 5 (dan ketika Anda menghapus salah satu cermin, membuatnya tidak mungkin), butuh sekitar 1 jam untuk menyelesaikan 30 dengan 5.
7 oleh 5 Contoh:
Versi yang mustahil:
Sesuatu yang berbeda (program tidak melihat tata letak cermin asli):
30 oleh 5 solusi:
Ia melihat setiap sumber laser secara bergantian, dan membangun rute yang valid untuk itu (jika bisa), dan kemudian bergerak ke yang berikutnya. Ini adalah pencarian mendalam-pertama yang cukup sederhana, yang harus mengetahui sumber laser (target) yang dilihatnya, berapa banyak cermin yang tersisa untuk ditempatkan, sel saat ini "di", arahnya bergerak, dan setiap sel sudah dikunjungi (sehingga tidak menaruh cermin di tempat yang sudah ada). 3 terakhir digunakan untuk merakit jalur untuk target saat ini, dan pada reset ketika target berubah. Setelah semuanya terhubung dengan laser, ia melanjutkan dan mengisi setiap celah yang tidak perlu dikosongkan (alasan lain yang perlu diketahui di mana saja ia dikunjungi).
Ketika membangun rute, ia lebih memilih "maju" daripada memasukkan cermin, dan ketika itu melakukannya, ia lebih menyukai cermin "\" - ini paling baik dilihat dalam contoh "sesuatu yang berbeda" di atas, di mana ia melewatkan sel pertama di bawah paling atas 'a', maka terus mengisi "\" jika dapat menemukan solusi dengan satu, jika tidak, "/" (secara alami, jika melewatkan sel pertama mengakibatkan ia tidak dapat menemukan solusi, maka itu akan mundur dan coba letakkan cermin di sana).
sumber
Python,
671654 byteBukan solusi, tetapi upaya, baca di bawah ini.
Saya tidak menggunakan golf ini secara maksimal, karena saya tidak puas dengan solusinya.
V
memvalidasi solusi yang diberikan dengan berjalan bidangF
untuk setiap karakterC
yang ditemukannya di sampingan. Solusi dihasilkan secara acak. Itu jelek, itu berfungsi untuk entri1, tetapi membutuhkan banyak waktu untuk entri lain. Karena secara acak mencoba solusi, saya tidak menganggap ini sebagai solusi aktual untuk masalah yang diberikan; tetapi mungkin membantu orang lain.Lari:
echo "entry1.txt" | python script.py
sumber