दो मूल्यों को मिलाएं


44

आपके पास दो मूल्य हैं जिनमें से प्रत्येक या तो 0"अज्ञात" का प्रतिनिधित्व कर रहा है, या एक का 1,2,3। निम्नानुसार उन्हें एक ही मूल्य में मर्ज करें:

  • यदि दोनों मान गैर-शून्य और समान हैं, तो आउटपुट मान:
    (3,3) -> 3
  • यदि दोनों मान गैर-समान हैं लेकिन असमान हैं, तो अज्ञात के लिए आउटपुट 0:
    (1,2) -> 0
  • यदि एक मान शून्य है और दूसरा नहीं है, तो गैर-मान का उत्पादन करें:
    (2,0) -> 2, (0,1) -> 1
  • यदि दोनों मान शून्य हैं, तो उत्पादन शून्य:
    (0,0) -> 0

परीक्षण के मामलों:

16 संभावित इनपुट जोड़े हैं।

  | 0 1 2 3
--+--------
0 | 0 1 2 3
1 | 1 1 0 0
2 | 2 0 2 0
3 | 3 0 0 3

(0, 0) -> 0
(0, 1) -> 1
(0, 2) -> 2
(0, 3) -> 3
(1, 0) -> 1
(1, 1) -> 1
(1, 2) -> 0
(1, 3) -> 0
(2, 0) -> 2
(2, 1) -> 0
(2, 2) -> 2
(2, 3) -> 0
(3, 0) -> 3
(3, 1) -> 0
(3, 2) -> 0
(3, 3) -> 3

लीडरबोर्ड


8
चौथा नियम पहले नियम में फिट बैठता है, इसलिए मुझे नहीं पता कि आपने उन्हें अलग क्यों किया।
घातक

1
नाइटपिक: 4 वां बिंदु बेमानी है, आप पहले बिंदु से "नॉनज़रो" को हटा सकते हैं। संपादित करें: वाह, क्या एक निंजा @ घातक है।
आउट्रिकोलर

इसके अलावा, 3 वास्तव में यहां आवश्यक नहीं है, हालांकि यह संभावित आदानों की संख्या में वृद्धि करता है।
द एग्रिकॉलफर

2
मैंने नियमों को संघनित करने पर विचार किया, लेकिन सोचा कि यह सभी शून्य / नॉनज़रो मामलों को सूचीबद्ध करने और गोल्फरों के लिए अनुकूलन छोड़ने के लिए सबसे स्पष्ट होगा।
xnor

2
इसके लिए एक लीडरबोर्ड की आवश्यकता होती है , पहला पृष्ठ दूसरे पर पहले से ही पीटे गए उत्तर प्राप्त करना शुरू कर देता है।
अर्जन जोहान्सन

जवाबों:


22

पायथन 3 , 27 25 बाइट्स

lambda x,y:(x|y)>>(x*y&2)

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


5
मुझे यह पसंद है कि इनपुट 3 के लिए यह टूट जाता है। आप इसके साथ कैसे आए?
जकॉब

4
मूल रूप से बहुत परीक्षण और त्रुटि।
डेनिस

1
दिलचस्प। एक पल के लिए मैंने सीमित लंबाई के भावों के माध्यम से एक खोज को स्वचालित करने के बारे में सोचा, जिसमें दो ints और कुछ ऑपरेटर शामिल थे, लेकिन लगभग 20 बाइट्स पर भी अंतरिक्ष बहुत बड़ा है। कुछ बुद्धि की आवश्यकता है!
जैकब


10

APL (Dyalog) , 5 बाइट्स

⌈×∧=⌊

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

उपयोगी संदर्भ

∧=⌊: 1यदि सबसे कम सामान्य एकाधिक न्यूनतम के बराबर है, तो लौटाता है। यह केवल तभी सही है जब मूल्यों में से एक शून्य है, या दोनों समान हैं। वैकल्पिक रूप से मैं कर सकता था=*⌊

⌈×: ऊपर से अधिकतम गुणा।


7

शेक्सपियर प्रोग्रामिंग लैंग्वेज , 296 बाइट्स

