Bằng, tổng hoặc chênh lệch!


32

Viết mã ngắn nhất có thể sẽ trả về true nếu hai giá trị nguyên đã cho bằng nhau hoặc tổng hoặc chênh lệch tuyệt đối của chúng là 5.

Các trường hợp thử nghiệm ví dụ:

4 1 => True
10 10 => True
1 3 => False
6 2 => False
1 6 => True
-256 -251 => True
6 1 => True
-5 5 => False

Đoạn ngắn nhất tôi có thể nghĩ ra trong python2 dài 56 ký tự:

x=input();y=input();print all([x-y,x+y-5,abs(x-y)-5])<1

-9, cảm ơn @ElPedro. Nó nhận đầu vào ở định dạng x, y:

x,y=input();print all([x-y,x+y-5,abs(x-y)-5])<1

9
Chào mừng đến với PPCG! Đây là một thử thách đầu tiên tốt - thử thách được xác định rõ ràng, nó có nhiều trường hợp thử nghiệm và sử dụng I / O mặc định của chúng tôi! Nếu bạn kiên trì một lúc và tiếp tục nghĩ ra những thử thách thú vị, tôi sẽ khuyên bạn nên sử dụng The Sandbox để nhận phản hồi trước khi đăng chúng lên trang web này. Tôi hy vọng bạn tận hưởng thời gian bạn ở đây!
Giuseppe

Câu trả lời:



17

JavaScript (ES6), 28 byte

Đưa đầu vào là (a)(b). Trả về 0 hoặc 1 .

a=>b=>a+b==5|!(a-=b)|a*a==25

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


1
Chết tiệt, tôi đã mất một thời gian dài để tìm ra cách xử lý phần khác biệt này. :)
Vikrant Biswas


8

mã máy x86, 39 byte

00000000: 6a01 5e6a 055f 5251 31c0 39d1 0f44 c601  j.^j._RQ1.9..D..
00000010: d139 cf0f 44c6 595a 29d1 83f9 050f 44c6  .9..D.YZ).....D.
00000020: 83f9 fb0f 44c6 c3                        ....D..

hội,, tổ hợp

section .text
	global func
func:					;inputs int32_t ecx and edx
	push 0x1
	pop esi
	push 0x5
	pop edi
	push edx
	push ecx
	xor eax, eax

	;ecx==edx?
	cmp ecx, edx
	cmove eax, esi

	;ecx+edx==5?
	add ecx, edx
	cmp edi, ecx
	cmove eax, esi
	
	;ecx-edx==5?
	pop ecx
	pop edx
	sub ecx, edx
	cmp ecx, 5
	
	;ecx-edx==-5?
	cmove eax, esi
	cmp ecx, -5
	cmove eax, esi

	ret

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


5

J , 12 11 byte

Lưu 1 byte nhờ Adám

1#.=+5=|@-,+

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

Giải trình

Điều này tương đương với:

1 #. = + 5 = |@- , +

Điều này có thể được chia thành chuỗi ngã ba sau:

(= + (5 e. (|@- , +)))

Hoặc, trực quan hóa bằng cách sử dụng 5!:4<'f':

  ┌─ =               
  ├─ +               
──┤   ┌─ 5           
  │   ├─ e.          
  └───┤          ┌─ |
      │    ┌─ @ ─┴─ -
      └────┼─ ,      
           └─ +      

Chú thích:

  ┌─ =                                     equality
  ├─ +                                     added to (boolean or)
──┤   ┌─ 5                                   noun 5
  │   ├─ e.                                  is an element of
  └───┤          ┌─ |  absolute value         |
      │    ┌─ @ ─┴─ -  (of) subtraction       |
      └────┼─ ,        paired with            |
           └─ +        addition               | any of these?

Lưu một byte vớie.
Adám

@ Adám sao vậy? Cách tiếp cận ngắn nhất tôi có e.được là =+.5 e.|@-,+. Có lẽ bạn quên 5e.là một mã thông báo không hợp lệ trong J?
Conor O'Brien

1
Vì hai số nguyên không thể đồng thời tổng bằng 5 và bằng nhau, bạn có thể sử dụng +thay vì+.
Adám

@ Adám Ah, tôi hiểu rồi, cảm ơn bạn.
Conor O'Brien

5

R , 40 byte (hoặc 34)

function(x,y)any((-1:1*5)%in%c(x+y,x-y))

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

