# Make $21$ out of $1,5,6,7$ (challenge).

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$

-
$6 / (1 - 5/7)$ ${}$ – Cocopuffs Jun 12 '13 at 19:33
@Cocopuffs Arghh you beat me! – Kaish Jun 12 '13 at 19:35
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... – user81566 Jun 12 '13 at 20:43

#!/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

-
The text passage presents a mathematical challenge to form the number 21 using the numbers 1, 5, 6, and 7 exactly once with arithmetic operations. It includes an example of an incorrect solution and a correct solution provided in a comment.
single_question_with_answer
Given a text passage, determine:
    1. If it contains a mathematical question (including word problems or calculations)
    2. If an answer to that mathematical question is provided in the text

First, describe the content structure you found in 1-2 sentences.

Then provide your analysis in the following format:
TYPE: <one of the following values>
- NO_QUESTION
- SINGLE_QUESTION
- SINGLE_QUESTION_WITH_ANSWER
- MULTIPLE_QUESTIONS
- MULTIPLE_QUESTIONS_WITH_ANSWERS
system
# Make $21$ out of $1,5,6,7$ (challenge).

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$

-
$6 / (1 - 5/7)$ ${}$ – Cocopuffs Jun 12 '13 at 19:33
@Cocopuffs Arghh you beat me! – Kaish Jun 12 '13 at 19:35
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... – user81566 Jun 12 '13 at 20:43

#!/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

-
user
The text passage presents a mathematical challenge to form the number 21 using the numbers 1, 5, 6, and 7 exactly once with arithmetic operations. It includes an example of an incorrect solution and a correct solution provided in a comment.

TYPE: SINGLE_QUESTION_WITH_ANSWER