Является ли матрица центросимметричной ... и код тоже?

37

Defintion

Центросимметрична матрица представляет собой квадратную матрицу , которая симметрична относительно его центра. Точнее, матрица размером является центросимметричной, если для любого выполнено следующее соотношение: AN×Nя,J([1,N]Z)

Aя,Jзнак равноAN+1-я,N+1-J

Примеры таких матриц

Вот иллюстрация симметрии таких матриц (заимствовано из вышеупомянутой статьи в Википедии):

Центросимметричная матрица 5 на 5 проиллюстрирована очень красиво

Центросимметричная матрица четной стороны ( ):4×4

(1234567887654321)

И нечетной длины ( 3×3 ) один:

(123565321)

Задача и характеристики

Если задана квадратная матрица размером не менее , выведите одно из двух различных и согласованных значений, решая, является ли матрица центросимметричной или нет. Вы можете предположить, что матрица будет состоять исключительно из натуральных чисел.2

Однако ваш код также должен быть центросимметричным. То есть это должна быть программа / функция (или ее эквиваленты), состоящая из строк, каждая из которых содержит байтов в кодировке вашего языка, и должна соответствовать определению, данному выше, но с байтами вместо положительных целых чисел. Ваша оценка будет равна значению , а меньшее будет лучше.нNN нNN

Вы можете принимать и выводить данные любым стандартным способом и в любом приемлемом формате, при этом отмечая, что эти лазейки по умолчанию запрещены. Вы можете (по желанию) также принять размер качестве входных данных (если только вы не берете входные данные в качестве одномерного списка, в этом случае вы можете использовать только качестве дополнительного ввода).n 2NN2

Контрольные примеры

Truthy:

[[1, 2], [2, 1]]
[[1, 2, 3], [5, 6, 5], [3, 2, 1]]
[[10, 5, 30], [2, 6, 2], [30, 5, 10]]
[[100, 100, 100], [100, 50, 100], [100, 100, 100]]
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [3, 2, 10, 2, 3], [9, 8, 7, 6, 5], [7, 6, 5, 4, 3]]

Falsy:

