Dễ dàng như một-hai-ba


35

Viết chương trình hoặc hàm lấy số nguyên dương. Bạn có thể giả sử đầu vào là hợp lệ và có thể coi đó là một chuỗi. Nếu số là bất kỳ

123
234
345
456
567
678
789

đầu ra sau đó một truthy giá trị. Nếu không, sản lượng một falsy giá trị. Ví dụ: đầu vào

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

tất cả phải dẫn đến đầu ra giả. (Đầu vào sẽ không có các số 0 đứng đầu nên bạn không cần lo lắng về những thứ như 012.)

Mã ngắn nhất tính bằng byte thắng.


Oh, chuỗi được phép? Còn mảng số thì sao?
Dennis

@Dennis Không. Hãy giữ nó thành chuỗi đơn giản hoặc ints đơn giản.
Sở thích của Calvin

6
Nếu tôi lấy chuỗi đầu vào, tôi có nên xử lý 012không?
Lynn

1
@Lynn số 012sẽ là giả nhưng bạn có thể cho rằng nó không phải là đầu vào.
Sở thích của Calvin

1
@ BradGilbertb2gills Không. Nó chỉ cần đáp ứng định nghĩa được liên kết của sự thật / giả dối
Sở thích của Calvin

Câu trả lời:


46

Python, 24 byte

range(123,790,111).count

Hàm ẩn danh xuất ra 0 hoặc 1. Nó tạo danh sách [123, 234, 345, 456, 567, 678, 789]và đếm số lần đầu vào xuất hiện.

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

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

Bạn không thể loại bỏ một byte bằng cách bắt đầu ở 12 thay vì 123?
var FirstName

1
Nó không cần bao gồm 12.
xnor

Nhưng chúng ta có thể cho rằng nó sẽ không phải là đầu vào? Tôi đang bối rối
var FirstName

1
Nếu bạn đang nói về các bình luận, họ sẽ nói rằng nếu bạn lấy đầu vào dưới dạng một chuỗi (đây không phải là chuỗi), bạn có thể mong đợi các số không có các số 0 đứng đầu, vì vậy 12 sẽ được đưa ra là "12" chứ không phải " 012 ".
xnor

34

Python, 24 byte

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

Chỉ cần rất nhiều điều kiện xích.


Có thể so sánh một phạm vi dễ dàng đánh bại bất kỳ ngôn ngữ nào tôi đã biết. Tôi đã phải tìm kiếm nó để xem làm thế nào nó hoạt động.
GuitarPicker

Ồ, nếu không phải là từ lambdatôi thậm chí sẽ không đoán được đó là Python. Điều đó thật kinh khủng.
Steve Bennett

25

Haskell, 22 byte

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

Một chức năng ẩn danh. Tạo danh sách cách đều nhau [123, 234, 345, 456, 567, 678, 789]và kiểm tra xem đầu vào có phải là một phần tử không.


1
Không đời nào! Đó là phép màu!
YSC



8

Brain-Flak 76 + 3 = 79 byte

Câu trả lời này là một golf của câu trả lời này . Tôi thực sự không biết câu trả lời của mình hoạt động như thế nào nhưng DJMcMayhem đưa ra một lời giải thích tốt trong câu trả lời ban đầu của anh ấy và câu trả lời của tôi là một sửa đổi của anh ấy.

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

Nó được chạy với cờ -a ascii thêm 3 byte.

Giải thích (các loại)

Bắt đầu với giải pháp làm việc ban đầu:

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

Tôi chạy nó thông qua một thuật toán chơi gôn đơn giản mà tôi đã viết và nhận được:

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

Từ đây tôi thấy phần <({}[()()()])>{}này về cơ bản nhân với một phần làm cho nó bằng để {}[()()()]giảm toàn bộ mã thành:

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

Tiêu cực cuối cùng có thể được kết hợp:

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

14
"Tôi thực sự không biết câu trả lời của tôi hoạt động như thế nào" bạn giành được internet
Leaky Nun


@LeakyNun Tôi không tin chế độ Ascii hoạt động khi thử trực tuyến. Bạn sẽ phải có phiên bản github.
Thuật sĩ lúa mì

