Идеальные квадраты без границ


16

Дано n=m^2, вернуть список целых чисел, которые не ограничивают m x mсетку целых чисел 1 to n.

Примеры

n = 1 (m = 1)

Сетка:

[1]

Возвращение:

[]

n = 4 (м = 2)

Сетка:

[1,2]
[3,4]

Возвращение:

[]

n = 9 (м = 3)

Сетка:

[1,2,3]
[4,5,6]
[7,8,9]

Возвращение:

[5]

n = 16 (м = 4)

Сетка:

[ 1, 2, 3, 4]
[ 5, 6, 7, 8]
[ 9,10,11,12]
[13,14,15,16]

Возвращение:

[6,7,10,11]

Для более высоких значений m, этот ответ делает большую визуализацию.


Правила:

  • Вы можете принять либо mили n(где n = m*m).
    • Если брать в nвас могут не иметь неопределенное поведение , где существует не mдля n(EG 15).
    • n > 0, m > 0: Оба должны быть целочисленными значениями.
  • Выход может быть в виде 1D / 2D-массива, матрицы или пробела, разделенных
  • Вывод должен быть в порядке от наименьшего к наибольшему.
    • Если выводить в виде матрицы, это означает, что он должен быть таким, каким он был бы в сетке.
  • Это , побеждает наименьшее количество байтов.

Полная ошибка на моем конце, я прочитал это неправильно.
DevelopingDeveloper

3
@DevelopingDeveloper Эй, чувак, если бы у меня был никель каждый раз, когда я делал это, я бы мог купить пиво или два.
Волшебная Урна Осьминога

Если выводится в виде двумерного массива, можно ли включить в результат один пустой массив?
Лохматый

Ответы:




6

Октава , 26 байт

@(m)find((t=[0:m-2 0])'*t)

Код определяет анонимную функцию, которая вводит mи выводит (возможно, пустой) вектор столбца.

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

объяснение

@(m)                          % Define anonymous function of m
          t=[0:m-2 0]         % Build row vector [0 1 2 ... m-2 0] and assign it
                              % to variable t
         (           )'       % Complex-conjugate transpose into a column vector
                       *t     % Matrix-multiply that column vector times the row
                              % vector t. This gives an m×m matrix with zeros in
                              % the border and nonzeros in the other entries.
    find(                )    % Linear indices of nonzero entries. The result is
                              % in increasing order

5

Желе , 8 байт

’Ṗ×+€ṖḊ€

Монадическая ссылка, берущая mи возвращающая список списков (внутренние строки).

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

Как?

’Ṗ×+€ṖḊ€ - Link m                    e.g. 5
’        - decrement                      4
 Ṗ       - pop (implicit range of input)  [1,2,3]
  ×      - multiply by m                  [5,10,15]
     Ṗ   - pop m                          [1,2,3,4]
   +€    - add €ach                       [[6,7,8,9],[11,12,13,14],[16,17,18,19]]
      Ḋ€ - dequeue €ach                   [[7,8,9],[12,13,14],[17,18,19]]

Не хотелось заниматься питоном;)?
Волшебная Урна Осьминога



4

R , 44 43 32 байта

function(n)(x=n:(n^2-n))[x%%n>1]

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

Возвращает вектор.


Аккуратный формат вывода, это по умолчанию, как матрица выводится в R?
Волшебная Урна Осьминога

1
Да, это printфункция для matrix.
Джузеппе

1
Вы можете опустить второй mв matrix(1:m^2,m,m,T):matrix(1:m^2,m,,T)
JAD

@JAD да, конечно. Благодарю.
Джузеппе

Хорошо, что вы думаете об использовании scan ()? Вы можете сэкономить 2 байта. Попробуйте онлайн!
Роберт Хакен

3

Желе , 8 байт

sƽḊṖ$⁺€

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


Использование mодного может сделать ²s⁸ḊṖ$⁺€тоже самое. (Я также опубликовал другой mальтернативный метод.)
Джонатан Аллан

@JonathanAllan Уже обнаружил, что, но без сохранения байта там, вы не можете удалить :(
Эрик Outgolfer

3

Протон , 28 байт

k=>filter(u=>1<u%k,k..k*~-k)

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

принимает м качестве ввода.

Как?

Фильтрует целые числа в [k, k 2 -k), которые при делении на k дают остаток больше 1 . Это гарантирует, что оба конца обрезаны, потому что первый дает 0, а последний - 1 . Также гарантируется возвращение более высокого значения для любого допустимого целого числа, потому что они являются последовательными.







2

MATL , 8 байт

:G\1>&*f

Вход есть m. Вывод чисел в порядке возрастания.

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

объяснение

Рассмотрим ввод 4в качестве примера.

:     % Implicit input: m. Push range [1 2 ... m-1 m]
      % STACK: [1 2 3 4]
G\    % Modulo m, element-wise
      % STACK: [1 2 3 0]
1>    % Greater than 1, element-wise.
      % STACK: [0 1 1 0]
&*    % Matrix of pair-wise products
      % STACK: [0 0 0 0;
                0 1 1 0;
                0 1 1 0;
                0 0 0 0]
f     % Column vector of linear indices of nonzeros. Implicit display
      % STACK: [ 6;
                 7;
                10;
                11]


2

Пакетная, 85 байт

@for /l %%i in (3,1,%1)do @for /l %%j in (3,1,%1)do @cmd/cset/a(%%i-2)*%1+%%j-1&echo(

Я не могу легко 2выполнить цикл от до, m-1поэтому я выполняю цикл от 3до mи корректирую вычисления.




2

Japt, 12 байт

Я потратил так много времени на игру в гольф на добычу элементов, что у меня не хватило времени, чтобы заняться созданием массива. Я также только сейчас замечаю, что nвместо этого мы можем использовать в качестве входных данных, чтобы я мог что-то там сохранить. Чтобы вернуться ...

òUnU²)òU m¤c

Попытайся


объяснение

                 :Implicit input of integer U=m     :e.g., 4
   U²            :U squared                         :16
 Un              :Minus U                           :12
ò                :Range [U,U**2-U]                  :[4,5,6,7,8,9,10,11,12]
      òU         :Partitions of length U            :[[4,5,6,7],[8,9,10,11],[12]]
         m       :Map
          ¤      :  Remove first 2 elements         :[[6,7],[10,11],[]]
           c     :Flatten                           :[6,7,10,11]

2

J , 23 19 байт

-4 байта благодаря FrownyFrog!

1 1}:@}.-@%:}:\1+i.

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

