यदि AB AB में है तो A और B एह में?


44

दो पूर्णांकों को देखते हुए, ए और बी, आउटपुट ए अगर एबी (ए माइनस बी) एबी (ए से बी) में है, तो आउटपुट बी।

"एक ऋण बी" मानक घटाव है।

"ए टू बी" ए पर शुरू होने वाले पूर्णांकों की सीमा है और बी पर समाप्त होती है, जिसमें ए और बी दोनों शामिल हैं। उदाहरण के लिए:

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। एक बाइट को फ़्लिप <=करने >और मामलों को स्विच करने से बचाया जाता है ।



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
@ ओएक्सएक्स सीएमसी ने एक बूलियन के लिए कहा।
डेनिस


6

जावास्क्रिप्ट (ईएस 6), 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

पायथन 2, 55 52 51 बाइट्स

lambda A,B:[B,A][A-B in range(min(A,B),max(A,B)+1)]

इसे ऑनलाइन आज़माएं!

प्रत्येक परीक्षण मामले को ओपी ने उल्लेख किया है (इस पोस्ट करने के समय), जैसा कि टीआईओ का सुझाव है।


4

जावास्क्रिप्ट ईएस 6, 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

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();



2

आर, 49 30 28 बाइट्स

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

यह निर्धारित करने के लिए @ xnor के तर्क का उपयोग करता है कि ab a: b में है या नहीं।


अनाम कार्यों को आम तौर पर अनुमति दी जाती है
मिकी

आप एक और 3 बाइट्स खो सकते हैंpryr::f(match(a-b,a:b,b))
मार्ल

@ साझा करने के लिए धन्यवाद, मुझे नहीं पता था कि%% पहले कैसे काम करता था; लेकिन वह विफल रहता है जब भी ए बी में होता है: बी। f (-90, -30) = 31
BLT

वास्तव में। `pryr :: f (मैच (ab, a: b, 0) + b) उसे ठीक करता है (और फिर भी एक बाइट बचाता है।
mnel

2

क्लोजर, 71 41 बाइट्स

-30 बाइट्स का उपयोग करके <=और एस के बजाय min/ ।maxrange

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

पॉवरशेल , 37 35 32 बाइट्स

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

इसे ऑनलाइन आज़माएं!

-notinऑपरेटर का उपयोग करके PowerShell में समस्या का शाब्दिक अनुवाद । एकाधिक असाइनमेंट और इनकैप्सुलेशन का उपयोग करके तीन बाइट्स सहेजे गए। यह काम करता है क्योंकि -इसमें एक उच्च संचालक पूर्ववर्ती से अधिक है -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 की ट्रिक का उपयोग करता है । हम -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 बाइट्स

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

ऑक्टेव, 55bytes

@(a,b)(c=b*~[find((a:1-2*(b<a):b)==(a-b)) 0](1))+(a*~c)

इसे शायद आगे भी अनुकूलित किया जा सकता है। मैं बाद में एक स्पष्टीकरण जोड़ूंगा।


एक सरल दृष्टिकोण । +1 सभी "पागल सामान" के लिए हालांकि: P
स्टीवी ग्रिफिन


1

स्विफ्ट -38 30 22 बाइट्स

@Matt की बदौलत 8 बाइट्स बचाए

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

ऑनलाइन आईबीएम स्विफ्ट सैंडबॉक्स में यह कोशिश करो!


या 21 बाइट्स:

( @xnor के सूत्र के लिए धन्यवाद ) और @ बट्ट की बदौलत 8 बाइट्स बचाए

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

स्विफ्ट गोल्फिंग के लिए सबसे अच्छी भाषा नहीं है (यह बहुत कठोर है), इसलिए यदि आप किसी अन्य गोल्फिंग अवसर को देखते हैं, तो मैं पूरी तरह से उत्तर को संपादित करूंगा।


प्रिंट के अंदर टर्नरी को क्यों नहीं लगाया जाता जैसे प्रिंट (ए ... बी ~ = एब? ए: बी)
मैट

ओह, हाँ, अच्छा विचार है। धन्यवाद @
मट्ट

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-84 Plus CE), 26 24 23 बाइट्स

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

टीआई-बेसिक एक टोकन भाषा है; उपयोग किए जाने वाले सभी टोकन एक-बाइट टोकन हैं

Prompt आपको दो नंबरों के लिए संकेत देता है।

A-B≥A and A-B≤Bजाँच करता है कि क्या AB A और B (सम्मिलित) के बीच है; यह एक 1 रिटर्न अगर सच है और एक शून्य अगर गलत है, जो संग्रहीत है Ans

चूँकि हम A को वापस कर रहे हैं यदि AB A और B के बीच है, तो हम A को Ans से गुणा करते हैं, जो कि A होगा यदि हम A, और 0 को वापस करने वाले हैं, अन्यथा।

इसके बाद, हम Bnot(Ansइसे जोड़ते हैं। यदि Ans 1 (सत्य) था, तो हम not(इसे प्राप्त करते हैं और इस प्रकार 0 प्राप्त करते हैं, इस प्रकार हमारा योग A है। यदि Ans 0 (मिथ्या) है, तो हम not(इसे 1 प्राप्त करते हैं, जिसे हम B से गुणा करते हैं और B को प्राप्त करने के लिए 0 में जोड़ते हैं।

टीआई-बेसिक में अंतिम मूल्यांकन स्पष्ट रूप से वापस आ गया है।

-2 बाइट्स स्कॉट मिलनर को धन्यवाद


तीसरी लाइन को स्टोर न Yकरके Ansऔर चौथी लाइन में इस्तेमाल करके आप दो बाइट बचा सकते हैं ।
स्कॉट मिलनर

1

Pyt , 32 बाइट्स

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

स्टड से ए और बी को दो अलग-अलग इनपुट के रूप में लेता है

स्पष्टीकरण:

AABB -> ABBA -> ABAB -> ABABB -> ABBBAA -> ABBBAA -> ABABBA -> ABABBA -> 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)

ऐसा करने के लिए शायद एक गोल्फ का रास्ता है, लेकिन रूबी की सख्ती से टाइप की गई प्रकृति यह मुश्किल बनाती है।

G┼┘-îε?┼¿┘

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.