Đối với người dùng không phải R:

  • -1:1*5 mở rộng đến [-5, 0, 5]
  • các %in%nhà điều hành có các yếu tố từ bên trái và kiểm tra (yếu tố khôn ngoan) nếu chúng tồn tại trong vector bên phải

Một cổng trực tiếp của giải pháp @ ArBo35 34 byte, vì vậy hãy đưa ra câu trả lời nếu bạn thích:

function(x,y)x%in%c(y--1:1*5,5-y)

Một byte 34 có thể giảm đi 1 vớifunction(x,y)x%in%c(y--1:1*5,5-y)
MickyT

Có thể giảm xuống 30 byte bằng cách di chuyển phép trừ: function(x,y)(x-y)%in%(-1:1*5)và thả nó xuống còn 24 byte bằng cách thả ký hiệu hàm scan()vào đầu vào: diff(scan())%in%(-1:1*5) Hãy thử trực tuyến! . Vẫn rất nhiều phương pháp tương tự mặc dù.
CriminallyVulgar

1
@CriminallyVulgar có tính tổng đó là 5 không?
ArBo

@ArBo Hah, đã bỏ lỡ điều đó trong thông số kỹ thuật, và không có trường hợp thử nghiệm nào trong TIO nên tôi chỉ xem qua nó!
CriminallyVulgar

Thay đổi nhỏ có thể được thực hiện cho cả hai là sử dụng pryr::f, điều này xảy ra để làm việc trong cả hai trường hợp. Cho dù nó có thể phát hiện chính xác các đối số hoàn toàn có phần bị đánh hoặc bỏ lỡ nhưng dường như đóng đinh hai chức năng này. ví dụ: pryr::f(x%in%c(y--1:1*5,5-y)) Hãy thử trực tuyến! . Đưa bạn tới 36 và 29 byte tương ứng.
CriminallyVulgar

5

Python 2 , 29 31 byte

lambda a,b:a+b==5or`a-b`in"0-5"

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

Vì lần đầu tiên tôi không đọc được nhiệm vụ một cách cẩn thận, để khắc phục nó, tôi đã phải đưa ra một cách tiếp cận hoàn toàn khác, rất tiếc là không ngắn gọn.


5

Mã máy 8086, 22 20 byte

8bd0 2bc3 740e 7902 f7d8 3d0500 7405 03d3 83fa05

Ung dung:

ESD  MACRO
    LOCAL SUB_POS, DONE
    MOV  DX, AX     ; Save AX to DX
    SUB  AX, BX     ; AX = AX - BX
    JZ   DONE       ; if 0, then they are equal, ZF=1
    JNS  SUB_POS    ; if positive, go to SUB_POS
    NEG  AX         ; otherwise negate the result
SUB_POS:
    CMP  AX, 5      ; if result is 5, ZF=1
    JZ   DONE
    ADD  DX, BX     ; DX = DX + BX
    CMP  DX, 5      ; if 5, ZF=1
DONE:
    ENDM

Các số đầu vào trong AX và BX và trả về Cờ không (ZF = 1) nếu kết quả là đúng. Nếu muốn, bạn cũng có thể xác định điều kiện nào là đúng với các điều sau:

  • ZF = 1 và DX = 5; tổng là 5
  • ZF = 1 và AX = 5; khác biệt là 5
  • ZF = 1 và AX = 0; công bằng
  • ZF = 0; kết quả sai

Nếu chênh lệch giữa các số là 0, chúng ta biết chúng bằng nhau. Mặt khác, nếu kết quả là âm tính, trước tiên hãy phủ định nó và sau đó kiểm tra 5. Nếu vẫn không đúng, sau đó thêm và kiểm tra 5.

Chương trình thử nghiệm PC DOS mẫu. Tải xuống ở đây ( ESD.COM ).

START:
    CALL INDEC      ; input first number into AX
    MOV  BX, AX     ; move to BX
    CALL INDEC      ; input second number into BX
    ESD             ; run "Equal, sum or difference" routine
    JZ   TRUE       ; if ZF=1, result is true
FALSE:
    MOV  DX, OFFSET FALSY   ; load Falsy string
    JMP  DONE
TRUE:
    MOV  DX, OFFSET TRUTHY  ; load Truthy string
DONE:
    MOV  AH, 9      ; DOS display string
    INT  21H        ; execute
    MOV  AX, 4C00H  ; DOS terminate
    INT  21H        ; execute

TRUTHY   DB 'Truthy$'
FALSY    DB 'Falsy$'

INCLUDE INDEC.ASM   ; generic decimal input prompt routine

