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

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

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

 

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

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

 

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

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

 

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

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

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

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

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

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

 

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

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());
}
}

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

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

 

تلفن وضعیت تست‌ها طول برنامه ترتیب دریافت برنامه‌ها
۰۹۱۳XXXXX04 PASS ۲۳۱ ۱۷
۰۹۱۳XXXXX04 PASS ۲۲۹ ۱۸
۰۹۳۷XXXXX59 FAIL ۲۳۲ ۲
۰۹۳XXXXX59 FAIL ۲۲۶ ۶
۰۹۱۷XXXXX65 PASS ۱۹۱ ۱۶
۰۹۱۷XXXXX5 PASS ۱۸۴ ۲۰
۰۰۱۸XXXXX67 PASS ۱۹۰ ۱۲
۰۰۱۸XXXXX67 PASS ۱۸۴ ۱۳
۰۰۱۸XXXXX67 PASS ۱۸۲ ۱۹
۰۹۱۲XXXXX80 PASS ۲۶۰ ۵
۰۹۱۲XXXXX80 PASS ۲۴۰ ۹
۰۹۱۲XXXXX80 PASS ۲۱۰ ۲۱
۰۹۳۵XXXXX78 PASS ۲۵۹ ۳
۰۹۳۵XXXXX78 PASS ۲۲۴ ۱۰
۰۹۱۲XXXXX64 PASS ۲۰۸ ۷
۰۹۱۲XXXXX64 PASS ۲۰۷ ۱۱
۰۹۱۲XXXXX48 FAIL ۳۱۱ ۱
۰۹۳۷XXXXX74 PASS ۲۳۳ ۱۴
۰۹۱۳XXXXX20 PASS ۲۵۷ ۴
۰۹۳۳XXXXX31 PASS ۳۰۱ ۸
۰۹۱۰XXXXX15 PASS ۳۲۸ ۱۵

 

 

 

مطالب پیشنهادی از وب



درباره صادق علی‌اکبری

صادق، یکی از مؤسسان انجمن جاواکاپ است. وی فارغ‌التحصیل دکترای مهندسی کامپیوتر از دانشگاه صنعتی شریف است و بیش از 13 سال فعالیت در صنعت نرم‌افزار را در سابقه دارد که بخش مهمی از آن در شرکت مشاوران نرم‌افزاری اعوان بوده است. صادق هم‌اکنون عضو هیأت علمی دانشگاه شهید بهشتی است.

همچنین بررسی کنید

مصاحبه با آقای حقوقی، برنده مسابقه چهارم جی‌کل

با اتمام برگزاری و اعلام نتیجه چهارمین مسابقه جی‌کل، به سراغ برنده این دوره از …

۴ نظر

  1. علیرضا بیطرف حقیقی

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

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

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

     

پاسخ دهید

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