ง่ายเหมือน One-Two-Three


35

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้จำนวนเต็มบวก คุณสามารถสมมติว่าอินพุตถูกต้องและอาจใช้เป็นสตริง หากเป็นตัวเลขใด ๆ

123
234
345
456
567
678
789

แล้วเอาท์พุทtruthyค่า มิฉะนั้นให้ส่งออกค่าเท็จ ตัวอย่างเช่นอินพุต

1
2
3
12
122
124
132
321
457
777
890
900
1011
1230
1234

จะต้องส่งผลให้การส่งออกเท็จ (อินพุตจะไม่มีเลขศูนย์นำหน้าดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งต่าง ๆ เช่น012)

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


โอ้อนุญาตให้ใช้สตริงได้ สิ่งที่เกี่ยวกับอาร์เรย์หลัก?
เดนนิส

@ เลขที่เดนนิสขอเก็บไว้ที่สตริงธรรมดาหรือ ints ธรรมดา
งานอดิเรกของ Calvin

6
ถ้าฉันรับอินพุตสตริงฉันควรจัดการ012ไหม
Lynn

1
@ ลินน์หมายเลข012จะเป็นเท็จ แต่คุณสามารถสันนิษฐานได้ว่าไม่ใช่อินพุต
งานอดิเรกของ Calvin

1
@ BradGilbertb2gills ไม่ได้มันควรจะตอบสนองความหมายที่เชื่อมโยงของความจริง / เท็จ - meta.codegolf.stackexchange.com/questions/2190/…
งานอดิเรกของ Calvin

คำตอบ:


46

Python ขนาด 24 ไบต์

range(123,790,111).count

ฟังก์ชั่นไม่ระบุชื่อที่ส่งออก 0 หรือ 1 มันสร้างรายการ[123, 234, 345, 456, 567, 678, 789]และนับจำนวนครั้งที่จะปรากฏขึ้น

f=range(123,790,111).count

f(123)
=> 1
f(258)
=> 0

คุณไม่สามารถลบไบต์ด้วยการเริ่มต้นที่ 12 แทนที่จะเป็น 123 หรือไม่
var firstName

1
ต้องไม่รวม 12
xnor

แต่เราสามารถสรุปได้ว่ามันจะไม่ป้อนข้อมูล? ฉันสับสน
var firstName

1
หากคุณกำลังพูดถึงความคิดเห็นพวกเขากำลังบอกว่าถ้าคุณรับข้อมูลเป็นสตริง (ซึ่งไม่ใช่สิ่งนี้) คุณสามารถคาดหวังว่าตัวเลขจะไม่มีเลขศูนย์นำหน้าดังนั้น 12 จะได้รับเป็น "12" และไม่ใช่ " 012"
xnor

34

Python ขนาด 24 ไบต์

lambda n:n%111==12<n<900

มีเงื่อนไขผูกมัดมากมาย


ความสามารถในการเปรียบเทียบช่วงที่ง่ายต่อการเต้นภาษาใด ๆ ที่ฉันรู้อยู่แล้ว ฉันต้องค้นหามันเพื่อดูว่ามันทำงานอย่างไร
GuitarPicker

ว้าวถ้าไม่ใช่เพราะคำว่าlambdaฉันจะไม่เดาด้วยซ้ำว่าเป็น Python มันช่างน่ากลัว
Steve Bennett

25

Haskell, 22 ไบต์

(`elem`[123,234..789])

ฟังก์ชั่นที่ไม่ระบุชื่อ สร้างรายการที่เว้นระยะเท่ากัน[123, 234, 345, 456, 567, 678, 789]และตรวจสอบว่าอินพุตเป็นองค์ประกอบหรือไม่


1
ไม่มีทาง! นั่นคือเวทมนตร์!
YSC

12

Brachylogขนาด 9 ไบต์

h:2j:12+?

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

เครดิตเดนนิสสำหรับขั้นตอนวิธี

