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

به دومین مسابقه جیکل خوش آمديد! در اين مسابقه شما بايد یک برنامه کوتاه فیبوناچی بنویسید. از بین برنامههای صحیح، کوتاهترين برنامه برنده خواهد بود. به نفر برتر، جوایزی به رسم یادبود اهدا میشود (شامل یک فلشمموری، لیوان جاواکاپ و گواهینامه جاواکاپ).
درباره مسابقههای جیکل:
لطفاً برای آشنایی با مسابقههای جیکل، این مطلب را ملاحظه بفرمایید.
شرح مسابقه:
سری فیبوناچی، یک دنباله از اعداد است که با 1 و 1 شروع میشود (دو عضو اول این دنباله عدد یک هستند) و هر عضو بعدی حاصلجمع دو عضو قبلی است. برنامهای برای تولید دنباله فیبوناچی بنویسید.
برای این کار، واسط Fibonacci را پیاده (implement) کنید. در کلاسی که پیاده میکنید، متد sequnce را تعریف کنید. این متد تعداد اعضای دنباله فیبوناچی را به صورت پارامتر دریافت میکند و یک List شامل این اعضا برمیگرداند. مثلاً اگر این متد عدد 6 را به عنوان پارامتر دریافت کند، لیستی شامل اعداد 1 و 1 و 2 و 3 و 5 و 8 برمیگرداند. اگر عدد دریافتی کوچکتر از صفر باشد، باید یک خطا (هر نوع 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 قرار دهيد.
از هر نسخهای از جاوا که میخواهید استفاده کنید (حتی جاوا 8). هر امکانی که در JDK هست، قابل استفاده است. ولی نمیتوانید از یک کتابخانه اضافی (که در JDK نیست) استفاده کنید. همانطور که گفته شد، برنامه ارسالی شما فقط شامل یک فایل (کلاس FibonacciImpl) است و از فایلهای jar یا … دیگری نمیتوانید استفاده کنید.
نمونه فایل ارسالی (صرفاً به عنوان نمونه)
مهلت ارسال:
حداکثر تا ساعت 23:59 روز جمعه 18 اردیبهشت 1394، طبق دستورالعمل مذکور نسبت به ارسال برنامه خود اقدام نماييد.
شرايط شرکت در مسابقه:
برنامههایی که شباهت زيادی به هم داشته باشند، همگی از شرکت در مسابقه حذف میشوند. اين شرايط به صورت خودکار و با کمک ابزارهای کشف کد مشابه بررسی میشود. بنابراين از ارسال برنامههای مشابه با ايميلهای مختلف خودداری کنيد. همچنين پيادهسازی خود را در اختيار ديگر شرکتکنندگان قرار ندهيد.
دانش لازم برای شرکت اين مسابقه:
– مفاهيم عمومی برنامهنويسی به زبان جاوا (متد، متغیر و حلقه)
– مفهوم واسط (interface)
توضيح واضحات: بدیهی است که لزوماً کوتاه نوشتن برنامهها همواره مطلوب نیست. گاهی اختصار بیش از حد، به گویایی، شفافیت و قابلیت برنامه صدمه میزند. این مسابقه، صرفاً یک آزمون چالشی کوتاه و جالب است و قصد ندارد اختصار بیش از حد در برنامهنویسی را ترویج کند.
تماس با ما:
در صورت نياز و در رابطه با مسابقات جیکل، با آدرس jcal@javacup.ir تماس بگيريد.
عرض سلام و خسته نباشید
نتایج مسابقه کی مشخص میشه؟
همچنین پیشنهاد میکنم کد برنده رو رو سایت قرار بدین که بتونیم استفاده کنیم.
سلام و خسته نباشید
حداکثر مقدار number آرگومان ورودی sequnce توی تست کیس ها چه مقدار می باشد؟
سلام و ممنون.
هر عددی که فیبوناچی آن در یک متغیر long جا شود. مثلاً در test-case ها عدد 60 به عنوان number استفاده شده.
اگر برنامه warning داشته باشد ولی تست ها را با موفقیت پاس کند مورد قبول هست؟ معیار پذیرش برنامه فقط پاس کردن تست ها است؟
وارنینگ اشکالی ندارد
آیا برنامه نوشته شده باید دارای رابط کاربری باشد؟
نه به هیچ وجه واسط کاربری لازم نیست. فقط پیادهسازی متد مربوطه و پاس شدن تستها کافیست.
زودتر از 18 اردیبهشت فرستادن امتیاز داره؟
امتیاز خاصی ندارد. ولی اگر امتیاز دو نفر از هر نظر مساوی باشد (دو برنامه صحیح باشند و تعداد کاراکترهای دو برنامه مساوی باشد)، کسی برنده میشود که زودتر پاسخ خود را فرستاده است.
آقا یه جواب خوب سایزش حدودا چن میشه؟
بین ۲۰۰ تا ۴۰۰
بیشتر نپرسید!
🙂
ببخشید، منظورم متد main بود ، کلاس FibonacciImpl باید متد main داشته باشه یا نه؟
نه نیازی به متد main نیست.
کلاس FibonacciImpl باید حتما تو پکیجی باشه که
اینترفیس Fibonacci قرار داره؟ یا باید تو default package باشه؟
jdk هر ورژنی میتونیم استفاده کنیم؟
باید حتماً در بسته ir.javacup.jcal.jcal2 باشد (تا test-case هایی که در اختیار شما هستند هم پاس شوند)
از هر ورژنی از جاوا میتوانید استفاده کنید.
کلاس FibonacciImpl متد باید داشته باشه یا نیازی نیست؟
بدون متد هم مگه میشه؟! بله باید متد sequnce را پیاده کنید.
یک حدودی از اندازه مناسب بدهید تا بفهمیم چقدر برنامه ما خوب است. مثلاً برنامه ما چند کاراکتر باشد خوب است؟
یک برنامه معمولی فیبوناچی، با توصیفات بالا، حدود 450 کاراکتر است (از برنامه FibonacciSize که در بالا لینکش هست برای شمردن تعداد کاراکترهای غیرخالی استفاده کنید).
ولی با تعداد کاراکتر کمتر (مثلاً بین 200 تا 400 کاراکتر) هم میتوان این برنامه را نوشت. به هر حال سعیتان را بکنید و شانستان را امتحان کنید.
منظورتون از لیست چی هست؟ یعنی فقط از Arraylist و این چیزا میشه استفاده کرد یا نه از ارایه معمولی هم میشه استفاده کرد؟
یعنی List (یعنی java.util.List) و کلاسهایی که List را پیاده میکنند. از آرایه نمیتوان استفاده کرد. در test-case هایی که در اختیار شما قرار گرفته، نحوه استفاده از کلاس شما مشخص شده است. با توجه به این که برنامه شما به صورت اتوماتیک تست میشود، دقت کنید که مواردی که در test-case ها آمده، لحاظ شده باشد.