انتشرت في الفترة الاخيرة اللغز الموجود في الصورة عن طريق وسائل التواصل الاجتماعي ، مع ان اللغز مستحيل الحل رياضياً بسبب وجود قاعدة تنص على “مجموع اعداد فردية لعدد فردي هو عدد فردي , ومجموع عدد زوجي لاعداد زوجية هو عدد زوجي” ولكن ساقوم بكتابة Class لإثبات ذلك ويمكن استخدامه في حل امثلة اخرى لنفس طريقة اللغز .

اولا يجب ان نعرف ان هذا النوع من الالغاز يمكن حله عن طريق التباديل مع السماح له بالتكرار “permutations with repetition” , فـ بالتالي قمت بكتابة كلاس يمكن استخدامه عن طريق استدعاء “getResult” وتمرير له القيم التالية:

numbers As Array – مصفوفة تحتوي على قائمة بالارقام المسموح استخدامها في حساب الناتج النهائي.
numberOfSpace As int – متغير رقمي وهو عدد الفراغات او عدد الارقام الممكن استخدامها في الحل.
target As int – متغيير رقمي يمثل الناتج النهائي المراد الوصول له.
اما القيمة المرتجعه من getResult فهي عبارة عن كائن “Object” من نوع ArrayList يحتوي على جميع الاحتمالات الصحيحة لحل اللغز .

public class MyClass { private static ArrayList reslut; private int[] numbers; private int numberOfSpaces; private int target; public MyClass(){ reslut=new ArrayList(); } public ArrayList getResult(int target,int[] numbers , int numberOfSpaces){ this.target=target; for (int i=0;i<numbers.length;i++) checkNumbers(numbers, numberOfSpaces, numbers[i] + "", 0); return reslut; } public void checkNumbers(int[] numbers, int numberOfSpaces, String start,int count){ if(count >= numberOfSpaces-1){ if(checkTarget(start)) reslut.add(start+"="+target); }else{ for(int x : numbers) checkNumbers(numbers, numberOfSpaces, start+"+"+x,count+1); } } private boolean checkTarget(String current){ String[] numbers=current.split("\+"); int sum=0; for(String n : numbers) sum+=Integer.parseInt(n); return sum==target; }

طريقة استخدام الـ Class :

public static void main(String[] args) { MyClass m=new MyClass(); ArrayList results=m.getResult(30,new int[]{1,3,5,7,9,11,13,15},5); for(String r : results) System.out.println(r); }

بما ان اللغز لا حل له فإن البرنامج لان يطبع اي قيمة , ولكن عند تجربة القيم التالية:

 ArrayList results=m.getResult(5,new int[]{1,2},3);
**Output:**

run: 1+2+2=5 2+1+2=5 2+2+1=5