ในภาษาอังกฤษ "(พิสูจน์ได้) ตัวเลขตัวแรกของอินพุตซึ่งต่อกับตัวเองสองครั้งเพิ่ม 12 ยังคงเป็นอินพุต"


1
มันยอดเยี่ยมมาก!
datagod


8

Brain-Flak 76 + 3 = 79 ไบต์

คำตอบนี้เป็นกอล์ฟนี้คำตอบ จริง ๆ แล้วฉันไม่ค่อยรู้ว่าคำตอบของฉันทำงานอย่างไร แต่ DJMcMayhem ให้คำอธิบายที่ดีในคำตอบดั้งเดิมของเขาและคำตอบของฉันคือการดัดแปลงของเขา

([]<>)<>({}[({})]<>)<>(({}[({})()()()()()]<>{}{}<(())>)){{}{}(((<{}>)))}{}{}

มันรันด้วยแฟล็ก -a ascii เพิ่ม 3 ไบต์

คำอธิบาย (แปลก ๆ )

เริ่มต้นด้วยโซลูชันการทำงานดั้งเดิม:

([]<>)<>({}[({})]<>)<>({}[({})]<>)({}{}[()()])({}<({}[()()()])>)(({}{}<(())>)){{}{}(((<{}>)))}{}{}

ฉันเรียกใช้สิ่งนี้ผ่านอัลกอริทึมการเล่นกอล์ฟที่ฉันเขียนและรับ:

([]<>)<>({}[({})]<>)<>(({}[({})]<>{}[()()]<({}[()()()])>{}<(())>)){{}{}(((<{}>)))}{}{}

จากที่นี่ฉันเห็นส่วน<({}[()()()])>{}นี้โดยการคูณด้วยหนึ่งซึ่งทำให้เท่ากับการ{}[()()()]ลดรหัสทั้งหมดเป็น:

([]<>)<>({}[({})]<>)<>(({}[({})]<>{}[()()]{}[()()()]<(())>)){{}{}(((<{}>)))}{}{}

ข้อเสียสุดท้ายสามารถรวมกันได้:

([]<>)<>({}[({})]<>)<>(({}[({})()()()()()]<>{}{}<(())>)){{}{}(((<{}>)))}{}{}

14
"ฉันไม่รู้จริงๆว่าคำตอบของฉันทำงานอย่างไร"คุณชนะอินเทอร์เน็ต
Leaky Nun


@LeakyNun ฉันไม่เชื่อว่าโหมด Ascii จะทำงานได้ในแบบออนไลน์ คุณจะต้องได้รับเวอร์ชัน GitHub
ตัวช่วยสร้างข้าวสาลี

1
โหมด @WheatWizard ASCII ใช้งานได้กับ TIO อย่างแน่นอน คุณสามารถยืนยันได้โดยเพิ่ม 48 ('0') ที่ด้านบนสุดของสแต็ก แม่ชีที่ไม่ถูกต้องอัลกอริทึม (อัลกอริทึมของฉัน ) ผิดเพราะมันแค่ตรวจสอบว่าผลรวมของความแตกต่างคือ 2 (ซึ่งใช้ได้ถ้าความแตกต่างคือ +3 และ -1) น่าเสียดายที่คำตอบของเราทั้งคู่นั้นผิด
DJMcMayhem

1
@WheatWizard คำตอบนี้ดูเหมือนจะไม่ถูกต้อง ลองออนไลน์! (คำตอบดั้งเดิมของฉันไม่ใช่อย่างใดอย่างหนึ่ง)
DJMcMayhem


7

เยลลี่ 6 ไบต์

DI⁼1,1

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

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

DI⁼1,1  Main link. Argument: n (integer)

D       Decimal; convert n to base 10.
 I      Increments; compute the differences of all pairs of adjacent digits.
   1,1  Yield [1, 1].
  ⁼     Test the results to both sides for equality.

