Искусство компьютерного программирования
РЕДАКТИРОВАТЬ: Я знаю, что мы не должны редактировать новые требования после первой публикации, но, насколько я понимаю, это требование подразумевается во всех вопросах здесь:
Объясните свой ответ! По крайней мере, немного. Так что у случайного читателя есть шанс проследить ваши размышления и оценить ваш гений.
Вот простой, но, надеюсь, забавный:
Можете ли вы воссоздать любой из следующих паттернов?
Правила:
Только целочисленная арифметика
Строго локальные, то есть только координаты x, y точки могут использоваться для вычисления ее цвета.
Нет таблиц поиска
Никакого брутфорса (вот почему есть тег no-computers, если вам интересно), кроме этого вы можете использовать компьютеры по своему усмотрению.
(5.) Чем проще, тем лучше
Заметки:
Все шаблоны периодические и используют цвета 0,1,2,3,4.
Необязательно использовать одни и те же цвета, подойдут любые пять цветов.
Я намеренно не помещаю текстовую версию шаблонов, потому что вы не должны использовать грубую силу.
Я все еще новичок в создании головоломок, любые отзывы приветствуются.
Один пример с решением:
![]()
вариант ответа $f(x,y) = \left [ \lfloor \frac x 3 \rfloor - \lceil \frac {y+2x+1} 6 \rceil - \lceil \frac {y+1} 6 \rceil \right ] \mod 5$
Ответы
Я считаю, что первый шаблон (с (0,0) вверху слева)
$$\Biggl\{\left\lfloor\frac{2x+3y-2}8\right\rfloor+\left\lfloor\frac{-3x-2y+3}8\right\rfloor \Biggr\} \mathop{\textrm{mod}}5.$$
И последний (с (0,0) вверху слева)
$$\Biggl\{x+y+m(x-y)-\left\lfloor\frac x4\right\rfloor\Biggl\}\mathop{\textrm{mod}}5$$
где
$m(x)$ идет $0, +1, 0, -1$ в зависимости от $x$ mod 4. Существует множество способов определения $m$; например$m(x)=(x \mathop{\textrm{mod}}2)\cdot(-1)^{\lfloor x/2\rfloor}$.
Вопрос был обновлен и теперь включает просьбу «объяснить свой ответ».
У меня не так много объяснений для первого паттерна. я только
подумал, что я должен попробовать вещи в форме $\lfloor\textrm{linear}(x,y)\rfloor+\lfloor\textrm{linear}(x,y)\rfloor\pmod5$с коэффициентами двух линейных элементов, совпадающими, чтобы придать шаблону правильную симметрию; периодичность паттерна подсказывала, что я, вероятно, хотел бы в знаменателе 8 или 16, небольшое экспериментирование показало (как должно было быть очевидно с самого начала), что разница между$x$ и $y$коэффициенты отображаются в том, сколько «полос» существует с юго-запада на северо-восток, и тогда было всего несколько случаев, чтобы попытаться увидеть, дают ли они правильный образец. Найдя что-то с правильным рисунком, но смещение в$x$ и $y$, Я заменил $x,y$ с участием $x-\delta,y-\epsilon$ где $\delta,\epsilon$был офсет, который мне нужно было произвести, и он был упрощен. Выполнено.
О четвертом могу сказать немного подробнее.
Прежде всего, очень очевидный образец полос подсказывал, что внутри моего "... mod 5" мне нужен термин $\lfloor x/4\rfloor$. Остальное затем необходимо для получения красивой простой периодической «змейки». Змеи бегут с юго-запада на северо-восток вправо, вправо, вверх, вверх, вправо, вправо, вверх, вверх, вправо, вправо и т. Д. Если мы просто возьмем контуры$x+y$тогда у нас будут простые диагональные линии, которые на самом деле очень похожи на этих змей; мы можем превратить диагональные линии в змей, добавляя и вычитая единицы в тщательно отобранных местах. Если вы добавите 1 все вниз по диагональной линии с северо-запада на юго-восток, вы фактически сдвинете все контуры на одну единицу по диагонали внутрь; если вы вычитаете 1, вы фактически толкаете их на одну единицу по диагонали наружу. Немного посмотрев на шаблон, можно увидеть, что необходимо, чтобы половина диагоналей NW-SE оставалась как есть, а другая половина чередовалась между вдавливанием и выталкиванием, что означает, что нам нужно добавить эту функцию.$m(x,y)$ перед уменьшением мода 5.
(2 из 4)
$(0,0)$ находится внизу слева, а не вверху слева.
2-й узор:
$f(x,y) = \left [ \left\lceil \frac {3x} 8 \right\rceil - \left\lfloor \frac {5x} 8 - \frac {y} 4 \right\rfloor \mod 5 - \left\lfloor -\frac {y} 8 \right\rfloor \mod 5 \right] \mod 5$
![]()
3-й узор:
$f(x,y) = \left [ \left\lceil \frac {3x+3} 7 \right\rceil - \left\lfloor \frac {6x-y} 7 \right\rfloor - 7 \right] \mod 5$
![]()