Для целого числа n ≥ 1 выведите двумерное представление † знака процента ширины n . Конструкция идет следующим образом:
- Создание п по п матрицу (или список списков), заполненную нулями.
- Вставьте те в верхнем левом и нижнем правом углах.
- Поместите их по диагонали от нижнего левого до правого верхнего.
Для ввода n = 4 эта конструкция будет выглядеть так:
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
Это код-гольф , поэтому выигрывает самая короткая программа в байтах.
† Я использую матрицу из 1 и 0, но также допустимо использовать строку любого непробельного символа и пробелов. Итак, приведенный выше пример может выглядеть так:
# #
#
#
# #
или
# #
#
#
# #
Контрольные примеры
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
Конечная нота
Добавление объяснения будет принята с благодарностью.
'1'+'0'*(n-2)
со вставленным пробеломОтветы:
Желе , 6 байт
Попробуйте онлайн!
Как это работает
источник
²Ḷ%’¬s
или+þ%’=2
²Ḷọ’s
так близко ...ḍ@
но это два байта.⁼þµ+1¦Ṫṁ³UG
... пока не появилось²
что-то решение Денниса .JavaScript (ES6), 52 байта
источник
V , 15 байтов
Попробуйте онлайн!
объяснение
источник
Python 2 ,
5857 байтПопробуйте онлайн!
источник
GNU APL,
1715 байтЭто один странный день ... GNU на самом деле победил Dyalog APL ... воу.
TIO не поддерживает GNU APL ...
Пояснение (входные данные
⍵
):источник
1=⍵∨
Python 2 , 46 байт
Попробуйте онлайн!
Выходы как
Python 2 , 48 байт
Попробуйте онлайн!
Выходы как
Python 3 , 48 байт
Попробуйте онлайн!
Совсем другой подход к подстановке строк в Python 3. Выходные данные, такие как:
источник
10L
10
?L
в конце всегда есть одинаковое количество символов для больших и маленьких символов.10
и10L
был другим.Желе , 9 байт
Попробуйте онлайн!
Как это работает
источник
APL (Dyalog) , 18 байт
Попробуйте онлайн!
Создание этой работы для ввода 1 добавило 6 байтов.
Глядя на тестовый пример 4, мы видим, что результат
Это в основном 1 0 0 повторяется по всей матрице. Другими словами, 1 0 0 формируется в матрице 4 на 4. Итак, в этом решении мы сначала генерируем этот вектор с использованием 1 и конечных 0,
1=⍳⍵-1
а затем формируем его, используя⍵ ⍵⍴
. Но это borks для ввода 1, поэтому нам нужно создать условное и получить 6 байтов ...источник
Haskell , 55 байтов
Сначала мой подход состоял в том, чтобы рекурсивно сгенерировать транспонированную матрицу тождеств, но затем исправление первой и последней строки потребовало некоторых уродливых / длинных различий в регистре. Поэтому я искал другой способ генерировать матрицу идентичности, как я нашел эту идею.
Попробуйте онлайн!
объяснение
генерирует эту матрицу (для
n=4
):Как вы можете видеть верхний левый элемент
2
(в общем), все диагональные элементы5
(в общемn+1
), а нижний правый элемент8
(в общем2*n
). Так что все, что нам нужно сделать, это проверить,x+y
является ли элемент[2,n+1,2*n]
.источник
R ,
5442 байта-12 байт благодаря Ярко Дуббелдаму
возвращает матрицу; читает со стандартного ввода. создает единичную матрицу
diag(n)
, переворачивает ее сверху вниз[,n:1]
, устанавливает верхний левый и нижний правый значения1
, а затем записывает в console (''
) с ширинойn
.Попробуйте онлайн!
источник
pryr::f
).R+pryr
другой, чтобы я считал его отдельным языком; Вы можете представить это! Тогда вы могли бы использовать идею из коровьего ответа кряка, которая, я думаю, была бы даже короче, чем эта, в этом контексте (1 строчка).function(n)
будет, вероятно, все еще корочеfunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 байт
Попробуйте это в MATL Online!
объяснение
Создать единичную матрицу (
Xy
), перевернуть вертикально (P
), записать ((
) значение 1 (l
) в первую и последнюю записи (5L
), которые находятся в верхнем левом и нижнем правом углу.источник
Dyalog APL,
121110 байтПопробуйте онлайн
-1 байт благодаря Исефано.
Как?
источник
,⍨⍴×,2↓⊢↑×
(10 байт). Я испытываю желание добавить: не используйте слишком многоC # (.NET Core) ,
121 9188 байт-30 байт, потому что старый способ был глуп.
-3 байта при перемещении по переменной инициализации
Попробуйте онлайн!
Циклы перебирают массив, чтобы заполнить 1. Возвращает массив из 1 и 0.
источник
b
какvar
сэкономить несколько байтов.05AB1E ,
14117 байтПопробуйте онлайн!
объяснение
источник
Древесный уголь ,
14127 байт-5 байт благодаря Нейлу !
Попробуйте онлайн!
источник
Nν◨/ν←↙ν‖O↘
, но потом я придумал↗N⸿/‖O↘
!⸿
делает. Сбрасывается ли в исходное положение?⸿
это похоже¶
на то, что он перемещается вниз по строке, но всегда идет к нулевому столбцу (как измереноJ
), а не к столбцу в начале строки, поэтому, напримерJ⁵¦⁵⸿
, то же самое, что иJ⁰¦⁶
.C ++, 144 байта
Он использует разницу в один байт между '#' и 35
источник
'#'
и35
?Mathematica, 72 байта
вход
выход
источник
Grid@s
с ,s
чтобы сохранить 5 байт.Python 2 ,
8662 байтаПопробуйте онлайн!
-24 байта: благодаря идее от Рода!
источник
PowerShell , 67 байт
Попробуйте онлайн!
Принимает ввод
$n
и циклы от0
до--$n
(то есть,$n
предварительно уменьшенный). На каждой итерации мы строим строку, за которой1
следует$n-1
0
s, а затем умножаем это на3
время (например,100010001000
для ввода5
). Тогда индекс в том , что на вращающейся основе , начиная с0
к0 + $n
. Эти символы вводятся-join
в строку, которая остается на конвейере. Вывод неявный.(Примечание: для обработки особого случая требуется дополнительно 9 байтов
n=1
. Ниже приведен 58-байтовый код, если мы гарантируемn>1
)источник
Dyalog APL v16, 23 байта
Попробуйте онлайн!
Объяснение:
источник
Луа, 117 байт
Попытайся
Код довольно прост. Он устанавливает m в первый аргумент, затем добавляет 0 к нему, чтобы преобразовать его в число, затем выполняет итерацию в обратном направлении для координаты Y, вперед через координату X и поставит #, если x == y или если это другие углы.
Эта программа никогда не использует ключевое слово «если».
источник
Октава, 37 байт
Попробуйте онлайн!
Создает разреженную матрицу, представляющую знак процента.
источник
Japt , 12 байт
Возвращает 2D массив / матрицу.
Попробуйте онлайн! используя
-Q
флаг, чтобы показать форматированный вывод.объяснение
Неявный:
U
= входное целоеSquare
U
(²
), создайте массив[0, U*U)
(o
) и отобразите каждый элемент по ...1
если это делится (v
) наU-1
(UÉ
), в противном случае0
.Установите элемент (
h
) с индексом 0 (T
) в1
.Разбейте массив на куски (
ò
) длиныU
.источник
hT1
, что0
технически уже делитсяU
на каждогоU
. Кроме этого, отличная работа :-)1
. Без этого он возвращается,[[0]]
потому что очевидно, что ноль не делится на ноль.PHP, 53 байта
Длина стороны матрицы составляет
$l
. Этот код имеет Уведомление PHP и даже Предупреждение PHP для деления на 0, когда$l=0
, но делает свою работу!источник
$l
). К сожалению, это не один из принятых нами способов получения информации . В связанном мета-посте вы найдете альтернативы, например, используя аргументы командной строки, как показано в ответе Рикдези .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
илиwhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(по 52 байта каждый)<?
в начале.Python 2 , 93 байта
Попробуйте онлайн!
источник
Рубин, 47 байтов
Возвращает массив массивов.
Код довольно прост.
n-1
массив с1
первым элементом, а остальные заполнены0
s (например,[1, 0, 0, 0]
)n
кусочкиn
элементовПопробуйте онлайн!
источник
J, 14 байт
Ungolfed:
Попробуйте онлайн!
источник
0=<:|i.@,~
?Python 3, 97 байт
объяснение
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Это понимание списка,
0+(j==n-i-1)
более короткий способ преобразованияj==n-i-1
в целое число (в отличие отint
функции), а затемm[-1]=m[0]
он короче, чем нижний правый 1, так как верхний и нижний ряды идентичны.источник
Далее,
273 (без комментариев)170 (гольф-иш)(273 версия для уточнения прокомментированной версии:)
(Обратите внимание, что, так как пробел является основным разделителем в Forth, удаление каждого возврата каретки не будет иметь значения. Отступ, конечно, делает.)
(Прокомментировал:)
(Примеры исполнения:)
(Заключительное примечание: работает на единицу меньше, чем битовая ширина интерпретатора Forth. Я запустил вышеупомянутое на gforth, AMD64. Древний 16-битный Forth имел бы только 15-битную ширину, и потребовал бы немного модификации.)
источник
C # (.NET Core) , 65 байт
Попробуйте онлайн!
Алгоритм значительно отличается от другого ответа C #, поэтому я решил опубликовать его отдельно, а не как улучшение. Воодушевленный ответом Jelly с самым высоким рейтингом, я делал что-то немного менее компактное раньше. Вывод представляет собой линейный массив, поэтому потребуется некоторая логика, чтобы обернуть его в 2D вне метода как есть. Альтернативная версия требует 6 дополнительных байтов для вывода в виде истинного 2D-массива:
У меня тоже есть интересная неконкурентная версия.
Это приводит к почти правильному выводу, приводя к
IEnumerable<bool>
true / false вместо 1/0, и это линейная, а не двумерная структура, и хотя она не нужна для этой точной строки кода,using System.Collections.Generic
необходимо сделать что-нибудь полезное с выход. Как я уже сказал, это очень близко к действительности, но не совсем.источник
?1:0
работах, и я считаю, что массив результата должно быть хорошо. Использование коллекций также не обязательно для этого кода.w*w
переменной и удалениеint
объявления из цикла вас чем-нибудь спасти?w*w
одной символьной переменной экономит 4 байта, перемещениеint i=0
вне цикла требует точки с запятой, которая стоит 1 байт, а затем добавление,s=w*w
к объявлению стоит 6 байтов, так что на самом деле это +3 байта.