Saya telah berburu alfabet untuk sementara waktu

18

Kau tahu, kami punya banyak tantangan "alfabet" baru-baru ini. ( satu dua tiga empat lima .) Sementara saya suka tantangan yang bagus, dan tantangan itu sangat menyenangkan, saya pikir sudah waktunya untuk perubahan kecepatan. Kita perlu mengesampingkan tantangan seperti itu di masa depan. Sudah waktunya untuk otomatisasi !

Anda akan menemukan beberapa huruf untuk saya, dan untuk otomatisasi (dan untuk kemuliaan!) Huruf itu rumit dan suka menyamarkan diri mereka sendiri. [butuh rujukan] Anda harus memperhitungkan faktor-faktor berikut:

  1. Huruf dapat berupa huruf besar atau kecil (tetapi tidak keduanya). Jadi, Anda perlu mencari ABCDEFGHIJKLMNOPQRSTUVWXYZdan abcdefghijklmnopqrstuvwxyz, tetapi tidak AbCdeFGhIJkLmNOpQRsTuvwxyZ. Artinya, hanya mencari huruf yang seluruhnya terdiri dari satu case.
  2. Huruf dapat bergeser. mereka mungkin tidak selalu mulai dengan A, tetapi sebaliknya mungkin mulai dengan Gatau U. Jadi, Anda harus mencari hal-hal seperti OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Huruf mungkin tidak selalu terbaca ke depan. Mereka juga dapat membaca mundur, naik, dan turun. Misalnya, ZYXWVUTSRQPONMLKJIHGFEDCBAjuga merupakan alfabet yang valid.

Berikut ini contoh string yang memiliki alfabet:

JIHGFEDCBAZYXWVUTSRQPONMLK

Ini adalah alfabet bergeser ke belakang yang berorientasi:

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

Ini juga mengandung alfabet:

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

ini adalah alfabet yang berorientasi ke bawah:

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

Tantangan Anda adalah menulis sebuah program, fungsi, dll. Yang, jika diberi string, mengeluarkan / mengembalikan nilai kebenaran jika string tersebut mengandung setidaknya satu alfabet, atau nilai falsey sebaliknya. Ini adalah sebuah , sehingga program terpendek dalam byte menang.

Uji kasus

Sejujurnya

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
sumber
16
"Aku muak dengan tantangan alfabet. Ini tantangan alfabet." lol +1
AdmBorkBork
Bisakah kita meminta input diisi dengan spasi untuk membentuk persegi panjang? : 3
Downgoat
@Downgoat Ya, Anda bisa.
Conor O'Brien
1
Bisakah kita mengambil array string 2D? Setiap baris akan menjadi garis, berlapis kanan dengan spasi untuk membentuk persegi panjang
Luis Mendo

Jawaban:

5

Jelly , 28 23 22 byte

Terima kasih 1 byte untuk Dennis.

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

Cobalah online!

Mengambil array string.

Biarawati Bocor
sumber
4
wat bagaimana jelly selalu begitu singkat .___
Downgoat
@Downgoat apakah Anda Jelly?
Patrick Roberts
2
@PatrickRoberts <s> yes </s> tidak saya kambing
Downgoat
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

Cobalah online!

Non-copmeting, 146 132 byte

Ini sama persis seperti di atas kecuali map(...?1:0).sumtelah menjadi 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))

Agak lambat tetapi bekerja ¯ \ _ (ツ) _ / ¯. ditambahkanany fungsi setelah tanggal rilis tantangan.

Input tidak perlu diisi dengan spasi putih. Tetapi jika input tidak berfungsi, pad dengan spasi putih untuk membuat persegi panjang. Ituturn Fungsi benar-benar rewel dan saya tidak yakin ketika bekerja dan ketika itu tidak

Penjelasan

Putar semua siklus alfabet yang mungkin. Pada setiap iterasi periksa apakah siklus alfabet saat ini ada dalam string, jika tidak, periksa apakah ada kemungkinan rotasi string memiliki alfabet.

Tidak disatukan

(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
sumber
Apa c?artinya
Conor O'Brien
@ ConorO'Brien c?berarti argumen opsional. pada dasarnya sama denganc=nil
Downgoat
Buat versi yang bersaing, lalu letakkan versi yang tidak bersaing ini di bagian bawah.
Leaky Nun
@LeakyNun bekerja di atasnya, tidak tahu bagaimana tanpa {}meskipun
Downgoat
1
any(...)hanyamap(...?1:0).sum
Leaky Nun
2

05AB1E, 43 byte

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

Penjelasan singkatnya

Dapatkan variasi alfabet yang berbeda (huruf besar, huruf besar, terbalik, normal) dan simpan dalam X.

A‚Duìvy26FÀD}})U

Dapatkan setiap baris dan kolom input sebagai daftar string.

                 |Dø€J)˜

Periksa setiap string seperti itu jika berisi variasi alfabet.

                        vXDgs`rFysk>ˆ}}

Sum dan double negate, beri 1 untuk true dan 0 untuk false.

                                       ¯O__

Cobalah online

Emigna
sumber
0

Python, 182 byte

Tidak terasa sangat 'golf', tapi ...

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

Teori Operasi:

Pertama, buat pola regex yang menggabungkan semua huruf yang mungkin:

p=P.join(a[i:]+a[:i] for i in range(26))membangun string dari semua rotasi 'a' bergabung dengan '|'. mis. "abc ... z | bcd ... za | ..."

p+=P+p[::-1] menambahkan versi terbalik itu sendiri.

p+=P+p.upper() menambahkan versi huruf besar.

Kemudian buat string panjang yang menggabungkan yang asli sdan versis dengan kolom berubah menjadi baris:

N.join(map(''.join,zip(*s.split(N)))) membalik baris dan kolom, sehingga 'a \ nb \ nc' menjadi 'abc'

return true jika polanya ada di string panjang.

RootTwo
sumber
Cukup yakin Anda tidak perlu regex untuk melakukan ini; khususnya, inmemeriksa substring.
Leaky Nun
@ LeakyNun, saya mencoba untuk menghindari banyak loop atas huruf yang mungkin (rotasi, pembalikan, kasing). Pola regex memiliki semua kemungkinan - hanya menggunakan satu loop. Juga, string untuk mencari termasuk string input dalam versi normal dan baris terbalik, jadi tidak ada perulangan di sana.
RootTwo