Мое оригинальное решение:

J , 23 байта

[:|:@}:@}.^:2-@%:]\1+i.

Принимает в качестве ввода, возвращает матрицу

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

1+i. - генерирует список 1..n

-@%: - находит квадратный корень из n и отрицает его (м)

]\ - делает таблицу (матрицу) mxm из списка

^:2 - сделайте следующее дважды:

|:@}:@}. - отбросить первый ряд, затем отбросить последний ряд, затем транспонировать

[: - крышка вилка

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


1}:@}.-@%:}.@}:\1+i.
FrownyFrog

1
Нет,1 1}:@}.-@%:}:\1+i.
FrownyFrog

@FrownyFrog - Круто, спасибо! Я не знал о списке левых аргументов}.
Гален Иванов

2

Шелуха , 9 байт

‼ȯTthS↑CN

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

объяснение

‼ȯTthS↑CN  Implicit input, say m=4.
       CN  Cut the natural numbers by m: [[1,2,3,4],[5,6,7,8],[9,10,11,12],..
     S↑    Take first m lists: [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
‼ȯ         Do this twice:
    h       Remove last row,
   t        remove first row,
  T         transpose.
           Result is [[6,7],[10,11]]; print it implicitly.

2

Japt , 14 байт

²õ òU ÅkJ ®ÅkJ

Принимает в mкачестве ввода

объяснение

 ²õ òU ÅkJ ®ÅkJ                                      
                // U = input                         | 3
U²              // U squared                         | 9
  õ             // Range [1...U²]                    | [1,2,3,4,5,6,7,8,9]
    òU          // Cut into slices of U              | [[1,2,3],[4,5,6],[7,8,9]]
       Å        // Remove the first item             | [[4,5,6],[7,8,9]]
        kJ      // Remove the last item              | [[4,5,6]]
           ®    // Map:                              |
            ÅkJ //   Remove the first and last items | 5     

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


Решение, которое занимает nтакже 14 байтов:

õ òU¬ ÅkJ ®ÅkJ

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


2

TI-BASIC, 44 43 байта (токенизированный)

DC 4D 3F CE 4D 6D 32 3F CF 3F DE 2A 08 09 3F D0 3F 4D 71 32 3F 23 4D 70 32 70 58 70 32 B1 58 83 72 11 2B 58 2B 30 2B 72 0D 71 31

Читаемая версия:

:Input M
:If M≤2
:Then
:Disp "{}
:Else
:M-2
:seq(M+2+X+2int(X/Ans),X,0,Ans²-1

К сожалению, было необходимо печатать пустые списки вручную, поскольку TI-BASIC обычно не позволяет этого. Если бы mбыло задано больше двух, код мог бы быть уменьшен до 29 байтов .





1

Пыть , 13 байт

ĐĐ⁻⁻ř*⇹⁻⁻ř⁺ɐ+

Порт Джонатана Аллана желе ответ

Объяснение:

                    Implicit input (takes m)
ĐĐ                  Triplicate the input (push it on the stack two more times)
  ⁻⁻                Decrement top of stack twice
    ř               Push [1,2,...,m-2]
     *              Multiplies by m
      ⇹             Swaps top two items on stack
       ⁻⁻           Decrement (m-2 is now on top)
         ř          Push [1,2,...,m-2]
          ⁺         Increment each element by 1
           ɐ+       Add [2,3,...,m-1] to each element of [m,2m,...,m(m-2)]
                    Implicit print

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


1

Python, 111 байт

def f(s):
 r=[]
 for i in[i[1:-1]for i in[[(j*s)+i+1 for i in range(s)]for j in range(s)][1:-1]]:r+=i
 return r

1

Java 8 , 241 183 170 162 160 132 122 байта

j->{if(j<3)return new int[1];int e[]=new int[j*j-4*j+4],x=0,i=0;for(;++i<=j*j;)if(!(i<j|i>j*j-j|i%j<2))e[x++]=i;return e;}

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

Java делает это очень сложным (много байтов), когда вам нужно создать массив несколько «неизвестного» размера.

  • -8 байт благодаря волшебной урне осьминога
  • -28 байт благодаря мистеру Xcoder
  • -10 байт благодаря Кевину Круйссену

1
Кроме того, да, Java является грубым для кода-гольфа. Но ты, очевидно, хорош в этом. Чувак, тебе нужно проверить этот язык, который называется Groovyв основном стенография Java.
Волшебная Урна Осьминога

2
132 байта , удалив дополнительное условие из оператора if и различные хитрости.
г-н Xcoder

1
122 байт продолжающиеся @ Mr.Xcoder версии 132-байтовый «ы выше , путем комбинирования int, изменяя ||к |, и удаление скобок из одной строки , если тела.
Кевин Круйссен

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