AB가 AB A에 있으면 Beh?


44

두 개의 정수 A와 B가 주어지면 AB (A 빼기 B)가 AB (A에서 B)에 있으면 A를 출력하고, 그렇지 않으면 B를 출력하십시오.

"빼기 B"는 표준 빼기입니다.

"A에서 B"는 A에서 시작하여 B에서 끝나는 정수 범위입니다 (예 : A 및 B). 예를 들면 다음과 같습니다.

1 to 4: 1, 2, 3, 4
-2 to 5: -2, -1, 0, 1, 2, 3, 4, 5
3 to -1: 3, 2, 1, 0, -1
7 to 7: 7

바이트 단위의 가장 짧은 코드가 이깁니다.

테스트 사례

A B Output
1 4 4
-2 5 5
3 -1 -1
7 7 7
90 30 90
90 -30 -30
-90 30 30
-90 -30 -90
-2 -2 -2
-2 -1 -2
-2 0 -2
-2 1 1
-2 2 2
-1 -2 -2
-1 -1 -1
-1 0 -1
-1 1 1
-1 2 2
0 -2 -2
0 -1 -1
0 0 0
0 1 1
0 2 2
1 -2 -2
1 -1 -1
1 0 1
1 1 1
1 2 2
2 -2 -2
2 -1 -1
2 0 2
2 1 2
2 2 2

독창적 인 채팅 미니 도전

답변:


44

파이썬 , 27 바이트

lambda a,b:[a,b][2*b*b>a*b]

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

산술 공식. 부정이 2*b*b>a*b문제 조건 과 동등한 이유는 무엇 a-b in symrange(a,b)입니까?

이 ( x in symrange(a,b)는)와 동일합니다 0 in symrange(a-x,b-x). 이것을 적용하여 x=a-b제공합니다 0 in symrange(b,2*b-a). 값 0이 두 양수 값 또는 두 음수 값 사이에서 늘어나지 않으면 간격에 포함됩니다. 이것은 산술적으로 "그들의 제품 b*(2*b-a)이 긍정적이지 않다 "고 언급 될 수있다 .

마지막으로를 가져 와서 b*(2*b-a)<=0다시 쓰십시오 2*b*b<=a*b. 바이트는 뒤집기로 저장 <=>하고 사례를 전환.


10

젤리 , 5 바이트

_erị,

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

작동 원리

_erị,  Main link. Arguments: a, b

_      Subtraction; Yield a-b.
  r    Range; yield [a, ..., b].
 e     Exists; yield 1 if a-b belongs to [a, ..., b], 0 if not.
    ,  Pair; yield [a, b].
   ị   At-index; yield the element of [a, b] at index 1 (a) or index 0 (b).

8

05AB1E , 7 바이트

암호:

DŸ¹Æå_è

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명:

D         # Duplicate the input.
 Ÿ        # Inclusive range.
  ¹Æ      # Push the input [a, b] and compute a - b.
    å     # Check if the number exists in the range.
     _    # Boolean negate
      è   # Index at the first input

1
@Okx CMC에서 부울을 요청했습니다.
Dennis


6

자바 스크립트 (ES6), 24 바이트

a=>b=>[a,b][2*b*b>a*b|0]

테스트 사례

let f = a=>b=>[a,b][2*b*b>a*b|0]
let tests = [[1,4,4],[-2,5,5],[3,-1,-1],[7,7,7],[90,30,90],[90,-30,-30],[-90,30,30],[-90,-30,-90],[-2,-2,-2],[-2,-1,-2],[-2,0,-2],[-2,1,1],[-2,2,2],[-1,-2,-2],[-1,-1,-1],[-1,0,-1],[-1,1,1],[-1,2,2],[0,-2,-2],[0,-1,-1],[0,0,0],[0,1,1],[0,2,2],[1,-2,-2],[1,-1,-1],[1,0,1],[1,1,1],[1,2,2],[2,-2,-2],[2,-1,-1],[2,0,2],[2,1,2],[2,2,2]]
tests.map(test => `f(${test[0]})(${test[1]}) == ${test[2]}`).forEach(test => console.log(test, eval(test)))


4

파이썬 2, 37 바이트

lambda*s:s[min(s)<=s[1]-s[0]<=max(s)]

로 호출하십시오 f(B, A).



4

자바 스크립트 ES6, 40 37 바이트

a=>b=>a-b<(a<b?a:b)|a-b>(a<b?b:a)?b:a

설명 :

a=>b=>                                   take a and b as inputs
      a-b<(a<b?a:b)                      if a-b is less than the lowest of a and b
                   |a-b>(a<b?b:a)        or a-b is greater than the largest of a and b
                                 ?b      return b
                                   :a    else return a

Arnauld 덕분에 3 바이트를 절약했습니다.

f=a=>b=>a-b<(a<b?a:b)|a-b>(a<b?b:a)?b:a

