47
\$\begingroup\$

You have two values each of which is either 0 representing "unknown", or one of 1,2,3. Merge them into a single value as follows:

  • If both values are nonzero and equal, output that value:
    (3,3) -> 3
  • If both values are nonzero but unequal, output 0 for unknown:
    (1,2) -> 0
  • If one value is zero and the other is not, output the nonzero value:
    (2,0) -> 2, (0,1) -> 1
  • If both values are zero, output zero:
    (0,0) -> 0

Test cases:

There are 16 possible input pairs.

  | 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

Leaderboards

var QUESTION_ID=165314,OVERRIDE_USER=8478;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>

\$\endgroup\$
8
  • 10
    \$\begingroup\$ The fourth rule fits in the first rule, so I dont know why you separated them. \$\endgroup\$
    – Fatalize
    May 24, 2018 at 7:14
  • 1
    \$\begingroup\$ Nitpick: The 4th point is redundant, you can just remove "nonzero" from the first point. EDIT: Wow, what a ninja @Fatalize is. \$\endgroup\$ May 24, 2018 at 7:18
  • \$\begingroup\$ Also, 3 isn't really necessary here, although it does increase the number of possible inputs. \$\endgroup\$ May 24, 2018 at 7:26
  • 3
    \$\begingroup\$ I considered condensing the rules, but thought it would be clearest to just list all the zero/nonzero cases and leave the optimization up to the golfers. \$\endgroup\$
    – xnor
    May 25, 2018 at 0:17
  • 2
    \$\begingroup\$ This needs a leaderboard, the first page is starting to get answers already beaten on the second one. \$\endgroup\$ May 26, 2018 at 1:02

64 Answers 64

1 2
3
0
\$\begingroup\$

C#, 4827 bytes

(x,y)=>x==y?x:(x*y>0?0:x|y)

Try it online

Thanks @Charlie for the TIO link & helping trim 21 chars off the code

\$\endgroup\$
3
  • \$\begingroup\$ Welcome to the site! I don't know C#, but is it possible to remove the space between > a=? Also, would you mind editing in a link to an online tester, such as Try it online! so that others can test your submission? \$\endgroup\$ May 24, 2018 at 10:01
  • \$\begingroup\$ You can use this link in your answer, which also reduces your byte-count to just 27 bytes, as a simple lambda expression is a valid answer in code golf. \$\endgroup\$
    – Charlie
    May 24, 2018 at 11:15
  • \$\begingroup\$ @cairdcoinheringaahing I have now included TIO link to my answer (Thanks to @Charlie). the space (and the variable) apparently seems to be not required, I wasn't aware on the guidelines around how to use lambda expressions for code golf answers, thanks again to Charlie for pointing it out. \$\endgroup\$ May 27, 2018 at 14:35
0
\$\begingroup\$

PHP, 42 40 bytes

[,$a,$b]=$argv;echo$a*$b&&$a-$b?0:$a|$b;

Run with php -r '<code>' <a> <b> or Try it online.

breakdown

[,$a,$b]=$argv; // import input
echo
    $a*$b       // if both not 0
    &&$a-$b     // and unequal
        ?0      // then print 0
        :$a|$b  // else print the non-zero value, if there is one
;
\$\endgroup\$
0
\$\begingroup\$

Husk, 4 bytes

-1 thanks to H.PWiz.

!4uΘ

Try it online!

\$\endgroup\$
0
0
\$\begingroup\$

Q'Nial7, 40 bytes

n is OP A B{2>sum(cull A B 0>0)*max A B}

n is OP A B{                           }    operation n with parameters A B (pair of numbers)
                       A B 0                append 0 to pair of numbers
                  cull                      create list of unique elements
                            >0              create booleans of elements that are > 0
              sum(            )             sum up the booleans
            2>                              sum > 2 ? (boolean)
                               *max A B     multiply boolean with max of A B

result:

     n 0 3
3
     n 1 2
0
     n 2 2
2
     n 0 0
0
\$\endgroup\$
1 2
3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.