Z.Ford,.Ajax,.Act I:.Scene I:.[Enter Ford and Ajax]Ajax:Listen to thy heart.Ford:Listen to thy heart.Am I as fat as you?Ajax:If so,let us Scene C.Am I as fat as zero?If so,let us Scene C.Ford:Am I as fat as zero?If not,you zero.open heart.let us Scene V.Scene C:.Ajax:open heart.Scene V:.[Exeunt]

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

एक कोड-गोल्फ चुनौती के लिए पहली भागीदारी, तो चलो मेरी पसंदीदा चुटकुले भाषाओं में से एक के साथ शुरू करें!

स्पष्टीकरण: दो चर फोर्ड और अजाक्स की घोषणा (सबसे कम उपलब्ध चर नाम)

Z.Ford,.Ajax,.

पहला दृश्य: दो मानों को चर में रखें, फिर उन्हें समानता के लिए परीक्षण करें, फिर 0. के खिलाफ अजाक्स का परीक्षण करें। यदि हमें जो मूल्य वापस करना है वह चर फोर्ड में संग्रहीत है, तो दृश्य सी पर जाएं।

Act I:.
Scene I:.
[Enter Ford and Ajax]
Ajax:
Listen to thy heart.
Ford:Listen to thy heart.
Am I as fat as you?
Ajax:
If so,let us Scene C.
Am I as fat as zero?
If so,let us Scene C.

यदि Ford 0 है, तो Ajax प्रिंट करें, अन्यथा Ajax को 0 पर सेट करें, फिर Ajax प्रिंट करें। फिर कार्यक्रम के अंत में जाएं।

Ford:Am I as fat as zero?
If not,you zero.
open heart.
let us Scene V.

दृश्य सी: प्रिंट फोर्ड

Scene C:.
Ajax:open heart.

दृश्य V: कार्यक्रम का अंत।

Scene V:.
[Exeunt]


2
@ अपने संस्करण को साझा करना मेरी तुलना में बेहतर है, मुझे लगता है कि यह बेहतर होगा यदि आप इसे एक उत्तर के रूप में पोस्ट करते हैं क्योंकि कार्यक्रम के पीछे तर्क काफी अलग है और मैं आपके काम का श्रेय नहीं लेना चाहता हूं
गिलोय रुचिन

6

रूबी , 21 बाइट्स

->a,b{(a|b)*531[a*b]}

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

क्योंकि रूबी

संक्षिप्त विवरण:

  • a|b bitwse OR है, इसलिए यह हमें सही संख्या देता है यदि a == b या उनमें से एक शून्य है।

  • मैजिक नंबर 5312 ^ 9 + 2 ^ 4 + 2 ^ 1 + 2 ^ 0 है, और [] ऑपरेटर एक एकल बिट निकालता है। इसका अर्थ है: 1 से गुणा करें यदि एक * बी 0, 1, 2, 4 या 9 है, तो 0 से गुणा करें।

  • यह मान> 3 के लिए काम नहीं करेगा


5

जावास्क्रिप्ट (Node.js) , 17 बाइट्स, पायथन जवाब से किसी तरह पोर्ट

a=>b=>a*b&2?0:a|b

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

जावास्क्रिप्ट (Node.js) , 21 बाइट्स

a=>b=>a-b?a*b?0:a+b:a

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


?0:... क्या आप कर सकते हैं ||, या पूर्वता गड़बड़ करती है?
स्टैन स्ट्रम

@StanStrum का ?0:मतलब है कि अगर शून्य शून्य नहीं है तो वापसी शून्य करें, यदि शून्य शून्य न हो तो ||वापस लौटें
l4m2

5

पायथ , 8 7 बाइट्स

