2
\$\begingroup\$

What you need to do is create a Boolean parser.


Boolean expressions, in case you haven't heard of them yet, have two inputs and one output. There are four 'gates' in boolean arithmetic, namely OR (represented by |), AND (represented by &), NOT (which are used a bit like brackets : / and \ note, I could have used !, but you can't use them as brackets, since !!!! is ambiguous (//\\ or /\/\)) and XOR (represented by ^). These gates operate on their inputs which are either true or false. We can list the possible inputs (A and B in this case) and the outputs (O) using a truth table as follows:

XOR
A|B|O
-----
0|0|0
0|1|1
1|0|1
1|1|0

OR
A|B|O
-----
0|0|0
0|1|1
1|0|1
1|1|1

AND
A|B|O
-----
0|0|0
0|1|0
1|0|0
1|1|1

NOT is only 1 input, and it goes from true to false and vice versa.

In Boolean expressions, they are used like this:

1^((0&1&1)&/(1&0&1)\)

Evaluating as follows:

1^(( 1 |1)&/(1&0&1)\)  |  0 OR 1 = 1, order of operations left to right - no brackets
1^(( 1   )&/(1&0&1)\)  |  1 OR 1 = 1
1^(  1    &/(1&0&1)\)  |  Remove brackets
1^(  1    &/( 0 &1)\)  |  1 AND 0 = 0
1^(  1    &/( 0   )\)  |  0 AND 1 = 0
1^(  1    &/  0    \)  |  Remove brackets
1^(  1    &   1     )  |  NOT 0 = 1
1^(  1              )  |  1 AND 1 = 1
1^   1                 |  Remove brackets
0                      |  1 XOR 1 = 0

so 0 is the result.

Task: create a program to do this!*

I/O examples

Input -> Output
1v(0.1) -> 1
1v(0.1./1\) -> 1
/0\v(0+1) -> 0
0v1v1 -> 0

Notes

  • There is no order of precedence. We will treat 0.1v0+1 as (((0.1)v0)+1)

Leaderboard

var QUESTION_ID=77254,OVERRIDE_USER=42854;function answersUrl(e){return"http://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"http://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\$

closed as unclear what you're asking by Peter Taylor, Mego, Zach Gates, Arcturus, Rɪᴋᴇʀ Apr 7 '16 at 21:39

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    \$\begingroup\$ Why use non-ascii? This makes it so its hard for non-esolangs to compete. \$\endgroup\$ – Conor O'Brien Apr 6 '16 at 21:33
  • 7
    \$\begingroup\$ Try the sandbox ! \$\endgroup\$ – Conor O'Brien Apr 7 '16 at 0:21
  • 1
    \$\begingroup\$ You should format the test cases better, at the moments it is impossible to copy & paste them all at once. Read here for some more details on this. \$\endgroup\$ – Denker Apr 7 '16 at 7:37
  • 1
    \$\begingroup\$ Use common Boolean representations for operators like the words for And Or Xor Not or use & | ^ !. \$\endgroup\$ – mbomb007 Apr 7 '16 at 18:08
  • 2
    \$\begingroup\$ It's not clear to me what the cutoff is for "builtins that trivialise the problem". General-purpose eval could be made to work by first applying some simple substitutions: should that count? The examples also include elements which aren't mentioned in the spec. \$\endgroup\$ – Peter Taylor Apr 7 '16 at 18:58
1
\$\begingroup\$

GNU Sed 4.2.2, 102

Score includes +1 for -r option to sed:

y/+./oa/
:
s%/0\\%1%
s%/1\\|\b(0o0|(\w)v\2)%0%
s%\b(\wo\w|\wv\w|1a1)%1%
s/\b\wa\w/0/
s/\((\w)\)/\1/
t

Ideone.


Incomplete Retina port.

\$\endgroup\$