[[1, 2], [1, 2]]
[[1, 2, 10], [5, 6, 5], [11, 2, 1]]
[[14, 5, 32], [2, 6, 2], [30, 5, 16]]
[[19, 19, 19], [40, 50, 4], [19, 19, 19]]
[[1, 2, 20, 4], [7, 6, 7, 8], [8, 7, 6, 6], [3, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [4, 5, 10, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]]
Мистер Xcoder
источник
1
Хм, это все еще выглядит довольно трудно для неигровых языков, потому что оно разбивает скобки и скобки без комментариев. Наивный подход заключался бы в том, чтобы завершить каждую строку символом комментария (например, Python #), чтобы нижняя половина кода была бы комментарием.
JungHwan Мин
@JungHwanMin В этом конкретном случае Python не #будет работать, потому что комментарии, предшествующие этому, #являются только встроенными: P
Mr. Xcoder
1
Возможный дубликат я палиндром. Ты?
Павел
6
Думаю, я просто позволю себе не согласиться, так как ограничения на источник сильно меняют ситуацию и критерий выигрыша другой. На мой взгляд, этих различий достаточно. Кроме того, есть другие методы (во многих языках более короткие - например, Mathematica), которые можно использовать вместо проверки сглаживания + палиндрома.
Мистер Кскодер
1
@WW Короче говоря, чтобы упростить задачу и избежать нежелательных крайних случаев. Кроме того, для меня это более интуитивно понятно.
г-н Xcoder

Ответы:

20

JavaScript (ES6), размер 12 11 9

Все версии возвращают false для центросимметричного или true для нецентросимметричного.


1-мерный массив + длина, размер 9 (89 байт)

Принимает ввод в синтаксисе карри (length)(array), где массив является 1-мерным.

w=>a=> //
a.some //
(v=>v- //
a[--w])//
/////////
//)]w--[a
// -v>=v(
// emos.a
// >=a>=w

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


Матрица + ширина, размер 11 (131 байт)

Принимает ввод в синтаксисе карри (width)(matrix).

/**/w=>a=>a
.some(r=>r.
some(v=>v-a
[y][w-++x],
x=!y--),y=w
);'*/'/*';)
w=y,)--y!=x
,]x++-w[]y[
a-v>=v(emos
.r>=r(emos.
a>=a>=w/**/

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

полезная нагрузка

w => a => a.some(r => r.some(v => v - a[y][w - ++x], x = !y--), y = w)

Контейнер

/**/CODE;'*/'/*';EDOC/**/

Только матрица, размер 12 (155 байт)

Это мое оригинальное решение, которое вычисляет ширину матрицы самостоятельно.

/**/a=>a[w=a
.length-1,s=
'some']((r,y
)=>r[s]((v,x
)=>v-a[w-y][
w-x]))////*/
/*////))]x-w
[]y-w[a-v>=)
x,v((]s[r>=)
y,r((]'emos'
=s,1-htgnel.
a=w[a>=a/**/

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

Как?

Нам нужно несколько критических токенов, которые нельзя разделить:

  • some
  • length
  • )=>

Перевод строки может быть вставлен почти где-либо еще.

Развернутый код полезной нагрузки читается как:

a => a[w = a.length - 1, s = 'some']((r, y) => r[s]((v, x) => v - a[w - y][w - x]))

и завернут в следующую структуру:

/**/CODE////*/

который после изменения становится действительным комментарием блока:

/*////EDOC/**/
Arnauld
источник
15

Befunge-93 , размер 24

   &:00p110p920p::*:v   
vp01:+1g01-1pg02g01&_v#<
>00g`#v_>:           1$^
v2p011<  v:g00p029p01< @
>0g1+20p^>*:#v_1# .#<@ .
v+1g00gg02g01<$ >1+10pv0
>:10g-\88++20g -g-     |
vg02p011_v#`g00g01-1  <1
>1+20p   >:   ^ ^      <
                        
                        
                        
                        
                        
                        
<      ^ ^   :>   p02+1>
1<  1-10g00g`#v_110p20gv
|     -g- g02++88\-g01:>
0vp01+1> $<10g20gg00g1+v
. @<#. #1_v#:*>^p02+1g0>
@ <10p920p00g:v  <110p2v
^$1           :>_v#`g00>
<#v_&10g20gp1-10g1+:10pv
   v:*::p029p011p00:&   

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

Входные данные: n за ним следуют элементы массива, разделенные пробелами. ПРИМЕЧАНИЕ: вам может понадобиться использовать другой переводчик, если у вас достаточно большой ввод.

Я уверен, что есть лучший способ сделать это, я просто хотел попробовать это в Befunge. Фактическая часть кода - верхняя половина.

Как?

Код состоит из двух основных разделов: инициализация и проверка .

Инициализация:

   &:00p110p920p::*:v   
vp01:+1g01-1pg02g01&_v#<
>00g`#v_>:           1$^

Этот раздел кода записывает входную матрицу прямо под кодом в виде символов ASCII. И этот, и следующий раздел используют три ячейки в левом верхнем углу кода в качестве данных. Они хранятся как n, i, j.

Проверка:

                     v 
                     1
v2p011<  v:g00p029p01< @
>0g1+20p^>*:#v_1# .#<@ .
v+1g00gg02g01<$ >1+10pv0
>:10g-\88++20g -g-     |
vg02p011_v#`g00g01-1  <1
>1+20p   >:   ^ ^      <

я,JAя,Jзнак равноAN+1-я,N+1-JJ8

я'знак равно(N+1)-я

J'знак равноN+1-(J-8)+8знак равно(N+1)+(8+8)-J

Другие части кода являются непрочитанным мусором, чтобы сделать его центросимметричным.

Zachary
источник
15

Nзнак равно8

Без комментариев!

Вводит в виде 1-D списка

s a b=  
    a/=b
f =s<*> 
 reverse
esrever 
 >*<s= f
b=/a     
  =b a s

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

Nзнак равно10

Вводит в виде двумерной матрицы

r =reverse
s a b=a/=b
f   =s<*>r
c  =concat
g =  f<$>c
c>$<f  = g
tacnoc=  c
r>*<s=   f
b=/a=b a s
esrever= r

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

Спасибо potato44 за всю их помощь в чате. И Линн за игру в гольф.

объяснение

Общая идея здесь проста, мы concatперечисляем список и сравниваем его с обратным. Однако, поскольку мы хотим быть центросимметричными, мы должны действовать осторожно. Сначала мы пишем код, как обычно:

g=((==)<*>reverse).concat

Теперь для того, чтобы наши обратные линии были также действительны в Haskell, нам нужно, чтобы левая часть наших уравнений выглядела так, как будто определение функции tacnoc.)esrever>*<)==((не соответствует.

Первым шагом к решению этой проблемы является удаление скобок.

s a b=a==b
f=s<*>reverse
g=f.concat

Однако сейчас у нас есть некоторые новые проблемы. И то, .и другое в ==обратном порядке одинаковы, поэтому наши перевернутые строки пытаются переопределить операторы ( <*>перевернутый, >*<так что у нас все хорошо). .может быть заменено на, <$>поскольку функции являются функторами. И мы можем заменить ==на /=, что сводит на нет наши результаты, но это все еще в пределах спецификации. Теперь у нас есть

s a b=a/=b
f=s<*>reverse
g=f<$>concat

Для того, чтобы урезать нашу длину строки мы псевдоним concatи reverse.

r=reverse
s a b=a/=b
f=s<*>r
c=concat
g=f<$>c

Теперь мы просто заканчиваем это, делая все центросимметричным и квадратным.

Более короткая 1-D версия работает во многом таким же образом, за исключением того, что нет необходимости, concatмы можем сохранить две строки, удалив ее.

Мастер пшеницы
источник
Как насчет этого для n = 10?
Линн
@ Линн Спасибо! В моей голове была и обратная <$>сторона <$>.
Пшеничный волшебник
9

Python 2 , размер 10 (109 байт)

def f(a):#
 return(a#
==[r[::-1#
]for r in#
a[::-1]])#
#)]]1-::[a
#ni r rof]
#1-::[r[==
#a(nruter 
#:)a(f fed

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

Предыдущий Python 2 , размер 14 (209 байт)

lambda a:all(#
a[i][j]==a[-i#
-1][-j-1]for #
i in range(  #
len(a))for j #
in range(len(#
a)))         #
#         )))a
#(nel(egnar ni
# j rof))a(nel
#  (egnar ni i
# rof]1-j-[]1-
#i-[a==]j[]i[a
#(lla:a adbmal

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

Час Браун
источник
1
Не уверен , если это будет достаточно для перегруппировки , но FYI -i-1и -j-1может быть просто ~iи~j
г -
@Мистер. Xcoder: Я немного возился с этим, но это не меняет результат.
Час Браун
Работает в python3.6 тоже, но не может быть оптимальным.
SIGSTACKFAULT
8

Pyth, размер 6 (41 байт)

q_M_QQ
q.q   


   q.q
QQ_M_q

Попробуй здесь

объяснение

Первая строка инвертирует ввод и каждую строку и проверяет, есть ли у нас копия ввода.
Во .qвторой строке выходит из программы, так что все после этого, как и qдо него, является запретом.


источник
8

APL (Dyalog Unicode) , оценка 7 6 5 4

Полная программа. Запрашивает матричное выражение из стандартного ввода. Выводит 1 или 0, а затем выдает ошибку. Без комментариев!

r←,⎕
r≡⌽r
r⌽≡r
⎕,←r

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

 запросить выражение и оценить его.
, ravel (flatten)
r← сохранить результат в r(для r avelled)

⌽r Зеркало r
r≡ неявно печатать, rидентично ли это

 глубина r(дает 1)
r⌽ используется rдля поворота
 (это всегда будет вызывать RANK ERRORи выходить, потому что матрица не разрешена в качестве левого аргумента )

Адам
источник
7

Perl 6 , размер 9 8 7

{.flat#
#}talf.
#  ],R[
eq # qe
[R,]  #
.flat}#
#talf.{

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

reverseузкое место здесь. Я изменил его на технически более длинный, но гораздо более разделяемый [*-1 X-^*]. Хорошо, я изменил это [R,]после того, как увидел ответ Брэда Гилберта на другой вопрос.

Сглаженный код {.flat eq [R,] .flat} .

Редактировать: Черт, я понял, что мне даже не нужно сгладить первый список, но попытки укоротить его до размера 6 потерпели неудачу с одним байтом, слишком большим, чтобы уместиться ...

{@_#}_@
eq#<<|
[R,] #
# ],R[
|<<#qe
@_}#_@{

:(

Хотя, если мы возьмем его в качестве одномерного массива, его легко уместить в размере 6.

{$_# }
eq #_$
[R,] #
# ],R[
$_# qe
} #_${

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

Джо Кинг
источник
6

Wolfram Language (Mathematica) (только REPL), размер 8 (71 байт)

f=#[[c=-
1;;1;;-1
,c]]==#&
(*      
      *(
&#==]]c,
1-;;1;;1
-=c[[#=f

Возвращает Trueдля центросимметричного ввода и в Falseпротивном случае.

В Mathematica REPL строки с синтаксическими ошибками игнорируются (толстая красная полоса появляется на боковой стороне экрана). Здесь только первые три строки,f=#[[c=-1;;1;;-1,c]]==#& выполняются .

Этот код фиксирует функцию в названии f.

К сожалению, встроенный PalindromeQслишком длинный.

Юнг Хван Мин
источник
6

Пыть , размер 1

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

Проверяет, является ли ввод (в форме объединенных строк) палиндромом.

Линн
источник
._. ну, это не центросимметрично в зависимости от задачи:N> =2, но хорошая работа.
Захари
6
По моему пониманию N2является ограничением на входе, а не на определении центросимметричной матрицы.
Линн
Ой, забыл это.
Захари
5

Japt , размер 9 4 (11 байт)

UªSê


êSªU

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

Принимает одномерный ввод, проверяет, является ли он палиндромом. Если вы хотите, вы можете заполнить две пустые строки для ascii art.
Старая двумерная версия поворачивает ввод дважды и проверяет, равен ли он оригиналу:

W=U  I
Wz2;II
Vc)eUc
cUe)cV
II;2zW
I  U=W

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

гнида
источник
1
Ницца! Я думаю, что у меня есть 6, и я пытаюсь превзойти неудовлетворенную 4 в подчинении, но они оба гораздо более тривиальны, чем эта.
Лохматый
@ Shaggy Мне удалось довести то же решение до шести после того, как я по-новому взглянул на него, четыре были бы очень впечатляющими.
Nit
Учитывая, что входные данные могут (теперь) быть одномерным массивом, это можно сделать с результатом 2
Shaggy
@ Shaggy Я не уверен, если я вижу, как, источник должен быть NxN.
Нить
вот так
лохматый
4

Шелуха , размер 3

Ṡ=↔
=↔=
↔=Ṡ

Попробуйте онлайн! Введите как 1D-список. Каждая строка определяет функцию, но вызывается только та, что в первой строке.

Ṡ=↔это палиндромный тест, который проверяет, равен ли вход ( =) его реверсу ( ).


Шелуха , размер 4

Ṡ=↔Σ
Σ↔=Ṡ
Ṡ=↔Σ
Σ↔=Ṡ

Попробуйте онлайн! Для ввода в качестве 2D-матрицы мы объединяем ( Σ) список списков, прежде чем проверять, что это палиндром.

Laikoni
источник
3

MATL , оценка 4

t,!P
]=%?
?%=]
P!,t

Ввод имеет формат [1 2; 2 1], используя в ;качестве разделителя строк.

Вывод через STDERR ( разрешен по умолчанию):

  • Для центросимметричного ввода выдается постоянная ошибка. С текущими версиями Linux и Octave в TIO создается следующий вывод STDERR (не учитывая последние строки, начинающиеся с Real time: ...):

    octave: X11 DISPLAY environment variable not set
    octave: disabling GUI features
    Python 2.7.15 (default, May 16 2018, 17:50:09) 
    [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> >>> /usr/include/c++/8/bits/basic_string.h:1048: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]: Assertion '__pos <= size()' failed.
    panic: Aborted -- stopping myself...
    

    Ошибка может отличаться в зависимости от версий Linux и Octave, но будет одинаковой для всех входов.

  • Для нецентросимметричного ввода ошибка не выдается, и вывод STDERR на TIO

    octave: X11 DISPLAY environment variable not set
    octave: disabling GUI features
    Python 2.7.15 (default, May 16 2018, 17:50:09) 
    [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> >>> 
    

Попробуйте онлайн! Или проверьте все тестовые случаи:

  • Центросимметричный: 1 , 2 , 3 , 4 , 5 , 6 .
  • Нецентросимметричный: 1 , 2 , 3 , 4 , 5 , 6 .

Проверьте что программа центросимметричная.

объяснение

%является символом комментария, который приводит к игнорированию остальной части строки. Новые строки также игнорируются. Так что код просто

t,!P]=?P!,t

который делает следующее:

t       % Input, implicit. Duplicate
,       % Do twice
  !     %   Transpose
  P     %   Flip vertically
]       % End
=       % Compare element-wise
?       % If all comparisons gave true
  P     %   Implicit input. Transpose. Actually, since there is no more input, an
        %   error is prand the program exits. The rest of the code is not executed, 
        %   and will be described in parentheses
  !     %   (Transpose)
  ,     %   (Do twice)
    t   %     (Duplicate)
        %   (End, implicit)
        % (End, implicit)
