Tantangan
Untuk tantangan ini, string pegunungan adalah yang sesuai dengan aturan tata bahasa M: x(Mx)*
di mana pada setiap produksi, semua x adalah karakter yang sama. Saat menjorok, string pegunungan mungkin terlihat seperti ini:
A
B
C
D
C
E
F
E
C
B
A
Seperti yang Anda lihat, itu terlihat seperti gunung dari samping.
Definisi Resmi
- Setiap karakter tunggal
a
adalah pegunungan. - Jika
S
adalah string pegunungan dana
karakter, makaaSa
adalah pegunungan, di mana penjajaran mewakili penggabungan string. - Jika
aSa
danaTa
adalah string pegunungan, makaaSaTa
adalah string pegunungan. Perhatikan bahwa aturan ini menyiratkan bahwa pola ini berlaku untuk sejumlah pengulangan. (yaituaSaTaUa
,aSaTaUaVa
,aSaTaUaVaWa
... semua pegunungan.)
Contohnya
Semua palindrom panjang aneh bergunung-gunung, misalnya:
t
a
c
o
c
a
t
qwertytrasdfdgdsarewqjklkjq
adalah contoh yang kurang sepele:
q
w
e
r
t
y
t
r
a
s
d
f
d
g
d
s
a
r
e
w
q
j
k
l
k
j
q
Contoh Keluaran
a ==> true
aaa ==> true
mom ==> true
tacocat ==> true
qwertytrasdfdgdsarewqjklkjq ==> true
wasitacaroraratisaw ==> true
abcbcbcbcba ==> true
aaaaabcbbba ==> true
<empty string> ==> false
aa ==> false
pie ==> false
toohottohoot ==> false
asdfdghgfdsa ==> false
myhovercraftisfullofeels ==> false
Aturan
- Ini adalah masalah keputusan, sehingga setiap representasi benar atau salah adalah output yang valid selama itu benar, konsisten, tidak ambigu, dan program berakhir dalam jumlah waktu yang terbatas. Pastikan untuk menyatakan konvensi keluaran Anda dengan solusi Anda.
- Itu harus sepele untuk menentukan apakah output menunjukkan benar atau salah tanpa harus tahu apa string input. Perhatikan bahwa ini tidak berarti output yang benar atau salah harus konstan, namun konvensi "cetak string pegunungan jika string adalah pegunungan dan string non-pegunungan jika tidak pegunungan" adalah celah yang dilarang karena alasan yang jelas.
- Di sisi lain, konvensi seperti "melempar pengecualian untuk false dan keluar secara diam-diam untuk true" akan baik-baik saja, serta "mencetak satu karakter untuk true dan yang lainnya untuk false"
- Ini kode golf, jadi program tersingkat menang.
- Celah standar dilarang.
code-golf
string
decision-problem
Beefster
sumber
sumber
aaa
akan bagus, di mana karakter yang sama perlu digunakan pada beberapa tingkatan.wasitacaroraratisaw
? Bagi saya gunung itu bagaikan gunung berapiwasitacaroraratisaw
memang pegunungan AFAICTaaa
membuatnya tidak berfungsi.Jawaban:
Japt v2 ,
1413 byteUji secara online!
sumber
Bersih ,
94898780 byteCobalah online!
sumber
Perl, 22 byte
Termasuk
+
untukp
Mencetak 1 untuk benar, tidak ada untuk salah
sumber
Brain-Flak , 78 byte
Cobalah online!
Mencetak 1 untuk benar, tidak ada untuk salah.
Untuk memverifikasi kata pegunungan, cukup untuk mengasumsikan kata "turun" gunung bila memungkinkan.
sumber
Python 2 ,
8983 byteCobalah online!
Berkat ovs untuk 6 byte.
sumber
Prolog (SWI) , 29 byte
Cobalah online!
Program ini mendefinisikan aturan DCG
a//0
yang cocok dengan string apa pun (daftar karakter) yang merupakan string pegunungan.Penjelasan
Untuk program ini saya menggunakan definisi yang sedikit berbeda tetapi setara untuk string pegunungan daripada apa yang dijelaskan dalam tantangan: String pegunungan adalah karakter
c
diikuti oleh sejumlah (mungkin nol) string gunung denganc
ditempelkan ke ujungnya. Dalam notasi turunan regex yang lebih singkat, string pegunungan harus cocok dengan pola dic(Mc)*
manaM
string pegunungan dan*
berarti bahwa ekspresi dalam tanda kurung diulangi nol atau lebih kali. Perhatikan bahwa sementara masingc
- masing harus karakter yang sama, masing-masingM
- tidak perlu menjadi string pegunungan yang sama.Bukti Kesetaraan
Jelas bahwa aturan 1 dan 2 dari tantangan setara dengan aturan saya di mana
Mc
terjadi nol dan satu kali masing-masing.Dalam kasus bahwa string pegunungan telah
Mc
terjadi din
manan > 1
kemudian string dapat ditulis ulang sebagai dicMcSc
manaS
adalah saat-n - 1
saat terakhir yangMc
terjadi tidak termasuk yang terakhirc
(perhatikan bahwaM
ada string pegunungan dan tidak harus sama dengan yang lainM
). KarenaM
string pegunungan, menurut aturan 2,cMc
harus menjadi string pegunungan. Entah ituS
adalah string pegunungan di mana casecSc
adalah string pegunungan atauS
dapat ditulis ulang sebagai dicMcTc
manaT
adalah zaman terakhirn - 2
bahwa dulu yang berarti itu harus pegunungan juga. Karena itu pegunungan dan jika danMc
terjadi tidak termasuk yang terakhirc
. Alur penalaran ini dapat terus diterapkan hingga string yang tidak dijamin mengandung gunungMc
cMc
cMc
cM'c
bergunung-gunungcMcM'c
harus pegunungan seluruh string harus pegunungan.Untuk kebalikannya, untuk string di
cScTc
manacSc
dancTc
bergunung-gunung maka baik itucSc
adalah string pegunungan oleh aturan 2 atau dengan aturan 3. Jika itu adalah string pegunungan oleh aturan 2 makaS
juga harus menjadi string pegunungan. Jika itu adalah string pegunungan oleh aturan 3 makacSc
harus dari bentuk dicUcVc
manacUc
dancVc
adalah string pegunungan. Karena semakin lamacUc
dancVc
masih harus setidaknya dua karakter lebih pendek daricSc
dan aturan 3 membutuhkan setidaknya 5 karakter untuk diterapkan maka setelah sejumlah aplikasi aturan 3 setiap string antara sehingga string adalah pegunungan menurut definisi saya.c
dipilih oleh aplikasi aturan 3 harus menjadi pegunungan tali. Garis penalaran yang sama dapat diterapkancTc
Karena setiap string yang cocok dengan definisi saya adalah pegunungan dan definisi saya cocok dengan semua string pegunungan, itu sama dengan yang diberikan dalam pertanyaan.
Penjelasan Kode
Secara keseluruhan
a//0
aturan DCG, didefinisikan pada baris pertama, cocok dengan string pegunungan apa pun. The+//1
DCG aturan (seperti predikat, aturan DCG dapat memberikan nama Operator ), didefinisikan pada baris kedua, cocok dengan string yang terdiri dari urutan nol atau lebih pegunungan string dengan karakter lulus sebagai argumenX
ditempelkan ke ujung mereka . Atau untuk meminjam notasi seperti regex yang saya gunakan di atas,a//0
cocokc(Mc)*
tetapi mengalihdayakan pekerjaan yang benar-benar cocok(Mc)*
dengan+//1
yang diambilc
sebagai argumennyaX
.Baris demi baris kode berperilaku sebagai berikut:
Baris ini mendefinisikan aturan DCG
a
. The[X]
menyatakan bahwa karakter pertama harus sama dengan variabel saat ini tidak terdefinisiX
. Ini menghasilkanX
diset sama dengan karakter pertama. The+X
kemudian menyatakan bahwa sisa string harus sesuai dengan aturan DCG+//1
dengan karakter yangX
diatur sebagai argumen.Baris ini mendefinisikan
+//1
aturan DCG. The;
mewakili atau di Prolog yang berarti bahwa string dapat mencocokkan baik[]
ataua,[X],+X
. The[]
mewakili string kosong sehingga+//1
selalu mampu cocok dengan string kosong. Jika senarnya tidak kosong, maka permulaannya harus cocoka//0
dan karenanya harus berupa tali pegunungan. Ini kemudian harus diikuti oleh karakter apa punX
yang diatur. Akhirnya sisa string harus cocok+X
.sumber
Sekam , 15 byte
Cobalah online! Ketik inferensi membutuhkan waktu sekitar 40 detik, jadi bersabarlah.
Penjelasan
Idenya adalah untuk berulang kali mengganti substring formulir
aba
dengana
sampai ini tidak mungkin lagi. Input bergunung-gunung jika dan hanya jika ini menghasilkan string karakter tunggal (yang merupakanε
tes apa ). Satu-satunya situasi berbahaya adalah ketika kita memiliki string seperti ini, di manaaba
sepertinya tidak menjadi puncak:Untungnya, kita selalu bisa mengubahnya menjadi satu:
sumber
true
kasus dan bukan sebaliknya akan "konsisten".Retina 0.8.2 , 15 byte
Cobalah online! Port sepele dari jawaban JET @ETHproductions.
sumber
JavaScript (Node.js) , 53 byte
Saya kira ini adalah metode yang paling mudah untuk dilakukan?
Cobalah online!
JavaScript (Node.js) , 72 byte
Tidak sepele, tapi lebih lama.
Cobalah online!
sumber