Bir süredir alfabe avı yapıyorum


18

Biliyorsun, son zamanlarda bir çok "alfabe" zorluğu yaşadık. ( bir iki üç dört beş .) İyi bir meydan okumayı sevdiğimde ve bu meydan okumalar çok eğlenceliyken, bence hız değiştirme zamanı. Gelecekte bu tür zorlukları dışlamalıyız. Otomasyon zamanı !

Benim için ve otomasyon (ve ihtişam için!) İçin bazı alfabeler bulacaksınız. Alfabe zor ve kendilerini gizlemek istiyor. [alıntı gerekli] Aşağıdaki faktörleri hesaba katmanız gerekir:

  1. Alfabe büyük veya küçük harf olabilir (her ikisi birden değil). Yani, aramaya gerek ABCDEFGHIJKLMNOPQRSTUVWXYZve abcdefghijklmnopqrstuvwxyzancak AbCdeFGhIJkLmNOpQRsTuvwxyZ. Yani, sadece tamamen bir durumdan oluşan alfabe arayın.
  2. Alfabeler kayabilir. her zaman ile başlamayabilirler A, bunun yerine Gveya ile başlayabilirler U. Yani böyle şeyleri aramalısın OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Alfabeler her zaman ileriye doğru okunmayabilir. Ayrıca geriye, yukarı ve aşağı okuyabilirler. Örneğin, ZYXWVUTSRQPONMLKJIHGFEDCBAgeçerli bir alfabe.

Alfabesi olan bir dize örneği:

JIHGFEDCBAZYXWVUTSRQPONMLK

Bu geriye dönük, kaydırılmış bir alfabe:

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

Bu ayrıca bir alfabe içerir:

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

aşağı yönlü bir alfabe:

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

Zorluğunuz, bir dize verildiğinde, dize en az bir alfabe veya başka bir falsey değeri içeriyorsa bir doğruluk değeri veren / döndüren bir program, işlev vb. Yazmaktır. Bu bir , bu yüzden bayttaki en kısa program kazanıyor.

Test senaryoları

Doğru

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
"Alfabe zorluklarından bıktım. İşte bir alfabe zorluğu." lol +1
AdmBorkBork

Girdinin bir dikdörtgen oluşturmak için boşluklarla doldurulmasını sağlayabilir miyiz? : 3
Downgoat

@Downgoat Evet, yapabilirsiniz.
Conor O'Brien


1
2B dizeler dizisi alabilir miyiz? Her sıra bir dikdörtgen oluşturacak şekilde boşluklarla doldurulmuş bir çizgi olacaktır
Luis Mendo

Yanıtlar:



2

Çedar, 148 bayt

(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

Çevrimiçi deneyin!

Sigara copmeting, 146 132 bayt

Bu, olmadıkça yukarıdaki ile tamamen aynıdır .map(...?1:0).sumany(...)

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

Oldukça yavaş ama çalışıyor ¯ \ _ (ツ) _ / ¯. anydeneme çıkış tarihinden sonra işlev eklendi .

Giriş gelmez beyaz alanlara sahip yastıklı gerekmektedir. Ancak bir giriş çalışmazsa, dikdörtgen oluşturmak için boşluklarla doldurun. turnFonksiyon gerçekten titiz ve öyle değil zaman zaman çalıştığını emin değilim ve

açıklama

Alfabenin tüm olası döngülerinde döngüler. Her yinelemede, geçerli alfabe döngüsünün dizede olup olmadığını kontrol edin, yoksa dizenin olası rotasyonlarından herhangi birinin alfabeye sahip olup olmadığını kontrol edin.

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

Ne anlama c?geliyor?
Conor O'Brien

@ ConorO'Brien c?isteğe bağlı argüman anlamına gelir. temelde aynıc=nil
Downgoat

Rakip bir sürüm oluşturun, ardından bu rakip olmayan sürümü en alta koyun.
Leaky Nun

@LeakyNun üzerinde çalışıyor, nasıl {}olsa olmadan
anlayamıyorum

1
any(...)sadecemap(...?1:0).sum
Leaky Nun

2

05AB1E, 43 bayt

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

Kısaca açıklama

Farklı alfabe varyasyonları (büyük harf, büyük harf, ters, normal) edinin ve X'te saklayın.

A‚Duìvy26FÀD}})U

Girişlerin her satırını ve sütununu bir dize listesi olarak alın.

                 |Dø€J)˜

Alfabenin bir varyasyonunu içeriyorsa, bu tür dizelerin her birini kontrol edin.

                        vXDgs`rFysk>ˆ}}

Sum ve double negate, true için 1 ve false için 0 verir.

                                       ¯O__

Çevrimiçi deneyin


0

Python, 182 bayt

Çok 'golf' hissetmiyorum ama ...

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

Operasyon teorisi:

İlk olarak, tüm olası alfabeleri birleştiren bir normal ifade deseni oluşturun:

p=P.join(a[i:]+a[:i] for i in range(26))'|' ile birleştirilmiş tüm 'a' dönüşlerinden oluşan bir dize oluşturur. örneğin "abc ... z | bcd ... za | ..."

p+=P+p[::-1] ters bir sürüm ekler.

p+=P+p.upper() büyük harfli bir sürüm ekler.

Ardından, orijinal sile bir sürümünü ssatırlara dönüştürülmüş sütunlarla birleştiren uzun bir dize oluşturun :

N.join(map(''.join,zip(*s.split(N)))) satırları ve sütunları çevirir, böylece 'a \ nb \ nc' 'abc' olur

desen uzun dizgideyse true değerini döndürür.


Bunu yapmak için regex'e ihtiyacınız olmadığından eminim; özellikle, inalt dize olup olmadığını kontrol eder.
Leaky Nun

@LeakyNun, olası alfabe üzerinde çok sayıda döngüden kaçınmaya çalışıyordum (dönüşler, ters dönüşler, durum). Normal ifade modelinin tüm olanakları vardır - sadece bir döngü kullanarak. Ayrıca, aranacak dize hem normal hem de satır döndürülmüş sürümlerde giriş dizesini içerir, bu nedenle orada da döngü olmaz.
RootTwo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.