Числа должны быть напечатаны с ведущими нулями в поле с длиной = (количество цифр N ^ 2).
Вход (N):
4
Выход:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Я заинтересован в алгоритме и чистоте реализации. Таким образом, пробел не считается, и верхний предел для N составляет 42.
atomic-code-golf
Христо Христов
источник
источник
L = floor(log10(N^2)) + 1
это правильно?N
?Ответы:
питон
Другие тесты
источник
В рубине:
Тестовое задание:
Другое решение, использующее вычисления отсюда :
Тестовое задание:
источник
В Python3:
Пример вывода для 7:
редактировать: рекурсивное решение - 263 байта
источник
Решение Java
примерный вывод для ввода 10
источник
Perl, 178 символов
Использует Math :: Complex и поддерживает текущее направление в комплексной переменной (1 / i / -1 / .i). Бежать с:
Положить
N
в$l
.источник
С
источник
Python 2.7:
источник
PHP, 272 символа, включая комментарий
Рекурсивная версия на основе функций - более интересная для меня, поскольку она лучше выражает намерение. Это работает для различной ширины и высоты тоже.
Выход:
источник
C #, 380-ий гольф
Я не стал вставлять в гольф-версию, так как был уверен, что это не побьет рекорды. Но я хотел дать ему шанс подумать об этом немного по-другому. Вместо того, чтобы записывать каждую строку или позицию по мере того, как я к ней подхожу, я перемещаю курсор в позицию, записываю начальный номер центра и выкручиваюсь оттуда (что иллюстрирует интересную схему перемещения позиций на изменение направления ).
Есть довольно много символического пространства, потраченного впустую, заставляя консольный буфер принимать большие значения, а также вычисляя позицию для верхнего левого угла (который, я уверен, может быть улучшен).
Во всяком случае, это было интересное упражнение.
источник
Рубин
Это не особенно удачное решение для игры в гольф, но оно может представлять алгоритмический интерес.
Меня всегда восхищала похожая проблема , а именно поиск спиральной траектории по часовой стрелке через матрицу NxM. Один действительно интуитивный способ решения этой проблемы - продолжать вращать матрицу против часовой стрелки и снимать ее, как апельсин. Я использую аналогичный - хотя и не такой элегантный - способ сделать обратное:
источник
рэкет
Просто хотел попробовать это решение с использованием близких к 0 памяти. Нет массива, нет ничего. Значение может быть сгенерировано для любой позиции в любое время. Мы могли бы попросить спираль любого размера (если то, что получает поток вывода, может обработать это). В надежде, что кому-то когда-нибудь понадобятся гигантские спирали.
Вот код
Тестирование с этим
Результаты в выходе
Довольно интенсивная загрузка ЦП по сравнению с предварительно вычисленными матрицами, если вам нужна вся спираль, но это может быть полезно. Кто знает! Например:
Не играл в гольф ... Он довольно маленький, несмотря на внешний вид. Я использовал длинные имена и комментарии.
источник
Python 2 , 800 байт
Попробуйте онлайн!
Несколько лет назад мой друг задал этот вопрос в интервью. Они рассказали мне об этом на обеде в честь Дня благодарения нашей семьи, поэтому я считаю это «проблемой благодарения».
источник
PHP,
172171 + 1 байт, 24 операциисоздает массив, проходя индексы по спирали; затем печатает результат.
Запустите как трубу с
-nR
или попробуйте онлайн .Добавьте одно назначение для сохранения пяти байтов: замените последний цикл на
источник
Пример кода: это работает для 4x5, но не работает 3x5
while (k <m && l <n) {/ * Вывести первую строку из оставшихся строк * / for (i = l; i <n; ++ i) {printf ("% d", a [k] [ я]); } k ++;
источник