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:
- Alfabety mogą być wielkie lub małe (ale nie oba). Tak, trzeba szukać
ABCDEFGHIJKLMNOPQRSTUVWXYZ
iabcdefghijklmnopqrstuvwxyz
, ale nieAbCdeFGhIJkLmNOpQRsTuvwxyZ
. Oznacza to, że szukaj tylko alfabetów, które składają się w całości z jednego przypadku. - Alfabety mogą się zmieniać. nie zawsze zaczynają się od
A
, ale zamiast tego mogą zaczynać się odG
lubU
. Musisz więc szukać takich rzeczyOPQRSTUVWXYZABCDEFGHIJKLMN
. - Alfabety nie zawsze mogą czytać do przodu. Mogą także czytać do tyłu, w górę i w dół. Np.
ZYXWVUTSRQPONMLKJIHGFEDCBA
Jest 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 golf golfowy , 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
Odpowiedzi:
Galaretka ,
282322 bajtów1 bajt dzięki Dennisowi.
Wypróbuj online!
Zajmuje tablicę ciągów.
źródło
Cheddar, 148 bajtów
Wypróbuj online!
Non-copmeting,
146132 bajtówTo jest dokładnie to samo co powyżej, z wyjątkiem
map(...?1:0).sum
tego, że się stałoany(...)
.Raczej powoli, ale działa ¯ \ _ (ツ) _ / ¯. dodano
any
funkcję 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
turn
funkcja jest naprawdę delikatna i nie jestem pewien, kiedy działa, a kiedy nieWyjaś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
źródło
c?
znaczyc?
oznacza opcjonalny argument. w zasadzie to samo coc=nil
{}
chociażany(...)
jest po prostumap(...?1:0).sum
05AB1E, 43 bajty
Wyjaśnienie w skrócie
Uzyskaj różne odmiany alfabetu (wielkie, małe, odwrócone, normalne) i przechowuj w X.
Uzyskaj każdy wiersz i kolumnę danych wejściowych jako listę ciągów.
Sprawdź każdy taki ciąg, jeśli zawiera on odmianę alfabetu.
Suma i podwójna negacja, dając 1 dla wartości true i 0 dla wartości false.
Wypróbuj online
źródło
Python, 182 bajty
Nie wydaje się bardzo „golfowy”, ale ...
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ł
s
i wersjęs
z 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.
źródło
in
sprawdza podciąg.