Я охотился за алфавитом некоторое время

18

Знаешь, в последнее время у нас было много «алфавитных» испытаний. ( один два три четыре пять ). Хотя я люблю хороший вызов, и эти испытания были очень веселыми, я думаю, что пришло время для изменения темпа. Мы должны исключить такие проблемы в будущем. Время для автоматизации !

Вы найдете несколько алфавитов для меня и для автоматизации (и для славы!). Алфавиты хитры и любят маскироваться. [ Требуется цитата] Вам необходимо учитывать следующие факторы:

  1. Алфавиты могут быть прописными или строчными (но не оба). Итак, нужно искать ABCDEFGHIJKLMNOPQRSTUVWXYZи abcdefghijklmnopqrstuvwxyz, но не AbCdeFGhIJkLmNOpQRsTuvwxyZ. То есть ищите только те алфавиты, которые состоят только из одного случая.
  2. Алфавиты могут перемещаться. они не всегда могут начинаться с A, но вместо этого могут начинаться с Gили U. Так что вам придется искать такие вещи, как OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Алфавиты не всегда могут читать вперед. Они также могут читать назад, вверх и вниз. Например, ZYXWVUTSRQPONMLKJIHGFEDCBAэто также правильный алфавит.

Вот пример строки с алфавитом:

JIHGFEDCBAZYXWVUTSRQPONMLK

Это смещенный назад алфавит:

JIHGFEDCBAZYXWVUTSRQPONMLK
<--------|<---------------

Это также содержит алфавит:

F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E

это алфавит, ориентированный вниз:

F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z V
A===
B |
C |
D |
E V

Ваша задача состоит в том, чтобы написать программу, функцию и т. Д., Которые при наличии строки выводят / возвращают истинное значение, если строка содержит хотя бы один алфавит, или значение false в противном случае. Это , поэтому выигрывает самая короткая программа в байтах.

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

Truthy

ABCDEFGHIJKLMNOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz

ZABCDEFGHIJKLMNOPQRSTUVWXYghijklmnopqrstuvwxyzabcdef

ZBCDEFGHIJghijklmnopqrstuvwxyzabcdef

AAAAAAAA
BBBBBBBB
CCCCCCCC
DDDDDDDD
EEEEEEEE
FFFFFFFF
GGGGGGGG
HHHHHHHH
IIIIIIII
JJJJJJJJ
KKKKKKKK
LLLLLLLL
MMMMMMMM
NNNNNNNN
OOOOOOOO
PPPPPPPP
QQQQQQQQ
RRRRRRRR
SSSSSSSS
TTTTTTTT
UUUUUUUU
VVVVVVVV
WWWWWWWW
XXXXXXXX
YYYYYYYY
ZZZZZZZZ

 J54
 Igeh
 H
 G
 Fzx6
 E
 Dv
 Cvzxc
 Bs
 Adf
 Z
@Yascvf
 Xsf
 W
 Vfas
 Uw
 Te
~S
 R
 Qasdfasdf
 P
 O
 N
 M
 LMNOPQR
 K

Falsey

Hello, World!

KLMNOPQRSTUVWXYZABCDEF

K        ZYXW
 L         V
  M       U
   N     T
    O   S
     P R
      Q

A
 BCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLmnopqrstuvwxyz
Конор О'Брайен
источник
16
«Мне надоели проблемы с алфавитом. Вот проблема с алфавитом». лол +1
AdmBorkBork
Можно ли дополнить ввод пробелами для формирования прямоугольника? : 3
Downgoat
@ Downgoat Да, вы можете.
Конор О'Брайен
1
Можем ли мы взять 2D-массив строк? Каждая строка будет строкой, дополненной правыми пробелами для формирования прямоугольника
Луис Мендо

Ответы:

5

Желе , 28 23 22 байта

1 байт благодаря Денису.

26RØAṙ;U$;Œl$
;Zẇ@þ¢FS

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

Принимает массив строк.

Дрянная Монахиня
источник
4
Ват как желе всегда так коротко .___.
Downgoat
@ Downgoat ты желе?
Патрик Робертс
2
@PatrickRoberts <s> да </ s> нет, я козел
Downgoat
2

