pannenkoek2012 bertujuan untuk menyelesaikan Super Mario 64 dengan sesedikit mungkin menekan tombol A, yang membuat Mario melompat. Setiap "Pers" terdiri dari tiga bagian:
- Menekan tombol
- Memegangnya untuk waktu yang lama
- Melepaskannya
Lihat video ini (1:15 - 3:23) untuk penjelasan hebat yang mencakup gambar di atas. (Namun, tantangan ini tidak akan menggunakan terminologi setengah tekan dan akan menempatkan hambatan yang mengharuskan pelepasan A.)
Tugas:
Diberi urutan hambatan yang membutuhkan penekanan (P), menahan (H), atau melepaskan (R) tombol A, menghasilkan jumlah penekanan terkecil yang diperlukan untuk mengatasinya dalam urutan yang diberikan. Tombol A pada awalnya tidak ditahan.
Dinyatakan secara formal: diberi string S karakter PHR
, pertimbangkan string bentuk (PH*R)*
yang berisi S sebagai urutan, dan hasilkan jumlah terkecil yang mungkin P
dalam string tersebut. Atau, alternatifnya, temukan potongan terkecil dari bentuk P?H*R?
yang dapat dibagi S.
Contoh
Mari kita lihat inputnya RHRPHHHR
. Tombol A mulai tidak ditahan, jadi untuk mengatasi kendala awal R
diperlukan tombol yang ditekan lalu dilepaskan (tekan # 1). Selanjutnya kita diharuskan menahan tombol H
, yang sekali lagi mengharuskannya ditekan (tekan # 2). Kemudian, kemudian dapat dirilis setelahnya untuk memuaskan R
setelahnya. Akhirnya, sisanya PHHHR
dapat dipenuhi dengan sekali tekan (tekan # 3) diikuti dengan menahan HHH
dan melepaskan R
. Jadi, jumlah output adalah 3.
Cara lain untuk melihatnya, adalah bahwa kita dapat membagi string input menjadi 3 bagian bentuk di PHH..HHR
mana huruf dapat dihilangkan.
R
HR
PHHHR
Masukkan format
Input akan berupa daftar atau rangkaian elemen yang mewakili pers, tahan, dan lepaskan sebagai pilihan Anda:
P, H, R
p, h, r
1, 2, 3
0, 1, 2
cocok dengan urutan yang diberikan. Masukan tidak akan kosong.
Kasus uji:
P 1
H 1
R 1
HP 2
RHP 3
HHR 1
PHRH 2
RHRPHHHR 3
HHHHHH 1
PPRRHHPP 6
HPPRHRPRHPPRHPPHRP 12
PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP 28
Papan peringkat:
sumber
Jawaban:
Retina , 9 byte
Cobalah online!
sumber
Pyth , 13 byte
Coba di sini! atau Verifikasi semua kasus uji.
Perhatikan bahwa
1
juga berfungsi sebagai pengganti3
.Bagaimana itu bekerja?
Lebih lanjut tentang regex:
sumber
Jelly , 10 byte
Rantai monadik mengambil daftar (
P,H,R : 0,1,2
opsi) dan mengembalikan bilangan bulat, hitungan.Cobalah online! atau lihat test-suite
Bagaimana?
Efektif bekerja dengan mendapatkan semua pasangan yang berdekatan maka menghitung setiap yang tidak "pasangan kelanjutan" (
PR
,PH
,HR
, atauHH
) dan menambahkan satu.Solusi 11 byte sebelumnya:
Cobalah online! atau lihat test-suite
Bagaimana?
Bekerja seperti di atas, tetapi dengan cara yang sama sekali berbeda ...
dan yang lainnya, sekali lagi sangat berbeda:
(tambahkan 19 untuk masing-masing, kemudian untuk pasangan yang berdekatan melakukan eksponensial, modulo dengan 13, modulo dengan 2, jumlah dan tambahkan satu).
sumber
Batch, 69 byte
Mengambil input sebagai daftar parameter baris perintah 0-diindeks, tetapi Anda dapat menggunakan daftar huruf
p, h, r
dalam huruf besar atau kecil jika Anda mengetikset /a p=0, h=1, r=2
pertama. Penjelasan:b
mempertahankan input terakhir (default ke2
untuk dirilis) dann
jumlah penekanan. Setiap input menambahkan pers jika input terakhir adalah rilis atau input saat ini adalah pers.sumber
set
dapatkah mengatur beberapa variabel sekaligus? Berguna untuk tahu.set /a
adalah evaluasi aritmatika, jadi selama semua variabel yang ingin Anda atur adalah numerik, Anda bisa menggunakan operator koma untuk menyatukan ekspresi penugasan.Python 2, 44 byte
Penggunaan P-> 1 H-> 2 R-> 3
sumber
Deorst , 11 byte
Cobalah online!
Menggunakan regex Tn. Xcoder
sumber
Japt, 11 byte
Cobalah | Periksa semua test case
è
menghitung jumlah kecocokan RegEx di input danÉ
mengurangi 1.sumber
Python 2 , 48 byte
Cobalah online!
Dibawa
0,1,2
sebagai input.sumber
Sekam ,
65 byteCobalah online! Input adalah daftar selesai
0,1,2
(tautan TIO menggunakan huruf untuk memudahkan penyalinan salinan kasus uji).Penjelasan
Saya menggunakan ide umum yang sama dengan jawaban Jonathan Jonathan Allan's : berpisah pada kejadian "pasangan diskontinuitas" PP, HP, RH, RR dan RP, dan hitung blok yang dihasilkan. Dalam pengkodean 0,1,2, pasangan ini adalah persisnya yang elemen kirinya adalah 2 atau elemen kanan adalah 0.
sumber
Javascript (ES6), 30 byte
sumber
Haskell , 36 byte
Cobalah online!
Menggunakan
0,1,2
pengodean.sumber
Jelly , 10 byte
Cobalah online! atau Test suite! (
DicuriDipinjam dari Jonathan.)Alternatif:
Cobalah online!
Jelly , 11 byte
Disimpan 1 byte dengan bantuan dari caird coinheringaahing.
Cobalah online!
sumber
μ
ketigaKotlin , 36 byte
Yg diperindahkan
Uji
TIO
TryItOnline
sumber
J ,
1817 byte-1 Terima kasih kepada @FrownyFrog
Mengambil input dalam bentuk
0,1,2
. Fungsi helper pada TIO mengubah kasus uji ke formulir ini.Cobalah online!
Logika perbandingannya mungkin masih bisa golf. Aku memutar otakku menjadi simpul, mencoba memikirkan pernyataan yang lebih setara dan lebih pendek.
Penjelasan (solusi sebelumnya)
Satu-satunya perbedaan antara solusi saat ini dan yang sebelumnya adalah bagaimana perbandingan dihasilkan. Solusi saat ini secara eksplisit membandingkan elemen-elemen yang berdekatan dengan mengimbangi array dan solusi sebelumnya membandingkan elemen-elemen yang berdekatan dengan melihat infiks 2.
Ini akan jauh lebih bersih jika dua pegangan tidak melakukan apa pun. Kode mengambil infiks dua dan memeriksa apakah tidak naik dan bukan dua terus. Jika ini masalahnya, maka kami menambahkan satu ke jumlah akhir kami. Kami harus menambahkan 1 pada bagian akhir karena kami menonaktifkannya dengan cara lain (atau Anda dapat menambahkan
_
atau nilai lebih dari 2).Cara memeriksa apakah infiks adalah dua tahan adalah dengan mengalikan dua nilai bersama-sama dan melihat apakah itu satu (dua tahan adalah
1 1
).sumber
1+1#.}:(<+:1=*)}.
lebih pendek.1+1#.0=}.*2-}:
Vim +
wc
, 25 byte␊
adalah kunci kembali dan␘
adalah Ctrl+XCobalah online!
Penjelasan
sumber