先日書いたプログラムでは、平成元年等の虱をつぶしきれなかったので、さらに枝刈りを行った結果、平成元年から17年までの問題を解くことができた。
例によって、無駄な括弧を減らす処理なんかは入ってないので、とても見にくいが:
- 1989 = ( (1 + (1 + 1) ) × ( (1 + (1 + 1) ) × (1 + ( (1 + 1) × ( (1 + 1) × (1 + ( (1 + 1) × ( (1 + (1 + 1) ) × ( (1 + (1 + 1) ) × (1 + (1 + 1) ) ) ) ) ) ) ) ) ) ) :: 23個
- 1990 = (2 + (2 × (2 + (2 × (2 × (2 × (2 × ( (2 × (2 × (2 × (2 × (2 + 2) ) ) ) ) - 2) ) ) ) ) ) ) ) :: 14個
- 1991 = ( ( ( (3 + 3) × ( (3 × (3 × (3 + (3 × (3 × (3 + (3 × 3) ) ) ) ) ) ) - 3) ) - 3) / 3) :: 13個
- 1992 = (4 + (4 + (4 × (4 × ( (4 × (4 × (4 + 4) ) ) - 4) ) ) ) ) :: 9個
- 1993 = ( ( (5 + 5) × ( ( (5 + 5) × ( (5 × 5) - 5) ) - ( (5 / 5) / 5) ) ) - 5) :: 11個
- 1994 = (6 + (6 + ( ( (6 + 6) / 6) + ( ( (6 × 6) - 6) × ( (6 × (6 + 6) ) - 6) ) ) ) ) :: 12個
- 1995 = ( ( (7 × ( (7 × ( (7 × 7) - 7) ) - 7) ) - 7) - 7) :: 8個
- 1996 = (8 + (8 × ( ( (8 + (8 × (8 × (8 × 8) ) ) ) / (8 + 8) ) - 8) ) ) :: 10個
- 1997 = ( ( ( (9 + (9 + 9) ) × (9 + (9 + (9 × ( (9 × 9) - 9) ) ) ) ) - 9) / 9) :: 11個
- 1998 = ( (10 + 10) × ( (10 × 10) - ( (10 / 10) / 10) ) ) :: 7個
- 1999 = (11 × (11 × ( ( ( ( (11 - (11 / 11) ) / (11 + 11) ) + (11 × 11) ) / (11 + 11) ) + 11) ) ) :: 12個
- 2000 = (12 + ( (12 - ( ( (12 + 12) / 12) / 12) ) × (12 + (12 + (12 × 12) ) ) ) ) :: 10個
- 2001 = ( ( ( (13 × ( (13 × 13) - 13) ) - (13 / 13) ) - 13) - 13) :: 8個
- 2002 = ( (14 - ( (14 + (14 + 14) ) / 14) ) × ( (14 × 14) - 14) ) :: 8個
- 2003 = (15 + ( (15 - (15 / 15) ) × (15 + (15 + ( ( (15 × (15 × 15) ) - 15) / (15 + 15) ) ) ) ) ) :: 12個
- 2004 = (16 + ( ( (16 - ( (16 - (16 / 16) ) / 16) ) + 16) × (16 + (16 + (16 + 16) ) ) ) ) :: 11個
- 2005 = ( ( ( (17 × 17) + ( (17 + 17) × (17 + (17 + 17) ) ) ) - (17 / 17) ) - 17) :: 10個
ちなみに。
今回のプログラムは、
- 1個の数字からは1種類の数ができる。
- n個の数字からできる式は、i個の数字からできる式と(n-i)個の数字からできる式を組み合わせたもの。
という考え方で書いた。それだけだと 平成元年の問題は場合の数が多すぎて解けないので、多少工夫はしてある。
というわけで、上記が最小の場合だと思います。> id:igatoxin 様