012 ไม่ได้คืนเท็จแม้ว่าจริง ๆ แล้วมันจะไม่คืนสิ่งใดเลย ...
Jamie Barker

อินพุตต้องเป็นจำนวนเต็ม เท่าที่ast.literal_evalเป็นห่วงไม่ได้เป็นตัวแทนจำนวนเต็ม012
เดนนิส

7

05AB1E , 5 ไบต์

¥XX‚Q

คำอธิบาย

¥      # deltas
    Q  # are equal to
 XX‚   # [1,1]

ลองออนไลน์


ฉันใช้2Å1แทนXX,เพียงเพื่อ heck ของคำสั่งน้อย (4 แทน 5)
Erik the Outgolfer

@ErikGolfer エリッゴゴフーー: และÅสามารถเขียนบนคีย์บอร์ดของฉัน (ตรงข้ามกับ) ซึ่งเป็นประโยชน์ :) :)
Emigna

(ไม่ใช่ที่,ฉันใช้) ไม่มีลำดับการเขียนคีย์เช่นกันในขณะที่Åอยู่oAบนคีย์บอร์ดของสหรัฐอเมริกา
Erik the Outgolfer

6

MATL , 8 ไบต์

d1=tn2=*

ลองออนไลน์!

สิ่งนี้จะพิมพ์1 1สำหรับอินพุตที่เป็นความจริงและอาร์เรย์ที่มี a 0อยู่ในนั้นสำหรับค่าที่เป็นเท็จเนื่องจากเป็นค่าที่ผิดพลาดใน MATL

คำอธิบาย:

d           % Calculate the difference between consecutive digits
 1=         % Push an array of which elements equal one
   t        % Duplicate this array
    n       % Push the length of this array
     2=     % Push a one if the length is 2, and a zero otherwise
            % Now, if we have a truthy input, the stack looks like:
            %   [1 1]
            %   1
            % And if we have a falsy input, the stack looks something like this:
            %   [1 0]
            %   1
            % Or this:
            %   [1 1]
            %   0
       *    % Multiply the top two elements

อาจd1=Ep4=(ฉันยังไม่ได้ทดสอบอย่างละเอียด)
Luis Mendo

1
หรือdTTX=5 ไบต์
หลุยส์เมนโด

@luismendo whaaa? มันทำงานอย่างไร ฉันไม่พบเอกสารเกี่ยวกับT
DJMcMayhem

Tเป็นที่แท้จริงtrueและเป็นF falseที่อยู่ใกล้เคียงTและFติดกันเพื่อให้TTเป็นซึ่งสำหรับวัตถุประสงค์เหล่านี้จะเทียบเท่ากับ[true true] [1 1]ดูหัวข้อ 4.3 ของข้อมูลจำเพาะ
Luis Mendo

6

Java 7, 46 ไบต์

boolean f(int a){return a>12&a<790&a%111==12;}

หลังจากลองทำหลายสิ่งกับ Leaky Nun ในการแชทดูเหมือนจะสั้นที่สุด บางครั้งคุณต้องทำสิ่งต่าง ๆ อย่างตรงไปตรงมา: /

คำอธิบาย:

boolean f(int a){
    return a>12         Is it more than 12? (stupid edge case)
           &
           a<790        Is it in range the other way? 
           &
           a%111==12;   Is it 12 more than a multiple of 111? 
}

6

Perl 6 ,  35 29 24 21  19 ไบต์

{.chars==3&&'0123456789'.index: $_}
{$_ (elem) (123,*+111...789)}
{$_∈(123,*+111...789)}
*∈(123,*+111...789)
*∈(123,234...789)

คำอธิบาย:

# Whatever lambda ( the parameter is 「*」 )
*

 # is it an element of:

# this sequence
(
  123,
  234,

  # deduce rest of sequence
  ...

  # stop when you generate this value
  789
)

การใช้งาน:

my &code = *∈(123,234...789);

say code 123; # True
say code 472; # False

say (  *∈(123,234...789)  )( 789 ); # True


5

