Этот вызов вдохновлен этим , теперь удаленным вопросом.
Возьмите положительное целое число N в качестве входных данных и выведите матрицу с числами 1 .. N 2, которая соответствует шаблону ниже:
Заполните первый ряд 1 ... N, затем заполните последний ряд (номер N ) (N + 1) .. 2N , затем заполните второй ряд (2N + 1) .. 3N и продолжайте, пока не заполните все ряды.
Выходной формат гибкий, поэтому список списков и т. Д. Принимаются.
N = 1
1
N = 2
1 2
3 4
N = 3
1 2 3
7 8 9
4 5 6
N = 4
1 2 3 4
9 10 11 12
13 14 15 16
5 6 7 8
N = 5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10
Стандартные правила применяются. Кратчайший ответ в байтах на каждом языке выигрывает. Пояснения приветствуются как всегда.
code-golf
number
array-manipulation
matrix
Стьюи Гриффин
источник
источник
1 2 3 7 8 9 4 5 6
Является ли формат вывода таким гибким?Ответы:
05AB1E ,
138 байтСохранено 5 байтов благодаря Rod
Попробуйте онлайн!
объяснение
источник
Рубин , 53 байта
Объяснение:
Сначала поместите все числа в один массив, затем нарежьте массив, пропуская строку для каждой итерации. После первой (n / 2 + n% 2) итерации пропустить нечего, а затем вернуть все оставшиеся строки назад.
Попробуйте онлайн!
источник
Python 2 , 75 байт
Попробуйте онлайн!
источник
JavaScript, 68 байт
Редактировать 3 байта сохранено, переправлено @ user71546
Сначала попробуйте,следуя очевидному маршруту: считайте от 1 и заполните массив с обеих сторон, от внешнего к внутреннемуТестовое задание
источник
Haskell , 62 байта
Попробуйте онлайн! Вывод представляет собой список списков, например,
(0#) 3
выходов[[1,2,3],[7,8,9],[4,5,6]]
.источник
> <> ,
51 + 3 = 5447 байтПопробуйте онлайн!
Ожидается ввод в начало стека при запуске программы с использованием
-v
флага. Вывод состоит из не выровненных чисел, разделенных пробелами, а каждая строка отделяется одной новой строкой. Пример вывода дляN=5
:... сопровождаемый единственным переводом строки. Программа завершается с ошибкой (
something smells fishy...
), но это на STDERR, а не на STDOUT.Explaination:
Первая строка просто хранит копию
N
в реестре.Вторая строка строит смещение для каждой выходной строки, вычитая 1 из
N
, умножая это наN
, поворачивая его к основанию стека и затем обращая вспять весь стек. Когда число на вершине стека достигает 0, стек должен выглядеть следующим образом (пример используетN=5
):Третья строка отбрасывает дубликат
0
с вершины стека.Четвертая строка увеличивает вершину стека и выдает его копию. Затем берется мод
N
, и он используется для определения того, следует ли печатать пробел или символ новой строки, и следует ли отбрасывать верхнюю часть стека - если последний напечатанный номер равенx
, то этоx mod N == 0
означает, что достигнут конец этой выходной строки. , Выполнение завершается, когда1+
выполняется на пустом стеке, вызывая ошибку завершения.Предыдущая версия
Это явно проверило наличие пустого стека для завершения выполнения, и я также включил 3 байта для
-v
использования флага.Попробуйте онлайн!
источник
Perl 5 ,
-p
5251 байтПопробуйте онлайн!
источник
Java (OpenJDK 9) , 101 байт
Попробуйте онлайн!
кредиты
источник
j++
: 102 байтаn-i/2-1
наn+~i/2
101 байтn->{int i=n*n,x[]=new int[i],r;for(;i-->0;x[(r%2<1?r/2:n+~r/2)*n+i%n]=i+1)r=i/n;return x;}
JavaScript (ES6),
6968 байтНу, это превзошло все ожидания, прежде чем я смог опубликовать это, но здесь это все равно.Редактировать: 1 байт сохранен благодаря @KevinCruijssen.источник
n+n-i-1
может бытьn+n+~i
для -1 байта, так что вы снова столкнулись с другим ответом JavaScript. :)Желе , 10 байт
Попробуйте онлайн!
Как это устроено
источник
Stax , 10 байт
Запустите и отладьте его онлайн
Соответствующее представление ascii той же программы составляет 12 символов.
Вот как это работает.
источник
Желе ,
13...6 байтСпасибо Джонатану Аллану за -1 байт!
Попробуйте онлайн!
Используйте идентичный алгоритм для ответа 05AB1E.
источник
R
так какs
имеет неявный диапазон слева.R ,
705947 байтПопробуйте онлайн!
Спасибо Робину Райдеру за 4-байтовый гольф, который я затем сыграл в гольф.
Возвращает матрицу; конструирует
matrix
в последовательности, например[[1 2 3] [4 5 6] [7 8 9]]
, затем переупорядочивает строки.источник
rbind
.Python 2 ,
726863 байта-4 байта благодаря Нейлу
Попробуйте онлайн!
источник
x
переменную?Октава , 102 байта
Попробуйте онлайн!
источник
until
И я не знал оvec2mat
:( К сожалению, такой же длины:A=B=vec2mat(1:(n=input(''))*n,n)
:(while j++<n
тоже точно такой же длины ... Вы пробовали разные варианты или это просто совпадения?while
цикл одинаковой длины, я пробовал оба способа. Частоdo ... until
на один байт короче, чемwhile ... end
.C (gcc) , 110 байтов
Попробуйте онлайн!
Заполняет массив, чередуя 2 индекса для строк: один индекс начинается сверху, а второй - снизу. Индекс верхней строки начинается с 0 и увеличивается каждые 2 строки; индекс нижней строки начинается с n-1 и уменьшается каждые 2 строки.
Ungolfed:
источник
C ++ + Диапазон V3 , 159 байт
Жить на Wandbox
Не считая 2 новых строки после
using namespace range::view
; они просто существуют, чтобы отделить импорт от лямбды.Мягко интересный факт: это решение не выделяет кучу. Это решает проблему в
O(1)
космосе.Объяснение:
iota(1, n*n+1)
->[1 ... n*n]
chunk(n)
: всеn
элементы вместе, так[1 ... n] [n+1 ... 2*n] ...
r
r | stride(2)
взять любой другой элемент:[1 ... n] [2*n+1...] ...
r | reverse | drop(n % 2)
: reverse, затем отбросить[1 ... n]
термин if, еслиn
он нечетный (будет нечетное количество строк, и мы хотим напечатать первый термин только один раз). Кажется, что я должен быть в состоянии просто сделатьr | reverse | take
, но это почему-то не работает.stride(2)
снова возьмите все остальные элементы. На этот раз все наоборот.Более читаемый и тестируемый:
источник
int n
, мне нужныlog(n)
биты для хранения ввода? Но в любом случае это входные данные, и мы имеем дело сint
wheresizeof(int) == 4
(большинством систем), так что это постоянное число байтов, используемых независимо от входных данных.Желе , 11 байт
Попробуйте онлайн!
источник
CJam , 22 байта
Попробуйте онлайн!
источник
C (GCC)
8078Теперь я вижу, что это решение неверно
Попробуйте онлайн!
источник
C (gcc) , 36 + 8 + 61 = 105 байт
компилировать с
-Dp=printf("%d ",i),i++%n;);puts("")
-Dq=i,n)
Попробуйте онлайн!
источник