function t(){
    var tests = [[1,4,4],[-2,5,5],[3,-1,-1],[7,7,7],[90,30,90],[90,-30,-30],[-90,30,30],[-90,-30,-90],[-2,-2,-2],[-2,-1,-2],[-2,0,-2],[-2,1,1],[-2,2,2],[-1,-2,-2],[-1,-1,-1],[-1,0,-1],[-1,1,1],[-1,2,2],[0,-2,-2],[0,-1,-1],[0,0,0],[0,1,1],[0,2,2],[1,-2,-2],[1,-1,-1],[1,0,1],[1,1,1],[1,2,2],[2,-2,-2],[2,-1,-1],[2,0,2],[2,1,2],[2,2,2]];
    for (var test of tests) {
        console.log(`f(${test[0]},${test[1]}) == ${test[2]}`, f(test[0])(test[1])==test[2]);
    }
}

t();


3

매스 매 티카, 16 바이트

If[2#^2>1##,##]&

OP와 반대 순서로 두 개의 인수를 취하는 순수 함수 (예 :) If[2#^2>1##,##]&[B,A]. 의 포트 XNOR 파이썬 대답 .


2

R, 49 30 28 바이트

pryr::f("if"(2*b*b>a*b,b,a))

ab가 a : b에 있는지 여부를 판별하기 위해 @xnor의 논리를 사용합니다.


명명되지 않은 기능은 일반적으로 허용됩니다
MickyT

pryr::f(match(a-b,a:b,b))
mnel

@mnel 공유 해주셔서 감사합니다. 이전에 % in %의 작동 방식을 몰랐습니다. 그러나 ab가 a : b에있을 때마다 실패합니다. f (-90, -30) = 31
BLT

과연. `pryr :: f (match (ab, a : b, 0) + b)는 그 문제를 해결하고 바이트를 절약합니다.
mnel

2

클로저, 71 41 바이트

s 대신 <=min/ max를 사용하여 -30 바이트range

#(if(<=(min % %2)(- % %2)(max % %2))% %2)

(a - b)에서 a~ 사이 의 범위에 있는지 확인 b하여 그에 따라 반품을 발송합니다.

(defn eh [a b]
  ; <= accepts any number of argments, and ensures all fall within the range
    (if (<= (min a b) (- a b) (max a b))
      a
      b))

2

PHP (7.1), 55 바이트

새로운 배열 파괴 구문을 사용 합니다.

[,$a,$b]=$argv;echo in_array($a-$b,range($a,$b))?$a:$b;

로 실행하고 -r숫자를 명령 행 인수로 제공 하십시오 .


2

PowerShell , 37 35 32 바이트

($a,$b=$args)[$a-$b-notin$a..$b]

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

-notin연산자를 사용하여 문제를 PowerShell로 리터럴 변환합니다 . 다중 할당 및 캡슐화를 사용하여 3 바이트를 절약했습니다. 때문에이 작동 -갖는 높은 연산자 우선 순위 보다를 -notin, 상기 ( )코드 부분을 먼저 실행하고 배열로 반환된다 @($a,$b). 그러나 이것이 $a,$b아닌 출력 결과를 플립 / 플롭하는 $b,$a데 사용해야 -notin합니다.


1

배치, 107 바이트

@set/aa=%1,r=b=%2,x=a-b
@if %a% gtr %b% set/aa=b,b=%1
@if %a% leq %x% if %x% leq %b% set/ar=%1
@echo %r%



1

> <> , 21 바이트

@ xnor 's trick을 사용 합니다. -v B A스택을 미리 채우는 데 사용 합니다. ( -v A B+1 바이트)입니다.

:01pr:11p::2**r*)1gn;

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

설명

                        Input: [B, A] on stack.
:01pr:11p::2**r*)1gn;
:                       Duplicate.           [B, A, A]
 01p                    Push A to [0,1].     [B, A]
    r                   Reverse              [A, B]
     :                  Duplicate.           [A, B, B]
      11p               Push B to [1,1].     [A, B]
         ::             Duplicate x 2.       [A, B, B, B]
           2            Push 2.              [A, B, B, B, 2]
           2**          Compute 2*B*B.       [A, B, 2*B*B]
              r         Reverse.             [2*B*B, B, A]
               *        Compute A*B.         [2*B*B, A*B]
                )       >                    [2*B*B > A*B]
                 1      Push 1.              [2*B*B > A*B, 1]
                  g     If 2*B*B > A*B
                         get B, else get A.  [2*B*B > A*B ? B : A]
                   n    Output as number.
                    ;   Terminate.

1

루비 , 27 22 바이트

->a,b{(b*a<2*b*b)?b:a}

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

여기서 혁신적인 것은 없습니다. 그 뒤에 간단한 수학 :

(A<=A-B<=B or B<=A-B<=A)

로 쓸 수 있습니다

(B>=0 and A>=2B) or (B<=0 and A<=2B)

즉, A-2B가 B와 같은 부호를 가지면 우리는 그 범위 안에 있습니다.


1

SpecBAS-38 btes

1 INPUT a,b: ?IIF(a-b IN [a TO b],a,b)

IIF 올바른 값을 인쇄하기위한 인라인 -IF-THEN-ELSE입니다.


1

하스켈, 21 바이트

a!b|b*a<2*b*b=b|0<1=a

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

읽을 수있는

func :: Int -> Int -> Int
func a b
    | b*a < 2*b*b = b
    | otherwise = a

설명

@xnor의 공식을 사용하여 ab가 범위 내에 있는지 확인합니다. 그 외에는 특별한 것이 없습니다.


1

하스켈, 58 바이트

최근에 나는 화살에 다시 사랑에 빠졌다. 불행히도 그들은 바이너리 함수 대신 튜플을 사용해야합니다. 물론 하스켈에는 대칭 range기능 이 없습니다 .

import Control.Arrow
u=uncurry
app<<<elem.u(-)&&&(u enumFromTo<<<u min&&&u max)




1

스위프트 -38 30 22 바이트

@Matt 덕분에 8 바이트 절약

print(a...b~=a-b ?a:b)

IBM Swift Sandbox 온라인에서 사용해보십시오!


또는 21 바이트 :

( @xnor 의 공식 덕분에) @Matt 덕분에 8 바이트를 절약했습니다.

print(2*b*b>a*b ?a:b)

스위프트는 골프를하기에 가장 적합한 언어가 아니기 때문에 (매우 엄격합니다) 다른 골프 기회가 보이면 답을 완전히 편집하겠습니다.


print (a ... b ~ = ab? a : b)와 같이 인쇄 안에 삼항을 넣지 않는 이유
Matt

예, 좋은 아이디어입니다. 감사합니다 @Matt
Mr. Xcoder

1

자바 7, 84 60 58 바이트

int c(int a,int b){return(a<b?a:b)>a-b|(a<b?b:a)<a-b?b:a;}

자바 8, 37 바이트

a->b->(a<b?a:b)>a-b|(a<b?b:a)<a-b?b:a

설명:

int c(int a, int b){          // method with two integer parameters and integer return-type
  return (a<b ? a : b) > a-b  //  if smallest of the input is larger than a-b
       | (a<b ? b : a) < a-b  //    or if the largest of the input is smaller than a-b
    ? b                       //   return b
    :                         //  else
      a                       //   return a
}                             // end of method

테스트 코드 : 여기에서 시도하십시오.


1

Ti-Basic (TI-84 Plus CE), 26 24 23 바이트

Prompt A,B
A-B≥A and A-B≤B
AAns+Bnot(Ans

TI-Basic은 토큰 화 된 언어입니다. 사용 된 모든 토큰은 1 바이트 토큰 입니다.

Prompt 두 숫자를 입력하라는 메시지가 표시됩니다.

A-B≥A and A-B≤BAB가 A와 B 사이에 있는지 확인합니다 (포함). 이것은 true이면 1을 반환하고 false이면 0을 반환합니다 Ans.

AB가 A와 B 사이에 있으면 A를 반환하므로 A에 An을 곱합니다. A를 반환하면 A가되고 그렇지 않으면 0이됩니다.

다음으로 추가 Bnot(Ans합니다. Ans가 1 (truthy)이면 우리 not(는 0을 얻습니다. 따라서 우리의 합은 A입니다. Ans가 0 (false)이면 not(1을 얻습니다. 우리는 B를 곱하고 0을 더하여 B를 얻습니다.

TI-Basic의 마지막 평가는 암시 적으로 반환됩니다.

Scott Milner 덕분에 -2 바이트


세 번째 줄을 저장하지 않고 네 번째 줄을 Y사용하여 두 바이트를 절약 할 수 있습니다 Ans.
Scott Milner

1

Pyt , 32 바이트

←Đ←Đ3Ș⇹Đ3ȘĐ4Ș3Ș-3Ș⇹Ř∈Đ3Ș⇹¢*3Ș⇹*+

stdin에서 A와 B를 두 개의 개별 입력으로 취합니다.

설명:

AABB-> ABBA-> ABAB-> ABABB-> ABBBA-> ABBBAA-> ABAABB-> ABABBA-> ABABC-> ABCBA-> ABCAB-> ABC [A, ..., B]-> ABD-> ABDD- > ADDB-> ADBD-> AD {B * (1-D)}-> {B * (1-D)} AD-> {B * (1-D)} + {A * D}

여기서 : C = BA 및 D = C∈ [A, ..., B] (참이면 1, 거짓이면 0)


0

, 10 바이트 (CP437)

이 작업을 수행하는 골퍼 방법이있을 수 있지만 엄격하게 형식화 된 Ruby의 특성으로 인해이 작업이 어려워집니다.

G┼┘-îε?┼¿┘

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