수수께끼를 크래킹?


65

소개

Enigma는 제 2 차 세계 대전에 사용 된 최초의 전기 기계식 로터 암호기 중 하나였습니다. 즉, 단일 문자를 코딩하면 다음 문자의 키가 변경됩니다. 이것은 거대한 키 공간으로 인해 독일인들 에게는 깨지지 않는 것으로 간주 되었습니다. 무차별 강요조차 거의 불가능했습니다. 그러나 Enigma에서 설계 오류가 발생했습니다. 편지를 암호화하면 결코 그 자체로 나타나지 않습니다. 즉, 문자 A는 문자를 제외한 모든 문자를 암호화 할 수 있습니다 A.

코드화 된 메시지의 예를 보자.

BHGEFXWFTIUPITHHLPETTTCLOEWOELMRXXPAKAXMAMTXXUDLTWTNHKELEPPLHPRQ

일반적인 독일어 단어는 WETTERBERICHT영어로 된 날씨 보고서입니다. 위의 프린시 페를 사용하여 단어가 가능한 위치를 결정할 수 있습니다.

BHGEFXWFTIUPITHHLPETTTCLOEWOELMRXXPAKAXMAMTXXUDLTWTNHKELEPPLHPRQ
WETTERBERICHT
         ^

I자체로 암호화 할 수 없기 때문에 불가능 합니다. 따라서 한 곳으로 이동합니다.

BHGEFXWFTIUPITHHLPETTTCLOEWOELMRXXPAKAXMAMTXXUDLTWTNHKELEPPLHPRQ
 WETTERBERICHT
             ^

이것은 또한 불가능하기 때문에 다른 장소로 다시 이동합니다.

BHGEFXWFTIUPITHHLPETTTCLOEWOELMRXXPAKAXMAMTXXUDLTWTNHKELEPPLHPRQ
  WETTERBERICHT
   ^

다시는 불가능합니다. 실제로, 가능한 첫 번째 발생 WETTERBERICHT은 다음과 같습니다.

BHGEFXWFTIUPITHHLPETTTCLOEWOELMRXXPAKAXMAMTXXUDLTWTNHKELEPPLHPRQ
             WETTERBERICHT
0123456789012345678901234567890123456789012345678901234567890123
             ^
             13

따라서 가능한 첫 번째 발생의 0 인덱스 위치 인 13 을 반환합니다 .

작업

  • 코드화 된 메시지와 단어가 주어지면 가능한 첫 번째 색인을 찾으십시오 .
  • 기본 대문자 알파벳 문자 만 사용한다고 가정합니다 ( ABCDEFGHIJKLMNOPQRSTUVWXYZ).
  • 어떤 선두로부터 찾을 수없는 경우, 출력 어떤 수있는 음의 정수, 문자, 또는 아무것도를 (예를 들어 -1, X).
  • 별도의 줄 바꿈, 목록 또는 기타 항목에서 입력을 인수로 사용할 수 있습니다.
  • 이것은 이므로 바이트 수가 가장 적은 제출이 승리합니다!

테스트 사례

Input: BHGEFXWFTIUPITHHLPETTTCLOEWOELM, WETTERBERICHT
Output: 13

Input: ABCDEFGHIJKL, HELLO
Output: 0

Input: EEEEEEEEEEEE, HELLO
Output: -1

Input: XEEFSLBSELDJMADNADKDPSSPRNEBWIENPF, DEUTSCHLAND
Output: 11

Input: HKKH, JJJJJ
Output: -1

1
음, 예제 중간에 인코딩 된 문자열이 왜 변합니까?
Doorknob

36
@Doorknob 冰 ¯ \ _ (ツ) _ / ¯
Adnan

도입부에는 다음과 같은 문제가있다 : 1. 키 공간 때문에 깨지지 않는 것으로 여겨지지 않았지만, 문자로 변환 된 문자를 변경하는 시스템 때문에 "문자를 암호화하면 결코 그 자체가되지 않는다". -예, 사용 가능한 문자 수 후에 하나를 반복해야합니다.
Zelphir Kaltstahl

3
자체 암호화하는 @Zelphir, 나는 E결코 결과가되지 않음을 의미 했습니다 E. 이것이이 모든 도전에 관한 것입니다.
Adnan

답변:


9

Pyth, 14 바이트

f!s.eqb@>zTkQ0

이것이 Ok인지 확실하지 않지만 입력이 불가능하면 stdout에 아무것도 기록되지 않으며 stderr에 0 나누기 오류가 기록됩니다. 두 줄로 입력을 받고 두 번째 줄은 따옴표로 묶습니다.

설명:

               - autoassign z to first input
               - autoassign Q to second input