@{+0SQ3

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

@{+0SQ3   Implicit: Q=input()

    SQ    Sort input
  +0      Prepend 0
 {        Deduplicate
@     3    Get 4th element (index 3), modular indexing

केस 1 - नॉनजरो और समान दोनों मान

Sorted Input   [3,3]
Prepend 0      [0,3,3]
Deduplicate    [0,3] - index 3 yields 3

केस 2 - नॉनजरो और असमान दोनों मान

Sorted Input   [1,2]
Prepend 0      [0,1,2]
Deduplicate    [0,1,2] - index 3 yields 0

केस 3 - बिल्कुल एक शून्य

Sorted Input   [0,1]
Prepend 0      [0,0,1]
Deduplicate    [0,1] - index 3 yields 1

केस 4 - दोनों मान शून्य हैं

Sorted Input   [0,0]
Prepend 0      [0,0,0]
Deduplicate    [0] - index 3 yields 0

वैकल्पिक समाधान, 7 बाइट्स भी

*eSQ}s{

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

*eSQ}s{QQ   Trailing Q's inferred

      {Q    Deduplicate input
     s      Take the sum
    }   Q   Is this in the input? True treated as 1, false as 0
*           Multiplied by
 eSQ        Max from input (end of sorted input) 

पिछला संस्करण, 8 बाइट्स

@+0{-QZ3

@ एक्सनॉर को हाजिर करने के लिए धन्यवाद, इसे अभी ठीक किया जाना चाहिए
सोक

@{+0Q36 बाइट्स के लिए काम करता है।
मिस्टर एक्सकोडर


4

स्टैक्स , 8 बाइट्स

Ç∞∟∙◄╥*♣

इसे चलाएं और डीबग करें

अनपैक्ड, अनगुल्फेड और टिप्पणी की गई, यह इस तरह दिखता है।

    e.g.        [2, 0]
c:s [2, 0] 2    calculate the "span" of the input array (max(a) - min(a))
+   [2, 0, 2]   append the span to the input array
o   [0, 2, 2]   sort the 3-element array
E   0 2 2       explode the 3 elements into 3 separate stack entries
a   2 2 0       rotate the third stack element to the top of stack
!   2 2 1       logical not, produces 1 iff the top value was 0
*   2 2         multiply
                implicitly print top of stack

इसको चलाओ



4

(पहला सबमिशन तो कृपया बहुत मुश्किल मत मारो)

पायथन 2 , 57 44 43 बाइट्स

lambda a,b:(0 if a*b else a+b)if a-b else a

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

( पहले अजगर जवाब को देखने के बाद थोड़ा संकुचित )



पार किया 44 अभी भी 44 है; (
जो राजा

@JoKing हुह वाह? आपका समाधान बहुत अच्छा है, मैंने इसे अंकगणित के साथ करने की कोशिश की, लेकिन असफल रहा और वापस आ गया / नहीं तो
अक्टूबर

4

सी (जीसीसी), 25 बाइट्स

f(a,b){a=a^b&&a*b?0:a|b;}

छद्म कोड:

foo(A,B)
    if A XOR B and A*B are > 0
        return 0
    else 
        return A OR B`

3

सी (जीसीसी), 26 बाइट्स

f(a,b){a=a*b?a-b?0:a:a+b;}

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

विस्तार / अधूरा:

int f(int a, int b) { // implicit-int (C89)
    // return replaced with assignment: link
    return a*b ? // if a and b are both not zero, then
        a-b ? // if a != b
        0 : // a != b, so return 0
        a // a == b, so return a
    : a+b // one of a,b is zero, so return whichever is nonzero 
    ;
}

3

MATL , 9 बाइट्स

dGp*~GX>*

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

स्पष्टीकरण:

           % Implicit input as a vector with two elements implicitly. Stack: [0,2]
d          % The difference between the two elements. Stack: [2]
 G         % Push input again. Stack: [2], [0,2]
  p        % The product of the last element (the input). Stack: [2], [0]
   *       % Multiply the two elements on the stack. Stack: [0]
    ~      % Negate. Stack: [1]
     G     % Push input again. Stack: [1], [0,2]
      X>   % Maximum value. Stack: [1], [2]
        *  % Multiply the two elements on the stack. Stack: [2]
           % Implicit output

असफल प्रकोप:t?td~*]X>
मोनिका

3

GNU sed, 23 बाइट्स

s/^0?(.)\1?0?$/\1/
t
c0

( -rध्वज के साथ चलना चाहिए )

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


1
PPCG में आपका स्वागत है :) वर्तमान सर्वसम्मति यह है कि झंडे नहीं गिने जाएंगे (मैं अपने फोन पर हूं इसलिए प्रासंगिक मेटा लिंक नहीं कर सकता)।
झबरा

1
ओह बढ़िया! मैं बाद में संपादित करूँगा क्योंकि मैं अपने फ़ोन पर भी हूँ; एक नि: शुल्क -3 बाइट पीपीसीजी के लिए एक शानदार स्वागत है :)
कर्नेलपनिक

3

QBasic, 34 बाइट्स

अलग दृष्टिकोण!

INPUT a,b
?(a OR b)*-(a*b=0OR a=b)

निरीक्षण करें कि आउटपुट ग्रिड में नॉनजरो मान ORदो इनपुट संख्याओं के सभी बिटवाइज़ हैं। यह सिर्फ a OR bQBasic में है। हम इस मूल्य का उत्पादन करना चाहते हैं जब a*b=0 OR a=b, और 0अन्यथा, जिसे हम उपर्युक्त सशर्त के नकारात्मक द्वारा गुणा कर सकते हैं (नकारात्मक, क्योंकि सत्य -1QBasic में है)।


2

ब्रेनफक, 25 बाइट्स

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

इनपुट दो बाइट मान है (ascii नहीं)


2

स्विफ्ट , 118 बाइट्स

func c(n1:Int,n2:Int){n1==n2 ? print("\(n1)") : (n1*n2 != 0 ? print("0") : (n1==0 ? print("\(n2)") : print("\(n1)")))}

4
PPCG में आपका स्वागत है! मैं स्विफ्ट नहीं जानता, लेकिन आप शायद चर नामों को 1 वर्ण प्रत्येक बनाकर और जैसे ऑपरेटरों !=और टर्नरी के आसपास व्हाट्सएप को हटाकर बहुत सारे बाइट्स बचा सकते हैं ।
Οसूर

1
नमस्ते, PPCG में आपका स्वागत है! जैसा कि @ ousurous द्वारा उल्लेख किया गया है, आप उन्हें छोटा करने के लिए n1और n2एकल वर्णों में बदल सकते हैं ; कुछ सफ़ेद-रिक्त स्थान और कोष्ठक को हटा दें, और कुछ स्थान हटा दें। इसके अलावा, ==0हो सकता है <1और !=0हो सकता है >0, क्योंकि हम जानते हैं कि केवल इनपुट 0,1,2,3संभव हैं। पहले कभी भी स्विफ्ट में प्रोग्राम नहीं किया गया था, लेकिन मैंने इसे 91 बाइट्स की तरह नीचे कर दिया: func c(a:Int,b:Int){a==b ?print("\(a)"):a*b>0 ?print("0"):a<1 ?print("\(b)"):print("\(a)")} इसे ऑनलाइन आज़माएं।
केविन क्रूज़सेन

इसके अलावा, ऐसा लगता है कि आप इसे इस तरह से 51 बाइट्स तक छोटा कर सकते हैं: func c(a:Int,b:Int){print(a==b||a*b<1 ?max(a,b):0)} इसे ऑनलाइन आज़माएं। PPCG में फिर से स्वागत है, और अपने प्रवास का आनंद लें!
केविन क्रूज़सेन

1
@ केविनक्रूजसेन के गोल्फों के अलावा, आप 87 बाइट्स को बचाने के लिए अपने सबमिशन को एक गुमनाम बंद में बदल सकते हैं: {$0==$1||1>$0*$1 ?max($0,$1):0} ऑनलाइन प्रयास करें!
मिस्टर एक्सकोडर

2

बैच, 38 36 35 30 बाइट्स

@cmd/cset/a"(%1|%2)>>(%1*%2&2)

पोर्ट ऑफ @ डेनिस के पाइथन उत्तर, चूंकि बैच में सशर्त बहुत महंगे हैं।



2

जे , 8 7 बाइट्स

H.PWiz द्वारा 1 बाइट बचाई गई।

>.*=^<.

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

AJ पोर्ट H.PWiz के एपीएल समाधान

=क्या संख्या बराबर है? (1 या 0 में परिणाम)

^ की शक्ति को

<. छोटी संख्या

* से गुणा

>. बड़ी संख्या


1
>.*=^<.7 बाइट्स के लिए
H.PWiz

@ H.PWiz धन्यवाद! चालाक का उपयोग करें =और ^!
गैलेन इवानोव

2

05AB1E , 9 8 बाइट्स

àIËIP_+*

-1 बाइट धन्यवाद @MagicOctopusUrn

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

à         # Take the maximum of the input-list
          #  [0,2] → 2
IË        # Are all elements in the input-list equal?
          #  [0,2] → 0
  IP_     # Take the product of the input-list, and verify if it equals 0
          # (`_` transforms 0 into 1; everything else into 0)
          #  [0,2] → 0 (product) → 1 (==0)
     +    # Add them together (since only 1 is truthy in 05AB1E, this is basically an OR)
          #  0+1 → 1
*         # Multiply both values on the stack
          #  2*1 → 2

सामान्यीकृत स्पष्टीकरण:

IËIP_+    # If both values are equal, or one of them is a zero:
 à        #  Output the maximum of the two values
          # Else:
          #  Output 0

Ës0å~iZë0मेरा था; अच्छा है। वास्तव में यकीन नहीं है कि आप 9 बाइट्स को ज्यादा से ज्यादा हरा सकते हैं।
मैजिक ऑक्टोपस Urn

1
मैं उसको वापस लेता हूँ à®Ë®P_+*जहाँ _तार्किक रूप से बराबर है
मैजिक ऑक्टोपस

_0 से 1 में बदल जाता है, अन्य सभी मानों में 0.
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn धन्यवाद! जब मैंने यह उत्तर दिया तो मैं यह देखने के लिए डॉक्स देख रहा था कि क्या कोई == 0कमांड है, नहीं जानता था _कि वास्तव में ऐसा ही है। भविष्य में अन्य चुनौतियों के लिए भी उपयोगी होना चाहिए। टीआईएल। :)
केविन क्रूज़सेन



2

जावास्क्रिप्ट ईएस 6, 25 22 21 20 बाइट्स

a=>b=>a?b-a?!b*a:a:b

14 13 बाइट्स , यदि तर्कों को क्रमबद्ध क्रम में प्रदान किया जाता है

a=>b=>a%b?0:b


2

QBasic, 38 36 35 बाइट्स

INPUT a,b
?(a*b>0)*(b-a*(a<>b))+a+b

आंशिक रूप से एरिक के IF ... THEN ... ELSEउत्तर से प्रेरित , यहां एक गणित-केवल समाधान है।

मैं यहाँ कैसे आया?

गणित के साथ-सशर्त समझने के लिए महत्वपूर्ण नोट: QBasic में, तुलना ऑपरेटरों के परिणाम हैं 0और -1, नहीं 0और 1

हम एरिक के कोड से शुरू करते हैं:

IF a*b THEN?a*-(a=b)ELSE?a+b

दूसरे शब्दों में, यदि aऔर bदोनों नॉनज़रो हैं, तो प्रिंट करें a*-(a=b)( aयदि a=b, अन्यथा 0); अन्य (कम से कम एक aऔर bशून्य है), आउटपुट a+b(नॉनज़ेरो नंबर, या 0यदि वे दोनों शून्य हैं)।

यहाँ पहले से ही कुछ गणित चल रही है। आइए इसे एक कदम आगे बढ़ाएं और देखें कि क्या हम IFकथन को पूरी तरह से समाप्त कर सकते हैं । हमें a*b>0बाहरी स्थिति के लिए उपयोग करना होगा : a*bकई अलग-अलग सत्य मूल्य हो सकते हैं, जो IFगणित के लिए समस्याओं का कारण है, लेकिन ठीक है ।

c=a*b>0
?c*a*(a=b)+(c+1)*(a+b)

यह -Limination की मानक चाल है IF। जब cसत्य है, c*a*(a=b)है -a*(a=b)और (c+1)*(a+b)है 0; जब cझूठ है, c*a*(a=b)है 0और (c+1)*(a+b)है a+b। तो यह अभिव्यक्ति के रूप में एक ही परिणाम देता है IF ... THEN ... ELSE। एकमात्र समस्या यह है कि यह हमारे कार्यक्रम को 38 के बजाय 40 बाइट्स बनाता है। हो सकता है कि हम गणित को फिर से व्यवस्थित करके इसे छोटा कर सकते हैं।

c=a*b>0
?c*a*(a=b)+c*(a+b)+a+b

अभी भी 40 बाइट्स ...

c=a*b>0
?c*(a+b+a*(a=b))+a+b

अब हमारा कार्यक्रम 38 बाइट्स का है। लेकिन चूंकि हम केवल cएक बार उपयोग कर रहे हैं , इसलिए हमें इसे अब किसी वैरिएबल पर असाइन नहीं करना है:

?(a*b>0)*(a+b+a*(a=b))+a+b

अब हम 36 बाइट्स के नीचे हैं।

लेकिन प्रतीक्षा और भी है ... यह a+b+a*(a=b)अभिव्यक्ति थोड़ी बेमानी लगती है। a*(a=b)है -aयदि a=bऔर 0अन्यथा। जब हम इसे जोड़ते हैं a, तो हम 0अगर a=bऔर aअन्यथा प्राप्त करते हैं । हो सकता है कि हम हालत को उलट कर कम बाइट्स में एक ही चीज हासिल कर सकें।

b+a*-(a<>b)

सबसे पहले, यह छोटा नहीं दिखता है। लेकिन हम एक नकारात्मक जोड़ने के बजाय घटाकर एक बाइट बचा सकते हैं:

b-a*(a<>b)

और हमारे पास हमारे 35-बाइट समाधान है।


वहाँ पर अच्छी चाल ...
ol द आउटगॉल्फ

1

क्लीन , 46 43 42 बाइट्स

import StdEnv
?[a,b]|a<1||a==b=b=0

?o sort

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

अनाम रचना :: [Int] -> Int, जोड़ी को क्रमित करती है और फिर पहले सदस्य से मेल खाती है।

एक लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लम्बे लौड़े से उसे ऐसे ही चोदा ..

import StdEnv

(\[a,b]|a<1||a==b=b=0)o sort

1

जेली , 7 6 बाइट्स

׬o=a»

इसे ऑनलाइन आज़माएं! या सभी संयोजनों का प्रयास करें!

कैसे?

׬o=a»   Dyadic link
×        Multiply the two arguments.
 ¬       Logical not. Gives 1 if one argument is 0, 1 otherwise.
   =     Are the two arguments equal?
  o      Logical or the result of = and ¬. 
     »   Greater of the two arguments.
    a    Logical and. Gives the greater of the two arguments if they are equal
         or if one of them is zero and gives 0 otherwise.

एपीएल उत्तर में विधि का उपयोग करके , हम एक ही बाइट गिनती प्राप्त करते हैं। एक बाइट उस उत्तर से अधिक लंबी है क्योंकि सबसे कम आम कई दो बाइट्स हैं।

6 बाइट्स

«=æl×»

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


मैं नीचे एक वैकल्पिक विधि भी नोट करता हूं
H.PWiz

@ H.PWiz ओह, मैंने सोचा था कि आप लिंक में एक ही विधि का उपयोग कर रहे थे
dylnan

मैं दो तरीकों देना ∧=⌊और =*⌊। जिनमें से दूसरी जैली द्वारा पसंद की जाती है
H.PWiz

@ H.PWiz मैं एपीएल नहीं बोलता, मैं सिर्फ आपके द्वारा वर्णित विधि का उपयोग कर रहा था। क्या करता =*⌊है?
dylnan

यह बहुत ही जेली के समान है, सिवाय इसके कि न्यूनतम है। या ×दोनों भाषाओं में उपयोग कर सकता है
H.PWiz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.