Что делать дураку

Я очень хре­но­во играю в игры, кото­рые тре­бу­ют постро­е­ния глу­бо­ко­го дере­ва реше­ний. Напри­мер, в шах­ма­ты. Даже на неболь­шой слож­но­сти прак­ти­че­ски любая шах­мат­ная про­грам­ма меня наги­ба­ет. Вот поче­му-то мне это не даёт­ся, и нико­гда не дава­лось. Боль­ше ска­жу — мне настоль­ко непри­ят­но пытать­ся заста­вить мой мозг учить­ся это делать, что ско­рее все­го, я нико­гда это­му искус­ству и научусь.

То же самое каса­ет­ся реше­ния каких-то мате­ма­ти­че­ских голо­во­ло­мок. Каким-то хит­рым обра­зом сло­жить вме­сте циф­ры, что­бы полу­чить что-то нуж­ное у меня про­сто не полу­ча­ет­ся. Какие-нибудь судо­ку, напри­мер. Нена­ви­жу их.

Но зато я могу напи­сать алго­ритм, кото­рый любую из подоб­ных задач реша­ет за доли секун­ды. Любые самые зубо­дро­би­тель­ные судо­ку я могу решить за 0.24 секун­ды (засе­кал, про­грам­ма на Джа­ве). Инте­рес­но даже, что те судо­ку, что счи­та­ют­ся наи­бо­лее слож­ны­ми для чело­ве­ка, про­грам­ма реша­ет быст­рее, чем те, кото­рые счи­та­ют­ся про­сты­ми. Види­мо, что про­сто для чело­ве­ка, слож­но для ком­пью­те­ра, и наобо­рот.

Натолк­нул­ся на подоб­ную задач­ку у avva. Берём четы­ре задан­ных чис­ла. Мож­но пере­став­лять их как хочет­ся. Из инстру­мен­тов — все четы­ре дей­ствия ариф­ме­ти­ки и скоб­ки. Сум­ма долж­на полу­чить­ся 24.

Про­стая задач­ка:

2,3,3,6

2 * 3 * 3 + 6 = 24

Слож­ная задач­ка:

1, 3, 4, 6

6 / (1 — 34) = 6÷(1÷4) = 6×4 = 24

Вы дума­е­те, я рука­ми решал? Да ну нахер такое, нена­ви­жу.

Это менее 20 стро­чек на Питоне (на чём же ещё, если надо быст­ро):

from itertools import permutations

all_numbers = ['1','3','4','6']
all_actions = ['*','/','+','-']
all_parens = [['','','','','',''],['(','',')','','',''],['','(','','',')',''],['','','','(','',')'],['(','','','',')',''],['','(','','','',')'],['(','',')','(','',')']]

numbers = list(permutations(all_numbers))

for number in numbers:
	for i in range(0,len(all_actions)):
		for j in range(0,len(all_actions)):
			for k in range(0,len(all_actions)):
				for parens in all_parens:
					try:
						if (eval(parens[0] + number[0] + all_actions[i] + parens[1] + number[1] + parens[2] + all_actions[j] + parens[3] + number[2] + parens[4] + all_actions[k] + number[3] + parens[5]) == 24):
							print(parens[0] + number[0] + all_actions[i] + parens[1] + number[1] + parens[2] + all_actions[j] + parens[3] + number[2] + parens[4] + all_actions[k] + number[3] + parens[5])
							quit()	
					except ZeroDivisionError as e:
						print(e)

Не полу­чи­лось толь­ко как-то алго­рит­ми­зи­ро­вать созда­ние ско­бок. Скоб­ки, они, блин, хит­рые. ()(), напри­мер, не палин­дром. А ())( — палин­дром. Поэто­му в лоб напи­сал все воз­мож­ные вари­ан­ты, бла­го, их немно­го.

Что делать дура­ку? Писать алго­рит­мы!!!