1
Chế độ @WheatWizard ASCII chắc chắn hoạt động trên TIO. Bạn có thể xác minh điều này bằng cách thêm 48 ('0') vào đầu ngăn xếp . Nữ tu bị rò rỉ là đúng, thuật toán (thuật toán của tôi ) sai, bởi vì nó chỉ kiểm tra xem tổng của sự khác biệt là 2 (hoạt động nếu chênh lệch là +3 và -1). Thật không may, cả hai câu trả lời của chúng tôi đều sai.
DJMcMayhem

1
@WheatWizard Câu trả lời này có vẻ không hợp lệ. Hãy thử trực tuyến! (Câu trả lời ban đầu của tôi cũng không phải)
DJMcMayhem


7

Thạch , 6 byte

DI⁼1,1

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

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 không trả lại sai, mặc dù nó không thực sự trả lại bất cứ điều gì ...
Jamie Barker

Đầu vào phải là một số nguyên. Theo như ast.literal_evalcó liên quan, 012không đại diện cho một số nguyên .
Dennis

7

05AB1E , 5 byte

¥XX‚Q

Giải trình

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

Dùng thử trực tuyến


Tôi đã sử dụng 2Å1thay vì XX,, chỉ cho các lệnh ít hơn (4 thay vì 5).
Erik the Outgolfer

@ErikGolfer リ ッ ク ゴ ル フ ァ: và Åcó thể ghi trên bàn phím của tôi (trái ngược với ) đó là một lợi ích :)
Emigna

(không phải ,tôi đã sử dụng) cũng không có trình tự khóa soạn thảo, trong khi đó ÅoAtrên bàn phím en-US.
Erik the Outgolfer

6

MATL , 8 byte

d1=tn2=*

Hãy thử trực tuyến!

Điều này sẽ in 1 1cho một đầu vào trung thực và một mảng có một 0giá trị giả, vì đó là sai trong MATL.

Giải trình:

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

Có lẽ d1=Ep4=(tôi chưa kiểm tra kỹ lưỡng)
Luis Mendo

1
Hoặc dTTX=cho 5 byte
Luis Mendo

@luismendo whaaa? Cách làm việc bình thường như thế nào? Tôi không thể tìm thấy tài liệu trênT
DJMcMayhem

Tlà nghĩa đen true, và Ffalse. Láng giềng TFdính vào nhau, do đó TT[true true], mà vì những mục đích tương đương với [1 1]. Xem phần 4.3 của thông số kỹ thuật
Luis Mendo

6

Java 7, 46 byte

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

Sau khi thử vài thứ với Leaky Nun trong trò chuyện, đây dường như là ngắn nhất. Đôi khi bạn chỉ cần làm mọi thứ theo cách đơn giản: /

Giải trình:

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 byte

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

Giải trình:

# 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
)

Sử dụng:

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 byte

+2 byte cho -nl cờ.

Lấy đầu vào trên STDIN và in truehoặc false.

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

Xem nó trên repl.it: https://repl.it/DBn2/2 (Nhấp vào ▶ và sau đó nhập dữ liệu vào bảng điều khiển bên dưới.)


Các xét nghiệm của bạn cho thấy 12 sẽ thành sự thật.
xnor

@xnor Rất tiếc. Điều đó sẽ dạy tôi chơi golf sau khi đi ngủ. Đã sửa!
Jordan

Tôi nghĩ -acó làm splitđược không chop? Ngoài ra, những gì &làm? Tôi đang sử dụng một Ruby cũ hơn gây ra lỗi. Dù sao, nó hoạt động hoàn hảo ở 26 byte mà không cần nó.
xsot

Rất tiếc, ý tôi là -lkhông -a. &.là toán tử "điều hướng an toàn", được thêm vào trong Ruby 2.3. Nếu không có đầu vào như thế 19, không phải là chuỗi con "123456789", sẽ tạo ra NoMethodError.
Jordan

@Jordan Tôi không gặp lỗi trong 2.2. Có lẽ nó cũng mới trong 2.3?
xsot

5

Brain-Flak , 99 byte

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

Hãy thử trực tuyến!

Đây là 98 byte mã +1cho -acờ.

Điều này in 1cho sự thật, và 0hoặc không có gì (tương đương với 0) cho sai


