Anda akan diberikan dua buah input: string dalam format yang dikodekan run-length mendefinisikan trek yang sedang berjalan, dan huruf kapital yang mewakili jalur untuk memulai. Misalnya, string "3a4A6b5B" berkembang menjadi "aaaAAAAbbbbbbbbBBBBBB". Anda kemudian menggunakan string yang diperluas untuk membuat trek, seperti:
A) aaaAAAA
B) bbbbbbBBBBB
Ini adalah trek dengan dua jalur. Huruf kecil mewakili udara. Anda tidak bisa berlari di udara! Huruf besar mewakili jalan yang bisa Anda jalankan. Tujuan Anda untuk tantangan ini adalah, diberi huruf besar, menampilkan seberapa jauh pembalap yang mulai berlari di jalur itu. Pembalap diizinkan untuk berpindah jalur jika ada bagian jalan langsung di atas atau di bawahnya. Mereka juga diizinkan berlari mundur! Pada trek khusus ini, outputnya adalah 0 untuk setiap input huruf, karena tidak satu pun track memiliki jalan yang dapat dijalankan di posisi 1.
Contoh:
Input: "4A5B4c3C", "A"
Kode ini diperluas ke trek yang terlihat seperti ini:
A) AAAA
B) BBBBB
C) ccccCCC
Output untuk contoh ini adalah 7 , karena pelari mulai dari lajur A bisa turun ke lajur B, dan kemudian lajur C, dan berakhir di posisi ke-7.
Input: "4A2B3D", "D"
Jalur:
A) AAAA
B) BB
C)
D) DDD
Outputnya adalah 3 , karena pelari yang memulai lane D tidak memiliki cara untuk mencapai lane B atau A
Input: "4A4a4A3b6B5C", "A"
Jalur:
A) AAAAaaaaAAAA
B) bbbBBBBBB
C) CCCCC
Outputnya adalah 12 , karena runner pada A dapat beralih ke B, dan kemudian kembali ke A di akhir. Jarak maksimum untuk "C" juga 12. Untuk "B" adalah 0.
Input: "12M4n10N11O", "M"
Jalur:
M) MMMMMMMMMMMM
N) nnnnNNNNNNNNNN
O) OOOOOOOOOOO
Contoh sederhana dengan run-length multi-digit. Output adalah 14 .
Input: "4A5B1b2B4c3C", "A"
Jalur:
A) AAAA
B) BBBBBbBB
C) ccccCCC
Outputnya adalah 8 , karena runner di A bisa turun ke B, lalu turun ke C, lalu kembali ke B. (Terima kasih kepada FryAmTheEggman untuk contoh ini.)
Input: "1a2A2a2B1c1C1d3D", "B"
Jalur:
A)aAAaa
B)BB
C)cC
D)dDDD
Output adalah 4 . Pelari harus memeriksa kedua jalur dua melihat mana yang lebih jauh. (Terima kasih kepada user81655 untuk contoh ini.)
Input: "2A1b1B2C1D3E", "A"
Jalur:
A) AA
B) bB
C) CC
D) D
E) EEE
Output adalah 3 . Anda harus berlari mundur untuk mencapai tujuan terjauh. (Sekali lagi, terima kasih kepada user81655 untuk contoh ini.)
Catatan:
- Jika sebuah trek tidak memiliki huruf pada posisi tertentu, itu dianggap sebagai udara juga. Dengan demikian, jika inputnya adalah "Q" dan tidak ada jalan yang ditempatkan di jalur "Q" maka outputnya harus 0 .
- Ada dua potong input. Yang pertama adalah string yang dikodekan run-length. Yang kedua adalah huruf kapital (Anda dapat menggunakan string atau tipe data char untuk ini.) Untuk keterbacaan, harus ada beberapa pemisah yang masuk akal antara input ini (spasi, baris baru, tab, koma, semi-colon).
- String yang dikodekan run-length akan selalu daftar elemen dalam urutan abjad
- Panjang jalur terpanjang yang paling panjang adalah 1000. Oleh karena itu, output terbesar yang mungkin adalah 1000.
Lacak Generator:
Untuk menghormati jawaban pertama kami, berikut adalah track generator. Cobalah untuk menemukan sesuatu untuk menghilangkan jawaban saat ini! (Catatan: Hanya karena generator tidak menampilkan pesan kesalahan tidak berarti kode lagu Anda valid. Lihat contoh di atas untuk formulir yang tepat.)
function reset() {
var t = document.getElementById("track");
t.innerHTML = "";
for(var i = 0;i<26;i++) {
var c = String.fromCharCode(i+65);
t.innerHTML += "<div><span>"+c+") </span><span id='"+c+"'></span></div>";
}
}
function rand() {
var track = "";
for(var i = 0;i<26;i++) {
var blocks = Math.floor(Math.random()*4);
var start = Math.floor(Math.random()*2);
for(var j = 0;j<blocks;j++) {
var letter = String.fromCharCode(65+i+32*((start+j)%2));
var length = Math.floor(Math.random()*4)+1;
track += length+letter;
}
}
document.getElementById("code").value = track;
}
function gen() {
var s = document.getElementById("code").value;
var check = s.match(/(\d+[A-Za-z])+/);
if(check == null || check[0]!=s) {
alert("Invalid Track");
return false;
}
reset();
var n = s.match(/\d+/g);
var o = s.match(/[A-Za-z]/g);
for(var i = 0;i<n.length;i++) {
var c = o[i].toUpperCase();
document.getElementById(c).textContent += o[i].repeat(n[i]);
}
return true;
}
<body onload="reset()">
Track: <input type="text" id="code" size="75%" /><input type="submit" onclick="gen()" /><input type="button" value="Random Track" onclick="rand()" /><code id="track"/>
</body>
sumber
4A2B3D
dapat dihilangkan? Misalnya, menambahkan0c
? Jika tidak, apakah itu diharapkan ketika mengatakan1A1Z
diberikan, jalur BY diasumsikan ada (tetapi kosong)?12M4n10N11O
contoh, keluaran 14, kemudian palsu: jalan mulai terpanjang di M0 dan berakhir pada C0, untuk panjang 25.Jawaban:
Perl,
231219203192189 bytetermasuk +1 untuk
-p
Kurang bermain golf:
Lari
Simpan kode di atas dalam file (katakanlah
231.pl
). Masukan dalam bentuk(\d+\w)+ *\w
. Contoh: memasukkan trek4A5B4c3C
dan jalurA
:TestSuite
(tidak golf)
@L=map{[/./g]}@L
postprocessing.if
menggunakan .map
for
sumber
JavaScript (ES6),
298334 bytePenjelasan
Pada dasarnya solusi ini memperlakukan trek sebagai sebuah labirin. Ia menemukan di mana semua ubin yang mungkin bagi pelari untuk mencapai berada dan mengembalikan nilai terbesar dari indeks X yang ditemukan.
Hal pertama yang dilakukannya adalah mendekode string input ke dalam array baris. Alih-alih menggunakan huruf, itu mengubah huruf kapital menjadi a
1
dan huruf kecil menjadi a0
. Peta yang dihasilkan akan terlihat seperti ini:Setelah ini membuat ubin pertama dari trek awal
2
(hanya jika sudah1
) dan loop melalui setiap ubin memeriksa ubin yang berdekatan untuk a2
. Jika1
memiliki yang berdekatan2
itu menjadi2
. Peta di atas akan menjadi ini jika pelari memulai pada baris pertama:Indeks X tertinggi untuk a
2
menjadi hasilnya.Saya membuat pengawasan yang sangat kecil ketika saya melakukan versi awal ini dan biayanya 36 byte untuk meretasnya sampai bekerja, jadi mungkin ada banyak perbaikan yang bisa dilakukan untuk ini. *mendesah*
Tidak disatukan
Uji
Bonus: Output termasuk peta yang diuraikan!
sumber