私はしばらくの間アルファベット狩りをしてきました


18

ええ、最近、「アルファベット」の課題がたくさんあります。1 2 3 4 5)。私は良いチャレンジが大好きで、それらのチャレンジはとても楽しかったですが、今はペースを変える時だと思います。将来、このような課題を排除する必要があります。自動化の時間です!

あなたは私のために、そして自動化のために(そして栄光のために!)いくつかのアルファベットを見つけるでしょう。アルファベットはトリッキーで、自分自身を隠すのが好きです。[引用が必要]次の要素を考慮する必要があります。

  1. アルファベットは大文字でも小文字でもかまいません(両方ではありません)。だから、あなたが探しする必要があるABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz、ではなくAbCdeFGhIJkLmNOpQRsTuvwxyZ。つまり、完全に1つのケースで構成されているアルファベットのみを探します。
  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

あなたの課題は、文字列が与えられた場合、文字列に少なくとも1つのアルファベットが含まれる場合は真理値を返し、そうでない場合は偽値を出力するプログラムや関数などを書くことです。これはであるため、バイト単位の最短プログラムが優先されます。

テストケース

真実の

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はい、できます。
コナーオブライエン


1
文字列の2D配列を取得できますか?各行は長方形を形成するスペースを右詰めラインであろう
ルイスMendo

回答:



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

かなり遅いが動作する¯\ _(ツ)_ /¯。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?意味ですか?
コナーオブライエン

@ ConorO'Brien c?はオプションの引数を意味します。基本的に同じc=nil
-Downgoat

競合バージョンを作成し、この非競合バージョンを下部に配置します。
漏れの修道女

@LeakyNunがそれに取り組んでいるが、それなしで{}はどうすればよいかわからない
-Downgoat

1
any(...)ちょうどmap(...?1:0).sum
リーキー修道女

2

05AB1E、43バイト

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

要するに説明

アルファベットのさまざまなバリエーション(キャップ​​、キャップなし、反転、標準)を取得し、Xに保存します。

A‚Duìvy26FÀD}})U

入力の各行と列を文字列のリストとして取得します。

                 |Dø€J)˜

アルファベットのバリエーションが含まれている場合は、そのような各文字列を確認してください。

                        vXDgs`rFysk>ˆ}}

和と二重否定。真の場合は1、偽の場合は0を返します。

                                       ¯O__

オンラインで試す


0

Python、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() 大文字バージョンを追加します。

次に、元ss、列が行に変換されたバージョンを組み合わせた長い文字列を作成します。

N.join(map(''.join,zip(*s.split(N)))) 行と列を反転するため、「a \ nb \ nc」は「abc」になります

パターンが長い文字列にある場合はtrueを返します。


これを行うために正規表現が必要ないことを確認してください。具体的にinは、部分文字列をチェックします。
リーキー修道女

@LeakyNun、可能性のあるアルファベット(回転、反転、大文字小文字)でのループの多くを回避しようとしていました。正規表現パターンにはすべての可能性があり、ループを1つだけ使用します。また、検索する文字列には、通常バージョンと行反転バージョンの両方の入力文字列が含まれているため、そこでのループもありません。
-RootTwo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.