Anda adalah pengusaha kereta api di Amerika Serikat abad ke-19 ketika kereta menjadi populer karena mereka adalah sarana paling efisien untuk mengangkut material dalam volume besar melalui darat. Ada kebutuhan nasional untuk rel kereta api dari pantai timur melalui beberapa tanah yang baru saja dijajah di barat.
Untuk mengakomodasi kebutuhan ini, pemerintah AS akan memungut pajak untuk mensubsidi jalur kereta api. Mereka telah berjanji untuk membayar uang kepada perusahaan kereta api Anda untuk setiap mil jalur yang dilalui. Karena meletakkan trek di daerah berbukit dan pegunungan lebih mahal daripada meletakkan trek di tanah datar, mereka menyesuaikan jumlah yang mereka berikan sesuai. Artinya, pemerintah akan membayar
- $ 5.000 per mil trek diletakkan di tanah datar
- $ 12.500 per mil trek diletakkan di tanah berbukit
- $ 20.000 per mil trek diletakkan di pegunungan.
Tentu saja, rencana ini tidak secara akurat mencerminkan berapa biaya sebenarnya untuk meletakkan trek.
Anda telah menyewa beberapa kartografer untuk menggambar peta bantuan dari wilayah tempat Anda akan meletakkan jalur untuk menganalisis ketinggian. Berikut ini salah satu peta tersebut:
S12321
121234
348E96
Setiap digit mewakili satu mil persegi tanah. S
adalah titik awal, E
adalah titik akhir. Setiap angka mewakili intensitas perubahan ketinggian di wilayah itu.
- Tanah bernomor 1-3 merupakan tanah datar.
- Tanah bernomor 4-6 merupakan tanah berbukit.
- Tanah bernomor 7-9 merupakan barisan pegunungan.
Anda, selama bertahun-tahun membangun rel kereta api, menilai bahwa biaya pembuatan rel (dalam dolar) memenuhi formula ini:
Cost_Per_Mile = 5000 + (1500 * (Elevation_Rating - 1))
Itu berarti membangun pada gradien ketinggian tertentu akan dikenakan biaya lebih banyak uang daripada yang diberikan pemerintah, kadang-kadang akan menguntungkan, dan kadang-kadang Anda hanya akan mencapai titik impas.
Misalnya, satu mil trek pada gradien ketinggian 3 membutuhkan biaya $ 8.000 untuk membangun, tetapi Anda hanya dibayar $ 5.000 untuk itu, sehingga Anda kehilangan $ 3000. Sebaliknya, membangun satu mil trek pada gradien elevasi 7 berharga $ 14.000, tetapi Anda dibayar $ 20.000 untuk itu: untung $ 6.000!
Berikut adalah contoh peta, serta dua jalur yang mungkin berbeda.
S29 S#9 S##
134 1#4 1##
28E 2#E 2#E
Jalur pertama biaya $ 30.000 untuk membangun, tetapi pemerintah membayar Anda $ 30.000 untuk itu. Anda tidak mendapat untung dari trek ini.
Di sisi lain, yang kedua biaya $ 56.500 untuk membangun, tetapi Anda dibayar $ 62.500 untuk itu. Anda mendapat untung $ 6.000 dari trek ini.
Tujuan Anda: diberi peta bantuan, temukan jalur yang paling menguntungkan (atau mungkin hanya yang paling murah) dari awal hingga akhir. Jika banyak jalur mengikat, salah satunya adalah solusi yang dapat diterima.
Detail Program
Anda diberi input teks yang dipisahkan dengan peta angka persegi panjang dan satu titik awal dan akhir. Setiap angka akan menjadi bilangan bulat secara inklusif antara 1 dan 9. Selain itu, input dapat diberikan sesuai keinginan Anda, sesuai alasan.
Output harus dalam format yang sama dengan input, dengan angka-angka di mana trek telah dibangun digantikan oleh hash ( #
). Karena peraturan sewenang-wenang yang diberlakukan oleh beberapa politisi yang berubah-ubah, jalur hanya bisa berjalan secara horizontal atau vertikal. Dengan kata lain, Anda tidak dapat mundur atau pergi secara diagonal.
Program harus dapat menyelesaikan dalam jumlah waktu yang wajar (yaitu <10 menit) untuk peta hingga 6 baris dan 6 kolom.
Ini adalah tantangan kode golf , sehingga program terpendek menang.
Saya punya contoh implementasi (non-golf) .
Contoh I / O
S12321
121234
348E96
S12321
######
3##E##
S73891
121234
348453
231654
97856E
S#3###
1###3#
3#####
######
#####E
sumber
4
dalam134
contoh peta6
?Jawaban:
Python, 307 karakter
P
mengambil jalan sebagianp
dan mengembalikan semua cara untuk memperpanjangnyaE
. Setiap jalur yang dikembalikan dipasangkan dengan nilainya sehinggamax
dapat menemukan yang terbaik.Memakan waktu sekitar 80 detik pada peta 6x6.
sumber
Python:
529482460 byteSolusi saya tidak akan memenangkan hadiah apa pun. Namun, karena hanya ada dua solusi yang diposting dan saya menemukan masalah yang menarik, saya memutuskan untuk tetap mengirim jawaban saya.
Sunting: Terima kasih kepada Howard untuk rekomendasinya. Saya telah berhasil mencukur banyak skor saya!
sumber
P
danM
hanya digunakan satu kali masing-masing sehingga merupakan ide yang baik untuk di-inline (untuk doa tunggal, ia bekerja di hampir semua kasus untuk dua kadang-kadang).m[c]!='S'
dapat disingkat menjadim[c]<'S'
, jugaabs(z)==1
keabs(z)<2
atau bahkan-2<z<2
.Ruby, 233 karakter
Pendekatan Ruby Brute-force yang berjalan dengan baik di dalam batasan waktu pada papan 6x6. Masukan harus diberikan pada STDIN.
Contoh:
sumber