Đầu ra của chương trình thử nghiệm:

A>ESD.COM
: 4
: 1
Truthy

A>ESD.COM
: 10
: 10
Truthy

A>ESD.COM
: 1
: 3
Falsy

A>ESD.COM
: 6
: 2
Falsy

A>ESD.COM
: 1
: 6
Truthy

A>ESD.COM
: -256
: -251
Truthy

A>ESD.COM
: 6
: 1
Truthy

A>ESD.COM
: 9999999999
: 9999999994
Truthy

4

Thạch , 7 byte

+,ạ5eo=

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

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

+,ạ5eo=  Main link. Arguments: x, y (integers)

+        Yield x+y.
  ạ      Yield |x-y|.
 ,       Pair; yield (x+y, |x-y|).
   5e    Test fi 5 exists in the pair.
      =  Test x and y for equality.
     o   Logical OR.

4

Python 2, 38 byte

-2 byte nhờ @DjMcMayhem

lambda a,b:a+b==5or abs(a-b)==5or a==b

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


TIO của bạn thực sự là 42 byte nhưng bạn có thể sửa nó bằng cách xóa khoảng trắng giữa 5s và ors
ElPedro

3
Trên thực tế, liên kết TIO có thể là 38 byte
DJMcMayhem

@ElPedro chính hàm đó là 40 byte nhưng tôi đã sử dụng f = để có thể gọi nó
fəˈnɛtɪk

1
@DJMcMayhem Tôi thường không chơi golf trong python. Tôi chỉ làm điều đó bởi vì người hỏi đã sử dụng python cho ví dụ của họ
fnɛtɪk



4

PowerShell , 48 44 40 byte

param($a,$b)$b-in($a-5),(5-$a),(5+$a),$a

Hãy thử trực tuyến! hoặc Xác minh tất cả các trường hợp kiểm tra

Đưa đầu vào $a$b. Kiểm tra nếu $b-innhóm ( $a-5, 5-$a 5+$ahay $a), trong đó kiểm tra tất cả các kết hợp có thể có của $a, $b5.

-4 byte nhờ mazzy.
-4 byte nhờ KGlasier.


($a-$b)-$x:)
mazzy

@mazzy Ooo, gọi tốt.
admBorkBork

Nếu bạn chuyển đổi 5$bxung quanh bạn có thể cắt bỏ một vài byte (nghĩa là param($a,$b)$b-in($a-5),(5-$a),($a+5),$a) Hãy thử ở đây
KGlasier

1
@KGlasier Gợi ý tuyệt vời. Tôi cần phải trao đổi $a+5để 5+$acó được nó để truyền một cách thích hợp khi lấy đầu vào dòng lệnh, nhưng nếu không thì tuyệt vời. Cảm ơn!
admBorkBork

4

Pascal (FPC) ,26 70 byte

Chỉnh sửa: + biến đầu vào.

Procedure z(a,b:integer);begin Writeln((abs(a-b)in[0,5])or(a+b=5))end;

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


(abs(a-b)in[0,5])or(a+b=5)

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

Tôi hy vọng rằng câu trả lời của tôi là theo tất cả các quy tắc của golf-code. Dù sao đó cũng là niềm vui.


2
Xin chào, và chào mừng đến với PPCG! Thông thường, bạn phải lấy đầu vào, thay vì giả sử nó đã có sẵn trong các biến. Tôi không biết Pascal, nhưng tôi nghĩ đó là những gì mã này đang làm.
NoOneIsHãy

Xin chào, NoOneIsHere và cảm ơn bạn đã nhận xét. Nó cũng có thể quan tâm - tôi sẽ bao gồm việc khởi tạo các biến. Nhìn vào một số giải pháp khác, như Java chẳng hạn, trong đó định nghĩa hàm với các tham số đã bị loại trừ khỏi tổng chiều dài của giải pháp, tôi quyết định không bao gồm ReadLn.
Dessy Stoeva

Ổn thỏa. Chào mừng đến với PPCG!
NoOneIs

Đệ trình Java là một lambda ẩn danh có hai tham số. Điều này dường như sử dụng các biến được xác định trước, đây không phải là một phương thức nhập hợp lệ.
Jo King

1
Không có vấn đề, tôi sẽ thay đổi trình của tôi.
Dessy Stoeva

3

C # (.NET Core) , 43 , 48 , 47 , 33 byte

EDIT: Đã thử sử dụng% và dường như quên cách%. Cảm ơn Arnauld đã chỉ ra điều đó!

