같음, 합 또는 차이!


32

주어진 두 정수 값이 같거나 합 또는 절대 차이가 5 인 경우 true를 리턴하는 가능한 가장 짧은 코드를 작성하십시오.

테스트 사례 예 :

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

python2에서 가장 짧은 길이는 56 자입니다.

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

-9, @ElPedro에게 감사합니다. x, y 형식의 입력이 필요합니다.

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

9
PPCG에 오신 것을 환영합니다! 이것은 좋은 첫 번째 도전입니다. 도전은 명확하게 정의되어 있으며, 충분한 테스트 사례가 있으며 기본 I / O를 사용합니다! 잠시 동안 문제를 해결하고 흥미로운 문제를 계속 생각한다면 샌드 박스 를 사용 하여이 사이트에 게시하기 전에 피드백을받는 것이 좋습니다 . 당신이 여기에서 보내는 시간을 즐기시기 바랍니다!
주세페

답변:





8

x86 기계 코드, 39 바이트

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

어셈블리

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

온라인으로 사용해보십시오!


5

J , 12 11 바이트

Adám 덕분에 1 바이트 절약

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

온라인으로 사용해보십시오!

설명

이것은 다음과 같습니다.

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

이것은 다음 포크 체인으로 나눌 수 있습니다.

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

또는 다음을 사용하여 시각화하십시오 5!:4<'f'.

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

주석 달기 :

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

바이트를 저장e.
Adám

@ Adám 어떻게 그렇게? 내가 가진 가장 짧은 접근 방식 e.=+.5 e.|@-,+입니다. 어쩌면 5e.J에서 유효하지 않은 토큰 을 잊었 습니까?
코너 오브라이언

1
두 정수는 동시에 5의 합과 같을 수 ++.
없으므로

@ Adám Ah, 알겠습니다. 감사합니다.
코너 오브라이언

5

R , 40 바이트 (또는 34)

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

온라인으로 사용해보십시오!

R이 아닌 사용자의 경우 :

  • -1:1*5 ~로 확장 [-5, 0, 5]
  • %in%연산자 왼쪽 요소 확인을 얻어 (소자 현명)들은 우측에 존재하는 경우, 벡터

@ArBo 솔루션 의 직접 포트 에는 35 34 바이트가 있으므로 원하는 경우 대답을 올리 십시오.

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

34 바이트 1을function(x,y)x%in%c(y--1:1*5,5-y)
MickyT

빼기 ()를 이동하여 30 바이트로 function(x,y)(x-y)%in%(-1:1*5)떨어 뜨릴 수 있고 함수 표기법을 scan()입력으로 끌어서 24 바이트로 더 떨어 뜨릴 diff(scan())%in%(-1:1*5) 수 있습니다. 온라인으로 사용해보십시오! . 그래도 여전히 같은 방법입니다.
CriminallyVulgar

1
@CriminallyVulgar가 그 합계를 5로 설명합니까?
ArBo

@ArBo Hah는 사양에서 그것을 놓 쳤고 TIO에 테스트 사례가 없으므로 그냥 그 위에 광택을 냈습니다!
CulminallyVulgar

두 가지 모두에 적용 할 수있는 사소한 변경은을 사용 pryr::f하는 것이며, 두 경우 모두 작동합니다. 인수를 올바르게 감지 할 수 있는지 여부는 전적으로 다소 적중하거나 누락되었지만이 두 기능을 못 박는 것 같습니다. 예 : pryr::f(x%in%c(y--1:1*5,5-y)) 온라인으로 사용해보십시오! . 각각 36 바이트와 29 바이트를 가져옵니다.
CulminallyVulgar


5

8086 기계 코드, 22 20 바이트

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

언 골프 드 :

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

AX와 BX에 숫자를 입력하고 결과가 참이면 Zero Flag (ZF = 1)를 반환합니다. 원하는 경우 다음을 통해 어떤 조건이 참인지 확인할 수도 있습니다.

  • ZF = 1 및 DX = 5; 합계는 5
  • ZF = 1 및 AX = 5; diff는 5입니다
  • ZF = 1이고 AX = 0이고; 같은
  • ZF = 0; 거짓 결과

