3
$\begingroup$

Here is a small mathematical challenge.

You have to use once and only once each of the four numbers $1,5,6,7$ in order to obtain, via the help of the usual operators ($+,-,/,*$ together with parenthesis) in order to obtain the number $21$.

Example of an unsuccessful computation: $6*5-7-1=22\neq 21$

$\endgroup$
  • 20
    $\begingroup$ $6 / (1 - 5/7)$ ${}$ $\endgroup$ – Cocopuffs Jun 12 '13 at 19:33
  • $\begingroup$ @Cocopuffs Arghh you beat me! $\endgroup$ – Kaish Jun 12 '13 at 19:35
  • $\begingroup$ Hint : Give this problem to a (non-)mathematician friend and bet that he can't solve it in 1 hour without googling it. You may often win... $\endgroup$ – user81566 Jun 12 '13 at 20:43
1
$\begingroup$

See Generate a number by using a given list of numbers and arithmetic operators

This is an adjusted part of the answer from Ray

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fractions import Fraction

L=[Fraction(1),Fraction(5),Fraction(6),Fraction(7)]
O={'+':10,'-':10,'*':10,'/':10}
N=Fraction(21)

P = {'+':lambda x,y:x+y,
     '-':lambda x,y:x-y,
     '*':lambda x,y:x*y,
     '/':lambda x,y:x/y}

def postfix_search(rest, stk):
    if len(stk) >= 2:
        y = (v2, r2) = stk.pop()
        x = (v1, r1) = stk.pop()
        for opr in O:
            if O[opr] > 0 and not (opr == '/' and v2 == 0):
                stk += [(P[opr](v1, v2), '('+r1+opr+r2+')')]
                O[opr] -= 1
                if postfix_search(rest, stk): return 1
                O[opr] += 1
                stk.pop()
        stk += [x, y]
    elif not rest:
        v, r = stk[0]
        if v == N: print(r)
        return v == N
    for x in list(rest):
        rest.remove(x)
        stk += [x]
        if postfix_search(rest, stk):
            return True
        stk.pop()
        rest += [x]

if __name__ == "__main__":
    postfix_search(list(zip(L, map(str, L))), [])

Run

$ ./generate.py
(6/(1-(5/7)))

My ideas with arbitrary functions

$\varphi$ is Eulers totient function

  • $\varphi(5 \cdot 6-7)-1 = \varphi(23)-1 = 22-1 = 21$
  • $\varphi((1+7) \cdot 6)+5= \varphi(48)+5=16+5=21$
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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