나는 한동안 알파벳 사냥을 해왔다


18

우리는 최근에 많은 "알파벳"문제를 겪었습니다. ( 1 2 3 4 5. ) 좋은 도전을 좋아하고 그 도전이 매우 재미 있었지만, 이제는 변화의시기라고 생각합니다. 앞으로 그러한 과제를 배제해야합니다. 자동화를 위한 시간입니다 !

당신은 저를 위해, 그리고 자동화를 위해 (그리고 영광을 위해) 알파벳을 찾을 것입니다. 알파벳은 까다 롭고 변장하기를 좋아합니다. [citation-eded] 다음 요인을 고려해야합니다.

  1. 알파벳은 대문자 또는 소문자 일 수 있습니다 (둘다는 아님). 그래서, 당신이 볼 필요가 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 하지만 AbCdeFGhIJkLmNOpQRsTuvwxyZ. 즉, 완전히 하나의 경우로 구성된 알파벳 만 찾으십시오.
  2. 알파벳이 바뀔 수 있습니다. 그들은 항상 함께 시작되지 않을 수 A있지만, 대신에 시작할 수 있습니다 G또는 U. 따라서와 같은 것을 찾아야합니다 OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. 알파벳이 항상 앞으로 읽을 수있는 것은 아닙니다. 또한 앞뒤로 읽을 수도 있습니다. 예를 들어, ZYXWVUTSRQPONMLKJIHGFEDCBA유효한 알파벳입니다.

다음은 알파벳이있는 문자열의 예입니다.

JIHGFEDCBAZYXWVUTSRQPONMLK

이것은 거꾸로 된 알파벳입니다.

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

여기 에는 알파벳 포함됩니다 :

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

하향식 알파벳입니다.

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

당신의 도전은 문자열이 주어진다면, 문자열이 적어도 하나의 알파벳을 포함하면 참 값을 출력 / 반환하거나 그렇지 않으면 거짓 값을 출력하는 프로그램, 함수 등을 작성하는 것입니다. 이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.

테스트 사례

Truthy

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

팔시

Hello, World!

KLMNOPQRSTUVWXYZABCDEF

K        ZYXW
 L         V
  M       U
   N     T
    O   S
     P R
      Q

A
 BCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLmnopqrstuvwxyz

16
"알파벳 챌린지가 아파요. 알파벳 챌린지입니다." lol +1
AdmBorkBork

사각형을 형성하기 위해 공백으로 입력을 채울 수 있습니까? : 3
Downgoat

@ Downgoat 그렇습니다.
코너 오브라이언


1
우리는 2D 문자열 배열을 취할 수 있습니까? 각 행은 오른쪽에 공백이
채워져

답변:



2

체다, 148 바이트

(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

온라인으로 사용해보십시오!

비 구속, 146 132 바이트

이것은이다 동일한 제외하고 위와 같이 map(...?1:0).sum되었다 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))

오히려 느리지 만 ¯ \ _ (ツ) _ / ¯ 작동합니다. 추가any챌린지 출시 날짜 이후 기능이 .

입력 공백으로 채워질 필요 가 없습니다 . 그러나 입력이 작동하지 않으면 공백으로 채워 사각형을 만듭니다. 이 turn함수는 정말 까다 롭고 언제 작동하는지 확실하지 않습니다.

설명

알파벳의 가능한 모든주기를 반복합니다. 각 반복에서 현재 알파벳 사이클이 문자열에 있는지 확인하고, 그렇지 않은 경우 문자열의 가능한 회전에 알파벳이 있는지 확인하십시오.

언 골프

(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?뜻입니까?
코너 O'Brien

@ ConorO'Brien c?은 선택적 인수를 의미합니다. 기본적으로 동일c=nil
Downgoat

경쟁 버전을 만든 다음이 비 경쟁 버전을 맨 아래에 놓습니다.
Leaky Nun

이 작업 @LeakyNun 방법을 알아낼 수 없습니다없는 {}것처럼
Downgoat

1
any(...)그냥map(...?1:0).sum
Leaky Nun

2

05AB1E, 43 바이트

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

간단히 설명

알파벳의 다양한 변형 (캡, 노캡, 리버스, 노멀)을 가져와 X에 저장

A‚Duìvy26FÀD}})U

입력의 각 행과 열을 문자열 목록으로 가져옵니다.

                 |Dø€J)˜

알파벳의 변형이 포함 된 각 문자열을 확인하십시오.

                        vXDgs`rFysk>ˆ}}

합계와 배가 부정, true는 1, false는 0

                                       ¯O__

온라인으로 사용해보십시오


0

파이썬, 182 바이트

매우 '골프'느낌이 없지만 ...

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

작동 이론 :

먼저 가능한 모든 알파벳을 결합한 정규식 패턴을 만드십시오.

p=P.join(a[i:]+a[:i] for i in range(26))'|'와 결합 된 'a'의 모든 회전 문자열을 작성합니다. 예 : "abc ... z | bcd ... za | ..."

p+=P+p[::-1] 자신의 역 버전을 추가합니다.

p+=P+p.upper() 대문자 버전을 추가합니다.

그런 다음 열을 행으로 바꾼 원래 s버전과 버전을 결합하는 긴 문자열을 만듭니다 s.

N.join(map(''.join,zip(*s.split(N)))) 행과 열을 뒤집기 때문에 'a \ nb \ nc'는 'abc'가됩니다.

패턴이 긴 문자열에 있으면 true를 리턴하십시오.


이 작업을 수행하기 위해 정규식이 필요하지 않습니다. 특히 in하위 문자열을 확인합니다.
Leaky Nun

@LeakyNun, 가능한 알파벳 (회전, 반전, 사례)에 대한 많은 루프를 피하려고했습니다. 정규식 패턴은 하나의 루프를 사용하여 모든 가능성을 가지고 있습니다. 또한 검색 할 문자열에는 일반 버전과 행 넘김 버전의 입력 문자열이 포함되므로 루핑되지 않습니다.
RootTwo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.