diff --git a/ipynb/Countdown.ipynb b/ipynb/Countdown.ipynb index b6c20a9..625299f 100644 --- a/ipynb/Countdown.ipynb +++ b/ipynb/Countdown.ipynb @@ -206,8 +206,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 12.3 s, sys: 263 ms, total: 12.6 s\n", - "Wall time: 12.6 s\n" + "CPU times: user 11.5 s, sys: 286 ms, total: 11.8 s\n", + "Wall time: 11.8 s\n" ] }, { @@ -861,7 +861,7 @@ { "data": { "text/plain": [ - "{1: '1', 2: '2', -1: '(1-2)', 3: '(1+2)', 0.5: '(1/2)'}" + "{1: '1', 2: '2', -1: '(1-2)', 0.5: '(1/2)', 3: '(1+2)'}" ] }, "execution_count": 18, @@ -909,7 +909,7 @@ " N = limit or unmakeable(table)\n", " show_columns([f'{i:3}: {unbracket(table[i])}' for i in range(N)])\n", "\n", - "def show_columns(items, linelength=116):\n", + "def show_columns(items, linelength=118):\n", " \"\"\"Print the items in as many columns that will fit within `linelength`.\"\"\"\n", " width = max(map(len, items))\n", " cols = linelength // width\n", @@ -952,20 +952,20 @@ "text": [ "Can make 0 to 72 with (4, 4, 4, 4), ops=\"+-*/^_√!.,\", permute=False. [721,704 table entries]\n", "\n", - " 0: 44-44 15: 4+(44/4) 30: (4*(4+4))-√4 45: 44+(4/4) 60: 44+(4*4) \n", + " 0: 44-44 15: 4+(44/4) 30: (4+(4+4))/.4 45: 44+(4/4) 60: 44+(4*4) \n", " 1: 44/44 16: .4*(44-4) 31: 4!+((4+4!)/4) 46: 4-(√4-44) 61: (4/4)+(4!/.4) \n", " 2: (4+44)/4! 17: (4!+44)/4 32: 44-(4!/√4) 47: 4!+(4!-(4/4)) 62: (4*(4*4))-√4 \n", " 3: √((44/4)-√4) 18: (44/√4)-4 33: 4+(4!+(√4/.4)) 48: 44+√(4*4) 63: ((4^4)-4)/4 \n", " 4: 4!-(44-4!) 19: 4!-(4+(4/4)) 34: 44-(4/.4) 49: 44+(√4/.4) 64: 4!-(4-44) \n", " 5: (44-4!)/4 20: (44-4)/√4 35: 4!+(44/4) 50: 4+(√4+44) 65: (4+(4^4))/4 \n", " 6: √(44-(4+4)) 21: (4+4.4)/.4 36: 44-(4+4) 51: (.4-(4-4!))/.4 66: 4!-(√4-44) \n", - " 7: (44/4)-4 22: √4/(4/44) 37: 4!+((√4+4!)/√4) 52: 4+(4+44) 67: √4+((√4+4!)/.4)\n", + " 7: (44/4)-4 22: √4/(4/44) 37: 4!+((4!+√4)/√4) 52: 4+(4+44) 67: √4+((4!+√4)/.4)\n", " 8: 4+(4.4-.4) 23: (√4+44)/√4 38: 44-(4+√4) 53: 4!+(4!+(√4/.4)) 68: 44+√(4*4)! \n", - " 9: (44/4)-√4 24: 4+(44-4!) 39: 44-(√4/.4) 54: 44+(4/.4) 69: 4+((√4+4!)/.4) \n", - " 10: 44/4.4 25: 4!+(4^(4-4)) 40: 44-√(4*4) 55: 44/(.4+.4) 70: √4+(4!+44) \n", + " 9: (44/4)-√4 24: 4+(44-4!) 39: 44-(√4/.4) 54: 44+(4/.4) 69: 4+((4!+√4)/.4) \n", + " 10: 44/4.4 25: 4!+(4^(4-4)) 40: 44-√(4*4) 55: 44/(.4+.4) 70: 4!+(√4+44) \n", " 11: 44/√(4*4) 26: 4+(44/√4) 41: (.4+(4*4))/.4 56: 44+(4!/√4) 71: (4!+4.4)/.4 \n", " 12: (4+44)/4 27: 4+(4!-(4/4)) 42: √4-(4-44) 57: ((.4+4!)/.4)-4 72: 4+(4!+44) \n", - " 13: √4+(44/4) 28: 44-(4*4) 43: 44-(4/4) 58: ((4^4)-4!)/4 \n", + " 13: 4!-(44/4) 28: 44-(4*4) 43: 44-(4/4) 58: ((4^4)-4!)/4 \n", " 14: 4.4+(.4*4!) 29: 4+(4!+(4/4)) 44: √44*√44 59: (4!/.4)-(4/4) \n" ] } @@ -1062,11 +1062,11 @@ "text": [ "Can make 0 to 30 with (2, 2, 2, 2), ops=\"+-*/^_√!.,\", permute=False. [112,543 table entries]\n", "\n", - " 0: 22-22 6: √((22/2)-2)! 12: (2+22)/2 18: 22-(2*2) 24: 2+(√22^2) 30: (2+(2*2))/.2 \n", + " 0: 22-22 6: √((22/2)-2)! 12: (2+22)/2 18: 22-(2^2) 24: 2+(√22^2) 30: (2+(2^2))/.2 \n", " 1: 22/22 7: 2+(2/(2*.2)) 13: 2+(22/2) 19: (2+(2-.2))/.2 25: (2-2.2)^-2 \n", - " 2: (2*2)!-22 8: 2+(2+(2*2)) 14: (2^(2*2))-2 20: 22-(√2^2) 26: 2+(2+22) \n", + " 2: (2^2)!-22 8: 2+(2+(2^2)) 14: (2^(2^2))-2 20: 22-(√2^2) 26: 2+(2+22) \n", " 3: √((22/2)-2) 9: (22/2)-2 15: (2+(2/2))/.2 21: 22-(2/2) 27: 22+(√.2^-2) \n", - " 4: .2*(22-2) 10: 22/2.2 16: 2*(2*(2*2)) 22: √22*√22 28: 2+(2+(2*2)!) \n", + " 4: .2*(22-2) 10: 22/2.2 16: 2*(2*(2^2)) 22: √22*√22 28: 2+(2+(2^2)!) \n", " 5: 2+(2+(2/2)) 11: 22/(√2^2) 17: 22-(√.2^-2) 23: 22+(2/2) 29: 2+(2+(.2^-2))\n" ] } @@ -1151,8 +1151,8 @@ " 2: 5!/(5+55) 9: 5+(5-(5/5)) 16: 5+(55/5) 23: 55-(.5^-5) 30: 55-(5*5) 37: 5+(.5^-√(5*5))\n", " 3: 5.5-(5*.5) 10: 55/5.5 17: 5+(5!/(5+5)) 24: √(5+(55/5))! 31: 55-(5!/5) 38: ((5!/5)-5)/.5 \n", " 4: √(5+(55/5)) 11: 5.5+5.5 18: ((5!-5)/5)-5 25: .5*(55-5) 32: (5.5-5)^-5 \n", - " 5: (.5*5!)-55 12: (5+55)/5 19: (5!-(5*5))/5 26: (5*5)+(5/5) 33: .5*(5!*.55) \n", - " 6: (55/5)-5 13: (5!-55)/5 20: 5+(5+(5+5)) 27: (5*5.5)-.5 34: 5+(5+(5!/5)) \n" + " 5: (.5*5!)-55 12: (5+55)/5 19: (5!-(5*5))/5 26: (5/5)+(5*5) 33: .5*(5!*.55) \n", + " 6: (55/5)-5 13: (5!-55)/5 20: 5*(5-(5/5)) 27: (5*5.5)-.5 34: 5+(5+(5!/5)) \n" ] } ], @@ -1193,8 +1193,7 @@ " for i in reversed(range(11)):\n", " print(f'{i:2d}:', *[countdown(i, year) for year in years])\n", " \n", - "def digits(n: int) -> Numbers: return tuple(int(d) for d in str(n))\n", - " " + "def digits(n: int) -> Numbers: return tuple(int(d) for d in str(n))" ] }, { @@ -1206,17 +1205,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "10: 2-(0-(1*8)) 20-(1+9) 20/(2-0) 20/(2*1) 20/√(2*2) √(20*(2+3)) 20*(2/4) \n", + "10: 2-(0-(1*8)) 20-(1+9) 20/(2-0) 20/(2/1) 20/√(2+2) √(20*(2+3)) 20*(2/4) \n", " 9: 2+(0-(1-8)) (2*0)+(1*9) (20/2)-0! (20/2)-1 (20-2)/2 2+(0!+(2*3)) (20-2)/√4 \n", " 8: (2*0)+(1*8) (2*0)-(1-9) 2-(0-(2+0!)!) 2-(0-(2+1)!) (20/2)-2 20-(2*3!) (20/2)-√4 \n", - " 7: (2*0)-(1-8) (20+1)/√9 (2*(0!+2))+0! (2*(0!+2))+1 2+(0!+(2*2)) (20/2)-3 2+√(0!+24) \n", - " 6: √(2*(0+18)) (2+(0*19)!)! (2+(0*20)!)! (2+(0*21)!)! √((20-2)*2) (-20+23)! (20/2)-4 \n", - " 5: 2-(0-√(1+8)) 20/(1+√9) 2-(0-(2+0!)) 2-(0-(2+1)) 20/(2*2) √(2-(0-23)) 20/(2*√4) \n", - " 4: √(-2-(0-18)) √(20-(1+√9)) 2-(0-(2-0)) 2-(0-(2*1)) √(20-(2*2)) 20/(2+3) -20+24 \n", - " 3: 2+(0*18)! 2+(0*19)! 2+(0*20)! 2+(0*21)! 2+(0*22)! -20+23 2+(0*24)! \n", - " 2: 20-18 2-(0*19) 2-(0*20) 2-(0*21) -20+22 2-(0*23) √(-20+24) \n", - " 1: 2-(0*18)! 20-19 20/20 -20+21 2-(0*22)! 2-(0*23)! 2-(0*24)! \n", - " 0: 2*(0*18) 2*(0*19) 20-20 2*(0*21) 2*(0*22) 2*(0*23) 2*(0*24) \n" + " 7: (2*0)-(1-8) (20+1)/√9 (2*(0!+2))+0! (2*(0!+2))+1 2+(0!+(2+2)) (20/2)-3 2+√(0!+24) \n", + " 6: √(2*(0+18)) (2+(0/19)!)! (2+(0/20)!)! (2+(0/21)!)! √((20-2)*2) (-20+23)! (20/2)-4 \n", + " 5: 2-(0-√(1+8)) 20/(1+√9) 2-(0-(2+0!)) 2-(0-(2+1)) 20/(2+2) √(2-(0-23)) 20/(2+√4) \n", + " 4: √(-2-(0-18)) √(20-(1+√9)) 2-(0-(2-0)) 2-(0-(2/1)) √(20-(2+2)) 20/(2+3) -20+24 \n", + " 3: 2+(0/18)! 2+(0/19)! 2+(0/20)! 2+(0/21)! 2+(0/22)! -20+23 2+(0/24)! \n", + " 2: 20-18 2-(0/19) 2-(0/20) 2-(0/21) -20+22 2-(0/23) √(-20+24) \n", + " 1: 2-(0/18)! 20-19 20/20 -20+21 2-(0/22)! 2-(0/23)! 2-(0/24)! \n", + " 0: 2*(0/18) 2*(0/19) 20-20 2*(0/21) 2*(0/22) 2*(0/23) 2*(0/24) \n" ] } ], @@ -1237,13 +1236,13 @@ " 9: 2-(0!-(2+6)) √((2+0!)*27) (2/(0+2))+8 -20+29 (2+0!)*(3-0) 2-(0-(3!+1)) 2+(0!+(3*2)) \n", " 8: 20-(2*6) (2/(0+2))+7 -20+28 20-(2*√9!) 2*(0+(3+0!)) √(2*(0!+31)) 20-(3!*2) \n", " 7: 2+√(-0!+26) -20+27 (2/(0-2))+8 √(20+29) (2*(0+3))+0! (2*(0+3))+1 (20-3!)/2 \n", - " 6: -20+26 20-(2*7) √(20+(2*8)) √(-20+29)! (2+(0*30)!)! (2+(0*31)!)! (2+(0*32)!)! \n", + " 6: -20+26 20-(2*7) √(20+(2*8)) √(-20+29)! (2+(0/30)!)! (2+(0/31)!)! (2+(0/32)!)! \n", " 5: 20/(-2+6) √(20-(2-7)) 20*(2/8) √(20+(2+√9)) 20/(3+0!) 20/(3+1) 20/(3!-2) \n", " 4: (20/2)-6 20/(-2+7) 20-(2*8) 20/(2+√9) 20/(3!-0!) 20/(3!-1) 20/(3+2) \n", - " 3: (20-2)/6 (20/2)-7 2+(0*28)! √(-20+29) 2+(0*30)! 2+(0*31)! 2+(0*32)! \n", - " 2: 2-(0*26) 2-(0*27) 2-(0*28) 2-(0*29) 2-(0*30) 2-(0*31) 2-(0*32) \n", - " 1: 2-(0*26)! 2-(0*27)! 2-(0*28)! (20/2)-9 (203*0)! 2-(0*31)! 2-(0*32)! \n", - " 0: 2*(0*26) 2*(0*27) 2*(0*28) 2*(0*29) 203*0 2*(0*31) 2*(0*32) \n" + " 3: (20-2)/6 (20/2)-7 2+(0/28)! √(-20+29) 2+(0/30)! 2+(0/31)! 2+(0/32)! \n", + " 2: 2-(0/26) 2-(0/27) 2-(0/28) 2-(0/29) 2-(0/30) 2-(0/31) 2-(0/32) \n", + " 1: 2-(0/26)! 2-(0/27)! 2-(0/28)! (20/2)-9 (203*0)! 2-(0/31)! 2-(0/32)! \n", + " 0: 2*(0/26) 2*(0/27) 2*(0/28) 2*(0/29) 203*0 2*(0/31) 2*(0/32) \n" ] } ], @@ -1353,12 +1352,12 @@ " '((2^3)+(8+8))',\n", " '((8-(3+2))*8)',\n", " '((8^2)/(8/3))',\n", - " '(3*((8*2)-8))',\n", + " '(3*((8^2)/8))',\n", " '(3/(2/(8+8)))',\n", " '(3/(8/(8^2)))',\n", - " '(8*(8-(2+3)))',\n", " '(8*(8-(3+2)))',\n", - " '(8+((2^3)+8))'}" + " '(8+((2^3)+8))',\n", + " '(8+(8+(2^3)))'}" ] }, "execution_count": 30, @@ -1439,10 +1438,10 @@ " '(2*(6*(6/3)))',\n", " '(2*(6/(3/6)))',\n", " '(2/(3/(6*6)))',\n", + " '(6*(2/(3/6)))',\n", + " '(6*(2^(6/3)))',\n", " '(6*(6*(2/3)))',\n", " '(6*(6/(3/2)))',\n", - " '(6+(2*(3+6)))',\n", - " '(6+(2*(6+3)))',\n", " '(6/(3/(2*6)))',\n", " '(6/(3/(6*2)))'}" ] @@ -1559,6 +1558,26 @@ "can_make(24, (9, 7, 7, 7), '+-*/^!')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Clearing the Expressions Cache\n", + "\n", + "This seems like a good time to clear the caches:" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "expressions.cache_clear()\n", + "digit_expressions.cache_clear()\n", + "expression_counts.cache_clear()" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1569,126 +1588,150 @@ "\n", "**Aarati Marino** writes \"the kids and I just devised a cool game to play in the car this morning. Just take the last 4 digits of the license plate in front of you, and use addition, subtraction, multiplication, and division to make 24.\" \n", "\n", - "We can find all the license plates for which there is a solution:" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "466 out of 715 distinct license plates (65%) can be solved:\n", - "\n", - "0038: 0-(0-(3*8)) 1149: (1-4)*(1-9) 1458: (1+5)*(8-4) 2348: (2-(3-4))*8 3355: (5*5)-(3/3) 4477: (4-(4/7))*7 \n", - "0046: 0-(0-(4*6)) 1155: 1*((5*5)-1) 1459: ((4-1)*5)+9 2349: 2/(3/(4*9)) 3356: 3+((3*5)+6) 4478: 4+((4*7)-8) \n", - "0128: 0+((1+2)*8) 1156: 1*((5-1)*6) 1466: ((1+4)*6)-6 2355: 2-(3-(5*5)) 3357: 3*((3*5)-7) 4479: 4*(4-(7-9)) \n", - "0136: 0+((1+3)*6) 1157: (1+1)*(5+7) 1467: (1-(4-7))*6 2356: (2-(3-5))*6 3359: (3+3)*(9-5) 4488: 4+(4+(8+8)) \n", - "0137: 0+((1+7)*3) 1158: (5-(1+1))*8 1468: (1-(4-6))*8 2357: 2+((3*5)+7) 3366: 3*((6/3)+6) 4489: (4*9)-(4+8) \n", - "0138: 0+(1*(3*8)) 1166: (1+1)*(6+6) 1469: 6*(9-(1+4)) 2358: (2*(3+5))+8 3367: 3-((3-6)*7) 4555: 4-(5-(5*5)) \n", - "0139: 0-((1-9)*3) 1168: 6/((1+1)/8) 1477: (1+7)*(7-4) 2359: 2*(3*(9-5)) 3368: ((3*3)-6)*8 4556: 4*(5-(5-6)) \n", - "0145: 0+((1+5)*4) 1169: ((1+1)*9)+6 1478: 1*((7-4)*8) 2366: 2/(3/(6*6)) 3369: (3*3)+(6+9) 4557: 4*(7-(5/5)) \n", - "0146: 0+(1*(4*6)) 1188: ((1+1)*8)+8 1479: (1-9)*(4-7) 2367: ((2*7)-6)*3 3377: (3+(3/7))*7 4558: (4-(5/5))*8 \n", - "0147: 0-((1-7)*4) 1224: (1+2)*(2*4) 1488: 1*((4*8)-8) 2368: ((2+8)*3)-6 3378: (3*3)+(7+8) 4559: 4-(5*(5-9)) \n", - "0148: 0-((1-4)*8) 1225: (1+5)*(2*2) 1489: 1+((4*8)-9) 2369: 2*(6-(3-9)) 3379: 3+(7/(3/9)) 4566: 4*(5+(6/6)) \n", - "0155: 0-(1-(5*5)) 1226: 1*(2*(2*6)) 1555: (5-(1/5))*5 2377: (2*7)+(3+7) 3388: 8/(3-(8/3)) 4567: 4*(5-(6-7)) \n", - "0156: 0-((1-5)*6) 1227: 2*(2*(7-1)) 1556: ((1+5)*5)-6 2378: 2*(7-(3-8)) 3389: (3*(3+8))-9 4568: (4+(5-6))*8 \n", - "0226: 0+(2*(2*6)) 1228: (2-(1-2))*8 1559: (1+5)*(9-5) 2379: 2*((3*7)-9) 3399: 3+(3+(9+9)) 4569: 4+(5+(6+9)) \n", - "0234: 0+(2*(3*4)) 1229: (1+(2+9))*2 1566: 1*((5*6)-6) 2388: ((2*8)-8)*3 3444: ((3+4)*4)-4 4577: 4*(5+(7/7)) \n", - "0236: 0+((2+6)*3) 1233: (1+3)*(2*3) 1567: 1+((5*6)-7) 2389: 8/(2/(9-3)) 3445: 3+((4*4)+5) 4578: 4*(5-(7-8)) \n", - "0238: (0*2)+(3*8) 1234: 1*(2*(3*4)) 1568: (1-(5-8))*6 2399: (2*3)+(9+9) 3446: (3+(4/4))*6 4579: (4*7)+(5-9) \n", - "0239: 0+(2*(3+9)) 1235: (1+2)*(3+5) 1569: 1*(6*(9-5)) 2444: 2*(4+(4+4)) 3447: 3*((4/4)+7) 4588: 4*(5+(8/8)) \n", - "0244: 0+((2+4)*4) 1236: 1*((2+6)*3) 1578: (1-(5-7))*8 2445: ((2*5)-4)*4 3448: 3*(4-(4-8)) 4589: 4*(5-(8-9)) \n", - "0246: (0*2)+(4*6) 1237: 1+(2+(3*7)) 1579: (1-7)*(5-9) 2446: 2+((4*4)+6) 3449: 3*(9-(4/4)) 4599: 4*(5+(9/9)) \n", - "0248: 0+(2*(4+8)) 1238: (1+3)*(8-2) 1588: 1*((8-5)*8) 2447: 2*(4*(7-4)) 3455: 3-(4-(5*5)) 4666: 4*(6-(6-6)) \n", - "0257: 0+(2*(5+7)) 1239: 1*(2*(3+9)) 1589: (1-9)*(5-8) 2448: (2*(4*4))-8 3456: (3-(4-5))*6 4667: 4*(6*(7-6)) \n", - "0258: 0-((2-5)*8) 1244: 1*((2+4)*4) 1599: 1+(5+(9+9)) 2449: (4*(9-2))-4 3457: (3*4)+(5+7) 4668: 4+(6+(6+8)) \n", - "0266: 0+(2*(6+6)) 1245: (2-(1-5))*4 1666: ((6-1)*6)-6 2455: (2*(5+5))+4 3458: 3*((5-4)*8) 4669: (4*9)-(6+6) \n", - "0268: 0+(6/(2/8)) 1246: (2-1)*(4*6) 1668: 6/(1-(6/8)) 2456: (2*(4+5))+6 3459: 3*(4-(5-9)) 4677: 4*(6-(7-7)) \n", - "0269: 0+((2*9)+6) 1247: (1-(2-7))*4 1669: (1-(6-9))*6 2457: 4/(2/(5+7)) 3466: (3*4)+(6+6) 4678: (4+(6-7))*8 \n", - "0288: 0+((2*8)+8) 1248: 1*(2*(4+8)) 1679: (1+7)*(9-6) 2458: 2*((4*5)-8) 3468: 3*(4*(8-6)) 4679: 6/(4/(7+9)) \n", - "0334: 0+((3+3)*4) 1249: ((1+9)*2)+4 1688: (1-(6-8))*8 2459: (2+4)*(9-5) 3469: (3-(6-9))*4 4688: 4*(6-(8-8)) \n", - "0335: 0+(3*(3+5)) 1255: 1-(2-(5*5)) 1689: 1+(6+(8+9)) 2466: (2-(4-6))*6 3477: 3-((4-7)*7) 4689: 4*(6*(9-8)) \n", - "0337: 0+(3+(3*7)) 1256: (1-(2-5))*6 1699: 1*(6+(9+9)) 2467: 2+((4*7)-6) 3478: (4*(7-3))+8 4699: 4*(6-(9-9)) \n", - "0338: (0*3)+(3*8) 1257: 1*(2*(5+7)) 1779: 1+(7+(7+9)) 2468: 2/(4/(6*8)) 3479: (3*(4+7))-9 4777: 4*(7-(7/7)) \n", - "0339: 0-(3-(3*9)) 1258: 1*((5-2)*8) 1788: 1+(7+(8+8)) 2469: (2+(4/6))*9 3489: 3+(4+(8+9)) 4778: 4*(7+(7-8)) \n", - "0344: 0+(3*(4+4)) 1259: ((1+2)*5)+9 1789: 1*(7+(8+9)) 2477: (2*(7+7))-4 3499: (3*(9-4))+9 4788: 4*(7-(8/8)) \n", - "0346: (0*3)+(4*6) 1266: 1*(2*(6+6)) 1799: 7-(1-(9+9)) 2478: ((2*7)-8)*4 3556: (3*(5+5))-6 4789: 4*(7+(8-9)) \n", - "0348: (0*4)+(3*8) 1267: (1-7)*(2-6) 1888: 1*(8+(8+8)) 2479: (2*4)+(7+9) 3557: 3*((5/5)+7) 4799: 4*(7-(9/9)) \n", - "0349: 0-((3-9)*4) 1268: 1/(2/(6*8)) 1889: 8-(1-(8+9)) 2488: (2*4)+(8+8) 3558: 3*(5-(5-8)) 4888: (4-(8/8))*8 \n", - "0358: (0*5)+(3*8) 1269: 1*((2*9)+6) 2223: 2*(2*(2*3)) 2489: 8*(9-(2+4)) 3559: 3*(9-(5/5)) 4889: (4+(8-9))*8 \n", - "0359: 0+((3*5)+9) 1277: ((7*7)-1)/2 2224: 2*(2*(2+4)) 2499: 2+(4+(9+9)) 3566: (3-(5-6))*6 4899: (4-(9/9))*8 \n", - "0366: 0+((3*6)+6) 1278: 1+((2*8)+7) 2225: 2*(2+(2*5)) 2557: (2*7)+(5+5) 3567: 3*(6-(5-7)) 5555: (5*5)-(5/5) \n", - "0367: 0-((3-7)*6) 1279: 1+((2*7)+9) 2227: 2*((2*7)-2) 2558: (2+(5/5))*8 3568: 3*((6-5)*8) 5556: 5+((5*5)-6) \n", - "0368: 0-((3-6)*8) 1288: 1*((2*8)+8) 2228: 2*(2+(2+8)) 2559: (2*5)+(5+9) 3569: 3*(5-(6-9)) 5559: 5+(5+(5+9)) \n", - "0378: (0*7)+(3*8) 1289: (2*8)-(1-9) 2229: 2+(2*(2+9)) 2566: ((2*5)-6)*6 3578: 3-((5-8)*7) 5566: (5*5)-(6/6) \n", - "0388: (0*8)+(3*8) 1333: (1+3)*(3+3) 2233: 2*(2*(3+3)) 2567: (2-(5-7))*6 3579: 3+(5+(7+9)) 5567: (5*5)+(6-7) \n", - "0389: 0+(8/(3/9)) 1334: 1*((3+3)*4) 2234: (2+(2+4))*3 2568: 2+((5*6)-8) 3588: 3+(5+(8+8)) 5568: 5+(5+(6+8)) \n", - "0445: 0+(4+(4*5)) 1335: 1*(3*(3+5)) 2235: ((2*5)-2)*3 2569: (5/(2/6))+9 3589: (3*9)+(5-8) 5577: 5+(5+(7+7)) \n", - "0446: (0*4)+(4*6) 1336: ((1+6)*3)+3 2236: 2*((2*3)+6) 2577: (2*5)+(7+7) 3599: (3-9)*(5-9) 5578: (5*5)+(7-8) \n", - "0447: 0-(4-(4*7)) 1337: 1*(3+(3*7)) 2237: 2*(2+(3+7)) 2578: ((2*5)-7)*8 3666: (3+(6/6))*6 5588: (5*5)-(8/8) \n", - "0448: 0+((4*4)+8) 1338: ((1+8)*3)-3 2238: 2-(2-(3*8)) 2579: (5*7)-(2+9) 3667: 3*((6/6)+7) 5589: (5*5)+(8-9) \n", - "0456: (0*5)+(4*6) 1339: 1*((3*9)-3) 2239: (2+(2/3))*9 2588: (5*8)-(2*8) 3668: 3*(6-(6-8)) 5599: (5*5)-(9/9) \n", - "0466: (0*6)+(4*6) 1344: 1*(3*(4+4)) 2244: 2*((2*4)+4) 2589: 2+(5+(8+9)) 3669: 3+(6+(6+9)) 5666: (5-(6/6))*6 \n", - "0467: (0*7)+(4*6) 1345: 1+(3+(4*5)) 2245: 2+(2+(4*5)) 2666: (2*6)+(6+6) 3677: 3*(7-(6-7)) 5667: 5+(6+(6+7)) \n", - "0468: 0-((4-8)*6) 1346: 6/(1-(3/4)) 2246: 2-(2-(4*6)) 2667: (6+(6*7))/2 3678: 3+(6+(7+8)) 5668: 6-((5-8)*6) \n", - "0469: (0*9)+(4*6) 1347: ((1+3)*7)-4 2247: 2+(2*(4+7)) 2668: (2+(6/6))*8 3679: 3*(6-(7-9)) 5669: (6*9)-(5*6) \n", - "0478: 0-((4-7)*8) 1348: ((1+3)*4)+8 2248: (2*(2*4))+8 2669: (2+6)*(9-6) 3688: (3+(8/8))*6 5677: (5-(7/7))*6 \n", - "0488: 0+((4*8)-8) 1349: 1+((3*9)-4) 2249: 2+((2*9)+4) 2678: (2-(6-7))*8 3689: (3-(8-9))*6 5678: (5+7)*(8-6) \n", - "0566: 0+((5*6)-6) 1356: 1+((3*6)+5) 2255: 2*(2+(5+5)) 2679: 2+(6+(7+9)) 3699: (3*9)+(6-9) 5679: 6-((5-7)*9) \n", - "0569: 0-((5-9)*6) 1357: (1+5)*(7-3) 2256: 2+(2*(5+6)) 2688: 2+(6+(8+8)) 3777: 3+(7+(7+7)) 5688: (5+(6-8))*8 \n", - "0588: 0-((5-8)*8) 1358: 1+((3*5)+8) 2257: (2*5)+(2*7) 2689: 2/(6/(8*9)) 3778: 3*(7-(7-8)) 5689: (5+(8-9))*6 \n", - "0689: 0-((6-9)*8) 1359: 1*((3*5)+9) 2258: (2*(5+8))-2 2699: (2+(6/9))*9 3779: 3*(9-(7/7)) 5699: (5*(9-6))+9 \n", - "0699: 0+(6+(9+9)) 1366: 1*((3*6)+6) 2259: 2*(5-(2-9)) 2778: 2+(7+(7+8)) 3788: 3*(7+(8/8)) 5779: (5+7)*(9-7) \n", - "0789: 0+(7+(8+9)) 1367: 1*(6*(7-3)) 2266: (2*6)+(2*6) 2788: (2-(7-8))*8 3789: 3*(7-(8-9)) 5788: ((7-5)*8)+8 \n", - "0888: 0+(8+(8+8)) 1368: 1*((6-3)*8) 2267: (2*(2+7))+6 2789: (2*(7+9))-8 3799: 3*(7+(9/9)) 5789: (5+(7-9))*8 \n", - "1118: (1+(1+1))*8 1369: (1-9)*(3-6) 2268: (2*(2+6))+8 2888: (2*(8+8))-8 3888: 3*(8-(8-8)) 5888: (5*8)-(8+8) \n", - "1126: (1+1)*(2*6) 1377: (1-7)*(3-7) 2269: 2*((2*9)-6) 2889: (2-(8-9))*8 3889: 3*(8*(9-8)) 5889: 8/((8-5)/9) \n", - "1127: (1+2)*(1+7) 1378: 3/(1-(7/8)) 2277: 2*(7-(2-7)) 2899: (2+(9/9))*8 3899: 3*(8-(9-9)) 6666: 6+(6+(6+6)) \n", - "1128: 1*((1+2)*8) 1379: (1+7)/(3/9) 2278: 2+((2*7)+8) 3333: (3*(3*3))-3 3999: 3*(9-(9/9)) 6668: 6*(6+(6-8)) \n", - "1129: (1+2)*(9-1) 1388: ((1+3)*8)-8 2288: (2*(2*8))-8 3334: 3+(3*(3+4)) 4444: 4+(4+(4*4)) 6669: 6-(6*(6-9)) \n", - "1134: (1+1)*(3*4) 1389: 1/(3/(8*9)) 2289: (2*9)-(2-8) 3335: (3*3)+(3*5) 4445: 4*((4/4)+5) 6679: 6*(6+(7-9)) \n", - "1135: (1+3)*(1+5) 1399: (9-1)/(3/9) 2333: 2*(3+(3*3)) 3336: 3+(3+(3*6)) 4446: 4*(4-(4-6)) 6688: 6/((8-6)/8) \n", - "1136: 1*((1+3)*6) 1444: ((1+4)*4)+4 2335: 2*((3*5)-3) 3337: 3*((3/3)+7) 4447: (4+4)*(7-4) 6689: 6-((6-8)*9) \n", - "1137: 1*((1+7)*3) 1445: 1*(4+(4*5)) 2336: 2*(3+(3+6)) 3338: 3*(3-(3-8)) 4448: (4*(4+4))-8 6789: 6*(8/(9-7)) \n", - "1138: 1-(1-(3*8)) 1446: ((1+6)*4)-4 2337: 2*(3*(7-3)) 3339: 3*(9-(3/3)) 4449: 4-(4*(4-9)) 6799: 6-((7-9)*9) \n", - "1139: (1+1)*(3+9) 1447: 1+((4*4)+7) 2338: (2+(3/3))*8 3344: 3*((3*4)-4) 4455: (4+(4/5))*5 6888: 8-((6-8)*8) \n", - "1144: (1+(1+4))*4 1448: 1*((4*4)+8) 2339: ((2+3)*3)+9 3345: ((3/3)+5)*4 4456: 4*((5-4)*6) 6889: (8+8)/(6/9) \n", - "1145: 1*((1+5)*4) 1449: (1-(4-9))*4 2344: ((2+3)*4)+4 3346: 3-(3-(4*6)) 4457: 4*(4-(5-7)) 6899: 8/(6/(9+9)) \n", - "1146: 1-(1-(4*6)) 1455: 4-((1-5)*5) 2345: 2*(3+(4+5)) 3347: 3*(4-(3-7)) 4458: (4+(4-5))*8 7889: 8-((7-9)*8) \n", - "1147: 1*(4*(7-1)) 1456: 4/(1-(5/6)) 2346: 2+((3*6)+4) 3348: (3+3)*(8-4) 4468: 4*(4-(6-8)) \n", - "1148: (1+1)*(4+8) 1457: 1+((4*7)-5) 2347: (2-(3-7))*4 3349: 3*(3-(4-9)) 4469: 4*(4/(6/9)) \n" - ] - } - ], - "source": [ - "def show_plates(digits=4, target=24):\n", - " \"\"\"Show all license plates that can make 24.\"\"\"\n", - " plates = list(combinations_with_replacement(range(10), 4))\n", - " def solve(plate): return expressions(plate, ops='+-*/', permute=True).get(24)\n", - " solved = [f\"{cat(plate)}: {unbracket(solve(plate))} \" \n", - " for plate in plates if solve(plate)]\n", - " S, P = len(solved), len(plates)\n", - " print(f'{S} out of {P} distinct license plates ({S/P:.0%}) can be solved:\\n')\n", - " show_columns(solved)\n", - " \n", - "show_plates()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But I remember the game as trying to make an equation: that is, on seeing the plate \"2346\", my game is to find \"6/3 = 4/2\". Let's try that, and let's throw in a few additional operators:" + "We can find all the license plates for which there is a solution (I'm assuming that digit concatenation is allowed):" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "536 out of 715 distinct license plates (75.0%) can be solved:\n", + "\n", + "0024: 0-(0-24) 0569: 6+(90/5) 1347: 13+(4+7) 2259: 2*(5-(2-9)) 3334: 3+(3*(3+4)) 4457: 4*(4-(5-7)) \n", + "0036: 0+(30-6) 0588: (80/5)+8 1348: 38-14 2266: (2+6)/(2/6) 3335: (3*3)+(3*5) 4458: (4+(4-5))*8 \n", + "0038: 0-(0-(3*8)) 0666: 60-(6*6) 1349: 43-19 2267: 2/(6/72) 3336: 33-(3+6) 4459: 4*(54/9) \n", + "0046: 0-(0-(4*6)) 0669: 90-66 1355: 55-31 2268: 22-(6-8) 3337: 3*((3/3)+7) 4468: 68-44 \n", + "0114: 10+14 0689: 0-((6-9)*8) 1356: 13+(5+6) 2269: 96/(2+2) 3338: 3*(3-(3-8)) 4469: 4*(4/(6/9)) \n", + "0122: 0+(12*2) 0699: (90/6)+9 1357: (15-7)*3 2277: 2*(7-(2-7)) 3339: 3*(9-(3/3)) 4477: (4-(4/7))*7 \n", + "0123: 0+(1+23) 0788: 80-(7*8) 1358: 1+((3*5)+8) 2278: 2+((2*7)+8) 3344: 3*((3*4)-4) 4478: 4+((4*7)-8) \n", + "0124: 0+(1*24) 0789: 0+(7+(8+9)) 1359: 39-15 2279: 22-(7-9) 3345: 33-(4+5) 4479: 4*(4-(7-9)) \n", + "0125: 120/5 0888: 0+(8+(8+8)) 1366: 1*((3*6)+6) 2288: 28-(8/2) 3346: 36-(3*4) 4488: 4*(48/8) \n", + "0127: 10+(2*7) 1112: (1+1)*12 1367: 61-37 2289: (2*9)-(2-8) 3347: 34-(3+7) 4489: (4*9)-(4+8) \n", + "0128: 0+((1+2)*8) 1113: 11+13 1368: (16-8)*3 2333: 23+(3/3) 3348: (3+3)*(8-4) 4555: 4*(5+(5/5)) \n", + "0134: 34-10 1118: (1+(1+1))*8 1369: (13-9)*6 2334: 23-(3-4) 3349: (3+93)/4 4556: 54-(5*6) \n", + "0135: 30-(1+5) 1122: 12+12 1377: (1-7)*(3-7) 2335: 25-(3/3) 3355: (5*5)-(3/3) 4557: 4*(7-(5/5)) \n", + "0136: (10*3)-6 1123: 1*(1+23) 1378: 3/(1-(7/8)) 2336: 2/(3/36) 3356: 3+((3*5)+6) 4558: (4-(5/5))*8 \n", + "0137: 0+(31-7) 1124: 1-(1-24) 1379: (17-9)*3 2337: 33-(2+7) 3357: 57-33 4559: 49-(5*5) \n", + "0138: 0+(1*(3*8)) 1125: 1*(25-1) 1388: ((1+3)*8)-8 2338: (2+(3/3))*8 3358: 35-(3+8) 4566: 4*(5+(6/6)) \n", + "0139: 0-((1-9)*3) 1126: 26-(1+1) 1389: 18-(3-9) 2339: ((2+3)*3)+9 3359: 39-(3*5) 4567: 5+(76/4) \n", + "0144: (10-4)*4 1127: (1+2)*(1+7) 1399: (9-1)/(3/9) 2344: 23+(4/4) 3366: 3*((6/3)+6) 4568: 56-(4*8) \n", + "0145: 0+((1+5)*4) 1128: 1*((1+2)*8) 1444: ((1+4)*4)+4 2345: 23-(4-5) 3367: 3-((3-6)*7) 4569: 69-45 \n", + "0146: 40-16 1129: (1+2)*(9-1) 1445: 1*(4+(4*5)) 2346: 42-(3*6) 3368: ((3*3)-6)*8 4577: 4*(5+(7/7)) \n", + "0147: 0-((1-7)*4) 1133: (11-3)*3 1446: 144/6 2347: 47-23 3369: 63-39 4578: 78-54 \n", + "0148: 0-((1-4)*8) 1134: (1+1)*(3*4) 1447: 1+((4*4)+7) 2348: 34-(2+8) 3377: (3+(3/7))*7 4579: (4*7)+(5-9) \n", + "0155: 0-(1-(5*5)) 1135: 35-11 1448: (14-8)*4 2349: 2/(3/(4*9)) 3378: (3*3)+(7+8) 4588: 4*(5+(8/8)) \n", + "0156: 0-((1-5)*6) 1136: 31-(1+6) 1449: (1-(4-9))*4 2355: 23+(5/5) 3379: (93/3)-7 4589: 4*(5-(8-9)) \n", + "0159: 0+(15+9) 1137: 1*(31-7) 1455: 14+(5+5) 2356: 56-32 3388: 8/(3-(8/3)) 4599: 4*(5+(9/9)) \n", + "0166: (10-6)*6 1138: 1+(31-8) 1456: 65-41 2357: 2+((3*5)+7) 3389: (3*(3+8))-9 4666: 4*(6-(6-6)) \n", + "0168: 0+(16+8) 1139: (11*3)-9 1457: 1+((4*7)-5) 2358: (38/2)+5 3399: 3+(3+(9+9)) 4667: 4*(6/(7-6)) \n", + "0177: 0+(17+7) 1144: (1+(1+4))*4 1458: (1+5)*(8-4) 2359: 53-29 3444: ((3+4)*4)-4 4668: 4+(6+(6+8)) \n", + "0178: (10-7)*8 1145: (11-5)*4 1459: (15-9)*4 2366: 23+(6/6) 3445: 3+((4*4)+5) 4669: (4*9)-(6+6) \n", + "0222: 0+(2+22) 1146: 1-(1-(4*6)) 1466: 16/(4/6) 2367: 23-(6-7) 3446: 34-(4+6) 4677: 4*(6-(7-7)) \n", + "0224: (0/2)+24 1147: 41-17 1467: (1-(4-7))*6 2368: 62-38 3447: 3*((4/4)+7) 4678: (68/4)+7 \n", + "0225: (50-2)/2 1148: 48/(1+1) 1468: (1-(4-6))*8 2369: 2*(6-(3-9)) 3448: 3+(84/4) 4679: 6/(4/(7+9)) \n", + "0226: 0-(2-26) 1149: 1+(14+9) 1469: 1/(4/96) 2377: 23+(7/7) 3449: 3*(9-(4/4)) 4688: 88-64 \n", + "0228: 20+(8/2) 1155: 1*((5*5)-1) 1477: 71-47 2378: 23-(7-8) 3455: 34-(5+5) 4689: 96/(8-4) \n", + "0233: 30-(2*3) 1156: 1*((5-1)*6) 1478: 1*((7-4)*8) 2379: 27-(9/3) 3456: (54/3)+6 4699: 4*(6-(9-9)) \n", + "0234: (0/3)+24 1157: (5*7)-11 1479: (97-1)/4 2388: 23+(8/8) 3457: 35-(4+7) 4777: 4*(7-(7/7)) \n", + "0236: 0+((2+6)*3) 1158: 1+(15+8) 1488: 1*((4*8)-8) 2389: 23-(8-9) 3458: 58-34 4778: 4*(7+(7-8)) \n", + "0237: 0+(27-3) 1159: 1*(15+9) 1489: 41-(8+9) 2399: 23+(9/9) 3459: (45/3)+9 4788: 4*(7-(8/8)) \n", + "0238: 0+(32-8) 1166: (1+1)*(6+6) 1499: 19-(4-9) 2444: 24-(4-4) 3466: 36*(4/6) 4789: 98-74 \n", + "0239: (30/2)+9 1167: 1+(16+7) 1555: (5-(1/5))*5 2445: 24/(5-4) 3467: 67-43 4799: 4*(7-(9/9)) \n", + "0244: 44-20 1168: 1*(16+8) 1556: ((1+5)*5)-6 2446: 2+((4*4)+6) 3468: 3*(48/6) 4888: (8+88)/4 \n", + "0245: (0/5)+24 1169: 16-(1-9) 1557: 75-51 2447: 42*(4/7) 3469: (3-(6-9))*4 4889: (8*9)-48 \n", + "0246: (0/6)+24 1177: 1*(17+7) 1558: 15/(5/8) 2448: 48-24 3477: 3-((4-7)*7) 4899: (4-(9/9))*8 \n", + "0247: (0/7)+24 1178: 17-(1-8) 1559: (1+5)*(9-5) 2449: (2+94)/4 3478: (4*(7-3))+8 5555: (5*5)-(5/5) \n", + "0248: 0+(28-4) 1188: (11-8)*8 1566: 1*((5*6)-6) 2455: 24-(5-5) 3479: 73-49 5556: 5+((5*5)-6) \n", + "0249: (0/9)+24 1222: 1*(2+22) 1567: 1+((5*6)-7) 2456: 24/(6-5) 3488: 48-(3*8) 5559: 5+(95/5) \n", + "0256: 50-26 1223: (13*2)-2 1568: 85-61 2457: 52-(4*7) 3489: 3+(4+(8+9)) 5566: (5*5)-(6/6) \n", + "0257: 0+(2*(5+7)) 1224: 12/(2/4) 1569: 96/(5-1) 2458: 2*((4*5)-8) 3499: (99-3)/4 5567: (5*5)+(6-7) \n", + "0258: 0-((2-5)*8) 1225: 1-(2-25) 1578: 81-57 2459: 49-25 3556: 35-(5+6) 5568: 5+(5+(6+8)) \n", + "0259: 0+(29-5) 1226: 12+(2*6) 1579: 95-71 2466: 66-42 3557: 5+(57/3) 5577: 5+(5+(7+7)) \n", + "0266: (60/2)-6 1227: 27-(1+2) 1588: 1*((8-5)*8) 2467: 24/(7-6) 3558: 3*(5-(5-8)) 5578: 7+(85/5) \n", + "0268: 0+(6/(2/8)) 1228: (2-(1-2))*8 1589: (1-9)*(5-8) 2468: 26-(8/4) 3559: 59-35 5579: 79-55 \n", + "0269: 0+((2*9)+6) 1229: (21-9)*2 1599: 1+(5+(9+9)) 2469: (2+(4/6))*9 3566: (3-(5-6))*6 5588: (5*5)-(8/8) \n", + "0288: 0+((2*8)+8) 1233: (1+3)*(2*3) 1666: ((6-1)*6)-6 2477: 24-(7-7) 3567: 3*(56/7) 5589: (5*5)+(8-9) \n", + "0333: 30-(3+3) 1234: 12+(3*4) 1668: 6/(1-(6/8)) 2478: 72-48 3568: 3/((6-5)/8) 5599: (5*5)-(9/9) \n", + "0334: 0+((3+3)*4) 1235: 12*(5-3) 1669: 16/(6/9) 2479: (2*4)+(7+9) 3569: 3*(5-(6-9)) 5666: (5-(6/6))*6 \n", + "0335: 0+(3*(3+5)) 1236: 36-12 1678: 168/7 2488: 24-(8-8) 3577: 77-53 5667: 5+(6+(6+7)) \n", + "0337: 0+(3+(3*7)) 1237: 1*(27-3) 1679: 91-67 2489: 24/(9-8) 3578: 37-(5+8) 5668: 6-((5-8)*6) \n", + "0338: (0/3)+(3*8) 1238: 1*(32-8) 1688: 18/(6/8) 2499: 24-(9-9) 3579: 3+(5+(7+9)) 5669: (6*9)-(5*6) \n", + "0339: 0+(33-9) 1239: 12+(3+9) 1689: 1+(6+(8+9)) 2555: 25-(5/5) 3588: 3+(5+(8+8)) 5677: (5-(7/7))*6 \n", + "0344: 0+(3*(4+4)) 1244: (14*2)-4 1699: 1*(6+(9+9)) 2556: 25+(5-6) 3589: 83-59 5678: (5+7)*(8-6) \n", + "0345: 54-30 1245: 45-21 1779: 1+(7+(7+9)) 2557: (55-7)/2 3599: (3-9)*(5-9) 5679: 6-((5-7)*9) \n", + "0346: 4+(60/3) 1246: 12*(6-4) 1788: 1+(7+(8+8)) 2558: (58/2)-5 3666: 36-(6+6) 5688: (5+(6-8))*8 \n", + "0348: (0/4)+(3*8) 1247: 1+(27-4) 1789: 1*(7+(8+9)) 2559: (2*5)+(5+9) 3667: 3*((6/6)+7) 5689: 89-65 \n", + "0349: 0-((3-9)*4) 1248: 42-18 1799: 7-(1-(9+9)) 2566: 25-(6/6) 3668: 3*(6-(6-8)) 5699: 69-(5*9) \n", + "0358: (0/5)+(3*8) 1249: 1+(92/4) 1888: 1*(8+(8+8)) 2567: 76-52 3669: 36*(6/9) 5779: (5+7)*(9-7) \n", + "0359: 0+((3*5)+9) 1255: 1-(2-(5*5)) 1889: 8-(1-(8+9)) 2568: (56-8)/2 3677: 37-(6+7) 5788: ((7-5)*8)+8 \n", + "0366: 60-36 1256: (15*2)-6 2223: (2/2)+23 2569: (5/(2/6))+9 3678: 87-63 5789: (5+(7-9))*8 \n", + "0367: 0-((3-7)*6) 1257: 51-27 2224: 2-(2-24) 2577: 25-(7/7) 3679: 96/(7-3) 5799: 99-75 \n", + "0368: 0-((3-6)*8) 1258: 1+(28-5) 2225: 25-(2/2) 2578: 25+(7-8) 3688: 38-(6+8) 5888: (5*8)-(8+8) \n", + "0369: (6*9)-30 1259: 1*(29-5) 2227: 2*((2*7)-2) 2579: (57-9)/2 3689: (96/3)-8 5889: 8/((8-5)/9) \n", + "0378: (0/7)+(3*8) 1266: 12+(6+6) 2228: 28-(2+2) 2588: 82-58 3699: 93-69 6666: 6+(6+(6+6)) \n", + "0388: (80-8)/3 1267: (1-7)*(2-6) 2229: 2+(2*(2+9)) 2589: 25+(8-9) 3777: 73-(7*7) 6667: 66-(6*7) \n", + "0389: 0+(8/(3/9)) 1268: 12*(8-6) 2233: 23-(2-3) 2599: 25-(9/9) 3778: 38-(7+7) 6668: 6*(6+(6-8)) \n", + "0444: 40-(4*4) 1269: 216/9 2234: 24/(3-2) 2666: (2*6)+(6+6) 3779: 97-73 6669: 6-(6*(6-9)) \n", + "0445: 0+(4+(4*5)) 1277: ((7*7)-1)/2 2235: 22-(3-5) 2667: (6+(6*7))/2 3788: 3*(7+(8/8)) 6679: 6*(6+(7-9)) \n", + "0446: 64-40 1278: 21/(7/8) 2236: 22+(6/3) 2668: 86-62 3789: 39-(7+8) 6688: 6/((8-6)/8) \n", + "0447: 0-(4-(4*7)) 1279: 12*(9-7) 2237: 2*(2+(3+7)) 2669: (66/2)-9 3799: (7*9)-39 6689: 8+(96/6) \n", + "0448: 4+(80/4) 1288: 18-(2-8) 2238: (32/2)+8 2678: 28*(6/7) 3888: 3*(8-(8-8)) 6789: 78-(6*9) \n", + "0456: (0/5)+(4*6) 1289: 192/8 2239: 29-(2+3) 2679: 96-72 3889: 3*(8/(9-8)) 6799: 6-((7-9)*9) \n", + "0457: 74-50 1333: (1+3)*(3+3) 2244: 2+(44/2) 2688: 2+(6+(8+8)) 3899: 3*(8-(9-9)) 6888: 8-((6-8)*8) \n", + "0466: (0/6)+(4*6) 1334: 31-(3+4) 2245: (52-4)/2 2689: 92-68 3999: (99/3)-9 6889: (8+8)/(6/9) \n", + "0467: 70-46 1335: (13-5)*3 2246: 46-22 2699: (2+(6/9))*9 4444: 4+(4+(4*4)) 6899: 96-(8*9) \n", + "0468: 84-60 1336: ((1+6)*3)+3 2247: 2+(2*(4+7)) 2778: 2+(7+(7+8)) 4445: 44-(4*5) 7789: 87-(7*9) \n", + "0469: 0+(96/4) 1337: 37-13 2248: 22+(8/4) 2788: (2-(7-8))*8 4446: 4*(4-(4-6)) 7889: 8-((7-9)*8) \n", + "0478: 0-((4-7)*8) 1338: 13+(3+8) 2249: 42-(2*9) 2789: 27*(8/9) 4447: (4+4)*(7-4) 8888: 88-(8*8) \n", + "0479: 94-70 1339: 1*(33-9) 2255: 2*(2+(5+5)) 2888: (2+(8/8))*8 4448: (4-(4/4))*8 \n", + "0488: 40-(8+8) 1344: 1*(3*(4+4)) 2256: 2+(2*(5+6)) 2889: (2-(8-9))*8 4449: 4-(4*(4-9)) \n", + "0566: 0+((5*6)-6) 1345: 1+(3+(4*5)) 2257: 22-(5-7) 2899: (2+(9/9))*8 4455: (4+(4/5))*5 \n", + "0568: 80-56 1346: (14-6)*3 2258: 52-28 3333: 33-(3*3) 4456: 4/((5-4)/6) \n", + "\n", + "179 out of 715 distinct license plates (25.0%) can NOT be solved:\n", + "\n", + "0000 0007 0015 0025 0035 0049 0067 0089 0117 0157 0199 0277 0355 0455 0556 0579 0679 0899 1119 1677 2299 4466 5569 6699 7778 8889\n", + "0001 0008 0016 0026 0037 0055 0068 0099 0118 0158 0223 0278 0356 0458 0557 0589 0688 0999 1179 1777 2677 4467 5777 6777 7779 8899\n", + "0002 0009 0017 0027 0039 0056 0069 0111 0119 0167 0227 0279 0357 0459 0558 0599 0777 1111 1189 1778 2777 4499 5778 6778 7788 8999\n", + "0003 0011 0018 0028 0044 0057 0077 0112 0126 0169 0229 0289 0377 0477 0559 0667 0778 1114 1199 1899 2779 4779 5899 6779 7799 9999\n", + "0004 0012 0019 0029 0045 0058 0078 0113 0129 0179 0235 0299 0379 0489 0567 0668 0779 1115 1299 1999 2799 4999 5999 6788 7888\n", + "0005 0013 0022 0033 0047 0059 0079 0115 0133 0188 0255 0336 0399 0499 0577 0677 0799 1116 1577 2222 2999 5557 6677 6999 7899\n", + "0006 0014 0023 0034 0048 0066 0088 0116 0149 0189 0267 0347 0449 0555 0578 0678 0889 1117 1667 2226 3555 5558 6678 7777 7999\n" + ] + } + ], + "source": [ + "def show_plates(digits=4, target=24, ops='+-*/,'):\n", + " \"\"\"Show all license plates that can make the target (24 by default).\"\"\"\n", + " plates = list(combinations_with_replacement(range(10), 4))\n", + " solved = {plate: unbracket(exp)\n", + " for plate in plates \n", + " if (exp := expressions(plate, ops=ops, permute=True).get(24))}\n", + " S, P = len(solved), len(plates)\n", + " print(f'{S} out of {P} distinct license plates ({S/P:.1%}) can be solved:\\n')\n", + " show_columns([f'{cat(p)}: {solved[p]} ' for p in solved])\n", + " print(f'\\n{P-S} out of {P} distinct license plates ({(P-S)/P:.1%}) can NOT be solved:\\n')\n", + " show_columns([cat(p) for p in plates if p not in solved])\n", + " \n", + "show_plates()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's give Aarti's kids a few more operators to play with:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1696,185 +1739,388 @@ "text": [ "714 out of 715 distinct license plates (99.9%) can be solved:\n", "\n", - "0000: 0 = (0-(0-0)) 0477: 0 = (4*(7-7)) 1569: 1 = ((6-5)^9) 3448: 3 = ((4+8)/4) \n", - "0001: 0 = (0*10) 0478: 0! = ((7-8)^4) 1577: 1 = (5^(7-7)) 3449: 3 = (√49-4) \n", - "0002: 0 = (0*20) 0479: 0 = (√49-7) 1578: 1 = ((8-7)^5) 3455: 3 = √(45/5) \n", - "0003: 0 = (0*30) 0488: 0 = (4*(8-8)) 1579: 1 = (5-(7-√9)) 3456: 3 = (√64-5) \n", - "0004: 0 = (0*40) 0489: 0 = (4!-(8*√9)) 1588: 1 = (5^(8-8)) 3457: 3 = ((5+7)/4) \n", - "0005: 0 = (0*50) 0499: 0 = (4*(9-9)) 1589: 1 = ((9-8)^5) 3458: 3 = √√(85-4) \n", - "0006: 0 = (0*60) 0555: 0 = (5*(5-5)) 1599: 1 = (5^(9-9)) 3459: 3 = √(54/√9!) \n", - "0007: 0 = (0*70) 0556: 0 = ((5-5)*6) 1666: 1 = (6^(6-6)) 3466: 3 = (4-(6/6)) \n", - "0008: 0 = (0*80) 0557: 0 = ((5-5)*7) 1667: 1 = ((6/6)^7) 3467: 3 = (4+(6-7)) \n", - "0009: 0 = (0*90) 0558: 0 = ((5-5)*8) 1668: 1 = ((6/6)^8) 3468: 3 = (4*(6/8)) \n", - "0011: 0 = (0*11) 0559: 0 = ((5-5)*9) 1669: 1 = ((6/6)^9) 3469: 3 = (√4/(6/9)) \n", - "0012: 0 = (0*12) 0566: 0 = (5*(6-6)) 1677: 1 = (6^(7-7)) 3477: 3 = √√(4+77) \n", - "0013: 0 = (0*13) 0567: 0! = ((6-5)^7) 1678: 1 = ((6-7)^8) 3478: 3 = (4+(7-8)) \n", - "0014: 0 = (0*14) 0568: 0 = (6-(8-5)!) 1679: 1 = ((7-6)^9) 3479: 3 = (9/(7-4)) \n", - "0015: 0 = (0*15) 0569: 0 = (5*(6-√9!)) 1688: 1 = (6^(8-8)) 3488: 3 = (4-(8/8)) \n", - "0016: 0 = (0*16) 0577: 0 = (5*(7-7)) 1689: 1 = ((8-9)^6) 3489: 3 = (4+(8-9)) \n", - "0017: 0 = (0*17) 0578: 0! = ((8-7)^5) 1699: 1 = (6^(9-9)) 3499: 3 = (4-(9/9)) \n", - "0018: 0 = (0*18) 0579: 0! = (5-(7-√9)) 1777: 1 = (7^(7-7)) 3555: 3! = (5+(5/5)) \n", - "0019: 0 = (0*19) 0588: 0 = (5*(8-8)) 1778: 1 = ((7/7)^8) 3556: 3 = (6!/(5!+5!)) \n", - "0022: 0 = (0*22) 0589: 0 = (5-(8-√9)) 1779: 1 = ((7/7)^9) 3557: 3 = (5+(5-7)) \n", - "0023: 0 = (0*23) 0599: 0 = (5*(9-9)) 1788: 1 = (7^(8-8)) 3558: 3 = (5!/(5*8)) \n", - "0024: 0 = (0*24) 0666: 0 = (6*(6-6)) 1789: 1 = ((8-7)^9) 3559: 3 = (5-(5-√9)) \n", - "0025: 0 = (0*25) 0667: 0 = ((6-6)*7) 1799: 1 = (7^(9-9)) 3566: √3 = (√√(5/6!)*6) \n", - "0026: 0 = (0*26) 0668: 0 = ((6-6)*8) 1888: 1 = (8^(8-8)) 3567: 3 = √√(5+76) \n", - "0027: 0 = (0*27) 0669: 0 = ((6-6)*9) 1889: 1 = ((8/8)^9) 3568: 3 = √√(86-5) \n", - "0028: 0 = (0*28) 0677: 0 = (6*(7-7)) 1899: 1 = (8^(9-9)) 3569: 3 = ((6+9)/5) \n", - "0029: 0 = (0*29) 0678: 0! = ((6-7)^8) 1999: 1 = (9^(9-9)) 3577: 3 = √(7-(5-7)) \n", - "0033: 0 = (0*33) 0679: 0 = ((6-√9!)*7) 2222: 2 = (2-(2-2)) 3578: 3 = ((7+8)/5) \n", - "0034: 0 = (0*34) 0688: 0 = (6*(8-8)) 2223: 2 = √√(32/2) 3579: 3 = (5+(7-9)) \n", - "0035: 0 = (0*35) 0689: 0 = ((6-√9!)*8) 2224: 2 = (4!-22) 3588: 3 = (√(8*8)-5) \n", - "0036: 0 = (0*36) 0699: 0 = (6*(9-9)) 2225: 2 = √(5-(2/2)) 3589: 3 = (9/(8-5)) \n", - "0037: 0 = (0*37) 0777: 0 = (7*(7-7)) 2226: 2 = √√(22-6) 3599: 3 = ((9+√9!)/5) \n", - "0038: 0 = (0*38) 0778: 0 = ((7-7)*8) 2227: 2 = √√(2+(2*7)) 3666: 3! = (6-(6-6)) \n", - "0039: 0 = (0*39) 0779: 0 = ((7-7)*9) 2228: 2 = (8/(2*2)) 3667: 3! = (6*(7-6)) \n", - "0044: 0 = (0*44) 0788: 0 = (7*(8-8)) 2229: 2 = (2*(√9-2)) 3668: 3 = (6/(8-6)) \n", - "0045: 0 = (0*45) 0789: 0! = ((8-7)^9) 2233: 2 = (2-(3-3)) 3669: 3 = (6+(6-9)) \n", - "0046: 0 = (0*46) 0799: 0 = (7*(9-9)) 2234: 2 = √(24/3!) 3677: 3! = (6-(7-7)) \n", - "0047: 0 = (0*47) 0888: 0 = (8*(8-8)) 2235: 2 = (√25-3) 3678: 3 = √√(87-6) \n", - "0048: 0 = (0*48) 0889: 0 = ((8-8)*9) 2236: 2 = √(√36-2) 3679: 3 = (6/(9-7)) \n", - "0049: 0 = (0*49) 0899: 0 = (8*(9-9)) 2237: 2 = √√(23-7) 3688: 3 = (6/√√(8+8)) \n", - "0055: 0 = (0*55) 0999: 0 = (9*(9-9)) 2238: 2 = √(32/8) 3689: 3 = (6/(8-√9!)) \n", - "0056: 0 = (0*56) 1111: 1 = (1^√11) 2239: 2 = (2-(3-√9)) 3699: 3 = (9/(9-6)) \n", - "0057: 0 = (0*57) 1112: 1 = (1^√12) 2244: 2 = (2-(4-4)) 3777: 3! = (7-(7/7)) \n", - "0058: 0 = (0*58) 1113: 1 = (1^√13) 2245: 2 = (2*(5-4)) 3778: 3 = √((7/7)+8) \n", - "0059: 0 = (0*59) 1114: 1 = (1^√14) 2246: 2 = (26-4!) 3779: 3 = (7-(7-√9)) \n", - "0066: 0 = (0*66) 1115: 1 = (1^√15) 2247: 2 = (√(2+7)!-4) 3788: 3 = √√(88-7) \n", - "0067: 0 = (0*67) 1116: 1 = (1^√16) 2248: 2 = √(28-4!) 3789: 3 = √√(78+√9) \n", - "0068: 0 = (0*68) 1117: 1 = (1^√17) 2249: 2 = √(24/√9!) 3799: 3 = (√√9^(9-7)) \n", - "0069: 0 = (0*69) 1118: 1 = (1^√18) 2255: 2 = (2-(5-5)) 3888: 3 = √(8+(8/8)) \n", - "0077: 0 = (0*77) 1119: 1 = (1^√19) 2256: 2 = √√√256 3889: 3 = √√(89-8) \n", - "0078: 0 = (0*78) 1122: 1 = (1^√22) 2257: 2 = (7-√25) 3899: 3 = ((9-8)*√9) \n", - "0079: 0 = (0*79) 1123: 1 = (1^√23) 2258: 2 = ((2*5)-8) 3999: 3 = (9-(9-√9)) \n", - "0088: 0 = (0*88) 1124: 1 = (1^√24) 2259: 2 = (√25-√9) 4444: 4 = (4-(4-4)) \n", - "0089: 0 = (0*89) 1125: 1 = (1^√25) 2266: 2 = (2-(6-6)) 4445: 4 = (4*(5-4)) \n", - "0099: 0 = (0*99) 1126: 1 = (1^√26) 2267: 2 = (2*(7-6)) 4446: 4 = (√64-4) \n", - "0111: 0 = (1*(1-1)) 1127: 1 = (1^√27) 2268: 2 = (6-(8/2)) 4447: 4 = ((4+4!)/7) \n", - "0112: 0 = (1+(1-2)) 1128: 1 = (1^√28) 2269: 2 = ((2^√9)-6) 4448: 4 = (√4/(4/8)) \n", - "0113: 0 = (1-(1^3)) 1129: 1 = (1^√29) 2277: 2 = (2-(7-7)) 4449: 4 = (4*(4-√9)) \n", - "0114: 0 = (1-(1^4)) 1133: 1 = (1^√33) 2278: 2 = √(28/7) 4455: 4 = (4-(5-5)) \n", - "0115: 0 = (1-(1^5)) 1134: 1 = (1^√34) 2279: 2 = (√2^(9-7)) 4456: 4 = √(6!/45) \n", - "0116: 0 = (1-(1^6)) 1135: 1 = (1^√35) 2288: 2 = (2-(8-8)) 4457: 4 = (√4-(5-7)) \n", - "0117: 0 = (1-(1^7)) 1136: 1 = (1^√36) 2289: 2 = (2*(9-8)) 4458: 4 = ((√4^5)/8) \n", - "0118: 0 = (1-(1^8)) 1137: 1 = (1^√37) 2299: 2 = (2-(9-9)) 4459: 4 = (5-(4-√9)) \n", - "0119: 0 = (1-(1^9)) 1138: 1 = (1^√38) 2333: 2 = (3-(3/3)) 4466: 4 = (4-(6-6)) \n", - "0122: 0 = (1*(2-2)) 1139: 1 = (1^√39) 2334: 2 = (3+(3-4)) 4467: 4 = (4*(7-6)) \n", - "0123: 0 = (1+(2-3)) 1144: 1 = (1^√44) 2335: 2 = (3-(3!-5)) 4468: 4 = √(√64+8) \n", - "0124: 0 = (1*(2-√4)) 1145: 1 = (1^√45) 2336: 2 = (√36/3) 4469: 4 = (96/4!) \n", - "0125: 0 = (2-√(5-1)) 1146: 1 = (1^√46) 2337: 2 = ((3*3)-7) 4477: 4 = (4-(7-7)) \n", - "0126: 0 = (√√16-2) 1147: 1 = (1^√47) 2338: 2 = (8-(3+3)) 4478: 4 = (4*(8-7)) \n", - "0127: 0! = (1^√27) 1148: 1 = (1^√48) 2339: 2 = ((9-3)/3) 4479: 4 = ((7+9)/4) \n", - "0128: 0! = (1^√28) 1149: 1 = (1^√49) 2344: 2 = (3-(4/4)) 4488: 4 = (4-(8-8)) \n", - "0129: 0 = (1+(2-√9)) 1155: 1 = (1^√55) 2345: 2 = (3+(4-5)) 4489: 4 = √(48/√9) \n", - "0133: 0 = (1*(3-3)) 1156: 1 = (1^√56) 2346: 2 = (√36-4) 4499: 4 = (√49-√9) \n", - "0134: 0 = (1+(3-4)) 1157: 1 = (1^√57) 2347: 2 = ((3^√4)-7) 4555: 4 = (5-(5/5)) \n", - "0135: 0 = (1-(3!-5)) 1158: 1 = (1^√58) 2348: 2 = √√(48/3) 4556: 4 = (5+(5-6)) \n", - "0136: 0 = (1*(3!-6)) 1159: 1 = (1^√59) 2349: 2 = √(√49-3) 4557: √4 = (7-√(5*5)) \n", - "0137: 0 = (1+(3!-7)) 1166: 1 = (1^√66) 2355: 2 = (3-(5/5)) 4558: 4 = √((5!/5)-8) \n", - "0138: 0 = (3-√√81) 1167: 1 = (1^√67) 2356: 2 = (3+(5-6)) 4559: 4 = ((5/5)+√9) \n", - "0139: 0 = (1*(3-√9)) 1168: 1 = (1^√68) 2357: 2 = ((3+7)/5) 4566: 4 = (5-(6/6)) \n", - "0144: 0 = (1*(4-4)) 1169: 1 = (1^√69) 2358: 2 = (3!/(8-5)) 4567: 4 = (5+(6-7)) \n", - "0145: 0 = (1+(4-5)) 1177: 1 = (1^√77) 2359: 2 = (5-(9/3)) 4568: 4 = (√(6!/5)-8) \n", - "0146: 0 = (√16-4) 1178: 1 = (1^√78) 2366: 2 = (3-(6/6)) 4569: 4 = (6-(5-√9)) \n", - "0147: 0! = (1^√47) 1179: 1 = (1^√79) 2367: 2 = (3+(6-7)) 4577: 4 = (5-(7/7)) \n", - "0148: 0! = (1^√48) 1188: 1 = (1^√88) 2368: 2 = (8-√36) 4578: 4 = (5+(7-8)) \n", - "0149: 0 = (1-(4-√9)) 1189: 1 = (1^√89) 2369: 2 = √(36/9) 4579: 4 = ((5+7)/√9) \n", - "0155: 0 = (1*(5-5)) 1199: 1 = (1^√99) 2377: 2 = (3-(7/7)) 4588: 4 = (5-(8/8)) \n", - "0156: 0 = (1+(5-6)) 1222: 1 = (2^(2-2)) 2378: 2 = (3+(7-8)) 4589: 4 = (5+(8-9)) \n", - "0157: 0! = (1^√57) 1223: 1 = (2+(2-3)) 2379: 2 = ((3*√9)-7) 4599: 4 = (5-(9/9)) \n", - "0158: 0! = (1^√58) 1224: 1 = (2*(2/4)) 2388: 2 = (3-(8/8)) 4666: √4 = ((6+6)/6) \n", - "0159: 0 = (1+(5-√9!)) 1225: 1 = ((2/2)^5) 2389: 2 = (3+(8-9)) 4667: 6 = (4+(6-7))! \n", - "0166: 0 = (1*(6-6)) 1226: 1 = ((2/2)^6) 2399: 2 = (3-(9/9)) 4668: 4 = (6+(6-8)) \n", - "0167: 0 = (1+(6-7)) 1227: 1 = ((2/2)^7) 2444: 2 = ((4+4)/4) 4669: 4 = √(96/6) \n", - "0168: 0 = (6-√√81!) 1228: 1 = ((2/2)^8) 2445: 2 = (√4*(5-4)) 4677: 6 = √√(4+77)! \n", - "0169: 0 = (1*(6-√9!)) 1229: 1 = ((2/2)^9) 2446: 2 = (√64/4) 4678: √4 = ((6+8)/7) \n", - "0177: 0 = (1*(7-7)) 1233: 1 = (2^(3-3)) 2447: 2 = ((7-4)!-4) 4679: 4 = (6+(7-9)) \n", - "0178: 0 = (1+(7-8)) 1234: 1 = (4!-23) 2448: 2 = (48/4!) 4688: 4 = (8/(8-6)) \n", - "0179: 0 = (1-(7-√9!)) 1235: 1 = (3!-√25) 2449: 2 = (√(4*9)-4) 4689: 4 = (8^(6/9)) \n", - "0188: 0 = (1*(8-8)) 1236: 1 = (2*(3/6)) 2455: 2 = (√4-(5-5)) 4699: 4 = √(96/√9!) \n", - "0189: 0 = (√81-9) 1237: 1 = ((2^3)-7) 2456: 2 = ((4+6)/5) 4777: √4 = ((7+7)/7) \n", - "0199: 0 = (1*(9-9)) 1238: 1 = ((2-3)^8) 2457: 2 = (4+(5-7)) 4778: 4 = (8!/(7!+7!)) \n", - "0222: 0 = (2*(2-2)) 1239: 1 = ((3-2)^9) 2458: 2 = ((√4*5)-8) 4779: 4 = ((7/7)+√9) \n", - "0223: 0 = ((2-2)*3) 1244: 1 = (24/4!) 2459: 2 = (√49-5) 4788: 4 = √((8!/7!)+8) \n", - "0224: 0 = (2+(2-4)) 1245: 1 = (25-4!) 2466: 2 = (√64-6) 4789: 4 = (8/(9-7)) \n", - "0225: 0 = ((2-2)*5) 1246: 1 = ((2+4)/6) 2467: 2 = (6/(7-4)) 4799: 4 = (7-(9/√9)) \n", - "0226: 0 = ((2-2)*6) 1247: 1 = ((2*4)-7) 2468: 2 = (4+(6-8)) 4888: 4 = (8-√(8+8)) \n", - "0227: 0 = ((2-2)*7) 1248: 1 = (2*(4/8)) 2469: 2 = √(96/4!) 4889: 4 = ((8/8)+√9) \n", - "0228: 0 = ((2-2)*8) 1249: 1 = (9-(2*4)) 2477: 2 = (√4-(7-7)) 4899: 4 = (9-(8-√9)) \n", - "0229: 0 = ((2-2)*9) 1255: 1 = (√25/5) 2478: 2 = (√4*(8-7)) 4999: 4 = (√9+(9/9)) \n", - "0233: 0 = (2*(3-3)) 1256: 1 = (6-√25) 2479: 2 = (4+(7-9)) 5555: 5 = (5-(5-5)) \n", - "0234: 0 = (2-(3!-4)) 1257: 1 = ((2+5)/7) 2488: 2 = (8/(8-4)) 5556: 5 = (5*(6-5)) \n", - "0235: 0 = (2+(3-5)) 1258: 1 = (5-(8/2)) 2489: 2 = √√(48/√9) 5557: 5 = (√5^(7-5)) \n", - "0236: 0 = ((2*3)-6) 1259: 1 = ((2*5)-9) 2499: 2 = (9-√49) 5558: None \n", - "0237: 0 = (2-√(7-3)) 1266: 1 = (2^(6-6)) 2555: 2 = ((5+5)/5) 5559: 5 = √(5!-95) \n", - "0238: 0 = ((2^3)-8) 1267: 1 = (2+(6-7)) 2556: 2 = √(5+(5-6)) 5566: 5 = (5-(6-6)) \n", - "0239: 0 = ((3^2)-9) 1268: 1 = ((2+6)/8) 2557: 2 = (7-√(5*5)) 5567: 5 = (5*(7-6)) \n", - "0244: 0 = (24-4!) 1269: 1 = (9-(2+6)) 2558: 2 = (5+(5-8)) 5568: 5 = (√5^(8-6)) \n", - "0245: 0 = ((2-√4)*5) 1277: 1 = (2^(7-7)) 2559: 2 = (√9-(5/5)) 5569: 5 = (5-(6-√9!)) \n", - "0246: 0 = (2+(4-6)) 1278: 1 = (2+(7-8)) 2566: 2 = √(5-(6/6)) 5577: 5 = (5-(7-7)) \n", - "0247: 0 = ((2-√4)*7) 1279: 1 = ((2+7)/9) 2567: 2 = ((5+7)/6) 5578: 5 = (5*(8-7)) \n", - "0248: 0 = ((2*4)-8) 1288: 1 = (2^(8-8)) 2568: 2 = (6/(8-5)) 5579: 5 = √(75/√9) \n", - "0249: 0 = ((2-√4)*9) 1289: 1 = (2+(8-9)) 2569: 2 = (5+(6-9)) 5588: 5 = (5-(8-8)) \n", - "0255: 0 = (√25-5) 1299: 1 = (2^(9-9)) 2577: 2 = (√(7*7)-5) 5589: 5 = (5*(9-8)) \n", - "0256: 0 = ((5-2)!-6) 1333: 1 = (3^(3-3)) 2578: 2 = √(5+(7-8)) 5599: 5 = (5-(9-9)) \n", - "0257: 0 = (2+(5-7)) 1334: 1 = ((3/3)^4) 2579: 2 = ((5+9)/7) 5666: 5 = (6-(6/6)) \n", - "0258: 0! = (5-(8/2)) 1335: 1 = (3+(3-5)) 2588: 2 = (8-(8-5)!) 5667: 5 = (6+(6-7)) \n", - "0259: 0 = (2-(5-√9)) 1336: 1 = (3!/√36) 2589: 2 = (8/(9-5)) 5668: 6 = (5+(6-8))! \n", - "0266: 0 = (2*(6-6)) 1337: 1 = ((3/3)^7) 2599: 2 = (5-(9/√9)) 5669: 5 = (6-(6/√9!)) \n", - "0267: 0 = (√(2+7)!-6) 1338: 1 = ((3*3)-8) 2666: 2 = ((6+6)/6) 5677: 5 = (6-(7/7)) \n", - "0268: 0 = (2+(6-8)) 1339: 1 = (3*(3/9)) 2667: 6 = (2-(6-7))! 5678: 5 = (6+(7-8)) \n", - "0269: 0 = (2-(6/√9)) 1344: 1 = (3^(4-4)) 2668: 2 = (8-√(6*6)) 5679: 5 = (7-(6/√9)) \n", - "0277: 0 = (2*(7-7)) 1345: 1 = ((4-3)^5) 2669: 2 = √√(96/6) 5688: 5 = (6-(8/8)) \n", - "0278: 0! = (2+(7-8)) 1346: 1 = (3+(4-6)) 2677: 6 = (2+(7/7))! 5689: 5 = (6+(8-9)) \n", - "0279: 0 = (2+(7-9)) 1347: 1 = ((3+4)/7) 2678: 2 = ((6+8)/7) 5699: 5 = (6-(9/9)) \n", - "0288: 0 = (2*(8-8)) 1348: 1 = ((3-4)^8) 2679: 2 = (6-(7-√9)) 5777: 7 = (√7^(7-5)) \n", - "0289: 0 = ((2^√9)-8) 1349: 1 = (√49-3!) 2688: 2 = (6-√(8+8)) 5778: 7 = √(57-8) \n", - "0299: 0 = (2*(9-9)) 1355: 1 = (3^(5-5)) 2689: 2 = (√8^(6/9)) 5779: 5 = (7+(7-9)) \n", - "0333: 0 = (3*(3-3)) 1356: 1 = (√36-5) 2699: 2 = (6/(9/√9)) 5788: 5 = (7-√√(8+8)) \n", - "0334: 0 = ((3-3)*4) 1357: 1 = (3+(5-7)) 2777: 2 = ((7+7)/7) 5789: 5 = ((7+8)/√9) \n", - "0335: 0 = ((3-3)*5) 1358: 1 = ((3+5)/8) 2778: 2 = √(8!/(7!+7!)) 5799: 5 = (9-(7-√9)) \n", - "0336: 0 = (3!-√36) 1359: 1 = (9-(3+5)) 2779: 2 = (9-√(7*7)) 5888: 8 = √((√8^5)/√8) \n", - "0337: 0 = ((3-3)*7) 1366: 1 = (√36/6) 2788: 2 = √√((8!/7!)+8) 5889: 5 = (9-√(8+8)) \n", - "0338: 0 = ((3-3)*8) 1367: 1 = (7-√36) 2789: 2 = ((7+9)/8) 5899: 5 = (8-(9/√9)) \n", - "0339: 0 = ((3-3)*9) 1368: 1 = (3+(6-8)) 2799: 2 = (√(9*9)-7) 5999: 5 = (√9!-(9/9)) \n", - "0344: 0 = (3*(4-4)) 1369: 1 = ((3+6)/9) 2888: 2 = ((8+8)/8) 6666: 6 = (6-(6-6)) \n", - "0345: 0 = (3+(√4-5)) 1377: 1 = (3^(7-7)) 2889: 2 = (√9-(8/8)) 6667: 6 = (6*(7-6)) \n", - "0346: 0 = ((3*√4)-6) 1378: 1 = ((8-7)^3) 2899: 2 = (8-(9-√9)) 6668: 6 = (√6^(8-6)) \n", - "0347: 0 = (3+(4-7)) 1379: 1 = (3+(7-9)) 2999: 2 = ((9+9)/9) 6669: 6 = (6+(6-9))! \n", - "0348: 0 = (3-(4!/8)) 1388: 1 = (3^(8-8)) 3333: 3 = (3-(3-3)) 6677: 6 = (6-(7-7)) \n", - "0349: 0 = ((3^√4)-9) 1389: 1 = ((9-8)^3) 3334: 3 = √(33-4!) 6678: 6 = (6*(8-7)) \n", - "0355: 0 = (3*(5-5)) 1399: 1 = (3^(9-9)) 3335: 3 = (3*(3!-5)) 6679: 6 = (√6^(9-7)) \n", - "0356: 0 = ((3!-6)*5) 1444: 1 = (4^(4-4)) 3336: 3 = (√36-3) 6688: 6 = (6-(8-8)) \n", - "0357: 0! = (3+(5-7)) 1445: 1 = ((4/4)^5) 3337: 3 = (3*(7-3!)) 6689: 6 = (6*(9-8)) \n", - "0358: 0 = (3+(5-8)) 1446: 1 = ((4/4)^6) 3338: 3 = √((3/3)+8) 6699: 6 = (6-(9-9)) \n", - "0359: 0 = ((3-√9)*5) 1447: 1 = (4+(4-7)) 3339: 3 = ((3^3)/9) 6777: 6 = (7-(7/7)) \n", - "0366: 0 = (√36-6) 1448: 1 = ((4+4)/8) 3344: 3 = (3-(4-4)) 6778: 6 = (7+(7-8)) \n", - "0367: 0 = ((3!-6)*7) 1449: 1 = ((4/4)^9) 3345: 3 = √(54/3!) 6779: 6 = (7-(7-√9!)) \n", - "0368: 0 = ((3!-6)*8) 1455: 1 = (4^(5-5)) 3346: 3 = √(36/4) 6788: 6 = (7-(8/8)) \n", - "0369: 0 = (3+(6-9)) 1456: 1 = ((4-5)^6) 3347: 3 = (3!+(4-7)) 6789: 6 = (7+(8-9)) \n", - "0377: 0 = (3*(7-7)) 1457: 1 = ((5-4)^7) 3348: 3 = √√(84-3) 6799: 6 = (7-(9/9)) \n", - "0378: 0! = ((8-7)^3) 1458: 1 = (4+(5-8)) 3349: 3 = ((3*4)-9) 6888: 6 = (8-√√(8+8)) \n", - "0379: 0 = ((3-√9)*7) 1459: 1 = ((4+5)/9) 3355: 3 = (3-(5-5)) 6889: 6 = √√(89-8)! \n", - "0388: 0 = (3*(8-8)) 1466: 1 = (4^(6-6)) 3356: 3 = (3*(6-5)) 6899: 6 = ((9-8)*√9!) \n", - "0389: 0 = ((3-√9)*8) 1467: 1 = (√64-7) 3357: 3 = √√(3!+75) 6999: 6 = (9-(9/√9)) \n", - "0399: 0 = (3*(9-9)) 1468: 1 = (√64/8) 3358: 3 = (3!+(5-8)) 7777: 7 = (7-(7-7)) \n", - "0444: 0 = (4*(4-4)) 1469: 1 = (√49-6) 3359: 3 = √√(5!-39) 7778: 7 = (7*(8-7)) \n", - "0445: 0 = ((4-4)*5) 1477: 1 = (4^(7-7)) 3366: 3 = (3-(6-6)) 7779: 7 = (√7^(9-7)) \n", - "0446: 0 = ((4-4)*6) 1478: 1 = ((7-8)^4) 3367: 3 = √(63/7) 7788: 7 = (7-(8-8)) \n", - "0447: 0 = ((4-4)*7) 1479: 1 = (√49/7) 3368: 3 = (√3^(8-6)) 7789: 7 = (7*(9-8)) \n", - "0448: 0 = (4+(4-8)) 1488: 1 = (4^(8-8)) 3369: 3 = (9-√36) 7799: 7 = (7-(9-9)) \n", - "0449: 0 = ((4-4)*9) 1489: 1 = (8-√49) 3377: 3 = (3-(7-7)) 7888: 7 = (8-(8/8)) \n", - "0455: 0 = (4*(5-5)) 1499: 1 = (4^(9-9)) 3378: 3 = √√(3+78) 7889: 7 = (8+(8-9)) \n", - "0456: 0 = (√(4+5)!-6) 1555: 1 = (5^(5-5)) 3379: 3 = (√3^(9-7)) 7899: 7 = (8-(9/9)) \n", - "0457: 0 = (√4+(5-7)) 1556: 1 = ((5/5)^6) 3388: 3 = (3-(8-8)) 7999: 7 = (√9!+(9/9)) \n", - "0458: 0! = (4+(5-8)) 1557: 1 = ((5/5)^7) 3389: 3 = (3*(9-8)) 8888: 8 = (8-(8-8)) \n", - "0459: 0 = (4+(5-9)) 1558: 1 = ((5/5)^8) 3399: 3 = (3-(9-9)) 8889: 8 = (8*(9-8)) \n", - "0466: 0 = (4*(6-6)) 1559: 1 = (5+(5-9)) 3444: 3 = (4-(4/4)) 8899: 8 = (8-(9-9)) \n", - "0467: 0 = (6-(7-4)!) 1566: 1 = (5^(6-6)) 3445: 3 = (4+(4-5)) 8999: 8 = (9-(9/9)) \n", - "0468: 0 = (√64-8) 1567: 1 = ((6-5)^7) 3446: 3 = (4!/√64) 9999: 9 = (9-(9-9)) \n", - "0469: 0 = (√(4*9)-6) 1568: 1 = ((5-6)^8) 3447: 3 = (7-√(4*4)) \n" + "0000: (0!+(0!+(0!+0!)))! 0477: (74-70)! 1569: 96/(5-1) 3448: 3+(84/4) \n", + "0001: (0!+√(10-0!))! 0478: (0/78)+4! 1577: (75-71)! 3449: 34-(4+√9!) \n", + "0002: (0!+((0^0)+2))! 0479: 94-70 1578: 81-57 3455: 34-(5+5) \n", + "0003: 0+((0^0)+3)! 0488: (84-80)! 1579: 95-71 3456: (54/3)+6 \n", + "0004: 0+(0-(0-4!)) 0489: (0/89)+4! 1588: (85-81)! 3457: (3^4)-57 \n", + "0005: 0+(5-(0^0))! 0499: (94-90)! 1589: (18-(5+9))! 3458: 58-34 \n", + "0006: (6-(0!+(0^0)))! 0555: (5-(55^0))! 1599: (95-91)! 3459: (53-49)! \n", + "0007: ((0!+7)/(0!+0!))! 0556: ((50/5)-6)! 1666: (16-(6+6))! 3466: 36*(4/6) \n", + "0008: (0!+√√(0!+80))! 0557: (5-(57^0))! 1667: (6!-716)! 3467: 67-43 \n", + "0009: 0+((0^0)+√9)! 0558: (5-(58^0))! 1668: 18+√(6*6) 3468: 3*(48/6) \n", + "0011: (0!+√(10-1))! 0559: (5-(59^0))! 1669: 96/√16 3469: 36-(4*√9) \n", + "0012: (0!+0!)*12 0566: (60-56)! 1677: (71-67)! 3477: 73-(7^√4) \n", + "0013: (√100-3!)! 0567: (5-(67^0))! 1678: 168/7 3478: 38-(√4*7) \n", + "0014: (40/10)! 0568: 80-56 1679: 91-67 3479: 73-49 \n", + "0015: (5-(10^0))! 0569: 6+(90/5) 1688: 18/(6/8) 3488: 48-(3*8) \n", + "0016: (√100-6)! 0577: (5-(77^0))! 1689: (16-8)*√9 3489: (48/(3+9))! \n", + "0017: (0!+(10-7))! 0578: (5-(78^0))! 1699: (√169-9)! 3499: (99-3)/4 \n", + "0018: √(10-0!)*8 0579: (5-(79^0))! 1777: 17+√(7*7) 3555: (5!/(35-5))! \n", + "0019: (√100-√9!)! 0588: (80/5)+8 1778: (81-77)! 3556: 35-(5+6) \n", + "0022: 0!+(0!+22) 0589: (5-(89^0))! 1779: √(71-7)*√9 3557: (57-53)! \n", + "0023: (0^0)+23 0599: (5-(99^0))! 1788: √(17-8)*8 3558: 3*(5-(5-8)) \n", + "0024: 0-(0-24) 0666: 60-(6*6) 1789: (91-87)! 3559: 59-35 \n", + "0025: 25-(0^0) 0667: (70-66)! 1799: (17-9)*√9 3566: (√36*5)-6 \n", + "0026: 26-(0!+0!) 0668: ((6!/60)-8)! 1888: (√(18*8)-8)! 3567: 3*(56/7) \n", + "0027: (((0^0)+7)/2)! 0669: 90-66 1889: √(18-9)*8 3568: 3*√(56+8) \n", + "0028: (80/20)! 0677: ((70/7)-6)! 1899: 18+(9-√9) 3569: (63-59)! \n", + "0029: 0!+(20+√9) 0678: (80-76)! 1999: (19-(9+√9!))! 3577: 77-53 \n", + "0033: 0+(30-3!) 0679: √(70-6)*√9 2222: 2+(√22^2) 3578: 37-(5+8) \n", + "0034: (0/30)+4! 0688: ((80/8)-6)! 2223: (2/2)+23 3579: √(3*75)+9 \n", + "0035: 30-(0!+5) 0689: (90-86)! 2224: 2-(2-24) 3588: (5!/(38-8))! \n", + "0036: 0+(30-6) 0699: (90/6)+9 2225: 25-(2/2) 3589: 83-59 \n", + "0037: 0!+(30-7) 0777: ((0!+7)!/(7!+7!))! 2226: (26-22)! 3599: 3+(5!-99) \n", + "0038: (3+(80^0))! 0778: √(7!/70)*√8 2227: 2*√(2*72) 3666: 36-(6+6) \n", + "0039: (3+(90^0))! 0779: 7!/(70*√9) 2228: 28-(2^2) 3667: (67-63)! \n", + "0044: (0/40)+4! 0788: 80-(7*8) 2229: (22-(2*9))! 3668: (3!!/8)-66 \n", + "0045: (0/50)+4! 0789: ((78^0)+√9)! 2233: 23-(2-3) 3669: 3!!-696 \n", + "0046: (0/60)+4! 0799: ((79^0)+√9)! 2234: 24^(3-2) 3677: 37-(6+7) \n", + "0047: (0/70)+4! 0888: √(80-8)*√8 2235: 22-(3-5) 3678: 87-63 \n", + "0048: (0/80)+4! 0889: (80-8)/√9 2236: 22+(6/3) 3679: (73-69)! \n", + "0049: (0/90)+4! 0899: 8*√√(90-9) 2237: (27-23)! 3688: 38-(6+8) \n", + "0055: (5-(50^0))! 0999: (90/√9!)+9 2238: (32-28)! 3689: (96/3)-8 \n", + "0056: (5-(60^0))! 1111: (1+(1+(1+1)))! 2239: (92/23)! 3699: 93-69 \n", + "0057: (5-(70^0))! 1112: (1+1)*12 2244: √24*√24 3777: (77-73)! \n", + "0058: (5-(80^0))! 1113: 11+13 2245: (52-4)/2 3778: 38-(7+7) \n", + "0059: (5-(90^0))! 1114: (1+11)*√4 2246: 46-22 3779: 97-73 \n", + "0066: (0!+0!)*(6+6) 1115: (15-11)! 2247: 4/√(2/72) 3788: (87-83)! \n", + "0067: (6-(0!+(7^0)))! 1116: (11-(1+6))! 2248: (28-24)! 3789: (83-79)! \n", + "0068: √(80/(6-0!))! 1117: 1*(11-7)! 2249: 42-(2*9) 3799: (97-93)! \n", + "0069: ((60^0)+√9)! 1118: (1+(11-8))! 2255: √25!/√25 3888: 3*(8-(8-8)) \n", + "0077: (7-√(0!+(0!+7)))! 1119: ((1+11)/√9)! 2256: (2^√√√256)! 3889: 38-(8+√9!) \n", + "0078: 0!/√(70/8!) 1122: 12+12 2257: 22-(5-7) 3899: (93-89)! \n", + "0079: ((70^0)+√9)! 1123: 1*(1+23) 2258: 52-28 3999: (99/3)-9 \n", + "0088: √√(0!+80)*8 1124: 1-(1-24) 2259: √225+9 4444: 4+(44-4!) \n", + "0089: ((80^0)+√9)! 1125: 1*(25-1) 2266: √(22-6)*6 4445: 44-(4*5) \n", + "0099: ((90^0)+√9)! 1126: (16-12)! 2267: 2/(6/72) 4446: (4*4)+√64 \n", + "0111: (√(10-1)+1)! 1127: (21-17)! 2268: 22-(6-8) 4447: (44/(4+7))! \n", + "0112: (0!+1)*12 1128: 21+√√81 2269: 96/(2^2) 4448: (48-44)! \n", + "0113: ((1^10)+3)! 1129: 1*(21+√9) 2277: 27-√(2+7) 4449: (4*√49)-4 \n", + "0114: 10+14 1133: (11-3)*3 2278: √(28/7)!^2 4455: 54-(5!/4) \n", + "0115: (10-(1+5))! 1134: (13-1)*√4 2279: 22-(7-9) 4456: (6^4)/54 \n", + "0116: (10-6)!^1 1135: 35-11 2288: (88/22)! 4457: ((7^√4)-45)! \n", + "0117: 0+(11-7)! 1136: 31-(1+6) 2289: (28/(9-2))! 4458: (44-(5*8))! \n", + "0118: √(10-1)*8 1137: (17-13)! 2299: 29-(2+√9) 4459: (49-45)! \n", + "0119: ((1^10)+√9)! 1138: (13-√81)! 2333: 23+(3/3) 4466: (√64-4)*6 \n", + "0122: 0+(12*2) 1139: (11*3)-9 2334: 23-(3-4) 4467: 744-6! \n", + "0123: 0+(1+23) 1144: (44/11)! 2335: 25-(3/3) 4468: 68-44 \n", + "0124: 0+(1*24) 1145: (11-5)*4 2336: (36-32)! 4469: 64/(4!/9) \n", + "0125: 120/5 1146: 1*(16/4)! 2337: 33-(2+7) 4477: 4*√√(4+77)! \n", + "0126: √16+20 1147: 41-17 2338: 32*(3!/8) 4478: √4/(7/84) \n", + "0127: 7!/210 1148: (18-14)! 2339: (33-29)! 4479: 4!-(√49-7) \n", + "0128: 0+(12-8)! 1149: (11-√49)! 2344: 23+(4/4) 4488: 4*(48/8) \n", + "0129: 0+(21+√9) 1155: (1+(15/5))! 2345: 23-(4-5) 4489: (√49-4)*8 \n", + "0133: (10*3)-3! 1156: (5!-116)! 2346: 32-√64 4499: ((√49+9)/4)! \n", + "0134: 34-10 1157: (5*7)-11 2347: 47-23 4555: ((45/5)-5)! \n", + "0135: 30-(1+5) 1158: 15+√81 2348: (42-38)! 4556: 54-(5*6) \n", + "0136: (10-√36)! 1159: (19-15)! 2349: √(23-√49)! 4557: 55-(4!+7) \n", + "0137: 0+(31-7) 1166: (16/√16)! 2355: 23+(5/5) 4558: (58-54)! \n", + "0138: 30-√√81! 1167: 1+(16+7) 2356: 56-32 4559: 49-(5*5) \n", + "0139: 0+(13-9)! 1168: 1*(16+8) 2357: 25+(3!-7) 4566: (√54*√6)+6 \n", + "0144: (10-4)*4 1169: 16-(1-9) 2358: (38/2)+5 4567: 576/4! \n", + "0145: √(5!-104)! 1177: 1*(17+7) 2359: 53-29 4568: 56-(4*8) \n", + "0146: 40-16 1178: 17-(1-8) 2366: 23+(6/6) 4569: 69-45 \n", + "0147: (0/17)+4! 1179: (1+71)/√9 2367: 23-(6-7) 4577: ((7*7)-45)! \n", + "0148: (0/18)+4! 1188: (11-8)*8 2368: 62-38 4578: 78-54 \n", + "0149: 0!+(14+9) 1189: (8/(11-9))! 2369: 2*(36/√9) 4579: 45-(7*√9) \n", + "0155: (10-5)!/5 1199: (11*√9)-9 2377: 23+(7/7) 4588: √√(85-4)*8 \n", + "0156: (60/15)! 1222: 1*(2+22) 2378: 23-(7-8) 4589: 48/(5-√9) \n", + "0157: (5-(17^0))! 1223: (1^2)+23 2379: 27-(9/3) 4599: (45/√9)+9 \n", + "0158: 0!+(15+8) 1224: 12/(2/4) 2388: 23+(8/8) 4666: (6-(√64-6))! \n", + "0159: 0+(15+9) 1225: (25-21)! 2389: 23-(8-9) 4667: (46-(6*7))! \n", + "0166: (10-6)*6 1226: √√16+22 2399: 23+(9/9) 4668: (68-64)! \n", + "0167: 0!+(16+7) 1227: 27-(1+2) 2444: 24-(4-4) 4669: 6/(4!/96) \n", + "0168: (6!/180)! 1228: (22-18)! 2445: 24^(5-4) 4677: 4*(6-(7-7)) \n", + "0169: (10*√9)-6 1229: (21-9)*2 2446: (46-42)! 4678: (68/4)+7 \n", + "0177: 0+(17+7) 1233: (1^3)+23 2447: 42*(4/7) 4679: √64+(7+9) \n", + "0178: (10-7)*8 1234: 12+(3*4) 2448: 48-24 4688: 88-64 \n", + "0179: (0!+71)/√9 1235: (52/13)! 2449: (2+94)/4 4689: 96/(8-4) \n", + "0188: (8/(10-8))! 1236: 36-12 2455: 24-(5-5) 4699: √(64/9)*9 \n", + "0189: 0+(18+√9!) 1237: (31-27)! 2456: (√256/4)! 4777: 4*(7-(7/7)) \n", + "0199: (10-(9-√9))! 1238: √18*√32 2457: 52-(4*7) 4778: (78-74)! \n", + "0222: 0+(2+22) 1239: (23-19)! 2458: (52-48)! 4779: ((9^√4)-77)! \n", + "0223: (2^0)+23 1244: √144*2 2459: 49-25 4788: ((84/7)-8)! \n", + "0224: (24-20)! 1245: 45-21 2466: 66-42 4789: 98-74 \n", + "0225: (20/√25)! 1246: (12-√64)! 2467: (724-6!)! 4799: ((49/7)-√9)! \n", + "0226: 0-(2-26) 1247: 1+(27-4) 2468: 26-(8/4) 4888: (88-84)! \n", + "0227: 27-(0!+2) 1248: 42-18 2469: (96/24)! 4889: (8*9)-48 \n", + "0228: 20+(8/2) 1249: 1+(92/4) 2477: 24-(7-7) 4899: (98-94)! \n", + "0229: 20-(2-√9!) 1255: 25-(1^5) 2478: 72-48 4999: (99-√9)/4 \n", + "0233: 23+(3^0) 1256: 1*√√256! 2479: √√(247+9)! 5555: √(5+(55/5))! \n", + "0234: (0^3)+24 1257: 51-27 2488: 24-(8-8) 5556: 5+((5*5)-6) \n", + "0235: 23+(5^0) 1258: 1+(28-5) 2489: (28/√49)! 5557: ((55/5)-7)! \n", + "0236: (30-26)! 1259: 19+√25 2499: 24-(9-9) 5558: √((85-5)/5)! \n", + "0237: 0+(27-3) 1266: 26-√√16 2555: 25-(5/5) 5559: (59-55)! \n", + "0238: 0+(32-8) 1267: √16*√(2+7)! 2556: (56-52)! 5566: (5*5)-(6/6) \n", + "0239: 23+(9^0) 1268: 28-√16 2557: (55-7)/2 5567: (√(5+76)-5)! \n", + "0244: 44-20 1269: 216/9 2558: (58/2)-5 5568: (√(86-5)-5)! \n", + "0245: (0^5)+24 1277: (√17^2)+7 2559: 29-√(5*5) 5569: (56/(5+9))! \n", + "0246: (0^6)+24 1278: (72/18)! 2566: √√256*6 5577: 5+(5+(7+7)) \n", + "0247: (0^7)+24 1279: 12*(9-7) 2567: 76-52 5578: 7+(85/5) \n", + "0248: 0+(28-4) 1288: √(128/8)! 2568: √256+8 5579: 79-55 \n", + "0249: (0^9)+24 1289: 192/8 2569: √25!-96 5588: (5*5)-(8/8) \n", + "0255: 25-(5^0) 1299: √192*√√9 2577: 25-(7/7) 5589: (5*5)+(8-9) \n", + "0256: 50-26 1333: (13-(3*3))! 2578: 25+(7-8) 5599: √(5+59)*√9 \n", + "0257: 25-(7^0) 1334: 31-(3+4) 2579: (57-9)/2 5666: √(5+(66/6))! \n", + "0258: 25-(8^0) 1335: (35-31)! 2588: 82-58 5667: 66-(7!/5!) \n", + "0259: 0+(29-5) 1336: (1+3)*√36 2589: 25+(8-9) 5668: (56/(6+8))! \n", + "0266: (60/2)-6 1337: 37-13 2599: 25-(9/9) 5669: (69-65)! \n", + "0267: (√(70-6)/2)! 1338: 33-√81 2666: (66-62)! 5677: (56/(7+7))! \n", + "0268: ((8^2)-60)! 1339: 1*(33-9) 2667: ((6!/72)-6)! 5678: √(5+67)*√8 \n", + "0269: 0!+(29-6) 1344: 144/3! 2668: 86-62 5679: 56/(7/√9) \n", + "0277: ((0!+27)/7)! 1345: √(1+35)*4 2669: (66/2)-9 5688: √√(86-5)*8 \n", + "0278: 0+(28/7)! 1346: (14-6)*3 2677: (76-72)! 5689: 89-65 \n", + "0279: 0+(27-√9) 1347: (41-37)! 2678: (72-68)! 5699: 69-(5*9) \n", + "0288: 20+√(8+8) 1348: 38-14 2679: 96-72 5777: √(5+(77/7))! \n", + "0289: 28-(0!+√9) 1349: 43-19 2688: (86-82)! 5778: √(77-5)*√8 \n", + "0299: ((29^0)+√9)! 1355: 55-31 2689: 92-68 5779: (79-75)! \n", + "0333: 30-(3+3) 1356: 13+(5+6) 2699: (96-92)! 5788: (√(88-7)-5)! \n", + "0334: (34-30)! 1357: (15-7)*3 2777: (2/(7/(7+7)))! 5789: 5!-(7+89) \n", + "0335: (3+(35^0))! 1358: (13-8)!/5 2778: (28/√(7*7))! 5799: 99-75 \n", + "0336: 30-√36 1359: 39-15 2779: (7-(27/9))! 5888: 5!-(8+88) \n", + "0337: (73-0!)/3 1366: √16*√36 2788: (82-78)! 5889: (89-85)! \n", + "0338: 33-(0!+8) 1367: 61-37 2789: 27*(8/9) 5899: (85-(9*9))! \n", + "0339: 0+(33-9) 1368: 18+√36 2799: 27-(9/√9) 5999: (99-95)! \n", + "0344: (4^3)-40 1369: (13-9)*6 2888: 88-(8^2) 6666: 6+(6+(6+6)) \n", + "0345: 54-30 1377: 31-√(7*7) 2889: (92-88)! 6667: 66-(6*7) \n", + "0346: (40-36)! 1378: (3!*7)-18 2899: 29-(8-√9) 6668: (6!/8)-66 \n", + "0347: (0/37)+4! 1379: (17-9)*3 2999: 2*(9+(9/√9)) 6669: 6!-696 \n", + "0348: (0/38)+4! 1388: 18/(3!/8) 3333: 33-(3*3) 6678: (6-((6+8)/7))! \n", + "0349: (0/39)+4! 1389: 18-(3-9) 3334: 33-(3^√4) 6679: √√(976-6!)! \n", + "0355: (3+(55^0))! 1399: (13-9)*√9! 3335: (5!/(33-3))! 6688: ((6!/8)-86)! \n", + "0356: (30/6)!/5 1444: √144*√4 3336: 33-(3+6) 6689: 8+(96/6) \n", + "0357: (75/3)-0! 1445: 144-5! 3337: (37-33)! 6699: (66+√9!)/√9 \n", + "0358: 30-(8-5)! 1446: 144/6 3338: 33-√(√3^8) 6777: (6-((7+7)/7))! \n", + "0359: 3!+(90/5) 1447: 1-(4!-47) 3339: 33-(3*√9) 6778: (7-√√(87-6))! \n", + "0366: 60-36 1448: (√144-8)! 3344: 34-(3!+4) 6779: (67-(7*9))! \n", + "0367: 3*√(70-6) 1449: 144/√9! 3345: 33-(4+5) 6788: 6!-(87*8) \n", + "0368: (3+(68^0))! 1455: 14+(5+5) 3346: 36-(3*4) 6789: 78-(6*9) \n", + "0369: (6*9)-30 1456: 65-41 3347: 34-(3+7) 6799: 96/(7-√9) \n", + "0377: 7!/(30*7) 1457: (51-47)! 3348: (38-34)! 6888: (68-(8*8))! \n", + "0378: (3+(78^0))! 1458: √(14-5)*8 3349: (43-39)! 6889: 96/√(8+8) \n", + "0379: (3+(79^0))! 1459: (15-9)*4 3355: 35-(3!+5) 6899: 96-(8*9) \n", + "0388: (80-8)/3 1466: 16+√64 3356: (3!*5)-√36 6999: (69+√9)/√9 \n", + "0389: (3+(89^0))! 1467: (√16*7)-4 3357: 57-33 7777: ((77/7)-7)! \n", + "0399: 30-(9-√9) 1468: 48-√16! 3358: 35-(3+8) 7778: (7/((7+7)/8))! \n", + "0444: (44-40)! 1469: 1/(4/96) 3359: (39-35)! 7779: 7+(7+(7+√9)) \n", + "0445: (0/45)+4! 1477: 71-47 3366: (3*√36)+6 7788: (7-√√(88-7))! \n", + "0446: 64-40 1478: 18+(7-4)! 3367: 3*√(67-3) 7789: 87-(7*9) \n", + "0447: (0/47)+4! 1479: 17+√49 3368: (√36-3)*8 7799: (79-7)/√9 \n", + "0448: 4+(80/4) 1488: 18-(√4-8) 3369: 63-39 7888: ((88/8)-7)! \n", + "0449: (0/49)+4! 1489: 41-(8+9) 3377: 37-(3!+7) 7889: √√(78+√9)*8 \n", + "0455: (54-50)! 1499: 19-(4-9) 3378: (78-3!)/3 7899: 78-(9*√9!) \n", + "0456: (50-46)! 1555: (55-51)! 3379: (93/3)-7 7999: ((99/9)-7)! \n", + "0457: 74-50 1556: (15-(5+6))! 3388: 38-(3!+8) 8888: 88-(8*8) \n", + "0458: (480/5!)! 1557: 75-51 3389: 33-(9!/8!) 8889: 8*√√(89-8) \n", + "0459: (0/59)+4! 1558: 15/(5/8) 3399: 33-√(9*9) 8899: 8*√(8+(9/9)) \n", + "0466: (64-60)! 1559: 19+√(5*5) 3444: √(34+√4)*4 8999: 8*(9-(9-√9)) \n", + "0467: 70-46 1566: (65-61)! 3445: 3-(4!-45) 9999: (99/√9)-9 \n", + "0468: 84-60 1567: (61-57)! 3446: 34-(4+6) \n", + "0469: 0+(96/4) 1568: 85-61 3447: (47-43)! \n", + "\n", + "1 out of 715 distinct license plates (0.1%) can NOT be solved:\n", + "\n", + "6677\n" + ] + } + ], + "source": [ + "show_plates(ops='+-*/^_√!,')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Wow**! We got all the plates except one, 6677. Let's extend the operators to allow a decimal point:" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'((6/.6)+(7+7))'" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "expressions((6, 6, 7, 7), permute=True).get(24)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I remember a similar game, but the goal was to make an equation: that is, on seeing the plate \"2346\", my game is to find an equation such as \"6/3 = 4/2\". Let's try:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "714 out of 715 distinct license plates (99.9%) can be solved:\n", + "\n", + "0000: 0 = (0^(0^0)) 0344: 0 = (3*(4-4)) 1255: 1 = (√25/5) 2345: 2 = (3+(4-5)) 3669: 3 = (6+(6-9)) \n", + "0001: 0 = (0^10) 0345: 0 = (3+(√4-5)) 1256: 1 = (6-√25) 2346: 2 = (√36-4) 3677: 3! = (6-(7-7)) \n", + "0002: 0 = (0/20) 0346: 0 = ((3*√4)-6) 1257: 1 = ((2+5)/7) 2347: 2 = ((3^√4)-7) 3678: 3 = √√(87-6) \n", + "0003: 0 = (0/30) 0347: 0 = (3+(4-7)) 1258: 1 = (5-(8/2)) 2348: 2 = √√(48/3) 3679: 3 = (6/(9-7)) \n", + "0004: 0 = (0/40) 0348: 0 = (3-(4!/8)) 1259: 1 = ((2*5)-9) 2349: 2 = √(√49-3) 3688: 3 = (6/√√(8+8)) \n", + "0005: 0 = (0/50) 0349: 0 = ((3^√4)-9) 1266: 1 = (2^(6-6)) 2355: 2 = (3-(5/5)) 3689: 3 = (6/(8-√9!)) \n", + "0006: 0 = (0/60) 0355: 0 = (3*(5-5)) 1267: 1 = (2+(6-7)) 2356: 2 = (3+(5-6)) 3699: 3 = (9/(9-6)) \n", + "0007: 0 = (0/70) 0356: 0 = ((3!-6)^5) 1268: 1 = ((2+6)/8) 2357: 2 = ((3+7)/5) 3777: 3! = (7-(7/7)) \n", + "0008: 0 = (0/80) 0357: 0! = (3+(5-7)) 1269: 1 = (9-(2+6)) 2358: 2 = (3!/(8-5)) 3778: 3 = √((7/7)+8) \n", + "0009: 0 = (0/90) 0358: 0 = (3+(5-8)) 1277: 1 = (2^(7-7)) 2359: 2 = (5-(9/3)) 3779: 3 = (7-(7-√9)) \n", + "0011: 0 = (0/11) 0359: 0 = ((3-√9)^5) 1278: 1 = (2+(7-8)) 2366: 2 = (3-(6/6)) 3788: 3 = √√(88-7) \n", + "0012: 0 = (0/12) 0366: 0 = (√36-6) 1279: 1 = ((2+7)/9) 2367: 2 = (3+(6-7)) 3789: 3 = √√(78+√9) \n", + "0013: 0 = (0/13) 0367: 0 = ((3!-6)^7) 1288: 1 = (2^(8-8)) 2368: 2 = (8-√36) 3799: 3 = (√9!/(9-7)) \n", + "0014: 0 = (0/14) 0368: 0 = ((3!-6)^8) 1289: 1 = (2+(8-9)) 2369: 2 = √(36/9) 3888: 3 = √(8+(8/8)) \n", + "0015: 0 = (0/15) 0369: 0 = (3+(6-9)) 1299: 1 = (2^(9-9)) 2377: 2 = (3-(7/7)) 3889: 3 = √√(89-8) \n", + "0016: 0 = (0/16) 0377: 0 = (3*(7-7)) 1333: 1 = (3^(3-3)) 2378: 2 = (3+(7-8)) 3899: 3 = ((9-8)*√9) \n", + "0017: 0 = (0/17) 0378: 0! = ((8-7)^3) 1334: 1 = ((3/3)^4) 2379: 2 = ((3*√9)-7) 3999: 3 = (9-(9-√9)) \n", + "0018: 0 = (0/18) 0379: 0 = ((3-√9)^7) 1335: 1 = (3+(3-5)) 2388: 2 = (3-(8/8)) 4444: 4 = (4-(4-4)) \n", + "0019: 0 = (0/19) 0388: 0 = (3*(8-8)) 1336: 1 = (3!/√36) 2389: 2 = (3+(8-9)) 4445: 4 = (4^(5-4)) \n", + "0022: 0 = (0/22) 0389: 0 = ((3-√9)^8) 1337: 1 = ((3/3)^7) 2399: 2 = (3-(9/9)) 4446: 4 = (√64-4) \n", + "0023: 0 = (0/23) 0399: 0 = (3*(9-9)) 1338: 1 = ((3/3)^8) 2444: 2 = ((4+4)/4) 4447: 4 = ((4+4!)/7) \n", + "0024: 0 = (0/24) 0444: 0 = (4*(4-4)) 1339: 1 = (3*(3/9)) 2445: 2 = (√4^(5-4)) 4448: 4 = (√4/(4/8)) \n", + "0025: 0 = (0/25) 0445: 0 = ((4-4)^5) 1344: 1 = (3^(4-4)) 2446: 2 = (√64/4) 4449: 4 = (4^(4-√9)) \n", + "0026: 0 = (0/26) 0446: 0 = ((4-4)^6) 1345: 1 = ((4-3)^5) 2447: 2 = ((7-4)!-4) 4455: 4 = (4-(5-5)) \n", + "0027: 0 = (0/27) 0447: 0 = ((4-4)^7) 1346: 1 = (3+(4-6)) 2448: 2 = (48/4!) 4456: 4 = √(6!/45) \n", + "0028: 0 = (0/28) 0448: 0 = (4+(4-8)) 1347: 1 = ((3+4)/7) 2449: 2 = (√(4*9)-4) 4457: 4 = (√4-(5-7)) \n", + "0029: 0 = (0/29) 0449: 0 = ((4-4)^9) 1348: 1 = ((3-4)^8) 2455: 2 = (√4-(5-5)) 4458: 4 = ((√4^5)/8) \n", + "0033: 0 = (0/33) 0455: 0 = (4*(5-5)) 1349: 1 = (√49-3!) 2456: 2 = ((4+6)/5) 4459: 4 = (5-(4-√9)) \n", + "0034: 0 = (0/34) 0456: 0 = (√(4+5)!-6) 1355: 1 = (3^(5-5)) 2457: 2 = (4+(5-7)) 4466: 4 = (4-(6-6)) \n", + "0035: 0 = (0/35) 0457: 0 = (√4+(5-7)) 1356: 1 = (√36-5) 2458: 2 = ((√4*5)-8) 4467: 4 = (4^(7-6)) \n", + "0036: 0 = (0/36) 0458: 0! = (4+(5-8)) 1357: 1 = (3+(5-7)) 2459: 2 = (√49-5) 4468: 4 = √(√64+8) \n", + "0037: 0 = (0/37) 0459: 0 = (4+(5-9)) 1358: 1 = ((3+5)/8) 2466: 2 = (√64-6) 4469: 4 = (96/4!) \n", + "0038: 0 = (0/38) 0466: 0 = (4*(6-6)) 1359: 1 = (9-(3+5)) 2467: 2 = (6/(7-4)) 4477: 4 = (4-(7-7)) \n", + "0039: 0 = (0/39) 0467: 0 = (6-(7-4)!) 1366: 1 = (√36/6) 2468: 2 = (4+(6-8)) 4478: 4 = (4^(8-7)) \n", + "0044: 0 = (0/44) 0468: 0 = (√64-8) 1367: 1 = (7-√36) 2469: 2 = √(96/4!) 4479: 4 = ((7+9)/4) \n", + "0045: 0 = (0/45) 0469: 0 = (√(4*9)-6) 1368: 1 = (3+(6-8)) 2477: 2 = (√4-(7-7)) 4488: 4 = (4-(8-8)) \n", + "0046: 0 = (0/46) 0477: 0 = (4*(7-7)) 1369: 1 = ((3+6)/9) 2478: 2 = (√4^(8-7)) 4489: 4 = √(48/√9) \n", + "0047: 0 = (0/47) 0478: 0! = ((7-8)^4) 1377: 1 = (3^(7-7)) 2479: 2 = (4+(7-9)) 4499: 4 = (√49-√9) \n", + "0048: 0 = (0/48) 0479: 0 = (√49-7) 1378: 1 = ((8-7)^3) 2488: 2 = (8/(8-4)) 4555: 4 = (5-(5/5)) \n", + "0049: 0 = (0/49) 0488: 0 = (4*(8-8)) 1379: 1 = (3+(7-9)) 2489: 2 = √√(48/√9) 4556: 4 = (5+(5-6)) \n", + "0055: 0 = (0/55) 0489: 0 = (4!-(8*√9)) 1388: 1 = (3^(8-8)) 2499: 2 = (9-√49) 4557: √4 = (7-√(5*5)) \n", + "0056: 0 = (0/56) 0499: 0 = (4*(9-9)) 1389: 1 = ((9-8)^3) 2555: 2 = ((5+5)/5) 4558: 4 = √((5!/5)-8) \n", + "0057: 0 = (0/57) 0555: 0 = (5*(5-5)) 1399: 1 = (3^(9-9)) 2556: 2 = √(5+(5-6)) 4559: 4 = ((5/5)+√9) \n", + "0058: 0 = (0/58) 0556: 0 = ((5-5)^6) 1444: 1 = (4^(4-4)) 2557: 2 = (7-√(5*5)) 4566: 4 = (5-(6/6)) \n", + "0059: 0 = (0/59) 0557: 0 = ((5-5)^7) 1445: 1 = ((4/4)^5) 2558: 2 = (5+(5-8)) 4567: 4 = (5+(6-7)) \n", + "0066: 0 = (0/66) 0558: 0 = ((5-5)^8) 1446: 1 = ((4/4)^6) 2559: 2 = (√9-(5/5)) 4568: 4 = (√(6!/5)-8) \n", + "0067: 0 = (0/67) 0559: 0 = ((5-5)^9) 1447: 1 = (4+(4-7)) 2566: 2 = √(5-(6/6)) 4569: 4 = (6-(5-√9)) \n", + "0068: 0 = (0/68) 0566: 0 = (5*(6-6)) 1448: 1 = ((4/4)^8) 2567: 2 = ((5+7)/6) 4577: 4 = (5-(7/7)) \n", + "0069: 0 = (0/69) 0567: 0! = ((6-5)^7) 1449: 1 = ((4/4)^9) 2568: 2 = (6/(8-5)) 4578: 4 = (5+(7-8)) \n", + "0077: 0 = (0/77) 0568: 0 = (6-(8-5)!) 1455: 1 = (4^(5-5)) 2569: 2 = (5+(6-9)) 4579: 4 = ((5+7)/√9) \n", + "0078: 0 = (0/78) 0569: 0 = (5*(6-√9!)) 1456: 1 = ((4-5)^6) 2577: 2 = (√(7*7)-5) 4588: 4 = (5-(8/8)) \n", + "0079: 0 = (0/79) 0577: 0 = (5*(7-7)) 1457: 1 = ((5-4)^7) 2578: 2 = √(5+(7-8)) 4589: 4 = (5+(8-9)) \n", + "0088: 0 = (0/88) 0578: 0! = ((8-7)^5) 1458: 1 = (4+(5-8)) 2579: 2 = ((5+9)/7) 4599: 4 = (5-(9/9)) \n", + "0089: 0 = (0/89) 0579: 0! = (5-(7-√9)) 1459: 1 = ((4+5)/9) 2588: 2 = (8-(8-5)!) 4666: √4 = ((6+6)/6) \n", + "0099: 0 = (0/99) 0588: 0 = (5*(8-8)) 1466: 1 = (4^(6-6)) 2589: 2 = (8/(9-5)) 4667: 6 = (4+(6-7))! \n", + "0111: 0 = (1-(1^1)) 0589: 0 = (5-(8-√9)) 1467: 1 = (√64-7) 2599: 2 = (5-(9/√9)) 4668: 4 = (6+(6-8)) \n", + "0112: 0 = (1-(1^2)) 0599: 0 = (5*(9-9)) 1468: 1 = (√64/8) 2666: 2 = ((6+6)/6) 4669: 4 = √(96/6) \n", + "0113: 0 = (1-(1^3)) 0666: 0 = (6*(6-6)) 1469: 1 = (√49-6) 2667: 6 = (2-(6-7))! 4677: 6 = √√(4+77)! \n", + "0114: 0 = (1-(1^4)) 0667: 0 = ((6-6)^7) 1477: 1 = (4^(7-7)) 2668: 2 = (8-√(6*6)) 4678: √4 = ((6+8)/7) \n", + "0115: 0 = (1-(1^5)) 0668: 0 = ((6-6)^8) 1478: 1 = ((7-8)^4) 2669: 2 = √√(96/6) 4679: 4 = (6+(7-9)) \n", + "0116: 0 = (1-(1^6)) 0669: 0 = ((6-6)^9) 1479: 1 = (√49/7) 2677: 6 = (2+(7/7))! 4688: 4 = (8/(8-6)) \n", + "0117: 0 = (1-(1^7)) 0677: 0 = (6*(7-7)) 1488: 1 = (4^(8-8)) 2678: 2 = ((6+8)/7) 4689: 4 = (8^(6/9)) \n", + "0118: 0 = (1-(1^8)) 0678: 0! = ((6-7)^8) 1489: 1 = (8-√49) 2679: 2 = (6-(7-√9)) 4699: 4 = √(96/√9!) \n", + "0119: 0 = (1-(1^9)) 0679: 0 = ((6-√9!)^7) 1499: 1 = (4^(9-9)) 2688: 2 = (6-√(8+8)) 4777: √4 = ((7+7)/7) \n", + "0122: 0 = (1*(2-2)) 0688: 0 = (6*(8-8)) 1555: 1 = (5^(5-5)) 2689: 2 = (√8^(6/9)) 4778: 4 = (8!/(7!+7!)) \n", + "0123: 0 = (1+(2-3)) 0689: 0 = ((6-√9!)^8) 1556: 1 = ((5/5)^6) 2699: 2 = (6/(9/√9)) 4779: 4 = ((7/7)+√9) \n", + "0124: 0 = (1*(2-√4)) 0699: 0 = (6*(9-9)) 1557: 1 = ((5/5)^7) 2777: 2 = ((7+7)/7) 4788: 4 = √((8!/7!)+8) \n", + "0125: 0 = (2-√(5-1)) 0777: 0 = (7*(7-7)) 1558: 1 = ((5/5)^8) 2778: 2 = √(8!/(7!+7!)) 4789: 4 = (8/(9-7)) \n", + "0126: 0 = (√√16-2) 0778: 0 = ((7-7)^8) 1559: 1 = (5+(5-9)) 2779: 2 = (9-√(7*7)) 4799: 4 = (7-(9/√9)) \n", + "0127: 0! = (1^√27) 0779: 0 = ((7-7)^9) 1566: 1 = (5^(6-6)) 2788: 2 = √√((8!/7!)+8) 4888: 4 = (8-√(8+8)) \n", + "0128: 0! = (1^√28) 0788: 0 = (7*(8-8)) 1567: 1 = ((6-5)^7) 2789: 2 = ((7+9)/8) 4889: 4 = ((8/8)+√9) \n", + "0129: 0 = (1+(2-√9)) 0789: 0! = ((8-7)^9) 1568: 1 = ((5-6)^8) 2799: 2 = (√(9*9)-7) 4899: 4 = (9-(8-√9)) \n", + "0133: 0 = (1*(3-3)) 0799: 0 = (7*(9-9)) 1569: 1 = ((6-5)^9) 2888: 2 = ((8+8)/8) 4999: 4 = (√9+(9/9)) \n", + "0134: 0 = (1+(3-4)) 0888: 0 = (8*(8-8)) 1577: 1 = (5^(7-7)) 2889: 2 = (√9-(8/8)) 5555: 5 = (5-(5-5)) \n", + "0135: 0 = (1-(3!-5)) 0889: 0 = ((8-8)^9) 1578: 1 = ((8-7)^5) 2899: 2 = (8-(9-√9)) 5556: 5 = (5^(6-5)) \n", + "0136: 0 = (1*(3!-6)) 0899: 0 = (8*(9-9)) 1579: 1 = (5-(7-√9)) 2999: 2 = ((9+9)/9) 5557: 5 = (√5^(7-5)) \n", + "0137: 0 = (1+(3!-7)) 0999: 0 = (9*(9-9)) 1588: 1 = (5^(8-8)) 3333: 3 = (3-(3-3)) 5559: 5 = √(5!-95) \n", + "0138: 0 = (3-√√81) 1111: 1 = (1^√11) 1589: 1 = ((9-8)^5) 3334: 3 = √(33-4!) 5566: 5 = (5-(6-6)) \n", + "0139: 0 = (1*(3-√9)) 1112: 1 = (1^√12) 1599: 1 = (5^(9-9)) 3335: 3 = (3^(3!-5)) 5567: 5 = (5^(7-6)) \n", + "0144: 0 = (1*(4-4)) 1113: 1 = (1^√13) 1666: 1 = (6^(6-6)) 3336: 3 = (√36-3) 5568: 5 = (√5^(8-6)) \n", + "0145: 0 = (1+(4-5)) 1114: 1 = (1^√14) 1667: 1 = ((6/6)^7) 3337: 3 = (3^(7-3!)) 5569: 5 = (5-(6-√9!)) \n", + "0146: 0 = (√16-4) 1115: 1 = (1^√15) 1668: 1 = ((6/6)^8) 3338: 3 = √((3/3)+8) 5577: 5 = (5-(7-7)) \n", + "0147: 0! = (1^√47) 1116: 1 = (1^√16) 1669: 1 = ((6/6)^9) 3339: 3 = ((3^3)/9) 5578: 5 = (5^(8-7)) \n", + "0148: 0! = (1^√48) 1117: 1 = (1^√17) 1677: 1 = (6^(7-7)) 3344: 3 = (3-(4-4)) 5579: 5 = √(75/√9) \n", + "0149: 0 = (1-(4-√9)) 1118: 1 = (1^√18) 1678: 1 = ((6-7)^8) 3345: 3 = √(54/3!) 5588: 5 = (5-(8-8)) \n", + "0155: 0 = (1*(5-5)) 1119: 1 = (1^√19) 1679: 1 = ((7-6)^9) 3346: 3 = √(36/4) 5589: 5 = (5^(9-8)) \n", + "0156: 0 = (1+(5-6)) 1122: 1 = (1^√22) 1688: 1 = (6^(8-8)) 3347: 3 = (3!+(4-7)) 5599: 5 = (5-(9-9)) \n", + "0157: 0! = (1^√57) 1123: 1 = (1^√23) 1689: 1 = ((8-9)^6) 3348: 3 = √√(84-3) 5666: 5 = (6-(6/6)) \n", + "0158: 0! = (1^√58) 1124: 1 = (1^√24) 1699: 1 = (6^(9-9)) 3349: 3 = ((3*4)-9) 5667: 5 = (6+(6-7)) \n", + "0159: 0 = (1+(5-√9!)) 1125: 1 = (1^√25) 1777: 1 = (7^(7-7)) 3355: 3 = (3-(5-5)) 5668: 6 = (5+(6-8))! \n", + "0166: 0 = (1*(6-6)) 1126: 1 = (1^√26) 1778: 1 = ((7/7)^8) 3356: 3 = (3^(6-5)) 5669: 5 = (6-(6/√9!)) \n", + "0167: 0 = (1+(6-7)) 1127: 1 = (1^√27) 1779: 1 = ((7/7)^9) 3357: 3 = √√(3!+75) 5677: 5 = (6-(7/7)) \n", + "0168: 0 = (6-√√81!) 1128: 1 = (1^√28) 1788: 1 = (7^(8-8)) 3358: 3 = (3!+(5-8)) 5678: 5 = (6+(7-8)) \n", + "0169: 0 = (1*(6-√9!)) 1129: 1 = (1^√29) 1789: 1 = ((8-7)^9) 3359: 3 = √√(5!-39) 5679: 5 = (7-(6/√9)) \n", + "0177: 0 = (1*(7-7)) 1133: 1 = (1^√33) 1799: 1 = (7^(9-9)) 3366: 3 = (3-(6-6)) 5688: 5 = (6-(8/8)) \n", + "0178: 0 = (1+(7-8)) 1134: 1 = (1^√34) 1888: 1 = (8^(8-8)) 3367: 3 = √(63/7) 5689: 5 = (6+(8-9)) \n", + "0179: 0 = (1-(7-√9!)) 1135: 1 = (1^√35) 1889: 1 = ((8/8)^9) 3368: 3 = (3!/(8-6)) 5699: 5 = (6-(9/9)) \n", + "0188: 0 = (1*(8-8)) 1136: 1 = (1^√36) 1899: 1 = (8^(9-9)) 3369: 3 = (9-√36) 5777: 7 = (√7^(7-5)) \n", + "0189: 0 = (√81-9) 1137: 1 = (1^√37) 1999: 1 = (9^(9-9)) 3377: 3 = (3-(7-7)) 5778: 7 = √(57-8) \n", + "0199: 0 = (1*(9-9)) 1138: 1 = (1^√38) 2222: 2 = (2-(2-2)) 3378: 3 = √√(3+78) 5779: 5 = (7+(7-9)) \n", + "0222: 0 = (2*(2-2)) 1139: 1 = (1^√39) 2223: 2 = √√(32/2) 3379: 3 = (3!/(9-7)) 5788: 5 = (7-√√(8+8)) \n", + "0223: 0 = ((2-2)^3) 1144: 1 = (1^√44) 2224: 2 = (4!-22) 3388: 3 = (3-(8-8)) 5789: 5 = ((7+8)/√9) \n", + "0224: 0 = (2+(2-4)) 1145: 1 = (1^√45) 2225: 2 = √(5-(2/2)) 3389: 3 = (3^(9-8)) 5799: 5 = (9-(7-√9)) \n", + "0225: 0 = ((2-2)^5) 1146: 1 = (1^√46) 2226: 2 = √√(22-6) 3399: 3 = (3-(9-9)) 5888: 8 = √((√8^5)/√8) \n", + "0226: 0 = ((2-2)^6) 1147: 1 = (1^√47) 2227: 2 = √√(2+(2*7)) 3444: 3 = (4-(4/4)) 5889: 5 = (9-√(8+8)) \n", + "0227: 0 = ((2-2)^7) 1148: 1 = (1^√48) 2228: 2 = (8/(2^2)) 3445: 3 = (4+(4-5)) 5899: 5 = (8-(9/√9)) \n", + "0228: 0 = ((2-2)^8) 1149: 1 = (1^√49) 2229: 2 = (2^(√9-2)) 3446: 3 = (4!/√64) 5999: 5 = (√9!-(9/9)) \n", + "0229: 0 = ((2-2)^9) 1155: 1 = (1^√55) 2233: 2 = (2-(3-3)) 3447: 3 = (7-√(4*4)) 6666: 6 = (6-(6-6)) \n", + "0233: 0 = (2*(3-3)) 1156: 1 = (1^√56) 2234: 2 = √(24/3!) 3448: 3 = ((4+8)/4) 6667: 6 = (6^(7-6)) \n", + "0234: 0 = (2-(3!-4)) 1157: 1 = (1^√57) 2235: 2 = (√25-3) 3449: 3 = (√49-4) 6668: 6 = (√6^(8-6)) \n", + "0235: 0 = (2+(3-5)) 1158: 1 = (1^√58) 2236: 2 = √(√36-2) 3455: 3 = √(45/5) 6669: 6 = (6+(6-9))! \n", + "0236: 0 = ((2*3)-6) 1159: 1 = (1^√59) 2237: 2 = √√(23-7) 3456: 3 = (√64-5) 6677: 6 = (6-(7-7)) \n", + "0237: 0 = (2-√(7-3)) 1166: 1 = (1^√66) 2238: 2 = √(32/8) 3457: 3 = ((5+7)/4) 6678: 6 = (6^(8-7)) \n", + "0238: 0 = ((2^3)-8) 1167: 1 = (1^√67) 2239: 2 = (2-(3-√9)) 3458: 3 = √√(85-4) 6679: 6 = (√6^(9-7)) \n", + "0239: 0 = ((3^2)-9) 1168: 1 = (1^√68) 2244: 2 = (2-(4-4)) 3459: 3 = √(54/√9!) 6688: 6 = (6-(8-8)) \n", + "0244: 0 = (24-4!) 1169: 1 = (1^√69) 2245: 2 = (2^(5-4)) 3466: 3 = (4-(6/6)) 6689: 6 = (6^(9-8)) \n", + "0245: 0 = ((2-√4)^5) 1177: 1 = (1^√77) 2246: 2 = (26-4!) 3467: 3 = (4+(6-7)) 6699: 6 = (6-(9-9)) \n", + "0246: 0 = (2+(4-6)) 1178: 1 = (1^√78) 2247: 2 = (√(2+7)!-4) 3468: 3 = (4*(6/8)) 6777: 6 = (7-(7/7)) \n", + "0247: 0 = ((2-√4)^7) 1179: 1 = (1^√79) 2248: 2 = √(28-4!) 3469: 3 = (√4/(6/9)) 6778: 6 = (7+(7-8)) \n", + "0248: 0 = ((2*4)-8) 1188: 1 = (1^√88) 2249: 2 = √(24/√9!) 3477: 3 = √√(4+77) 6779: 6 = (7-(7-√9!)) \n", + "0249: 0 = ((2-√4)^9) 1189: 1 = (1^√89) 2255: 2 = (2-(5-5)) 3478: 3 = (4+(7-8)) 6788: 6 = (7-(8/8)) \n", + "0255: 0 = (√25-5) 1199: 1 = (1^√99) 2256: 2 = √√√256 3479: 3 = (9/(7-4)) 6789: 6 = (7+(8-9)) \n", + "0256: 0 = ((5-2)!-6) 1222: 1 = (2^(2-2)) 2257: 2 = (7-√25) 3488: 3 = (4-(8/8)) 6799: 6 = (7-(9/9)) \n", + "0257: 0 = (2+(5-7)) 1223: 1 = (2+(2-3)) 2258: 2 = ((2*5)-8) 3489: 3 = (4+(8-9)) 6888: 6 = (8-√√(8+8)) \n", + "0258: 0! = (5-(8/2)) 1224: 1 = (2*(2/4)) 2259: 2 = (√25-√9) 3499: 3 = (4-(9/9)) 6889: 6 = √√(89-8)! \n", + "0259: 0 = (2-(5-√9)) 1225: 1 = ((2/2)^5) 2266: 2 = (2-(6-6)) 3555: 3! = (5+(5/5)) 6899: 6 = ((9-8)*√9!) \n", + "0266: 0 = (2*(6-6)) 1226: 1 = ((2/2)^6) 2267: 2 = (2^(7-6)) 3556: 3 = (6!/(5!+5!)) 6999: 6 = (9-(9/√9)) \n", + "0267: 0 = (√(2+7)!-6) 1227: 1 = ((2/2)^7) 2268: 2 = (6-(8/2)) 3557: 3 = (5+(5-7)) 7777: 7 = (7-(7-7)) \n", + "0268: 0 = (2+(6-8)) 1228: 1 = ((2/2)^8) 2269: 2 = ((2^√9)-6) 3558: 3 = (5!/(5*8)) 7778: 7 = (7^(8-7)) \n", + "0269: 0 = (2-(6/√9)) 1229: 1 = ((2/2)^9) 2277: 2 = (2-(7-7)) 3559: 3 = (5-(5-√9)) 7779: 7 = (√7^(9-7)) \n", + "0277: 0 = (2*(7-7)) 1233: 1 = (2^(3-3)) 2278: 2 = √(28/7) 3566: 3! = (5+(6/6)) 7788: 7 = (7-(8-8)) \n", + "0278: 0! = (2+(7-8)) 1234: 1 = (4!-23) 2279: 2 = (√2^(9-7)) 3567: 3 = √√(5+76) 7789: 7 = (7^(9-8)) \n", + "0279: 0 = (2+(7-9)) 1235: 1 = (3!-√25) 2288: 2 = (2-(8-8)) 3568: 3 = √√(86-5) 7799: 7 = (7-(9-9)) \n", + "0288: 0 = (2*(8-8)) 1236: 1 = (2*(3/6)) 2289: 2 = (2^(9-8)) 3569: 3 = ((6+9)/5) 7888: 7 = (8-(8/8)) \n", + "0289: 0 = ((2^√9)-8) 1237: 1 = ((2^3)-7) 2299: 2 = (2-(9-9)) 3577: 3 = √(7-(5-7)) 7889: 7 = (8+(8-9)) \n", + "0299: 0 = (2*(9-9)) 1238: 1 = ((2^3)/8) 2333: 2 = (3-(3/3)) 3578: 3 = ((7+8)/5) 7899: 7 = (8-(9/9)) \n", + "0333: 0 = (3*(3-3)) 1239: 1 = ((3^2)/9) 2334: 2 = (3+(3-4)) 3579: 3 = (5+(7-9)) 7999: 7 = (√9!+(9/9)) \n", + "0334: 0 = ((3-3)^4) 1244: 1 = (24/4!) 2335: 2 = (3-(3!-5)) 3588: 3 = (√(8*8)-5) 8888: 8 = (8-(8-8)) \n", + "0335: 0 = ((3-3)^5) 1245: 1 = (25-4!) 2336: 2 = (√36/3) 3589: 3 = (9/(8-5)) 8889: 8 = (8^(9-8)) \n", + "0336: 0 = (3!-√36) 1246: 1 = ((2+4)/6) 2337: 2 = ((3*3)-7) 3599: 3 = ((9+√9!)/5) 8899: 8 = (8-(9-9)) \n", + "0337: 0 = ((3-3)^7) 1247: 1 = ((2*4)-7) 2338: 2 = (8-(3+3)) 3666: 3! = (6-(6-6)) 8999: 8 = (9-(9/9)) \n", + "0338: 0 = ((3-3)^8) 1248: 1 = (2*(4/8)) 2339: 2 = ((9-3)/3) 3667: 3! = (6^(7-6)) 9999: 9 = (9-(9-9)) \n", + "0339: 0 = ((3-3)^9) 1249: 1 = (9-(2*4)) 2344: 2 = (3-(4/4)) 3668: 3 = (6/(8-6)) \n", + "\n", + "1 out of 715 distinct license plates (0.1%) can NOT be solved:\n", + "\n", + "5558\n" ] } ], @@ -1882,13 +2128,14 @@ "def show_plate_equations(digits, ops) -> None:\n", " \"\"\"Show all equations from license plates.\"\"\"\n", " plates = list(combinations_with_replacement(range(10), 4))\n", - " def solve(plate): return find_equation(plate, ops=ops)\n", - " table = [f\"{cat(plate)}: {unbracket(solve(plate)) if solve(plate) else None} \" \n", - " for plate in plates]\n", - " S = sum('None' not in entry for entry in table)\n", - " P = len(plates)\n", + " solved = {plate: unbracket(exp)\n", + " for plate in plates \n", + " if (exp := find_equation(plate, ops=ops))}\n", + " S, P = len(solved), len(plates)\n", " print(f'{S} out of {P} distinct license plates ({S/P:.1%}) can be solved:\\n')\n", - " show_columns(table)\n", + " show_columns([f'{cat(p)}: {solved[p]}' for p in solved])\n", + " print(f'\\n{P-S} out of {P} distinct license plates ({(P-S)/P:.1%}) can NOT be solved:\\n')\n", + " show_columns([cat(p) for p in plates if p not in solved])\n", "\n", "def find_equation(numbers, ops):\n", " \"\"\"Find an equation involving these numbers and operators.\"\"\"\n", @@ -1908,21 +2155,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Wow! We got all the plates except one, 5558. Let's try that one again, allowing a decimal point:" + "Again we got all the plates except one, this time 5558. Let's try that one again, allowing a decimal point:" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'5 = (√5^√(5*.8))'" + "'5 = (5!/(5*.8)!)'" ] }, - "execution_count": 40, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1935,7 +2182,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "It was surprising to me that all the 4-digit plates have an equation, and it was also surprising that we only needed to go up to one digit on the left-hand side (possibly with a unary operator). But maybe it shouldn't have been surprising. I found \"6/3 = 4/2\" for \"2346\", but tht's really the same as \"6 = 3*(4/2)\"." + "(Sometimes the answer is `5 = (5!/(5*.8)!)` and sometimes `5 = √5^√(5*.8)`.)\n", + "\n", + "It was surprising to me that all the 4-digit plates have an equation, and it was also surprising that we only needed to go up to one digit on the left-hand side (possibly with a unary operator). But maybe it shouldn't have been surprising. I found \"6/3 = 4/2\" as my equation for \"2346\", but that's really the same equation as \"6 = 3*(4/2)\"." ] }, { @@ -1955,7 +2204,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 44, "metadata": { "id": "CoKnbYBxKEBB", "outputId": "dd72b838-7b22-4080-9b29-739585881ce7" @@ -1967,7 +2216,7 @@ "text": [ "6 = (0!+(0!+0!))!\n", "6 = (1+(1+1))!\n", - "6 = (2+(2*2))\n", + "6 = (2+(2+2))\n", "6 = ((3*3)-3)\n", "6 = (4+(4-√4))\n", "6 = (5+(5/5))\n", @@ -1999,7 +2248,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 45, "metadata": { "id": "jbJsFkNZKEBC", "outputId": "fea9ae24-2e75-4a11-8098-162790f91625" @@ -2018,25 +2267,25 @@ " 4: ⌊4.444⌋ 64: 4!-(4-44) 124: 4+⌈4.44⌉! 184: 4*(√4+44) 244: 4+(4/(.4/4!)) \n", " 5: ⌈4.444⌉ 65: (4+(4^4))/4 125: ⌈(44*√(4+4))⌉ 185: ⌈((44-4)^√√4)⌉ 245: (√4+(4*4!))/.4 \n", " 6: ⌊√44.44⌋ 66: ⌊(44/√.44)⌋ 126: ⌊√44⌋+⌈4.4⌉! 186: ⌈((4+4!)*√44)⌉ 246: (4^4)-(4/.4) \n", - " 7: ⌈√44.44⌉ 67: ⌈(44/√.44)⌉ 127: ⌈4.4⌉!+⌈√44⌉ 187: ⌊(4.4^4)⌋/√4 247: ⌊(4^(4-(.4^4)))⌋ \n", + " 7: ⌈√44.44⌉ 67: ⌈(44/√.44)⌉ 127: ⌈√44⌉+⌈4.4⌉! 187: ⌊(4.4^4)⌋/√4 247: ⌊(4^(4-(.4^4)))⌋ \n", " 8: 4+⌊4.44⌋ 68: 4!+⌊44.4⌋ 128: √4^⌈√44.4⌉ 188: (4!*(4+4))-4 248: (4^4)-(4+4) \n", " 9: 4+⌈4.44⌉ 69: 4!+⌈44.4⌉ 129: 4!+⌊(4!*4.4)⌋ 189: ⌊(⌈4.44⌉!/√.4)⌋ 249: (4^4)-⌈√44⌉ \n", - " 10: 44/4.4 70: √4+(4!+44) 130: (4+(4^4))/√4 190: (4!*(4+4))-√4 250: (4^4)-⌊√44⌋ \n", - " 11: 44/⌊4.4⌋ 71: ⌈(44.4/√.4)⌉ 131: ⌈(√4^(.4+√44))⌉ 191: ⌊(√4!*44)⌋-4! 251: (4^4)-⌈4.4⌉ \n", + " 10: 44/4.4 70: 4!+(√4+44) 130: (4+(4^4))/√4 190: (4!*(4+4))-√4 250: (4^4)-⌊√44⌋ \n", + " 11: 44/⌊4.4⌋ 71: ⌈(44.4/√.4)⌉ 131: ⌈(4!*(4!/4.4))⌉ 191: ⌊(√4!*44)⌋-4! 251: (4^4)-⌈4.4⌉ \n", " 12: (4+44)/4 72: 4+(4!+44) 132: 44*(4-⌈.4⌉) 192: 4*(4+44) 252: (4^4)-⌊4.4⌋ \n", - " 13: √4+(44/4) 73: 4+⌊(44/√.4)⌋ 133: ⌈((4!-4)*√44)⌉ 193: ⌊(44*4.4)⌋ 253: ⌊(4!*(4!*.44))⌋ \n", + " 13: 4!-(44/4) 73: 4+⌊(44/√.4)⌋ 133: ⌈((4!-4)*√44)⌉ 193: ⌊(44*4.4)⌋ 253: ⌊(4!*(4!*.44))⌋ \n", " 14: ⌈(√44+√44)⌉ 74: 4+⌈(44/√.4)⌉ 134: 4!+(44/.4) 194: ⌈(44*4.4)⌉ 254: √4-(4-(4^4)) \n", " 15: 4+(44/4) 75: ⌊((4+44)/√.4)⌋ 135: ⌊(4!/.44)⌋/.4 195: ⌊(√4!*(44-4))⌋ 255: (4^4)-(4/4) \n", " 16: 4*⌊4.44⌋ 76: ⌈4.4⌉!-44 136: √4*(4!+44) 196: 4+(4!*(4+4)) 256: 4^⌊4.44⌋ \n", - " 17: ⌊(4*4.44)⌋ 77: ⌈(44*(4^.4))⌉ 137: ⌈(4!/(.4*.44))⌉ 197: ⌈(44*√(4!-4))⌉ 257: (4/4)+(4^4) \n", + " 17: ⌊(4*4.44)⌋ 77: ⌈(44*(4^.4))⌉ 137: ⌈(4!/(.4*.44))⌉ 197: ⌈(44*√(4!-4))⌉ 257: (4^4)+(4/4) \n", " 18: ⌈(4*4.44)⌉ 78: ⌊(4*(4!-4.4))⌋ 138: √4*⌊(44/√.4)⌋ 198: √4*⌊(√4^√44)⌋ 258: 4-(√4-(4^4)) \n", " 19: ⌈(444/4!)⌉ 79: ⌈(4*(4!-4.4))⌉ 139: ⌊(4^(4-.44))⌋ 199: ⌈(√4*(√4^√44))⌉ 259: ⌊(√44/(.4^4))⌋ \n", " 20: 4*⌈4.44⌉ 80: 4*(44-4!) 140: 44+(4*4!) 200: 4!+(4*44) 260: 4+(4^⌊4.4⌋) \n", " 21: ⌈44.4⌉-4! 81: (4-(4/4))^4 141: ⌈((.4^-4.4)/.4)⌉ 201: ⌊(4!*(4+4.4))⌋ 261: (4^4)+⌈4.4⌉ \n", " 22: √4/(4/44) 82: ⌊((4/.44)^√4)⌋ 142: (4!*⌊√44⌋)-√4 202: ⌈(4!*(4+4.4))⌉ 262: (4^4)+⌊√44⌋ \n", - " 23: 4!-⌈.444⌉ 83: 44+⌊(.4^-4)⌋ 143: ((4!^√4)-4)/4 203: ⌊(44*(4+√.4))⌋ 263: (4^4)+⌈√44⌉ \n", + " 23: 4!-⌈.444⌉ 83: 44+⌊(.4^-4)⌋ 143: ((4!*4!)-4)/4 203: ⌊(44*(4+√.4))⌋ 263: (4^4)+⌈√44⌉ \n", " 24: ⌊4.444⌋! 84: (√4*44)-4 144: 4!*⌊√44.4⌋ 204: ⌈(44*(4+√.4))⌉ 264: 44*⌊√44⌋ \n", - " 25: 4!+⌈.444⌉ 85: ⌈(4*(√4^4.4))⌉ 145: (4+(4!^√4))/4 205: ⌊(√4!*(44-√4))⌋ 265: ⌈(4!*4.4)⌉/.4 \n", + " 25: 4!+⌈.444⌉ 85: ⌈(4*(√4^4.4))⌉ 145: (4+(4!*4!))/4 205: ⌊(√4!*(44-√4))⌋ 265: ⌈(4!*4.4)⌉/.4 \n", " 26: 4+(44/√4) 86: (√4*44)-√4 146: √4+(4!*⌊√44⌋) 206: ⌊(44^√√4)⌋-4 266: (4^4)+(4/.4) \n", " 27: ⌈(4*√44.4)⌉ 87: (√4*44)-⌈.4⌉ 147: ⌊(44^(√4^.4))⌋ 207: ⌈(44^√√4)⌉-4 267: ⌊(4!*(√4!/.44))⌋ \n", " 28: 44-(4*4) 88: 44+44 148: 4+(4!*⌊√44⌋) 208: ⌈(4.4^(4-.4))⌉ 268: ⌊(4!^(4*.44))⌋ \n", @@ -2053,7 +2302,7 @@ " 39: 44-⌈4.4⌉ 99: ⌊(4^√(44/4))⌋ 159: ⌊(4!*√44.4)⌋ 219: 4+⌊(√4!*44)⌋ 279: ⌈(4/(√.4/44))⌉ \n", " 40: 44-⌊4.4⌋ 100: 44/.44 160: 4*(44-4) 220: 44*⌈4.4⌉ 280: ⌊(√.4*444)⌋ \n", " 41: ⌈44.4⌉-4 101: ⌊(√4^√44.4)⌋ 161: ⌈((4-.44)^4)⌉ 221: ⌈(√4!*⌈44.4⌉)⌉ 281: ⌈(√.4*444)⌉ \n", - " 42: √4-(4-44) 102: ⌈(√4^√44.4)⌉ 162: √4+⌈(4!*√44)⌉ 222: 444/√4 282: √4+(4!+(4^4)) \n", + " 42: √4-(4-44) 102: ⌈(√4^√44.4)⌉ 162: √4+⌈(4!*√44)⌉ 222: 444/√4 282: 4!+(√4+(4^4)) \n", " 43: 44-(4/4) 103: 4+⌊(√4^√44)⌋ 163: 4+⌊(4!*√44)⌋ 223: ⌈(4^4.4)⌉/√4 283: ⌈((4+(.4/4))^4)⌉ \n", " 44: ⌊44.44⌋ 104: 44+(4!/.4) 164: 44+⌈4.4⌉! 224: (4+4)*(4+4!) 284: 4+(4!+(4^4)) \n", " 45: ⌈44.44⌉ 105: (44-√4)/.4 165: ⌈(√4!+(4!*√44))⌉ 225: ⌊(4/(.4^4.4))⌋ 285: ⌊(⌈√44⌉!^√.44)⌋ \n", @@ -2061,11 +2310,11 @@ " 47: √4+⌈44.4⌉ 107: ⌈(4!*4.44)⌉ 167: ⌈(4!*√(4+44))⌉ 227: 4+⌈((4^√4!)/4)⌉ 287: ⌈(√4!^(4-.44))⌉ \n", " 48: 4+⌊44.4⌋ 108: (44/.4)-√4 168: 4*(44-√4) 228: (4^4)-(4+4!) 288: 4!*(4+(4+4)) \n", " 49: 4+⌈44.4⌉ 109: (44-.4)/.4 169: ⌊√(4*44)⌋^√4 229: ⌈(4^(4-(√4/4!)))⌉ 289: ⌊(4*4.4)⌋^√4 \n", - " 50: 44+⌊√44⌋ 110: ⌊44.4⌋/.4 170: (4!+44)/.4 230: (4^4)-(√4+4!) 290: (⌈4.4⌉!-4)/.4 \n", + " 50: 44+⌊√44⌋ 110: ⌊44.4⌋/.4 170: (4!+44)/.4 230: (4^4)-(4!+√4) 290: (⌈4.4⌉!-4)/.4 \n", " 51: 44+⌈√44⌉ 111: 444/4 171: ⌈(4*(44-√√4))⌉ 231: ⌊(.44^-√44)⌋ 291: ⌊(44*√44)⌋ \n", - " 52: 4+(4+44) 112: √4+(44/.4) 172: (4*44)-4 232: ⌈(.44^-√44)⌉ 292: ⌈(44*√44)⌉ \n", + " 52: 4+(4+44) 112: 4!+(√4*44) 172: (4*44)-4 232: ⌈(.44^-√44)⌉ 292: ⌈(44*√44)⌉ \n", " 53: ⌊(4*√(4*44))⌋ 113: ⌈(.44*(4^4))⌉ 173: ⌊(4*(44-√.4))⌋ 233: ⌈(44*√(4+4!))⌉ 293: (4^4)+⌊(4!/√.4)⌋ \n", - " 54: 44+(4/.4) 114: 4+(44/.4) 174: (4*44)-√4 234: √4-(4!-(4^4)) 294: ⌊(4^(4+(.4/4)))⌋ \n", + " 54: 44+(4/.4) 114: 4+(44/.4) 174: (4*44)-√4 234: 4!+⌊(44^√√4)⌋ 294: ⌊(4^(4+(.4/4)))⌋ \n", " 55: ⌈(4!/.444)⌉ 115: (√4+44)/.4 175: (4*44)-⌈.4⌉ 235: ⌊(√4!*(4+44))⌋ 295: (⌈4.4⌉!-√4)/.4 \n", " 56: 44+(4!/√4) 116: ⌈4.44⌉!-4 176: 4*⌊44.4⌋ 236: 4-(4!-(4^4)) 296: (⌈4.4⌉!/.4)-4 \n", " 57: ⌈(√√4*(44-4))⌉ 117: ⌈(44*√⌈√44⌉)⌉ 177: ⌊(4*44.4)⌋ 237: ⌊(√.4*(4.4^4))⌋ 297: ⌈(√√4*⌊(44^√√4)⌋)⌉\n", @@ -2089,12 +2338,12 @@ "\n", "# Even More Fives: Five 5s\n", "\n", - "In the [xkcd forum](http://forums.xkcd.com/viewtopic.php?f=14&t=116813&start=280) they took up the problem of **five 5s** and got all the integers up to 298, using the \"[double factorial function](https://en.wikipedia.org/wiki/Double_factorial)\" and [π function](https://en.wikipedia.org/wiki/Prime-counting_function). We can get up to 171, using just the default operations, but with five digits it does take about seven minutes, whereas all the other puzzles with four or three digits (and without floor and ceiling) took less than a minute. I suspect you could go much further using floor and ceiling, but that computation would take even longer, so for now let's stick with our default set of operations:" + "In the [xkcd forum](http://forums.xkcd.com/viewtopic.php?f=14&t=116813&start=280) they took up the problem of **five 5s** and got all the integers up to 298, using the \"[double factorial function](https://en.wikipedia.org/wiki/Double_factorial)\" and [π function](https://en.wikipedia.org/wiki/Prime-counting_function). We can get up to 171, using just the default operations, but with five digits it does take over a minute to run, whereas all the other puzzles with four or three digits (and without floor and ceiling) took less. I suspect you could go much further using floor and ceiling, but that computation would take even longer, so for now let's stick with our default set of operations:" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 46, "metadata": { "id": "4MHPG5L8KEBC", "outputId": "63bffec7-8b22-4bb2-cd44-6fd03f124ccf" @@ -2114,7 +2363,7 @@ " 5: 5.55-.55 48: 5!/(5*(5.5-5)) 91: (5*5)+(5!*.55) 134: (5!/5)+(55/.5) \n", " 6: 5+(55/55) 49: 55-(.5+5.5) 92: 5+(55+(.5^-5)) 135: (5!+555)/5 \n", " 7: ((5+55)/5)-5 50: 55.5-5.5 93: .5+(5!-(5*5.5)) 136: 5+(5!+(55/5)) \n", - " 8: .5*(5+(55/5)) 51: .5-(5-55.5) 94: 5!-((5*5)+(5/5)) 137: 5+(5!/(5/5.5)) \n", + " 8: .5*(5+(55/5)) 51: .5-(5-55.5) 94: 5!-((5/5)+(5*5)) 137: 5+(5!/(5/5.5)) \n", " 9: 5!-(555/5) 52: 55-(.5+(5*.5)) 95: (55/.55)-5 138: .5+(5*(5*5.5)) \n", " 10: 5!-(55+55) 53: 55.5-(5*.5) 96: 5!-√(5+(55/5))! 139: ((.5+5.5)!/5)-5 \n", " 11: 55/(5.5-.5) 54: 55-(5^(5-5)) 97: 5!-(55-(.5^-5)) 140: .5*(5+(5*55)) \n", @@ -2123,7 +2372,7 @@ " 14: (5*5)-(55/5) 57: 55+((5+5)/5) 100: (55/.5)-(5+5) 143: 5!+(55-(.5^-5)) \n", " 15: 5+(55/5.5) 58: (5*.5)+55.5 101: (55.5-5)/.5 144: ((55/5)-5)!/5 \n", " 16: 5+(5.5+5.5) 59: 5-((5/5)-55) 102: 5+(5!+((5-5!)/5)) 145: 5!+(.5*(55-5)) \n", - " 17: 5+((5+55)/5) 60: 5+(√55*√55) 103: 55+(5!/(5*.5)) 146: 5!+((5*5)+(5/5)) \n", + " 17: 5+((5+55)/5) 60: 5+(√55*√55) 103: 55+(5!/(5*.5)) 146: 5!+((5/5)+(5*5)) \n", " 18: 5+((5!-55)/5) 61: 5.5+55.5 104: 5!-(5+(55/5)) 147: 5!-(.5-(5*5.5)) \n", " 19: (5*5)-(.5+5.5) 62: (55-(5!/5))/.5 105: 55-(5-55) 148: .5+(5!+(5*5.5)) \n", " 20: 55/(5*.55) 63: 5.5-(.5*(5-5!)) 106: (555/5)-5 149: 5+((.5+5.5)!/5) \n", @@ -2149,8 +2398,8 @@ " 40: 55-(5+(5+5)) 83: (.5*5!)-((5-5!)/5) 126: 5!+((55/5)-5) 169: 5!+((5*5)+(5!/5)) \n", " 41: 5!-(55+(5!/5)) 84: 5+(55+(5!/5)) 127: (5!/(5/5.5))-5 170: 5!-(√(5*5)-55) \n", " 42: (5+5.5)/(.5*.5) 85: 5+(55+(5*5)) 128: 5!+(5.5+(5*.5)) 171: (5.5/(.5^5))-5 \n", - "CPU times: user 1min 14s, sys: 683 ms, total: 1min 15s\n", - "Wall time: 1min 15s\n" + "CPU times: user 1min 9s, sys: 509 ms, total: 1min 10s\n", + "Wall time: 1min 10s\n" ] } ], @@ -2169,16 +2418,16 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{1: '(1*1)', 2: '(1+1)'}" + "{2: '(1+1)', 1: '(1*1)'}" ] }, - "execution_count": 44, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -2196,26 +2445,26 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{1: '(1*(1*(1*(1*(1*(1*1))))))',\n", - " 2: '(1+(1*(1*(1*(1*(1*1))))))',\n", - " 3: '(1+(1+(1*(1*(1*(1*1))))))',\n", - " 4: '(1+(1+(1+(1*(1*(1*1))))))',\n", - " 5: '(1+(1+(1+(1+(1*(1*1))))))',\n", - " 6: '(1+(1+(1+(1+(1+(1*1))))))',\n", - " 7: '(1+(1+(1+(1+(1+(1+1))))))',\n", + "{7: '(1+(1+(1+(1+(1+(1+1))))))',\n", + " 6: '(1*(1+(1+(1+(1+(1+1))))))',\n", + " 5: '(1*(1*(1+(1+(1+(1+1))))))',\n", + " 4: '(1*(1*(1*(1+(1+(1+1))))))',\n", + " 3: '(1*(1*(1*(1*(1+(1+1))))))',\n", + " 2: '(1*(1*(1*(1*(1*(1+1))))))',\n", + " 1: '(1*(1*(1*(1*(1*(1*1))))))',\n", " 8: '(1+(1+((1+1)*(1+(1+1)))))',\n", " 9: '(1+((1+1)*(1+(1+(1+1)))))',\n", " 10: '(1+((1+(1+1))*(1+(1+1))))',\n", " 12: '((1+1)*((1+1)*(1+(1+1))))'}" ] }, - "execution_count": 45, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -2226,7 +2475,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -2243,7 +2492,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -2326,7 +2575,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -2338,7 +2587,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -2358,33 +2607,6 @@ "for n in range(6):\n", " print(f'f({n}) = {f(n)}')" ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9HYipLxUKEBC" - }, - "source": [ - "# What's Next?\n", - "\n", - "One exercise would be adding even more operations, such as:\n", - "\n", - "- **Nth root**: `3√8` = 2\n", - "- **Percent**: `50%` = 0.5\n", - "- **Absolute value**: `|1-3|` = 2 (redundant if you have unary minus, but add it if you like it)\n", - "- **Repeating decimal**: `.4...` = .44444444... = 4/9\n", - "- **Comparison operations**: `(1<2)+(3=4)`= 0, because `(1<2)` is True, which is treated as `1`, and `3=4` is False, or `0`\n", - "- **Double factorial**: `9!!` = 9 × 7 × 5 × 3 × 1 = 945; not the same as `(9!)!`\n", - "- **Gamma function**: `Γ(n)` = (n − 1)! and works for non-integers\n", - "- **Prime counting function**: `π(n)` = number of primes ≲ n; e.g. `π(5)` = 3\n", - "- **Transcendental functions**: `log`, `sin` `cos`, `tan`, `arcsin`, ... \n", - "- **Degree symbol**: `180°` = π\n", - "- **Log to base**: `log_10(100)` = 2\n", - "- **Matrix notation**: with determinant symbol to get a number.\n", - "- **Combinations and Permutations**: `6 C_ 2` = 15; `6 P_ 2` = 30\n", - "\n", - "Another approach would be to look around for related puzzles and solve them. What do you want to do?" - ] } ], "metadata": {