Ruby, 32 30 25 + 2 = 27 ไบต์

+2 ไบต์สำหรับ-nlแฟล็ก

นำข้อมูลเกี่ยวกับ STDIN และพิมพ์หรือtruefalse

p"123456789"[$_]&.size==3

ดูได้ที่ repl.it: https://repl.it/DBn2/2 (คลิกที่▶️จากนั้นพิมพ์อินพุตลงในคอนโซลด้านล่าง)


การทดสอบของคุณแสดง 12 ไปจริง
xnor

@xnor โอ๊ะโอ นั่นจะสอนให้ฉันเล่นกอล์ฟหลังเวลานอน หนี้!
จอร์แดน

ฉันคิดว่า-aทำsplitไม่ได้chop? นอกจากนี้สิ่งที่จะ&ทำอย่างไร ฉันใช้ Ruby รุ่นเก่าที่มีข้อผิดพลาดเกิดขึ้น อย่างไรก็ตามมันทำงานได้อย่างสมบูรณ์ที่ 26 ไบต์โดยที่ไม่มี
xsot

โอ๊ะฉันหมายถึงไม่ได้-l เป็นตัวดำเนินการ "การนำทางที่ปลอดภัย" ซึ่งเพิ่มใน Ruby 2.3 หากไม่มีอินพุตเช่นซึ่งไม่ใช่สารตั้งต้นถ้าจะยกระดับ NoMethodError -a&.19"123456789"
จอร์แดน

@Jordan ฉันไม่ได้รับข้อผิดพลาดใน 2.2 อาจจะใหม่ใน 2.3 เช่นกัน?
xsot

5

Brain-Flakขนาด 99 ไบต์

([{}]({})<>)<>([{}]{}<>)(({})<([{}]{})((){[()](<{}>)}{})>)([{}]{})((){[()](<{}>)}{})<>{{{}}<>{}}<>

ลองออนไลน์!

นี่คือรหัส 98 ไบต์+1สำหรับการ-aตั้งค่าสถานะ

สิ่งนี้พิมพ์1เพื่อความจริงและอาจมี0หรือไม่มีสิ่งใด (ซึ่งเทียบเท่ากับ 0) สำหรับความเท็จ


พยายามกำจัดป๊อปอัปที่ไร้ประสิทธิภาพ ฉันเห็นพวงในรหัสของคุณ พวกเขาดูเหมือน...)({}แต่แตกต่างกันไป หากคุณกดและป๊อปโดยไม่ใช้ค่าคุณสามารถรวมเป็นหนึ่ง ฉันสามารถเชื่อมโยงคุณไปยังเวอร์ชันของรหัสของคุณกับสิ่งเหล่านี้ได้ถ้าคุณต้องการ
ตัวช่วยสร้างข้าวสาลี

นี่คือ 76 ไบท์กอล์ฟของโปรแกรมของคุณ ฉันใช้เครื่องมือเพิ่มประสิทธิภาพสะเก็ดระเบิดของสมองกับรหัสของคุณด้วยการตั้งค่าที่กำหนดเอง
ข้าวสาลีตัวช่วยสร้าง


4

Brain-Flakขนาด 114 ไบต์

([((()()()){}){}]{})(((()()()){}())<>)<>{({}<(({}[(((((()()()){}()){}){}){}){}]())){(<{}>)<>({}[()])<>}{}>[()])}<>

ลองออนไลน์!

รุ่นที่ถูกต้อง (ในจิตวิญญาณของคำถาม): ใช้จำนวนเต็มเป็นอินพุตเอาต์พุต 0 สำหรับความเท็จและ 1 สำหรับความจริง

นี่ไม่สะอาด

ขั้นตอนวิธี

nให้การป้อนข้อมูลที่เป็น

ผลลัพธ์คือ iff ที่เป็น(n-123)(n-234)(n-345)(n-456)(n-567)(n-678)(n-789)=0จริง

ฉันคำนวณเลขเจ็ดพวกนั้นโดยการลบ 12 ครั้งแรกจากนั้นลบ 111 7 ครั้งแล้วคำนวณตรรกะสองเท่าของตัวเลขเจ็ดตัวนั้นแล้วบวกพวกมันเข้าด้วยกัน

สำหรับผลลัพธ์ที่เป็นความจริงผลรวมคือ 6; สำหรับผลลัพธ์ที่ปลอมแปลงผลรวมคือ 7

จากนั้นฉันลบผลรวมจาก 7 แล้วเอาคำตอบออก


ฉันไม่เข้าใจรหัส แต่อัลกอริทึมนั้นฉลาดดังนั้นจึงมี +1
Cyoce

4

R, 30 22 ไบต์

scan()%in%(12+1:7*111)

ไม่น่าตื่นเต้นเป็นพิเศษ ตรวจสอบว่าอินพุทอยู่ในลำดับที่กำหนดโดย 12 + 111k โดยที่ k คือแต่ละ 1 ถึง 7 โปรดทราบว่าจะ:นำหน้า*การคูณจะเกิดขึ้นหลังจากสร้างลำดับ


4

C # (Visual C # Interactive Compiler) , 41 30 23 ไบต์

การส่งรหัสกอล์ฟครั้งแรกต้องอ่อนโยน :)

