Дается доска переменного размера с максимальным размером 5 раз 5 полей. Каждое поле может быть заполнено знаком «х». Если это не заполнено 'x', это заполнено 'o'.
Начальное состояние каждой доски дается (см. Ниже). На каждой доске необходимо сыграть 10 раундов (при макс. Условиях: см. Ниже) и следить за развитием x.
Один раунд работает следующим образом:
- каждый «х» распространяется на ортогонально граничащие поля, но исчезает сам по себе
- каждый раз, когда два «х» находятся на одном поле, они нейтрализуют друг друга
Эволюция всех «х» в каждом раунде должна происходить одновременно. Пример:
o o o o x o
o x o -> x o x
o o o o x o
С каждым раундом эволюции вы должны видеть, очищается ли доска от «х». Разве это не пусто, повторяющийся узор может присутствовать. Если это также не так, мы отказываемся от анализа эволюции. Кроме того, вы должны распечатать максимальный процент полей x для каждой стартовой доски (округленный до целых чисел).
Входные данные:
Входные данные можно найти здесь (Pastebin). Эти данные содержат 100 начальных состояний. Как уже упоминалось, платы различаются по размеру. Количество строк указано с номером n от 1 до 5, за которым следуют n строк, которые содержат только «x» и «o», которые представляют начальный шаблон. Каждый ряд доски имеет от 1 до 5 полей.
Выход:
Полный результат должен быть распечатан, по одной печатной строке для каждой стартовой доски в следующем виде:
Round {0-10}: {repetition/empty/giveup}, {0-100} percent maximum-fill
Примеры:
Пример 1:
Input: 2 Starting state: x o x
xox x x
xx
Round 1: x x o
o x
Round 2: x o x
o x
Round 3: o x o
o o
Round 4: x o x -> The pattern repeats:
o x It is the same as in round 2,
therefore we stop. Maximum fill was
in the starting state with four times 'x'
of 5 fields altogether,
so we have 4/5 = 80 %.
Output: Round 4: repetition, 80 percent maximum-fill
Пример 2:
Input: 1 Starting state: x x
xx
Round 1: x x -> We already have a repetition, because
the pattern is the same as in the starting
state. The board is always filled 100 %.
Output: Round 1: repetition, 100 percent maximum-fill
После восьми дней я отмечу рабочий ответ с наименьшим количеством символов как победитель. Кроме того, я опубликую правильный вывод для 100 стартовых досок (вход).
Вы можете использовать предпочитаемый вами язык (программирование / скриптинг).
Веселиться!
PS: Если у вас есть вопросы, не стесняйтесь спрашивать.
PPS: В отношении оригинальных создателей: для людей, способных говорить по-немецки, был задан вопрос НЕ НАЖИМАЙТЕ, ЕСЛИ ВЫ НЕ ХОТИТЕ СПОЙЛЕРОВ здесь . Поскольку официальное время для завершения задачи истекло, я хотел посмотреть, не может ли кто-нибудь придумать короткое и элегантное решение.
22.04.2014:
Задача выполнена! Победитель отмечен как принятый. Правильный вывод:
Round 10: giveup, 50 percent maximum-fill
Round 5: empty, 66 percent maximum-fill
Round 1: repetition, 100 percent maximum-fill
Round 1: empty, 100 percent maximum-fill
Round 4: repetition, 100 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 2: repetition, 60 percent maximum-fill
Round 4: empty, 88 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 5: repetition, 80 percent maximum-fill
Round 10: repetition, 80 percent maximum-fill
Round 1: empty, 80 percent maximum-fill
Round 3: repetition, 60 percent maximum-fill
Round 4: repetition, 48 percent maximum-fill
Round 9: empty, 41 percent maximum-fill
Round 10: giveup, 92 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 88 percent maximum-fill
Round 10: giveup, 76 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Round 10: giveup, 40 percent maximum-fill
Round 10: giveup, 100 percent maximum-fill
Round 10: giveup, 71 percent maximum-fill
Round 2: empty, 81 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 3: empty, 80 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 83 percent maximum-fill
Round 7: repetition, 37 percent maximum-fill
Round 9: repetition, 85 percent maximum-fill
Round 5: repetition, 40 percent maximum-fill
Round 5: repetition, 60 percent maximum-fill
Round 4: empty, 80 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 46 percent maximum-fill
Round 6: repetition, 42 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 4: repetition, 80 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 4: repetition, 56 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 54 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 7: empty, 85 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 70 percent maximum-fill
Round 2: empty, 66 percent maximum-fill
Round 1: empty, 66 percent maximum-fill
Round 3: empty, 100 percent maximum-fill
Round 3: empty, 66 percent maximum-fill
Round 8: repetition, 42 percent maximum-fill
Round 1: empty, 60 percent maximum-fill
Round 2: repetition, 100 percent maximum-fill
Round 2: repetition, 83 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 56 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 6: repetition, 33 percent maximum-fill
Round 3: empty, 57 percent maximum-fill
Round 3: repetition, 100 percent maximum-fill
Round 6: repetition, 73 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 73 percent maximum-fill
Round 5: empty, 80 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 3: repetition, 53 percent maximum-fill
Round 10: giveup, 33 percent maximum-fill
Round 10: giveup, 80 percent maximum-fill
Round 10: giveup, 63 percent maximum-fill
Round 10: giveup, 70 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 7: repetition, 70 percent maximum-fill
Round 10: repetition, 57 percent maximum-fill
Round 10: giveup, 55 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 4: repetition, 75 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 10: giveup, 64 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 10: giveup, 58 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 4: repetition, 40 percent maximum-fill
Round 4: empty, 40 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Ответы:
Perl,
308, 304, 305, 293, 264, 262Редактировать: ошибка появилась после одного из недавних изменений, что привело к неправильному выводу для пустых досок (вывод набора тестов был в порядке). Поскольку
Round 0
в данном формате вывода может означать только то, что во входе могут быть пустые доски (хотя ни одна из них не входит в набор тестов), ошибку необходимо было исправить. Быстрое исправление означало увеличение количества байтов (на 1, на самом деле) - не вариант, конечно. Поэтому мне пришлось играть в гольф немного больше.Запуск с
-p
(+1 добавлено к счету), читает из STDIN. Требуется 5.014 из-заr
модификатора замещения.т.е.
источник
perl -p x.pl < input.txt
если данные находятся в файле, илиperl -p x.pl
и строка за строкой для проверки отдельной записи (завершается сctrl-D
(ctrl-Z
)). Не забудьте проверить ваш perl5.014
или новее.1 \n o
ввод.C # - 1164 символа
Это мое первое участие в Code-Golf, поэтому, пожалуйста, будьте снисходительны ;-)
Я знаю, я далек от лучших результатов - кстати, действительно потрясающе!
Но я все равно решил поделиться своим решением в C #.
Только директивы using уже насчитывают 97 символов, так что я думаю, что достичь остальных будет менее чем за 200 символов.
Это довольно итеративный подход, использующий LINQ во многих местах. Я также включил загрузку входного файла и запись выходного файла в код.
Вот еще одна более читаемая версия:
источник
J - 275 символов
Ох, все эти спецификации ввода / вывода! Такой позорно большой счет для J, в конце концов. Принимает ввод в STDIN с завершающим символом новой строки и предполагает, что
\r
во входе нет никаких возвратов каретки ( ). Вот результат применения его к образцу входного файла в вопросе.Ungolfed: (Я могу добавить более подробное и J-newbie-friendly объяснение позже.)
Эта
$:
часть заставляет основную часть проходить через вход (ужасно неудобная форма для анализа J), применяя@
цепочку гирлянд к каждой секции.nlines
находит количество строк для следующей доски.Действие на каждой доске (
evolvex
) является аккуратным:iterate
( вызываетсяa
в гольфе) создает список каждой итерации симуляции, пока мы не натолкнемся на то, что видели ранее, или слишком много шагов. Затемpercent@,.
вычисляет процент заполненного квадрата в каждом результате иformat
запускает некоторую статистику (stat
называемуюt
в гольфе), чтобы выяснить, как закончилась симуляция, какой процент был наибольшим и т. Д., Прежде чем форматировать все это в строку.Наконец,
}:
позаботится о некотором мусоре, прежде чем; joinln
объединит все отдельные выводы платы в одну строку, разделенную символом новой строки.источник
jconsole golf.ijs < input.txt
.v
имя в качестве имени, которое по какой-либо причине не разрешено в сценариях. (Я выполнял фрагмент в REPL.) Изменение егоa
на работает.