مسابقات

نکاتی درباره مسابقه جی‌کل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 ها را پاس کرده است یا خیر. ستون «ترتیب دریافت برنامه‌ها» هم نشان می‌دهد شرکت‌کنندگان با چه ترتیبی برنامه‌ها را ارسال کرده‌اند (به ترتیب چه برنامه‌هایی به دست ما رسیده است).

 

تلفنوضعیت تست‌هاطول برنامهترتیب دریافت برنامه‌ها
0913XXXXX04PASS23117
0913XXXXX04PASS22918
0937XXXXX59FAIL2322
093XXXXX59FAIL2266
0917XXXXX65PASS19116
0917XXXXX5PASS18420
0018XXXXX67PASS19012
0018XXXXX67PASS18413
0018XXXXX67PASS18219
0912XXXXX80PASS2605
0912XXXXX80PASS2409
0912XXXXX80PASS21021
0935XXXXX78PASS2593
0935XXXXX78PASS22410
0912XXXXX64PASS2087
0912XXXXX64PASS20711
0912XXXXX48FAIL3111
0937XXXXX74PASS23314
0913XXXXX20PASS2574
0933XXXXX31PASS3018
0910XXXXX15PASS32815

 

 

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

‫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;
    }
    }

دیدگاهتان را بنویسید

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

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