Чеддер, 148 байт

(s,b=65@"90,c?)->(|>27).map(->s has(b=b.slice(1)+b[0])||s has b.lower||(1|>3).map(j->(c=s.lines.turn(j).vfuse)has b||c has b.lower?1:0).sum?1:0).sum

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

Не копируется, 146 132 байта

Это точно так же, как указано выше, за исключением map(...?1:0).sumстал any(...).

(s,b=65@"90,c?)->(|>27).any(->s has(b=b.slice(1)+b[0])||s has b.lower||(1|>3).any(j->(c=s.lines.turn(j).vfuse)has b||c has b.lower))

Довольно медленно, но работает ¯ \ _ (ツ) _ / ¯. добавлена anyфункция после даты выпуска вызова.

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

объяснение

Перебирает все возможные циклы алфавита. На каждой итерации проверяют, существует ли текущий цикл алфавита в строке, если нет, проверяют, имеет ли алфавит какой-либо из возможных поворотов строки.

Ungolfed

(str, a = 65@"90)->
  (|>27).any(->
    str has (a = a.slice(1) + a[0]) ||
    str has a.lower                 ||
    (1|>3).any(j ->
      (c = str.lines.turn(j).vfuse) has a ||
      c has a.lower
    )
  )
Downgoat
источник
Что c?значит?
Конор О'Брайен
@ ConorO'Brien c?означает необязательный аргумент. в основном так же, какc=nil
Downgoat
Сделайте конкурирующую версию, затем поместите эту неконкурентную версию внизу.
Утренняя монахиня
@LeakyNun работать над ней, не могу понять, как без {}хотя
Downgoat
1
any(...)простоmap(...?1:0).sum
Дрянная Монахиня
2

05AB1E, 43 байта

A‚Duìvy26FÀD}})U|Dø€J)˜vXDgs`rFysk>ˆ}}¯O__

Объяснение вкратце

Получить различные варианты алфавита (заглавные буквы, без заглавных букв, обратный, обычный) и сохранить в X.

A‚Duìvy26FÀD}})U

Получить каждую строку и столбец ввода в виде списка строк.

                 |Dø€J)˜

Проверьте каждую такую ​​строку, если она содержит вариацию алфавита.

                        vXDgs`rFysk>ˆ}}

Сумма и двойное отрицание дают 1 для истинного и 0 для ложного.

                                       ¯O__

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

Emigna
источник
0

Python, 182 байта

Не чувствует себя очень "в гольфе", но ...

import re
a='abcdefghijklmnopqrstuvwxyz'
P,N='|\n'
p=P.join(a[i:]+a[:i] for i in range(26))
p+=P+p[::-1]
p+=P+p.upper()
lambda s:re.search(p,s+N+N.join(map(''.join,zip(*s.split(N)))))

Теория Операции:

Сначала создайте шаблон регулярного выражения, объединяющий все возможные алфавиты:

p=P.join(a[i:]+a[:i] for i in range(26))строит строку всех вращений «а», соединенных с «|». например, "abc ... z | bcd ... za | ..."

p+=P+p[::-1] добавляет обратную версию себя.

p+=P+p.upper() добавляет заглавную версию

Затем создайте длинную строку, объединяющую оригинал sи версию sсо столбцами, превращенными в строки:

N.join(map(''.join,zip(*s.split(N)))) переворачивает строки и столбцы, поэтому «a \ nb \ nc» становится «abc»

верните true, если шаблон находится в длинной строке.

RootTwo
источник
Уверен, вам не нужно регулярное выражение для этого; в частности, inпроверяет наличие подстроки.
Утренняя монахиня
@LeakyNun, я пытался избежать множества петель над возможными алфавитами (повороты, развороты, регистр). Шаблон регулярного выражения имеет все возможности - используя только один цикл. Кроме того, строка для поиска включает в себя входную строку как в обычной, так и в перевернутой строках, так что никаких циклов там тоже нет.
RootTwo