Програм који решава игру
Мој број из ТВ квиза "Слагалица".
Дакле није у питању само апликација већ и код. Код може бити и много ефикаснији, сигурно, али ћу га дотерати другом приликом. Код је написан у програмском језику C.
Алгоритам:
Сваки израз се посматра као бинарно стабло, што значи да сваки оператор (операција) има искључиво два операнда (броја). Нпр. израз
(a+b+c)*(d-e)/f
посматрамо као
(((a+b)+c)*(d-e))/f
Програм користи методу
Brute force, што значи да испробава све могућности.
Прво се провери да ли је неки од понуђених бројева решење.
Ако није, онда се претпостави да решење има два операнда. Направи се матрица која памти све пермутације операнада, и матрица која памти све пермутације оператора.
Потом се направи једно стабло за дати број операнада. У то стабло се упише једна пермутација оператора и за њу провере све пермутације операнада. Тако док се не провере све пермутације оператора и операнада. Затим се прави наредно стабло за дати број операнада.
Потом се претпостави да решење има три операнда и све се понавља док се не одраде провере и за свих шест операнада.
Уколико је у неком тренутку пронађено решење, претрага се прекида.
Програм проналази приближно решење, ако нема тачног.
Алгоритам за креирање стабала користи низове 0 и 1. 1 значи да дати чвор има лево, или десно подстабло и да је ту знак операције, а 0 да нема лево, или десно подстабло и да ту иде број. Сигурно постоји и ефикаснји начин за прављење стабала, или бар памћење трагова, али о том-потом.
У најгорем случају, дакле када не постоји решење и обиђу се све пермутације и сва стабла, програму треба 12,7 секунди да се изврши за 6 операнада. За 5 операнада у најгорем случају треба му 0,25 секунди.
С обзиром да су бројеви у игри "Мој број" такви да решење скоро увек постоји и да се често може израчунати и са мање од 6 бројева, програм се углавном извршава за мање од 1 секунде.
На овом линку су апликација, конзолна апликација и код за обе апликације. Апликација прихвата само бројеве који се могу јавити у игри, док код конзолне апликације не постоје ова ограничења, могу се унети било који природни бројеви.
http://www.*************/download/qdop9rrf.../Moj+broj+2.zip
Исписаћу пар
"tagova" ако неког некада буде интересовао и сам код и начин решавања задатка:
moj broj algoritam program kod resenje source programski jezik C slagalica