Dalam tantangan kode golf ini, Anda akan memverifikasi tagar!
#What_your_code_should_do
Input adalah sebuah string. Keluarkan nilai kebenaran jika tagar yang valid, dan nilai palsu sebaliknya.
Kami mendefinisikan string sebagai Hashtag yang valid jika ...
- Dimulai dengan hash (
#
). - Tidak memiliki nomor tepat setelah tagar (mis. Tagar
#2016USElection
tidak valid). - Itu tidak memiliki "karakter khusus" (yaitu karakter apa pun yang bukan alfabet, garis bawah (
_
) atau angka).
Anda dapat mengasumsikan bahwa input hanya berisi karakter ASCII. (Akan tidak adil jika kita melakukan Unicode juga.)
# Aturan
Aturan main kode-golf berlaku.
#Contoh
Benar:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Falsy:
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
sumber
sumber
#
hashtag yang valid?#öäü
valid#
bukan hashtag yang valid oleh sistem apa pun, Facebook atau Twitter juga melanggar aturan yang ditetapkan juga saya tidak yakin #_ABC valid lagi pada mereka tetapi saya tidak yakin akan hal itu.an alphabet
berarti huruf besar atau kecil ascii? yaituabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Jawaban:
Retina , 12 byte
Cetakan
1
untuk tagar dan0
lainnya.Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Tidak banyak yang dijelaskan di sini, ini adalah implementasi definisi yang sangat literal:
^
dan$
hanya jangkar yang memastikan bahwa kecocokan mencakup seluruh string,#
memeriksa apakah string dimulai dengan#
,(?!\d)
memastikan bahwa karakter selanjutnya bukan digit (tanpa memajukan posisi mesin regex),\w*
periksa bahwa kita dapat mencapai ujung string dengan nol atau lebih huruf, digit atau garis bawah.Secara default, Retina menghitung jumlah kecocokan dari regex yang diberikan, itulah sebabnya ini memberikan
1
tag hash yang valid dan0
sebaliknya.sumber
(?!\d)
adalah(?=\D)
... tapi saya tidak tahu bagaimana Anda menulis Retina. Apakah mungkin Anda dapat menggunakan(?\D)
tanpa=
dan menyimpan byte? (Jika tidak, apakah perlu mengedit bahasa sehingga bisa dilakukan?)(?!\d)
berbeda dari(?=\D)
yang terakhir memerlukan beberapa karakter setelah posisi saat ini sementara yang pertama puas dengan akhir string. Terlepas dari itu, menyesuaikan rasa regex saat ini tidak mungkin (karena saya hanya menyerahkan regex ke mesin regex .NET), tetapi membuat perubahan seperti itu ada di peta jalan di suatu tempat (sangat jauh) di telepon.=
opsional. Seluruh(?...)
sintaks dipilih untuk ekstensibilitas, di mana karakter setelah?
tidak pernah opsional dan menentukan jenis grup ini, dan saya tidak berpikir saya ingin menyerah pada ekstensibilitas itu.(?{
dan(??
dan(?<
(keduanya untuk menangkap kelompok dan untuk melihat di belakang) dan(?-
dan(?1
dan tentu saja dasar(?:
. Dan mungkin beberapa yang saya lewatkan.Perl, 22 byte
21 byte kode +1 untuk
-p
Mencetak 1 jika hashtag yang valid, kosongkan jika tidak.
Pemakaian
Disimpan 2 byte, terima kasih untuk Martin Ender (dan 4 lainnya menggunakan metode lookaround- nya )
Perl, 18 byte
17 byte kode +1 untuk
-p
Menggunakan lookaround Martin ini bisa jauh lebih pendek!
sumber
JavaScript (ES6), 25 byte
sumber
C, 80 byte
Fungsi
f()
mengambil string sebagai argumen dan memodifikasiint *b
ke 1 atau 0 untuk menunjukkan kebenaran / kepalsuan.Jika string selalu memiliki setidaknya satu karakter (yaitu tidak pernah string kosong), byte dapat dicukur menjadi 79 byte:
sumber
Python 3, 41 byte
sumber
None
api itu benar dan palsu, saya pikir menjatuhkan bendabool()
itu tidak apa-apa.re.compile('#(?!\d)\w*$').match
? Bisa diterimaf=
, BTW.Brachylog , 55 byte
Ini tidak menggunakan regex.
Penjelasan
sumber
Python 3,
10393 byteThe
#
makhlukTrue
membunuh saya di sini, saya harus menghitung string untuk menghindari kesalahan indeks pada input karakter tunggal.sumber
isalpha()
metode pada jawaban py3 saya: D "#" benar, juga menghancurkan saya.PowerShell v2 +, 25 byte
Menggunakan regex Martin , baru saja dibungkus dengan
-match
operator PowerShell ditambah dengan input$args
. Untuk nilai-nilai truthy / falsey, ini akan mengembalikan string itu sendiri pada pertandingan (nilai kebenaran) atau tidak ada pada non-pertandingan (nilai falsey). Ini karena ketika operator perbandingan diterapkan terhadap array, ia mengembalikan apa pun yang memuaskan operator itu.Beberapa contoh (dibungkus
[bool]
gips untuk membuat output lebih jelas):sumber
Mathematica,
524643 byteDisimpan
69 byte karena @MartinEnder .Fungsi. Mengambil string sebagai input, dan mengembalikan
True
atauFalse
sebagai output. Cukup sederhana, hanya cocok melawan regex/#(?!\d)\w*/
.sumber
hello#world
karena Anda tidak memiliki jangkar string awal dan akhir. Saya tidak tahu Mathematica jadi saya tidak yakin.Dyalog APL ,
2220 byteTanpa RegEx:
-2 Terima kasih kepada ngn
sumber
Python 2, 79 byte
Upaya bermain golf pertama. Versi tidak disatukan:
sumber
Oktaf,
37565443 byteTerima kasih kepada @LuisMendo karena menghapus 8 byte!
Tidak terlalu golf, tetapi sangat built-inny.
Sunting: Kode asli menerima string tanpa '#' memimpin. Saya kira saya harus terjebak dengan regex.
Test suite pada ideone .
sumber
Python3 -
156128 byteSolusi yang tidak menggunakan regex. 0 adalah falsey dan setiap nilai lainnya benar.
Terima kasih kepada @LeakyNun untuk menghemat byte!
sumber
+0
setelahn[1:]
, tapi sayangnya, masih tidak berfungsi: / Memberi false ke "#d".+0
tetapi gagal pada "#d". Saya mengujinya di Python3. Tidak yakin apakah itu akan bekerja pada Python2IndexOutOfRange
untuk "#" danFalse
untuk "#d".lambda n:n=="#"or(n[0]=="#")*all(any([47<ord(c)<58,64<ord(c)<91,ord(c)==95,96<ord(c)<123])for c in n[1:]+"0")*~(47<ord(n[1])<58)
untuk 128 byte. Bukti bahwa itu berhasilLua,
595554 byteKode
Bagaimana itu bekerja:
#
.Mengambil input dari baris perintah. Mencetak
true
jika string adalah tagar yang valid, jika tidak, akan dicetaknil
.sumber
Google Sheets, 30 byte
Fungsi lembar kerja anonim yang mengambil input dari sel
A1
mengeceknya terhadap ekspresi RE2 dan mengeluarkan hasilnya ke sel yang memanggil.sumber
05AB1E , 18 byte
Kode:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Sed 19 + 2 = 21 byte
Ini menyaring semua tagar non-hashtag dan output yang valid.
Jalankan sebagai
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Berhenti dengan Ctrl+ D(kirim EOF).sumber
GNU grep, 15 + 2 = 17 byte
Uji:
Keluaran:
sumber
Python 3, 97 Bytes
70 Bytes 56 Bytes(Kode berubah) Dapat
dibaca manusiasumber
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Pyke, 19 byte
Coba di sini!
Perbaikan cepat untuk malam ini
sumber
#123
mengembalikan apa-apa, tidak boleh mengembalikan 0?Ruby, 16 +
31 (n
bendera) =1917 bytePenggunaan
0
sebagai truthy dannil
sebagai falsy.Jalankan sebagai
ruby -ne 'p~/^#(?!\d)\w*$/'
. Terima kasih kepada @manatwork untuk memperbaiki kesalahan bash saat menjalankan program.sumber
!
, lihat Event Designators in man bash.)Standar ML ,
121118107 byteCobalah online! Solusi fungsional tanpa menggunakan regex. Menyatakan fungsi anonim yang terikat dengan pengidentifikasi hasil implisit
it
.sumber
isAlphaNum$orelse
itu agak mengancam ...orelse
danandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
pada akhirnya juga cukup mengancam ...Excel VBA, 54 byte
Fungsi jendela langsung VBE anonim yang mengambil input dari sel
[A1]
, memeriksa apakah nilai sel cocok denganLike
pola, dan menampilkanBoolean
ke jendela langsung VBEsumber
Haskell , 79 byte
Cobalah online!
sumber
C #, 92 byte
C # lambda (
Predicate
) dengan input astring
dan output abool
.Cobalah online!
sumber
Lua, 39 byte
Copypasta langsung dari deskripsi pertandingan. Output palsu
nil
jika tidak hashtag, output sebenarnya hashtag kembali sebaliknya.Dapat disingkat menjadi satu byte lagi dengan menggunakan
find
jika menampilkan daftar dua nilai (yang sebenarnya) tidak melanggar aturan.sumber
#
dengan sendirinya.#
tagar di Twitter atau Facebook tidak relevan dengan tantangan ini. Spesifikasinya sangat jelas pada fakta yang#
harus dianggap sebagai tagar untuk keperluan tantangan ini. Dan sementara saya belum memeriksa semua jawaban, semua yang saya periksa lakukan diterima#
sebagai tagar, jadi saya tidak yakin jawaban teratas yang Anda maksud.Clojure,
130135132 byte+5 byte untuk menangani NPE yang terjadi ketika string hanya terdiri dari tagar.
-2 byte dengan menggunakan
Character/isLetterOrDigit
.Tidak Disatukan:
sumber
Java 8,
575428 bytePort of Martin Ender's Retina menjawab untuk menyimpan beberapa byte dan mencocokkan test case yang ditambahkan.
Bukan berarti
String#matches
selalu cocok dengan seluruh String, jadi tidak perlu^...$
.Coba di sini.
sumber