a=>{return a>12&&a<790?a%111==12:false;};
a=>a>12&&a<790?a%111==12:false
a=>a>12&a<790&a%111==12

ลองออนไลน์!

  • -11 ไบต์ขอบคุณ Kirill L.
  • ไบต์ -7 อื่นต้องขอบคุณ ASCII-only

1
ยินดีต้อนรับสู่ PPCG! คุณสามารถบันทึกไบต์จำนวนหนึ่งได้โดยปล่อยวงเล็บปีกกาและreturnคำหลัก: 30 ไบต์
Kirill L.



3

Brainfuck, 43 ไบต์

,>,>,>,[>>]<[[-<-<->>]<+[>>]<++[>>->]<+<]>.

Bah ฉันไม่ดีที่นี้ ขาออก\x01ถ้าเอาท์พุทเป็นหนึ่งในสตริง123, 234, ... , 789; เอาท์พุทเป็น\x00อย่างอื่น

(ฉันชนะ Java 7 แม้ว่า ... )

ลองออนไลน์!


จุดประสงค์[>>]<คืออะไร ไม่สามารถที่เพิ่งจะเป็น>?
DJMcMayhem

ฉันต้องการเปลี่ยนทิศทางโปรแกรมเป็นความล้มเหลว (โดยการขว้างมันออกนอกเส้นทาง) หากเซลล์ใต้ตัวชี้ไม่เป็นศูนย์ ณ จุดนั้น
ลินน์


@LeakyNun ที่ดูแตกต่างไปจากเดิมอย่างสิ้นเชิง อย่าลังเลที่จะโพสต์มันเป็นคำตอบที่แยกต่างหาก
ลินน์


3

JavaScript ES6, 26 ไบต์

n=>1>(n-12)%111&n>99&n<790

สิ่งนี้ใช้ประโยชน์จากความจริงที่ว่าฉันใช้ตัวดำเนินการตรรกะแบบบิตอัจฉริยะในสิ่งที่เป็นบูลีน (ซึ่งเป็นแบบบิต!)

ขอบคุณ Titus ที่ช่วยชีวิต 2


1
สองไบต์: (n-12)และn>99
Titus

@Titus โอ้ดีมาก ๆ +1 กับคุณ!
WallyWest

1
=> คือ ES6 ไม่ใช่ ES5
Neil

1
ฉันเชื่อว่ามีการตัดสินใจใน meta ที่คุณไม่ต้องนับ "f =" ทำให้ 26 ไบต์นี้
Charlie Wynn

