Diberikan kuadrat positif, bilangan asli menulis sebuah program menemukan jalur horizontal dan vertikal dengan jumlah angka di sepanjang mereka menjadi maksimal. Sebuah horisontal jalan pergi dari kolom pertama untuk yang terakhir dan harus meningkatkan posisi kolom sebesar satu dalam setiap langkah. Sebuah vertikal jalan pergi dari baris pertama sampai terakhir dan harus meningkatkan posisi barisnya oleh salah satu di setiap langkah. Lebih jauh lagi, posisi baris dalam jalur horizontal dapat tetap sama atau berubah satu arah, demikian pula untuk jalur vertikal.
Sebagai ilustrasi, berikut ini bisa menjadi jalur yang valid:
Jalur berikut ini tidak valid, karena langkah mundur (dan tetap di baris yang sama di beberapa tempat):
Jalur berikut ini akan sama-sama tidak valid, karena itu mengubah posisi baris lebih dari satu dalam satu langkah:
Catatan: Solusinya harus berjalan dalam jumlah waktu yang dapat diterima.
Memasukkan
n baris input dengan n bilangan bulat positif yang dipisahkan spasi, masing-masing diberikan pada input standar. 2 ≤ n ≤ 40. Setiap baris diakhiri oleh satu baris. Jumlahnya cukup kecil sehingga jumlah maksimumnya pas dengan integer bertanda 32-bit.
Keluaran
Jumlah maksimum jalur horizontal dan vertikal (dalam urutan itu) dipisahkan oleh satu ruang.
Masukan sampel 1
1 2
1 2
Output sampel 1
3 4
Masukan sampel 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 4 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 4 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Output sampel 2
37 35
Masukan sampel 3
683 671 420 311 800 936
815 816 123 142 19 831
715 588 622 491 95 166
885 126 262 900 393 898
701 618 956 865 199 537
226 116 313 822 661 214
Keluaran sampel 3
4650 4799
Untuk kenyamanan Anda, kami telah menyiapkan beberapa test case di bash (terima kasih kepada Ventero ) dan PowerShell yang dapat Anda jalankan melalui program Anda. Doa adalah:, <test> <command line>
jadi sesuatu seperti ./test python paths.py
atau ./test.ps1 paths.exe
. Selamat bersenang-senang :-)
bash
skrip uji! Saya berharap semua kode golf datang dengan itu.Jawaban:
GolfScript - 49 Nabb karakter yang disempurnakan
51 karakter50karakter yangbenar-benar diperlukan + 3 slackers yang hanya mengerjakan tugas 156 sebagian besar karakter redundan51 solusi:
53 solusi:
Metode ini bekerja pada dua baris sekaligus, satu berisi jumlah maksimum yang dicapai pada setiap titik, dan satu lagi berisi baris berikutnya.
a / 14: Ulangi dua kali, sekali untuk setiap hasil.
8: Ambil baris pertama dari input dan alihkan di belakang array input, ini sekarang set pertama jumlah maksimum.
b / 13: Ulangi setiap baris yang tersisa dalam array.
9: Masukkan 0 di awal jumlah maksimum.
c / 12: Iterasi setiap elemen dari garis.
10: Buat salinan jumlah maksimum dengan elemen pertama dihapus.
11: Ambil 3 elemen pertama dari jumlah maksimum, urutkan dan tambahkan yang terbesar ke elemen baris saat ini.
56 solusi:
1: Dari input ke array array dalam 9 karakter, sebenarnya itu bisa dilakukan hanya dengan 1, tapi saya memecahkan kunci itu jadi ini harus dilakukan.
2: 4 karakter hanya untuk membuat salinan yang dialihkan.
3: Array of 99 0s dalam 5 karakter, mungkin bisa dilakukan dengan cara yang lebih cerdas, tapi aku terlalu banyak merokok untuk mencari cara.
4: Loop ganda yang terlalu rumit yang mengulangi setiap elemen input dan melakukan logika fuzzy atau sesuatu seperti itu untuk menghasilkan hasilnya. Nabb mungkin akan membuat sesuatu yang setara dalam sekitar 3½ karakter.
5: Sekarang hasilnya ada di sana, di dalam array yang ada, sepotong kode konyol ini hanya ada untuk mengeluarkannya (dan membuang sepotong sisa makanan (dan alihkan hasilnya ke tempatnya)).
6: Ini adalah perintah yang sangat sederhana sehingga jumlah karakternya mungkin negatif dalam solusi optimal. 7: Pada titik ini program ini benar-benar selesai, tetapi karena kecerobohan dalam kode sebelumnya outputnya dalam urutan yang salah dan tidak memiliki ruang, jadi begini beberapa bit lagi sia-sia.
sumber
{}*
bukan(\{}%
.J, 91
95Saya menolak untuk melakukan IO, menurunkan skor saya secara dramatis.Lewati semua tes dalam harness uji (meskipun hanya bekerja jika input berakhir dengan garis yang berakhir, seperti pada harness uji).Saya menghapus penanganan untuk ujung jalur Windows, karena Chris menyarankan bahwa itu tidak perlu. Versi multi-platform akan
a=:".;._2 toJ(1!:1)3
menjadi baris pertama.Penjelasan:
f
memberikan pasangan solusi dengan memanggil p secara normal dan dengan input dialihkan (|:
).p
mengambil maksimum (>./
) total baris dari penerapanc
antara setiap baris (c/
)c
membutuhkan dua baris (x dan y). Ini menambahkan x ke masing-masing y, y bergeser ke atas 1 sel (1|.!.0 y
), dan y bergeser ke bawah 1 sel (_1|.!.0 y
). Kemudian dibutuhkan maksimum tiga alternatif untuk setiap baris. (>./
). Sisanya adalah peringkat [sic] - Saya tidak yakin apakah saya melakukannya dengan benar.sumber
Haskell: 314 karakter yang diperlukan
Catatan: ini membutuhkan modul Data.Vector . Saya tidak yakin apakah itu termasuk dalam platform Haskell atau tidak.
Versi tidak disatukan:
Solusi ini menggunakan kemalasan, bersama dengan Data.Vector , untuk memoisasi. Untuk setiap titik, solusi untuk jalur maksimum dari itu sampai akhir dihitung, kemudian disimpan dalam sel Vector
m
dan digunakan kembali ketika dibutuhkan.sumber
Ruby 1.9, 155 karakter
Solusi langsung yang melewati semua testcases.
sumber
Haskell, 154 karakter
sumber
zipWith3
memperpendek kode?foldl1 max
, yang menambahkan karakter tetapi memungkinkan Anda untuk faktor foldl1 dan maks, yang seharusnya menghemat karakter.maximum.foldl1
,max
, Danmax
--vs--f=foldl1;m=max;
,f m.f
,m
, danm
. - atau 20 lawan 22. Jadi, tidak, itu tidak menghemat.m=max
. Bagaimana dengan zipWith3?J, 109 + 10 = 119 karakter
Jalankan dengan
tr
:Seperti biasa dalam J, sebagian besar kode adalah untuk input / output. Kode "aktual" adalah 65 karakter:
Lewati semua kasus uji
sumber
#!/usr/bin/env jconsole
di atas file dan atur flag yang dapat dieksekusi.Python, 149
Jika saya hanya menghitung jalur terpendek vertikal atau horizontal,
itu bisa dilakukan di tempat, menghemat sekitar sepertiga dari byte.
sumber
Python, 204 karakter
sumber