f            0 - The first value starting from 0 where the output is truthy
   .e       Q  - Enumerate over the second value
        >zT    - z[T:]
       @   k   - The kth item (number in enumeration)
      b        - The character in the enumeration
     q         - Are the two characters equal?
  s            - Sum the values
 !             - Invert them (want first where there isn't a collision)

여기 사용해보십시오!


55

자바 스크립트, 40

(c,p)=>c.search(p.replace(/./g,"[^$&]"))

을 사용 replace하면 일반 텍스트 입력을 일반 형식의 식 /[^H][^E][^L][^L][^O]/(예 : 일반 텍스트 입력 HELLO) 으로 매핑 한 다음 정규 표현식 search과 일치하는 암호 텍스트 하위 문자열의 첫 번째 인덱스를 테스트하는 데 사용 됩니다. "최초의 문자가없는 경우에는 패턴이 정규식 수단 H번째 문자가 아닌, E등,"

$&replace 첫 번째 replace인수 와 일치하는 값 (이 경우 각 단일 문자와 일치 /./) 을 대체 하는 출력 의 특수 순서입니다 .


16
오, 정말 똑똑한 해결책입니다!
문 손잡이

2
나는 몰랐다 $&! 오늘 내 무언가를 가르쳐 주셔서 감사합니다.
ETHproductions

1
@ETHproductions 나도 오늘까지! 또한 $`$' 에 대해
배웠고이

1
와우, 대단해! 문서를 더 자주 읽어야합니다.)
ETHproductions

43

튜링 머신 시뮬레이터 -15660 바이트 (비경쟁)

튜링 머신 코드없이 Enigma 챌린지를 가질 수 없습니다.

0 * * l 0
0 _ _ l ,
, _ , l 1
1 _ 0 r 2
2 * * r 2
2 , * r 3
3 * * r 3
3 , * r 4
4 * * r 4
4 _ * r 13
4 A a l a'                                                                                                                                                                                                        
4 B b l b'                                                                                                                                                                                                        
4 C c l c'                                                                                                                                                                                                        
4 D d l d'                                                                                                                                                                                                        
4 E e l e'                                                                                                                                                                                                        
4 F f l f'                                                                                                                                                                                                        
4 G g l g'                                                                                                                                                                                                        
4 H h l h'                                                                                                                                                                                                        
4 I i l i'                                                                                                                                                                                                        
4 J j l j'                                                                                                                                                                                                        
4 K k l k'                                                                                                                                                                                                        
4 L l l l'                                                                                                                                                                                                        
4 M m l m'                                                                                                                                                                                                        
4 N n l n'                                                                                                                                                                                                        
4 O o l o'                                                                                                                                                                                                        
4 P p l p'                                                                                                                                                                                                        
4 Q q l q'                                                                                                                                                                                                        
4 R r l r'                                                                                                                                                                                                        
4 S s l s'                                                                                                                                                                                                        
4 T t l t'                                                                                                                                                                                                        
4 U u l u'                                                                                                                                                                                                        
4 V v l v'                                                                                                                                                                                                        
4 W w l w'                                                                                                                                                                                                        
4 X x l x'                                                                                                                                                                                                        
4 Y y l y'                                                                                                                                                                                                        
4 Z z l z'
a' * * l a'
a' , * l a
b' * * l b'
b' , * l b
c' * * l c'
c' , * l c
d' * * l d'
d' , * l d
e' * * l e'
e' , * l e
f' * * l f'
f' , * l f
g' * * l g'
g' , * l g
h' * * l h'
h' , * l h
i' * * l i'
i' , * l i
j' * * l j'
j' , * l j
k' * * l k'
k' , * l k
l' * * l l'
l' , * l l
m' * * l m'
m' , * l m
n' * * l n'
n' , * l n
o' * * l o'
o' , * l o
p' * * l p'
p' , * l p
q' * * l q'
q' , * l q
r' * * l r'
r' , * l r
s' * * l s'
s' , * l s
t' * * l t'
t' , * l t
u' * * l u'
u' , * l u
v' * * l v'
v' , * l v
w' * * l w'
w' , * l w
x' * * l x'
x' , * l x
y' * * l y'
y' , * l y
z' * * l z'
z' , * l z

a * * l a
a _ * r A
a a * r A
a b * r A
a c * r A
a d * r A
a e * r A
a f * r A
a g * r A
a h * r A
a i * r A
a j * r A
a k * r A
a l * r A
a m * r A
a n * r A
a o * r A
a p * r A
a q * r A
a r * r A
a s * r A
a t * r A
a u * r A
a v * r A
a w * r A
a x * r A
a y * r A
a z * r A
b * * l b
b _ * r B
b a * r B
b b * r B
b c * r B
b d * r B
b e * r B
b f * r B
b g * r B
b h * r B
b i * r B
b j * r B
b k * r B
b l * r B
b m * r B
b n * r B
b o * r B
b p * r B
b q * r B
b r * r B
b s * r B
b t * r B
b u * r B
b v * r B
b w * r B
b x * r B
b y * r B
b z * r B
c * * l c
c _ * r C
c a * r C
c b * r C
c c * r C
c d * r C
c e * r C
c f * r C
c g * r C
c h * r C
c i * r C
c j * r C
c k * r C
c l * r C
c m * r C
c n * r C
c o * r C
c p * r C
c q * r C
c r * r C
c s * r C
c t * r C
c u * r C
c v * r C
c w * r C
c x * r C
c y * r C
c z * r C
d * * l d
d _ * r D
d a * r D
d b * r D
d c * r D
d d * r D
d e * r D
d f * r D
d g * r D
d h * r D
d i * r D
d j * r D
d k * r D
d l * r D
d m * r D
d n * r D
d o * r D
d p * r D
d q * r D
d r * r D
d s * r D
d t * r D
d u * r D
d v * r D
d w * r D
d x * r D
d y * r D
d z * r D
e * * l e
e _ * r E
e a * r E
e b * r E
e c * r E
e d * r E
e e * r E
e f * r E
e g * r E
e h * r E
e i * r E
e j * r E
e k * r E
e l * r E
e m * r E
e n * r E
e o * r E
e p * r E
e q * r E
e r * r E
e s * r E
e t * r E
e u * r E
e v * r E
e w * r E
e x * r E
e y * r E
e z * r E
f * * l f
f _ * r F
f a * r F
f b * r F
f c * r F
f d * r F
f e * r F
f f * r F
f g * r F
f h * r F
f i * r F
f j * r F
f k * r F
f l * r F
f m * r F
f n * r F
f o * r F
f p * r F
f q * r F
f r * r F
f s * r F
f t * r F
f u * r F
f v * r F
f w * r F
f x * r F
f y * r F
f z * r F
g * * l g
g _ * r G
g a * r G
g b * r G
g c * r G
g d * r G
g e * r G
g f * r G
g g * r G
g h * r G
g i * r G
g j * r G
g k * r G
g l * r G
g m * r G
g n * r G
g o * r G
g p * r G
g q * r G
g r * r G
g s * r G
g t * r G
g u * r G
g v * r G
g w * r G
g x * r G
g y * r G
g z * r G
h * * l h
h _ * r H
h a * r H
h b * r H
h c * r H
h d * r H
h e * r H
h f * r H
h g * r H
h h * r H
h i * r H
h j * r H
h k * r H
h l * r H
h m * r H
h n * r H
h o * r H
h p * r H
h q * r H
h r * r H
h s * r H
h t * r H
h u * r H
h v * r H
h w * r H
h x * r H
h y * r H
h z * r H
i * * l i
i _ * r I
i a * r I
i b * r I
i c * r I
i d * r I
i e * r I
i f * r I
i g * r I
i h * r I
i i * r I
i j * r I
i k * r I
i l * r I
i m * r I
i n * r I
i o * r I
i p * r I
i q * r I
i r * r I
i s * r I
i t * r I
i u * r I
i v * r I
i w * r I
i x * r I
i y * r I
i z * r I
j * * l j
j _ * r J
j a * r J
j b * r J
j c * r J
j d * r J
j e * r J
j f * r J
j g * r J
j h * r J
j i * r J
j j * r J
j k * r J
j l * r J
j m * r J
j n * r J
j o * r J
j p * r J
j q * r J
j r * r J
j s * r J
j t * r J
j u * r J
j v * r J
j w * r J
j x * r J
j y * r J
j z * r J
k * * l k
k _ * r K
k a * r K
k b * r K
k c * r K
k d * r K
k e * r K
k f * r K
k g * r K
k h * r K
k i * r K
k j * r K
k k * r K
k l * r K
k m * r K
k n * r K
k o * r K
k p * r K
k q * r K
k r * r K
k s * r K
k t * r K
k u * r K
k v * r K
k w * r K
k x * r K
k y * r K
k z * r K
l * * l l
l _ * r L
l a * r L
l b * r L
l c * r L
l d * r L
l e * r L
l f * r L
l g * r L
l h * r L
l i * r L
l j * r L
l k * r L
l l * r L
l m * r L
l n * r L
l o * r L
l p * r L
l q * r L
l r * r L
l s * r L
l t * r L
l u * r L
l v * r L
l w * r L
l x * r L
l y * r L
l z * r L
m * * l m
m _ * r M
m a * r M
m b * r M
m c * r M
m d * r M
m e * r M
m f * r M
m g * r M
m h * r M
m i * r M
m j * r M
m k * r M
m l * r M
m m * r M
m n * r M
m o * r M
m p * r M
m q * r M
m r * r M
m s * r M
m t * r M
m u * r M
m v * r M
m w * r M
m x * r M
m y * r M
m z * r M
n * * l n
n _ * r N
n a * r N
n b * r N
n c * r N
n d * r N
n e * r N
n f * r N
n g * r N
n h * r N
n i * r N
n j * r N
n k * r N
n l * r N
n m * r N
n n * r N
n o * r N
n p * r N
n q * r N
n r * r N
n s * r N
n t * r N
n u * r N
n v * r N
n w * r N
n x * r N
n y * r N
n z * r N
o * * l o
o _ * r O
o a * r O
o b * r O
o c * r O
o d * r O
o e * r O
o f * r O
o g * r O
o h * r O
o i * r O
o j * r O
o k * r O
o l * r O
o m * r O
o n * r O
o o * r O
o p * r O
o q * r O
o r * r O
o s * r O
o t * r O
o u * r O
o v * r O
o w * r O
o x * r O
o y * r O
o z * r O
p * * l p
p _ * r P
p a * r P
p b * r P
p c * r P
p d * r P
p e * r P
p f * r P
p g * r P
p h * r P
p i * r P
p j * r P
p k * r P
p l * r P
p m * r P
p n * r P
p o * r P
p p * r P
p q * r P
p r * r P
p s * r P
p t * r P
p u * r P
p v * r P
p w * r P
p x * r P
p y * r P
p z * r P
q * * l q
q _ * r Q
q a * r Q
q b * r Q
q c * r Q
q d * r Q
q e * r Q
q f * r Q
q g * r Q
q h * r Q
q i * r Q
q j * r Q
q k * r Q
q l * r Q
q m * r Q
q n * r Q
q o * r Q
q p * r Q
q q * r Q
q r * r Q
q s * r Q
q t * r Q
q u * r Q
q v * r Q
q w * r Q
q x * r Q
q y * r Q
q z * r Q
r * * l r
r _ * r R
r a * r R
r b * r R
r c * r R
r d * r R
r e * r R
r f * r R
r g * r R
r h * r R
r i * r R
r j * r R
r k * r R
r l * r R
r m * r R
r n * r R
r o * r R
r p * r R
r q * r R
r r * r R
r s * r R
r t * r R
r u * r R
r v * r R
r w * r R
r x * r R
r y * r R
r z * r R
s * * l s
s _ * r S
s a * r S
s b * r S
s c * r S
s d * r S
s e * r S
s f * r S
s g * r S
s h * r S
s i * r S
s j * r S
s k * r S
s l * r S
s m * r S
s n * r S
s o * r S
s p * r S
s q * r S
s r * r S
s s * r S
s t * r S
s u * r S
s v * r S
s w * r S
s x * r S
s y * r S
s z * r S
t * * l t
t _ * r T
t a * r T
t b * r T
t c * r T
t d * r T
t e * r T
t f * r T
t g * r T
t h * r T
t i * r T
t j * r T
t k * r T
t l * r T
t m * r T
t n * r T
t o * r T
t p * r T
t q * r T
t r * r T
t s * r T
t t * r T
t u * r T
t v * r T
t w * r T
t x * r T
t y * r T
t z * r T
u * * l u
u _ * r U
u a * r U
u b * r U
u c * r U
u d * r U
u e * r U
u f * r U
u g * r U
u h * r U
u i * r U
u j * r U
u k * r U
u l * r U
u m * r U
u n * r U
u o * r U
u p * r U
u q * r U
u r * r U
u s * r U
u t * r U
u u * r U
u v * r U
u w * r U
u x * r U
u y * r U
u z * r U
v * * l v
v _ * r V
v a * r V
v b * r V
v c * r V
v d * r V
v e * r V
v f * r V
v g * r V
v h * r V
v i * r V
v j * r V
v k * r V
v l * r V
v m * r V
v n * r V
v o * r V
v p * r V
v q * r V
v r * r V
v s * r V
v t * r V
v u * r V
v v * r V
v w * r V
v x * r V
v y * r V
v z * r V
w * * l w
w _ * r W
w a * r W
w b * r W
w c * r W
w d * r W
w e * r W
w f * r W
w g * r W
w h * r W
w i * r W
w j * r W
w k * r W
w l * r W
w m * r W
w n * r W
w o * r W
w p * r W
w q * r W
w r * r W
w s * r W
w t * r W
w u * r W
w v * r W
w w * r W
w x * r W
w y * r W
w z * r W
x * * l x
x _ * r X
x a * r X
x b * r X
x c * r X
x d * r X
x e * r X
x f * r X
x g * r X
x h * r X
x i * r X
x j * r X
x k * r X
x l * r X
x m * r X
x n * r X
x o * r X
x p * r X
x q * r X
x r * r X
x s * r X
x t * r X
x u * r X
x v * r X
x w * r X
x x * r X
x y * r X
x z * r X
y * * l y
y _ * r Y
y a * r Y
y b * r Y
y c * r Y
y d * r Y
y e * r Y
y f * r Y
y g * r Y
y h * r Y
y i * r Y
y j * r Y
y k * r Y
y l * r Y
y m * r Y
y n * r Y
y o * r Y
y p * r Y
y q * r Y
y r * r Y
y s * r Y
y t * r Y
y u * r Y
y v * r Y
y w * r Y
y x * r Y
y y * r Y
y z * r Y
z * * l z
z , * r Z
z a * r Z
z b * r Z
z c * r Z
z d * r Z
z e * r Z
z f * r Z
z g * r Z
z h * r Z
z i * r Z
z j * r Z
z k * r Z
z l * r Z
z m * r Z
z n * r Z
z o * r Z
z p * r Z
z q * r Z
z r * r Z
z s * r Z
z t * r Z
z u * r Z
z v * r Z
z w * r Z
z x * r Z
z y * r Z
z z * r Z
A * * * 5
A A * l 6
B * * * 5
B B * l 6
C * * * 5
C C * l 6
D * * * 5
D D * l 6
E * * * 5
E E * l 6
F * * * 5
F F * l 6
G * * * 5
G G * l 6
H * * * 5
H H * l 6
I * * * 5
I I * l 6
J * * * 5
J J * l 6
K * * * 5
K K * l 6
L * * * 5
L L * l 6
M * * * 5
M M * l 6
N * * * 5
N N * l 6
O * * * 5
O O * l 6
P * * * 5
P P * l 6
Q * * * 5
Q Q * l 6
R * * * 5
R R * l 6
S * * * 5
S S * l 6
T * * * 5
T T * l 6
U * * * 5
U U * l 6
V * * * 5
V V * l 6
W * * * 5
W W * l 6
X * * * 5
X X * l 6
Y * * * 5
Y Y * l 6
Z * * * 5
Z Z * l 6
5 , * r 15
5 A a r 7
5 B b r 7
5 C c r 7
5 D d r 7
5 E e r 7
5 F f r 7
5 G g r 7
5 H h r 7
5 I i r 7
5 J j r 7
5 K k r 7
5 L l r 7
5 M m r 7
5 N n r 7
5 O o r 7
5 P p r 7
5 Q q r 7
5 R r r 7
5 S s r 7
5 T t r 7
5 U u r 7
5 V v r 7
5 W w r 7
5 X x r 7
5 Y y r 7
5 Z z r 7
7 * * r 7
7 , * r 4
6 * * l 6
6 _ * r 8
8 * _ r 9
9 * * r 9
9 _ * l 10
9 a A r 9
9 b B r 9
9 c C r 9
9 d D r 9
9 e E r 9
9 f F r 9
9 g G r 9
9 h H r 9
9 i I r 9
9 j J r 9
9 k K r 9
9 l L r 9
9 m M r 9
9 n N r 9
9 o O r 9
9 p P r 9
9 q Q r 9
9 r R r 9
9 s S r 9
9 t T r 9
9 u U r 9
9 v V r 9
9 w W r 9
9 x X r 9
9 y Y r 9
9 z Z r 9
10 * * l 10
10 , * l 11
11 * * l 11
11 , * l 12
12 _ 1 r 2
12 0 1 r 2
12 1 2 r 2
12 2 3 r 2
12 3 4 r 2
12 4 5 r 2
12 5 6 r 2
12 6 7 r 2
12 7 8 r 2
12 8 9 r 2
12 9 0 l 12
13 * _ l 13
13 , _ l 14
14 * _ l 14
14 , _ l halt
15 * * r 15
15 _ * l 16
16 * _ l 16
16 , _ l 17
17 * _ l 17
17 , _ l 18
18 * _ l 18
18 _ x * halt

여기서 테스트 해보세요

간략한 개요:

  1. 왼쪽에 카운터를 설정
  2. 대상에서 첫 번째 대문자를 찾아 소문자로 만드십시오. 모든 문자가 소문자이면 5 단계로 이동하십시오.
  3. 코드에서 첫 번째 대문자를 찾으십시오. 최근 문자가 일치하면 4 단계로 이동하십시오. 그렇지 않으면 문자를 소문자로 만들고 2 단계로 돌아가십시오.
  4. 증가 카운터, 모든 문자를 대문자로 만들고 코드의 첫 번째 문자를 삭제하십시오. 2 단계로 돌아가십시오. 코드에 문자가 남아 있지 않으면 테이프를 지우고 x를 인쇄하십시오.
  5. 카운터를 제외한 모든 테이프를 비 웁니다.

또한 테스트 할 때 입력 형식은 다음과 같아야합니다. code, target (공백 없음)
KoreanwGlasses

이것을 만드는 데 얼마나 걸렸습니까?
Adnan

18
2시에 숙제를 시작했습니다. 2:15에 산만 해졌습니다. 이것을 2.20에 시작했습니다. 4:20에 게시했습니다. 약 2 시간.
KoreanwGlasses

5
+1, PPCGSE에서는 경쟁을 할 필요가 없습니다!

9575 바이트 (및 헤더의 현재 바이트 수 는 false이며 불필요한 공간과 불필요하게 긴 상태 이름이 있습니다).
Outgolfer Erik

8

SWI- 프롤로그, 115 바이트

a(S,W,R):-length(S,L),length(W,M),N is L-M,between(0,N,I),\+ (between(0,M,J),K is I+J,nth0(J,W,A),nth0(K,S,A)),R=I.

사용 예 : a(`ABCDEFGHIJKL`,`HELLO`,R).. 백틱으로 선언 된 문자 코드 문자열을 사용합니다. 답변은로 통합되었습니다 R. 일치하는 것이 없으면을 출력 false.합니다.

설명:

a(S,W,R):-
    length(S,L),length(W,M),     
    N is L-M,
    between(0,N,I),             % I is successively unified with an integer between 0 
                                % and the last possible index of the coded message

    \+ (                        % This will only be true if what's inside the parentheses 
                                % cannot be proven to be true

        between(0,M,J),         % J is successively unified with an integer between 0 
                                % and the length of the desired word
        K is I+J,
        nth0(J,W,A),nth0(K,S,A) % Check if one letter is the same in both string at 
                                % the same index
    ),                          % If it the case, then it will be 'true' and thus 
                                % the predicate \+ will be false, meaning we need to
                                % backtrack to try a different value of I

    R=I.                        % If we get here it means it didn't find any matching 
                                % letter for this value of I, which is then the answer.

여기 사용해보십시오


7

루비, 91 79 바이트

->a,b{[*a.chars.each_cons(b.size)].index{|x|x.zip(b.chars).all?{|y|y.uniq==y}}}

저주 해 Enumerator! 왜 문자열을 배열에서 열거 자로 변환하고 소중한 바이트를 낭비해야합니까? > :(

->a,b{                  # define lambda
[*                      # convert to array...
  a.chars               # get enumerator from string
  .each_cons(b.size)    # each consecutive group of (b.size) letters
]
.index{|x|              # find index of...
  x.zip(b.chars)        # zip group with second input string
  .all?{|y|             # is the block true for every element?
    y.uniq==y           # uniqueify results in same array (no dups)
}}}

[*...]#to_a의 골프 대안으로 사용 하는 것이 좋습니다.
Wayne Conrad

7

CJam, 17 16 바이트

ll:A,ew{A.=:+!}#

여기에서 시도하십시오 .

바이트를 저장해 준 @PeterTaylor에게 감사합니다.

설명:

ll:A,ew    e# Finds every slice in the coded message with the length of the word
{A.=:+     e# Compare the characters in each slice to the characters in the word, and add up the result. If the sum is zero, then the slice and the word have no characters in common.
!}#        e# Invert truthiness (0 -> 1, non-0 -> 0) Return index of first truthy value.

array block #당신에게 문자를 저장할 수 있습니다 :ll:A,ew{A.=:+!}#
피터 테일러

거의 모든 작업에서 CJam이 얼마나 멀리 골프를 칠 수 있는지 놀랍습니다 ... : -o
agtoever

@agtoever 17 바이트가 내 첫 시도이기 때문에 실제로 골프라고 말하지 않을 것입니다. 주요 특징은 ew(조각 만들기), 그 밖의 모든 것들은 다음과 같습니다.
geokavel

6

MATL , 27 바이트

jYbZ)tnb!wlhYCw!=a~ftn?1)1-

>> matl jYbZ)tnb!wlhYCw!=a~ftn?1)1-
> EEEEEEEEEEEE, HELLO

>> matl jYbZ)tnb!wlhYCw!=a~ftn?1)1-
> XEEFSLBSELDJMADNADKDPSSPRNEBWIENPF, DEUTSCHLAND
11

설명

j           % input string
YbZ)        % split into two strings based on space. Trailing comma is not a problem
tnb!wlhYC   % arrange first string into sliding columns of the size of the second
w!=         % compare with transposed second string, element-wise with broadcast
a~          % detect columns where all values are 0 (meaning unequal characters)
f           % find indices of such columns
tn?         % if there's at least one such column
1)1-        % pick index of the first and subtract 1 for 0-based indexing

4

하스켈, 72 바이트

l=length
h i w s|l s<l w= -1|and$zipWith(/=)w s=i|1<2=h(i+1)w$tail s
h 0

사용법 : h 0 "DEUTSCHLAND" "XEEFSLBSELDJMADNADKDPSSPRNEBWIENPF"-> 11.

간단한 재귀 접근 : 단어 w를 문자열의 시작 부분에 배치 할 수있는 s경우 인덱스 카운터를 반환하십시오 i. 그렇지 않으면 i증가하고 꼬리를 반복 하십시오 s. -1길이 s가 길이보다 작 으면 중지하고 반환하십시오 w.


4

파이썬 2.7, 111 자

모든 시작 위치를 시도하고 (a) 문자가 일치하는지 확인합니다 (목록 이해를 사용하여). 아무것도 발견되지 않으면 (for 루프 끝과 아무것도 반환되지 않으면 기본값은 "없음") "없음"(Python의 "NULL")을 반환합니다.

def d(c,s):
 for a in range(len(c)):
  if a not in [((c+s)[a+i:]).index(l)+a for i,l in enumerate(s)]:
   return a

테스트 스위트 :

cases = {
         ("BHGEFXWFTIUPITHHLPETTTCLOEWOELM","WETTERBERICHT"):13,
         ("ABCDEFGHIJKL","HELLO"):0,
         ("EEEEEEEEEEEE","HELLO"):-1,
         ("XEEFSLBSELDJMADNADKDPSSPRNEBWIENPF","DEUTSCHLAND"):11
        }

for idx,(code,string) in enumerate(cases):
    output=d(code,string)
    print "Case: {}: d({:<35},{:<16}) gives: {}. Correct answer is: {}.".format(idx+1,code,string,output,cases[(code,string)])

실제로 111 바이트가 아닌 114 바이트가 있습니다. 106 바이트 버전은 다음과 같습니다.def d(c,s): for a in range(len(c)): if a not in[a+(c+s)[a+i:].index(l)for i,l in enumerate(s)]:return a
movatica

4

Brachylog , 48 바이트

[S:W]hlL,WlM,L-M=:0reI,'(0:MeJ+I=:SrmA,W:JmA),I.

이것은 내 Prolog 답변의 직접 번역입니다. brachylog_main/2생성 술어 먼저 입력으로서 코딩 된 문자열 개의 문자 코드 스트링의리스트를 요구하고, 예를 들면 출력으로서 인덱스를 반환 brachylog_main([`ABCDEFGHIJKL`,`HELLO`],R)..

설명

[S:W]                                            § Unify the input with the list [S,W]

     hlL,WlM,                                    § L and M are the length of S and W

             L-M=:0reI,                          § Enumerate integers between 0 and the 
                                                 § last possible index

                       '(                   ),I. § Unify the output with the current 
                                                 § enumerated integer if what's inside the 
                                                 § parenthesis cannot be proven to be true

                         0:MeJ                   § Enumerate integers between 0 and the
                                                 § length of the word desired

                              +I=:SrmA,W:JmA     § Check if both strings contain at matching
                                                 § indexes the same letter (unified with A)

3

Japt, 12 바이트 (비경쟁)

UàVr'."[^$&]

이것에 대한 도움이 필요합니다.


어 ... Japt에는 .search없나요? facepalm
ETHproductions

이제 UàVr'."[^$&]12
동안

쿨, 우린 지금 이겼어!
Mama Fun Roll

이 답변의 최신 개정판은 질문을 게시 한 기능을 사용하므로 비경쟁으로 표시합니다.
Mego

오 잊어 버렸어 : P 고마워!
Mama Fun Roll

2

PHP – 155 바이트

<?php for($p=$argv[1],$q=$argv[2],$l=strlen($q),$i=0,$r=-1;$i<strlen($p)-$l;$i++)if(levenshtein($q,substr($p,$i,$l),2,1,2)==$l){$r=$i;break;}echo$r."\n";

crack.php명령 행에서 다른 이름 으로 저장 하고 인수와 함께 실행 하십시오 . 예 :

$ php crack.php BHGEFXWFTIUPITHHLPETTTCLOEWOELM WETTERBERICHT
13

25 바이트 를 절약 하고 130 바이트 로 축소 할 수 있습니다 .for($r=-1;$i<strlen($p=$argv[1])-$l=strlen($q=$argv[2]);$i++)if(levenshtein($q,substr($p,$i,$l),2,1,2)==$l&&$r=$i)break;echo"$r↵";
insertusernamehere

@insertusernamehere-와, 인상적입니다! 그것을 사용하는 것이 옳지 않다고 생각합니다! 나는을 사용하여 영리하다고 생각 levenshtein했지만 반복 내에서 간단한 반복은 더 적은 바이트로 수행 할 수 있습니다.

2

자바 스크립트, 129 121 118 119 * 118 바이트

(w,t){for(j=0;(x=t.length)<(y=w.length);t=' '+t,j++){for(a=i=0;++i<y;)w[i]==t[i]?a=1:a;if(!a)break}return x==y?-1:j}

w코드화 된 메시지이고 t테스트 문자열입니다. 이것은 정규 표현식을 사용하지 않고 문자별로 비교하고 그 앞에 공백을 추가하여 테스트 문자열 ( "WETTERBERICHT")을 이동시킵니다. 쉽고 지루합니다.


* 일치하지 않는 테스트 케이스가 작동하지 않았습니다.


2

𝔼𝕊𝕄𝕚𝕟, 14 자 / 25 바이트

îĊⱮ(í,↪`⁅⦃$}]`

Try it here (Firefox only).

아이디어를 위해 @apsillers에게 찬사를 보냅니다.

설명

               // implicit: î = input1, í = input2
îĊ             // search for first occurrence of:
  Ɱ(í,↪`⁅⦃$}]` // regex created by wrapping each word in [^ and ] (negation matches)

누가 이것을 공감했는지 이유가 있습니까?
Mama Fun Roll

2

티 스크립트, 14 바이트 20

xc(yl#`[^${l}]