1
@WallyWest ฉันคิดว่าเป็นเพราะไม่จำเป็นต้องมี "f =" เพื่อใช้ฟังก์ชั่นในทุกกรณีดังนั้นทำไมคุณถึงคิดว่าคุณต้องการมันสำหรับกรณีนี้ ผู้คนฉลาดกว่าที่ฉันคิดว่ามันไม่เป็นไรดังนั้นฉันจึงไปกับมัน;)
Charlie Wynn

3

Excel - 62 57 35 31 ไบต์

ตามคำตอบของ Anastasiya-Romanova แต่คืนTRUE/FALSEค่าของ Excel

=AND(LEN(N)=3,MID(N,2,1)-MID(N,1,1)=1,MID(N,3,1)-MID(N,2,1)=1)

นอกจากนี้เราสามารถไปที่

=AND(LEN(N)=3,MID(N,2,1)-LEFT(N)=1,RIGHT(N)-MID(N,2,1)=1)

เนื่องจากทั้งคู่RIGHTและLEFTส่งคืนอักขระเดี่ยวโดยค่าเริ่มต้น

และได้รับแรงบันดาลใจจากโซลูชัน Python:

=AND(LEN(N)=3,MOD(N,111)=12,N<>900)

ขอบคุณ Neil สำหรับอีก 4 ไบต์ ...

=AND(N>99,MOD(N,111)=12,N<900)

ไม่ได้N<900ช่วยให้คุณประหยัดไบต์ซึ่งในกรณีนี้คุณยังสามารถใช้แทนN>99 LEN(N)=3
Neil

1
21 ไบต์: =REPT(LEFT(N),3)+12=Nโดยที่Nชื่อของเซลล์อ้างอิง
Engineer Toast

3

Brachylog (2), 7 ไบต์

ẹ~⟦₂-_2

ลองออนไลน์!

คำอธิบาย

ẹ~⟦₂-_2
ẹ        Split into digits
 ~⟦₂     Assert that this is an increasing range; take its endpoints
    -_2  Assert that the starting minus ending endpoint is -2

ในฐานะที่เป็นโปรแกรมเต็มรูปแบบเราจะได้รับผลตอบแทนจริงหากยืนยันทั้งหมดถือเป็นผลตอบแทนที่ผิดพลาดหากล้มเหลว



2

Excel - 104 ไบต์

=IF(LEN(N)<3,"Falsy",IF(AND(LEN(N)=3,MID(N,2,1)-MID(N,1,1)=1,MID(N,3,1)-MID(N,2,1)=1),"Truthy","Falsy"))

คำอธิบาย:

ไวยากรณ์สำหรับสูตร IF ใน Excel คือ:

IF( condition, [value_if_true], [value_if_false] )

ถ้าความยาวของการป้อนข้อมูลNที่มันเป็นชื่อของเซลล์อ้างอิงเป็นน้อยกว่า 3 แล้วมันจะกลับFalsy มิฉะนั้นถ้าความยาวของการป้อนข้อมูลNคือ 3 และทั้งความแตกต่างของสองหลักและหลักแรกและความแตกต่างของตัวเลขที่สามและสองหลักจะเท่ากับ 1 แล้วก็จะกลับTruthy


21 ไบต์: =REPT(LEFT(N),3)+12=Nโดยที่Nชื่อของเซลล์อ้างอิง
Engineer Toast

2

Dyalog APL ขนาด 10 ไบต์

รับอาร์กิวเมนต์สตริง

1 1≡¯2-/⍎¨

1 1≡ เป็น {1, 1} ที่เหมือนกันกับ

¯2-/ ความแตกต่างของคู่ที่ชาญฉลาดที่ตรงกันข้ามของ

⍎¨ ตัวละครแต่ละตัวนำมาเป็นตัวเลขหรือไม่?

ลองใช้ออนไลน์! ( ถูกจำลองด้วยeเหตุผลด้านความปลอดภัย)



2

PHP, 31 ไบต์

<?=($n=$_GET[n])-12==$n[0]*111;

