مسابقه دوم جیکل: یک چالش کوچولو!

به دومین مسابقه جیکل خوش آمدید! در این مسابقه شما باید یک برنامه کوتاه فیبوناچی بنویسید. از بین برنامههای صحیح، کوتاهترین برنامه برنده خواهد بود. به نفر برتر، جوایزی به رسم یادبود اهدا میشود (شامل یک فلشمموری، لیوان جاواکاپ و گواهینامه جاواکاپ).
درباره مسابقههای جیکل:
لطفاً برای آشنایی با مسابقههای جیکل، این مطلب را ملاحظه بفرمایید.
شرح مسابقه:
سری فیبوناچی، یک دنباله از اعداد است که با ۱ و ۱ شروع میشود (دو عضو اول این دنباله عدد یک هستند) و هر عضو بعدی حاصلجمع دو عضو قبلی است. برنامهای برای تولید دنباله فیبوناچی بنویسید.
برای این کار، واسط Fibonacci را پیاده (implement) کنید. در کلاسی که پیاده میکنید، متد sequnce را تعریف کنید. این متد تعداد اعضای دنباله فیبوناچی را به صورت پارامتر دریافت میکند و یک List شامل این اعضا برمیگرداند. مثلاً اگر این متد عدد ۶ را به عنوان پارامتر دریافت کند، لیستی شامل اعداد ۱ و ۱ و ۲ و ۳ و ۵ و ۸ برمیگرداند. اگر عدد دریافتی کوچکتر از صفر باشد، باید یک خطا (هر نوع Exception ای که دوست دارید) پرتاب شود. اگر این عدد صفر باشد، باید یک لیست خالی برگردانده شود (نباید null برگرداند).
دریافت واسط Fibonacci:
بسته ir.javacup.jcal.jcal2 را دریافت نمایید. کلاس FibonacciImpl از این بسته حذف شده است و شما باید آن را پیادهسازی نمایید. نام کلاس شما دقیقاً باید FibonacciImpl باشد و بستهی این کلاس هم دقیقاً باید ir.javacup.jcal.jcal2 تعریف شده باشد (یعنی اسم کامل کلاس شما ir.javacup.jcal.jcal2.FibonacciImpl خواهد بود).
معیار ارزیابی:
برنامهای برنده این مسابقه است که اولاً صحیح باشد و ثانیاً کوتاه باشد.
صحت برنامه: باید مشخصات کلاس موردنظر همگی رعایت شوند. به عنوان مثال همه test-case هایی که در اختیار شما هستند (فایل FibonacciTest را ببینید)، باید پاس شوند.
برای آشنایی با موضوع آزمون واحد (Unit Testing) و JUnit این اسلایدها را ببینید. برای مطالعه بیشتر، JUnit را در سایت جاواکاپ جستجو کنید.
اندازه برنامه: در این مسابقه، هر چه برنامه شما کوتاهتر باشد، بهتر است. تعداد کاراکترهای برنامه شما شمرده میشود و از بین برنامههای صحیح، کوتاهترین برنامه برنده میشود. بنابراین، صورت مسأله به طور خلاصه این است: واسط را با کمترین تعداد کاراکتر ممکن پیادهسازی کنید. از بین کاراکترهای موجود در برنامه شما، کاراکترهای فاصله، خط جدید و تب حذف میشوند و سپس تعداد آنها (به صورت خودکار) شمرده میشود.
برای محاسبه تعداد کاراکترهای برنامه خود، میتوانید از این برنامه استفاده کنید.
اگر امتیاز دو نفر از هر نظر مساوی باشد (دو برنامه صحیح باشند و تعداد کاراکترهای دو برنامه مساوی باشد)، کسی برنده میشود که زودتر پاسخ خود را فرستاده است.
هدایای برنده:
گواهینامه برترین شرکتکننده از طرف انجمن جاواکاپ.
یک لیوان جاواکاپ به رسم یادبود.
یک فلشمموری.
نحوه ارسال:
پیادهسازی شما شامل فقط و فقط یک فایل جاوا FibonacciImpl (بدون هیچ اضافات دیگری و بدون درج فولدر و بسته) خواهد بود. همچنین یک فایل متنی با نام info.txt شامل نام، نامخانوادگی، تلفن همراه و شماره ملی بسازید. این دو فایل (FibonacciImpl.java و info.txt) را در یک فایل zip فشرده کنید و به آدرس jcal@javacup.ir ارسال نمایید. (فقط یک فایل zip شامل دو فایل مذکور ارسال نمایید).
لطفاً ساختار فایل ارسالی خود را دقیقاً مانند همین فایل تنظیم کنید تا در تصحیح اتوماتیک برنامهها، برنامه شما به درستی اجرا شود. لطفاً عنوان (subject) ایمیل خود را برای این مسابقه JCAL002 قرار دهید.
از هر نسخهای از جاوا که میخواهید استفاده کنید (حتی جاوا ۸). هر امکانی که در JDK هست، قابل استفاده است. ولی نمیتوانید از یک کتابخانه اضافی (که در JDK نیست) استفاده کنید. همانطور که گفته شد، برنامه ارسالی شما فقط شامل یک فایل (کلاس FibonacciImpl) است و از فایلهای jar یا … دیگری نمیتوانید استفاده کنید.
نمونه فایل ارسالی (صرفاً به عنوان نمونه)
مهلت ارسال:
حداکثر تا ساعت ۲۳:۵۹ روز جمعه ۱۸ اردیبهشت ۱۳۹۴، طبق دستورالعمل مذکور نسبت به ارسال برنامه خود اقدام نمایید.
شرایط شرکت در مسابقه:
برنامههایی که شباهت زیادی به هم داشته باشند، همگی از شرکت در مسابقه حذف میشوند. این شرایط به صورت خودکار و با کمک ابزارهای کشف کد مشابه بررسی میشود. بنابراین از ارسال برنامههای مشابه با ایمیلهای مختلف خودداری کنید. همچنین پیادهسازی خود را در اختیار دیگر شرکتکنندگان قرار ندهید.
دانش لازم برای شرکت این مسابقه:
– مفاهیم عمومی برنامهنویسی به زبان جاوا (متد، متغیر و حلقه)
– مفهوم واسط (interface)
توضیح واضحات: بدیهی است که لزوماً کوتاه نوشتن برنامهها همواره مطلوب نیست. گاهی اختصار بیش از حد، به گویایی، شفافیت و قابلیت برنامه صدمه میزند. این مسابقه، صرفاً یک آزمون چالشی کوتاه و جالب است و قصد ندارد اختصار بیش از حد در برنامهنویسی را ترویج کند.
تماس با ما:
در صورت نیاز و در رابطه با مسابقات جیکل، با آدرس jcal@javacup.ir تماس بگیرید.
عرض سلام و خسته نباشید
نتایج مسابقه کی مشخص میشه؟
همچنین پیشنهاد میکنم کد برنده رو رو سایت قرار بدین که بتونیم استفاده کنیم.
سلام و خسته نباشید
حداکثر مقدار number آرگومان ورودی sequnce توی تست کیس ها چه مقدار می باشد؟
سلام و ممنون.
هر عددی که فیبوناچی آن در یک متغیر long جا شود. مثلاً در test-case ها عدد ۶۰ به عنوان number استفاده شده.
اگر برنامه warning داشته باشد ولی تست ها را با موفقیت پاس کند مورد قبول هست؟ معیار پذیرش برنامه فقط پاس کردن تست ها است؟
وارنینگ اشکالی ندارد
آیا برنامه نوشته شده باید دارای رابط کاربری باشد؟
نه به هیچ وجه واسط کاربری لازم نیست. فقط پیادهسازی متد مربوطه و پاس شدن تستها کافیست.
زودتر از ۱۸ اردیبهشت فرستادن امتیاز داره؟
امتیاز خاصی ندارد. ولی اگر امتیاز دو نفر از هر نظر مساوی باشد (دو برنامه صحیح باشند و تعداد کاراکترهای دو برنامه مساوی باشد)، کسی برنده میشود که زودتر پاسخ خود را فرستاده است.
آقا یه جواب خوب سایزش حدودا چن میشه؟
بین ۲۰۰ تا ۴۰۰
بیشتر نپرسید!
🙂
ببخشید، منظورم متد main بود ، کلاس FibonacciImpl باید متد main داشته باشه یا نه؟
نه نیازی به متد main نیست.
کلاس FibonacciImpl باید حتما تو پکیجی باشه که
اینترفیس Fibonacci قرار داره؟ یا باید تو default package باشه؟
jdk هر ورژنی میتونیم استفاده کنیم؟
باید حتماً در بسته ir.javacup.jcal.jcal2 باشد (تا test-case هایی که در اختیار شما هستند هم پاس شوند)
از هر ورژنی از جاوا میتوانید استفاده کنید.
کلاس FibonacciImpl متد باید داشته باشه یا نیازی نیست؟
بدون متد هم مگه میشه؟! بله باید متد sequnce را پیاده کنید.
یک حدودی از اندازه مناسب بدهید تا بفهمیم چقدر برنامه ما خوب است. مثلاً برنامه ما چند کاراکتر باشد خوب است؟
یک برنامه معمولی فیبوناچی، با توصیفات بالا، حدود ۴۵۰ کاراکتر است (از برنامه FibonacciSize که در بالا لینکش هست برای شمردن تعداد کاراکترهای غیرخالی استفاده کنید).
ولی با تعداد کاراکتر کمتر (مثلاً بین ۲۰۰ تا ۴۰۰ کاراکتر) هم میتوان این برنامه را نوشت. به هر حال سعیتان را بکنید و شانستان را امتحان کنید.
منظورتون از لیست چی هست؟ یعنی فقط از Arraylist و این چیزا میشه استفاده کرد یا نه از ارایه معمولی هم میشه استفاده کرد؟
یعنی List (یعنی java.util.List) و کلاسهایی که List را پیاده میکنند. از آرایه نمیتوان استفاده کرد. در test-case هایی که در اختیار شما قرار گرفته، نحوه استفاده از کلاس شما مشخص شده است. با توجه به این که برنامه شما به صورت اتوماتیک تست میشود، دقت کنید که مواردی که در test-case ها آمده، لحاظ شده باشد.