Для заданного числа n
выведите упорядоченный список индексов на основе 1, попадающих на одну из диагоналей n*n
квадратной матрицы.
Пример:
Для ввода 3
:
Квадрат должен быть:
1 2 3
4 5 6
7 8 9
Теперь мы выбираем все индексы, представленные \
, /
или X
( #
или недиагональные позиции отклоняются)
\ # /
# X #
/ # \
Выход должен быть:
[1,3,5,7,9]
Тестовые случаи:
1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]
Там не будет принятого ответа. Я хочу знать самый короткий код для каждого языка.
Ответы:
Октава , 28 байт
Анонимная функция, которая вводит число и выводит вектор-столбец чисел.
Попробуйте онлайн!
источник
JavaScript (ES6), 48 байт
Выводит разделенный дефисом список целых чисел в виде строки.
Отформатировано и прокомментировано
Контрольные примеры
Показать фрагмент кода
источник
&
для сохранения байта?4%3
и не4%5
имеют 1-битного общего, но оба ненулевые.n=5
и заметил, что это не сработает.k%~-n&&k%-~n
должно сработать. хороший трюк с разделителем!R ,
38353438 байт3 байта сохранены, когда я вспомнил о существовании
which
функции ..., 1 байт сохранен благодаря @Rift+4 байта для аргумента
ec=T
при вызове полной программыsource()
Попробуйте онлайн!
Объяснение:
источник
d=diag(n<-scan());which(d|d[n:1,])
source
) это ничего не печатает. Вы должны позвонитьcat
. Смотрите этот пост на мета .Желе , 8 байт
Попробуйте онлайн!
Использует алгоритм Луиса Мендо в своем ответе на MATL.
источник
ŒD
.ŒD
делает что-то совершенно отличное от X определенного размера.Октава ,
4137 байтЭто работает в MATLAB тоже кстати. Никакого подлого октавского специфического функционала :)
Попробуйте онлайн!
Объяснение:
Вместо того чтобы создать квадратную матрицу и найти две диагонали, я решил вместо этого вычислить диагонали напрямую. Это было на 17 байт короче! знак равно
Вот как это выглядит без
unique
:Да, наверное, мне следовало изменить порядок диагоналей, чтобы сделать его более удобным для человека.
источник
MATL , 6 байтов
Попробуйте онлайн!
объяснение
Тот же подход, что и в моем ответе от Octave.
Рассмотрим ввод
3
в качестве примера.Линейное индексирование является главным по столбцу , основано на 1. Для получения дополнительной информации см. Фрагмент длины 12 здесь .
источник
t
является дубликатом, а не транспонировать. Также я добавил отработанный примерPython 2 ,
5453 байтаПопробуйте онлайн!
источник
Октава,
6854 байтаСпасибо @Stewie Griffin за сохранение 14 байтов!
Попробуйте онлайн!
MATLAB, 68 байт
Объяснение:
источник
Mathematica, 42 байта
Попробуйте онлайн!
@KellyLowder играл в гольф до ...
Mathematica, 37 байт
и @alephalpha выбросил стол!
Mathematica, 34 байта
источник
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
на 5 байт корочеUnion@@Range[{1,#},#^2,{#+1,#-1}]&
Протон , 41 байт
Попробуйте онлайн!
источник
MATL , 14 байтов
Попробуйте онлайн!
источник
C (gcc) ,
6558 байт-7 байт благодаря Титу!
Попробуйте онлайн!
источник
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 байт)C # (.NET Core) ,
9783 байтаПопробуйте онлайн!
Изменение здесь основано на сдвиге между числами, чтобы найти. Две смены, начинающиеся с 0,
n-1
иn+1
, поэтому, еслиn=5
бы числа дляn-1
были бы0,4,8,12,16,20
и дляn+1
были бы0,6,12,18,24
. Объединяя их и давая 1-индексацию (вместо 0-индексации), дает1,5,7,9,13,17,19,21,25
. Смещение отn
достигается с помощью побитового отрицания (операция побитового дополнения), где~-n==n-1
и-~n==n+1
.Старая версия
Попробуйте онлайн!
Этот подход использует индексы столбцов и строк для определения того, находятся ли числа на диагонали.
i/n
дает индекс строки иi%n
дает индекс столбца.Возврат только числового массива
Если считается, что построение только массива чисел учитывается в байтовой стоимости, то можно сделать следующее, основываясь на предложении Dennis.Verweij (
using System.Linq;
добавляет дополнительные 18 байтов):C # (.NET Core) , 66 + 18 = 84 байта
Попробуйте онлайн!
источник
&
. Дополнительное&
есть только для того, чтобы прервать сравнение, если первый вход ложный MSDNusing System;
? (Я предполагаю, что завернуть это вnamespace System.Linq
недопустимо?)Javascript,
7363 байтастарая версия
Сохранено 10 байтов благодаря @Shaggy
Первый раз в гольф! Надеюсь, я не слишком испортил это.
Показать фрагмент кода
источник
filter
функции следующее:!(--x%(n+1)&&x%(n-1))
и создав свой массив следующим образом:[...Array(n*n+1).keys()]
[1...n*n]
диапазона с помощьюArray(n*n).fill().map((x,i)=>i+1)
» -[...Array(n*n)].map((_,y)=>y+1)
это более короткий способ сделать это для дальнейшего использования.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pyth ,
2018 байтов( Вот начальная версия .)
Тестирование.
Pyth , 18 байт
Тестирование.
источник
Perl 5 , 56 + 1 (-n) = 57 байт
Попробуйте онлайн!
источник
perl -e
. Командная строка для этого примера будетperl -ne
. Это разница +1.Java (OpenJDK 8) , 71 байт
Попробуйте онлайн!
Порт Скоттинета ответ .
источник
Japt , 16 байт
Кажется, не может быть лучше, чем это, но я уверен, что это возможно. Пришлось пожертвовать 2 байта за ненужное требование, чтобы мы использовали 1-индексирование.
Проверь это
источник
Октава, 32 байта
Попробуйте онлайн!
источник
PHP,
5654 + 1 байт+1 байт за
-R
флагпечатает числа, начинающиеся с тире. Выполнить как трубу с
-nR
или попробуйте онлайн .требует PHP 5.6 или более поздней версии для
**
оператора.Добавьте один байт для старого PHP: Замените
;$z**.5<$n=$argn
на$z=$argn;$z<$n*$n
.источник
Рубин, 45 байт
Работает внутри с нулями. проверяет, по
i
модулюn+1
илиn-1
0, если это так, печатаетi+1
.источник