숫자의 차이가 0이면, 우리는 그것들이 같다는 것을 알고 있습니다. 그렇지 않으면 결과가 음수이면 먼저 결과를 부정하고 5를 확인하십시오. 여전히 참이 아닌 경우 5를 추가하고 확인하십시오.

샘플 PC DOS 테스트 프로그램. 여기에서 다운로드하십시오 ( 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

테스트 프로그램의 출력 :

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

파이썬 2, 38 바이트

@DjMcMayhem 덕분에 -2 바이트

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

온라인으로 사용해보십시오!


귀하의 TIO 실제로 42 바이트입니다하지만 당신은 사이의 공백을 삭제하여 문제를 해결할 수 5들과 or
ElPedro

3
실제로 TIO 링크는 38 바이트 일
DJMcMayhem

@ElPedro 함수 자체는 40 바이트이지만 호출 할 수 있도록 f =를 사용했습니다.
fəˈnɛtɪk

1
@DJMcMayhem 나는 보통 파이썬에서 골프를하지 않습니다. 질문
asker가



4

PowerShell , 48 44 40 바이트

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

온라인으로 사용해보십시오! 또는 모든 테스트 사례 확인

입력 $a$b받습니다. 만약 검사 $b-in그룹 ( $a-5, 5-$a 5+$a또는 $a), 수표의 모든 가능한 조합들 $a, $b5.

mazzy 덕분에 -4 바이트.
KGlasier 덕분에 -4 바이트.


($a-$b)입니다 -$x:)
mazzy

@mazzy Ooo, 좋은 전화.
AdmBorkBork

당신은 전환하는 경우 5$b는 몇 바이트를 줄일 수 주위에 (예 param($a,$b)$b-in($a-5),(5-$a),($a+5),$a) 여기를보십시오
KGlasier

1
@ KGlasier 우수한 제안. 커맨드 라인 입력을 할 때 적절하게 캐스팅하기 위해 교체 $a+5해야 5+$a했지만 그렇지 않으면 훌륭했습니다. 감사!
AdmBorkBork

4

파스칼 (FPC) ,26 70 바이트

편집 : + 입력 변수.

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

온라인으로 사용해보십시오!


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

온라인으로 사용해보십시오!

내 대답이 모든 코드 골프 규칙에 따르기를 바랍니다. 어쨌든 재미있었습니다.


2
안녕하세요, PPCG에 오신 것을 환영합니다! 일반적으로 변수가 이미 있다고 가정하는 대신 입력을 가져와야합니다. 파스칼을 모르지만 이것이이 코드가하는 일이라고 생각합니다.
NoOneIsHere

안녕하세요, 아무도 없습니다 여러분의 의견에 감사드립니다. 변수도 초기화해야합니까? 예를 들어 매개 변수가있는 함수 정의가 솔루션의 전체 길이에서 제외 된 Java와 같은 다른 솔루션을 살펴보면 ReadLn을 포함하지 않기로 결정했습니다.
Dessy Stoeva

좋구나. PPCG에 오신 것을 환영합니다!
NoOneIsHere

Java 제출은 두 개의 매개 변수를 사용하는 익명의 람다입니다. 이것은 유효한 입력 방법이 아닌 사전 정의 된 변수를 사용하는 것으로 보입니다.
조 왕

1
문제 없습니다. 제출 내용을 변경하겠습니다.
Dessy Stoeva

3

C # (. NET 코어) , 43 , 48 , 47 , 33 바이트

편집 : %를 사용하려고하고 분명히 %를하는 방법을 잊어 버렸습니다. 그것을 지적 해준 Arnauld에게 감사합니다!

EDIT2 : -1 바이트 골프가있는 AdmBorkBork는 괄호를 재정렬하여 리턴 옆에 앉아 추가 공간이 필요하지 않습니다!

EDIT3 : 1 줄 리턴 바로 가기에 대한 -14 바이트 골프에 대한 dana 덕분에 기능을 제공합니다 (TIO에 연결하기위한 무지의 실시 예).

C # (. NET 코어) , 33 바이트

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

온라인으로 사용해보십시오!


바. System.Math를 피하려고합니다. 다시 돌아와! 지적 해 주셔서 감사합니다 : D
Destroigo

1
dana의 팁을 적용 하여 33 바이트 로 줄일 수 있습니다
무지의 구현



3

펄 6 , 24 바이트

Grimy 덕분에 -1 바이트

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