@aspillers와 비슷한 영리한 JavaScript 솔루션 입니다.

이 컨테스트 이후에 만들어진 기능을 사용하기 때문에 비경쟁 입니다.

설명

             // Implicit: x = 1st input, y = 2nd input
x            // First input
 c           // returns index of regex match
 yl#         // Loop through every char in `y`
    `[^${l}] // Replace template, ${l} because current char in `y`

않는 $&대신 작동하지 ${l}?
ETHproductions

@ETHproduction이 경우에는 교체 대신 루프를 사용하고 있기 때문에이 문제가 발생하지 않습니다
Downgoat

2

루비, 43 36 바이트

편집 : 정규 표현식 내부의 문자열 보간 내부의 문자열 보간.

게으른 접근법 : 단어를 "부정적인"정규식으로 변환합니다. =~연산자는 나머지를 수행합니다.

->m,w{m=~/#{"[^#{w.chars*'][^'}]"}/}

테스트:

f=->m,w{m=~/#{"[^#{w.chars*'][^'}]"}/}

require "minitest/autorun"

describe :f do
  it "works for the given test cases" do
    assert_equal 13, f["BHGEFXWFTIUPITHHLPETTTCLOEWOELM", "WETTERBERICHT"]
    assert_equal 0, f["ABCDEFGHIJKL", "HELLO"]
    assert_equal nil, f["EEEEEEEEEEEE", "HELLO"]
    assert_equal 11, f["XEEFSLBSELDJMADNADKDPSSPRNEBWIENPF", "DEUTSCHLAND"]
    assert_equal nil, f["HKKH", "JJJJJ"]
  end
end


2

05AB1E , 14 바이트

ŒIgùDʒø€Ëà_}нk

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

Œ               # Get all substrings of the first (implicit) input
 Ig             # Get the length of the second input
   ù            # Only leave the substrings of that length
    D           # Duplicate the list of remaining substrings
     ʒ          # Filter the copy by:
      ø         #  Zip/transpose; swapping rows/columns the current substring with
                #  the second (implicit) input
       €Ë       #  Check for each if both characters are equal (1 if truthy; 0 if falsey)
         à      #  Get the maximum (basically equal to an `any` builtin)
               #  And invert the boolean (!= 1)
              # After the filter: only leave the first substring
             k  # And get its index in the duplicated list (-1 if none are found)
                # (which is output implicitly as result)

2
야, 이것은 완전히 @Emigna의 대답이라고 생각되었다;). 나는 여기에 와서 거의 그의 이름으로 adnan 질문에 대답하는 그를 농담하고 싶었습니다. +1 (사실상 코멘트를 게시 한 후 사후 4 년 동안 답변했습니다.)
매직 문어 항아리

@MagicOctopusUrn 도전을 보았을 때도 같은 생각을했지만 @Emigna는 일반적으로 새로운 답변에 대답하고 기존 답변에서는 자주 보지 않습니다. 그래서 이것은 05AB1E 답변이 없었기 때문에 하나를 추가 할 것이라고 생각했습니다. 당신은 @Emigna 가이 도전에 대답하기에 가장 적합했을 것입니다. ; p
Kevin Cruijssen


1

펄, 38 + 1 = 39 바이트

perl -E "$r=<>=~s!.![^$&]!gr;say@-if<>=~/$r/x" < input

입력은 다음과 같습니다.

WETTERBERICHT
BHGEFXWFTIUPITHHLPETTTCLOEWOELMRXXPAKAXMAMTXXUDLTWTNHKELEPPLHPRQ

이것은 자바 스크립트와 같은 아이디어입니다.


'x'는 불필요
Zaid

1

자바, 136 자

apillers JavaScript 버전에서 영감을 얻은 정규식 기반 솔루션 .

class L{public static void main(String[]a){a=a[0].split(a[1].replaceAll("(.)","[^$1]"));System.out.print(a.length>1?a[0].length():-1);}}

1

Brachylog (v2), 16 바이트

bʰ↙.Pz₁≠ᵐzhc~hP∧

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

Brachylog는 일반적으로 무언가를 해결할 수 없을 때 실패에 매우 능숙합니다.

이것은 그중 하나가 아닙니다.

(리스트로 입력을받습니다 [message, word]. 헤더는 매우 예쁘게 인쇄하지만 실제 술어의 출력은 성공하면 숫자 일뿐입니다)

                    The input
b                   with a number of letters removed from the beginning
 ʰ                  of its first element
  ↙.                where that number is the output
    P               is P
     z₁             which with its elements zipped, without cycling
       ≠ᵐ           contains no duplicate pairs
         z          and which zipped back
          h         has a first element
           c        which concatenated
            ~h      is the first element of
              P     P
               ∧    (which is not the output).

bʰ↙.Plᵐ≥₁∧Pz₁≠ᵐ∧ 동일한 바이트 수에 대해서도 잘 작동하는 것 같습니다.


0

C ++ (GCC) , 160 (153) 150 바이트

#include<map>
int f(std::string c,std::string w){int i=-1,k,e=1;while(e&&w.size()+i++<c.size())for(e=k=0;k<w.size();)e+=c[i+k]==w[k++];return e?-1:i;}

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


1
@ceilingcat : 157 바이트 를 수행 할 수 있습니다 . 코드는 두 가지 테스트 케이스에 대해 실패합니다 (원래 코드와 동일). 나는 여분의 바이트를 위해 그것을 고쳤다.
movatica

1
또한 외부 루프에서 k를 초기화하면 다른 버그가 발생하여 반복 할 때마다 하나의 적은 문자가 비교되었습니다.
movatica

goto모든 버그의 유무에 관계없이 더 짧습니다 .
movatica

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.