Разрушающиеся матрицы


18

Связанный: Давайте создадим цифровую мозаику , Print / Output L-phabet . Песочница пост здесь

Учитывая 2 входа, C = columns and rows, S = starting pointвыведите матрицу следующим образом:

Input 4, 3

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

объяснение

Данный C = 4, S = 3

1) Создать C x Cматрицу, заполненную0

         4 columns
4     _____|____
     |          |
r  --0  0   0   0
o |  0  0   0   0
w |  0  0   0   0
s  --0  0   0   0

2) Заполните Sзначения в строке и столбце S, затем вычтите 1 из Sи повторяйте до S = 0. Этот случайS = 3

             Column 3 
S = 3           |
                v
        0   0   3   0
        0   0   3   0
Row 3-->3   3   3   0
        0   0   0   0


         Column 2
S = 2       |
            v
        0   2   3   0
Row 2-->2   2   3   0
        3   3   3   0
        0   0   0   0


     Column 1
S=1     |
        v
Row 1-->1   2   3   0
        2   2   3   0
        3   3   3   0
        0   0   0   0



Final Result

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

правила

  • Предполагать C >= S >= 0
  • Выходными данными могут быть матрица, список списков, массив (1-мерный или 2-мерный) и т. Д.
  • Вы можете принимать входные данные через любой формат ввода / вывода по умолчанию
  • Ваша программа, функция и т. Д. Могут быть 1-индексными или 0-индексированными. Пожалуйста, укажите, какой из них.

Примечание Объяснение 1-индексация


Критерии победы

Ответы:


6

Желе , 8 байт

»>⁴¬×»µþ

Попробуйте онлайн!

Как это устроено

Атом внешнего продукта желе ( þ)

Вы можете представить себе атом внешнего продукта Jelly þ, как быстрый (оператор), который при заданных целочисленных аргументах и Y (в данном случае X = Y = первый аргумент  ) создает следующую матрицу кортежей:XYX=Y=first argument 

[(1,1)(2,1)(3,1)(X,1)(1,2)(2,2)(3,2)(X,2)(1,Y)(2,Y)(3,Y)(Икс,Y)]

Это также применяет ссылку прямо перед этим ко всем парам, давайте назовем это , которая ведет себя как функция, которая принимает два аргумента, производя что-то вроде этого:е

[f(1,1)f(2,1)f(3,1)f(X,1)f(1,2)f(2,2)f(3,2)f(X,2)f(1,Y)f(2,Y)f(3,Y)f(X,Y)]

Какое это имеет отношение к поставленной задаче?

Это работает, замечая, что каждое значение в ожидаемом выводе является просто таблицей максимальных индексов, или если этот максимум превышает наш второй аргумент. Поэтому мы можем создать следующую ссылку для выполнения этого сопоставления:0

»>⁴¬×» – Dyadic (2-argument) link.
»      – Maximum of the X, Y coordinates.
 >⁴    – Check if this exceeds the second argument of the program.
   ¬   – Negate this boolean.
    ×» – And multiply by the maximum, computed again.

6

R , 47 41 байт

function(C,S,m=outer(1:C,1:C,pmax))m*!m>S

Попробуйте онлайн!

1-индексироваться. Генерирует выходные данные для S==C(без нулей), а затем обнуляет ячейки, которые имеют значение, >Sиспользуя умножение матриц (спасибо Giuseppe за 4 байта!).


Ухоженная! умножение даст вам хороший пробег: 43 байта
Джузеппе

@ Джузеппе, штат Техас! Мне удалось спасти еще двоих :)
JayCe


5

Haskell , 47 45 байт

-2 байта, изменяя формат вывода на одномерный список.

c&s|x<-[1..c]=[sum[j|j<=s]|j<-x>>=(<$>x).max]

Попробуйте онлайн!

объяснение

Термин x >>= (<$> x) . maxявляется гольфовой версией

concat [ max i <$> x | i <- x ]

который оценивает [1,2,3,4..c, 2,2,3,4..c, 3,3,3,4..c, ..., c,c,c,c..c]. Теперь нам нужно только заставить значения, как 0только они превысят то, sчто мы достигаем sum [ j | j <= s].



3

APL (Дьялог) , 12 байт

o×⎕≥o←∘.⌈⍨⍳⎕

Попробуйте онлайн!


Будет o×⎕≥o←∘.⌈⍨⍳ли разрешено что-то подобное , или вам придется присвоить это функции, чтобы это считалось?
Захари

@ Zacharý, я думаю, что нужно было бы поместить его в tradfn с аргументом или dfns
Уриэль

3

JavaScript (ES6), 61 байт

Принимает ввод в синтаксисе карри (c)(s), где s индексируется 1. Возвращает одномерный массив.

c=>s=>[...Array(c*c)].map((_,k)=>(k=k%c>k/c?k%c:k/c)<s?-~k:0)

