Мир состоит из пяти на пять клеток. Оборачивает со всех сторон. Это можно визуализировать как ...
XXXXX XXXXX XXOXX XXXXX XXXXX
Вы - О. Вы любите путешествовать по миру, и вы делаете это в соответствии со следующими правилами (пусть C будет текущим днем):
- В лучшие дни вы чувствуете ностальгию. Вернитесь туда, откуда вы начали вчера.
- В нечетные дни вы чувствуете тоску по дому. Переместите один горизонтальный шаг ближе к дому, если это возможно, и один вертикальный шаг ближе к дому, если это возможно. Игнорировать окружение мира с целью определения близости.
- В четные дни вы чувствуете себя авантюрным. Двигайтесь C / 2 шага на юг.
- В квадратные дни вы чувствуете себя авантюрным. Двигайтесь к восточной стене.
- В дни Фибоначчи мир расширяется на юг на один ряд.
- В треугольные дни мир расширяется на восток на один столбец.
Если два или более из вышеуказанных правил будут применяться одновременно, применяйте их в указанном порядке. Например, в нечетный премьерный день сначала вернитесь туда, откуда вы начали вчера, а затем подойдите на шаг ближе к дому.
Вы живете в центре (начального) мира, то есть в позиции (2,2), с нулевым индексом с северо-западного угла. Вы начинаете свое путешествие туда в первый день.
вход
Одно целое число, Н.
Выход
Ваши координаты X и Y в N-й день, нумерованные от северо-западного угла, разделенные одним пробелом.
Тестовый пример с объяснением
При условии ввода 3
правильного вывода:
2 3
Мы можем работать через это один день за один раз. Начиная с первого дня, мы должны применить следующие шаги:
- Нечетное, квадратное, Фибоначчи и треугольное
- Премьер и Фибоначчи
- Простые, нечетные, Фибоначчи и треугольные
В визуальной форме:
День 1 день 2 день 3 XXXXX XXXXXX XXXXXX XXXXXXX XXXXX XXXXXX XXXXXX XXXXXXX XXOXX -> XXXXOX -> XXXXXX -> XXXOXXX XXXXX XXXXXX XXOXXX XXXXXXX XXXXX XXXXXX XXXXXX XXXXXXX XXXXXX XXXXXX XXXXXXX XXXXXX XXXXXXX XXXXXXX
Дополнительные тестовые случаи
Предоставлено Martin Büttner «s эталонного раствора (пожалуйста , обратите внимание , что вы должны выводиться только одна координата, не все из них):
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Output: 4 2 2 3 3 2 6 4 2 2 2 5 2 2 2 6 7 5 7 0 6 4 6 0 5 3 5 10 4 9 9 6 3 8 3 6 2 7 2 6 2 5 2 4 2 4
Это код гольф. Самое короткое представление выигрывает.
Ответы:
Pyth,
157156153 байтаВы можете попробовать это здесь.
Это было забавной проблемой для гольфа! Я все еще привыкаю к Питу, но это действительно отличный язык.
источник
,
- вот для чего он нужен .(G%+H/N2b)
,(GH)
,(tZH)
.Haskell, 394 байта
Это определенно можно оптимизировать, а также после быстрой проверки на правильность
похоже, я получаю другие результаты, чем тот, который опубликовал, Я вернусь и проверю более тщательно мой код, когда у меня будет больше времени ^^Хорошая проблема, кстати!
РЕДАКТИРОВАТЬ: отредактировал мое решение с учетом ценных советов, данных Zgarb . Теперь это работает отлично!
EDIT2: благодаря Ними я сделал код еще меньше. Теперь я также проверяю четность и нечетность в одной функции вместо двух, что в целом уменьшает число с 446 до 414 байтов.
EDIT3: дополнительно улучшено с 414 до 400 байт. Спасибо Ними за еще 2 байта, ты в огне! :)
EDIT4: еще 4 байта от Ними :)
источник
0<1
корочеotherwise
и0/=mod x y
могут быть сокращены до0<mod x y
. Также1==mod(d)2
естьodd d
и0==mod(d)2
естьeven d
.0<1
вместо того, чтобыotherwise
работать, хотя?t
), посколькуelem d[1..div(d*d-d)2]
верно для всехd > 2
.otherwise
это просто другое имя дляTrue
.C
425396 байтЕсть части, которые можно улучшить, но это работает для тестовых случаев .
объяснение
источник
Perl 5, 284 байта
283 байта плюс 1 за
-E
флаг вместо-e
Тот же код, но с большим количеством пробелов, большим количеством скобок и более длинными именами переменных:
Я уверен, что это может быть дальше.
источник
Javascript,
361359 байтВ коде используется деструктурирующее назначение . Это поддерживается только в Firefox и Safari прямо сейчас.
объяснение
источник