Od jakiegoś czasu poluję na alfabet

18

Wiesz, ostatnio mieliśmy wiele „alfabetycznych” wyzwań. ( raz dwa trzy cztery pięć .) Chociaż uwielbiam dobre wyzwanie, a te wyzwania były bardzo zabawne, myślę, że nadszedł czas na zmianę tempa. Musimy wykluczyć takie wyzwania w przyszłości. Czas na automatyzację !

Znajdziesz dla mnie trochę alfabetów, a dla automatyzacji (i chwały!) Alfabety są trudne i lubią się ukrywać. [potrzebne źródło] Musisz wziąć pod uwagę następujące czynniki:

  1. Alfabety mogą być wielkie lub małe (ale nie oba). Tak, trzeba szukać ABCDEFGHIJKLMNOPQRSTUVWXYZi abcdefghijklmnopqrstuvwxyz, ale nie AbCdeFGhIJkLmNOpQRsTuvwxyZ. Oznacza to, że szukaj tylko alfabetów, które składają się w całości z jednego przypadku.
  2. Alfabety mogą się zmieniać. nie zawsze zaczynają się od A, ale zamiast tego mogą zaczynać się od Glub U. Musisz więc szukać takich rzeczy OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Alfabety nie zawsze mogą czytać do przodu. Mogą także czytać do tyłu, w górę i w dół. Np. ZYXWVUTSRQPONMLKJIHGFEDCBAJest także prawidłowym alfabetem.

Oto przykład ciągu, który ma alfabet:

JIHGFEDCBAZYXWVUTSRQPONMLK

Jest to przesunięty alfabet zorientowany do tyłu:

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

To również zawiera alfabetu:

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

to alfabet skierowany w dół:

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

Wyzwanie polega na napisaniu programu, funkcji itp., Które podając ciąg znaków, wypisują / zwracają prawdziwą wartość, jeśli łańcuch zawiera co najmniej jeden alfabet lub w przeciwnym razie wartość falsey. To jest , więc wygrywa najkrótszy program w bajtach.

Przypadki testowe

Prawda

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
Conor O'Brien
źródło
16
„Mam dość wyzwań z alfabetem. Oto wyzwanie z alfabetu”. lol +1
AdmBorkBork
Czy możemy dopełnić dane wejściowe spacjami, aby utworzyć prostokąt? : 3
Downgoat,
@Downgoat Tak, możesz.
Conor O'Brien,
1
Czy możemy wziąć tablicę 2D ciągów? Każdy rząd byłby linią, wypełnioną prawą spacją i tworzącą prostokąt
Luis Mendo

Odpowiedzi:

5

Galaretka , 28 23 22 bajtów

1 bajt dzięki Dennisowi.

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

Wypróbuj online!

Zajmuje tablicę ciągów.

Leaky Nun
źródło
4
wat jak galaretka jest zawsze taka krótka .___.
Downgoat,
@Downgoat jesteś galaretką?
Patrick Roberts,
2
@PatrickRoberts <s> tak </s> nie, jestem kozłem
Downgoat
2

Cheddar, 148 bajtów

(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

Wypróbuj online!

Non-copmeting, 146 132 bajtów

To jest dokładnie to samo co powyżej, z wyjątkiem map(...?1:0).sumtego, że się stało 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))

Raczej powoli, ale działa ¯ \ _ (ツ) _ / ¯. dodano anyfunkcję po dacie wydania wyzwania.

Dane wejściowe nie muszą być wypełniane białymi spacjami. Ale jeśli dane wejściowe nie działają, wypełnij je spacjami, aby utworzyć prostokąt. Ta turnfunkcja jest naprawdę delikatna i nie jestem pewien, kiedy działa, a kiedy nie

Wyjaśnienie

Pętle przez wszystkie możliwe cykle alfabetu. Przy każdej iteracji sprawdź, czy bieżący cykl alfabetu istnieje w ciągu, jeśli nie, sprawdź, czy którykolwiek z możliwych obrotów łańcucha ma alfabet.

Bez golfa

(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
źródło
Co c?znaczy
Conor O'Brien,
@ ConorO'Brien c?oznacza opcjonalny argument. w zasadzie to samo coc=nil
Downgoat
Stwórz konkurencyjną wersję, a następnie umieść tę niekonkurencyjną wersję na dole.
Leaky Nun
@LeakyNun nad nim pracuje, nie może dowiedzieć się, jak bez {}chociaż
Downgoat
1
any(...)jest po prostumap(...?1:0).sum
Leaky Nun
2

05AB1E, 43 bajty

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

Wyjaśnienie w skrócie

Uzyskaj różne odmiany alfabetu (wielkie, małe, odwrócone, normalne) i przechowuj w X.

A‚Duìvy26FÀD}})U

Uzyskaj każdy wiersz i kolumnę danych wejściowych jako listę ciągów.

                 |Dø€J)˜

Sprawdź każdy taki ciąg, jeśli zawiera on odmianę alfabetu.

                        vXDgs`rFysk>ˆ}}

Suma i podwójna negacja, dając 1 dla wartości true i 0 dla wartości false.

                                       ¯O__

Wypróbuj online

Emigna
źródło
0

Python, 182 bajty

Nie wydaje się bardzo „golfowy”, ale ...

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)))))

Teoria operacji:

Najpierw zbuduj wzorzec regularny łączący wszystkie możliwe alfabety:

p=P.join(a[i:]+a[:i] for i in range(26))buduje ciąg wszystkich rotacji „a” połączonych z „|”. np. „abc ... z | bcd ... za | ...”

p+=P+p[::-1] dołącza do siebie odwróconą wersję.

p+=P+p.upper() dołącza wersję wielkiej litery.

Następnie utwórz długi ciąg łączący oryginał si wersję sz kolumnami zamienionymi w rzędy:

N.join(map(''.join,zip(*s.split(N)))) odwraca wiersze i kolumny, więc „a \ nb \ nc” staje się „abc”

zwraca true, jeśli wzorzec znajduje się w długim ciągu.

RootTwo
źródło
Jestem pewien, że nie potrzebujesz wyrażenia regularnego, aby to zrobić; w szczególności insprawdza podciąg.
Leaky Nun
@LeakyNun, starałem się unikać wielu pętli nad możliwymi alfabetami (obroty, zamiany, wielkość liter). Wzorzec wyrażenia regularnego ma wszystkie możliwości - używając tylko jednej pętli. Ponadto ciąg do przeszukiwania zawiera ciąg wejściowy zarówno w wersji normalnej, jak i z odwróconym wierszem, więc nie ma tam również pętli.
RootTwo