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

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

Haskell , 31 байт

f m=[i|i<-[m..m*m-m],mod i m>1]

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

Математическая версия:

f(m) = {i : i  (m, m² - m), i mod m < 1}

totallyhuman
источник
Подождите, это не действительно, f(5)должно быть7,8,9,12,13,14,17,18,19
Волшебная Урна Осьминога
Подожди, ой, я тупица.
полностью человек
4

R , 44 43 32 байта

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

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

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

Giuseppe
источник
Аккуратный формат вывода, это по умолчанию, как матрица выводится в 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ƽḊṖ$⁺€

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

Эрик Outgolfer
источник
Использование mодного может сделать ²s⁸ḊṖ$⁺€тоже самое. (Я также опубликовал другой mальтернативный метод.)
Джонатан Аллан
@JonathanAllan Уже обнаружил, что, но без сохранения байта там, вы не можете удалить :(
Эрик Outgolfer
3

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

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

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

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

Как?

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

Мистер Xcoder
источник
2

05AB1E , 9 байт

LItä¦¨ε¦¨

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

Мистер Xcoder
источник
LItä¦¨ε¦¨в порядке, вывод может быть 2D-массив.
Волшебная Урна Осьминога
О, я должен был прочитать спецификацию лучше. Спасибо за хедз-ап!
мистер Xcoder
2

Python 2 , 44 байта

lambda t:[k for k in range(t,~-t*t)if k%t>1]

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

Я обещаю, что это мой последний ответ (на этот вызов) сегодня. Принимает м в качестве ввода.

Мистер Xcoder
источник
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.
Zgarb
источник
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 байтов .

fakedad
источник
1

Красный , 63 62 байта

f: func[n][repeat i(n - 2 * n)[if(a: n + i)// n > 1[print a]]]

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

Это красный порт для решения на Haskell / Mr. Xcoder Python 2, созданного полностью человеком

Гален Иванов
источник
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

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

mudkip201
источник
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
sonrad10
источник
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 байт благодаря Кевину Круйссену
DevelopingDeveloper
источник
1
Кроме того, да, Java является грубым для кода-гольфа. Но ты, очевидно, хорош в этом. Чувак, тебе нужно проверить этот язык, который называется Groovyв основном стенография Java.
Волшебная Урна Осьминога
2
132 байта , удалив дополнительное условие из оператора if и различные хитрости.
г-н Xcoder
1
122 байт продолжающиеся @ Mr.Xcoder версии 132-байтовый «ы выше , путем комбинирования int, изменяя ||к |, и удаление скобок из одной строки , если тела.
Кевин Круйссен
1
101 байт
floorcat