مسابقات

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

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

 

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

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

 

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

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

 

تلفنوضعیت تست‌هاطول برنامهترتیب دریافت برنامه‌ها
۰۹۱۳XXXXX04PASS۲۳۱۱۷
۰۹۱۳XXXXX04PASS۲۲۹۱۸
۰۹۳۷XXXXX59FAIL۲۳۲۲
۰۹۳XXXXX59FAIL۲۲۶۶
۰۹۱۷XXXXX65PASS۱۹۱۱۶
۰۹۱۷XXXXX5PASS۱۸۴۲۰
۰۰۱۸XXXXX67PASS۱۹۰۱۲
۰۰۱۸XXXXX67PASS۱۸۴۱۳
۰۰۱۸XXXXX67PASS۱۸۲۱۹
۰۹۱۲XXXXX80PASS۲۶۰۵
۰۹۱۲XXXXX80PASS۲۴۰۹
۰۹۱۲XXXXX80PASS۲۱۰۲۱
۰۹۳۵XXXXX78PASS۲۵۹۳
۰۹۳۵XXXXX78PASS۲۲۴۱۰
۰۹۱۲XXXXX64PASS۲۰۸۷
۰۹۱۲XXXXX64PASS۲۰۷۱۱
۰۹۱۲XXXXX48FAIL۳۱۱۱
۰۹۳۷XXXXX74PASS۲۳۳۱۴
۰۹۱۳XXXXX20PASS۲۵۷۴
۰۹۳۳XXXXX31PASS۳۰۱۸
۰۹۱۰XXXXX15PASS۳۲۸۱۵

 

 

[تعداد: 0   میانگین: 0/5]

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

‫۴ دیدگاه ها

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

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

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

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

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

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