• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

namespace

اعضاء
  • عدد المشاركات

    138
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

39 عادي

عن namespace

  • الرتبة
    عضو
  • تاريخ الميلاد 07/03/1989

طرق الإتصال

معلومات الملف الشخصي

  • الجنس ذكر
  • اهتمامات برمجة ألعاب
    كتابة الشعر
    شطرنج
  1. جاري فرز الأصوات وللمرة العاشرة اعذروني على التأخير ما باليد حيلة
  2. المسألة الثانية أسهل من الأولى فكر كالتالي : حتى يكون مجموع المسافات بينها أقل ما يمكن يجب أن يكون شكلها أقرب ما يمكن إلى ...... الحل لا يتجاوز أسطراً معدودة تنتهي المهلة بنهاية هذا اليوم إن وصلني حل صحيح أو مع أول حل صحيح يصلني إن لم يصلني اليوم " والله ولي التوفيق "
  3. المهلة المحددة لحل اللغز تنتهي بنهاية يوم الأربعاء بالنسبة للفرع الثاني فهو يكاد يكون أسهل من الفرع الأول قم بتمثيل النقطة بـ struct كالآتي : struct point { float x; float y; void set(float X, float Y) { x = X; y = Y; } }; لا يلزمك إيجاد المسافات بين النقاط إلا عند التأكد من حلك إذا رغبت ، والصيغة كالآتي : ومنه فاقتران المسافة هو : float distance(point p1, point p2) { return (sqrt((p1.y - p2.y)*(p1.y - p2.y) + (p1.x - p2.x)*(p1.x - p2.x))); } ستحتاج لتضمين cmath في البداية . نحن الآن في الاقتران الرئيسي : const pts = 5; // total number of points float nums[pts*2]; // the numbers you are to give to the program point p[pts]; // the array to be initialized such that high density of points is required ستكون مهمتك هي تفريغ المصفوفة nums في المصفوفة p بحيث لو جمعنا المسافات بينها سنحصل على أقل نتيجة ممكنة ، نجمع المسافات كما يلي : float sum = 0; for(f=0; f<pts; f++) { for(g=0; g<pts; g++) { sum += distance(p[f], p[g]); } } cout << sum/2 << endl; دون القسمة على 2 سنكون أضفنا المسافة بين النقطتين a و b مرتين ، مرة من a إلى b ، ومرة من b إلى a . على أية حال الرقم المطبوع هو إشارة إلى دقة حلك ليس أكثر ، حاول أن يكون أقل ما يمكن . مثال : دعنا نفترض أن محتويات nums كانت ما يلي : 4 ; 6 ; 16 ; 3 ; 12 ; 2 ; 0 ; 10 ; 6 ; 7 إحدى الطرق تعطي الناتج : 57 ربما هناك طريقة أفضل بالتوفيق للجميع ...
  4. انتباه انتباه الليلة بإذن الله لغز جديد اللغز يتكون من مسألتين الأسئلة سهلة - لكن الإجابات صعبة :P نظراً لسهولة الأسئلة ، فالوضع الطبيعي أن يشارك الجميع فكونوا على استعداد
  5. السلام عليكم في البداية كل الشكر لك أخي هويدي على جهودك معنا في تصحيح اللغز وأعتذر من الأخ محمد علاء الدين والله ما كان قصدي أن أفوز باللغز :lol: يبدو أنك تعبت كثيراً في حله - الله يعطيك العافية اللغز القادم - قادم إليكم من فلسطين ستجدون فيه لون جبال نابلس ونسيمها لأنني ببساطة سأكتبه من هناك كل الأمنيات لكم بالتوفيق سلام
  6. طباعة الاعداد

    المزيد من الكودات التي تتعلق بخانات الأعداد والعمليات عليها تجدونها في هذا الرابط http://psd-development.com/vb/t566.html
  7. طباعة الاعداد

    تفضل أخي الكريم : #include<iostream> using namespace std; void print(int x) { static int y = x; if(x == 0) return; print(x/10); cout << x%10; if(x != y) cout << ','; } int main() { int x = 4865906; print(x); cout << endl; return 0; }
  8. طباعة الاعداد

    int x; cin >> x; cout << x/100 << ',' << x%100/10 << ',' << x%10 << endl;
  9. عدنا إلى نفس المشكلة - ربما المشكلة عمل تخريبي :lol: =_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_= كوني صرت خارج البلد لم أجد الفرصة لحل المسألة سأبدأ بالبرمجة الآن وبإذن الله سأنهي قبل نهاية المهلة الهدف طبعاً هو الإفادة لا أكثر سلامي ..
  10. تفضلوا الكود كاملاً ، ونسخة في المرفقات أيضاً #include<iostream> #include<cstdlib> #include<ctime> using namespace std; const int stdnum = 100; const int coursenum = 10; const int needed = 3; const int seats = 30; void swap(int *a, int *b); int min(int a, int b); void process(int i); bool still(int i); void test(); int selections[stdnum][coursenum] = {0}; // selections of the students to be processed. int priority[stdnum] = {0}; // the higher the priority, the more the chance that the student has. int counter[stdnum] = {0}; // how many cources have the system registered for each student. int enrolled[coursenum] = {0}; // contains how many students are currentry enrolled in each course. int registered[stdnum][needed]; // the courses that have been registered for each student int main() { srand(time(0)); int a1, a2; // initializing the array with each row has the values : 0 -> 9 for(a1=0; a1<stdnum; a1++) { for(a2=0; a2<coursenum; a2++) { selections[a1][a2] = a2; } } // rearrange the rows to have the same values but sorted randomly for(a1=0; a1<stdnum; a1++) { for(int c=coursenum; c>0; c--) { swap(&selections[a1][c-1], &selections[a1][rand()%c]); } } // since we have (needed) courses to be registered for each student for(int i=1; i<=needed; i++) { do { process(i); } while(still(i)); // while there are students still not enrolled in course # i } test(); return 0; } void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } bool still(int i) { for(int k=0; k<stdnum; k++) { if(counter[k] != i) return true; } return false; } int min(int a, int b) { return (a < b ? a : b); } void process(int i) { int n; // number of requests of a certain course int c[coursenum]; // prepare c to contain courses numbers randomly for(int x=0; x<coursenum; x++) { c[x] = x; } for(x=coursenum; x>0; x--) { swap(c[x-1], c[rand()%x]); } int j, k, h, v, d; // needed in loops // passes through priorities from high to low for(j=coursenum-1; j>=0; j--) { // passes through all cources of that priority randomly for(k=0; k<coursenum; k++) { // all requests of a certain cource will be put in this array int request[stdnum] = {0}; n = 0; // pass through all students of that priority and want that course for(h=0; h<stdnum; h++) { if(priority[h] == j && selections[h][j] == c[k] && counter[h] == i-1) { request[n++] = h; } } if(n == 0) continue; int empty = seats - enrolled[c[k]]; // check if the number of empty seats is not enough if(n > empty) { // rearrange students randomly for(v=n; v>0; v--) { swap(&request[v-1], &request[rand()%v]); } // increase the priority for those who will not be enrolled for(d=empty; d<n; d++) { priority[request[d]]++; if(priority[request[d]] == 10) priority[request[d]] = 0; } } for(d=0; d<min(n, empty); d++) { registered[request[d]][i-1] = c[k]; priority[request[d]]++; if(priority[request[d]] == 10) priority[request[d]] = 0; counter[request[d]]++; enrolled[c[k]]++; } if(n > empty) return; // because the priority of some students was modified } } } void test() { int sum = 0; int a=0, b=0; for(int c=needed-1, d=coursenum-1; c>=0; c--, d--) { a += c; b += d; } int size = b - a + 1; int *p = new int[size]; for(int k=0; k<size; k++) p[k] = 0; for(int g=0; g<stdnum; g++) { sum = 0; for(int r=0; r<needed; r++) { for(int z=0; z<coursenum; z++) { if(registered[g][r] == selections[g][z]) sum += z; } } p[sum-a]++; } cout<< "# of students\tpercentage of match\n\n"; for(int i=a; i<=b; i++) { if(p[i-a] != 0) cout << p[i-a] << "\t\t" << 100 - 100*(i - a) / (size-1) << " %" << endl; } } أتمنى أن أكون وفقت في إيصال الفكرة وتوضيحها انتهى دوري الآن - ينتقل التحكم إلى الأخ هويدي فإلى هناك 7th Puzzle.rar
  11. الفرع الثالث وما أدراك ما الفرع الثالث ؟ أعاد إلى ذهني الفرع الثاني من اللغز الثاني ( تقسيم الطلبة إلى قسمين متكافئين في مسابقة ) هذه الأفكار وغيرها تأتيني من واقع الحياة ومن مشكلات يشعر الإنسان حيالها بالظلم في بعض الأحيان ... أيام الطفولة ( أقصد عندما كنت في الصف العاشر أ ) كان الطلاب موزعين على 4 شعب ، شعبتي أ كان أقل معدل طالب فيها يقارب الـ 90 ، أما باقي الشعب ( خليني ساكت أحسن ) وهذا بالطبع ليس عدلاً ، من هنا كان اللغز . هنا ؛ اللغز السابع ؛ أتت فكرة الفرع الثالث من الظلم الشديد الذي يتعرض له الطلاب يوم تسجيل المواد الدراسية ، البعض يسجل في أفضل الشعب وعند أفضل المدرسين وفي الأوقات التي يريدونها . آخرون يخرجون من قاعة التسجيل كأن على رؤوسهم الطير ، لم يسجلوا المواد التي يريدونها ، بل سجلوا مواد ليس لها علاقة بالتخصص فقط ليتفاعلوا مع جو التسجيل وحتى يحلفوا يمين أنهم سجلوا ، وفي الواقع هم لم يسجلوا شيئاً .. ناهيك عن الضغط الهائل على نظام التسجيل ، تتوالى تنبيهات NO RESPONSE من النظام ، تتوالى معها رشقات F5 من الطلاب المساكين ، القلوب إلى الحناجر .. وأخييييييييييراً استجاب النظام ، وأصدر تنبيهاً عظيماً " الشعبة مغلقة " يا سلام على هكذا نظام تسجيل ... = = = = = = = = = = = = = = = = = = = = = = = = حل الفرع الثالث لحل الفرع الثالث تم اعتماد التسلسل التالي : في البداية أنشئ مصفوفة باختيارات الطلاب ، ستكون اختيارات الطلاب عشوائية .. // initializing the array with each row has the values : 0 -> 9 for(a1=0; a1<stdnum; a1++) { for(a2=0; a2<coursenum; a2++) { selections[a1][a2] = a2; } } // rearrange the rows to have the same values but sorted randomly for(a1=0; a1<stdnum; a1++) { for(int c=coursenum; c>0; c--) { swap(&selections[a1][c-1], &selections[a1][rand()%c]); } } تذكر التعريفات التالية في بداية الكود لكي تكون الأمور واضحة : const int stdnum = 100; const int coursenum = 10; const int needed = 3; const int seats = 30; void swap(int *a, int *b); int min(int a, int b); void process(int i); bool still(int i); int selections[stdnum][coursenum] = {0}; // selections of the students to be processed. int priority[stdnum] = {0}; // the higher the priority, the more the chance that the student has. // maximum = coursenum - 1 int counter[stdnum] = {0}; // how many cources have the system registered for each student. // maximum = needed int enrolled[coursenum] = {0}; // contains how many students are currentry // enrolled in each course. int registered[stdnum][needed]; // the courses that have been registered for each student أعطِ القيم الابتدائية ثم أعد الترتيب ، هذا مر معك في موضوع الأعداد العشوائية سابق الذكر لكن هنا 2D array فقط لا غير. الآن سيقوم النظام بتسجيل 3 مواد لكل طالب ، لذا فنحن بحاجة إلى دوران خارجي 3 دورات . داخل ذلك الدوران سنستدعي الاقتران process الذي هو صلب الكود ، ذلك الاقتران لن يسجل مادة لكل طاب ، هذا سيكون في أحسن الأحوال ، فكما قلنا في اللغز المقاعد محدودة ، لذا سنستمر في استدعائه عن طريق while إلى أن يسجل مادة لكل طالب ، ثم بعدها ينتقل إلى المادة التالية .. // since we have (needed) courses to be registered for each student for(int i=1; i<=needed; i++) { do { process(i); } while(still(i)); // while there are students still not enrolled in course # i } داخل اقتران process ؛ لكل طالب هناك أولوية priority ، من خلالها يتم التحديد أي الطلاب سيتم البدء بالنظر في طلبهم أولاً .. فرضاً تقدم 50 طالباً إلى الدورة رقم 6 كاختيار أول ، هناك 20 طالباً لن يتم تلبية رغبتهم كون عدد المقاعد 30 فقط ، لذا سيتم النظر في طلبهم الثاني وتلبيته إن أمكن ، وإلا فالثالث فالرابع ... كلما وجدنا شعبة مملوءة بالطلاب وانتقلنا بالاختيار إلى الذي يليه ، ترتفع الأولوية لأولئك الطلاب ، أي أنه لن يتم النظر في طلبات الطلاب الـ 30 الذين حصلوا على اختيارهم الأول إلا بعد تلبية رغبة الطلاب الذين لم يحالفهم الحظ في المرة السابقة ( مرة لك ومرة عليك ) تبدأ أولوية الطلاب جميعاً من الصفر ثم ترتفع تدريجياً . الدوران الخارجي في اقتران process هو للمرور على الأولويات من أعلاها إلى أدناها ، ثم يتم المرور على طلبات جميع الطلاب بتلك الأولوية . الطلاب الذين يريدون دورة معينة نضعهم جميعاً في مصفوفة request ، فإن كان عددهم أكبر من عدد المقاعد الفارغة المتبقية في الشعبة ، نختار منهم بشكل عشوائي إلى أن يملأوا الشعبة ، الباقي سيتم رفع أولويتهم ، وبعدها الخروج من الاقتران ، لكي يبدأ في الدوران القادم من عندهم . لتقييم عمل النظام ، قمت بعمل اقتران test دوره هو مقارنة طلبات الطلاب بالذي حصلوا عليه من ذلك النظام ؛ مثلاً طالب حصل على أول 3 اختيارات له ، ترتيب تلك الاختيارات 0 1 2 ومجموعها 3 ، لاحظ أنه كلما قل المجموع كان أفضل ، وفي أسوأ الأحوال سيحصل على آخر 3 اختيارات ، ترتيبها 7 8 9 ومجموعها 24 ، لذا نسبة التطابق في البداية ستكون 100% وأخيراً 0% ، كأن هناك تناسباً عكسياً خطياً في الموضوع .. المعادلة التي سترونها في اقتران test أتت من معادلة الخط المستقيم التالي : حينها ؛ التالي سيكون الناتج : # of students percentage of match 81 100 % 12 96 % 1 91 % 4 86 % 2 67 % Press any key to continue هذا معناه أن 81 طالباً حصلوا على أول 3 اختيارات لديهم ، أي نسبة تطابق 100% 12 طالباً فقدوا اختياراً من الثلاثة ، تم الاستعاضة عنه بالرابع ، لذا كانت النسبة 96% ، وهي ليست سيئة - - - - - - - - - - - - - - - - سيناريو آخر : # of students percentage of match 79 100 % 14 96 % 3 91 % 2 86 % 2 81 % Press any key to continue النسبة تتركز دائماً عند 100% و 96% ، لذا فالنظام يعطي نتائج مرضية ... لا أريد أن أتأخر أكثر من ذلك ، الزميل هويدي رح يعصب علي ، عنده لغز من ألف ليلة وليلة وناوي يتحفنا بكرة إن شاء الله ، لم يذكر لنا مواصفات اللغز ولا الأعراض الجانبية التي تظهر على المبرمج عند محاولة حله ( الله يستر ) ..
  12. باقي الفرع الأخير بس ما رأيك بكرة العصر تطرح لغزك أنا مفتكر أنك لسة ما جهزت الأسئلة خلص أنت روح نام وتغطى كويس وأنا إن شاء الله رح أكمل عرض الجزء الأخير الليلة دي " والله ولي التوفيق "
  13. سلام الله عليكم نتابع مناقشة الأسئلة ( أكرر اعتذاري عن الانقطاع المتكرر - مشغول جداً هذه الفترة ) لقد كان لا بد من تأجيل مناقشة الفرعين الثاني والثالث لما بعد الموضوع الجديد " توليد الأرقام العشوائية - من البداية وحتى الاحتراف " http://www.arabteam2000-forum.com/index.php?showtopic=226812&st=0#entry1124423 وخاصة الفرع الثالث ، مع أننا نتكلم عن الاختيار بعدل ، وأن العشوائية ينبغي أن تكون الحلقة الأضعف في الموضوع ، هي في الحقيقة كذلك ، فالأولوية priority للطلاب هي التي ستلعب الدور الأقوى ، وسنقوم بعمل testing لتتأكدوا من أن النتائج كانت مرضية لجميع الطلاب قدر الإمكان .. الفرع الثاني : تخيلوا لو كان السؤال بالصيغة التالية : اشترك 10 متسابقين في مسابقة من 10 أسئلة ؛ السؤال الأول بـ 1 نقطة السؤال الثاني بـ 2 نقطة السؤال الثالث بـ 4 نقطة السؤال الرابع بـ 8 نقطة السؤال الخامس بـ 16 نقطة السؤال السادس بـ 32 نقطة السؤال السابع بـ 64 نقطة السؤال الثامن بـ 128 نقطة السؤال التاسع بـ 256 نقطة السؤال الأخير بـ 512 نقطة بناءاً على هذه الصيغة من السؤال ، لو حل طالب أول 3 أسئلة سيكون لديه 1 + 2 + 4 = 7 نقاط في حين لو حل طالب السؤال الرابع فقط سيكون لديه 8 نقاط أليس السؤال تطبيقاً مباشراً على التحويل من Binary إلى Decimal ؟ على هذا الأساس كانت محاولة الزميلين هويدي وأبو دحيم نبدأ بحل الزميل هويدي : // 2.c // multi-winner approch // compiled using GCC #include <stdio.h> #include <stdbool.h> #include <math.h> #define NO_OF_PERSONS 10 struct person{ double score; bool questions[10]; }; void init(struct person[]); void get_winner_list(struct person[], int[]); int main(void) { struct person persons[NO_OF_PERSONS]; init(persons); int i, j; for (i=0; i<NO_OF_PERSONS; i++) { for (j=0; j<10; j++) { if (persons[i].questions[j]) persons[i].score += pow(2, j); } } int winner_list[NO_OF_PERSONS] = {0}; get_winner_list(persons, winner_list); for (i=0; i<NO_OF_PERSONS; i++) if (winner_list[i]) printf("person at index %i is winner\n", i); // zero-based index return 0; } void init(struct person persons[]) { persons[0] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[1] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[2] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[3] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[4] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[5] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[6] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[7] = (struct person){0, {true, true, true, true, false, false, false, false, false, false}}; persons[8] = (struct person){0, {false, false, false, false, true, false, false, false, false, false}}; persons[9] = (struct person){0, {false, false, false, false, true, false, false, false, false, false}}; } void get_winner_list(struct person persons[], int winner_list[]) { double max_score = 0; int i,length=0, winner=-1; for (i=0; i<NO_OF_PERSONS; i++) if (persons[i].score > max_score) max_score = persons[i].score; // get winner list for (i=0; i<NO_OF_PERSONS; i++) if (persons[i].score == max_score) winner_list[i] = 1; } الحل صحيح مشكوراً ، لكن بالرجوع إلى موضوع الأعداد العشوائية ، سيكون الاقتران init مختصراً أكثر باستخدام دوران متداخل نعطي القيم وبشكل عشوائي وليته لم يستخدم المكتبة math ، لأننا في غنىً عن ذلك .. = = = = = = = = = = = = = = = = = = = = = = = = = نأتي إلى حل الزميل أبو دحيم : #include <iostream> #include <math.h> using namespace std; struct x { int no; int deg; x () { deg = 0; } }; int main () { x result[10]; int results[10][10]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,1,0,1,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 1,1,1,0,0,0,0,0,0,0, 1,1,1,1,0,0,0,0,0,0, 1,1,1,1,1,0,0,0,0,0,}; int i,j,k; for (i=0;i<10;i++) { result[i].no=i+1; for (j=0;j<10;j++) result[i].deg += results[i][j]*pow(2,j); } for (i=0;i<10;i++) for (j=0;j<10;j++) { if (result[i].deg > result[j].deg) { k=result[i].deg; result[i].deg = result[j].deg; result[j].deg = k; k=result[i].no; result[i].no = result[j].no; result[j].no = k; } } for (i=0;i<10;i++) cout << " " << result[i].no << " \n"; return 0; } حله صحيح بالطبع ، أكرر نفس الملاحظات السابقة .. = = = = = = = = = = = = = = = = = = = = = = = = = محاولتي : #include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int Q = 10; // # of Quqstions const int P = 10; // # of Participants int main() { srand(time(0)); bool ans[Q][P]; int marks[P] = {0}; for(int i=0; i<P; i++) for(int k=Q-1; k>=0; k--) { ans[i][k] = (rand()%2 == 1); marks[i] = marks[i]*2 + (ans[i][k] ? 1 : 0); } int max = marks[0]; for(i=1; i<P; i++) if(marks[i] > max) max = marks[i]; cout << "Participant(s) in the first place : "; for(i=0; i<P; i++) if(marks[i] == max) cout << i << " "; cout<<"\n\nCheck :\n\n"; for( i=0; i<P; i++,cout<<endl) for( int k=0; k<Q; k++) cout << ans[i][k] << " "; cout << endl; return 0; }
  14. الزملاء هويدي و الشمري ومن لديه تساؤل حول الجزئية الأخيرة : في البداية لاحظوا التعديل على الموضوع بإضافة طريقة أخرى للحل كأننا هنا نقوم بعمل mapping من الأرقام 0 -> 8 إلى مواقع في مصفوفة ثنائية من 0 0 إلى 2 2 لدينا رقم عشوائي ونريد منه الحصول على موقع في مصفوفة ثنائية : نقسم على 3 لنحصل على رقم السطر ، أي أن الأرقام 0 ، 1 ، 2 ستقودنا إلى السطر 0 ، وذلك بقسمتها على 3 كذلك الأمر بالنسبة للأرقام 3 ، 4 ، 5 ستقودنا إلى السطر 1 الأرقام 6 ، 7 ، 8 ستقودنا إلى السطر 2 => سنحدد مواقع تلك الأرقام في السطر الواحد من خلال باقي القسمة على 3 ، نكون بذلك حددنا الأعمدة التي توجد فيها تلك الأرقام 0 1 2 3 4 5 6 7 8 2 1 0 5 4 3 8 7 6 02 01 00 12 11 10 22 21 20 لاحظ أن 0 ، 3 ، 6 في العمود أقصى اليسار لأنها تحمل نفس باقي القسمة على 3 ، وكذلك باقي الأعمدة ما دامت الأرقام نفسها تقودنا إلى الأسطر نفسها والأعمدة نفسها في كل مرة ، فلماذا تظهر المصفوفة مرتبة بشكل عشوائي في كل مرة ؟ الجواب لأن ترتيب ظهور تلك الأرقام سيختلف ، والذي سيخزن في ذلك الموقع من المصفوفة هو ترتيب ظهور العدد العشوائي ( c ) تنازلياً من 9 إلى 1 وليس العدد العشوائي نفسه ( [ ] num ) في الحل الجديد تم عكس العملية ، لاحظوا الفرق ..