Попробуйте онлайн!


3

Желе , 6 байт

⁴Ri»µþ

Полная программа *, принимающая целые числа Cи Sпечатающая представление Jelly списка списков целых чисел, как определено (с 1 индексированием).

Попробуйте онлайн! (форматирует результат диады в виде сетки чисел для удобства чтения)

Как?

⁴Ri»µþ - Main Link: C, S
     þ - outer product with:
    µ  -   the monadic function (i.e. f(x,y) for x in [1..C] for y in [1..C]):
   »   -     maximum (of x and y)
⁴      -     program's 4th argument = 2nd input = S
 R     -     range = [1,2,3,...S]
  i    -     first index of (the maximum) in (the range) or 0 if not found
       - as a full program: implicit print

* Причина, по которой это полная программа, заключается в использовании доступа к аргументам программы . В качестве диадической ссылки этот код будет опираться на то, как программа, которая его использует, называется.
Повторно используемая диадическая ссылка в 8 байтов (с символом S слева и C справа): многоразовая диадическая ссылка в 8 байтов (с символом C слева и S справа):RiⱮⱮ»þ`}
RiⱮⱮ⁹»þ¤


2

Java 10, 88 байт

C->S->{var r=new int[C][C];for(;S>0;)for(int s=S--;s-->0;)r[S][s]=r[s][S]=S+1;return r;}

Попробуйте онлайн.

Объяснение:

C->S->{                     // Method with two int parameters and int-matrix return-type
  var r=new int[C][C];      //  Result-matrix of size `C` by `C`
  for(;S>0;)                //  Loop as long as `S` is not 0 yet:
    for(int s=S--;s-->0;)   //   Inner loop `s` in the range (`S`, 0]
                            //   (and decrease `S` by 1 in the process with `S--`)
      r[S][s]=r[s][S]=S+1;  //    Set the values at both {`S`,`s`} and {`s`,`S`} to `S+1`
  return r;}                //  Return the result

2

PHP , 92 байта

Это «1-индексирование».

<?list(,$c,$s)=$argv;for(;$i++<$c;print"\n")for($j=0;$j++<$c;)echo$s<$i||$s<$j?0:max($i,$j);

Чтобы запустить это:

php -n <filename> <c> <s>

Пример:

php -n collapsing_matrice.php 8 6

Или попробуйте онлайн!


2

Stax , 10 байт

▓╜.→,cΘ○╤æ

Запустите и отладьте его

Как это устроено:

R(Xm]i*xit+J Full program, implicit input.
R            1-based range of S
 (           Right-pad with zeroes to length C
  X          Save to X register
   m         Map (same as here):
    ]          Wrap in list
     i*        repeat by iteration index
       xit     Remove first  elements from X register
          +    Append
           J   Stringify each element, and join by space


2

Excel VBA, 65 байт

Непосредственная оконная функция, которая принимает входные данные [A1:B1]и выводит их в диапазон [C1].Resize([A1],[A1]).

[C1].Resize([A1],[A1])=0:For s=-[B1]To-1:[C1].Resize(-s,-s)=-s:Next

Ввод, вывод

Вход находится в диапазоне [A1:B1]

I / O



2

MATLAB, 58 байт (спасибо анонимному пользователю)

function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:j,1:j)=j;end

Просто заполняя элементы матрицы соответствующим номером, запустив цикл. Возможно, можно быть умнее сarrayfun


Вам не нужно называть функцию, и вы можете использовать, zeros(c)который сохраняет несколько байтов. Также вы видели этот ответ Octave, я думаю, он будет работать и в Matlab?
მოიმო

@ OMᗺ Octave, вы не можете называть переменные внутри анонимных функций в Matlab. Кроме того, max()нужно принять аргументы одинаковой формы
ааааа говорит восстановить Монику

1
Предлагается анонимный пользователь function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:s,1:s)=j;end.
Джонатан Фрех

@JonathanFrech о, мой намного проще :-( просто нужно бытьo(1:j,1:j)=j
ааааа говорит восстановить Монику



1

Уголь , 19 байт

Eθ⪫IEEθ⌈⟦ιλ⟧∧‹λη⊕λ 

Попробуйте онлайн! Ссылка на подробную версию кода. 3 байта используются для преобразования выходных данных в десятичную и для удобного форматирования. Объяснение:

 θ                  Input `C`
E                   Map over implicit range
      θ             Input `C`
     E              Map over implicit range
          λ         Inner index
         ι          Outer index
       ⌈⟦  ⟧        Maximium
    E               Map over results
              λ     Current value
               η    Input `S`
             ‹      Less than
                 λ  Current value
                ⊕   Incremented
            ∧       Logical AND
   I                Cast to string
  ⪫                 Join with spaces
                    Implicitly print on separate lines



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.