Вызов
Напишите программу или функцию, которая возвращает или печатает квадратную случайно-симметричную матрицу.
вход
N : размер матрицы, т. Е.6 x 6
Выход
Матрица. Вы можете либо распечатать его, вернуть его в виде строки (с символами новой строки) или в виде списка / массива списков / массивов.
правила
Вам нужно использовать как минимум
N
разные символы, гдеN
размер квадратной матрицы (входной). Так как мы используем только буквы [a, z] [A, Z] и цифры [0, 9] (и только 1 цифру в то время), вы можете предположить, чтоN < 27
иN > 2
, потому что уN <= 2
вас не может быть обеих букв и цифры. Наконец, что не менее важно, каждая буква / цифра должна иметь ненулевую вероятность появления (равномерное распределение не является необходимостью). Однако результат должен содержать как минимумN
другие буквы / цифры.Матрица должна быть как горизонтально, так и вертикально симметричной.
Ровно 2 строки и 2 столбца должны содержать строго однозначное число (его позиция также должна быть случайной). Остальные строки / столбцы будут содержать только буквы. Рассматривайте буквы как [a, z] и [A, Z] и, конечно, однозначные числа как [0, 9].
Просто быть проще, то можно предположить , что в случае букв не имеет значения, до тех пор , как случаи симметричны , что означает:
a=A, b=B, etc
.Каждый возможный выход должен иметь ненулевую вероятность появления. Случайное распределение не должно быть равномерным.
пример
Вход : 8
Выход :
c r p s s p r c
r k o z z o k r
u t 2 a a 2 t u
y n q z z q n y
y n q z z q n y
u t 2 a a 2 t u
r k o z z o k r
c r p s s p r c
Ответы:
Древесный уголь , 30 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Если
n
всегда чётно, то для 23 байтов:Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите .N
Создать поnN2 массива случайных строчных букв. Это печатает неявно как квадрат.N2
Прыжок в случайную позицию на площади.
Распечатать случайную цифру.
Отразите по горизонтали и вертикали, чтобы завершить матрицу.
источник
R ,
124118 байтПопробуйте онлайн!
В R вещи, которые выглядят как операторы, являются просто функциями, которые получают специальную обработку от парсера.
Если вы переопределяете оператор (например
-
), чтобы он был какой-то другой функцией, он оставляет особый режим в парсере. Поскольку-
это и префикс, и инфикс, и мне нужно вызыватьsample
функцию с одним и двумя аргументами, я могу использоватьчтобы получить то, что я хочу.
Таким образом, код
-letters
переводится вsample(letters)
, что случайным образом перемешиваетletters
встроенный. Ноj-1
переводитсяsample(j,1)
, который случайным образом выбирает1
элемент из вектора1:j
.(Такое поведение
sample
функции в зависимости от количества параметров и того, что является первым параметром, является огромной болью в прикладном коде, поэтому я рад найти здесь большое применение его извращенной природы!)В противном случае код просто делает верхний левый квадрант требуемого результата, заменяет случайный элемент (
j-1
,j-1
бит) со случайной цифрой (0:9-1
бит), и складывает его на требуемую симметрию.i
Иj
необходимо , чтобы иметь дело с четными и нечетными случаями.источник
Python3, 287 байт
Моя первая попытка игры в гольф здесь; Я уверен, что кто-то может сделать намного лучше:
Попробуйте онлайн!
Благодаря HyperNeurtrino, Ourous и Heiteria это число сократилось до 193 байт (см. Комментарии). Однако TFeld правильно указал, что множественные вызовы
sample
не гарантируют, по крайней мере,N
разные символы.Имея это в виду, попробуйте эту новую версию, которая должна гарантировать, по крайней мере,
N
разные символы за запуск.Python3,
265260 байт, как минимумN
разные символыПопробуйте онлайн!
источник
a[:-1][::-1]
в основном эквивалентноa[:-2::-1]
, и вы можете импортироватьrandom
какr
вместоrn
, и вы можете переместитьfor
цикл во встроенное выражение. Попробуйте онлайн!math
импорт, используя-(-a // 2)
вместоmath.ceil(a / 2)
которого в основном отрицательный пол-деление отрицательного (фактически потолок). tio.run/##XY7LagMxDEX3/…sample()
s не гарантируют, что вы получите как минимумN
разные символы. Мне удалось получить[['g', 'x', 'x', 'g'], [7, 'x', 'x', 7], [7, 'x', 'x', 7], ['g', 'x', 'x', 'g']]
дляN=4
, который имеет только 3 различных символовAPL (Dyalog Classic) ,
45444340 байтовспасибо @ Adám за -1 байт
Попробуйте онлайн!
использует
⌈
(max) матрицы с ее отражениями, чтобы сделать ее симметричной, поэтому она смещена в сторону последней части алфавитацифра выбирается равномерно из 0 ... 25 mod 10, поэтому она имеет небольшой уклон к более низким значениям
источник
⌊2⍴⍵÷2)?⍵ ⍵⍴26]}
→⌊⍺⍵÷2)?⍺⍵⍴26]}⍨
⌊⍺⍵÷2
→⍺⍵
.Japt , 31 байт (фиксированная цифра)
Попробуйте онлайн!
Japt , 41 байт (позиция случайной цифры)
Попробуйте онлайн!
объяснение
источник
Python 2 , 259 байт
Попробуйте онлайн!
источник
05AB1E ,
294038 байт+11 байт зафиксировать цифру будучи в случайном положении , сохраняя правило 3 в виду , для нечетных входов ..
-2 байт благодаря @MagicOctopusUrn , изменяя
îï
кò
и изменяя положение из»
.Попробуйте онлайн или проверьте еще несколько тестов .
Старый (
2927 байт ) ответ, где цифры располагаются где всегда по углам:Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
»
ï
было сделано неявно. К сожалению, это не относится к 40-байтовой версии, потому что∊
будет вставлено вместо замены.2
, то вход гарантированно будет3 <= N <= 26
.n
буквы алфавита, а неn
случайные буквы алфавита. И сначала присоединение по символам новой строки, и только потом создание зеркал сохраняет и мой байт. Спасибо за -2 байта! :) PS: Один байт может быть сохранен в вашем 28-байтовом, удалив трейлинг}
. :)C (gcc) ,
198197196 байтовСохранено 2 байта, благодаря функциюcatcat.
Попробуйте онлайн!
Объяснение:
источник
JavaScript (ES6),
213209206 байтПопробуйте онлайн!
комментарии
источник
Чистый ,
346312 байтзавтра будет гольф
Попробуйте онлайн!
источник
Python 3 , 197 байт
Как упомянуто @Emigna, не работает для нечетных значений
N
(я не правильно понял вопрос)Попробуйте онлайн!
Я думаю, что звонки на
randint()
+sample()
+shuffle()
слишком много, и избавиться от на месте перетасовки было бы здорово :)Я уверен, что эта часть (которая выбирает буквы и цифры) могла бы быть в гольфе немного больше.
источник
N
.N
что всегда будет четным, поскольку я не понимаю, как матрица может быть симметричной, если она странная!Python 2 ,
275266 байтПопробуйте онлайн!
Возвращает массив в виде списка списков символов. Чтобы удовлетворить Правило 1, мы создали пул символов:
Следующий хитрый бит - это правило 3: должно быть ровно 2 столбца и строки с цифрой; для
n
нечетных это означает , что выбранная цифра может отсутствовать в среднем столбце или средней строке. Поскольку мы создаем массив с использованием дважды отраженного квадратного подмассиваs
, это достигается с помощью:тасуйте хотя бы один раз; и затем, если
n
это нечетно, продолжайте цикл, если цифра находится в последнем столбце или последней строкеs
.источник
Pyth , 48 байтов
Попробуйте это онлайн здесь .
Программа состоит из 3 частей - определение функции палиндромизации, выбор числового местоположения и основная функция.
Использование нескольких перемешанных алфавитов должно гарантировать, что количество уникальных символов всегда больше, чем введенное число.
источник
Python 2 / Python 3, 227 байт
немного разгадать
Более старые, почти правильные версии ниже:
Python2, Python3, 161 байт
Кажется, N отличающихся элементов гарантировано только почти .
Python 2 / Python 3, 170 байт
Кажется, я забыл правило 3. Также как-то проскользнуло [: n * n].
источник
n = 3
вас никогда не будет вывода, содержащего а'z'
, значит, не каждый вывод возможен).