Луис Мендо
источник
3

Haskell, размер 11 , 10 , 9 , 8

Принимает ввод как 2D-список! (Благодарю Орджана Йохансена)

r= --r}-
 reverse
(==)<*> 
 r.map{-
-{pam.r 
 >*<)==(
esrever 
-}r-- =r
Программист
источник
Ошибки: Второе <*>должно быть >*<. В 2D отсутствует, -и обратная часть не имеет пробелов в нужных местах.
Орджан Йохансен
Получил 2D 2D до 8
Орджан Йохансен
2

Python 2 , размер 8

i=input#
a=i()###
a[::-1##
]!=a<_##
##_<a=!]
##1-::[a
###)(i=a
#tupni=i

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

Принимает ввод как одномерный список объединенных строк (длиной N2) и выводится через код выхода (0 для симметричных входов, 1 в противном случае).

Список просто проверяется, чтобы быть палиндромом. Если это так, цепочка сравнения a[::-1]!=a<_дает сбой на !=этапе и замыкается; в противном случае неизвестная переменная _будет оценена, что приведет к сбою программы.

Линн
источник
2

R , размер 9

   #)x-))
#(nacs-<x
#(ver(yna
#       #
#       #
#       #
any(rev(#
x<-scan(#
))-x)#   

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

Последние три строки представляют собой реальную программу, которая принимает одномерный массив в качестве входных данных и проверяет, равен ли он обратному. Значение истинности: ЛОЖЬ, значение ЛОЖЬ: ИСТИНА.

any(rev(x<-scan())-x)

Р + Прир, размер 9

pryr::f(#
any(rev(#
x)-x))#  



  #))x-)x
#(ver(yna
#(f::ryrp

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

Jayce
источник
2

C # (.NET Core) , оценка 13 11 10

l=>a=>a.//
Where((e//
,i)=>e!=//
a[l-i-1]//
).Any()///
///()ynA.)
//]1-i-l[a
//=!e>=)i,
//e((erehW
//.a>=a>=l

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

Принимает ввод как массив 1D и n 2 как длину; возвращает falseдля центросимметричной и trueнецентросимметричной. Эта версия использует, System.Linqно я не знаю, как вписать ее в представление кода из-за особых требований задачи. Развернутый код:

l => a => a.Where((e,i) => e != a[l-i-1]).Any()

Следующее - мое предыдущее представление, которое не использует LINQ:

C # (.NET Core) , оценка 16 15 13

l=>a=>{/////*
var r=1<2;for
(int i=0;i<l;
)r&=a[i]==a[l
-i++-1];
return r;}
     /*/
   };r nruter
     ;]1-++i-
l[a==]i[a=&r)
;l<i;0=i tni(
rof;2<1=r rav
*/////{>=a>=l

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

Развернутый код:

l => a =>
{
    var r = 1<2;
    for (int i = 0; i < l;)
        r &= a[i] == a[l-i++-1];
    return r;
}
Чарли
источник
Если вы измените intна var(то есть и tniна rav), вторая отправка также работает в JavaScript.
Захари
2

Рубин , оценка 9 8

->z{z==#
z.######
reverse#
}#######
#######}
#esrever
######.z
#==z{z>-

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

Лямбда, принимающая уплощенную матрицу в качестве входных данных. Возвращает true для центросимметричного, иначе false.

-1 спасибо Mr.XCoder,

Распакованный:

->z{
  z == z.reverse
}
benj2240
источник
2

Чистый , размер 9

Спасибо Орджану Йохансену !

import //
 StdEnv//
r=reverse
?m=m==r//
    m    
//r==m=m?
esrever=r
//vnEdtS 
// tropmi

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

Чистый , размер 10

import/*//
*/StdEnv//
r =reverse
?m      //
 =m==r m//
//m r==m= 
//      m?
esrever= r
//vnEdtS/*
//*/tropmi

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

Οurous
источник
1
Это не из-за новой строки, это работает с отступом. 9 строк
Орджан Йохансен
@ ØrjanJohansen Не могу поверить, что я забыл, что ты можешь сделать отступ. Благодарность!
Οurous
Не за что, и я отредактировал среднюю строку после публикации, это просто необходимо m.
Орджан Йохансен,
@ ØrjanJohansen Я обновил ответ, чтобы отразить это. Это выглядит действительно элегантно.
Οurous
2

05AB1E , размер 3 (11 байт )

ÂQq

qQÂ

Ввод в виде единого списка.
Попробуйте онлайн.

Я думаю, этот не считается ..; р

ÂQ
qâ

Ввод в виде единого списка.
Попробуйте онлайн.

Объяснение:

         # Bifurcate this list (short for DR: Duplicate & Reverse copy)
 Q        # Check if the input-list and the reversed list are equal
  q       # Terminate the program
   qQâ    # No-ops

Некоторые варианты размера 3 (11 байт ):

R€R
QqQ
R€R

Матрица в качестве входных данных.
Попробуйте онлайн.

RQ 
 q  
 QR

Единый список в качестве входных данных.
Попробуйте онлайн.

Кевин Круйссен
источник
1

> <>, Размер 6

!/l2(\
s\?\ ?
/{=/ ;
: /={/
? \?\s
\(2l/!

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

(Оказывается, это боль, передающая множественное значение -v в tio)

В качестве исходного состояния стека ввод принимается как одномерный массив с параметром -v. Выход без вывода, если матрица центросимметрична, выход с ошибкой (выводит «Что-то пахнет подозрительно ...»), если нет.

l2(    Checks if the length of the stack is less than 2
?;     Exits cleanly if so

{=     Checks if the first and last elements are equal
?\s    Causes an error ('s' is not a valid instruction) if not

Я не совсем доволен этим форматом вывода, так что вот размер 7, который выводит 1 для true и 0 для false.

!/l2(\\
 ?   ?0
 =;n1/n
;{   {;
n/1n;= 
0?   ? 
\\(2l/!

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

Саша
источник
Хорошая работа! > <> может быть забавным языком для работы, если это не сложная программа, то это боль.
mbomb007
1
если вы поменяете местами истинные и ложные значения, вы можете уменьшить их до 4 с {-?;
Джо Кинг
1

Stax , n = 3

$cr
=q=
rc$

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

Объяснение:

$cr =q= rc$ Full program, implicit input
$           Flatten
 cr         Copy and reverse
    =       Compare to original
     q      Print result
      =     Silently error because there is only one item on stack
        rc$ Not executed

3 является наилучшим из возможных, потому что мне нужно как минимум три команды: копировать, перевернуть и сравнить

Stax , n = 4

Mrxr
M=qX
Xq=M
rxrM

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

Объяснение:

Mrxr M=qX Xq=M rxrM Full program, implicit input
Mr                  Transpose and reverse
  x                 Push input again
   r M              Reverse and transpose
      =             Compare
       qX Xq        Print result twice and save to X
            =       Silently error because there is only one item on stack
             M rxrM Not executed
Wastl
источник
1

Java 10, размер 13 (181 байт)

a->{var r///*
=1>0;for(int 
l=a.length,i=
0;i<l;)r&=a[i
]==a[l-++i]; 
return r;}   
     /*/     
   };r nruter
 ;]i++-l[a==]
i[a=&r);l<i;0
=i,htgnel.a=l
 tni(rof;0>1=
*///r rav{>-a

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

Вдохновленный ответом C # @Charlie .

Гольф объяснение:

a->{var r=1>0;for(int l=a.length,i=0;i<l;)r&=a[i]==a[l-++i];return r;}

a->{                    //  Method with byte-array parameter and boolean return-type
  var r=1>0;            //  Result-boolean, starting at true
  for(int l=a.length,   //  The length of the input-array
      i=0;i<l;)         //  Loop `i` in the range [0, length)
    r&=                 //   Bitwise-AND the result-boolean with:
       a[i]             //    Whether the current item
           ==a[l-++i];  //    equals the opposite item
  return r;}            //  Return the result
Кевин Круйссен
источник
1

C (gcc) , оценка 11

Принимает список int и n в качестве аргументов. Возвращает n как истинное значение, 0 как ложь.

/*//};n=l;k
--*==++l*=*
n);l>k;n*n+
l=k(rof{;l*
tni)n,l(f;k
*/*/////*/*
k;f(l,n)int
*l;{for(k=l
+n*n;k>l;)n
*=*l++==*--
k;l=n;}//*/

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

gastropner
источник
0

Javascript ES6, размер 8:

/***/a=>
""+a==a.
reverse(
)/////*/
/*/////)
(esrever
.a==a+""
>=a/***/

Javascript ES6, размер 7 (это действительно?):

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a

Тест:

<script>
f=

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a
</script>

<script>
console.log([
  [1, 2, 2, 1],
  [1, 2, 3, 5, 6, 5, 3, 2, 1],
  [10, 5, 30, 2, 6, 2, 30, 5, 10],
  [100, 100, 100, 100, 50, 100, 100, 100, 100],
  [1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1],
  [3, 4, 5, 6, 7, 5, 6, 7, 8, 9, 3, 2, 10, 2, 3, 9, 8, 7, 6, 5, 7, 6, 5, 4, 3],
].every(f))

console.log([
  [1, 2, 1, 2],
  [1, 2, 10, 5, 6, 5, 11, 2, 1],
  [14, 5, 32, 2, 6, 2, 30, 5, 16],
  [19, 19, 19, 40, 50, 4, 19, 19, 19],
  [1, 2, 20, 4, 7, 6, 7, 8, 8, 7, 6, 6, 3, 3, 2, 1],
  [3, 4, 5, 6, 7, 5, 6, 7, 8, 9, 4, 5, 10, 4, 5, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7],
].every(x=>!f(x)))
</script>

или с лямбдой, сохраненной в переменную с именем a:

a=

a=>""+a
==a.//=
reverse
`     `
esrever
=//.a==
a+"">=a

console.log([
  [1, 2, 2, 1],
  [1, 2, 3, 5, 6, 5, 3, 2, 1],
  [10, 5, 30, 2, 6, 2, 30, 5, 10],
  [100, 100, 100, 100, 50, 100, 100, 100, 100],
  [1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1],
  [3, 4, 5, 6, 7, 5, 6, 7, 8, 9, 3, 2, 10, 2, 3, 9, 8, 7, 6, 5, 7, 6, 5, 4, 3],
].every(a))

console.log([
  [1, 2, 1, 2],
  [1, 2, 10, 5, 6, 5, 11, 2, 1],
  [14, 5, 32, 2, 6, 2, 30, 5, 16],
  [19, 19, 19, 40, 50, 4, 19, 19, 19],
  [1, 2, 20, 4, 7, 6, 7, 8, 8, 7, 6, 6, 3, 3, 2, 1],
  [3, 4, 5, 6, 7, 5, 6, 7, 8, 9, 4, 5, 10, 4, 5, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7],
].every(x=>!a(x)))

Qwertiy
источник