Cố gắng để thoát khỏi sự thiếu hiệu quả pop pop. Tôi có thể thấy một bó trong mã của bạn. Họ trông giống ...)({}nhưng khác nhau. Nếu bạn đẩy và bật mà không sử dụng giá trị, bạn có thể ngưng tụ nó thành một thứ. Tôi có thể liên kết bạn với một phiên bản mã của bạn với tất cả những thứ được đánh gôn nếu bạn muốn.
Thuật sĩ lúa mì

Đây là 76 byte golf của chương trình của bạn. Tôi đã chạy trình tối ưu hóa não bộ của mình qua mã của bạn với một vài cài đặt tùy chỉnh.
Thuật sĩ lúa mì


4

Brain-Flak , 114 byte

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

Hãy thử trực tuyến!

Phiên bản chính xác (theo tinh thần của câu hỏi): lấy số nguyên làm đầu vào, đầu ra 0 cho falsey và 1 cho sự thật.

Đây không phải là ngăn xếp sạch sẽ.

Thuật toán

Hãy để đầu vào là n.

Đầu ra là iff trung thực (n-123)(n-234)(n-345)(n-456)(n-567)(n-678)(n-789)=0.

Tôi đã tính bảy số đó bằng cách trừ 12 số đầu tiên và sau đó trừ 111 7 lần, sau đó tính toán logic kép KHÔNG của bảy số đó và cộng chúng lại.

Đối với kết quả trung thực, tổng là 6; đối với kết quả falsey, tổng là 7.

Sau đó, tôi trừ tổng từ 7 và đưa ra câu trả lời.


Tôi không hiểu mã, nhưng thuật toán rất thông minh nên có +1.
Cyoce

4

R, 30 22 byte

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

Không đặc biệt thú vị; kiểm tra xem đầu vào có nằm trong chuỗi được cho bởi 12 + 111k hay không, trong đó k là từ 1 đến 7. Lưu ý rằng :trước *đó sẽ xảy ra phép nhân sau khi chuỗi được tạo.


4

C # (Trình biên dịch tương tác Visual C #) , 41 30 23 byte

Trình mã golf đầu tiên, hãy nhẹ nhàng :)

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

Hãy thử trực tuyến!

  • -11 byte nhờ Kirill L.
  • Một -7 byte khác chỉ nhờ ASCII.

1
Chào mừng đến với PPCG! Bạn có thể lưu một số byte bằng cách bỏ các dấu ngoặc nhọn và returntừ khóa: 30 byte
Kirill L.


1
Đẹp đầu tiên nộp!
Hiện thân của sự thiếu hiểu biết

3

Brainfuck, 43 byte

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

Bah, tôi không giỏi trong việc này. Đầu ra \x01nếu đầu ra là một trong các chuỗi 123,, 234thì , 789; đầu ra \x00khác.

(Tôi đã đánh bại Java 7, mặc dù vậy)

Hãy thử trực tuyến!


Điểm của là [>>]<gì? Không thể >như vậy sao?
DJMcMayhem

Tôi muốn điều khiển chương trình thất bại (bằng cách ném nó đi sai đường) nếu ô bên dưới con trỏ không bằng 0 tại thời điểm đó.
Lynn


@LeakyNun Trông thật khác biệt; vui lòng gửi nó dưới dạng một câu trả lời riêng biệt
Lynn


3

JavaScript ES6, 26 byte

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

Điều này lợi dụng thực tế là tôi đang sử dụng các toán tử logic bit-khôn ngoan trên những gì thực chất là booleans (dựa trên bit!)

Cảm ơn Tít đã cứu 2.


1
hai byte: (n-12)n>99
Tít

@Titus ơi, rất hay, +1 cho bạn!
WallyWest

1
=> là ES6, không phải ES5.
Neil

1
Tôi tin rằng đã quyết định trong meta rằng bạn không phải tính "f =" tạo ra 26 byte này
Charlie Wynn

1
@WallyWest Tôi nghĩ rằng đó là vì không cần thiết phải có "f =" để sử dụng chức năng trong mọi trường hợp, vậy tại sao bạn lại cho rằng bạn cần nó cho trường hợp này? Mọi người thông minh hơn tôi đã quyết định rằng nó ổn nên tôi chỉ đi với nó;)
Charlie Wynn

3

Excel - 62 57 35 31 byte

