مسابقات

نکاتی درباره مسابقه جی‌کل2: هنر برنامه‌نویسی فیبوناچی

در این بخش، جزئيات بیشتری از برنامه‌هایی که توسط شرکت‌کندگان برای مسابقه دوم جی‌کل ارسال شده است را مرور می‌کنیم. همان‌طور که در مطلب قبلی گفته شد، نکات آموزشی جالبی در برنامه‌های رسیده دیده می‌شود که مرور آن‌ها، حتی برای برنامه‌نویسان حرفه‌ای خالی از لطف نیست. بنابراین، بار دیگر از همه عزيزانی که در این مسابقه شرکت کردند، صمیمانه تشکر می‌کنیم.

 

1- همه برنامه‌های ارسال شده.

همه برنامه‌هایی که ما دریافت کردیم از این‌جا قابل دریافت است.

 

2-چرا برنامه کوتاه‌تر بهتر است؟!

همان‌طور که قبلاً گفته شد، لزوماً «کوتاه بودن» دلیلی بر خوب بودن برنامه‌ها نیست. در همین مسابقه، از روش‌هایی برای کوتاه کردن برنامه استفاده شده است، که در عمل کارهای خوبی نیستند! مثلاً عدم ذکر بخش جنریک در نام کلاسها، هرچند باعث کوتاه شدن برنامه می‌شود ولی یک Warning در پی دارد و الگوی مناسبی برای برنامه‌نویسی نیست. در هر حال، این مسابقه، این یک چالش کوچک برنامه‌نویسی بود و احتمالاً کسانی در این آزمون برنامه‌های کوتاه‌تری نوشته‌اند که ساختارهای مختلف زبان را به خوبی می‌شناسند و می‌دانند در هر بخش چه گزينه‌هایی برای کوتاه کردن برنامه وجود دارد.

 

3- برخی از برنامه‌ها.

در این بخش، برخی از برنامه‌های جالبی که دریافت کردیم را به عنوان نمونه نشان می‌دهیم.

– کوتاهترین برنامه که به طول 182 کاراکتر نوشته شده بود:

package ir.javacup.jcal.jcal2;
import java.util.*;
class FibonacciImpl implements Fibonacci {
  public List sequnce(int n) {
     List l = new Vector(n);
     long a = 1, b = 0;
     while (n– > 0) {
        l.add(b += a);
        a = b – a;
     }
     return l;
  }
}

– یک برنامه جالب دیگر به طول 184 کاراکتر:

package ir.javacup.jcal.jcal2;
import java.util.*;
class FibonacciImpl implements Fibonacci {
public List sequnce(int n){
  List l = new Stack();
  for(long b=n<0?0:1,a=0/b;n–>0;b+=a)
      l.add(a=b-a);
  return l;
}
}

 

 – یک برنامه خیلی جالب که از جاوا 8 و امکانات برنامه‌نویسی تابعی استفاده کرده است. طول این برنامه 224 کاراکتر است (که البته با کمی دستکاری، می‌تواند کمتر هم بشود):

package ir.javacup.jcal.jcal2;
import java.util.stream.*;
public class FibonacciImpl implements Fibonacci {
  long a=1;
  public java.util.List<Long> sequnce(int n) {
  return Stream.iterate(1l, x->(a=x-a)+x).limit(n).collect(Collectors.toList());
}
}

4- جدول رده‌بندی

در جدول زیر، مجموعه همه برنامه‌هایی که دریافت کردیم نمایش داده شده است. ستون «وضعیت تست‌ها» نشان می‌دهد که آیا هر برنامه test-case ها را پاس کرده است یا خیر. ستون «ترتیب دریافت برنامه‌ها» هم نشان می‌دهد شرکت‌کنندگان با چه ترتیبی برنامه‌ها را ارسال کرده‌اند (به ترتیب چه برنامه‌هایی به دست ما رسیده است).

 

تلفن وضعیت تست‌ها طول برنامه ترتیب دریافت برنامه‌ها
0913XXXXX04 PASS 231 17
0913XXXXX04 PASS 229 18
0937XXXXX59 FAIL 232 2
093XXXXX59 FAIL 226 6
0917XXXXX65 PASS 191 16
0917XXXXX5 PASS 184 20
0018XXXXX67 PASS 190 12
0018XXXXX67 PASS 184 13
0018XXXXX67 PASS 182 19
0912XXXXX80 PASS 260 5
0912XXXXX80 PASS 240 9
0912XXXXX80 PASS 210 21
0935XXXXX78 PASS 259 3
0935XXXXX78 PASS 224 10
0912XXXXX64 PASS 208 7
0912XXXXX64 PASS 207 11
0912XXXXX48 FAIL 311 1
0937XXXXX74 PASS 233 14
0913XXXXX20 PASS 257 4
0933XXXXX31 PASS 301 8
0910XXXXX15 PASS 328 15

 

 

نوشته های مشابه

‫4 دیدگاه ها

  1. تشکر فراوان از مسابقه جالبی که برگزار کردید. یک پیشنهاد کوچولو داشتم: خیلی بهتر میشه اگر بتونید کدهای داخل صفحات سایت رو رنگی و با فونت مناسب کد نشون بدید که خواناتر بشه.

  2. ضمن سلام و تشکر از مسابقه خوبتون. عرض کنم خدمتتون که این برنامه رو میشه فقط با 177 کارکتر هم نوشت! 😉

    package ir.javacup.jcal.jcal2;
    import java.util.*;

    class FibonacciImpl implements Fibonacci {

    long a,b=1;
    public List sequnce(int n){
    List l = new Vector(n);
    for(;n–>0;b+=a) l.add(a=b-a);
    return l;
    }
    }

پاسخ دادن به علیرضا بیطرف حقیقی لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا