Beberapa versi aplikasi kalkulator Android standar memungkinkan Anda untuk menekan tombol, seperti 'sin' dan kemudian tombol 'del' untuk membuatnya 'si'. Mungkin hanya bug yang tidak bisa mereka singkirkan.
Pengelompokan huruf / huruf berikut ini dapat diketik:
dosa si s cos bersama c berjemur ta t dalam l catatan lihat e
Jadi, 'hambar' dapat diketik, karena ta-steless dan begitu juga 'bakiak' karena 'c-log-s'. Namun 'punya' tidak bisa diketik, juga 'an' atau 'xyz'.
Tulis program yang menggunakan satu kata (atau urutan huruf, hanya input az) sebagai input dan menghasilkan output untuk menunjukkan apakah suatu kata dapat diketik atau tidak.
Output dapat berupa karakter tunggal / huruf / digit / dll. atau mungkin lebih besar. Semua kata yang dapat diketik harus menghasilkan output yang sama. Semua kata yang tidak dapat diketik juga harus menghasilkan output yang sama.
PS Hanya karena penasaran, apakah 'hambar' kata kamus terpanjang yang dapat diketik?
sumber
Jawaban:
Perl,
474341 + 1 = 42 byte-4 byte terima kasih kepada @Sunny Pun. -2 byte terima kasih kepada @Brad Gilbert b2gills dan @Downgoat
Jalankan dengan
-n
bendera.Pasti bisa bermain golf lebih lanjut, tetapi dalam semangat kompetisi, saya meninggalkan regex yang kebanyakan orisinal yang saya buat pada awalnya. Tidak menghasilkan apa-apa jika benar,
1
jika salah.Cobalah online!
Saya mengunduh file kamus, dan kata terlama yang saya temukan adalah 11 huruf -
tattletales
sumber
co?
harus cukup karenasin
akan menguruss
:) Bermain bagus dengan/log?/
!i
), atau bahwa hasil tunggal harus masuk akal (hapus satu!
)/^(s|sin?|co?|t|tan?|ln?|log?|e)+$/
atau jika Anda lebih suka:/^([celst]|sin?|co|tan?|ln|log?)+$/
JavaScript (ES6), 44 byte
Saya pikir ini adalah regex terpendek yang mungkin, tetapi tentu saja saya mungkin salah.
Penjelasan
Tempat pertama yang jelas untuk memulai adalah regex yang hanya mencakup semua opsi secara terpisah:
Pertama, kita dapat mengamati bahwa
cos
dapat dibentuk darico
dans
, membuatnya tidak perlu:Beberapa di antaranya, seperti
sin
dansi
, dapat dikombinasikan dengan menjadikan huruf terakhir opsional:Ini berfungsi karena
sin?
cocoksi
dengan atau tanpan
akhir, sehingga mencakup keduanyasin
dansi
.Sepertinya ada banyak
n?
juga. Bagaimana jika kita menyatukan semuanya?Satu lagi cara untuk bermain golf ini adalah dengan menggabungkan opsi char tunggal yang tersisa ke dalam rentang karakter, tetapi ini keluar pada panjang yang sama:
Dan itulah cara Anda golf regex sederhana. Saya percaya ini adalah regex terpendek yang mungkin cocok dengan setiap string dengan benar, tetapi mungkin tidak. Saya akan memberikan hadiah +100 kepada siapa saja yang berhasil meningkatkan regex ini.
sumber
^(s|t|co?|(l|ta|si)n?|log?|e)+$
/ /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/)
.a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.test
selama 42 byte. Saya percaya ini diizinkan, karenaa.test
merupakan fungsi anonim.f=a.test
tidak berfungsi. Saya bertanya-tanya apakah itu dapat diterima untuk memanggil dengan nama alternatifa.test
...Pyth,
37332928 byteKode berisi karakter yang tidak patut
xxd
dicetak , jadi ini adalah hexdump.Cobalah online.
Sangattidak efisien secara astronomi. Kompleksitas waktu dan ruang adalahO (16 n )O (24 n ).Penjelasan
Pertama, a
Q
secara implisit ditambahkan.sumber
s
.Jelly ,
3231302826 byteMenghasilkan 0 jika kata tersebut dapat diketik, 1 jika tidak. Terima kasih kepada @JonathanAllan untuk bermain golf 1 byte!
Cobalah online!
Bagaimana itu bekerja
sumber
Brachylog , 33 byte
Memperbaiki bug berkat @Synoli.
Cobalah online!
Output
true.
jika dapat diketik ataufalse.
sebaliknya.Penjelasan
Kami mencoba mendamaikan input sampai kami menemukan satu untuk mana semua string yang kami gabungkan adalah awalan dari salah satu
["sin", "cos", "tan", "log", "lne", "eee]
.sumber
.
setelahnyatrue
?true.
danfalse.
sebaliknya. saya baru saja mengimplementasikan ini: jika output diabaikan (seperti di sini) dan tidak ada tulisan untukSTDOUT
, maka akan mencetaktrue.
ataufalse.
tergantung pada apakah predikat utama berhasil atau gagal. Ini memiliki titik di SWI-Prolog karenatrue.
danfalse.
sebenarnya program yang valid yang selalu berhasil / selalu gagal.tan
muncul secara eksplisit dalam daftar?Perl 6 ,
60 5044 byteupaya pertama ( 60 )
terjemahan dari jawaban Perl 5 ( 50 )
menggunakan
-n
sakelar ( 43 +1 )Yang pertama
?
mengonversi hasilnya menjadi Boolean, dan yang pertama+
mengonversi itu menjadi angka (1
untukTrue
,0
untukFalse
)sumber
Mathematica, 101 byte
Tampaknya bagian-bagian sulit dari tantangan ini datang dengan regex terpendek dan memilih bahasa yang paling ringkas untuk dicocokkan dengan regex. Saya tidak punya apa-apa untuk disumbangkan ke yang pertama, dan Mathematica bukan kandidat yang baik untuk yang terakhir karena Anda harus menggunakan
StringMatchQ
danRegularExpression
. Yang bisa saya lakukan adalah menjawab PS Anda: apakah "hambar" adalah kata terpanjang yang bisa Anda ketikkan?Jadi "tattletale" tampaknya menjadi yang terpanjang oleh satu karakter.
sumber
True
atauFalse
lebih dari satu karakter.Bertanya-tanya , 41 byte
Pemakaian:
Benar-benar salah paham pertanyaan sebelumnya, tapi sekarang semuanya sudah diperbaiki. Output
F
untuk pertandingan danT
tanpa pertandingan.Tidak bersaing, 35 byte
Pemakaian:
Ini memanfaatkan regex yang berlaku, yang diimplementasikan setelah tantangan ini.
sumber
n
tidak dapat diketik tetapisin
danln
sedang.sa
sebagai benargot
.?
membuat sub ekspresi jinak; lihat rexegg.com/regex-quantifiers.html#cheat_sheet . Tetapi bahkan membuatnya serakah dengan??
atau posesif dengan?+
tidak bekerja karena suatu alasan (setidaknya dalam PHP).coelostats
memicu jebakan (padalo
danta
).Memproses, 223 byte
Akhirnya memutuskan untuk melakukan jawaban tanpa regex. Untuk memanggil fungsi, gunakan
l("tasteless");
. Pengembalian0
untuk false dan1
true.Kode diperluas dengan penjelasan
Pada dasarnya, kita beralih pada string yang diberikan, membangun
b
char dengan char. Kami memeriksa menggunakand()
jika salah satutan
,log
... mulai denganb
. Jika ya, maka itu valid. Selain itu, kami memeriksa apakah karakter pada posisi itu valid dan kami menyetel ulangb
. Sekarang jika itu tidak valid,0
akan dikembalikan, atau yang lain itu masih akan valid. Pada akhirnya, jika program belum mengembalikan sesuatu, maka kembali1
.sumber
d
fungsi mengembalikan abool
?boolean
daripadaint
. Jugatrue
danfalse
membutuhkan lebih banyak byte daripada1
dan0
Scala, 49 byte
Mengembalikan nilai true jika string yang diberikan cocok dengan regex, false jika tidak.
sumber
Python 3 , 154 byte
Cobalah online!
sumber
Python 3 ,
149130 bytesunting # 1: dicukur 19 byte menggunakan solusi @ Henke
sumber
Python 2, 124 byte
sumber
PHP, 60 byte
regex dicuri dari produk ETH :
mengambil input dari argumen baris perintah; cetakan
1
untuk diketik,0
untuk tidak diketik.versi yang lebih lama,
757369 bytemengganti semua kata yang mungkin dengan string kosong, mengembalikan hasilnya, meniadakan.
membagi input dengan pencocokan regex. Bendera
1
adalah singkatanPREG_SPLIT_NO_EMPTY
dan memberi tahupreg_split
untuk hanya mengembalikan hasil yang tidak kosong. Jika input dapat diketik,preg_split
hanya akan memiliki hasil kosong, sehingga akan mengembalikan array kosong, yang salah.!
meniadakan hasilnya.Kedua versi mengambil input dari argumen baris perintah
dan mencetak
1
jika hasilnya kosong (input dapat diketik), selain itu tidak ada.Catatan:
Mengemas regex menggunakan
?
tidak berfungsi di sini; itu membuat ekspresi tanpa ekspresi; mungkin karena mundur. Dan urutan alternatif itu penting:ta
harus berdiri di depant
atau mesin akan berhenti cocok ketika ditemukant
.Saya menemukan lembar cheat quantifier , pemikiran
??
atau?+
mungkin membantu; tetapi mereka tidak bekerja untuk saya.sumber
Java 8, 55 byte
Disclamer: Saya menggunakan regex ETHproductions karena jauh lebih pendek dari byte saya. Kredit penuh pada Regex kepadanya. Apa yang saya lakukan adalah menambahkan 24 byte untuk menjadikannya fungsi Java.
Kembali
false
jika kata itu tidak cocok dengan Regex, yang laintrue
.sumber