Ваша цель - создать спираль Фибоначчи с числами.
Пример ввода / вывода
1 -> 1
2 -> 1 1
3 -> 1 1
2 2
2 2
6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
Входные данные Входные данные могут быть получены через STDIN или аргумент функции. Это будет один номер
Выходные данные Выходные данные могут быть из STDOUT или возвращаемого значения функции. Это должна быть одна строка.
Дополнительные пробелы в самом конце строки не допускаются. Вывод может содержать цифры, переводы строк (новые строки) и пробелы.
Ориентация не имеет значения, это означает повороты и отражения. Пока это следует действительному спиральному образцу Фибоначчи.
Числа с различным количеством цифр (например, 1 и 13) должны быть выровнены по правому краю друг с другом. Возможно, потребуется добавить пробел в самом начале строки, чтобы все могло выстроиться в линию.
1 1 1 1
100 100 should actually be 100 100
Вы можете увидеть пример здесь
Это код-гольф, поэтому выигрывает самый короткий код в байтах!
Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.
Похоже, что это может быть яснее, как два предложения.Ответы:
APL, 23
Объяснение:
Попробуйте это на tryapl.org
источник
⌸
или⍤
) отсутствуют в этом наборе символов и не могут использоваться, когда вы хотите вызвать это правило.Matlab, 84 байта
Функция используется. Вывод в стандартный вывод.
Примеры:
Matlab, 78 байт
То же, что и выше, за исключением того, что используется функция Matlab, а именно, она автоматически отображает вывод функции (в виде строки) в стандартный вывод. Это позволяет избежать преобразования в строку в вышеприведенном подходе.
источник
Python 2, 121 байт
Слабые правила вращения делают это намного проще.
Я не использовал обратные пометки вместо этого,
str(a)
потому что я не уверен, разрешено ли нам больше пробелов, чем необходимо, если мы когда-либо достигнем длинных. Хотя, даже если бы мы были, использованиеa
само по себе было бы короче в любом случае.источник
Рубин,
243242236233222170130 байтисточник
t==value
условия вt>value
. Например,(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Питон -
189179174источник
J, 36 байт
Использование:
Метод:
Функция вращает текущий квадрат и добавляет новый квадрат к текущему
input-1
раз. Размер квадрата и значения элемента собираются из размера предыдущего прямоугольника.Объяснение кода:
Попробуйте это онлайн здесь.
источник
Haskell,
183176171163 байтаФункция is
f
, которая принимает число и возвращает одну строку:источник
Pyth, 34 байта
Удивительно, но более половины кода - это печать / заполнение, а не генерация матрицы.
Генерация матрицы действительно проста, однако, она состоит из транспонирования и обращения и добавления N строк, содержащих N копий N, где N - текущее количество строк.
Пример вывода для 7:
источник
Perl,
289 277257 байтисточник
К, 48 байтов
И в действии:
Еще могут быть хорошие возможности для игры в гольф.
Программа в основном состоит из двух частей - генерации каскадной матрицы и форматирования ее для вывода. Первый довольно прост:
Начиная с матрицы 1x1, содержащей 1, создайте вектор T-длины T, где T - длина начальной матрицы в первом измерении (
t#t:#x
) и присоедините ее к каждой строке исходной матрицы (x,\:
). Реверс и транспонирование результата (+|
) поворачивает его на 90 градусов. Мы делаем это N-1 раз.Форматирование довольно неуклюже, потому что естественный подход K к печати матрицы не выровняет числовые столбцы так, как нам нужно:
Основная идея состоит в том, чтобы взять максимальный элемент матрицы (
|//x
), преобразовать его в строку (унарный$
), взять его длину плюс один (1+#
), а затем отформатировать элементы матрицы до выровненных по правому краю строк этого размера. Затем, чтобы привести в порядок, присоедините эти строки (,/'
) и удалите результирующий начальный пробел (1_'
).источник
CJam, 48 байтов
Попробуйте онлайн
Основная часть генерации шаблона кажется достаточно простой. Поверните созданный до сих пор прямоугольник и добавьте квадрат значений внизу.
Код для заполнения результата выглядит ужасно. Я перепробовал кучу комбинаций
f
и:
операторов применять отступы к вложенному списку, но ничего не получалось. Если у кого-то есть лучшие предложения, они очень приветствуются.источник
Wf%
. Кроме того, вы могли бы сделать что-то вроде,{Se[}ff%
а не:U;{USe[}f%
для заполнения? (Это может не сработать, как есть, я не могу обдумать это прямо сейчас.)Pyth, 29 байт
Демонстрация.
Если бы заполнение было бесплатным / неявным, как в APL, или был разрешен вывод матрицы, это было бы 14 байтов:
источник
Рубин, 129 байт
Я отредактировал другой ответ ruby, но мои последние изменения не принимаются или что-то в этом роде, поэтому вот оно:
источник
ES6, 248 байт
Где
\n
представляет буквальный символ новой строки.Досадно, что форматирование занимает большую часть кода.
f
вспомогательная функция, которая создает заполненный массив Он используется в основном для создания заполненных квадратов, но также легко удваивается для создания базовых вариантов для рекурсии.g
это главное хрюканье. Он рекурсивно генерирует последнее, но одно решение, поворачивает его на 180 градусов, а затем добавляет следующие два квадрата.источник