:: كل المقالات ::

Tue, 13 Dec 2016

سكربت لحل الغاز اكمال المعادلة بالمعاملات

بسم الله الرحمن الرحيم
قام مشرف منتدى البرمجة في مجتمع لينكس بطرح مسألة جميلة جدا ، اغرت فضولي لمحاولة ايجاد حل لها . هي مسألة دائما نمر عليها في الالغاز و كتب الذكاء و لكن لم يسبق لي ان فكرت في جعل العملية الية فالشكر موصول الى مشرفنا العزيز على هذه اللفتة الرائعة.
نص المسألة :
" نعود للألغاز مجددا و مع لغز آخر :
يقول اللغز لدينا سلسة مكونة من خمسة أعداد كما يلي :
9,-4,8,6,10
و لدينا المعاملات الأساسية الأربعة + – * / و المطلوب هو برمجة سكريبت بلغة PHP يقوم بحل هذه المعضلة :
9 ? -4 ? 8 ? 6 ? 10 = 7
طبعا في مكان ? نضع المعاملات و لا يجوز تكرار أي معامل , كما أن توزيع الأرقام الحالي يمكن تغييره ننتظركم"

اما عن الحل فكان هذا الكود بلغة البرمجة Perl:

use strict;
use Algorithm::Combinatorics qw(variations);
use feature ':5.10'; 

my @operators = qw(+ - * /);
my @numbers = qw(9 -4 8 6 10);
my $total = 7; #required result

my $iter = variations(\@operators, 4); #get combinations for operators without rep. and loop
my $iter2 = variations(\@numbers, 5);  #get combinations for numbers without rep. and loop

while (my $p = $iter->next){
while (my $p2 = $iter2->next){

#escaping precedence
my $eval = eval ("$p2->[0] $p->[0] $p2->[1]");
$eval = eval ("$eval $p->[1] $p2->[2]");
$eval = eval ("$eval $p->[2] $p2->[3]");
$eval = eval ("$eval $p->[3] $p2->[4]");

if ($eval == $total){
say "$p2->[0] ($p->[0]) $p2->[1] ($p->[1]) $p2->[2] ($p->[2]) $p2->[3] ($p->[3]) $p2->[4] = 7"; }
}
$iter2 = variations(\@numbers, 5); #Resets the iterator
}

و الجواب :
9 (+) -4 (*) 10 (-) 8 (/) 6 = 7
-4 (+) 9 (*) 10 (-) 8 (/) 6 = 7
6 (-) 10 (*) 9 (+) 8 (/) -4 = 7
10 (-) 6 (*) -4 (/) 8 (+) 9 = 7
10 (-) 6 (/) 8 (*) -4 (+) 9 = 7
10 (/) 8 (+) 6 (-) 9 (*) -4 = 7
10 (/) 8 (-) 9 (+) 6 (*) -4 = 7

دمتم في الرضا ،