Dựa trên câu trả lời của Anastasiya-Romanova, nhưng trả về TRUE/FALSEcác giá trị của Excel .

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

Hơn nữa, chúng ta có thể đến

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

vì cả hai RIGHTLEFTtrả về một ký tự theo mặc định.

Và, lấy cảm hứng từ một số giải pháp Python:

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

Cảm ơn Neil vì đã có thêm 4 byte ...

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

Không N<900tiết kiệm cho bạn một byte, trong trường hợp đó bạn cũng có thể sử dụng N>99thay vì LEN(N)=3.
Neil

1
21 byte: =REPT(LEFT(N),3)+12=Nnơi Nlà tên của các tế bào tham khảo.
Kỹ sư Toast

3

Brachylog (2), 7 byte

ẹ~⟦₂-_2

Hãy thử trực tuyến!

Giải trình

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

Là một chương trình đầy đủ, chúng tôi nhận được một sự trở lại trung thực nếu tất cả các xác nhận giữ, một trở lại falsey nếu có bất kỳ thất bại.


3

CJam, 13 9 byte

A,s3ewqe=

Hãy thử trực tuyến!

Giải trình

A,s        e# Push "0123456789".
   3ew     e# Split it into contiguous length-3 chunks: ["012" "123" "234" ... "789"].
      q    e# Push the input.
       e=  e# Count the number of times the input appears in the array.

5
không hoạt động nếu số giống như2345
Maltysen

@Maltysen Đã sửa lỗi
Business Cat

2

Excel - 104 byte

=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"))

Giải trình:

Cú pháp cho công thức IF trong Excel là:

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

Nếu độ dài của đầu vào N, trong đó tên của ô tham chiếu, nhỏ hơn 3, thì nó sẽ trả về Falsy . Khác, nếu độ dài của đầu vào Nlà 3 và cả hai sự khác biệt của chữ số thứ hai và chữ số thứ nhất và sự khác biệt của chữ số thứ ba và chữ số thứ hai bằng 1, thì nó sẽ trả về Truthy .


21 byte: =REPT(LEFT(N),3)+12=Nnơi Nlà tên của các tế bào tham khảo.
Kỹ sư Toast

2

APL Dyalog , 10 byte

Đưa ra đối số chuỗi.

1 1≡¯2-/⍎¨

1 1≡ Là {1, 1} giống hệt với

¯2-/ sự khác biệt cặp khôn ngoan của

⍎¨ mỗi nhân vật lấy làm số?

Dùng thử trực tuyến! ( đã được mô phỏng với elý do bảo mật.)


2

Perl, 18 byte

Bao gồm +1 cho -p

Chạy với đầu vào trên STDIN

123.pl <<< 123

123.pl:

#!/usr/bin/perl -p
$_=$_=/./.2==$_-$&x3

2

PHP, 31 byte

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

Kiểm tra xem chữ số đầu tiên của (số trừ 12) có phải là bội số của 111 không


2

PowerShell v3 +, 24 byte

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

Sử dụng cùng một mẹo "bội số 111 cộng với 12" như một số câu trả lời khác, nhưng lại đi theo hướng khác. Đưa đầu vào $args[0], trừ 12, chia cho111 và kiểm tra xem đó có phải -inlà phạm vi không 1..7. Xuất ra một giá trị Boolean đúng / sai. Yêu cầu v3 + cho -intoán tử.

Các trường hợp thử nghiệm

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

Mã máy ARM, 18 byte

Hex dump (ít endian):

3803 d105 6808 ebc0 2010 b280 f2a0 1001 4770

Đây là một hàm có độ dài, cặp con trỏ cho chuỗi. Đầu ra là kiểu bash, nó xuất 0 cho giá trị true và giá trị khác không cho false. Trong C, hàm sẽ được khai báo int oneTwoThree (size_t length, char * string). Mã hóa lệnh là thumb-2, có các lệnh 2 và 4 byte. Đã thử nghiệm trên Raspberry Pi 3.

Lắp ráp lộn xộn:

.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

Kịch bản thử nghiệm (cũng lắp ráp):

.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 byte

Và một tùy chọn nữa trong JS. Lấy đầu vào dưới dạng một chuỗi và đầu ra 0cho false1cho true.

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

Xem các giải pháp khác của tôi ở đâyở đây


Thử nó

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>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.