#Hashtag_or_not


25

ในการแข่งขันกอล์ฟรหัสนี้คุณจะตรวจสอบแฮชแท็ก!

#What_your_code_should_do

อินพุตเป็นสตริง เอาท์พุทค่าความจริงถ้ามันเป็นแฮชแท็กที่ถูกต้องและค่าเท็จอื่น ๆ

เรากำหนดสตริงเป็น Hashtag ที่ถูกต้องหาก ...

  • มันเริ่มต้นด้วยแฮช ( #)
  • ไม่มีหมายเลขหลังแฮชแท็ก (เช่นแฮชแท็ก#2016USElectionไม่ถูกต้อง)
  • ไม่มี "อักขระพิเศษ" (เช่นอักขระใด ๆ ที่ไม่ใช่ตัวอักษรขีดล่าง ( _) หรือตัวเลข)

คุณสามารถสันนิษฐานได้ว่าอินพุตนั้นมีอักขระ ASCII เท่านั้น (มันคงจะไม่ยุติธรรมถ้าเราทำ Unicode ด้วย)

#rules

บังคับใช้กฎพื้นฐานของ

#ตัวอย่าง

Truthy:

#
#e
#_ABC 
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016

Falsy:

Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash

10
คือ#จริงๆ hashtag ถูกต้อง?
อดัม

4
คือ#öäüถูกต้อง?
chrki

7
#ไม่ใช่แฮชแท็กที่ถูกต้องโดยระบบใด ๆ , Facebook หรือ Twitter มันยังทำลายกฎที่ตั้งไว้เช่นกันฉันไม่แน่ใจว่า #_ABC นั้นใช้ได้อีกครั้งกับพวกเขา แต่ฉันก็ไม่แน่ใจ
Martin Barker

3
ฉันคิดan alphabetว่าหมายถึงตัวอักษรตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก? คือabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZอะไร
Rɪᴋᴇʀ

7
A # ไม่ใช่แฮชแท็ก มันเป็นแฮช มันตามด้วยสตริงคือสิ่งที่เครือข่ายสื่อสังคมอ้างถึงเป็นแฮชแท็ก มันคือแท็กซึ่งเริ่มต้นด้วยแฮช
ฉัน -CONICA

คำตอบ:


19

เรติน่า 12 ไบต์

^#(?!\d)\w*$

พิมพ์1สำหรับแฮชแท็กและ0อื่น ๆ

ลองออนไลน์! (บรรทัดแรกเปิดใช้งานชุดทดสอบที่แยกบรรทัดด้วยฟีด)

ไม่มากที่จะอธิบายนี่นี้ค่อนข้างการดำเนินงานที่แท้จริงของคำนิยาม: ^และ$เป็นเพียงแองเคอสร้างความมั่นใจว่าการแข่งขันครอบคลุมสตริงทั้ง#ตรวจสอบว่าสตริงเริ่มต้นด้วย#, (?!\d)เพื่อให้แน่ใจว่าตัวอักษรถัดไปไม่ได้เป็นหลัก (ไม่ก้าวหน้า ตำแหน่งของโปรแกรม regex) \w*ตรวจสอบว่าเราสามารถไปถึงจุดสิ้นสุดของสตริงด้วยตัวอักษรตัวเลขหรือขีดล่างหรือไม่

ตามค่าเริ่มต้น Retina จะนับจำนวนการแข่งขันของ regex ที่กำหนดซึ่งเป็นสาเหตุที่ทำให้1แท็กแฮชที่ถูกต้องและเป็น0อย่างอื่น


ใน Perl (?!\d)คือ(?=\D)... แต่ฉันไม่รู้ว่าคุณเขียน Retina อย่างไร เป็นไปได้ที่คุณสามารถใช้(?\D)โดยไม่ต้อง=และบันทึกไบต์หรือไม่? (ถ้าไม่เป็นเช่นนั้นมันคุ้มค่าที่จะแก้ไขภาษาเพื่อให้เป็นไปได้หรือไม่?)
msh210

2
@ msh210 (?!\d)นั้นแตกต่างจาก(?=\D)ที่หลังต้องใช้ตัวละครบางตัวหลังจากตำแหน่งปัจจุบันในขณะที่อดีตเป็นที่พอใจกับจุดสิ้นสุดของสตริง ไม่ว่าการปรับแต่งรสชาติของ regex นั้นเป็นไปไม่ได้ในขณะนี้ (เนื่องจากฉันเพิ่งส่ง regex ไปยังโปรแกรม regex ของ. NET) แต่การเปลี่ยนแปลงดังกล่าวอยู่ในแผนงานเมื่ออยู่ไกล (ไกล)
Martin Ender

1
ที่กล่าวว่าฉันไม่คิดว่าฉันจะ=เลือก (?...)ไวยากรณ์ทั้งหมดถูกเลือกเพื่อเพิ่มความสามารถในการที่ตัวละครหลังจากที่?ไม่เคยเป็นตัวเลือกและกำหนดประเภทของกลุ่มนี้และฉันไม่คิดว่าฉันต้องการที่จะให้ขึ้นที่ขยาย
Martin Ender

(ความคิดเห็นแรกของคุณ) แน่นอนว่าฉันควรจะตั้งข้อสังเกตว่า แต่มันไม่เกี่ยวข้องกับคำตอบนี้ (เป็นครั้งที่สองของคุณ) ใช่เหมาะสม นอกจากนี้หลังจากทั้งหมดยัง(?{และ(??และ(?<(ทั้งสำหรับกลุ่มการจับและสำหรับ lookbehind) และ(?-และและหลักสูตรขั้นพื้นฐาน(?1 (?:และบางทีฉันก็พลาด
msh210

6

Perl, 22 ไบต์

21 ไบต์รหัส +1 สำหรับ -p

$_=/^#([a-z_]\w*)?$/i

พิมพ์ 1 ถ้าเป็นแฮชแท็กที่ถูกต้องสตริงว่างเปล่าเป็นอย่างอื่น

การใช้

perl -pe '$_=/^#([a-z_]\w*)?$/i' <<< '#'
1
perl -pe '$_=/^#([a-z_]\w*)?$/i' <<< '#_test'
1
perl -pe '$_=/^#([a-z_]\w*)?$/i' <<< '#1test'

บันทึก 2 ไบต์ขอบคุณMartin Ender (และอีก 4 คนโดยใช้วิธีการค้นหา )


Perl, 18 ไบต์

17 ไบต์รหัส +1 สำหรับ -p

การใช้ลุคของมาร์ตินทำให้สั้นลงได้มาก!

$_=/^#(?!\d)\w*$/

คุณคัดลอกมาร์ตินและแก้ไขใช่มั้ย

@MatthewRoh คำตอบที่สองใช้กลไกของ Martin เขาบอกว่าฉันสามารถใช้มันได้ แต่ฉันไม่ต้องการให้มันเป็นคำตอบหลักของฉันเพราะฉันไม่ได้มาด้วยตัวเอง! ฉันได้เพิ่มมันเพื่อเปรียบเทียบ Retina ยังคงเต้น Perl ได้อย่างง่ายดายในการท้าทายประเภทนี้!
Dom Hastings

6

JavaScript (ES6), 25 ไบต์

s=>/^#(?!\d)\w*$/.test(s)

F = s => /^#(?!\d)\w*$/.test(s)
input.oninput = () => result.innerHTML = input.value ? F(input.value) ? '\ud83d\udc8e' : '\ud83d\udca9' : '\ud83d\udcad';
#input, #result {
  vertical-align: middle;
  display: inline-block;
}
#input {
  line-height: 2em;
}
#result {
    font-size: 2em;
}
<input id="input" type="text"/> <span id="result">&#x1f4ad</span>


5

C, 80 ไบต์

ฟังก์ชั่นf()ใช้สตริงเป็นอาร์กิวเมนต์และปรับเปลี่ยนint *bเป็น 1 หรือ 0 เพื่อระบุความจริง / เท็จ

f(char*p,int*b){for(*b=(*p==35)&&!isdigit(p[1]);*p;++p)*b&=isalnum(*p)||*p==95;}

หากสตริงมีอักขระอย่างน้อยหนึ่งตัวเสมอ (เช่นไม่มีสตริงที่ว่าง) ไบต์สามารถถูกลบออกเป็น 79 ไบต์:

f(char*p,int*b){for(*b=(*p==35)&&!isdigit(p[1]);*++p;)*b&=isalnum(*p)||*p==95;}

5

Python 3, 41 ไบต์

import re
re.compile('#(?!\d)\w*$').match

ควรจะดีอย่างแน่นอน เนื่องจากการจับคู่วัตถุเป็นจริงและNoneเป็นเท็จฉันคิดว่าการวางbool()ไม่เป็นไร
ลินน์

ใช่ฉันคิดเกี่ยวกับเรื่องนี้ขอบคุณสำหรับการชี้แจง!
Gábor Fekete

สิ่งนี้สร้างมูลค่าที่แท้จริงสำหรับ“ #fix me Gábor” ด้วย BTW ฉันเห็นว่ากฎกำลังได้รับการเพิกเฉยจากคนอื่นเช่นกัน แต่สิ่งนี้เราเคยพิจารณาตัวอย่างซึ่งมักจะไม่ได้รับการยอมรับว่าเป็นคำตอบเว้นแต่คำถามจะอนุญาตอย่างชัดเจน
จัดการ

ขอบคุณฉันเขียนใหม่เพื่อจัดการกรณีที่คุณเขียนและทำให้ฟังก์ชั่นแลมบ์ดา
Gábor Fekete

2
แล้วไงre.compile('#(?!\d)\w*$').matchล่ะ เป็นที่ยอมรับเพื่อวางf=BTW
ลินน์

4

Brachylogขนาด 55 ไบต์

"#"|h"#",?b@lL'(eE,@A:"1234567890":"_"c'eE),@A:"_"ce~hL

สิ่งนี้ไม่ใช้ regex

คำอธิบาย

Main predicate, Input (?) is a string

  "#"                           ? = "#"
|                             Or
  h"#",                         First character of ? is "#"
  ?b@lL                         L is the rest of the chars of ? lowercased
  '(                            It is not possible for any char of L that...
    eE,                           Call this char E
    @A:"1234567890":"_"c          Concatenate the lowercase alphabet with the digits and "_"
    'eE                           E is not a member of that concatenated string
   ),                           
   @A:"_"c                      Concatenate the lowercase alphabet with "_"
   e~hL                         One char of that concatenated string is the first char of L

4

Python 3, 103 93 ไบต์

all((c=='_'or c.isalpha()*i>0)^(i<1and'#'==c)^(c.isdigit()*i>1)for i,c in enumerate(input()))

#ถูกTrueฆ่าฉันที่นี่ฉันจะต้องระบุสตริงเพื่อหลีกเลี่ยงข้อผิดพลาดดัชนีในการป้อนข้อมูลตัวเดียว


1
+1 ดี! ฉันลืมisalpha()วิธีตอบ py3 ของฉันอย่างสมบูรณ์: D "#" เป็นจริงและทำลายฉันด้วย
Yytsi

4

PowerShell v2 +, 25 ไบต์

$args-match'^#(?!\d)\w*$'

ใช้มาร์ติน regexเพียงห่อขึ้นใน PowerShell ของผู้ประกอบการควบคู่ไปกับการป้อนข้อมูล-match $argsสำหรับค่าจริง / เท็จนี้จะส่งกลับสตริงตัวเองในการแข่งขัน (ค่าจริง) หรือไม่มีอะไรในการแข่งขัน (ค่าเท็จ) เนื่องจากเมื่อตัวดำเนินการเปรียบเทียบถูกนำไปใช้กับอาร์เรย์มันจะส่งคืนสิ่งใด

ตัวอย่างสองสามอย่าง (ห่อในตัว[bool]นักแสดงเพื่อให้ได้ผลลัพธ์ที่ชัดเจนมากขึ้น):

PS C:\Tools\Scripts\golfing> [bool](.\hashtag-or-not.ps1 '#2016Election')
False

PS C:\Tools\Scripts\golfing> [bool](.\hashtag-or-not.ps1 'Hello, World!')
False

PS C:\Tools\Scripts\golfing> [bool](.\hashtag-or-not.ps1 '#')
True

PS C:\Tools\Scripts\golfing> [bool](.\hashtag-or-not.ps1 '')
False

PS C:\Tools\Scripts\golfing> [bool](.\hashtag-or-not.ps1 '#USElection2016')
True

3

Mathematica, 52 46 43 ไบต์

ที่บันทึกไว้6 9 ไบต์เนื่องจาก@MartinEnder

StringMatchQ@RegularExpression@"#(?!\d)\w*"

ฟังก์ชัน รับสตริงเป็นอินพุตและส่งคืนTrueหรือFalseเป็นเอาต์พุต /#(?!\d)\w*/ค่อนข้างง่ายเพียงจับคู่กับ regex


ฉันมีเหตุผลที่เชื่อว่าสิ่งนี้จะใช้ไม่ได้กับอินพุตเช่นhello#worldเนื่องจากคุณไม่มีจุดยึดสตริงเริ่มต้นและสิ้นสุด ฉันไม่รู้ Mathematica แต่ฉันก็ไม่แน่ใจ
Value Ink

เอาล่ะฉันสามารถอยู่กับสิ่งนั้นได้ เตรียม +1
Value Ink ของคุณ

3

Dyalog APL , 22 20 ไบต์

ไม่มี RegEx:

{0≤⎕NC 1↓⍵,⎕A}∧'#'=⊃

-2 ขอบคุณ ngn


1
โอ้ว้าว. ยังมีคนที่รู้จัก APL เป็นเวลา 37 ปีแล้วที่ฉันใช้มัน!
Auspex

@Auspex APL เป็นอย่างดีและมีชีวิตชีวา แต่มีคุณสมบัติไม่กี่อย่างที่เพิ่มเข้ามาในปีที่ผ่านมา
Adám

3

Python 2, 79 ไบต์

lambda x:x=='#'or(1>x[1].isdigit())&x[1:].replace('_','').isalnum()&('#'==x[0])

พยายามตีกอล์ฟครั้งแรก เวอร์ชันที่ไม่ถูกปรับแต่ง:

def f(x):
    if x == '#':
        return True
    else:
        return x[0]=='#' and x[1:].replace('_','').isalnum() and not x[1].isdigit()

คำตอบที่ดีและยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem

3

Octave, 37 56 54 43 ไบต์

ขอบคุณ @LuisMendo สำหรับการลบ 8 ไบต์!

@(s)s(1)==35&(isvarname(s(2:end))|nnz(s)<2)

ไม่ค่อยเล่นกอล์ฟ แต่มีบิวท์อินมาก
แก้ไข: รหัสดั้งเดิมยอมรับสตริงที่ไม่มีส่วนนำ '#' ฉันเดาว่าฉันน่าจะติดอยู่กับ regex

ชุดทดสอบบนideone


3

Python3 - 156 128 ไบต์

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)

โซลูชันที่ไม่ใช้ regex 0 เป็นเท็จและค่าอื่น ๆ คือความจริง

ขอบคุณ @LeakyNun สำหรับการบันทึกไบต์!


@LeakyNun ฉันต้องลบ+0หลังn[1:]แต่น่าเศร้าที่ยังไม่ทำงาน: / ให้เท็จกับ "#d"
Yytsi

@LeakyNun ยังคงไม่ทำงาน :( อีกครั้งมีการลบ+0แต่ล้มเหลวใน "# วัน" ฉันทดสอบบน Python3 แม้ว่าไม่แน่ใจว่ามันจะทำงานกับ Python2
Yytsi

@LeakyNun แค่เท็จธรรมดา ๆ
Yytsi

@LeakyNun พ่นIndexOutOfRangeสำหรับ "#" และFalseสำหรับ "#d"
Yytsi

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)สำหรับ 128 ไบต์ พิสูจน์ว่ามันใช้งานได้
Leaky Nun

2

Lua, 59 55 54 ไบต์

รหัส

s=arg[1]print(load(s:sub(2).."=0")and s:sub(1,1)=="#")

มันทำงานอย่างไร:

  1. ตรวจสอบว่าตัวละครที่เหลือสามารถเป็นตัวระบุ Lud Lua (ตัวระบุใน Lua เป็นไปตามกฎเดียวกันกับแฮชแท็ก)
  2. #ตรวจสอบว่าตัวอักษรตัวแรกเป็น

รับอินพุตจากบรรทัดรับคำสั่ง พิมพ์ถ้าสตริงเป็นแฮชแท็กที่ถูกต้องมิฉะนั้นจะพิมพ์truenil


2

Google ชีตขนาด 30 ไบต์

ฟังก์ชันแผ่นงานที่ไม่ระบุชื่อที่รับอินพุตจากเซลล์A1ตรวจสอบกับนิพจน์ RE2 และส่งผลลัพธ์ไปยังเซลล์ที่เรียก

=RegexMatch(A1,"^#([a-z_]\w*)?


1

ซีด 19 + 2 = 21 ไบต์

/^#([a-z_]\w*)?$/Ip

สิ่งนี้จะกรองแฮชแท็กที่ไม่ใช้แฮชแท็กและเอาท์พุทที่ถูกต้องทั้งหมด

sed -rn "/^#$|^#[a-z]\w*$/Ip"ทำงานเป็น เลิกด้วยCtrl+ D(ส่ง EOF)


1

GNU grep, 15 + 2 = 17 ไบต์

grep -Ei '^#([a-z_]\w*)?$'

ทดสอบ:

$ echo '#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Hello, World!
#12thBday
#not-valid
#alsoNotValid!' | grep -Ei '^#([a-z_][a-z0-9_]*)?$'

เอาท์พุท:

#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016

1

Python 3, 97 Bytes 70 Bytes 56 Bytes

lambda x:s=x[2:];b=x[1];all(x!="#",[x[0]=="#",any[b.isalpha(),"_"in b],any[s.isalnum(),"_"in s]])

(เปลี่ยนรหัส) มนุษย์สามารถอ่านได้

x=input()
if x[0]=="#" and x[1].isalpha() and str(x)[2:].isalnum():
    print(True)
else:
    print(False)


คำตอบที่ดีและยินดีต้อนรับสู่เว็บไซต์! อนุญาตให้ใช้ฟังก์ชั่นดังนั้นคุณสามารถย่อให้สั้นลงได้เล็กน้อยlambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
DJMcMayhem

ไม่มีปัญหาดีใจที่ฉันช่วยได้!
DJMcMayhem

1
ฉันเกลียดที่จะเป็นคนที่มีข่าวร้าย แต่สิ่งนี้ไม่ได้ล้มเหลวสำหรับ '#'ซึ่ง OP บอกว่าเป็นเรื่องจริงหรือ จะไม่ได้ก็ยังล้มเหลวถ้า hashtag มีขีดใด ๆ ที่เป็นเท็จภายใต้isalpha?
TheBikingViking

@TheBikingViking ขออภัยฉันจะพยายามแก้ไขปัญหานี้ในตอนนี้
Dignissimus - Spammy

2
@TheBikingViking นั่นไม่ใช่ความหมายที่ไม่ใช่การแข่งขัน ไม่ใช่การแข่งขันไม่ใช่ข้อแก้ตัวสำหรับการส่งที่ไม่ถูกต้อง ขั้นตอนที่ถูกต้องคือการลบคำตอบแก้ไขแล้วยกเลิกการลบ
Mego

1

Pyke, 19 ไบต์

\#.^It,!It\_D-PRkq|

ลองที่นี่!

แก้ไขด่วนสำหรับคืนนี้


1
@kenorb รีมันปิงฉันถ้ามีปัญหาอื่น ๆ อีกต่อไป
บลู

#123ผลตอบแทนยังคงไม่มีอะไรไม่ควรกลับ 0
kenorb

1
ไม่มีอะไรเป็นเท็จบูลีน
บลู

1

Ruby, 16 + 3 1 ( nแฟล็ก) = 19 17 ไบต์

ใช้0เป็นความจริงและnilเป็นเท็จ

p~/^#(?!\d)\w*$/

ruby -ne 'p~/^#(?!\d)\w*$/'เรียกว่ามันเป็น ขอบคุณ @manatwork สำหรับการแก้ไขข้อผิดพลาด bash เมื่อเรียกใช้โปรแกรม


1
ทำตัวเองชอบและใส่รหัสในคำพูดเดียว มิฉะนั้นเชลล์จะพยายาม (หรือแย่กว่านั้นให้ทำสำเร็จ) การขยายทุกชนิด (เกี่ยวกับปัญหาปัจจุบันด้วย!โปรดดูที่นักออกแบบกิจกรรมใน man bash.)
manatwork

1

ML มาตรฐาน , 121 118 107 ไบต์

(fn#"#"::a=>(fn x::r=>x> #"@"andalso List.all(fn#"_"=>1=1|c=>Char.isAlphaNum c)a|e=>1=1)a|e=>1=0)o explode;

ลองออนไลน์! โซลูชันการทำงานโดยไม่ต้องใช้ regex itประกาศฟังก์ชั่นที่ไม่ระบุชื่อซึ่งเป็นตราสารหนี้ที่จะระบุผลโดยปริยาย

> val it = fn : string -> bool    
- it "#valid_hash";
> val it = true : bool

4
isAlphaNum$orelseมันค่อนข้างคุกคาม ...
แมว

@cat นี้อาจจะเป็นสิ่งที่ดีเพียงหนึ่งสามารถพูดเกี่ยวกับผู้ประกอบการดังกล่าวอย่างละเอียดบูลเป็นและorelse andalso
Laikoni

2
มันเหมือนAlphaNum, orelse!! ( orelse what?)
แมว

หนึ่งอาจพิจารณาo explodeในตอนท้ายที่จะค่อนข้างขู่เกินไป ...
Laikoni

1
SML ดูน่ากลัวมากฉันไม่คิดว่าฉันจะสามารถจัดการได้ตลอดทั้งวัน: c
cat

1

Excel VBA ขนาด 54 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อทันทีที่รับอินพุตจากเซลล์[A1]ตรวจสอบว่าค่าของเซลล์ตรงกับLikeรูปแบบและส่งออกเป็นBooleanหน้าต่าง VBE ทันทีหรือไม่

?Not[Left(A1,2)]Like"[#]#"And[A1]Like"[#][_a-zA-z0-9]*



0

Lua ขนาด 39 ไบต์

print(arg[1]:match("^#[%a_][%a_%d]*$"))

copypasta ตรงไปตรงมาของคำอธิบายการแข่งขัน เอาต์พุตเท็จnilถ้าไม่แฮชแท็กเอาท์พุทแฮชแท็กตามความเป็นจริงกลับเป็นอย่างอื่น

สามารถย่อให้สั้นลงหนึ่งไบต์ได้อีกโดยใช้findหากรายการผลลัพธ์ของค่าสองค่า (ซึ่งเป็นความจริง) ไม่ทำลายกฎ


ฉันคิดว่านี่จะไม่ตรง#กับของตัวเอง
Martin Ender

@ มาร์ตินเอนเดอร์แน่นอน มันไม่ควร ไม่มีคำตอบยอดนิยมที่ทำเช่นนั้น ยังcodegolf.stackexchange.com/questions/85619/hashtag-or-not/ …
Oleg V. Volkov

ไม่ว่า#จะเป็นแฮชแท็กบน Twitter หรือ Facebook นั้นไม่เกี่ยวข้องกับความท้าทายนี้ สเปคมีความชัดเจนมากเกี่ยวกับความจริงที่ว่า#ควรพิจารณาแฮชแท็กสำหรับวัตถุประสงค์ของการท้าทายนี้ และในขณะที่ผมยังไม่ได้ตรวจสอบทุกคำตอบทั้งหมดที่ฉันได้ตรวจสอบทำยอมรับ#เป็นแฮชแท็กดังนั้นฉันไม่แน่ใจว่าคำตอบด้านบนที่คุณกำลังหมายถึง
Martin Ender

0

Clojure, 130 135 132 bytes

  • +5 ไบต์เพื่อจัดการกับ NPE ที่เกิดขึ้นเมื่อสตริงประกอบด้วย hashtag เท่านั้น

  • -2 Character/isLetterOrDigitไบต์โดยใช้

(fn[s](let[[h & r]s n(map int r)](and(= h\#)(not(<= 48(or(first n)0)57))(every? #(or(Character/isLetterOrDigit^long %)(= 95 %))n))))

Ungolfed:

(defn hashtag? [s]
  (let [[h & r] s
        codes (map int r)]
    (and (= h \#)
         (not (<= 48 (or (first codes) 0) 57))
         (every?
           #(or (Character/isLetterOrDigit ^long %)
                (= 95 %))
           codes))))

อ๊ะนี่จะให้ NPE สำหรับ "#" ให้เวลาฉันสักวินาที
Carcigenicate

0

Java 8, 57 54 28 ไบต์

s->s.matches("#(?!\\d)\\w*")

คำตอบจอประสาทตาของ Port of Martin Enderเพื่อประหยัดสองสามไบต์และจับคู่เพิ่มกรณีทดสอบ
ไม่ว่ามักจะตรงกับสตริงทั้งหมดจึงไม่มีความจำเป็นในการString#matches^...$

ลองที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.