온라인으로 사용해보십시오!

이것은 모든 정션을 사용하지만 기술적으로 ^도 효과가 있습니다.

설명:

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

1
-1 바이트{$^a-$^b==5|0|-5|5-2*$b}
Grimmy

2

C (gcc) , 41 34 바이트

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

온라인으로 사용해보십시오!


1
f돌아 옵니까 a? 정의되지 않은 동작 만?
Tyilo

@Tyilo 예, 구현에 따라 다릅니다. 따라서 첫 번째 매개 변수가 반환 값과 동일한 레지스터에 저장됩니다.
cleblanc


@Logern은 f (6,1)에서 작동하지 않습니다
cleblanc

@ceilingcat f (6,1)에서 작동하지 않음
cleblanc

2

05AB1E , 13 12 바이트

ÐO5Qs`α5QrËO

온라인으로 사용해보십시오!

입력을 정수 목록으로 취하여 1 바이트를 저장합니다. 감사합니다 @ Wisław!

대체 12 바이트 응답

Q¹²α5Q¹²+5QO

온라인으로 사용해보십시오!

이것은 별도의 줄에 입력을받습니다.


1
명확하게 지정되지 않았으므로 입력이 정수 목록이라고 가정 할 수 없으므로 초기 |?
Wisław

@ Wisław 좋은 지적, 나는 대답을 업데이트했다. 감사!
Cowabunghole

11 바이트 대안을 찾았습니다 OI`αª5¢IË~Ā. 입력은 정수 목록입니다.
Wisław

1
OIÆÄ)5QIËM
매직 문어 항아리

1
@MagicOctopusUrn 나는 규칙이 정확히 무엇인지 잘 모르겠지만 솔루션이 내 답변과 다른 점이 아니라고 생각합니다. 또한 관련이 없지만이 사이트에서 사용자 이름을 오랫동안 보았지만 입력 한 후에 만 ​​"Um"이 아니라 "Urn"이라는 것을 알았습니다. :)
Cowabunghole

2

05AB1E , 10 바이트

OIÆ‚Ä50SåZ

온라인으로 사용해보십시오!


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.

스택 전용 작업을 사용하려고했지만 더 길었습니다.


1
이것은 불행하게도 합이 경우에 true를 돌려줍니다 0등을위한로[5, -5]
Emigna

1
주석 ( OIÆÄ‚5QIËM) 으로 남겨둔 다른 10 바이트 솔루션 은에 맞습니다 [5,-5].
케빈 크루이 ssen

내가 생각해 낸 또 다른 10 바이트 솔루션은 OsÆÄ‚5åsË~입니다. 당신과 거의 동일합니다. 온라인으로 사용해보십시오!
Wisław

2

루비 , 34 바이트

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

온라인 평가 -감사 @ASCII 전용


그래도 같은지 확인합니까?
ASCII 전용

죄송합니다, 그 수표를 추가하지 않았습니다. 실수를 지적 해 준 @ASCII 전용 감사합니다.
Jatin Dhankhar


유효? 확실하지는 않지만 다른 사람과 확인하고 싶을 수도 있습니다
ASCII 전용

이것은 작동하지만 .nil?출력을 필요한 형식으로 제공해야합니다. ->(a,b){[a+5,a-5,5-a,a].index(b).nil?}, 현재 길이보다 깁니다.
Jatin Dhankhar



1

배치, 81 바이트

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

입력을 명령 행 인수로 취하고 성공시 1을 출력하고 실패시 아무것도 출력하지 않습니다. 배치는 쉽게 분리 할 수 ​​없으므로 De Morgan의 법칙을 사용하여이를 결합으로 만듭니다.




1

공통 리스프, 48 바이트

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

1

Brachylog , 8 바이트

=|+5|-ȧ5

입력을 두 숫자의 목록으로 취합니다 ( _음수에 사용 ). 온라인으로 사용해보십시오!

설명

스펙의 직접적인 번역 :

=          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

레티 나 0.8.2 , 82 바이트

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

온라인으로 사용해보십시오! 링크에는 테스트 사례가 포함됩니다. 설명 : 처음 두 줄은 입력을 단항으로 변환합니다. 마지막 줄은 허용 된 일치 항목을 확인합니다.

^(-?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

우리가 얻는 마지막 열로 피벗 :

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$
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.