Ich bin schon eine Weile auf Alphabetjagd

18

Weißt du, wir hatten in letzter Zeit viele "Alphabet" -Herausforderungen. ( eins zwei drei vier fünf .) Obwohl ich eine gute Herausforderung liebe und diese Herausforderungen sehr lustig waren, denke ich, ist es Zeit für eine Abwechslung. Wir müssen solche Herausforderungen in Zukunft ausschließen. Es ist Zeit für Automatisierung !

Du wirst ein paar Alphabete für mich und für die Automatisierung (und für den Ruhm!) Finden. Alphabete sind knifflig und verkleiden sich gerne. [citation benötigte] Sie werden für die folgenden Faktoren Rechnung benötigen:

  1. Alphabete können in Groß- oder Kleinbuchstaben geschrieben werden (aber nicht in beiden Fällen). Also musst du suchen ABCDEFGHIJKLMNOPQRSTUVWXYZund abcdefghijklmnopqrstuvwxyz, aber nicht AbCdeFGhIJkLmNOpQRsTuvwxyZ. Das heißt, suchen Sie nur nach Alphabeten, die nur aus einem Fall bestehen.
  2. Alphabete können sich verschieben. Sie beginnen möglicherweise nicht immer mit A, sondern mit Goder U. Also musst du nach Dingen wie suchen OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Alphabete werden möglicherweise nicht immer vorwärts gelesen. Sie können auch rückwärts, aufwärts und abwärts lesen. ZB ZYXWVUTSRQPONMLKJIHGFEDCBAist auch ein gültiges Alphabet.

Hier ist ein Beispiel für eine Zeichenfolge mit einem Alphabet:

JIHGFEDCBAZYXWVUTSRQPONMLK

Dies ist ein rückwärtsgerichtetes, verschobenes Alphabet:

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

Dies auch enthält ein Alphabet:

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

Es ist ein nach unten gerichtetes Alphabet:

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

Ihre Herausforderung besteht darin, ein Programm, eine Funktion usw. zu schreiben, das / die bei gegebener Zeichenfolge einen Wahrheitswert ausgibt / zurückgibt, wenn die Zeichenfolge mindestens ein Alphabet enthält, oder ansonsten einen Falsey-Wert. Dies ist ein , also gewinnt das kürzeste Programm in Bytes.

Testfälle

Wahrheit

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
quelle
16
"Ich habe die Alphabet-Herausforderungen satt. Hier ist eine Alphabet-Herausforderung." lol +1
AdmBorkBork
Können wir die Eingabe mit Leerzeichen auffüllen, um ein Rechteck zu bilden? : 3
Downgoat
@Downgoat Ja, das kannst du.
Conor O'Brien
1
Können wir ein 2D-Array von Zeichenfolgen nehmen? Jede Zeile wäre eine Linie, rechts mit Leerzeichen aufgefüllt, um ein Rechteck zu bilden
Luis Mendo

Antworten:

5

Jelly , 28 23 22 Bytes

1 Byte danke an Dennis.

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

Probieren Sie es online!

Nimmt eine Reihe von Zeichenfolgen.

Undichte Nonne
quelle
4
wat wie ist jelly immer so kurz .___.
Downgoat
@ Downgoat bist du Jelly?
Patrick Roberts
2
@PatrickRoberts <s> Ja </ s> Nein, ich bin Ziege
Downgoat
2

Cheddar, 148 Bytes

(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

Probieren Sie es online!

Nicht-Copmeting, 146 132 Bytes

Dies ist genau das gleiche wie oben, außer es map(...?1:0).sumwurde 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))

Ziemlich langsam, aber es funktioniert ¯ \ _ (ツ) _ / ¯. anyFunktion nach dem Veröffentlichungsdatum der Challenge hinzugefügt .

Die Eingabe muss nicht mit Leerzeichen aufgefüllt werden. Wenn eine Eingabe jedoch nicht funktioniert, füllen Sie sie mit Leerzeichen auf, um ein Rechteck zu erstellen. Die turnFunktion ist wirklich knifflig und ich bin mir nicht sicher, wann sie funktioniert und wann nicht

Erläuterung

Durchläuft alle möglichen Alphabetzyklen. Prüfen Sie bei jeder Iteration, ob der aktuelle Zyklus des Alphabets in der Zeichenfolge vorhanden ist. Ist dies nicht der Fall, prüfen Sie, ob eine der möglichen Rotationen der Zeichenfolge das Alphabet aufweist.

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
    )
  )
Downgoat
quelle
Was heißt c?das?
Conor O'Brien
@ ConorO'Brien c?bedeutet optionales Argument. Im Grunde das gleiche wiec=nil
Downgoat
Erstelle eine konkurrierende Version und füge diese nicht konkurrierende Version unten ein.
Undichte Nonne
@LeakyNun daran zu arbeiten, kann nicht herausfinden , wie man ohne {}wenn
Downgoat
1
any(...)is justmap(...?1:0).sum
Leaky Nun
2

05AB1E, 43 Bytes

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

Erklärung kurz

Holen Sie sich verschiedene Variationen des Alphabets (Großbuchstaben, ohne Großbuchstaben, umgekehrt, normal) und speichern Sie in X.

A‚Duìvy26FÀD}})U

Holen Sie sich jede Zeile und Spalte der Eingabe als Liste von Zeichenfolgen.

                 |Dø€J)˜

Überprüfen Sie jede solche Zeichenfolge, wenn sie eine Variation des Alphabets enthält.

                        vXDgs`rFysk>ˆ}}

Summiere und negiere doppelt und gib 1 für wahr und 0 für falsch.

                                       ¯O__

Probieren Sie es online aus

Emigna
quelle
0

Python, 182 Bytes

Fühlt sich nicht sehr "golfen", aber ...

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

Theorie der Arbeitsweise:

Erstellen Sie zunächst ein Regex-Muster, in dem alle möglichen Alphabete kombiniert sind:

p=P.join(a[i:]+a[:i] for i in range(26))Erstellt eine Folge aller Rotationen von 'a', die mit '|' verknüpft sind. zB "abc ... z | bcd ... za | ..."

p+=P+p[::-1] fügt eine umgekehrte Version von sich selbst an.

p+=P+p.upper() Hängt eine Großbuchstabenversion an.

Erstellen Sie dann eine lange Zeichenfolge, die das Original sund eine Version von kombiniert, swobei die Spalten in Zeilen umgewandelt werden:

N.join(map(''.join,zip(*s.split(N)))) Kehrt die Zeilen und Spalten um, sodass aus 'a \ nb \ nc' 'abc' wird.

Gibt true zurück, wenn sich das Muster in der langen Zeichenfolge befindet.

RootTwo
quelle
Ich bin mir ziemlich sicher, dass Sie dazu keinen regulären Ausdruck benötigen. inPrüft speziell auf Teilzeichenfolgen.
Undichte Nonne
@LeakyNun, ich habe versucht, viele Schleifen über die möglichen Buchstaben (Drehungen, Umkehrungen, Groß- / Kleinschreibung) zu vermeiden. Das Regex-Muster bietet alle Möglichkeiten - mit nur einer Schleife. Außerdem enthält die zu durchsuchende Zeichenfolge die Eingabezeichenfolge sowohl in der normalen als auch in der zeilenweise umgedrehten Version, sodass auch dort keine Schleife ausgeführt wird.
RootTwo