Anda adalah karyawan di toko kelontong baru, Half Foods, dan ini adalah hari sebelum Paskah Thanksgiving Natal . Karena toko akan penuh dengan pelanggan yang terburu-buru untuk mendapatkan bahan makanan mereka, toko membutuhkan manajer lalu lintas untuk mengirim semua orang ke jalur yang sesuai. Menjadi malas, Anda ingin mengotomatisasi ini sehingga Anda dapat pergi ke toko sebelum semua orang mengambil semua kalkun ham apa pun. Namun, yang Anda miliki hanyalah ponsel Anda, dan mengkodekan program-program panjang itu sungguh menyusahkan - jadi Anda harus menghilangkan keterampilan kode- ninja golf Anda .
Tantangan
Mari kita visualisasikan toko kelontong di grid dua dimensi. Berikut contoh kisi untuk dibedah:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
Kotak dimulai dengan e
, yang mewakili "outlet" ke seluruh toko. Setiap generasi, semua outlet di grid menelurkan pembelanja ( s
) langsung di bawah. Pembeli bergerak ke bawah setiap generasi sampai mereka mencapai Anda ( Y
). Ketika seorang pembelanja mencapai barisan yang sama dengan Anda, Anda harus memindahkan pembelanja ke bagian awal garis dengan jumlah pembeli yang paling sedikit di dalamnya. Seorang pembelanja segera pindah ke garis ketika mereka akan pindah ke barisan dengan Y
, tidak ada generasi di antara keduanya. Garis diwakili oleh #
s - kolom setelah #
s adalah garis. Pembeli pergi ke ujung garis (diwakili oleh jalan keluar x
), dan kemudian berubah menjadi angka acak antara 1
dan5
. Setiap generasi, Anda harus mengurangi pembelanja bernomor oleh 1
- ketika pembelanja akan mencapai 0
, mereka selesai memeriksa dan mereka meninggalkan toko.
Diberikan masukan dari kisi-kisi seperti ini, output generasi berikutnya dari toko kelontong (pindahkan semua pembeli ke bawah secara bersamaan, redirect pembeli, dan minta mereka pergi jika sudah selesai).
Sampel
Memasukkan:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Keluaran:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Memasukkan:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Keluaran
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Memasukkan:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Kemungkinan) Output:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Memasukkan:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Keluaran:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Memasukkan:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Keluaran:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Ini kode-golf , jadi kode terpendek menang.
Jawaban:
Python 2 ,
477463453449423402397396393 byteCobalah online!
Masih bekerja untuk bermain golf ini tetapi ini memecahkan masalah untuk saat ini
sumber
C ++,
898896885841 byteSangat panjang untuk dikodekan ... tetapi ada di sana
-2 byte terima kasih kepada Conor O'Brien
-45 byte terima kasih kepada Zacharý
Jadi ... beberapa detail:
Anda harus melewati
std::vector<std::string>
(mereka akan diubah ukurannya pada panjang yang sama dengan string terpanjang)Semua garis
#
dimulai pada koordinat y (vertikal) yang sama, memiliki panjang yang sama, dan berakhir pada koordinat y (vertikal) yang samaAsumsikan bahwa grid memiliki setidaknya 1
#
baris atau lebih, punya satu hurufe
(satu outlet) di bagian atas, satu hurufY
Asumsikan bahwa input adalah output yang valid sehingga pembeli yang menunggu untuk dialihkan akan selalu satu per satu
Sunting: Baru saja melihat di komentar jawaban Wheat Wizard bahwa itu harus mendukung beberapa pintu masuk, saya akan terus bekerja pada itu
sumber
#define C(e)i[j].find(e)!=string::npos
?C(e)
menjadi#define C(e)if(i[j].find(e)!=string::npos
dan mengubah panggilan yang sesuai.length()
hanya diterapkan padaa
, Anda dapat mengubahL
untuk didefinisikan sebagaia.length()
, memodifikasi panggilan yang sesuai. Selain itu, Anda dapat memindahkanusing namespace std;
ke bawah, menghemat satu byte dengan menghapus baris baru