EDIT2: admBorkBork với golf -1 byte sắp xếp lại các dấu ngoặc đơn để ngồi bên cạnh trở lại để không cần thêm không gian!

EDIT3: Cảm ơn dana cho golf -14 byte cho lối tắt trở lại một dòng và làm xáo trộn chức năng (Ty Embodiment of Ignorance để liên kết với TIO).

C # (.NET Core) , 33 byte

a=>b=>a==b|a+b==5|(a-b)*(a-b)==25

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


Bah Đang cố gắng tránh System.Math. Quay lại với nó! Cảm ơn bạn đã chỉ ra rằng: D
Destroigo

1
Bạn có thể giảm xuống còn 33 byte khi áp dụng các mẹo của dana
Hiện thân của sự thiếu hiểu biết vào

3

C (gcc) , 33 byte

f(a,b){a=!(a+b-5&&(a-=b)/6|a%5);}

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

Đã thử một cách tiếp cận tôi không thấy ai khác thử sử dụng. Biểu thức trả về tương đương với a+b==5||((-6<a-b||a-b<6)&&(a-b)%5==0).




3

Perl 6 , 24 byte

-1 byte nhờ Grimy

{$^a-$^b==5|0|-5|5-2*$b}

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

Cái này sử dụng Any Junction nhưng về mặt kỹ thuật, ^cũng có thể hoạt động tốt.

Giải trình:

{                      }  # Anonymous code block
 $^a-$^b==                # Is the difference equal to
           | |  |        # Any of
          0 
            5
              -5
                 5-2*$b

1
-1 byte với{$^a-$^b==5|0|-5|5-2*$b}
Grimmy

2

C (gcc) , 41 34 byte

f(a,b){a=5==abs(a-b)|a+b==5|a==b;}

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


1
Tại sao ftrở lại a? Chỉ là một số hành vi không xác định?
Tyilo

@Tyilo Vâng, đó là việc thực hiện cụ thể. Vì vậy, xảy ra tham số đầu tiên được lưu trữ trong cùng một thanh ghi với giá trị trả về.
khóa


@Logern Không hoạt động cho f (6,1)
cleblanc

@ceilingcat Không hoạt động cho f (6,1)
cleblanc

2

05AB1E , 13 12 byte

ÐO5Qs`α5QrËO

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

Lấy đầu vào dưới dạng danh sách các số nguyên, lưu một byte. Cảm ơn @ Wisław!

Thay thế câu trả lời 12 byte

Q¹²α5Q¹²+5QO

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

Điều này có đầu vào trên các dòng riêng biệt.


1
Vì nó không được chỉ định rõ ràng, bạn không thể cho rằng đầu vào là một danh sách các số nguyên, do đó loại bỏ ban đầu |?
Wisław

@ Wisław Điểm tốt, tôi đã cập nhật câu trả lời của tôi. Cảm ơn!
Cowabunghole

Tôi tìm thấy một thay thế 11 byte : OI`αª5¢IË~Ā. Đầu vào là một danh sách các số nguyên.
Wisław

1
OIÆÄ)5QIËMlà 10.
Bạch tuộc ma thuật Urn

1
@MagicOctopusUrn Tôi không chắc chính xác các quy tắc là gì nhưng tôi nghĩ giải pháp của bạn đủ khác với tôi để gửi câu trả lời của riêng bạn, phải không? Ngoài ra, không liên quan nhưng tôi đã thấy tên người dùng của bạn trên trang này trong một thời gian dài nhưng chỉ sau khi gõ nó, tôi mới nhận ra rằng đó là "Urn", không phải "Um" :)
Cowabunghole

2

05AB1E , 10 byte

OIÆ‚Ä50SåZ

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


O           # Sum the input.
 IÆ         # Reduced subtraction of the input.
   ‚        # Wrap [sum,reduced_subtraction]
    Ä       # abs[sum,red_sub]
     50S    # [5,0]
        å   # [5,0] in abs[sum,red_sub]?
         Z  # Max of result, 0 is false, 1 is true.

Đã thử để làm điều đó bằng cách sử dụng các hoạt động chỉ ngăn xếp, nhưng nó đã lâu hơn.


1
Điều này sẽ không may trả về đúng nếu số tiền 0chẳng hạn như[5, -5]
Emigna

1
Giải pháp 10 byte khác của bạn mà bạn để lại dưới dạng nhận xét ( OIÆÄ‚5QIËM) là chính xác [5,-5].
Kevin Cruijssen

