How to resolve the algorithm 24 game/Solve step by step in the Liberty BASIC programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm 24 game/Solve step by step in the Liberty BASIC programming language

Table of Contents

Problem Statement

Write a program that takes four digits, either from user input or by random generation, and computes arithmetic expressions following the rules of the 24 game. Show examples of solutions generated by the program.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm 24 game/Solve step by step in the Liberty BASIC programming language

Source code in the liberty programming language

dim d(4)
input "Enter 4 digits: "; a$
nD=0
for i =1 to len(a$)
    c$=mid$(a$,i,1)
    if instr("123456789",c$) then
        nD=nD+1
        d(nD)=val(c$)
    end if
next
'for i = 1 to 4
'    print d(i);
'next

'precompute permutations. Dumb way.
nPerm = 1*2*3*4
dim perm(nPerm, 4)
n = 0
for i = 1 to 4
    for j = 1 to 4
        for k = 1 to 4
            for l = 1 to 4
            'valid permutation (no dupes?)
                if i<>j and i<>k and i<>l _
                    and j<>k and j<>l _
                        and k<>l then
                    n=n+1
                    '
'                    perm(n,1)=i
'                    perm(n,2)=j
'                    perm(n,3)=k
'                    perm(n,4)=l
                    'actually, we can as well permute given digits
                    perm(n,1)=d(i)
                    perm(n,2)=d(j)
                    perm(n,3)=d(k)
                    perm(n,4)=d(l)
                end if
            next
        next
    next
next
'check if permutations look OK. They are
'for i =1 to n
'    print i,
'    for j =1 to 4: print perm(i,j);:next
'    print
'next

'possible brackets
NBrackets = 11
dim Brakets$(NBrackets)
DATA "4#4#4#4"
DATA "(4#4)#4#4"
DATA "4#(4#4)#4"
DATA "4#4#(4#4)"
DATA "(4#4)#(4#4)"
DATA "(4#4#4)#4"
DATA "4#(4#4#4)"
DATA "((4#4)#4)#4"
DATA "(4#(4#4))#4"
DATA "4#((4#4)#4)"
DATA "4#(4#(4#4))"
for i = 1 to NBrackets
    read Tmpl$: Brakets$(i) = Tmpl$
next

'operations: full search
count = 0
Ops$="+ - * /"
dim Op$(3)
For op1=1 to 4
    Op$(1)=word$(Ops$,op1)
    For op2=1 to 4
        Op$(2)=word$(Ops$,op2)
        For op3=1 to 4
            Op$(3)=word$(Ops$,op3)
            'print "*"
            'substitute all brackets
            for t = 1 to NBrackets
                Tmpl$=Brakets$(t)
                'print , Tmpl$
                'now, substitute all digits: permutations.
                for p = 1 to nPerm
                    res$= ""
                    nOp=0
                    nD=0
                    for i = 1 to len(Tmpl$)
                        c$ = mid$(Tmpl$, i, 1)
                        select case c$
                        case "#"                'operations
                            nOp = nOp+1
                            res$ = res$+Op$(nOp)
                        case "4"                'digits
                            nD = nOp+1
                            res$ = res$; perm(p,nD)
                        case else               'brackets goes here
                            res$ = res$+ c$ 
                        end select
                    next
                    'print,, res$
                    'eval here
                    if evalWithErrCheck(res$) = 24 then
                        print "24 = ";res$
                        end 'comment it out if you want to see all versions
                    end if
                    count = count + 1
                next
            next
        Next
    Next
next

print "If you see this, probably task cannot be solved with these digits"
'print count
end

function evalWithErrCheck(expr$)
    on error goto [handler]
    evalWithErrCheck=eval(expr$)
    exit function
[handler]
end function

  

You may also check:How to resolve the algorithm Mutex step by step in the BBC BASIC programming language
You may also check:How to resolve the algorithm Bitmap/Read a PPM file step by step in the 11l programming language
You may also check:How to resolve the algorithm Sorting algorithms/Bubble sort step by step in the NetRexx programming language
You may also check:How to resolve the algorithm Sorting algorithms/Permutation sort step by step in the PowerShell programming language
You may also check:How to resolve the algorithm Associative array/Iteration step by step in the Picat programming language