Тестування на первинність у мануфактурі


13

Фон

Manufactoria - це гра про програмування. Для виконання завдань гравець повинен використовувати форму двовимірної мови програмування. Якщо ви ніколи про це не чули, найпростіший спосіб навчитися - спробувати перші кілька рівнів гри.

Виклик

Ваше завдання - створити програму, яка перевіряє первинність числа.

Вхід буде серії N синіх маркерів у черзі. Якщо N є простим, то ваша програма повинна прийняти його (перемістіть робота до кінця). Якщо N складений, то ваша програма повинна відхилити його (кудись кинути його на підлогу).

Параметри подання

Оскільки це складніший виклик, ніж типовий виклик Manufactoria, я вирішив дозволити більше способів подати ваші відповіді.

Ваніль

Я створив спеціальний рівень 13x13 для складання та тестування подань. Спеціальний рівень тестування такий.

13x13 користувацький рівень

У грі передбачено лише 8 тестових випадків на користувальницькому рівні, але ваше створення має теоретично вміти обробляти будь-яке природне число N, обмежене лише наявною пам'яттю. Для інформаційних цілей тестові приклади, що надаються на спеціальному рівні, є такими:

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

Розширена сітка

Деякі користувачі можуть захотіти більше місця, ніж сітка 13х13. Ось посилання на індивідуальний рівень в грі 15х15, створений шляхом зміни числа в URL-адресі:

15x15 користувацький рівень

На жаль, більші спеціальні рівні не працюють, оскільки додаткові комірки недоступні.

Мануфактура Есоланг

Відбулася адаптація Manufactoria до мови на основі ASCII. Якщо ви хочете по-іншому сконструювати / протестувати своє творіння, або якщо ви не можете встановити своє остаточне рішення на ігровій дошці, можете скористатися цим esolang. Інформацію про цей esolang ви можете знайти тут:

Manufactoria esolang

Існує кілька розбіжностей між esolang і фактичною грою. Наприклад, конвеєрні переправи обробляються по-різному. Постарайтеся уникати використання цих розбіжностей.

Швидший спосіб випробувати

Гра дуже повільна, якщо мова йде про програми, для виконання яких потрібно кілька тисяч кроків. Моє рішення про тестування концепції прийняло 28042 кроки, щоб відхилити 15. Навіть при 50-кратній швидкості в грі, це просто займає занадто багато часу.

Я знайшов цей дуже корисний веб-сайт . Просто скопіюйте та вставте посилання на свою відповідь, і ви можете перевірити свою відповідь конкретними вводами. Етап 28042 кроків зайняв за секунду.

Варто зазначити, що воно часто скаже щось на кшталт "неправильно прийнято", навіть якщо ваша машина працювала належним чином. Це тому, що веб-сторінка знає лише тестові випадки. Наприклад, було б сказано, що моє рішення "неправильно прийняло" число 3, навіть якщо моя машина була справді правильною.

Як перемогти

Критеріями оцінювання є кількість частин (зайнятих комірок). Це кодовий гольф, тому подання з найменшими частинами виграє.

Для тих, хто цікавиться, моє базове рішення має 96 частин і вміщається в сітку 13х13. Пошук кращого алгоритму може призвести до колосальних поліпшень, оскільки я знаю, що я використовував неоптимальний алгоритм.

Відповіді:


10

53 деталі - сітка 11х11

Я щойно навчився грати в Manufactoria 2 дні тому, тому це, мабуть, не дуже оптимізовано для гольфу, але принаймні це вирішує проблему. Він здійснює пробний поділ курсу, шляхом повторного віднімання. Перевіряються всі дільники від 2 до N-1. Складність у часі повинна бути O (N ^ 3), я вважаю.

53-х частинний розчин

Посилання рішення

Я дуже розчарувався в тому, що доведеться використовувати конвеєр :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.