Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>24 game/Solve - Rosetta Code</title>
<meta charset="UTF-8"/>
<meta name="generator" content="MediaWiki 1.20.3"/>
<script type="text/javascript">
//<![CDATA[
try{if (!window.CloudFlare) {var CloudFlare=[{verbose:0,p:0,byc:0,owlid:"cf",bag
2:1,mirage2:0,oracle:0,paths:{cloudflare:"/cdn-cgi/nexp/dok3v=1613a3a185/"},atok
:"1d41b6e8edcbbca654dbf2320c50ff5c",petok:"84b867db920efc7777e89c4b0e97a6ec18990
0a9-1444512962-1800",zone:"rosettacode.org",rocket:"a",apps:{"ga_key":{"ua":"UA1219419-1","ga_bs":"2"}}}];document.write('<script type="text/javascript" src="/
/ajax.cloudflare.com/cdn-cgi/nexp/dok3v=e9627cd26a/cloudflare.min.js"><'+'\/scri
pt>');}}catch(e){};
//]]>
</script>
<link rel="alternate" type="application/x-wiki" title="Edit" href="/mw/index.php
?title=24_game/Solve&action=edit"/>
<link rel="edit" title="Edit" href="/mw/index.php?title=24_game/Solve&action
=edit"/>
<link rel="shortcut icon" href="/favicon.ico"/>
<link rel="search" type="application/opensearchdescription+xml" href="/mw/opense
arch_desc.php" title="Rosetta Code (en)"/>
<link rel="EditURI" type="application/rsd+xml" href="http://rosettacode.org/mw/a
pi.php?action=rsd"/>
<link rel="copyright" href="http://www.gnu.org/licenses/fdl-1.2.html"/>
<link rel="alternate" type="application/atom+xml" title="Rosetta Code Atom feed"
href="/mw/index.php?title=Special:RecentChanges&feed=atom"/>
<link rel="stylesheet" href="http://rosettacode.org/mw/load.php?debug=false&
lang=en&modules=mediawiki.legacy.commonPrint%2Cshared%7Cskins.vector&onl
y=styles&skin=vector&*"/>
<meta name="ResourceLoaderDynamicStyles" content=""/>
<link rel="stylesheet" href="http://rosettacode.org/mw/load.php?debug=false&
lang=en&modules=site&only=styles&skin=vector&*"/>
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),
a:lang(ur){text-decoration:none}</style>
<script data-rocketsrc="http://rosettacode.org/mw/load.php?debug=false&lang=
en&modules=startup&only=scripts&skin=vector&*" type="text/rocket
script"></script>
<script type="text/rocketscript">if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgN
amespaceNumber":0,"wgPageName":"24_game/Solve","wgTitle":"24 game/Solve","wgCurR
evisionId":210398,"wgArticleId":4940,"wgIsArticle":true,"wgAction":"view","wgUse
rName":null,"wgUserGroups":["*"],"wgCategories":["Programming Tasks","Solutions
by Programming Task","ABAP","Argile","AutoHotkey","BBC BASIC","C","C++","Clojure
","CoffeeScript","Common Lisp","D","ERRE","Euler Math Toolbox","F Sharp","Fortra
n","GAP","Go","Gosu","Haskell","Icon","Unicon","Icon Programming Library","J","J
ava","JavaScript","Jq","Julia","Liberty BASIC","Lua","Mathematica","Wolfram Lang
uage","OCaml","Perl","Perl 6","Phix","PicoLisp","ProDOS","Prolog","Python","R","
Racket","REXX","Ruby","Scala","Sidef","Swift","Tcl","Tcllib","Ursala","Zkl","GUI
SS/Omit","ML/I/Omit"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSepa
ratorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateForma
t":"dmy","wgMonthNames":["","January","February","March","April","May","June","J
uly","August","September","October","November","December"],"wgMonthNamesShort":[
"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgR
elevantPageName":"24_game/Solve","wgRestrictionEdit":[],"wgRestrictionMove":[],"
sfgRemoveText":"Remove","sfgAutocompleteOnAllChars":false,"sfgAutocompleteValues
":{},"sfgShowOnSelect":{},"sfgFormErrorsHeader":"There were errors with your for
create",function(a){_gaq.push(["_trackSocial","facebook","like",a])}),FB.Event.s
ubscribe("edge.remove",function(a){_gaq.push(["_trackSocial","facebook","unlike"
,a])}),FB.Event.subscribe("message.send",function(a){_gaq.push(["_trackSocial","
facebook","send",a])}));"twttr"in b&&"events"in twttr&&"bind"in twttr.events&&tw
ttr.events.bind("tweet",function(a){if(a){var b;if(a.target&&a.target.nodeName==
"IFRAME")a:{if(a=a.target.src){a=a.split("#")[0].match(/[^?=&]+=([^&]*)?/g);b=0;
for(var c;c=a[b];++b)if(c.indexOf("url")===0){b=unescape(c.split("=")[1]);break
a}}b=void 0}_gaq.push(["_trackSocial","twitter","tweet",b])}})})})(window);
/* ]]> */
</script>
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-24_game_Solve skin-v
ector action-view vector-animateLayout">
<div id="mw-page-base" class="noprint"></div>
<div id="mw-head-base" class="noprint"></div>
<div id="content" class="mw-body">
<a id="top"></a>
<div id="mw-js-message" style="display:none;"></div>
<h1 id="firstHeading" class="firstHeading"><span dir="auto">24 game/Solve</span>
</h1>
<div id="bodyContent">
<div id="siteSub">From Rosetta Code</div>
<div id="contentSub"><span class="subpages">< <a href="/wiki/24_game" title="
24 game">24 game</a></span></div>
<div id="jump-to-nav" class="mw-jump">
Jump to: <a href="#mw-head">navigation</a>, <a href="#p-search">search</a>
</div>
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class=
"infobox" style="width: 2in"><div class="floatleft"><a href="/wiki/Category:Solu
tions_by_Programming_Task" title="Category:Solutions by Programming Task"><img a
lt="Task" src="/mw/images/b/ba/Rcode-button-task-crushed.png" width="64" height=
"64"/></a></div><b>24 game/Solve</b><br/>
You are encouraged to <a href="/wiki/Rosetta_Code:Solve_a_Task" title="Rosetta C
ode:Solve a Task">solve this task</a> according to the task description, using a
ny language you may know.</div>
<p>Write a program that takes four digits, either from user input or by random g
eneration, and computes arithmetic expressions following the rules of the <a hre
f="/wiki/24_game" title="24 game">24 game</a>.
</p><p>Show examples of solutions generated by the program.
</p><p>C.F: <a href="/wiki/Arithmetic_Evaluator" title="Arithmetic Evaluator" cl
ass="mw-redirect">Arithmetic Evaluator</a>
</p>
<table id="toc" class="toc"><tr><td><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#ABAP"><span class="tocnumber">1</s
pan> <span class="toctext">ABAP</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Argile"><span class="tocnumber">2<
/span> <span class="toctext">Argile</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#AutoHotkey"><span class="tocnumber
v_flag<span class="sy0">.</span><br/>
<a href="http://help.sap.com/abapdocu/e
n/ABAPIF.htm"><span class="kw1">if</span></a> lv_flag <span class="sy1">=</span>
<span class="st0">'X'</span><span class="sy0">.</span><br/>
<a href="http:
//help.sap.com/abapdocu/en/ABAPEXIT.htm"><span class="kw1">exit</span></a><span
class="sy0">.</span><br/>
<a href="http://help.sap.com/abapdocu/en/ABAPENDIF.
htm"><span class="kw1">endif</span></a><span class="sy0">.</span><br/> <a href=
"http://help.sap.com/abapdocu/en/ABAPENDDO.htm"><span class="kw1">enddo</span></
a><span class="sy0">.</span><br/><a href="http://help.sap.com/abapdocu/en/ABAPEN
DFORM.htm"><span class="kw3">endform</span></a><span class="sy0">.</span><br/>&#
160;<br/> <br/><span class="co1">" Permutation function - this is used
to permute:</span><br/><span class="co1">" A = {A1...AN} -> Set of supp
lied variables.</span><br/><span class="co1">" B = {B1...BN - 1} -> Set
of operators.</span><br/><span class="co1">" Can be used for an unbounded s
ize set. Relies</span><br/><span class="co1">" on lexicographic ordering of
the set.</span><br/><a href="http://help.sap.com/abapdocu/en/ABAPFORM.htm"><spa
n class="kw3">form</span></a> permute <span class="kw4">using</span> iv_set <spa
n class="kw4">like</span> lt_numbers<br/>
<span class="kw4">changing
</span> ev_last <span class="kw4">type</span> c<span class="sy0">.</span><br/>
<a href="http://help.sap.com/abapdocu/en/ABAPDATA.htm"><span class="kw2">data</s
pan></a><span class="sy0">:</span> lv_len
<span class="kw4">type</span> i<sp
an class="sy0">,</span><br/>
lv_first <span class="kw4">type</span> i<s
pan class="sy0">,</span><br/>
lv_third <span class="kw4">type</span> i<
span class="sy0">,</span><br/>
lv_count <span class="kw4">type</span> i
<span class="sy0">,</span><br/>
lv_temp
<span class="kw4">type</span>
i<span class="sy0">,</span><br/>
lv_temp_2 <span class="kw4">type</span>
i<span class="sy0">,</span><br/>
lv_second <span class="kw4">type</span
> i<span class="sy0">,</span><br/>
lv_changed <span class="kw4">type</spa
n> c<span class="sy0">,</span><br/>
lv_perm
<span class="kw4">type</sp
an> i<span class="sy0">.</span><br/> <span class="kw8">describe table</span> iv
_set <span class="kw4">lines</span> lv_len<span class="sy0">.</span><br/> <
br/> lv_perm <span class="sy1">=</span> lv_len <span class="sy0">-</span> <span
class="nu0">1</span><span class="sy0">.</span><br/> lv_changed <span class="sy
1">=</span> <span class="st0">' '</span><span class="sy0">.</span><br/> <span c
lass="co1">" Loop backwards through the table, attempting to find elements
which</span><br/> <span class="co1">" can be permuted. If we find one, bre
ak out of the table and set the</span><br/> <span class="co1">" flag indic
ating a switch.</span><br/> <a href="http://help.sap.com/abapdocu/en/ABAPDO.htm
"><span class="kw1">do</span></a><span class="sy0">.</span><br/>
<a href="htt
p://help.sap.com/abapdocu/en/ABAPIF.htm"><span class="kw1">if</span></a> lv_perm
<span class="sy1"><=</span> <span class="nu0">0</span><span class="sy0">.</s
pan><br/>
<a href="http://help.sap.com/abapdocu/en/ABAPEXIT.htm"><span clas
s="kw1">exit</span></a><span class="sy0">.</span><br/>
<a href="http://help.s
ap.com/abapdocu/en/ABAPENDIF.htm"><span class="kw1">endif</span></a><span class=
"sy0">.</span><br/>
<span class="co1">" Read the elements.</span><br/>
<span class="kw8">read table</span> iv_set <span class="kw4">index</span> lv_p
erm <span class="kw4">into</span> lv_first<span class="sy0">.</span><br/>
<a
href="http://help.sap.com/abapdocu/en/ABAPADD.htm"><span class="kw3">add</span><
/a> <span class="nu0">1</span> <span class="kw4">to</span> lv_perm<span class="s
y0">.</span><br/>
<span class="kw8">read table</span> iv_set <span class="kw4
">index</span> lv_perm <span class="kw4">into</span> lv_second<span class="sy0">
.</span><br/>
<a href="http://help.sap.com/abapdocu/en/ABAPSUBTRACT.htm"><spa
n class="kw3">subtract</span></a> <span class="nu0">1</span> <span class="kw4">f
rom</span> lv_perm<span class="sy0">.</span><br/>
<a href="http://help.sap.co
m/abapdocu/en/ABAPIF.htm"><span class="kw1">if</span></a> lv_first <span class="
sy1"><</span> lv_second<span class="sy0">.</span><br/>
lv_changed <span
class="sy1">=</span> <span class="st0">'X'</span><span class="sy0">.</span><br/>
<a href="http://help.sap.com/abapdocu/en/ABAPEXIT.htm"><span class="kw1">e
xit</span></a><span class="sy0">.</span><br/>
<a href="http://help.sap.com/ab
apdocu/en/ABAPENDIF.htm"><span class="kw1">endif</span></a><span class="sy0">.</
span><br/>
<a href="http://help.sap.com/abapdocu/en/ABAPSUBTRACT.htm"><span c
(
1
1
(
(
(
(
(
2
2
(
(
(
2
2
(
(
(
2
2
(
(
(
2
2
(
(
(
(
(
2
2
(
(
2
(
2
(
(
(
2
2
(
(
(
2
2
(
(
(
(
2
2
(
(
2
(
2
(
(
1
*
*
(
2
(
2
2
*
*
(
2
2
/
/
(
2
2
*
*
(
2
2
/
/
(
2
(
2
2
*
*
(
2
*
2
*
(
2
2
*
*
(
2
2
*
*
2
(
2
2
*
*
(
2
*
2
*
2
(
*
(
(
2
+
2
*
*
(
(
2
/
/
(
(
2
*
*
(
(
2
/
/
(
(
2
+
2
*
*
(
(
2
*
(
*
(
2
*
*
(
(
2
*
*
(
(
+
2
*
*
(
(
2
*
(
*
(
+
2
(
(
4
+
(
*
1
(
(
1
/
1
(
1
(
*
1
(
(
1
/
1
(
1
(
+
(
*
3
(
(
3
*
(
(
3
3
*
3
(
(
3
*
3
(
(
3
4
*
4
(
(
4
*
(
(
4
4
4
*
4
4
*
1
1
1
)
1
1
*
1
)
1
/
1
1
)
1
1
*
1
)
1
/
1
3
3
3
)
3
3
*
3
3
3
)
/
3
)
3
3
*
3
)
3
3
*
)
4
)
4
4
*
4
4
4
)
/
)
4
*
*
(
)
+
)
*
*
*
(
)
*
/
(
/
)
*
*
*
(
)
*
/
(
/
)
+
)
*
*
*
(
)
/
/
/
(
)
*
*
*
(
)
*
*
*
(
*
)
*
*
*
(
)
/
/
/
(
*
)
3
3
3
+
3
*
(
3
3
3
*
(
3
3
3
*
(
4
4
4
*
(
4
4
4
+
1
*
(
1
1
1
/
1
1
(
1
*
(
4
4
4
*
(
4
4
4
(
*
(
1
1
1
/
1
1
(
1
(
*
)
)
*
3
)
3
3
)
)
*
3
3
)
*
)
4
4
)
)
*
4
4
)
*
)
1
)
1
1
)
)
*
1
)
)
1
/
4
4
)
)
*
4
4
)
)
/
1
1
1
)
)
*
1
)
)
1
/
3
3
)
*
2
)
)
)
*
)
*
4
)
*
)
4
/
)
*
)
*
3
)
*
)
3
/
)
)
)
*
)
*
4
)
)
*
/
4
)
*
)
*
1
)
/
)
/
1
+
)
*
)
*
3
)
)
*
/
3
+
)
*
2
)
*
*
*
4
*
4
)
*
4
*
)
4
*
3
*
3
)
*
3
*
)
3
*
*
*
4
*
4
)
*
*
4
4
)
*
1
*
1
)
/
1
/
1
)
3
*
3
*
3
)
*
*
3
3
)
1
*
2
)
)
4
4
4
)
4
)
)
4
)
4
)
)
3
)
3
)
)
3
)
3
)
)
4
4
4
)
4
)
)
4
4
)
)
)
1
)
1
)
)
1
)
1
)
)
)
3
)
3
)
)
3
3
)
)
)
)
1
(
(
2
2
(
(
(
2
2
(
(
(
(
(
(
3
3
(
(
(
3
3
(
(
(
(
3
3
(
(
(
3
3
(
(
(
(
(
3
3
(
(
3
(
3
(
(
(
3
3
(
(
(
3
3
(
(
(
3
3
2
2
*
*
(
2
2
*
*
(
3
3
(
3
3
*
*
(
3
3
/
/
3
(
3
3
*
*
(
3
3
/
/
(
3
(
3
3
*
*
(
3
*
3
*
(
3
3
*
*
(
3
3
*
*
(
3
3
*
*
*
*
(
(
2
*
*
(
(
3
+
+
3
*
*
(
(
3
/
/
(
(
+
3
*
*
(
(
3
/
/
(
(
3
+
3
*
*
(
(
3
*
(
*
(
3
*
*
(
(
3
*
*
(
(
3
*
*
(
(
4
(
(
4
*
4
(
(
4
+
(
1
*
1
(
(
1
/
1
(
1
(
1
*
1
(
(
1
/
1
(
1
(
+
(
*
2
(
(
2
*
(
(
2
2
*
2
(
(
2
*
2
(
(
2
*
4
(
(
4
)
4
4
*
4
)
4
4
*
1
1
)
1
)
1
1
*
1
)
1
/
1
)
1
)
1
1
*
1
)
1
/
1
2
2
2
)
2
2
*
2
2
2
)
/
2
)
2
2
*
2
)
2
2
*
4
)
4
4
*
*
*
*
(
)
*
*
*
(
)
+
*
)
*
*
*
(
)
*
/
(
/
*
)
*
*
*
(
)
*
/
(
/
)
+
)
*
*
*
(
)
/
/
/
(
)
*
*
*
(
)
*
*
*
(
)
*
*
*
(
(
3
3
3
*
(
3
3
3
+
2
(
*
(
2
2
2
*
(
2
2
2
(
*
(
4
4
4
*
(
4
4
4
+
1
*
(
1
1
1
/
1
1
(
1
*
(
4
4
4
*
(
4
4
4
*
(
1
1
1
3
)
)
*
3
3
)
)
/
2
)
2
2
2
)
)
*
2
2
)
*
)
4
4
4
)
)
*
4
4
)
*
)
1
)
1
1
)
)
*
1
)
)
1
/
4
4
)
)
*
4
4
)
)
/
1
1
)
)
*
*
)
*
1
)
/
)
/
1
)
)
+
)
*
)
*
4
)
*
)
4
/
+
)
*
)
*
2
)
*
)
2
/
)
)
)
*
)
*
4
)
)
*
/
4
)
*
)
*
1
)
/
)
/
1
)
*
)
*
2
1
*
1
)
/
1
/
1
)
*
*
4
*
4
*
4
)
*
4
*
)
4
2
*
2
*
2
)
*
2
*
)
2
*
*
*
4
*
4
)
*
*
4
4
)
*
1
*
1
)
/
1
/
1
)
*
2
*
2
)
)
1
)
)
1
)
1
)
)
4
4
)
4
)
4
)
)
4
)
4
)
)
)
2
)
2
)
)
2
)
2
)
)
4
4
4
)
4
)
)
4
4
)
)
)
1
)
1
)
)
1
)
1
)
)
2
)
2
)
)
(
(
3
(
3
(
(
(
3
3
(
(
(
3
3
4
4
(
(
(
4
4
(
(
(
4
4
4
4
(
(
(
4
4
(
(
(
4
4
(
4
4
(
(
(
4
4
(
(
4
(
4
(
4
4
(
(
(
4
4
(
3
*
3
*
(
3
3
*
*
(
3
3
*
*
*
*
(
4
4
*
*
(
4
4
/
/
*
*
(
4
4
*
*
(
4
4
/
/
4
*
*
(
4
4
*
*
(
4
*
4
*
4
*
*
(
4
4
*
*
3
*
(
*
(
3
*
*
(
(
3
*
*
(
(
(
(
4
*
*
(
(
4
/
/
(
(
(
(
4
*
*
(
(
4
/
/
(
(
+
(
(
4
*
*
(
(
4
*
(
*
(
+
(
(
4
*
*
(
(
*
(
(
4
4
*
4
(
(
4
*
4
(
(
4
(
1
*
1
(
(
1
/
1
(
1
(
(
1
*
1
(
(
1
/
1
(
1
(
2
(
2
*
2
(
(
2
*
(
(
2
2
2
(
2
*
2
(
(
2
4
4
4
)
/
4
)
4
4
*
4
)
4
4
*
1
+
1
)
1
1
*
1
)
1
/
1
1
+
1
)
1
1
*
1
)
1
/
1
)
2
+
2
)
2
2
*
2
2
2
)
/
)
2
+
2
)
2
2
*
)
/
/
/
(
)
*
*
*
(
)
*
*
*
(
+
(
)
*
*
*
(
)
*
/
(
/
+
(
)
*
*
*
(
)
*
/
(
/
*
+
(
)
*
*
*
(
)
/
/
/
(
*
+
(
)
*
*
*
(
/
1
1
(
1
*
(
2
2
2
*
(
2
2
2
2
2
*
(
2
2
2
*
(
2
2
2
3
3
*
(
3
3
3
*
(
3
3
3
(
1
1
*
(
1
1
1
/
1
1
(
1
(
3
3
*
(
3
3
3
1
)
)
1
/
2
2
)
)
*
2
2
)
)
/
)
+
2
2
)
)
*
2
2
)
*
)
)
+
3
3
)
)
*
3
3
)
*
)
1
)
+
1
1
)
)
*
1
)
)
1
/
3
)
+
3
3
)
)
*
)
)
*
/
2
)
*
)
*
1
)
/
)
/
1
+
3
)
*
)
*
3
)
*
)
3
/
+
2
)
*
)
*
2
)
*
)
2
/
+
+
3
)
*
)
*
3
)
)
*
/
3
+
+
1
)
*
)
*
1
*
*
2
2
)
*
1
*
1
)
/
1
/
1
)
3
)
*
3
*
3
)
*
3
*
)
3
2
)
*
2
*
2
)
*
2
*
)
2
3
3
)
*
3
*
3
)
*
*
3
3
)
1
1
)
*
1
*
1
)
2
2
)
)
)
1
)
1
)
)
1
)
1
)
)
)
)
3
)
3
)
)
3
)
3
)
)
)
)
2
)
2
)
)
2
)
2
)
)
)
)
)
3
)
3
)
)
3
3
)
)
)
)
)
)
1
)
1
)
)
(
(
(
4
4
4
4
(
(
(
4
4
(
(
4
(
4
4
4
(
(
(
4
4
(
(
(
4
4
(
4
4
*
*
*
*
(
4
4
*
*
(
4
*
4
*
*
*
(
4
4
*
*
(
4
4
*
*
4
*
*
(
(
(
(
4
*
*
(
(
4
*
(
*
(
(
(
4
*
*
(
(
4
*
*
(
(
*
2
(
(
2
(
3
*
3
(
(
3
*
(
(
3
3
(
3
*
3
(
(
3
*
3
(
(
3
2
)
2
2
*
3
+
3
)
3
3
*
3
3
3
)
/
3
+
3
)
3
3
*
3
)
3
3
*
)
*
*
*
(
+
(
)
*
*
*
(
)
/
/
/
(
+
(
)
*
*
*
(
)
*
*
*
(
*
(
3
3
3
1
1
*
(
1
1
1
/
1
1
(
1
2
2
*
(
2
2
2
*
(
2
2
2
Evaluating 24
5 * ( 6 - ( 8
( 5 + 7 ) * (
( ( 5 + 7 ) ( 5 + ( 7 - 8
( ( 5 - 8 ) +
( 5 - ( 8 - 7
6 * ( ( 5 + 7
6 * ( 5 + ( 7
6 * ( ( 5 - 8
6 * ( 5 - ( 8
6 * ( ( 7 + 5
6 * ( 7 + ( 5
( 6 / ( 7 - 5
6 / ( ( 7 - 5
6 * ( ( 7 - 8
6 * ( 7 - ( 8
( 6 * 8 ) / (
6 * ( 8 / ( 7
( 6 - ( 8 / 7
( 7 + 5 ) * (
( ( 7 + 5 ) ( 7 + ( 5 - 8
( ( 7 - 8 ) +
( 7 - ( 8 - 5
( 8 - 6 ) * (
( 8 * 6 ) / (
8 * ( 6 / ( 7
( 8 - 6 ) * (
( 8 / ( 7 - 5
3
3
)
)
/
)
+
1
1
)
)
*
1
)
)
1
/
)
+
2
2
)
)
*
2
2
)
)
/
)
/
)
/
1
+
2
)
*
)
*
2
)
)
*
/
2
+
1
)
*
)
*
1
)
/
)
/
1
/
1
/
1
)
2
)
*
2
*
2
)
*
*
2
2
)
1
)
*
1
*
1
)
/
1
/
1
)
1
)
1
)
)
)
)
2
)
2
)
)
2
2
)
)
)
)
)
1
)
1
)
)
1
)
1
)
)
8 / ( ( 7 - 5 ) / 6 )
</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=2" title="Edit section: Argile">edit</a>]</span> <span cla
ss="mw-headline" id="Argile"><a href="/wiki/Category:Argile" title="Category:Arg
ile">Argile</a></span></h2>
<div class="examplemeta workswith"><b>Works with</b>: <a href="/wiki/Argile" tit
le="Argile" class="mw-redirect">Argile</a> version 1.0.0</div>
<pre class="text highlighted_source">die "Please give 4 digits as argument
1\n" if argc < 2<br/> <br/>print a function that given four digits
argv[1] subject to the rules of \<br/>the _24_ game, computes an expression to s
olve the game if possible.<br/> <br/>use std, array<br/> <br/>let digi
ts
be an array of 4 byte<br/>let operators be an array of 4 byte<br/>(: reord
ered arrays :)<br/>let (type of digits)
rdigits<br/>let (type of operato
rs) roperators<br/> <br/>.: a function that given four digits <text digi
ts> subject to<br/> the rules of the _24_ game, computes an expression to s
olve<br/> the game if possible.
 :.
-> text<br/> if #digits != 4 {return "[error: need exactly 4 digit
s]"}<br/> operators[0] = '+' ; operators[1] = '-'<br/> operators[2]
= '*' ; operators[3] = '/'<br/> for each (val int d) from 0 to 3<br/>
i
f (digits[d] < '1') || (digits[d] > '9')<br/>
return "[error: no
n-digit character given]"<br/>
(super digits)[d] = digits[d]<br/> let e
xpr = for each operand order stuff<br/> return "" if expr is nil<br/>
expr<br/> <br/>.:for each operand order stuff:. -> text<br/> for each
(val int a) from 0 to 3<br/>
for each (val int b) from 0 to 3<br/>
next
if (b == a)<br/>
for each (val int c) from 0 to 3<br/>
next if (c =
= b) or (c == a)<br/> for each (val int d) from 0 to 3<br/>
next if (d ==
c) or (d == b) or (d == a)<br/> rdigits[0] = digits[a] ; rdigits[1] = dig
its[b]<br/>
rdigits[2] = digits[c] ; rdigits[3] = digits[d]<br/>
let found = for each operator order stuff<br/>
return found unless fo
und is nil<br/> nil<br/> <br/>.:for each operator order stuff:. -> text
<br/> for each (val int i) from 0 to 3<br/>
for each (val int j) from 0 to 3
<br/>
for each (val int k) from 0 to 3<br/>
roperators[0] = operator
s[i]<br/>
roperators[1] = operators[j]<br/>
roperators[2] = operator
s[k]<br/>
let found = for each RPN pattern stuff<br/>
return found if
found isn't nil<br/> nil<br/> <br/>our (raw array of text) RPN_patterns =
Cdata<br/> "xx.x.x."<br/> "xx.xx.."<br/> "xxx..x.&qu
ot;<br/> "xxx.x.."<br/> "xxxx..."<br/>our (raw array of te
xt) formats = Cdata<br/> "((%c%c%c)%c%c)%c%c"<br/> "(%c%c%c)%c(
%c%c%c)"<br/> "(%c%c(%c%c%c))%c%c"<br/> "%c%c((%c%c%c)%c%c
)"<br/> "%c%c(%c%c(%c%c%c))"<br/>our (raw array of array of 3 in
t) rrop = Cdata<br/> {0;1;2}; {0;2;1}; {1;0;2}; {2;0;1}; {2;1;0}<br/> <br/
>.:for each RPN pattern stuff:. -> text<br/> let RPN_stack be an array of 4
real<br/> for each (val int rpn) from 0 to 4<br/>
let (nat) sp=0, op=0, dg=0
.<br/>
let text p<br/>
for (p = RPN_patterns[rpn]) (*p != 0) (p++)<br
/>
if *p == 'x'<br/>
if sp >= 4 {die "RPN stack overflow\n&q
uot;}<br/>
if dg > 3 {die "RPN digits overflow\n"}<br/>
RPN_stack[sp++] = (rdigits[dg++] - '0') as real<br/>
if *p == '.'<br/>
if sp < 2 {die "RPN stack underflow\n"}<br/>
if op > 2 {di
e "RPN operators overflow\n"}<br/>
sp -= 2<br/>
let x = RPN_stac
k[sp]<br/>
let y = RPN_stack[sp + 1]<br/> switch roperators[op++]<br/>
case '+' {x += y}<br/>
case '-' {x -= y}<br/>
case '*' {x *=
y}<br/>
case '/' {x /= y}<br/>
default {die "RPN operat
or unknown\n"}<br/>
RPN_stack[sp++] = x<br/>
if RPN_stack[0] == 2
4.0<br/>
our array of 12 byte buffer (: 4 paren + 3 ops + 4 digits + null&#
160;:)<br/>
snprintf (buffer as text) (size of buffer) (formats[rpn])
\<br/>
(rdigits[0]) (roperators[(rrop[rpn][0])]) (rdigits[1])
\<br/>
(roperators[(rrop[rpn][1])]) (rdigits[2])
\<br/>
(roperators[(rrop[rpn][2])]) (rdigits[3]);<br/>
return buffer as text<br/> nil</pre>
<p>Examples:
</p>
<pre>$ arc 24_game_solve.arg -o 24_game_solve.c
$ gcc -Wall 24_game_solve.c -o 24_game_solve
$ ./24_game_solve 1234
((1+2)+3)*4
$ ./24_game_solve 9999
$ ./24_game_solve 5678
((5+7)-8)*6
$ ./24_game_solve 1127
(1+2)*(1+7)</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=3" title="Edit section: AutoHotkey">edit</a>]</span> <span
class="mw-headline" id="AutoHotkey"><a href="/wiki/Category:AutoHotkey" title="
Category:AutoHotkey">AutoHotkey</a></span></h2>
<div class="examplemeta workswith"><b>Works with</b>: <a href="/wiki/AutoHotkey_
L" title="AutoHotkey L" class="mw-redirect">AutoHotkey_L</a></div>
<p>Output is in RPN.
</p>
<pre class="ahk highlighted_source"><a href="http://www.autohotkey.com/docs/comm
ands/_NoEnv.htm"><span class="kw5">#NoEnv</span></a><br/><a href="http://www.aut
ohotkey.com/docs/commands/InputBox.htm"><span class="kw3">InputBox</span></a><sp
an class="sy0">,</span> NNNN
<span class="co1">; user input 4 digits</span
><br/>NNNN <span class="sy0">:=</span> <a href="http://www.autohotkey.com/docs/c
ommands/RegExReplace.htm"><span class="kw3">RegExReplace</span></a><span class="
br0">(</span>NNNN<span class="sy0">,</span> <span class="st0">"(\d)(?=\
d)"</span><span class="sy0">,</span> <span class="st0">"$1,"</spa
n><span class="br0">)</span> <span class="co1">; separate with commas for th
e sort command</span><br/><a href="http://www.autohotkey.com/docs/commands/Sort.
htm"><span class="kw3">sort</span></a> NNNN<span class="sy0">,</span> d`<span cl
ass="sy0">,</span> <span class="co1">; sort in ascending order for the permutati
ons to work</span><br/><a href="http://www.autohotkey.com/docs/commands/StringRe
place.htm"><span class="kw3">StringReplace</span></a> NNNN<span class="sy0">,</s
pan> NNNN<span class="sy0">,</span> `<span class="sy0">,,</span> <span class="sy
0">,</span> All <span class="co1">; remove comma separators after sorting</span>
<br/> <br/>ops <span class="sy0">:=</span> <span class="st0">"+-*/&quo
t;</span><br/>patterns <span class="sy0">:=</span> <span class="br0">[</span
>
<span class="st0">"x x.x.x."</span><br/>
<span cl
ass="sy0">,</span><span class="st0">"x x.x x.."</span><br/>
<span class="sy0">,</span><span class="st0">"x x x..x."</span><br/>
<span class="sy0">,</span><span class="st0">"x x x.x.."</span><br/>
<span class="sy0">,</span><span class="st0">"x x x x..."</span>
<span class="br0">]</span><br/> <br/><span class="co1">; build brutefor
ce operator list ("+++, ++-, ++* ... ///")</span><br/>a <span class="s
y0">:=</span> b <span class="sy0">:=</span> c <span class="sy0">:=</span> <span
class="nu0">0</span><br/><span class="kw1">While</span> <span class="br0">(<
/span><span class="sy0">++</span>a<span class="sy0"><</span><span class="nu0"
>5</span><span class="br0">)</span><span class="br0">{</span><br/> <spa
n class="kw1">While</span> <span class="br0">(</span><span class="sy0">++</s
pan>b<span class="sy0"><</span><span class="nu0">5</span><span class="br0">&#
41;</span><span class="br0">{</span><br/> <span class="kw1">While</span> <
span class="br0">(</span><span class="sy0">++</span>c<span class="sy0"><<
/span><span class="nu0">5</span><span class="br0">)</span><span class="br0">
{</span><br/> l <span class="sy0">:=</span> <a href="http://www.autohotke
y.com/docs/Functions.htm#BuiltIn"><span class="kw4">SubStr</span></a><span class
="br0">(</span>ops<span class="sy0">,</span> a<span class="sy0">,</span> <sp
an class="nu0">1</span><span class="br0">)</span> <span class="sy0">.</span>
<a href="http://www.autohotkey.com/docs/Functions.htm#BuiltIn"><span class="kw4
">SubStr</span></a><span class="br0">(</span>ops<span class="sy0">,</span> b
( 4 * 3 * ( 7 - 5 )
4 * 5 + 7 - 3
5 * 4 + 7 - 3
5 * ( 7 - 3 ) + 4
3 3 9 2
2 * 9 + 3 + 3
3 * ( 2 + 3 ) + 9
3 * ( 2 + 9 - 3 )
3 * ( 3 + 2 ) + 9
3 * ( 9 - 2 ) + 3
3 * ( 9 + 2 - 3 )
9 * 2 + 3 + 3
3 2 7 9
3 * ( 7 - 2 ) + 9
(( 7 + 9 ) * 3 ) / 2
(( 9 + 7 ) * 3 ) / 2
7 1 5 3
7 6 9 4
(( 7 + 9 ) * 6 ) / 4
(( 9 + 7 ) * 6 ) / 4
3 5 3 1
( 1 * 3 * ( 3 + 5 )
( 1 * 3 * ( 5 + 3 )
( 3 * 1 * ( 3 + 5 )
( 3 * 1 * ( 5 + 3 )
(( 3 + 5 ) * 3 ) / 1
(( 5 + 3 ) * 3 ) / 1
</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=7" title="Edit section: Clojure">edit</a>]</span> <span cl
ass="mw-headline" id="Clojure"><a href="/wiki/Category:Clojure" title="Category:
Clojure">Clojure</a></span></h2>
<pre class="clojure highlighted_source"><span class="br0">(</span><span clas
s="kw1">ns</span> rosettacode<span class="sy0">.</span>24game<span class="sy0">.
</span>solve<br/> <span class="br0">(</span>:<span class="me1">require</spa
n> <span class="br0">[</span>clojure<span class="sy0">.</span>math<span clas
s="sy0">.</span>combinatorics :<span class="me1">as</span> c<span class="br
0">]</span><br/>
<span class="br0">[</span>clojure<span class
="sy0">.</span>walk :<span class="me1">as</span> w<span class="br0">]</
span><span class="br0">)</span><span class="br0">)</span><br/> <br/
><span class="br0">(</span><span class="kw1">def</span> <span class="sy0">^<
/span>:<span class="me1">private</span> op<span class="sy0">-</span>maps<br/> <
span class="br0">(</span><span class="kw1">map</span> #<span class="br0">
0;</span><span class="kw1">zipmap</span> <span class="br0">[</span>:<span cl
ass="me1">o1</span> :<span class="me1">o2</span> :<span class="me1">o3
</span><span class="br0">]</span> <span class="sy0">%</span><span class="br0
">)</span> <span class="br0">(</span>c<span class="sy0">/</span>selectio
ns '<span class="br0">(</span><span class="sy0">*</span> <span class="sy0">+
</span> <span class="sy0">-</span> <span class="sy0">/</span><span class="br0">&
#41;</span> <span class="nu0">3</span><span class="br0">)</span><span class=
"br0">)</span><span class="br0">)</span><br/> <br/><span class="br0
">(</span><span class="kw1">def</span> <span class="sy0">^</span>:<span clas
s="me1">private</span> patterns '<span class="br0">(</span><br/> <span clas
s="br0">(</span>:<span class="me1">o1</span> <span class="br0">(</span>:
<span class="me1">o2</span> :<span class="me1">n1</span> :<span class=
"me1">n2</span><span class="br0">)</span> <span class="br0">(</span>:<sp
an class="me1">o3</span> :<span class="me1">n3</span> :<span class="me
1">n4</span><span class="br0">)</span><span class="br0">)</span><br/> <
span class="br0">(</span>:<span class="me1">o1</span> :<span class="me1
">n1</span> <span class="br0">(</span>:<span class="me1">o2</span> :<sp
DO<br/>
FOR K=1 TO 4 DO<br/>
FOR L=1 TO 4 DO<br/>
&#
160;! valid permutation (no dupes)<br/>
IF I<>J AND I<&g
t;K AND I<>L AND J<>K AND J<>L AND K<>L THEN<br/>
N=N+1<br/>! actually,we can as well permute given digits<br/>
PERM[N,1]=D[I]<br/>
PERM[N,2]=D[J]<br/>
PERM[N,3]=D[K]<br/>
PERM[N,4]=D[L]<br/>
END IF<br/>
END FOR<br/>
END FOR<br/>
END FOR<br/>
END FOR<br/> <br/>  ! operations: full search<br/> COUNT=0<br/>
OPS$="+-*/"<br/> FOR OP1=1 TO 4 DO<br/>
OP$[1]=MID$(OPS$,OP1,
1)<br/>
FOR OP2=1 TO 4 DO<br/>
OP$[2]=MID$(OPS$,OP2,1)<br/>
F
OR OP3=1 TO 4 DO<br/>
OP$[3]=MID$(OPS$,OP3,1)<br/>
 !
substitute all brackets<br/>
FOR T=1 TO NBRACKETS DO<br/>
TMPL$=BRAKETS$[T]<br/>
 ! now,substitute all digits: perm
utations.<br/>
FOR P=1 TO NPERM DO<br/>
RES$=&
quot;"<br/>
NOP=0<br/>
ND=0<br/>
FOR I=1 TO LEN(TMPL$) DO<br/>
C$=MID$(TMPL
$,I,1)<br/>
CASE C$ OF<br/>
"
#"->
 ! operations<br/>
NO
P=NOP+1<br/>
RES$=RES$+OP$[NOP]<br/>
END -><br/>
"4"->
&#
160;! digits<br/>
ND=NOP+1<br/>
RES$=RES$+MID$(STR$(PERM[P,ND]),2)<br/>
END -><b
r/>
OTHERWISE
 ! brackets goes here<br/>
RES$=RES$+C$<br/>
END CASE<br/>
END FOR<br/>
 ! eval here<br/>
MY_EVAL(RES$,DB#,NERR->DB#,NERR)<br/>
IF DB#=
24 AND NERR=0 THEN<br/>
PRINT("24=";RES$)<br/>
COUNT=COUNT+1<br/>
END IF<br/>
END FOR<br/>
END FOR<br/>
END FOR<br/>
END FOR<br
/>
END FOR<br/> <br/>
IF COUNT=0 THEN<br/>
PRINT("If you s
ee this, probably task cannot be solved with these digits")<br/>
ELSE<b
r/>
PRINT("Total=";COUNT)<br/>
END IF<br/> <br/>END PROG
RAM<br/> </pre>
<div>
<dl><dt>Output:</div>
</dt></dl>
<pre>
ENTER 4 DIGITS: ? 6759
24=6+(7-5)*9
24=6+((7-5)*9)
24=6+9*(7-5)
24=6+(9*(7-5))
24=6-(5-7)*9
24=6-((5-7)*9)
24=(7-5)*9+6
24=((7-5)*9)+6
24=6-9*(5-7)
24=6-(9*(5-7))
24=9*(7-5)+6
24=(9*(7-5))+6
Total= 12
</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=12" title="Edit section: Euler Math Toolbox">edit</a>]</sp
an> <span class="mw-headline" id="Euler_Math_Toolbox"><a href="/wiki/Category:Eu
ler_Math_Toolbox" title="Category:Euler Math Toolbox">Euler Math Toolbox</a></sp
an></h2>
<p>Via brute force.
</p>
<pre class="text highlighted_source"> <br/>>function try24 (v) ...<br/>$
60;: no solution.'</span><br/>
<span class="kw1">exit</span> permutations
<br/>
<span class="kw1">end</span> <span class="kw1">if</span><br/>
<spa
n class="kw1">end</span> <span class="kw1">do</span> permutations<br/> <br/
> <span class="kw1">end</span> <span class="kw1">do</span><br/> <br/><span
class="co1">contains</span><br/> <br/> pure <span class="kw3">real</span>
<span class="kw1">function</span> op<span class="br0">(</span>x,c,y<span cl
ass="br0">)</span><br/>
<span class="kw3">integer</span>, <span class="kw
3">intent</span><span class="br0">(</span><span class="kw3">in</span><span c
lass="br0">)</span> <span class="sy0">::</span> <span class="me2">c</span><b
r/>
<span class="kw3">real</span>, <span class="kw3">intent</span><span class
="br0">(</span><span class="kw3">in</span><span class="br0">)</span>
<span class="sy0">::</span> <span class="me2">x</span>,y<br/>
<span class="kw
1">select</span> <span class="kw1">case</span> <span class="br0">(</span> op
s<span class="br0">(</span>c<span class="br0">)</span> <span class="br0"
>)</span><br/>
<span class="kw1">case</span> <span class="br0">(</s
pan><span class="st0">'+'</span><span class="br0">)</span><br/>
op <s
pan class="sy0">=</span> x<span class="sy0">+</span>y<br/>
<span class="kw1
">case</span> <span class="br0">(</span><span class="st0">'-'</span><span cl
ass="br0">)</span><br/>
op <span class="sy0">=</span> x<span class="s
y0">-</span>y<br/>
<span class="kw1">case</span> <span class="br0">(</s
pan><span class="st0">'*'</span><span class="br0">)</span><br/>
op <s
pan class="sy0">=</span> x<span class="sy0">*</span>y<br/>
<span class="kw1
">case</span> <span class="br0">(</span><span class="st0">'/'</span><span cl
ass="br0">)</span><br/>
op <span class="sy0">=</span> x<span class="s
y0">/</span>y<br/>
<span class="kw1">end</span> <span class="kw1">select</spa
n><br/> <span class="kw1">end</span> <span class="kw1">function</span> op<br/>&
#160;<br/><span class="kw1">end</span> <span class="kw1">program</span> solve_24
</pre>
<pre class="fortran highlighted_source"><span class="kw1">module</span> helpers<
br/> <br/><span class="co1">contains</span><br/> <br/> pure <span cla
ss="kw1">subroutine</span> Insertion_Sort<span class="br0">(</span>a<span cl
ass="br0">)</span><br/>
<span class="kw3">integer</span>, <span class="kw
3">intent</span><span class="br0">(</span><span class="kw3">inout</span><spa
n class="br0">)</span> <span class="sy0">::</span> <span class="me2">a</span
><span class="br0">(</span><span class="sy0">:</span><span class="br0">)
</span><br/>
<span class="kw3">integer</span>
<span class="sy0
">::</span> <span class="me2">temp</span>, i, j<br/>
<span class="kw1">do</sp
an> i<span class="sy0">=</span><span class="nu0">2</span>,<span class="kw4">size
</span><span class="br0">(</span>a<span class="br0">)</span><br/>
j
<span class="sy0">=</span> i<span class="sy0">-</span><span class="nu0">1</span
><br/>
temp <span class="sy0">=</span> a<span class="br0">(</span>i<spa
n class="br0">)</span><br/>
<span class="kw1">do</span> <span class="kw
1">while</span> <span class="br0">(</span> j><span class="sy0">=</span><s
pan class="nu0">1</span> <span class="kw2">.<span class="me1">and</span>.</span>
a<span class="br0">(</span>j<span class="br0">)</span>>temp <span cl
ass="br0">)</span><br/>
a<span class="br0">(</span>j<span class="
sy0">+</span><span class="nu0">1</span><span class="br0">)</span> <span clas
s="sy0">=</span> a<span class="br0">(</span>j<span class="br0">)</span><
br/>
j <span class="sy0">=</span> j <span class="sy0">-</span> <span clas
s="nu0">1</span><br/>
<span class="kw1">end</span> <span class="kw1">do</sp
an><br/>
a<span class="br0">(</span>j<span class="sy0">+</span><span cl
ass="nu0">1</span><span class="br0">)</span> <span class="sy0">=</span> temp
<br/>
<span class="kw1">end</span> <span class="kw1">do</span><br/> <span cl
ass="kw1">end</span> <span class="kw1">subroutine</span> Insertion_Sort<br/>
0;<br/> <span class="kw1">subroutine</span> nextpermutation<span class="br0">&#
40;</span>perm,last<span class="br0">)</span><br/>
<span class="kw3">inte
ger</span>, <span class="kw3">intent</span><span class="br0">(</span><span c
lass="kw3">inout</span><span class="br0">)</span> <span class="sy0">::</span
> <span class="me2">perm</span><span class="br0">(</span><span class="sy0">:
</span><span class="br0">)</span><br/>
<span class="kw3">logical</span>,
ap<br/> <br/>
<span class="kw1">subroutine</span> reverse<span class="br
0">(</span>k<span class="br0">)</span><br/>
<span class="kw3">integ
er</span>, <span class="kw3">intent</span><span class="br0">(</span><span cl
ass="kw3">in</span><span class="br0">)</span> <span class="sy0">::</span> <s
pan class="me2">k</span><br/>
<span class="kw3">integer</span>
<span class="sy0">::</span> <span class="me2">i</span><br/>
<span class="kw
1">do</span> i<span class="sy0">=</span><span class="nu0">1</span>,<span class="
br0">(</span><span class="kw4">size</span><span class="br0">(</span>perm
<span class="br0">)</span><span class="sy0">-</span>k<span class="br0">)
</span><span class="sy0">/</span><span class="nu0">2</span><br/>
<span cl
ass="kw1">call</span> swap<span class="br0">(</span>k<span class="sy0">+</sp
an>i,<span class="kw4">size</span><span class="br0">(</span>perm<span class=
"br0">)</span><span class="sy0">+</span><span class="nu0">1</span><span clas
s="sy0">-</span>i<span class="br0">)</span><br/>
<span class="kw1">end<
/span> <span class="kw1">do</span><br/>
<span class="kw1">end</span> <span cl
ass="kw1">subroutine</span> reverse<br/> <br/> <span class="kw1">end</span
> <span class="kw1">subroutine</span> nextpermutation<br/> <br/><span class
="kw1">end</span> <span class="kw1">module</span> helpers</pre>
<div>
<dl><dt>Output:</div> (using g95):
</dt></dl>
<pre> 3 6 7 9  : 3 *(( 6 - 7 )+ 9 )
3 9 5 8  : (( 3 * 9 )+ 5 )- 8
4 5 6 9  : (( 4 + 5 )+ 6 )+ 9
2 9 9 8  : ( 2 +( 9 / 9 ))* 8
1 4 7 5  : ( 1 +( 4 * 7 ))- 5
8 7 7 6  : no solution.
3 3 8 9  : ( 3 *( 3 + 8 ))- 9
1 5 6 7  : ( 1 +( 5 * 6 ))- 7
2 3 5 3  : 2 *(( 3 * 5 )- 3 )
4 5 6 9  : (( 4 + 5 )+ 6 )+ 9
1 1 3 6  : ( 1 +( 1 * 3 ))* 6
2 4 6 8  : (( 2 / 4 )* 6 )* 8
</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=15" title="Edit section: GAP">edit</a>]</span> <span class
="mw-headline" id="GAP"><a href="/wiki/Category:GAP" title="Category:GAP">GAP</a
></span></h2>
<pre class="text highlighted_source"># Solution in '''RPN'''<br/>check := f
unction(x, y, z)<br/> local r, c, s, i, j, k, a, b, p;<br/> i := 0;<br/
>
j := 0;<br/>
k := 0;<br/>
s := [ ];<br/>
r := "";<br/>
for c in z do<br/>
if c = 'x' then<
br/>
i := i + 1;<br/>
k := k + 1;
<br/>
s[k] := x[i];<br/>
Append(r, String
(x[i]));<br/>
else<br/>
j := j + 1;<br/>
b := s[k];<br/>
k := k - 1;<br/>
a := s[k];<br/>
p := y[j];<br/>
r[Size(r) + 1] := p;<br/>
if p = '+' then<br/>
a := a + b;<br/>
elif p = '-' then<br/>
a := a - b;<br/>
elif p = '*' then<br/>
a := a * b;<br/>
elif p = '/' then<br/>
if b = 0 then<br/>
continue;<br/>
else<br/>
a := a / b;<br/>
fi;<br/>
else<br/>
return f
ail;<br/>
fi;<br/>
s[k] := a;<
br/>
fi;<br/>
od;<br/>
if s[1] = 24 then<br/>
return r;<br/> else<br/>
return fail;<br/>
fi;<br/>end;<br/
> <br/>Player24 := function(digits)<br/>
local u, v, w, x, y, z,
r;<br/> u := PermutationsList(digits);<br/>
v := Tuples("+
-*/", 3);<br/>
w := ["xx*x*x*", "xx*xx**", &qu
/span><br/>
f<span class="sy3">.</span>num <span class="sy2">=</span
> l<span class="sy3">.</span>num <span class="sy3">*</span> r<span class="sy3">.
</span>denom<br/>
f<span class="sy3">.</span>denom <span class="sy
2">=</span> l<span class="sy3">.</span>denom <span class="sy3">*</span> r<span c
lass="sy3">.</span>num<br/>
<span class="kw1">return</span><br/>
<span class="sy1">}</span><br/> <span class="kw1">return</span><br/><span class=
"sy1">}</span><br/> <br/><span class="kw4">func</span> solve<span class="sy
1">(</span>ex_in <span class="sy1">[]</span><span class="sy3">*</span>Expr<span
class="sy1">)</span> <span class="kw4">bool</span> <span class="sy1">{</span><br
/>
<span class="co1">// only one expression left, meaning all numbers are a
rranged into</span><br/>
<span class="co1">// a binary tree, so evaluate
and see if we get 24</span><br/>
<span class="kw1">if</span> <span class=
"kw3">len</span><span class="sy1">(</span>ex_in<span class="sy1">)</span> <span
class="sy3">==</span> <span class="nu0">1</span> <span class="sy1">{</span><br/>
f <span class="sy2">:=</span> expr_eval<span class="sy1">(</span>ex_in<span clas
s="sy1">[</span><span class="nu0">0</span><span class="sy1">])</span><br/>
<span class="kw1">if</span> f<span class="sy3">.</span>denom <span class="sy2">!
=</span> <span class="nu0">0</span> && f<span class="sy3">.</span>num <s
pan class="sy3">==</span> f<span class="sy3">.</span>denom<span class="sy3">*</s
pan>goal <span class="sy1">{</span><br/>
fmt<span class="
sy3">.</span>Println<span class="sy1">(</span>ex_in<span class="sy1">[</span><sp
an class="nu0">0</span><span class="sy1">]</span><span class="sy3">.</span>Strin
g<span class="sy1">())</span><br/>
<span class="kw1">return
</span> <span class="kw2">true</span><br/>
<span class="sy1">}</spa
n><br/>
<span class="kw1">return</span> <span class="kw2">false</span><b
r/>
<span class="sy1">}</span><br/> <br/>
<span class="kw1">var</s
pan> node Expr<br/>
ex <span class="sy2">:=</span> <span class="kw3">make</s
pan><span class="sy1">([]</span><span class="sy3">*</span>Expr<span class="sy1">
,</span> <span class="kw3">len</span><span class="sy1">(</span>ex_in<span class=
"sy1">)</span><span class="sy3">-</span><span class="nu0">1</span><span class="s
y1">)</span><br/> <br/>
<span class="co1">// try to combine a pair of ex
pressions into one, thus reduce</span><br/>
<span class="co1">// the list le
ngth by 1, and recurse down</span><br/> <span class="kw1">for</span> <span class
="nu2">i</span> <span class="sy2">:=</span> <span class="kw1">range</span> ex <s
pan class="sy1">{</span><br/>
<span class="kw3">copy</span><span class
="sy1">(</span>ex<span class="sy1">[</span><span class="nu2">i</span><span class
="sy1">:</span><span class="kw3">len</span><span class="sy1">(</span>ex<span cla
ss="sy1">)],</span> ex_in<span class="sy1">[</span><span class="nu2">i</span><sp
an class="sy3">+</span><span class="nu0">1</span><span class="sy1">:</span><span
class="kw3">len</span><span class="sy1">(</span>ex_in<span class="sy1">)])</spa
n><br/> <br/>
ex<span class="sy1">[</span><span class="nu2">i<
/span><span class="sy1">]</span> <span class="sy2">=</span> &node<br/>
<span class="kw1">for</span> j <span class="sy2">:=</span> <span class="nu2">i</
span> <span class="sy3">+</span> <span class="nu0">1</span><span class="sy1">;</
span> j < <span class="kw3">len</span><span class="sy1">(</span>ex_in<span cl
ass="sy1">);</span> j<span class="sy2">++</span> <span class="sy1">{</span><br/>
node<span class="sy3">.</span>left <span class="sy2">=</span> ex_in<span class="
sy1">[</span><span class="nu2">i</span><span class="sy1">]</span><br/>
node<span class="sy3">.</span>right <span class="sy2">=</span> ex_in<span class=
"sy1">[</span>j<span class="sy1">]</span><br/> <br/>
<span class="co1">// try all 4 operators</span><br/>
<span cl
ass="kw1">for</span> o <span class="sy2">:=</span> op_add<span class="sy1">;</sp
an> o <<span class="sy2">=</span> op_div<span class="sy1">;</span> o<span cla
ss="sy2">++</span> <span class="sy1">{</span><br/>
node<span class="sy3">.</span>op <span class="sy2">=</span> o<br/>
<span class="kw1">if</span> solve<span class="sy1">(</span>ex<span class="sy1">)
</span> <span class="sy1">{</span><br/>
<span cl
ass="kw1">return</span> <span class="kw2">true</span><br/>
<span class="sy1">}</span><br/>
<span class="sy1">}</span><br/>&
#160;<br/>
<span class="co1">// also - and / are not commut
</dt></dl>
<pre> 8 6 7 6: No solution
7 2 6 6: (7 - 2) * 6 - 6
4 8 7 3: 4 * (7 - 3) + 8
3 8 8 7: 3 * 8 * (8 - 7)
5 7 3 7: No solution
5 7 8 3: 5 * 7 - 8 - 3
3 6 5 2: ((3 + 5) * 6) / 2
8 4 5 4: (8 - 4) * 5 + 4
2 2 8 8: (2 + 2) * 8 - 8
6 8 8 2: 6 + 8 + 8 + 2
</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=17" title="Edit section: Gosu">edit</a>]</span> <span clas
s="mw-headline" id="Gosu"><a href="/wiki/Category:Gosu" title="Category:Gosu">Go
su</a></span></h2>
<pre class="text highlighted_source"> <br/>uses java.lang.Integer<br/>uses
java.lang.Double<br/>uses java.lang.System<br/>uses java.util.ArrayList<br/>uses
java.util.LinkedList<br/>uses java.util.List<br/>uses java.util.Scanner<br/>use
s java.util.Stack<br/> <br/>function permutations<T>( lst : List
<T> ) : List<List<T>> {<br/>
if( lst.size() == 0 ) ret
urn {}<br/>
if( lst.size() == 1 ) return { lst }<br/> <br/>
var pivot
= lst.get(lst.size()-1)<br/> <br/>
var sublist = new ArrayList<T>
( lst )<br/>
sublist.remove( sublist.size() - 1 )<br/> <br/>
var subP
erms = permutations( sublist )<br/> <br/>
var ret = new ArrayList<Lis
t<T>>()<br/>
for( x in subPerms ) {<br/>
for( e in x index i
) {<br/>
var next = new LinkedList<T>( x )<br/>
next
.add( i, pivot )<br/>
ret.add( next )<br/>
}<br/>
x.add
( pivot )<br/>
ret.add( x )<br/>
}<br/>
return ret<br/>}<br/> 
<br/>function readVals() : List<Integer> {<br/>
var line = new jav
a.io.BufferedReader( new java.io.InputStreamReader( System.in ) ).readLine()<br/
>
var scan = new Scanner( line )<br/> <br/>
var ret = new ArrayList&l
t;Integer>()<br/>
for( i in 0..3 ) {<br/>
var next = scan.nextInt()
<br/>
if( 0 >= next || next >= 10 ) {<br/>
print( "
;Invalid entry: ${next}" )<br/>
return null<br/>
}<br/>
ret.add( next )<br/>
}<br/>
return ret<br/>}<br/> <br/>function
getOp( i : int ) : char[] {<br/>
var ret = new char[3]<br/>
var
ops = { '+', '-', '*', '/' }<br/>
ret[0] = ops[i / 16]<br/>
ret[1] = ops[
(i / 4) % 4 ]<br/>
ret[2] = ops[i % 4 ]<br/>
return ret<br/>}<br
/> <br/>function isSoln( nums : List<Integer>, ops : char[]
) : boolean {<br/>
var stk = new Stack<Double>()<br/>
for( n i
n nums ) {<br/>
stk.push( n )<br/>
}<br/> <br/>
for( c in ops
) {<br/>
var r = stk.pop().doubleValue()<br/>
var l = stk.pop().do
ubleValue()<br/>
if( c == '+' ) {<br/>
stk.push( l + r )<br/>
} else if( c == '-' ) {<br/>
stk.push( l - r )<br/>
} e
lse if( c == '*' ) {<br/>
stk.push( l * r )<br/>
} else if( c
== '/' ) {<br/>
// Avoid division by 0<br/>
if( r == 0.0 )
{<br/>
return false<br/>
}<br/>
stk.push(
l / r )<br/>
}<br/>
}<br/> <br/>
return java.lang.Math.abs( st
k.pop().doubleValue() - 24.0 ) < 0.001<br/>}<br/> <br/>function printSol
n( nums : List<Integer>, ops : char[] ) {<br/>
// RPN: a b c
d + - *<br/>
// Infix (a * (b - (c + d)))<br/>
print( "Found soln: ($
{nums.get(0)} ${ops[0]} (${nums.get(1)} ${ops[1]} (${nums.get(2)} ${ops[2]} ${nu
ms.get(3)})))" )<br/>}<br/> <br/>System.out.print( "#> "
)<br/>var vals = readVals()<br/> <br/>var opPerms = 0..63<br/>var solnFound
= false<br/> <br/>for( i in permutations( vals ) ) {<br/>
for( j in opP
erms ) {<br/>
var opList = getOp( j )<br/>
if( isSoln( i, opList )
) {<br/>
printSoln( i, opList )<br/>
solnFound = true<br/
>
}<br/>
}<br/>}<br/> <br/>if( ! solnFound ) {<br/>
print
( "No solution!" )<br/>}<br/> </pre>
<a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:f
ilter"><span class="kw3">filter</span></a> <span class="br0">(</span><a href
="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:maybe"><
span class="kw3">maybe</span></a> False <span class="br0">(</span><span clas
s="sy0">==</span> target<span class="br0">)</span> <span class="sy0">.</span
> eval<span class="br0">)</span> <span class="sy0">$</span><br/>
liftM2 <
span class="br0">(</span><span class="sy0">$</span><span class="br0">)</
span> templates <span class="sy0">$</span><br/>
nub <span class="sy0">$</span
> permutations <span class="sy0">$</span> <a href="http://haskell.org/ghc/docs/l
atest/html/libraries/base/Prelude.html#v:map"><span class="kw3">map</span></a> C
onstant r4 <br/> <br/>main <span class="sy0">=</span> getArgs <span class="
sy0">>>=</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries
/base/Prelude.html#v:mapM_"><span class="kw3">mapM_</span></a> <a href="http://h
askell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:print"><span class
="kw3">print</span></a> <span class="sy0">.</span> solve <span class="nu0">24</s
pan> <span class="sy0">.</span> <a href="http://haskell.org/ghc/docs/latest/html
/libraries/base/Prelude.html#v:map"><span class="kw3">map</span></a> <span class
="br0">(</span><a href="http://haskell.org/ghc/docs/latest/html/libraries/ba
se/Prelude.html#v:toEnum"><span class="kw3">toEnum</span></a> <span class="sy0">
.</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude
.html#v:read"><span class="kw3">read</span></a><span class="br0">)</span></p
re>
<p>Example use:
</p>
<pre>$ runghc 24Player.hs 2 3 8 9
(8 * (9 - (3 * 2)))
(8 * (9 - (2 * 3)))
((9 - (2 * 3)) * 8)
((9 - (3 * 2)) * 8)
((9 - 3) * (8 / 2))
((8 / 2) * (9 - 3))
(8 * ((9 - 3) / 2))
(((9 - 3) / 2) * 8)
((9 - 3) / (2 / 8))
((8 * (9 - 3)) / 2)
(((9 - 3) * 8) / 2)
(8 / (2 / (9 - 3)))</pre>
<h3><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=19" title="Edit section: Alternative version">edit</a>]</s
pan> <span class="mw-headline" id="Alternative_version">Alternative version</spa
n></h3>
<pre class="haskell highlighted_source"><span class="kw1">import</span> Control<
span class="sy0">.</span>Applicative<br/><span class="kw1">import</span> Data<sp
an class="sy0">.</span>List<br/><span class="kw1">import</span> Text<span class=
"sy0">.</span>PrettyPrint<br/> <br/> <br/><span class="kw1">data</span
> Expr <span class="sy0">=</span> C <a href="http://haskell.org/ghc/docs/latest/
html/libraries/base/Prelude.html#t:Int"><span class="kw4">Int</span></a> <span c
lass="sy0">|</span> Op <a href="http://haskell.org/ghc/docs/latest/html/librarie
s/base/Prelude.html#t:String"><span class="kw4">String</span></a> Expr Expr<br/>
 <br/>toDoc <span class="br0">(</span>C
x <span class="br0">)<
/span> <span class="sy0">=</span> int x<br/>toDoc <span class="br0">(</span>
Op op x y<span class="br0">)</span> <span class="sy0">=</span> parens <span
class="sy0">$</span> toDoc x <span class="sy0"><+></span> text op <span cl
ass="sy0"><+></span> toDoc y<br/> <br/>ops <span class="sy0">::</span
> <span class="br0">[</span><span class="br0">(</span><a href="http://ha
skell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:String"><span class
="kw4">String</span></a><span class="sy0">,</span> <a href="http://haskell.org/g
hc/docs/latest/html/libraries/base/Prelude.html#t:Int"><span class="kw4">Int</sp
an></a> <span class="sy0">-></span> <a href="http://haskell.org/ghc/docs/late
st/html/libraries/base/Prelude.html#t:Int"><span class="kw4">Int</span></a> <spa
s="br0">[</span><a href="http://haskell.org/ghc/docs/latest/html/libraries/b
ase/Prelude.html#t:Int"><span class="kw4">Int</span></a><span class="br0">]<
/span><span class="br0">]</span><br/>select <span class="nu0">0</span> <span
class="sy0">_</span> <span class="sy0">=</span> <span class="br0">[</span>
<span class="br0">[</span><span class="br0">]</span><span class="br0">&#
93;</span><br/>select n xs <span class="sy0">=</span> <span class="br0">[</s
pan>x:zs <span class="sy0">|</span> k <span class="sy0"><-</span> <span class
="br0">[</span><span class="nu0">0</span><span class="sy0">..</span><a href=
"http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:length"><
span class="kw3">length</span></a> xs <span class="sy0">-</span> n<span class="b
r0">]</span><br/>
<span class="sy0">,</span> <span class=
"kw1">let</span> <span class="br0">(</span>x:ys<span class="br0">)</span
> <span class="sy0">=</span> <a href="http://haskell.org/ghc/docs/latest/html/li
braries/base/Prelude.html#v:drop"><span class="kw3">drop</span></a> k xs<br/>
<span class="sy0">,</span> zs <span class="sy0"><-</span> se
lect <span class="br0">(</span>n <span class="sy0">-</span> <span class="nu0
">1</span><span class="br0">)</span> ys<br/>
<span class=
"br0">]</span><br/> <br/>split <span class="sy0">::</span> <span class=
"br0">[</span><a href="http://haskell.org/ghc/docs/latest/html/libraries/bas
e/Prelude.html#t:Int"><span class="kw4">Int</span></a><span class="br0">]</s
pan> <span class="sy0">-></span> <span class="br0">[</span><span class="b
r0">(</span><span class="br0">[</span><a href="http://haskell.org/ghc/do
cs/latest/html/libraries/base/Prelude.html#t:Int"><span class="kw4">Int</span></
a><span class="br0">]</span><span class="sy0">,</span><span class="br0">[
;</span><a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.
html#t:Int"><span class="kw4">Int</span></a><span class="br0">]</span><span
class="br0">)</span><span class="br0">]</span><br/>split xs <span class=
"sy0">=</span> <span class="br0">[</span><span class="br0">(</span>ys<sp
an class="sy0">,</span> xs \\ ys<span class="br0">)</span> <span class="sy0"
>|</span> n <span class="sy0"><-</span> <span class="br0">[</span><span c
lass="nu0">1</span><span class="sy0">..</span><a href="http://haskell.org/ghc/do
cs/latest/html/libraries/base/Prelude.html#v:length"><span class="kw3">length</s
pan></a> xs <span class="sy0">-</span> <span class="nu0">1</span><span class="br
0">]</span><br/>
<span class="sy0">,</span> ys <sp
an class="sy0"><-</span> nub <span class="sy0">.</span> sort <span class="sy0
">$</span> select n xs<br/>
<span class="br0">]</s
pan><br/> <br/> <br/>main <span class="sy0">=</span> <a href="http://h
askell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:mapM_"><span class
="kw3">mapM_</span></a> <span class="br0">(</span><a href="http://haskell.or
g/ghc/docs/latest/html/libraries/base/Prelude.html#v:putStrLn"><span class="kw3"
>putStrLn</span></a> <span class="sy0">.</span> render <span class="sy0">.</span
> toDoc<span class="br0">)</span> <span class="sy0">$</span> solve <span cla
ss="nu0">24</span> <span class="br0">[</span><span class="nu0">2</span><span
class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span c
lass="nu0">8</span><span class="sy0">,</span><span class="nu0">9</span><span cla
ss="br0">]</span></pre>
<div>
<dl><dt>Output:</div>
</dt></dl>
<pre>((8 / 2) * (9 - 3))
((2 / 9) + (3 * 8))
((3 * 8) - (2 / 9))
((8 - (2 / 9)) * 3)
(((2 / 9) + 8) * 3)
(((8 + 9) / 2) * 3)
((2 + (8 * 9)) / 3)
((3 - (2 / 9)) * 8)
((9 - (2 * 3)) * 8)
(((2 / 9) + 3) * 8)
(((2 + 9) / 3) * 8)
(((9 - 3) / 2) * 8)
(((9 - 3) * 8) / 2)</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=20" title="Edit section: Icon and Unicon">edit</a>]</span>
<span class="mw-headline" id="Icon_and_Unicon"> <a href="/wiki/Category:Icon" t
itle="Category:Icon">Icon</a> and <a href="/wiki/Category:Unicon" title="Categor
y:Unicon">Unicon</a> </span></h2>
<p>This shares code with and solves the <a href="/wiki/24_game#Icon_and_Unicon"
title="24 game">24 game</a>. A series of pattern expressions are built up and th
en populated with the permutations of the selected digits. Equations are skipped
if they have been seen before. The procedure 'eval' was modified to catch zero
divides. The solution will find either all occurrences or just the first occurre
nce of a solution.
</p>
<pre class="icon highlighted_source"><span class="kw1">invocable</span> all <br/
><span class="kw1">link</span> strings <span class="co1"># for csort, deletec,
permutes</span><br/> <br/><span class="kw1">procedure</span> main<span cla
ss="br0">(</span><span class="br0">)</span><br/><span class="kw2">static
</span> eL<br/><span class="kw1">initial</span> <span class="br0">{</span><
br/> eoP <span class="sy1">:=</span> <span class="br0">[</span><span class
="br0">]</span> <span class="co1"># set-up expression and operator permutat
ion patterns</span><br/> <span class="kw1">every</span> <span class="br0">(
;</span> e <span class="sy1">:=</span> <span class="sy1">!</span><span class="br
0">[</span><span class="st0">"a@b#c$d"</span><span class="sy1">,</
span> <span class="st0">"a@(b#c)$d"</span><span class="sy1">,</span> <
span class="st0">"a@b#(c$d)"</span><span class="sy1">,</span> <span cl
ass="st0">"a@(b#c$d)"</span><span class="sy1">,</span> <span class="st
0">"a@(b#(c$d))"</span><span class="br0">]</span> <span class="br0
">)</span> <span class="sy1">&</span> <br/>
<span class="br0">&#
40;</span> o <span class="sy1">:=</span> <span class="sy1">!</span><span class="
br0">(</span>opers <span class="sy1">:=</span> <span class="st0">"+-*/&
quot;</span><span class="br0">)</span> <span class="sy1">||</span> <span cla
ss="sy1">!</span>opers <span class="sy1">||</span> <span class="sy1">!</span>ope
rs <span class="br0">)</span> <span class="kw1">do</span><br/>
<span cl
ass="kw4">put</span><span class="br0">(</span> eoP<span class="sy1">,</span>
<span class="kw4">map</span><span class="br0">(</span>e<span class="sy1">,<
/span><span class="st0">"@#$"</span><span class="sy1">,</span>o<span c
lass="br0">)</span> <span class="br0">)</span>
<span class="co1"># ex
pr+oper perms</span><br/> <br/> eL <span class="sy1">:=</span> <span clas
s="br0">[</span><span class="br0">]</span> <span class="co1"># all cas
es</span><br/> <span class="kw1">every</span> <span class="br0">(</span> e
<span class="sy1">:=</span> <span class="sy1">!</span>eoP <span class="br0">
1;</span> <span class="sy1">&</span> <span class="br0">(</span> p <span
class="sy1">:=</span> permutes<span class="br0">(</span><span class="st0">&q
uot;wxyz"</span><span class="br0">)</span> <span class="br0">)</spa
n> <span class="kw1">do</span><br/>
<span class="kw4">put</span><span class
="br0">(</span>eL<span class="sy1">,</span> <span class="kw4">map</span><spa
n class="br0">(</span>e<span class="sy1">,</span><span class="st0">"abc
d"</span><span class="sy1">,</span>p<span class="br0">)</span><span cla
ss="br0">)</span><br/> <br/> <span class="br0">}</span><br/>
0;<br/><span class="kw4">write</span><span class="br0">(</span><span class="
st0">"This will attempt to find solutions to 24 for sets of numbers by<span
class="es0">\n</span>"</span><span class="sy1">,</span><br/>
<span cl
ass="st0">"combining 4 single digits between 1 and 9 to make 24 using only
+ - * / and ( ).<span class="es0">\n</span>"</span><span class="sy1">,</spa
n><br/>
<span class="st0">"All operations have equal precedence and ar
e evaluated left to right.<span class="es0">\n</span>"</span><span class="s
y1">,</span><br/>
<span class="st0">"Enter 'use n1 n2 n3 n4' or just h
it enter (to use a random set),"</span><span class="sy1">,</span><br/>
<span class="st0">"'first'/'all' shows the first or all solutions, 'quit'
llinurl%3Asystem+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3
">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span
><span class="br0">(</span><span class="st0">"(Enter 'q' to quit, 's' f
or a solution)"</span><span class="br0">)</span><span class="sy0">;</sp
an><br/>
<a href="http://www.google.com/search?hl=en&q=allinurl%3
Asystem+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System<
/span></a>.<span class="me1">out</span>.<span class="me1">print</span><span clas
s="br0">(</span><span class="st0">"> "</span><span class="br0">
)</span><span class="sy0">;</span><br/> <br/>
<a href="http:
//www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27
m%20Feeling%20Lucky"><span class="kw3">String</span></a> line <span class="sy0">
=</span> in.<span class="me1">nextLine</span><span class="br0">(</span><span
class="br0">)</span><span class="sy0">;</span><br/>
<span class=
"kw1">if</span> <span class="br0">(</span>line.<span class="me1">equalsIgnor
eCase</span><span class="br0">(</span><span class="st0">"q"</span>
<span class="br0">)</span><span class="br0">)</span> <span class="br0">&
#123;</span><br/>
<a href="http://www.google.com/search?hl=en&
;q=allinurl%3Asystem+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class=
"kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</
span><span class="br0">(</span><span class="st0">"<span class="es0">\n<
/span>Thanks for playing"</span><span class="br0">)</span><span class="
sy0">;</span><br/>
<span class="kw1">return</span><span class="sy
0">;</span><br/>
<span class="br0">}</span><br/> <br/>
<span class="kw1">if</span> <span class="br0">(</span>line.<span clas
s="me1">equalsIgnoreCase</span><span class="br0">(</span><span class="st0">&
quot;s"</span><span class="br0">)</span><span class="br0">)</span>
<span class="br0">{</span><br/>
<a href="http://www.google.c
om/search?hl=en&q=allinurl%3Asystem+java.sun.com&btnI=I%27m%20Feeling%20
Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span cl
ass="me1">println</span><span class="br0">(</span>solution<span class="br0">
)</span><span class="sy0">;</span><br/>
digits <span class="s
y0">=</span> getSolvableDigits<span class="br0">(</span><span class="br0">&#
41;</span><span class="sy0">;</span><br/>
<span class="kw1">conti
nue</span><span class="sy0">;</span><br/>
<span class="br0">}</s
pan><br/> <br/>
<span class="kw4">char</span><span class="br0">&
#91;</span><span class="br0">]</span> entry <span class="sy0">=</span> line.
<span class="me1">replaceAll</span><span class="br0">(</span><span class="st
0">"[^*+-/)(<span class="es0">\\</span>d]"</span>, <span class="st0">&
quot;"</span><span class="br0">)</span>.<span class="me1">toCharArray</
span><span class="br0">(</span><span class="br0">)</span><span class="sy
0">;</span><br/> <br/>
<span class="kw1">try</span> <span class=
"br0">{</span><br/>
validate<span class="br0">(</span>en
try<span class="br0">)</span><span class="sy0">;</span><br/> <br/>
<span class="kw1">if</span> <span class="br0">(</span>evaluate<sp
an class="br0">(</span>infixToPostfix<span class="br0">(</span>entry<spa
n class="br0">)</span><span class="br0">)</span><span class="br0">)<
/span> <span class="br0">{</span><br/>
<a href="http://w
ww.google.com/search?hl=en&q=allinurl%3Asystem+java.sun.com&btnI=I%27m%2
0Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</spa
n>.<span class="me1">println</span><span class="br0">(</span><span class="st
0">"<span class="es0">\n</span>Correct! Want to try another? "</span><
span class="br0">)</span><span class="sy0">;</span><br/>
digits <span class="sy0">=</span> getSolvableDigits<span class="br0">(</span
><span class="br0">)</span><span class="sy0">;</span><br/>
<s
pan class="br0">}</span> <span class="kw1">else</span> <span class="br0">&#
123;</span><br/>
<a href="http://www.google.com/search?hl=en&
amp;q=allinurl%3Asystem+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span cla
ss="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">printl
n</span><span class="br0">(</span><span class="st0">"<span class="es0">
\n</span>Not correct."</span><span class="br0">)</span><span class="sy0
">;</span><br/>
<span class="br0">}</span><br/> <br/>
<span class="br0">}</span> <span class="kw1">catch</span> <span c
lass="br0">(</span><a href="http://www.google.com/search?hl=en&q=allinur
l%3Aexception+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">E
xception</span></a> e<span class="br0">)</span> <span class="br0">{</sp
an><br/>
<a href="http://www.google.com/search?hl=en&q=allinu
rl%3Asystem+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Sys
tem</span></a>.<span class="me1">out</span>.<span class="me1">printf</span><span
class="br0">(</span><span class="st0">"%n%s Try again.%n"</span>,
e.<span class="me1">getMessage</span><span class="br0">(</span><span class=
"br0">)</span><span class="br0">)</span><span class="sy0">;</span><br/>
<span class="br0">}</span><br/>
<span class="br0">}<
/span><br/>
<span class="br0">}</span><br/> <br/>
<span class="k
w4">void</span> validate<span class="br0">(</span><span class="kw4">char</sp
an><span class="br0">[</span><span class="br0">]</span> input<span class
="br0">)</span> <span class="kw1">throws</span> <a href="http://www.google.c
om/search?hl=en&q=allinurl%3Aexception+java.sun.com&btnI=I%27m%20Feeling
%20Lucky"><span class="kw3">Exception</span></a> <span class="br0">{</span>
<br/>
<span class="kw4">int</span> total1 <span class="sy0">=</span> <spa
n class="nu0">0</span>, parens <span class="sy0">=</span> <span class="nu0">0</s
pan>, opsCount <span class="sy0">=</span> <span class="nu0">0</span><span class=
"sy0">;</span><br/> <br/>
<span class="kw1">for</span> <span class="
br0">(</span><span class="kw4">char</span> c <span class="sy0">:</span> inpu
t<span class="br0">)</span> <span class="br0">{</span><br/>
<span class="kw1">if</span> <span class="br0">(</span><a href="http://www.go
ogle.com/search?hl=en&q=allinurl%3Acharacter+java.sun.com&btnI=I%27m%20F
eeling%20Lucky"><span class="kw3">Character</span></a>.<span class="me1">isDigit
</span><span class="br0">(</span>c<span class="br0">)</span><span class=
"br0">)</span><br/>
total1 <span class="sy0">+=</span> <span
class="nu0">1</span> <span class="sy0"><<</span> <span class="br0">(</
span>c <span class="sy0">-</span> <span class="st0">'0'</span><span class="br0">
)</span> <span class="sy0">*</span> <span class="nu0">4</span><span class="s
y0">;</span><br/>
<span class="kw1">else</span> <span class="kw1">if<
/span> <span class="br0">(</span>c <span class="sy0">==</span> <span class="
st0">'('</span><span class="br0">)</span><br/>
parens<span cl
ass="sy0">++;</span><br/>
<span class="kw1">else</span> <span class="
kw1">if</span> <span class="br0">(</span>c <span class="sy0">==</span> <span
class="st0">')'</span><span class="br0">)</span><br/>
parens
<span class="sy0">--;</span><br/>
<span class="kw1">else</span> <span
class="kw1">if</span> <span class="br0">(</span>ops.<span class="me1">index
Of</span><span class="br0">(</span>c<span class="br0">)</span> <span cla
ss="sy0">!=</span> <span class="sy0">-</span><span class="nu0">1</span><span cla
ss="br0">)</span><br/>
opsCount<span class="sy0">++;</span><b
r/>
<span class="kw1">if</span> <span class="br0">(</span>parens
<span class="sy0"><</span> <span class="nu0">0</span><span class="br0">)<
/span><br/>
<span class="kw1">throw</span> <span class="kw1">new<
/span> <a href="http://www.google.com/search?hl=en&q=allinurl%3Aexception+ja
va.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span><
/a><span class="br0">(</span><span class="st0">"Parentheses mismatch.&q
uot;</span><span class="br0">)</span><span class="sy0">;</span><br/>
<span class="br0">}</span><br/> <br/>
<span class="kw1">if</spa
n> <span class="br0">(</span>parens <span class="sy0">!=</span> <span class=
"nu0">0</span><span class="br0">)</span><br/>
<span class="kw1">t
hrow</span> <span class="kw1">new</span> <a href="http://www.google.com/search?h
l=en&q=allinurl%3Aexception+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><
span class="kw3">Exception</span></a><span class="br0">(</span><span class="
st0">"Parentheses mismatch."</span><span class="br0">)</span><span
class="sy0">;</span><br/> <br/>
<span class="kw1">if</span> <span c
lass="br0">(</span>opsCount <span class="sy0">!=</span> <span class="nu0">3<
/span><span class="br0">)</span><br/>
<span class="kw1">throw</sp
>
<span class="kw4">float</span> applyOperator<span class="br0">(</span><
span class="kw4">float</span> a, <span class="kw4">float</span> b, <span class="
kw4">char</span> c<span class="br0">)</span> <span class="br0">{</span>
<br/>
<span class="kw1">switch</span> <span class="br0">(</span>c<spa
n class="br0">)</span> <span class="br0">{</span><br/>
<span
class="kw1">case</span> <span class="st0">'+'</span><span class="sy0">:</span><
br/>
<span class="kw1">return</span> a <span class="sy0">+</span>
b<span class="sy0">;</span><br/>
<span class="kw1">case</span> <span
class="st0">'-'</span><span class="sy0">:</span><br/>
<span clas
s="kw1">return</span> b <span class="sy0">-</span> a<span class="sy0">;</span><b
r/>
<span class="kw1">case</span> <span class="st0">'*'</span><span c
lass="sy0">:</span><br/>
<span class="kw1">return</span> a <span
class="sy0">*</span> b<span class="sy0">;</span><br/>
<span class="kw
1">case</span> <span class="st0">'/'</span><span class="sy0">:</span><br/>
<span class="kw1">return</span> b <span class="sy0">/</span> a<span cl
ass="sy0">;</span><br/>
<span class="kw1">default</span><span class="
sy0">:</span><br/>
<span class="kw1">return</span> <a href="http:
//www.google.com/search?hl=en&q=allinurl%3Afloat+java.sun.com&btnI=I%27m
%20Feeling%20Lucky"><span class="kw3">Float</span></a>.<span class="me1">NaN</sp
an><span class="sy0">;</span><br/>
<span class="br0">}</span><br/>
<span class="br0">}</span><br/> <br/>
List<span class="sy0"><<
/span>Integer<span class="sy0">></span> randomDigits<span class="br0">(</
span><span class="br0">)</span> <span class="br0">{</span><br/>
<a href="http://www.google.com/search?hl=en&q=allinurl%3Arandom+java.sun.com
&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Random</span></a> r <span c
lass="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/
search?hl=en&q=allinurl%3Arandom+java.sun.com&btnI=I%27m%20Feeling%20Luc
ky"><span class="kw3">Random</span></a><span class="br0">(</span><span class
="br0">)</span><span class="sy0">;</span><br/>
List<span class="sy0">
<</span>Integer<span class="sy0">></span> result <span class="sy0">=</span
> <span class="kw1">new</span> ArrayList<span class="sy0"><></span><span c
lass="br0">(</span><span class="nu0">4</span><span class="br0">)</span><
span class="sy0">;</span><br/>
<span class="kw1">for</span> <span class="
br0">(</span><span class="kw4">int</span> i <span class="sy0">=</span> <span
class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span>
<span class="nu0">4</span><span class="sy0">;</span> i<span class="sy0">++</span
><span class="br0">)</span><br/>
result.<span class="me1">add</sp
an><span class="br0">(</span>r.<span class="me1">nextInt</span><span class="
br0">(</span><span class="nu0">9</span><span class="br0">)</span> <span
class="sy0">+</span> <span class="nu0">1</span><span class="br0">)</span><sp
an class="sy0">;</span><br/>
<span class="kw1">return</span> result<span
class="sy0">;</span><br/>
<span class="br0">}</span><br/> <br/>
List<span class="sy0"><</span>Integer<span class="sy0">></span> getSolvabl
eDigits<span class="br0">(</span><span class="br0">)</span> <span class=
"br0">{</span><br/>
List<span class="sy0"><</span>Integer<span cl
ass="sy0">></span> result<span class="sy0">;</span><br/>
<span class="
kw1">do</span> <span class="br0">{</span><br/>
result <span clas
s="sy0">=</span> randomDigits<span class="br0">(</span><span class="br0">
1;</span><span class="sy0">;</span><br/>
<span class="br0">}</span>
<span class="kw1">while</span> <span class="br0">(</span><span class="sy0">!
</span>isSolvable<span class="br0">(</span>result<span class="br0">)</sp
an><span class="br0">)</span><span class="sy0">;</span><br/>
<span cl
ass="kw1">return</span> result<span class="sy0">;</span><br/>
<span class="br
0">}</span><br/> <br/>
<span class="kw4">boolean</span> isSolvable<
span class="br0">(</span>List<span class="sy0"><</span>Integer<span class
="sy0">></span> digits<span class="br0">)</span> <span class="br0">{
</span><br/>
Set<span class="sy0"><</span>List<span class="sy0"><</
span>Integer<span class="sy0">>></span> dPerms <span class="sy0">=</span>
<span class="kw1">new</span> HashSet<span class="sy0"><></span><span class
="br0">(</span><span class="nu0">4</span> <span class="sy0">*</span> <span c
<span class="br0">}</span><br/>
<
span class="br0">}</span> <span class="kw1">catch</span> <span class="br0">
(</span><a href="http://www.google.com/search?hl=en&q=allinurl%3Aexcepti
on+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</s
pan></a> ignored<span class="br0">)</span> <span class="br0">{</span><b
r/>
<span class="br0">}</span><br/>
s
b.<span class="me1">setLength</span><span class="br0">(</span><span class="n
u0">0</span><span class="br0">)</span><span class="sy0">;</span><br/>
<span class="br0">}</span><br/>
<span class="br0">}
;</span><br/>
<span class="br0">}</span><br/>
<span class="kw
1">return</span> <span class="kw2">false</span><span class="sy0">;</span><br/>
<span class="br0">}</span><br/> <br/>
<a href="http://www.google.
com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=I%27m%20Feeling%2
0Lucky"><span class="kw3">String</span></a> postfixToInfix<span class="br0">(
;</span><a href="http://www.google.com/search?hl=en&q=allinurl%3Astring+java
.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> p
ostfix<span class="br0">)</span> <span class="br0">{</span><br/>
<span class="kw1">class</span> Expression <span class="br0">{</span><br/>
<a href="http://www.google.com/search?hl=en&q=allinurl%3Astring+j
ava.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a
> op, ex<span class="sy0">;</span><br/>
<span class="kw4">int</span>
prec <span class="sy0">=</span> <span class="nu0">3</span><span class="sy0">;</s
pan><br/> <br/>
Expression<span class="br0">(</span><a href=
"http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btn
I=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> e<span class="br0
">)</span> <span class="br0">{</span><br/>
ex <span clas
s="sy0">=</span> e<span class="sy0">;</span><br/>
<span class="br0">&
#125;</span><br/> <br/>
Expression<span class="br0">(</span>
<a href="http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com
&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> e1, <a hr
ef="http://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&
btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> e2, <a href="h
ttp://www.google.com/search?hl=en&q=allinurl%3Astring+java.sun.com&btnI=
I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> o<span class="br0">
)</span> <span class="br0">{</span><br/>
ex <span class=
"sy0">=</span> <a href="http://www.google.com/search?hl=en&q=allinurl%3Astri
ng+java.sun.com&btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span
></a>.<span class="me1">format</span><span class="br0">(</span><span class="
st0">"%s %s %s"</span>, e1, o, e2<span class="br0">)</sp
an><span class="sy0">;</span><br/>
op <span class="sy0">=</span>
o<span class="sy0">;</span><br/>
prec <span class="sy0">=</span>
ops.<span class="me1">indexOf</span><span class="br0">(</span>o<span class="
br0">)</span> <span class="sy0">/</span> <span class="nu0">2</span><span cla
ss="sy0">;</span><br/>
<span class="br0">}</span><br/>
<s
pan class="br0">}</span><br/> <br/>
Stack<span class="sy0"><
</span>Expression<span class="sy0">></span> expr <span class="sy0">=</span> <
span class="kw1">new</span> Stack<span class="sy0"><></span><span class="b
r0">(</span><span class="br0">)</span><span class="sy0">;</span><br/>
60;<br/>
<span class="kw1">for</span> <span class="br0">(</span><span
class="kw4">char</span> c <span class="sy0">:</span> postfix.<span class="me1">
toCharArray</span><span class="br0">(</span><span class="br0">)</span><s
pan class="br0">)</span> <span class="br0">{</span><br/>
<sp
an class="kw4">int</span> idx <span class="sy0">=</span> ops.<span class="me1">i
ndexOf</span><span class="br0">(</span>c<span class="br0">)</span><span
class="sy0">;</span><br/>
<span class="kw1">if</span> <span class="br
0">(</span>idx <span class="sy0">!=</span> <span class="sy0">-</span><span c
lass="nu0">1</span><span class="br0">)</span> <span class="br0">{</span
><br/> <br/>
Expression r <span class="sy0">=</span> expr.<s
pan class="me1">pop</span><span class="br0">(</span><span class="br0">)<
/span><span class="sy0">;</span><br/>
Expression l <span class="s
4 * 5 - (4 - 8)
Make 24 using these digits: [2, 5, 9, 1]
(Enter 'q' to quit, 's' for a solution)
> 2+5+9+1
Not correct.
Make 24 using these digits: [2, 5, 9, 1]
(Enter 'q' to quit, 's' for a solution)
> 2 * 9 + 5 + 1
Correct! Want to try another?
Make 24 using these digits: [8, 4, 3, 1]
(Enter 'q' to quit, 's' for a solution)
> s
(8 + 4) * (3 - 1)
Make 24 using these digits: [9, 4, 5, 6]
(Enter 'q' to quit, 's' for a solution)
> (9 +4) * 2 - 2
Not the same digits. Try again.
Make 24 using these digits: [9, 4, 5, 6]
(Enter 'q' to quit, 's' for a solution)
> q
Thanks for playing</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=23" title="Edit section: JavaScript">edit</a>]</span> <spa
n class="mw-headline" id="JavaScript"><a href="/wiki/Category:JavaScript" title=
"Category:JavaScript">JavaScript</a></span></h2>
<p>This is a translation of the C code.
</p>
<pre class="javascript highlighted_source"><span class="kw1">var</span> ar<span
class="sy0">=</span><span class="br0">[</span><span class="br0">]</span>
<span class="sy0">,</span>order<span class="sy0">=</span><span class="br0">[
</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</
span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">]
</span><span class="sy0">,</span>op<span class="sy0">=</span><span class="br0">&
#91;</span><span class="br0">]</span><span class="sy0">,</span>val<span clas
s="sy0">=</span><span class="br0">[</span><span class="br0">]</span><spa
n class="sy0">;</span><br/><span class="kw1">var</span> NOVAL<span class="sy0">=
</span><span class="nu0">9999</span><span class="sy0">,</span>oper<span class="s
y0">=</span><span class="st0">"+-*/"</span><span class="sy0">,</span>o
ut<span class="sy0">;</span><br/> <br/><span class="kw1">function</span> rn
d<span class="br0">(</span>n<span class="br0">)</span><span class="br0">
{</span><span class="kw1">return</span> <span class="kw4">Math</span>.<span
class="me1">floor</span><span class="br0">(</span><span class="kw4">Math</s
pan>.<span class="me1">random</span><span class="br0">(</span><span class="b
r0">)</span><span class="sy0">*</span>n<span class="br0">)</span><span c
lass="br0">}</span><br/> <br/><span class="kw1">function</span> say<sp
an class="br0">(</span>s<span class="br0">)</span><span class="br0">
3;</span><br/> <span class="kw1">try</span><span class="br0">{</span>docume
nt.<span class="me1">write</span><span class="br0">(</span>s<span class="sy0
">+</span><span class="st0">"<br>"</span><span class="br0">)
</span><span class="br0">}</span><br/> <span class="kw1">catch</span><span
class="br0">(</span>e<span class="br0">)</span><span class="br0">{<
/span>WScript.<span class="me1">Echo</span><span class="br0">(</span>s<span
class="br0">)</span><span class="br0">}</span><br/><span class="br0">&#
125;</span><br/> <br/><span class="kw1">function</span> getvalue<span class
="br0">(</span>x<span class="sy0">,</span>dir<span class="br0">)</span><
span class="br0">{</span><br/> <span class="kw1">var</span> r<span class="s
pan class="nu0">4</span><br/>
<span class="kw1">for</span> k <span class=
"sy0">=</span> <span class="nu0">1</span> <span class="kw1">to</span> <span clas
s="nu0">4</span><br/>
<span class="kw1">for</span> l <span class="sy0
">=</span> <span class="nu0">1</span> <span class="kw1">to</span> <span class="n
u0">4</span><br/>
<span class="co1">'valid permutation (no dupes?)</s
pan><br/>
<span class="kw1">if</span> i<span class="sy0"><>
</span>j <span class="kw1">and</span> i<span class="sy0"><></span>k <span
class="kw1">and</span> i<span class="sy0"><></span>l _<br/>
<span class="kw1">and</span> j<span class="sy0"><></span>k <span clas
s="kw1">and</span> j<span class="sy0"><></span>l _<br/>
<span class="kw1">and</span> k<span class="sy0"><></span>l <span clas
s="kw1">then</span><br/>
n<span class="sy0">=</span>n<span cl
ass="sy0">+</span><span class="nu0">1</span><br/>
<span class
="co1">'</span><br/><span class="co1">'
perm(n,1)=i</span><br
/><span class="co1">'
perm(n,2)=j</span><br/><span class="co1
">'
perm(n,3)=k</span><br/><span class="co1">'
perm(n,4)=l</span><br/>
<span class="co1">'actually, we
can as well permute given digits</span><br/>
perm<span class=
"br0">(</span>n<span class="sy0">,</span><span class="nu0">1</span><span cla
ss="br0">)</span><span class="sy0">=</span>d<span class="br0">(</span>i<
span class="br0">)</span><br/>
perm<span class="br0">(
;</span>n<span class="sy0">,</span><span class="nu0">2</span><span class="br0">&
#41;</span><span class="sy0">=</span>d<span class="br0">(</span>j<span class
="br0">)</span><br/>
perm<span class="br0">(</span>n<
span class="sy0">,</span><span class="nu0">3</span><span class="br0">)</span
><span class="sy0">=</span>d<span class="br0">(</span>k<span class="br0">
1;</span><br/>
perm<span class="br0">(</span>n<span class
="sy0">,</span><span class="nu0">4</span><span class="br0">)</span><span cla
ss="sy0">=</span>d<span class="br0">(</span>l<span class="br0">)</span><
br/>
<span class="kw1">end</span> <span class="kw1">if</span><br/
>
<span class="kw1">next</span><br/>
<span class="kw1">next</s
pan><br/>
<span class="kw1">next</span><br/><span class="kw1">next</span><br/
><span class="co1">'check if permutations look OK. They are</span><br/><span cla
ss="co1">'for i =1 to n</span><br/><span class="co1">'
print i,</span><br/><s
pan class="co1">'
for j =1 to 4: print perm(i,j);:next</span><br/><span class
="co1">'
print</span><br/><span class="co1">'next</span><br/> <br/><span
class="co1">'possible brackets</span><br/>NBrackets <span class="sy0">=</span>
<span class="nu0">11</span><br/><span class="kw1">dim</span> Brakets$<span class
="br0">(</span>NBrackets<span class="br0">)</span><br/><span class="kw1"
>DATA</span> <span class="st0">"4#4#4#4"</span><br/><span class="kw1">
DATA</span> <span class="st0">"(4#4)#4#4"</span><br/><span class="kw1"
>DATA</span> <span class="st0">"4#(4#4)#4"</span><br/><span class="kw1
">DATA</span> <span class="st0">"4#4#(4#4)"</span><br/><span class="kw
1">DATA</span> <span class="st0">"(4#4)#(4#4)"</span><br/><span class=
"kw1">DATA</span> <span class="st0">"(4#4#4)#4"</span><br/><span class
="kw1">DATA</span> <span class="st0">"4#(4#4#4)"</span><br/><span clas
s="kw1">DATA</span> <span class="st0">"((4#4)#4)#4"</span><br/><span c
lass="kw1">DATA</span> <span class="st0">"(4#(4#4))#4"</span><br/><spa
n class="kw1">DATA</span> <span class="st0">"4#((4#4)#4)"</span><br/><
span class="kw1">DATA</span> <span class="st0">"4#(4#(4#4))"</span><br
/><span class="kw1">for</span> i <span class="sy0">=</span> <span class="nu0">1<
/span> <span class="kw1">to</span> NBrackets<br/>
<span class="kw1">read</spa
n> Tmpl$<span class="sy0">:</span> Brakets$<span class="br0">(</span>i<span
class="br0">)</span> <span class="sy0">=</span> Tmpl$<br/><span class="kw1">
next</span><br/> <br/><span class="co1">'operations: full search</span><br/
>count <span class="sy0">=</span> <span class="nu0">0</span><br/>Ops$<span class
="sy0">=</span><span class="st0">"+ - * /"</span><br/><span class="kw1
">dim</span> Op$<span class="br0">(</span><span class="nu0">3</span><span cl
ass="br0">)</span><br/><span class="kw1">For</span> op1<span class="sy0">=</
span><span class="nu0">1</span> <span class="kw1">to</span> <span class="nu0">4<
/span><br/>
Op$<span class="br0">(</span><span class="nu0">1</span><span
class="br0">)</span><span class="sy0">=</span><span class="kw1">word</span>$
<span class="br0">(</span>Ops$<span class="sy0">,</span>op1<span class="br0"
>)</span><br/>
<span class="kw1">For</span> op2<span class="sy0">=</span>
<span class="nu0">1</span> <span class="kw1">to</span> <span class="nu0">4</span
><br/>
Op$<span class="br0">(</span><span class="nu0">2</span><span c
lass="br0">)</span><span class="sy0">=</span><span class="kw1">word</span>$<
span class="br0">(</span>Ops$<span class="sy0">,</span>op2<span class="br0">
)</span><br/>
<span class="kw1">For</span> op3<span class="sy0">=</sp
an><span class="nu0">1</span> <span class="kw1">to</span> <span class="nu0">4</s
pan><br/>
Op$<span class="br0">(</span><span class="nu0">3</span>
<span class="br0">)</span><span class="sy0">=</span><span class="kw1">word</
span>$<span class="br0">(</span>Ops$<span class="sy0">,</span>op3<span class
="br0">)</span><br/>
<span class="co1">'print "*"</span
><br/>
<span class="co1">'substitute all brackets</span><br/>
<span class="kw1">for</span> t <span class="sy0">=</span> <span class="nu0">
1</span> <span class="kw1">to</span> NBrackets<br/>
Tmpl$<span cl
ass="sy0">=</span>Brakets$<span class="br0">(</span>t<span class="br0">)
</span><br/>
<span class="co1">'print , Tmpl$</span><br/>
<span class="co1">'now, substitute all digits: permutations.</span><br/>
<span class="kw1">for</span> p <span class="sy0">=</span> <span
class="nu0">1</span> <span class="kw1">to</span> nPerm<br/>
r
es$<span class="sy0">=</span> <span class="st0">""</span><br/>
nOp<span class="sy0">=</span><span class="nu0">0</span><br/>
nD<span class="sy0">=</span><span class="nu0">0</span><br/>
<span class="kw1">for</span> i <span class="sy0">=</span> <span class
="nu0">1</span> <span class="kw1">to</span> <span class="kw2">len</span><span cl
ass="br0">(</span>Tmpl$<span class="br0">)</span><br />
c$ <span class="sy0">=</span> <span class="kw2">mid$</span><span class="b
r0">(</span>Tmpl$<span class="sy0">,</span> i<span class="sy0">,</span> <spa
n class="nu0">1</span><span class="br0">)</span><br />
<span class="kw1">select</span> <span class="kw1">case</span> c$<br />
<span class="kw1">case</span> <span class="st0">"#"</s
pan>
<span class="co1">'operations</span><br />
nOp <span class="sy0">=</span> nOp<span class="sy0">+</span><span clas
s="nu0">1</span><br />
res$ <span class="sy0">=</span
> res$<span class="sy0">+</span>Op$<span class="br0">(</span>nOp<span class=
"br0">)</span><br />
<span class="kw1">case</span> <s
pan class="st0">"4"</span>
<span class="co1">'digits</s
pan><br />
nD <span class="sy0">=</span> nOp<span cla
ss="sy0">+</span><span class="nu0">1</span><br />
res
$ <span class="sy0">=</span> res$; perm<span class="br0">(</span>p<span clas
s="sy0">,</span>nD<span class="br0">)</span><br />
<s
pan class="kw1">case</span> <span class="kw1">else</span>
<span cl
ass="co1">'brackets goes here</span><br />
res$ <span
class="sy0">=</span> res$<span class="sy0">+</span> c$ <br />
<span class="kw1">end</span> <span class="kw1">select</span><br />
<span class="kw1">next</span><br />
<span class="
co1">'print,, res$</span><br />
<span class="co1">'eval here<
/span><br />
<span class="kw1">if</span> evalWithErrCheck<spa
n class="br0">(</span>res$<span class="br0">)</span> <span class="sy0">=
</span> <span class="nu0">24</span> <span class="kw1">then</span><br />
<span class="kw1">print</span> <span class="st0">"24 = "
;</span>;res$<br />
<span class="kw1">end</span> <span cl
ass="co1">'comment it out if you want to see all versions</span><br />
<span class="kw1">end</span> <span class="kw1">if</span><br />
count <span class="sy0">=</span> count <span class="sy0">+</span> <s
pan class="nu0">1</span><br />
<span class="kw1">next</span><br /
>
<span class="kw1">next</span><br />
<span class="kw1">Next</
span><br />
<span class="kw1">Next</span><br /><span class="kw1">next</span><
((1+7)*(1+2)) =
24
((7+1)*(1+2)) =
24
$ lua 24game.solve.lua 123456789 1000
(2*(3+(4-(5+(6-(7*(8*(9*1))))))))
=
1000
(2*(3+(4-(5+(6-(7*(8*(9/1))))))))
=
1000
(2*(3*(4*(5+(6*(7-(8/(9*1))))))))
=
1000
(2*(3*(4*(5+(6*(7-(8/(9/1))))))))
=
1000
(2*(3+(4-(5+(6-(7*((8*9)*1)))))))
=
1000
(2*(3+(4-(5+(6-(7*((8*9)/1)))))))
=
1000
(2*(3*(4*(5+(6*(7-((8/9)*1)))))))
=
1000
(2*(3*(4*(5+(6*(7-((8/9)/1)))))))
=
1000
.....
</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=28" title="Edit section: Mathematica / Wolfram Language">e
dit</a>]</span> <span class="mw-headline" id="Mathematica_.2F_Wolfram_Language">
<a href="/wiki/Category:Mathematica" title="Category:Mathematica">Mathematica</a
> / <a href="/wiki/Category:Wolfram_Language" title="Category:Wolfram Language">
Wolfram Language</a></span></h2>
<p>The code:
</p>
<pre class="text highlighted_source"> <br />treeR[n_] := Table[o[trees
[a], trees[n - a]], {a, 1, n - 1}]<br />treeR[1] := n<br />tree[n_] :=
<br /> Flatten[treeR[n] //. {o[a_List, b_] :> (o[#, b] & /@ a), <br
/>
o[a_, b_List] :> (o[a, #] & /@ b)}]<br />game24play[val_List]
 := <br /> Union[StringReplace[StringTake[ToString[#, InputForm], {10, -2}]
, <br />
"-1*" ~~ n_ :> "-" <> n] & /@
(HoldForm /@ <br />
Select[Union@<br />
Flatten[Outer[# /. {o[q_Int
eger] :> #2[[q]], <br />
n[q_] :> #3[[q]]} &, <b
r />
Block[{O = 1, N = 1}, # /. {o :> o[O++], n :> n[N+
+]}] & /@ <br />
tree[4], Tuples[{Plus, Subtract, Times, Divide},
3], <br />
Permutations[Array[v, 4]], 1]], <br />
Quiet[(# /. v[q
_] :> val[[q]]) == 24] &] /. <br />
Table[v[q] -> val[[q]], {
q, 4}])]</pre>
<p>The <code>treeR</code> method recursively computes all possible operator tree
s for a certain number of inputs. It does this by tabling all combinations of di
stributions of inputs across the possible values. (For example, <code>treeR[4]</
code> is allotted 4 inputs, so it returns <code>{o[treeR[3],treeR[1]],o[treeR[2]
,treeR[2]],o[treeR[1],treeR[3]]}</code>, where <code>o</code> is the operator (g
eneric at this point).
The base case <code>treeR[1]</code> returns <code>n</code> (the input).
The final output of <code>tree[4]</code> (the 24 game has 4 random inputs) (<cod
e>tree</code> cleans up the output of <code>treeR</code>) is:
</p>
<pre>
{o[n, o[n, o[n, n]]],
o[n, o[o[n, n], n]],
o[o[n, n], o[n, n]],
o[o[n, o[n, n]], n],
o[o[o[n, n], n], n]}</pre>
<p><code>game24play</code> takes the four random numbers as input and does the f
ollowing (the <code><font color="red">%</font></code> refers to code output from
previous bullets):
</p>
<ul><li><code>Block[{O = 1, N = 1}, # /. {o :> o[O++], n :> n[N+
+]}] & /@ tree[4]</code>
<ul><li> Assign ascending numbers to the input and operator placeholders.
</li><li> Ex: <code>o[1][o[2][n[1], n[2]], o[3][n[3], n[4]]]</code>
</li></ul>
</li><li><code>Tuples[{Plus, Subtract, Times, Divide}, 3]</code>
3 - (3 * (1 - 8))
3 + (3 * (8 - 1))
3 - (3 * (1 - 8))
3 + (3 * (8 - 1))
Enter four integers or 'q' to exit: q
E:\Temp></pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=31" title="Edit section: Perl 6">edit</a>]</span> <span cl
ass="mw-headline" id="Perl_6"><a href="/wiki/Category:Perl_6" title="Category:Pe
rl 6">Perl 6</a></span></h2>
<p>A loose translation of the Perl entry. Does not return every possible permuta
tion of the possible solutions. Filters out duplicates (from repeated digits) an
d only reports the solution for a particular order of digits and operators with
the fewest parenthesis (avoids reporting duplicate solutions only differing by u
nnecessary parenthesis).
</p><p>Since Perl 6 uses Rational numbers for division (whenever possible) there
is no loss of precision as is common with floating point division. So a compari
son like (1 + 7) / (1 / 3) == 24 "Just Works"<sup>™</sup>
</p>
<pre class="perl6 highlighted_source"><span class="kw1">my</span> <span class="r
e0">@digits</span><span class="sy0">;</span><br /><span class="kw1">my</span> <s
pan class="re0">$amount</span> <span class="sy0">=</span> <span class="nu0">4</s
pan><span class="sy0">;</span><br /> <br /><span class="co1"># Get $amount
digits from the user,</span><br /><span class="co1"># ask for more if they don't
supply enough</span><br /><span class="kw1">while</span> <span class="re0">@dig
its</span><span class="sy0">.</span><span class="kw3">elems</span> <span class="
sy0"><</span> <span class="re0">$amount</span> <span class="br0">{</span
><br />
<span class="re0">@digits</span> <span class="sy0">,=</span> <span cl
ass="br0">(</span>prompt <span class="st0">"Enter {$amount - @digits} d
igits from 1 to 9, "</span><br />
<span class="sy0">~</span> <span class
="st_h">'(repeats allowed): '</span><span class="br0">)</span><span class="s
y0">.</span><span class="kw3">comb</span><span class="br0">(</span><span cla
ss="co2">/<[1..9]>/</span><span class="br0">)</span><span class="sy0">
;</span><br /><span class="br0">}</span><br /><span class="co1"># Throw awa
y any extras</span><br /><span class="re0">@digits</span> <span class="sy0">=</s
pan> <span class="re0">@digits</span><span class="br0">[</span><span class="
sy0">^</span><span class="re0">$amount</span><span class="br0">]</span><span
class="sy0">;</span><br /> <br /><span class="co1"># Generate combinations
of operators</span><br /><span class="kw1">my</span> <span class="re0">@op</spa
n> <span class="sy0">=</span> <span class="sy0"><+</span> <span class="sy0"></span> <span class="sy0">*</span> <span class="sy0">/>;</span><br /><span cl
ass="kw1">my</span> <span class="re0">@ops</span> <span class="sy0">=</span> <sp
an class="kw3">map</span> <span class="br0">{</span><span class="kw1">my</s
pan> <span class="re0">$a</span> <span class="sy0">=</span> <span class="re0">$_
</span><span class="sy0">;</span> <span class="kw3">map</span> <span class="br0"
>{</span><span class="kw1">my</span> <span class="re0">$b</span> <span clas
s="sy0">=</span> <span class="re0">$_</span><span class="sy0">;</span> <span cla
ss="kw3">map</span> <span class="br0">{</span><span class="br0">[</span
><span class="re0">$a</span><span class="sy0">,</span><span class="re0">$b</span
><span class="sy0">,</span><span class="re0">$_</span><span class="br0">]</s
pan><span class="br0">}</span><span class="sy0">,</span> <span class="re0">
@op</span><span class="br0">}</span><span class="sy0">,</span> <span class=
"re0">@op</span><span class="br0">}</span><span class="sy0">,</span> <span
class="re0">@op</span><span class="sy0">;</span><br /> <br /><span class="c
o1"># Enough sprintf formats to cover most precedence orderings</span><br /><spa
n class="kw1">my</span> <span class="re0">@formats</span> <span class="sy0">=</s
pan> <span class="br0">(</span><br />
<span class="st_h">'%d %s 
;%d %s %d %s %d'</span><span class="sy0">,</span><br />
<
span class="st_h">'(%d %s %d) %s %d %s %d'</span><
3 / (1 / (1 + 7))
(7 + 1) * 3 * 1 =
(7 + 1) * 3 / 1 =
(7 - 1) * (3 + 1)
(7 + 1) * 1 * 3 =
(7 + 1) / 1 * 3 =
(7 + 1) / (1 / 3)
(7 - 1) * (1 + 3)
(7 * 1 + 1) * 3 =
(7 / 1 + 1) * 3 =
(1 + 3) * (7 - 1)
(1 * 3) * (7 + 1)
(1 * 3) * (1 + 7)
(1 + 7) * 3 * 1 =
(1 + 7) * 3 / 1 =
(1 + 7) * 1 * 3 =
(1 + 7) / 1 * 3 =
(1 + 7) / (1 / 3)
(1 * 7 + 1) * 3 =
(1 + 1 * 7) * 3 =
(1 * 1 + 7) * 3 =
(1 / 1 + 7) * 3 =
= 24
24
24
= 24
24
24
= 24
= 24
24
24
= 24
= 24
= 24
24
24
24
24
= 24
24
24
24
24
/))<br /> (member @Op2 (+ - * /))<br /> (member @Op3 (+ - * /))<br /> (or
<br />
((equal @Expr (@Op1 (@Op2 @A @B) (@Op3 @C @D))))<br />
((equal
@Expr (@Op1 @A (@Op2 @B (@Op3 @C @D))))) )<br /> (^ @ (= 24 (catch '("Div
/0") (eval (-> @Expr))))) )<br /> <br />(de play24 (A B C D)
# Define PicoLisp function<br /> (pilog<br />
(quote<br />
@L (list A B C D)<br />
(play24 @L @X) )<br />
(println @X) )
)<br /> <br />(play24 5 6 7 8)
# Call 'play24' funct
ion</pre>
<div>
<dl><dt>Output:</div>
</dt></dl>
<pre>(* (+ 5 7) (- 8 6))
(* 6 (+ 5 (- 7 8)))
(* 6 (- 5 (- 8 7)))
(* 6 (- 5 (/ 8 7)))
(* 6 (+ 7 (- 5 8)))
(* 6 (- 7 (- 8 5)))
(* 6 (/ 8 (- 7 5)))
(/ (* 6 8) (- 7 5))
(* (+ 7 5) (- 8 6))
(* (- 8 6) (+ 5 7))
(* (- 8 6) (+ 7 5))
(* 8 (/ 6 (- 7 5)))
(/ (* 8 6) (- 7 5))</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=34" title="Edit section: ProDOS">edit</a>]</span> <span cl
ass="mw-headline" id="ProDOS"><a href="/wiki/Category:ProDOS" title="Category:Pr
oDOS">ProDOS</a></span></h2>
<p>Note
This example uses the math module:
</p>
<pre class="text highlighted_source">editvar /modify -random- = <10<br />:a<b
r />editvar /newvar /withothervar /value=-random- /title=1<br />editvar /newvar
/withothervar /value=-random- /title=2<br />editvar /newvar /withothervar /value
=-random- /title=3<br />editvar /newvar /withothervar /value=-random- /title=4<b
r />printline These are your four digits: -1- -2- -3- -4-<br />printline Use an
algorithm to make the number 24.<br />editvar /newvar /value=a /userinput=1 /tit
le=Algorithm:<br />do -a-<br />if -a- /hasvalue 24 printline Your algorithm work
ed! & goto :b (<br />) else printline Your algorithm did not work.<br /
>editvar /newvar /value=b /userinput=1 /title=Do you want to see how you could h
ave done it?<br />if -b- /hasvalue y goto :c else goto :b<br />:b <br
/>editvar /newvar /value=c /userinput=1 /title=Do you want to play again?<br />i
f -c- /hasvalue y goto :a else exitcurrentprogram<br />:c<br />editvar /new
var /value=do -1- + -2- + -3- + -4- /title=c & do -c- >d & if -d- /ha
svalue 24 goto :solve<br />editvar /newvar /value=do -1- - -2- + -3- + -4/title=c & do -c- >d & if -d- /hasvalue 24 goto :solve<br />edit
var /newvar /value=do -1- / -2- + -3- + -4- /title=c & do -c- >d & if
-d- /hasvalue 24 goto :solve<br />editvar /newvar /value=do -1- * -2- + -3
- + -4- /title=c & do -c- >d & if -d- /hasvalue 24 goto :solve<b
r />editvar /newvar /value=do -1- + -2- - -3- + -4- /title=c & do -c- >d
& if -d- /hasvalue 24 goto :solve<br />editvar /newvar /value=do -1- +
-2- / -3- + -4- /title=c & do -c- >d & if -d- /hasvalue 24 goto 
:solve<br />editvar /newvar /value=do -1- + -2- * -3- + -4- /title=c & do -c
- >d & if -d- /hasvalue 24 goto :solve<br />editvar /newvar /value=d
o -1- + -2- + -3- - -4- /title=c & do -c- >d & if -d- /hasvalue 24 go
to :solve<br />editvar /newvar /value=do -1- + -2- + -3- / -4- /title=c &am
p; do -c- >d & if -d- /hasvalue 24 goto :solve<br />editvar /newvar
/value=do -1- + -2- + -3- * -4- /title=c & do -c- >d & if -d- /hasval
ue 24 goto :solve<br />editvar /newvar /value=do -1- - -2- - -3- - -4- /tit
le=c & do -c- >d & if -d- /hasvalue 24 goto :solve<br />editvar
/newvar /value=do -1- / -2- / -3- / -4- /title=c & do -c- >d & if -d/hasvalue 24 goto :solve<br />editvar /newvar /value=do -1- * -2- * -3- *
-4- /title=c & do -c- >d & if -d- /hasvalue 24 goto :solve<br />
:solve<br />printline you could have done it by doing -c-<br />stoptask<br />got
o :b</pre>
<div>
<dl><dt>Output:</div>
</dt></dl>
<pre>These are your four digits: 1 4 5 2
Use an algorithm to make the number 24.
Algorithm: 4 + 2 - 5 + 1
Your algorithm did not work.
Do you want to play again? y
These are your four digits: 1 8 9 6
Use an algorithm to make the number 24.
Algorithm: 1 + 8 + 9 + 6
Your algorithm worked!
Do you want to play again? n</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=35" title="Edit section: Prolog">edit</a>]</span> <span cl
ass="mw-headline" id="Prolog"><a href="/wiki/Category:Prolog" title="Category:Pr
olog">Prolog</a></span></h2>
<p>Works with SWI-Prolog.<br />
The game is generic, you can choose to play with a goal different of 24,
any number of numbers in other ranges than 1 .. 9 ! <br />
rdiv/2 is use instead of //2 to enable the program to solve difficult cases as [
3 3 8 8].
</p>
<pre class="prolog highlighted_source">play24<span class="br0">(</span>Len<s
pan class="sy4">,</span> Range<span class="sy4">,</span> Goal<span class="br0">&
#41;</span> <span class="sy1">:-</span><br /> game<span class="br0">(</spa
n>Len<span class="sy4">,</span> Range<span class="sy4">,</span> Goal<span class=
"sy4">,</span> L<span class="sy4">,</span> S<span class="br0">)</span><span
class="sy4">,</span><br />
maplist<span class="br0">(</span>my_write<sp
an class="sy4">,</span> L<span class="br0">)</span><span class="sy4">,</span
><br /> format<span class="br0">(</span><span class="st_h">': ~w~n'</span><s
pan class="sy4">,</span> <span class="br0">[</span>S<span class="br0">]<
/span><span class="br0">)</span><span class="sy4">.</span><br /> <br />
game<span class="br0">(</span>Len<span class="sy4">,</span> Range<span class
="sy4">,</span> Value<span class="sy4">,</span> L<span class="sy4">,</span> S<sp
an class="br0">)</span> <span class="sy1">:-</span><br /> length<span clas
s="br0">(</span>L<span class="sy4">,</span> Len<span class="br0">)</span
><span class="sy4">,</span><br />
maplist<span class="br0">(</span>cho
ose<span class="br0">(</span>Range<span class="br0">)</span><span class=
"sy4">,</span> L<span class="br0">)</span><span class="sy4">,</span><br />
compute<span class="br0">(</span>L<span class="sy4">,</span> Value<span clas
s="sy4">,</span> <span class="br0">[</span><span class="br0">]</span><sp
an class="sy4">,</span> S<span class="br0">)</span><span class="sy4">.</span
><br /> <br /> <br />choose<span class="br0">(</span>Range<span cl
ass="sy4">,</span> V<span class="br0">)</span> <span class="sy1">:-</span><b
r />
V <a href="http://pauillac.inria.fr/~deransar/prolog/bips.html"><span cl
ass="kw1">is</span></a> random<span class="br0">(</span>Range<span class="br
0">)</span> <span class="sy3">+</span> <span class="nu0">1</span><span class
="sy4">.</span><br /> <br /> <br />write_tree<span class="br0">(</
span><span class="br0">[</span>M<span class="br0">]</span><span class="s
y4">,</span> <span class="br0">[</span>M<span class="br0">]</span><span
class="br0">)</span><span class="sy4">.</span><br /> <br />write_tree<s
pan class="br0">(</span><span class="br0">[</span><span class="sy3">+</s
pan><span class="sy4">,</span> M<span class="sy4">,</span> N<span class="br0">&#
true ;
6 2 3 4 :
true ;
6 2 3 4 :
true ;
6 2 3 4 :
true ;
6 2 3 4 :
true ;
6 2 3 4 :
true ;
6 2 3 4 :
true ;
6 2 3 4 :
true ;
6 2 3 4 :
...
4*3+6*2
(6/2+3)*4
4*(6/2+3)
(6/2+3)*4
4*(6/2+3)
(6-3)*2*4
4*(6-3)*2
(6-3)*4*2
?- play24(7,99, 1).
66 40 2 76 95 59 12 : (66+40)/2-76+95-59-12
true ;
66 40 2 76 95 59 12 : (66+40)/2-76+95-12-59
true ;
66 40 2 76 95 59 12 : (66+40)/2-76-59+95-12
true ;
66 40 2 76 95 59 12 : (66+40)/2-76-59-12+95
true ;
66 40 2 76 95 59 12 : 95+(66+40)/2-76-59-12
true ;
66 40 2 76 95 59 12 : 95+(66+40)/2-76-59-12
true ;
66 40 2 76 95 59 12 : 95-12+(66+40)/2-76-59
true ;
66 40 2 76 95 59 12 : (66+40)/2-76-59+95-12
....
</pre>
<h3><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=36" title="Edit section: Minimal version">edit</a>]</span>
<span class="mw-headline" id="Minimal_version">Minimal version</span></h3>
<div class="examplemeta workswith"><b>Works with</b>: <a href="/wiki/GNU_Prolog"
title="GNU Prolog">GNU Prolog</a> version 1.4.4</div>
<p>Little efforts to remove dublicates (e.g. output for [4,6,9,9]).
</p>
<pre class="prolog highlighted_source"><span class="sy1">:-</span> <a href="http
://pauillac.inria.fr/~deransar/prolog/bips.html"><span class="kw1">initializatio
n</span></a><span class="br0">(</span>main<span class="br0">)</span><spa
n class="sy4">.</span><br /> <br />solve<span class="br0">(</span>N<spa
n class="sy4">,</span>Xs<span class="sy4">,</span>Ast<span class="br0">)</sp
an> <span class="sy1">:-</span><br />
Err <span class="sy6">=</span> evaluati
on_error<span class="br0">(</span>zero_divisor<span class="br0">)</span>
<br /> <span class="sy4">,</span> gen_ast<span class="br0">(</span>Xs<span
class="sy4">,</span>Ast<span class="br0">)</span><span class="sy4">,</span>
<a href="http://pauillac.inria.fr/~deransar/prolog/bips.html"><span class="kw1">
catch</span></a><span class="br0">(</span>Ast <span class="sy1">=:=</span> N
<span class="sy4">,</span> error<span class="br0">(</span>Err<span class="sy
4">,</span>_<span class="br0">)</span><span class="sy4">,</span> <a href="ht
tp://pauillac.inria.fr/~deransar/prolog/bips.html"><span class="kw1">fail</span>
</a><span class="br0">)</span><br /> <span class="sy4">.</span><br /> 
<br />gen_ast<span class="br0">(</span><span class="br0">[</span>N<span
class="br0">]</span><span class="sy4">,</span>N<span class="br0">)</span
Solution found: 6 - ( 5 - 7 ) * 9
Thank you and goodbye</pre>
<h3><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=38" title="Edit section: Difficult case requiring precise
division">edit</a>]</span> <span class="mw-headline" id="Difficult_case_requirin
g_precise_division">Difficult case requiring precise division</span></h3>
<p>The digits 3,3,8 and 8 have a solution that is not equal to 24 when using Pyt
hons double-precision floating point because of a division in all answers.
The solver above switches to precise fractional arithmetic when division is invo
lved and so can both recognise and solve for cases like this, (rather than allow
ing some range of closeness to 24).
</p><p><b>Evaluation needing precise division</b>
</p>
<div>
<dl><dt>Output:</div>
</dt></dl>
<pre>...
Expression 1: !!
Enter the digits to solve for: 3388
New digits: 3 3 8 8
Expression 1: 8/(3-(8/3))
= 24
Thats right!
Thank you and goodbye</pre>
<p><b>Solving needing precise division</b>
</p>
<div>
<dl><dt>Output:</div>
</dt></dl>
<pre>...
Expression 1: !!
Enter the digits to solve for: 3388
New digits: 3 3 8 8
Expression 1: ?
Solution found: 8 / ( 3 - 8 / 3 )</pre>
<h2><span class="editsection">[<a href="/mw/index.php?title=24_game/Solve&ac
tion=edit&section=39" title="Edit section: R">edit</a>]</span> <span class="
mw-headline" id="R"><a href="/wiki/Category:R" title="Category:R">R</a></span></
h2>
<p>This uses exhaustive search and makes use of R's ability to work with express
ions as data. It is in principle general for any set of operands and binary oper
ators.
</p>
<pre class="text highlighted_source"> <br />library(gtools)<br /> <br
/>solve24 <- function(vals=c(8, 4, 2, 1),<br />
goal=24,<b
r />
ops=c("+", "-", "*", "
;/")) {<br /> <br /> val.perms <- as.data.frame(t(<br />
permutations(length(vals), length(vals))))<br /> <br /> nop <length(vals)-1<br /> op.perms <- as.data.frame(t(<br />
do.
call(expand.grid,<br />
replicate(nop, list(ops)))))<br
/> <br /> ord.perms <- as.data.frame(t(<br />
do.cal
l(expand.grid,<br />
replicate(n <- nop, 1:((n <
<- n-1)+1)))))<br /> <br /> for (val.perm in val.perms)<br />
for (o
p.perm in op.perms)<br />
for (ord.perm in ord.perms)<br />
{<br />
expr <- as.list(vals[val.perm])<br />
for (i in 1:nop) {<br
/>
expr[[ ord.perm[i] ]] <- call(as.character(op.perm[i]),<br />
expr[[ ord.perm[i] ]],<br />
expr[[ ord.perm[i]+1 ]])<br />
expr
x=x<s
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
so
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
ution:
[1+1+6]*3
1-1+6*4
[1-1+6]*4
[1-1+6*4]
1-1+[6*4]
1-[1-6*4]
1*1*6*4
[1*1*6]*4
[1*1*6*4]
1*[1*6]*4
1*[1*6*4]
1*1*[6*4]
1/1*6*4
[1/1*6]*4
[1/1*6*4]
1/1*[6*4]
1/[1/6]*4
[1+1*7]*3
[1*1+7]*3
1*[1+7]*3
[1/1+7]*3
1-1+8*3
[1-1+8]*3
[1-1+8*3]
1-1+[8*3]
1-[1-8*3]
1*1*8*3
[1*1*8]*3
[1*1*8*3]
1*[1*8]*3
1*[1*8*3]
1*1*[8*3]
1/1*8*3
[1/1*8]*3
[1/1*8*3]
1/1*[8*3]
1/[1/8]*3
1/[1/8/3]
[1+2+1]*6
[1+2*1]*8
[1+2/1]*8
[1*2+1]*8
1*[2+1]*8
[1*2+2]*6
1*[2+2]*6
1*2*2*6
[1*2*2]*6
[1*2*2*6]
1*[2*2]*6
1*[2*2*6]
1*2*[2*6]
[1+2+3]*4
1*2*3*4
[1*2*3]*4
[1*2*3*4]
1*[2*3]*4
1*[2*3*4]
1*2*[3*4]
</pre>
<h2><span c ass="editsection">[<a href="/mw/index.php?tit e=24_game/So ve&ac
tion=edit&section=42" tit e="Edit section: Ruby">edit</a>]</span> <span c as
s="mw-head ine" id="Ruby"><a href="/wiki/Category:Ruby" tit e="Category:Ruby">Ru
by</a></span></h2>
<div c ass="examp emeta trans ation"><b>Trans ation of</b>: <a href="/wiki/24_ga
me/So ve#Tc " tit e="24 game/So ve">Tc </a></div>
<pre c ass="ruby high ighted_source"><span c ass="kw1">c ass</span> TwentyFourGa
meP ayer<br /> EXPRESSIONS = <span c ass="br0">[</span><br />
<span c as
s="st0">'((%d %s %d) %s %d) %s %d'</span>,<br />
<span c ass="st0">'(%d %s (%d %s %d)) %s %d'</span>,<
br />
<span c ass="st0">'(%d %s %d) %s (%d %s %d)'</
span>,<br />
<span c ass="st0">'%d %s ((%d %s %d) %s 
;%d)'</span>,<br />
<span c ass="st0">'%d %s (%d %s (%d %s
0;%d))'</span>,<br /> <span c ass="br0">]</span>.<span c ass="me1">map</spa
n><span c ass="br0">{</span><span c ass="sy0">|</span>expr<span c ass="sy0"
>|</span> <span c ass="br0">[</span>expr, expr.<span c ass="kw3">gsub</span>
<span c ass="br0">(</span><span c ass="st0">'%d'</span>, <span c ass="st0">'
Rationa (%d,1)'</span><span c ass="br0">)</span><span c ass="br0">]</spa
n><span c ass="br0">}</span><br /> <br /> OPERATORS = <span c ass="br
0">[</span>:<span c ass="sy0">+</span>, :<span c ass="sy0">-</span>,
60;:<span c ass="sy0">*</span>, :<span c ass="sy0">/</span><span c ass="br0
">]</span>.<span c ass="me1">repeated_permutation</span><span c ass="br0">&#
40;</span><span c ass="nu0">3</span><span c ass="br0">)</span><br /> <b
r /> OBJECTIVE = <span c ass="kw4">Rationa </span><span c ass="br0">(</span
><span c ass="nu0">24</span>,<span c ass="nu0">1</span><span c ass="br0">)</
span><br /> <br /> <span c ass="kw1">def</span> <span c ass="kw2">se f</sp
an>.<span c ass="me1">so ve</span><span c ass="br0">(</span>digits<span c as
s="br0">)</span><br />
so utions = <span c ass="br0">[</span><span c
ass="br0">]</span><br />
digits.<span c ass="me1">permutation</span>.<spa
n c ass="me1">to_a</span>.<span c ass="me1">uniq</span>.<span c ass="me1">each</
span> <span c ass="kw1">do</span> <span c ass="sy0">|</span>a,b,c,d<span c ass="
sy0">|</span><br />
OPERATORS.<span c ass="me1">each</span> <span c ass="kw
1">do</span> <span c ass="sy0">|</span>op1,op2,op3<span c ass="sy0">|</span><br
/>
EXPRESSIONS.<span c ass="me1">each</span> <span c ass="kw1">do</span>
<span c ass="sy0">|</span>expr,expr_rat<span c ass="sy0">|</span><br />
<span c ass="co1"># eva uate using rationa arithmetic</span><br />
te
st = expr_rat <span c ass="sy0">%</span> <span c ass="br0">[</span>a, op1, b
, op2, c, op3, d<span c ass="br0">]</span><br />
va ue = <span c as
s="kw3">eva </span><span c ass="br0">(</span>test<span c ass="br0">)</sp
an> <span c ass="kw1">rescue</span> <span c ass="sy0">-</span><span c ass="nu0">
1</span> <span c ass="co1"># catch division by zero</span><br />
<span
c ass="kw1">if</span> va ue == OBJECTIVE<br />
so utions <span c ass
="sy0">& t;& t;</span> expr <span c ass="sy0">%</span> <span c ass="br0">[</
span>a, op1, b, op2, c, op3, d<span c ass="br0">]</span><br />
<spa
n c ass="kw1">end</span><br />
<span c ass="kw1">end</span><br />
<s
pan c ass="kw1">end</span><br />
<span c ass="kw1">end</span><br />
so uti
ons<br /> <span c ass="kw1">end</span><br /><span c ass="kw1">end</span><br />&
#160;<br /><span c ass="co1"># va idate user input</span><br />digits = ARGV.<sp
an c ass="me1">map</span> <span c ass="kw1">do</span> <span c ass="sy0">|</span>
arg<span c ass="sy0">|</span> <br /> <span c ass="kw1">begin</span><br />
<s
pan c ass="kw3">Integer</span><span c ass="br0">(</span>arg<span c ass="br0"
>)</span><br /> <span c ass="kw1">rescue</span> <span c ass="kw4">ArgumentE
rror</span><br />
<span c ass="kw3">raise</span> <span c ass="st0">"erro
r: not an integer: '#{arg}'"</span><br /> <span c ass="kw1">end</span><br
/><span c ass="kw1">end</span><br />digits.<span c ass="me1">size</span> == <spa
n c ass="nu0">4</span> <span c ass="kw1">or</span> <span c ass="kw3">raise</span
> <span c ass="st0">"error: need 4 digits, on y have #{digits.size}"</
span><br /> <br />so utions = TwentyFourGameP ayer.<span c ass="me1">so ve<
/span><span c ass="br0">(</span>digits<span c ass="br0">)</span><br /><s
va ue = va ue + enteredDigits[i+1]<br />
case "-":<br />
va
ue = va ue - enteredDigits[i+1]<br />
case "*":<br />
va ue =
va ue * enteredDigits[i+1]<br />
case "/":<br />
va ue = va u
e / enteredDigits[i+1]<br />
defau t:<br />
print n("This message s
hou d never happen!")<br />
}<br /> }<br />}<br /> <br />func eva
uate(dPerm: [Doub e], oPerm: [String]) -> Boo {<br /> var va ue = 0.0<br />
 <br /> if dPerm.count == 4 && oPerm.count == 3 {<br />
va ue =
dPerm[0]<br />
for (i, operation) in enumerate(oPerm) {<br />
switch op
eration {<br />
case "+":<br />
va ue = va ue + dPerm[i+1]
<br />
case "-":<br />
va ue = va ue - dPerm[i+1]<br />
case "*":<br />
va ue = va ue * dPerm[i+1]<br />
case &
quot;/":<br />
va ue = va ue / dPerm[i+1]<br />
defau t:<br />
print n("This message shou d never happen!")<br />
}<br />
}<br /> }<br /> return (abs(24 - va ue) & t; 0.001)<br />}<br /> <br
/>func isSo vab e(inout digits: [Doub e]) -> Boo {<br /> <br /> var re
su t = fa se<br /> var dPerms = [[Doub e]]()<br /> permute(&digits, &d
Perms, 0)<br /> <br />
et tota = 4 * 4 * 4<br /> var oPerms = [[String]
]()<br /> permuteOperators(&oPerms, 4, tota )<br /> <br /> <br />
for dig in dPerms {<br />
for opr in oPerms {<br />
var expression = &
quot;"<br /> <br />
if eva uate(dig, opr) {<br />
for digi
t in dig {<br />
expression += "\(digit)"<br />
}<br /
> <br />
for oper in opr {<br />
expression += oper<br />
}<br /> <br />
so ution = beautify(expression)<br />
re
su t = true<br />
}<br />
}<br /> }<br /> return resu t<br />}<br />&#
160;<br />func permute(inout st: [Doub e], inout res: [[Doub e]], k: Int) ->
Void {<br /> for i in k ..& t; st.count {<br />
swap(& st[i], & st
[k])<br />
permute(& st, &res, k + 1)<br />
swap(& st[k], &
; st[i])<br /> }<br /> if k == st.count {<br />
res.append( st)<br /> }<b
r />}<br /> <br />// n=4, tota =64, npow=16<br />func permuteOperators(inou
t res: [[String]], n: Int, tota : Int) -> Void {<br /> et posOperations = [
"+", "-", "*", "/"]<br />
et npow = n
* n<br /> for i in 0 ..& t; tota {<br />
res.append([posOperations[(i / npo
w)], posOperations[((i % npow) / n)], posOperations[(i % n)]])<br />
}<br />}<br /> <br />func beautify(infix: String) -> String {<br />
et
newString = infix as NSString<br /> <br /> var so ution = ""<br
/> <br /> so ution += newString.substringWithRange(NSMakeRange(0, 1))<br
/> so ution += newString.substringWithRange(NSMakeRange(12, 1))<br /> so ution
+= newString.substringWithRange(NSMakeRange(3, 1))<br /> so ution += newString
.substringWithRange(NSMakeRange(13, 1))<br /> so ution += newString.substringWi
thRange(NSMakeRange(6, 1))<br /> so ution += newString.substringWithRange(NSMak
eRange(14, 1))<br /> so ution += newString.substringWithRange(NSMakeRange(9, 1)
)<br /> <br /> return so ution<br />}<br /> <br />if va ue != 24
{<br /> print n("The va ue of the provided expression is \(va ue) instead
of 24!")<br /> if isSo vab e(&enteredDigits) {<br />
print n("
;quot;A possib e so ution cou d have been " + so ution)<br /> } e se {<br
/>
print n("Anyway, there was no known so ution to this one.")<br /
> }<br />} e se {<br /> print n("Congratu ations, you found a so ution!&q
uot;)<br />}</pre>
<div>
<d ><dt>Output:</div>The program in action:
</dt></d >
<pre sty e="height:30ex;overf ow:scro ">
24 Game
Generating 4 digits...
Make 24 using these digits : 2 4 1 9
2+1*4+9
The va ue of the provided expression is 21.0 instead of 24!
A possib e so ution cou d have been 9-2-1*4
24 Game
Generating 4 digits...
Make 24 using these digits : 2 7 2 3
7-2*2*3
The va ue of the provided expression is 30.0 instead of 24!
A possib e so ution cou d have been 3+7+2*2
24 Game
Generating 4 digits...
Make 24 using these digits : 4 6 3 4
4+4+6+3
The va ue of the provided expression is 17.0 instead of 24!
A possib e so ution cou d have been 3*4-6*4
24 Game
Generating 4 digits...
Make 24 using these digits : 8 8 2 6
8+8+2+6
Congratu ations, you found a so ution!
24 Game
Generating 4 digits...
Make 24 using these digits : 6 7 8 9
6+7+8+9
The va ue of the provided expression is 30.0 instead of 24!
Anyway, there was no known so ution to this one.
</pre>
<h2><span c ass="editsection">[<a href="/mw/index.php?tit e=24_game/So ve&ac
tion=edit&section=46" tit e="Edit section: Tc ">edit</a>]</span> <span c ass
="mw-head ine" id="Tc "><a href="/wiki/Category:Tc " tit e="Category:Tc ">Tc </a
></span></h2>
<p>This is a comp ete Tc script, intended to be invoked from the command ine.
</p>
<div c ass="examp emeta ibheader"><b>Library:</b> <a href="/wiki/Category:Tc i
b" tit e="Category:Tc ib">Tc ib</a> <sma >(<b>Package:</b> struct:: ist)</sma
></div>
<pre c ass="tc high ighted_source"><span c ass="kw2">package</span> require str
uct::<span c ass="kw2"> ist</span><br /><span c ass="co1"># Encoding the various
expression trees that are possib e</span><br /><span c ass="kw1">set</span> pat
terns <span c ass="br0">{</span><br />
<span c ass="br0">{</span><s
pan c ass="br0">(</span><span c ass="br0">(</span>A x B<span c ass="br0"
>)</span> y C<span c ass="br0">)</span> z D<span c ass="br0">}</spa
n><br />
<span c ass="br0">{</span><span c ass="br0">(</span>A x <s
pan c ass="br0">(</span>B y C<span c ass="br0">)</span><span c ass="br0"
>)</span> z D<span c ass="br0">}</span><br />
<span c ass="br0">
23;</span><span c ass="br0">(</span>A x B<span c ass="br0">)</span> y <s
pan c ass="br0">(</span>C z D<span c ass="br0">)</span><span c ass="br0"
>}</span><br />
<span c ass="br0">{</span>A x <span c ass="br0">&
#40;</span><span c ass="br0">(</span>B y C<span c ass="br0">)</span> z D
<span c ass="br0">)</span><span c ass="br0">}</span><br />
<span c
ass="br0">{</span>A x <span c ass="br0">(</span>B y <span c ass="br0">
(</span>C z D<span c ass="br0">)</span><span c ass="br0">)</span><sp
an c ass="br0">}</span><br /><span c ass="br0">}</span><br /><span c a
ss="co1"># Encoding the various permutations of digits</span><br /><span c ass="
kw1">set</span> permutations <span c ass="br0">[</span>struct::<span c ass="
kw2"> ist</span> map <span c ass="br0">[</span>struct::<span c ass="kw2"> is
</div>
<!-- /printfooter -->
<!-- cat inks -->
<div id='cat inks' c ass='cat inks'><div id="mwnorma -cat inks" c ass="mw-norma -cat inks"><a href="/wiki/Specia :Categories" t
it e="Specia :Categories">Categories</a>: <u >< i><a href="/wiki/Category:Progra
mming_Tasks" tit e="Category:Programming Tasks">Programming Tasks</a></ i>< i><a
href="/wiki/Category:So utions_by_Programming_Task" tit e="Category:So utions b
y Programming Task">So utions by Programming Task</a></ i>< i><a href="/wiki/Cat
egory:ABAP" tit e="Category:ABAP">ABAP</a></ i>< i><a href="/wiki/Category:Argi
e" tit e="Category:Argi e">Argi e</a></ i>< i><a href="/wiki/Category:AutoHotkey
" tit e="Category:AutoHotkey">AutoHotkey</a></ i>< i><a href="/wiki/Category:BBC
_BASIC" tit e="Category:BBC BASIC">BBC BASIC</a></ i>< i><a href="/wiki/Category
:C" tit e="Category:C">C</a></ i>< i><a href="/wiki/Category:C%2B%2B" tit e="Cat
egory:C++">C++</a></ i>< i><a href="/wiki/Category:C ojure" tit e="Category:C oj
ure">C ojure</a></ i>< i><a href="/wiki/Category:CoffeeScript" tit e="Category:C
offeeScript">CoffeeScript</a></ i>< i><a href="/wiki/Category:Common_Lisp" tit e
="Category:Common Lisp">Common Lisp</a></ i>< i><a href="/wiki/Category:D" tit e
="Category:D">D</a></ i>< i><a href="/wiki/Category:ERRE" tit e="Category:ERRE">
ERRE</a></ i>< i><a href="/wiki/Category:Eu er_Math_Too box" tit e="Category:Eu
er Math Too box">Eu er Math Too box</a></ i>< i><a href="/wiki/Category:F_Sharp"
tit e="Category:F Sharp">F Sharp</a></ i>< i><a href="/wiki/Category:Fortran" t
it e="Category:Fortran">Fortran</a></ i>< i><a href="/wiki/Category:GAP" tit e="
Category:GAP">GAP</a></ i>< i><a href="/wiki/Category:Go" tit e="Category:Go">Go
</a></ i>< i><a href="/wiki/Category:Gosu" tit e="Category:Gosu">Gosu</a></ i><
i><a href="/wiki/Category:Haske " tit e="Category:Haske ">Haske </a></ i>< i>
<a href="/wiki/Category:Icon" tit e="Category:Icon">Icon</a></ i>< i><a href="/w
iki/Category:Unicon" tit e="Category:Unicon">Unicon</a></ i>< i><a href="/wiki/C
ategory:Icon_Programming_Library" tit e="Category:Icon Programming Library">Icon
Programming Library</a></ i>< i><a href="/wiki/Category:J" tit e="Category:J">J
</a></ i>< i><a href="/wiki/Category:Java" tit e="Category:Java">Java</a></ i><
i><a href="/wiki/Category:JavaScript" tit e="Category:JavaScript">JavaScript</a>
</ i>< i><a href="/wiki/Category:Jq" tit e="Category:Jq">Jq</a></ i>< i><a href=
"/wiki/Category:Ju ia" tit e="Category:Ju ia">Ju ia</a></ i>< i><a href="/wiki/C
ategory:Liberty_BASIC" tit e="Category:Liberty BASIC">Liberty BASIC</a></ i>< i>
<a href="/wiki/Category:Lua" tit e="Category:Lua">Lua</a></ i>< i><a href="/wiki
/Category:Mathematica" tit e="Category:Mathematica">Mathematica</a></ i>< i><a h
ref="/wiki/Category:Wo fram_Language" tit e="Category:Wo fram Language">Wo fram
Language</a></ i>< i><a href="/wiki/Category:OCam " tit e="Category:OCam ">OCam
</a></ i>< i><a href="/wiki/Category:Per " tit e="Category:Per ">Per </a></ i><
i><a href="/wiki/Category:Per _6" tit e="Category:Per 6">Per 6</a></ i>< i><a
href="/wiki/Category:Phix" tit e="Category:Phix">Phix</a></ i>< i><a href="/wiki
/Category:PicoLisp" tit e="Category:PicoLisp">PicoLisp</a></ i>< i><a href="/wik
i/Category:ProDOS" tit e="Category:ProDOS">ProDOS</a></ i>< i><a href="/wiki/Cat
egory:Pro og" tit e="Category:Pro og">Pro og</a></ i>< i><a href="/wiki/Category
:Python" tit e="Category:Python">Python</a></ i>< i><a href="/wiki/Category:R" t
it e="Category:R">R</a></ i>< i><a href="/wiki/Category:Racket" tit e="Category:
Racket">Racket</a></ i>< i><a href="/wiki/Category:REXX" tit e="Category:REXX">R
EXX</a></ i>< i><a href="/wiki/Category:Ruby" tit e="Category:Ruby">Ruby</a></ i
>< i><a href="/wiki/Category:Sca a" tit e="Category:Sca a">Sca a</a></ i>< i><a
href="/wiki/Category:Sidef" tit e="Category:Sidef">Sidef</a></ i>< i><a href="/w
iki/Category:Swift" tit e="Category:Swift">Swift</a></ i>< i><a href="/wiki/Cate
gory:Tc " tit e="Category:Tc ">Tc </a></ i>< i><a href="/wiki/Category:Tc ib" t
it e="Category:Tc ib">Tc ib</a></ i>< i><a href="/wiki/Category:Ursa a" tit e=
"Category:Ursa a">Ursa a</a></ i>< i><a href="/wiki/Category:Zk " tit e="Categor
y:Zk ">Zk </a></ i>< i><a href="/wiki/Category:GUISS/Omit" tit e="Category:GUISS
/Omit">GUISS/Omit</a></ i>< i><a href="/wiki/Category:ML/I/Omit" tit e="Category
:ML/I/Omit">ML/I/Omit</a></ i></u ></div></div>
<!-- /ca
t inks -->
<u >
< i id="ca-view" c ass="se ected"><span>
<a href="/wiki/24_game/So ve" >Read</a></span></ i>
< i id="ca-edit"><span><a href="/mw/inde
x.php?tit e=24_game/So ve&action=edit" tit e="You can edit this page. P eas
e use the preview button before saving [e]" accesskey="e">Edit</a></span></ i>
< i id="ca-history" c ass="co apsib e">
<span><a href="/mw/index.php?tit e=24_game/So ve&action=history" tit e="Pas
t revisions of this page [h]" accesskey="h">View history</a></span></ i>
</u >
</div>
<!-- /0 -->
<!-- 1 -->
<div id="p-cactions" c ass="vectorMenu emptyPort et">
<h5><span>Actions</span><a href="#"></a></h5>
<div c ass="menu">
<u >
</u >
</div>
</div>
<!-- /1 -->
<!-- 2 -->
<div id="p-search">
<h5>< abe for="searchInput">Search</ abe ></h5>
<form action="/mw/index.php" id="searchform">
<div>
<input type="search" name="search" tit e="Search Rosetta
Code [f]" accesskey="f" id="searchInput" />
<input type="sub
mit" name="go" va ue="Go" tit e="Go to a page with this exact name if exists" id
="searchGoButton" c ass="searchButton" />
<input type="sub
mit" name="fu text" va ue="Search" tit e="Search the pages for this text" id="m
w-searchButton" c ass="searchButton" />
<input t
ype='hidden' name="tit e" va ue="Specia :Search"/>
</div>
</form>
</div>
<!-- /2 -->
</div>
</div>
<!-- /header -->
<!-- pane -->
<div id="mw-pane " c ass="noprint">
<!-- ogo -->
<div id="p- ogo"><a sty e="background-im
age: ur (/mw/tit e.png);" href="/wiki/Rosetta_Code" tit e="Visit the main page"
></a></div>
<!-- / ogo -->
<!-- Community -->
<div c ass="porta " id='p-Community'>
<h5>Community</h5>
<div c ass="body">
<u >
< i id="n-Twitter"><a href="http://twitter.com/rosettaco
de" re ="nofo ow">Twitter</a></ i>
at/IRC</a></ i>
xt/rocketscript"></script>
</div>
</div>