Tôi đã săn lùng bảng chữ cái trong một thời gian


18

Vâng, chúng tôi đã có rất nhiều thử thách "bảng chữ cái" gần đây. ( một hai ba bốn năm .) Trong khi tôi yêu một thử thách tốt, và những thử thách đó rất vui, tôi nghĩ đã đến lúc thay đổi tốc độ. Chúng ta cần loại trừ những thách thức như vậy trong tương lai. Đã đến lúc tự động hóa !

Bạn sẽ tìm thấy một số bảng chữ cái cho tôi, và cho tự động hóa (và cho vinh quang!) Bảng chữ cái là khó khăn và muốn ngụy trang. [cần dẫn nguồn] Bạn sẽ cần tính đến các yếu tố sau:

  1. Bảng chữ cái có thể là chữ hoa hoặc chữ thường (nhưng không phải cả hai). Vì vậy, bạn cần phải tìm ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz, nhưng không AbCdeFGhIJkLmNOpQRsTuvwxyZ. Đó là, chỉ tìm các bảng chữ cái bao gồm hoàn toàn một trường hợp.
  2. Bảng chữ cái có thể thay đổi xung quanh. họ có thể không luôn luôn bắt đầu bằng A, nhưng thay vào đó có thể bắt đầu bằng Ghoặc U. Vì vậy, bạn sẽ phải tìm kiếm những thứ như OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Bảng chữ cái có thể không luôn luôn đọc về phía trước. Họ cũng có thể đọc ngược, lên và xuống. Ví dụ, ZYXWVUTSRQPONMLKJIHGFEDCBAcũng là một bảng chữ cái hợp lệ.

Dưới đây là ví dụ về chuỗi có bảng chữ cái:

JIHGFEDCBAZYXWVUTSRQPONMLK

Đây là một bảng chữ cái được định hướng ngược, thay đổi:

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

Điều này cũng chứa một bảng chữ cái:

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

đó là một bảng chữ cái hướng xuống:

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

Thách thức của bạn là viết một chương trình, hàm, v.v., đưa ra một chuỗi, xuất / trả về giá trị trung thực nếu chuỗi chứa ít nhất một bảng chữ cái hoặc giá trị falsey khác. Đây là một , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.

Các trường hợp thử nghiệm

Sự thật

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
"Tôi phát ốm với những thách thức bảng chữ cái. Đây là một thử thách bảng chữ cái." lol +1
admBorkBork

Chúng ta có thể có đầu vào được đệm với khoảng trắng để tạo thành một hình chữ nhật không? : 3
Hạ cấp

@Downgoat Vâng, bạn có thể.
Conor O'Brien


1
Chúng ta có thể lấy một chuỗi 2D của chuỗi không? Mỗi hàng sẽ là một hàng, được đệm bên phải với các khoảng trắng để tạo thành một hình chữ nhật
Luis Mendo

Câu trả lời:



2

Cheddar, 148 byte

(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

Hãy thử trực tuyến!

Không đối xứng, 146 132 byte

Điều này là chính xác như trên ngoại trừ map(...?1:0).sumđã trở thành 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))

Khá chậm nhưng nó hoạt động \ _ (ツ) _ /. thêm anychức năng sau ngày phát hành thử thách.

Đầu vào không cần phải được đệm bằng khoảng trắng. Nhưng nếu một đầu vào không hoạt động, hãy đệm nó với khoảng trắng để tạo hình chữ nhật. Các turnchức năng là thực sự khó tính và tôi không chắc chắn khi nó hoạt động và khi nó không

Giải trình

Vòng lặp thông qua tất cả các chu kỳ có thể của bảng chữ cái. Trên mỗi lần lặp kiểm tra xem chu kỳ hiện tại của bảng chữ cái có tồn tại trong chuỗi không, nếu không, hãy kiểm tra xem có bất kỳ phép quay nào có thể có của chuỗi có bảng chữ cái không.

Ung dung

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

c?nghĩa là gì?
Conor O'Brien

@ ConorO'Brien c?có nghĩa là đối số tùy chọn. về cơ bản giống nhưc=nil
Downgoat

Tạo một phiên bản cạnh tranh, sau đó đặt phiên bản không cạnh tranh này ở phía dưới.
Leaky Nun

@LeakyNun làm việc trên nó, không thể tìm ra cách để không {}mặc dù
Downgoat

1
any(...)chỉ làmap(...?1:0).sum
Leaky Nun

2

05AB1E, 43 byte

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

Giải thích ngắn gọn

Nhận các biến thể khác nhau của bảng chữ cái (mũ, không mũ, đảo ngược, bình thường) và lưu trữ trong X.

A‚Duìvy26FÀD}})U

Lấy mỗi hàng và cột của đầu vào dưới dạng một danh sách các chuỗi.

                 |Dø€J)˜

Kiểm tra từng chuỗi như vậy nếu nó chứa một biến thể của bảng chữ cái.

                        vXDgs`rFysk>ˆ}}

Tổng và nhân đôi, cho 1 cho đúng và 0 cho sai.

                                       ¯O__

Dùng thử trực tuyến


0

Python, 182 byte

Không cảm thấy rất 'chơi gôn', nhưng ...

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

Nguyên lý hoạt động:

Đầu tiên, xây dựng một mẫu biểu thức chính quy kết hợp tất cả các bảng chữ cái có thể:

p=P.join(a[i:]+a[:i] for i in range(26))xây dựng một chuỗi tất cả các phép quay 'a' được nối với '|'. ví dụ: "abc ... z | bcd ... za | ..."

p+=P+p[::-1] nối thêm một phiên bản đảo ngược của chính nó.

p+=P+p.upper() nối thêm một phiên bản chữ hoa

Sau đó, tạo một chuỗi dài kết hợp giữa bản gốc svà phiên bản svới các cột được chuyển thành hàng:

N.join(map(''.join,zip(*s.split(N)))) lật các hàng và cột, vì vậy 'a \ nb \ nc' trở thành 'abc'

Trả về true nếu mẫu nằm trong chuỗi dài.


Khá chắc chắn rằng bạn không cần regex để làm điều này; cụ thể, inkiểm tra chuỗi con.
Leaky Nun

@LeakyNun, tôi đã cố gắng tránh nhiều vòng lặp trên bảng chữ cái có thể (xoay, đảo ngược, trường hợp). Mẫu regex có tất cả các khả năng - chỉ sử dụng một vòng lặp. Ngoài ra, chuỗi để tìm kiếm bao gồm chuỗi đầu vào trong cả phiên bản thường và hàng lật, do đó, không có vòng lặp ở đó.
RootTwo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.