ตรวจสอบว่าตัวเลขแรกของ (หมายเลขลบ 12) เป็นทวีคูณของ 111


2

PowerShell v3 +, 24 ไบต์

($args[0]-12)/111-in1..7

ใช้เคล็ดลับ"ทวีคูณของ 111 บวก 12"เดียวกันกับคำตอบอื่น ๆ แต่ไปในทิศทางอื่น ใช้อินพุต$args[0]ลบ12หารด้วย111และตรวจสอบว่าเป็น-inช่วง1..7หรือไม่ ส่งออกค่าบูลีนจริง / เท็จ ต้องการ v3 + สำหรับ-inผู้ปฏิบัติงาน

กรณีทดสอบ

PS C:\Tools\Scripts\golfing> 123,234,345,456,567,678,789|%{.\easy-as-one-two-three.ps1 $_}
True
True
True
True
True
True
True

PS C:\Tools\Scripts\golfing> 1,2,3,12,122,124,132,321,457,777,890,900,1011,1230,1234|%{.\easy-as-one-two-three.ps1 $_}
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False

2

รหัสเครื่อง ARM, 18 ไบต์

Hex dump (endian น้อย):

3803 d105 6808 ebc0 2010 b280 f2a0 1001 4770

นี่คือฟังก์ชั่นที่ใช้ความยาวคู่ของตัวชี้สำหรับสตริง เอาต์พุตเป็น bash-style ซึ่งเอาต์พุต 0 สำหรับ true และค่าที่ไม่เป็นศูนย์สำหรับ false ใน C ฟังก์ชั่นจะประกาศ int oneTwoThree (ความยาว size_t, อักขระ char *) การเข้ารหัสคำสั่งคือ thumb-2 ซึ่งมีคำแนะนำ 2 และ 4 ไบต์ ทดสอบกับราสเบอร์รี่ Pi 3

ชุด Ungolfed:

.syntax unified
.text
.global oneTwoThree
.thumb_func
oneTwoThree:
    @Input: r0 - the number of characters in the string
    @r1 - A pointer to the (not necessarily NUL-terminated)
    @string representation of the number (char*)
    @Output: r1 - 0 if the number is in 123,234,...,789, else non-zero (bash-style)
    subs r0,r0,#3
    bne end @Return non-zero if r0!=3
    ldr r0,[r1] @Remember that this is little endian
    @So the first digit is the most siginificant byte
    @I.e. if the input was 123 then r0 contains 0xXY010203 where XY is garbage

    rsb r0,r0,r0,lsr #8 @r0=(r0>>8)-r0 (rsb is reverse subtract)
    uxth r0,r0 @r0&=((1<<16)-1) (mask off top half)
    @Now r0 is 0x0101 iff we have a matching number
    sub r0,r0,#0x101
    @Now r0 is 0 iff the string fit the specification

    end:
    bx lr @return

สคริปต์ทดสอบ (ประกอบด้วย):

.syntax unified
.text
.global main
.thumb_func
main:
    push {r4,lr}
    ldr r4,[r1,#4] @r0=argv[1]
    mov r0,r4
    bl strlen
    @Now r0 is the length of the string argv[1]
    mov r1,r4
    bl oneTwoThree @oneTwoThree(strlen(argv[1]),argv[1])
    cmp r0,#0
    it ne
    movne r0,#1 @Output through return code, 1 if false
    pop {r4,pc}

2

JavaScript (ES6), 34 ไบต์

และอีกหนึ่งตัวเลือกใน JS จะเข้าเป็นสตริงและผล0สำหรับfalseและสำหรับ1true

n=>++n[0]==n[1]&++n[1]==n[2]&!n[3]

ดูโซลูชันอื่น ๆ ของฉันที่นี่และที่นี่


ลองมัน

f=
n=>++n[0]==n[1]&++n[1]==n[2]&!n[3]
i.addEventListener("input",_=>o.innerText=f(i.value))
<input id=i type=number><pre id=o>

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