Задний план
Вдохновленный я палиндром. Ты? Там, где представлен шокирующий факт, что « ()()
это не палиндром, но ())(
», я спросил себя, что вместо этого, ()()
и ответ прост: это строка с вертикальной осью симметрии!
Задание
Напишите программу или функцию, которая принимает строку S (или соответствующий эквивалент на вашем языке) в качестве входных данных, проверяет симметрию вдоль вертикальной оси и возвращает значение true или false соответственно. Вы можете использовать любые разумные средства, чтобы получить данные и предоставить результаты.
Отражательная симметрия
Отражательная симметрия вокруг вертикальной оси (или лево-правая симметрия) означает, что если вы поместите зеркало вертикально в точный центр строки, отраженное изображение первой половины строки будет идентично второй половине строки.
Например, следующие строки отражательно симметричны вокруг вертикальной оси:
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
в то время как следующие не являются:
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
Правила конкурса
• Ваша программа или функция получит только печатные символы ASCII. Вы можете включить или нет пустую строку (что, конечно, симметрично!) В качестве легального ввода, что лучше для вас.
• Символами ASCII, которые можно считать симметричными относительно вертикальных осей, являются следующие (обратите внимание на начальный пробел и разницу между прописными и строчными буквами):
!"'+*-.:=AHIMOTUVWXY^_ovwx|
Символы ASCII, которые можно считать «зеркальными», и соответствующие им символы:
()<>[]{}qpbd/\
Обратите внимание, что, поскольку они зеркальные, вы можете иметь ()
как и )(
, /\
и \/
, и т. Д.
Все остальные печатные символы ASCII должны считаться асимметричными и без зеркально отображаемых соответствующих символов.
• Это задача для игры в гольф : чем короче ваша программа, измеренная в байтах, тем лучше на любом языке программирования.
• Слава людям, которые будут создавать симметричную программу!
Примечание : этот вопрос не является дубликатом «Удобного палиндрома» , который требует проверки палиндромных строк, в которых перевернуты скобки. Этот вопрос отличается по двум причинам:
1) это ограничение другого вопроса для символов, не являющихся скобками, поскольку только симметричные символы могут появляться в обратном порядке.
2) Поскольку он основан на понятии симметрии, а не на понятии «удобный палиндром», зеркальные символы могут появляться в обоих порядках, т. Е. []
И ][
, и это отличает программу для ее решения от программ, решающих другую проблему. ,
8
считается "симметричным"?Ответы:
JavaScript (ES6),
130125113 байтовРедактировать: 5 байтов сохранено благодаря @Arnauld. Сохранено еще 11 байтов благодаря @YairRand.
источник
includes()
? Такие как/[- !"'+*.:=AHIMO^_ovwx|T-Y]/.test(c)
.[...s].reverse().map(...)
в гольф :s::[].map().reverse()
если вы в порядке с использованием новых функций ES-next. ссылкаЖеле ,
6962 байтаПопробуйте онлайн!
Все тесты
-7 байт благодаря @JonathanAllan
Как это работает
источник
¢FiЀ;1Ạðaµ¢yU⁼
->¢Ff@ð¢yU⁼
...}pd\”,Ṛ$Fœs©2Ff@ð®yU⁼
...}pd\”,Ṛ$F©f@ð®œs2¤yU⁼
, возможно, и приятнее)Python 3,
211208195 байтСохранено 13 байтов благодаря Джонатану Аллану.
источник
2*x
иrange(7)
; 3. использовать умножение, чтобы избежать>2
теста; 4. Использование побитового не на ,len(S)
чтобы избежатьnot
изnot len(S)%2
; 5. использовать тот факт , что''in'blah'
этоTrue
позволить строковое умножение~len(S)%2*s[len(S)//2]in s
.SOGL V0.12 , 88 байт
Попробуй здесь!
~ 24 байта для добавления
qpbd
зеркалирования и 6 байтов для(x-1 XOR 1) + 1
: /источник
Котлин 1.1,
201199 байтукрашенный
Тест
Не может работать на TIO, потому что 1.1 не поддерживается
источник
Python 2 ,
182167163162160158 байтПопробуйте онлайн!
Сохранено 2 байта благодаря Джонатану Аллану
Пояснение Во-первых, нам нужно построить список всех символов, которые не имеют симметрии (сам символ:,
A
... или другой символ(
для)
, ...):m("","")
возвращает строку со всеми доступными символами.m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
удаляет из всех доступных символов симметричные символы.Затем мы сопоставляем каждый символ с его симметричным символом и удаляем символы, которые не имеют симметрии с
s.translate(m(t+w,w+t),<chars that don't have a symmetric>)
Если результат равен перевернутой строке, мы имеем симметричную строку.
источник
t
иw
вы можете отказаться от побега, напримерw="(<]{\pb"
. Сохраните другой байт с помощьюfrom string import*;m=maketrans
(я лично иду на новую;
строку, хотя байты не сохраняются). Кроме того, вам не нужно называть функцию, если она многократно используется и не рекурсивна, что спасает еще 2.f=
, но ваша версия чище.Perl 5 , 102 + 1 (-p) = 103 байта
Попробуйте онлайн!
источник
Скала , 140 байт
Попробуйте онлайн!
источник