Je chasse l'alphabet depuis un moment

18

Vous savez, nous avons eu beaucoup de défis "alphabet" récemment. ( un deux trois quatre cinq .) Bien que j'aime un bon défi, et ces défis étaient très amusants, je pense qu'il est temps de changer de rythme. Nous devons exclure de tels défis à l'avenir. Il est temps d' automatiser !

Vous allez trouver des alphabets pour moi, et pour l'automatisation (et pour la gloire!) Les alphabets sont difficiles et aiment se déguiser. [citation nécessaire] Vous devrez tenir compte des facteurs suivants:

  1. Les alphabets peuvent être en majuscules ou en minuscules (mais pas les deux). Donc, vous devez rechercher ABCDEFGHIJKLMNOPQRSTUVWXYZet abcdefghijklmnopqrstuvwxyz, mais pas AbCdeFGhIJkLmNOpQRsTuvwxyZ. Autrement dit, ne recherchez que les alphabets composés entièrement d'un cas.
  2. Les alphabets peuvent se déplacer. ils peuvent ne pas toujours commencer par A, mais peuvent plutôt commencer par Gou U. Vous devrez donc chercher des choses comme OPQRSTUVWXYZABCDEFGHIJKLMN.
  3. Les alphabets ne lisent pas toujours vers l'avant. Ils peuvent également lire en arrière, en haut et en bas. Par exemple, ZYXWVUTSRQPONMLKJIHGFEDCBAest également un alphabet valide.

Voici un exemple d'une chaîne qui a un alphabet:

JIHGFEDCBAZYXWVUTSRQPONMLK

Il s'agit d'un alphabet décalé orienté vers l'arrière:

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

Il contient également un 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

c'est un alphabet orienté vers le bas:

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

Votre défi est d'écrire un programme, une fonction, etc. qui, étant donné une chaîne, génère / renvoie une valeur véridique si la chaîne contient au moins un alphabet, ou une valeur falsey sinon. Il s'agit d'un , donc le programme le plus court en octets l'emporte.

Cas de test

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

Falsey

Hello, World!

KLMNOPQRSTUVWXYZABCDEF

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

A
 BCDEFGHIJKLMNOPQRSTUVWXYZ

ABCDEFGHIJKLmnopqrstuvwxyz
Conor O'Brien
la source
16
"J'en ai marre des défis de l'alphabet. Voici un défi de l'alphabet." lol +1
AdmBorkBork
Pouvons-nous avoir l'entrée remplie d'espaces pour former un rectangle? : 3
Downgoat
@Downgoat Oui, vous le pouvez.
Conor O'Brien
1
Pouvons-nous prendre un tableau 2D de chaînes? Chaque ligne serait une ligne, rembourrée à droite avec des espaces pour former un rectangle
Luis Mendo

Réponses:

5

Gelée , 28 23 22 octets

1 octet merci à Dennis.

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

Essayez-le en ligne!

Prend un tableau de chaînes.

Leaky Nun
la source
4
comment la gelée est-elle toujours si courte .___.
Downgoat
@Downgoat êtes-vous Jelly?
Patrick Roberts
2
@PatrickRoberts <s> oui </s> non je suis chèvre
Downgoat
2

Cheddar, 148 octets

(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

Essayez-le en ligne!

Non copmeting, 146 132 octets

C'est exactement la même chose que ci-dessus, sauf qu'il map(...?1:0).sumest devenuany(...) .

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

Plutôt lent mais ça marche ¯ \ _ (ツ) _ / ¯. anyfonction ajoutée après la date de sortie du challenge.

L'entrée ne besoin d'être complétée d'espaces. Mais si une entrée ne fonctionne pas, remplissez-la avec des espaces pour créer un rectangle. leturn fonction est vraiment capricieuse et je ne sais pas quand ça marche et quand ça ne marche pas

Explication

Boucle à travers tous les cycles d'alphabet possibles. À chaque itération, vérifiez si le cycle actuel de l'alphabet existe dans la chaîne, sinon, vérifiez si l'une des rotations possibles de la chaîne a l'alphabet.

Non golfé

(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
la source
Que veut c?dire?
Conor O'Brien
@ ConorO'Brien c?signifie argument optionnel. essentiellement le même quec=nil
Downgoat
Faites une version concurrente, puis mettez cette version non concurrente en bas.
Leaky Nun
@LeakyNun travailler là - dessus, ne peut pas comprendre comment , sans {}que
Downgoat
1
any(...)est justemap(...?1:0).sum
Leaky Nun
2

05AB1E, 43 octets

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

Explication en bref

Obtenez différentes variantes d'alphabet (majuscules, sans majuscules, inversées, normales) et stockez-les dans X.

A‚Duìvy26FÀD}})U

Obtenez chaque ligne et colonne d'entrée sous forme de liste de chaînes.

                 |Dø€J)˜

Vérifiez chacune de ces chaînes si elle contient une variation de l'alphabet.

                        vXDgs`rFysk>ˆ}}

La somme et la double négation donnent 1 pour vrai et 0 pour faux.

                                       ¯O__

Essayez-le en ligne

Emigna
la source
0

Python, 182 octets

Ne se sent pas très «golfé», mais ...

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

Théorie de fonctionnement:

Tout d'abord, créez un modèle d'expression régulière combinant tous les alphabets possibles:

p=P.join(a[i:]+a[:i] for i in range(26))construit une chaîne de toutes les rotations de 'a' joint à '|'. par exemple "abc ... z | bcd ... za | ..."

p+=P+p[::-1] ajoute une version inversée de lui-même.

p+=P+p.upper() ajoute une version majuscule.

Créez ensuite une longue chaîne combinant l'original set une version des avec les colonnes transformées en lignes:

N.join(map(''.join,zip(*s.split(N)))) retourne les lignes et les colonnes, donc 'a \ nb \ nc' devient 'abc'

retourne vrai si le motif est dans la longue chaîne.

RootTwo
la source
Je suis sûr que vous n'avez pas besoin d'expressions régulières pour ce faire; en particulier, invérifie la sous-chaîne.
Leaky Nun
@LeakyNun, j'essayais d'éviter beaucoup de boucles sur les alphabets possibles (rotations, inversions, casse). Le modèle regex a toutes les possibilités - en utilisant une seule boucle. De plus, la chaîne à rechercher inclut la chaîne d'entrée dans les versions normale et inversée, donc pas de boucle non plus.
RootTwo