Một giải pháp 10 byte khác mà tôi đã đưa ra là OsÆÄ‚5åsË~. Gần như giống hệt với bạn. Hãy thử trực tuyến!
Wisław

2

Ruby , 34 byte

->(a,b){[a+5,a-5,5-a,a].include?b}

Eval trực tuyến - Cảm ơn chỉ có ASCII


bạn có kiểm tra xem chúng có bằng nhau không ...
ASCII - chỉ

Rất tiếc, quên thêm kiểm tra. Cảm ơn @ ASCII - chỉ vì đã chỉ ra lỗi sai.
Jatin Dhankhar

1
Tôi sẽ rất tuyệt nếu bạn có thể liên kết đến điều này
ASCII - chỉ

Điều này thể hợp lệ? mặc dù không hoàn toàn chắc chắn, bạn có thể muốn kiểm tra với người khác
ASCII - chỉ

Điều này sẽ hoạt động nhưng nó yêu cầu .nil?kiểm tra để đưa ra đầu ra ở định dạng cần thiết. ->(a,b){[a+5,a-5,5-a,a].index(b).nil?}, cái này dài hơn cái hiện tại.
Jatin Dhankhar



1

Mẻ, 81 byte

@set/as=%1+%2,d=%1-%2
@if %d% neq 0 if %d:-=% neq 5 if %s% neq 5 exit/b
@echo 1

Đưa đầu vào làm đối số dòng lệnh và xuất 1 thành công, không có gì thất bại. Hàng loạt không thể dễ dàng làm bất đồng vì vậy tôi sử dụng luật của De Morgan để biến nó thành một tổ hợp.




1

Lisp thông thường, 48 byte

(lambda(a b)(find 5(list(abs(- b a))a(+ a b)b)))

1

Brachylog , 8 byte

=|+5|-ȧ5

Lấy đầu vào là một danh sách gồm hai số (sử dụng _cho phủ định). Hãy thử trực tuyến!

Giải trình

Khá nhiều bản dịch trực tiếp của spec:

=          The two numbers are equal
 |         or
  +        The sum of the two numbers
   5       is 5
    |      or
     -     The difference of the two numbers
      ȧ    absolute value
       5   is 5

0

Võng mạc 0.8.2 , 82 byte

\d+
$*
^(-?1*) \1$|^(-?1*)1{5} -?\2$|^-?(-?1*) (\3)1{5}$|^-?(1 ?){5}$|^(1 ?-?){5}$

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải thích: Hai dòng đầu tiên chuyển đổi các đầu vào thành đơn nguyên. Dòng cuối cùng sau đó kiểm tra bất kỳ trận đấu nào được phép:

^(-?1*) \1$                              x==y
^(-?1*)1{5} -?\2$   x>=0 y>=0 x=5+y i.e. x-y=5
                    x>=0 y<=0 x=5-y i.e. x+y=5
                    x<=0 y<=0 x=y-5 i.e. y-x=5
^-?(-?1*) (\3)1{5}$ x<=0 y<=0 y=x-5 i.e. x-y=5
                    x<=0 y>=0 y=5-x i.e. x+y=5
                    x>=0 y>=0 y=5+x i.e. y-x=5
^-?(1 ?){5}$        x>=0 y>=0 y=5-x i.e. x+y=5
                    x<=0 y>=0 y=5+x i.e. y-x=5
^(1 ?-?){5}$        x>=0 y>=0 x=5-y i.e. x+y=5
                    x>=0 y<=0 x=5+y i.e. x-y=5

Xoay theo cột cuối cùng chúng ta nhận được:

x==y            ^(-?1*) \1$
x+y=5 x>=0 y>=0 ^-?(1 ?){5}$
      x>=0 y>=0 ^(1 ?-?){5}$
      x>=0 y<=0 ^(-?1*)1{5} -?\2$
      x<=0 y>=0 ^-?(-?1*) (\3)1{5}$
      x<=0 y<=0 (impossible)       
x-y=5 x>=0 y>=0 ^(-?1*)1{5} -?\2$
      x>=0 y<=0 ^(1 ?-?){5}$
      x<=0 y>=0 (impossible)
      x<=0 y<=0 ^-?(-?1*) (\3)1{5}$
y-x=5 x>=0 y>=0 ^-?(-?1*) (\3)1{5}$
      x>=0 y<=0 (impossible)
      x<=0 y>=0 ^-?(1 ?){5}$
      x<=0 y<=0 ^(-?1*)1{5} -?\2$
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.