Tương đương Caesar


24

Hai chuỗi là "Caesar tương đương" nếu khoảng cách (đếm lên) giữa các ký tự tương ứng là như nhau. Vâng, tôi đã thực hiện thuật ngữ này lên. Đây là một ví dụ:

"Abc" và "Cde" là tương đương vì

distance from a-c == 2
distance from b-d == 2
distance from c-e == 2

Viết hoa không tạo ra sự khác biệt.

"Xin chào" và "Thế giới" không tương đương với Caesar vì

distance from h-w == 15
distance from e-o == 10
distance from l-r == 6
distance from l-l == 0
distance from o-d == 15

"Abcd" và "Yzab" tương đương với Caesar vì

distance from a-y = 24
distance from b-z = 24
distance from c-a = 24 (it wraps around)
distance from d-b = 24

Bạn phải viết một chương trình đầy đủ lấy hai chuỗi từ STDIN và in một giá trị trung thực nếu chúng tương đương với Caesar và giá trị giả nếu không.

Đầu vào hợp lệ

  • Vì viết hoa không thành vấn đề, có thể chấp nhận được nếu chương trình của bạn yêu cầu đầu vào phải là chữ thường, tất cả chữ hoa hoặc bất kỳ kết hợp nào bạn muốn, miễn là điều này được chỉ định trong câu trả lời của bạn.

  • Đầu vào sẽ không có dấu cách hoặc dấu chấm câu.

  • Các đầu vào sẽ có cùng chiều dài.


8
Sẽ là tốt đẹp để cho phép đầu vào như là đối số dòng lệnh. Tôi sẽ viết một giải pháp C, nhưng đọc từ stdin đòi hỏi mã khá dài, đặc biệt nếu bạn không có thời lượng tối đa trước thời hạn.
Reto Koradi

@RetoKoradi Tại sao không? Dù sao thì nó cũng có thể sẽ không thắng, vì C không biết chính xác là ngắn gọn.
DJMcMayhem

Phải, tôi nghi ngờ rằng C sẽ có cơ hội giành chiến thắng tuyệt đối. Tốt nhất, tôi so sánh với các giải pháp sử dụng ngôn ngữ lập trình "thực";). Nhưng ngay cả ở đó, các ngôn ngữ khác có xu hướng nhỏ gọn hơn, đặc biệt nếu nó liên quan đến xử lý chuỗi.
Reto Koradi

4
Mỗi lần tôi nhìn thấy điều này trong danh sách câu hỏi, nó có chính xác nhiều câu trả lời như câu trả lời.
Alex A.

1
@AlexA. Tôi đã không chú ý đến tỷ lệ bỏ phiếu để trả lời cho đến khi bạn chỉ ra. Bây giờ đó là tất cả những gì tôi nhận thấy.
DJMcMayhem

Câu trả lời:


10

Bình thường, 9 byte

}wm=.rzGG

Hai chuỗi được dự kiến ​​bằng chữ thường, dòng mới tách ra.

Trình diễn.

Làm thế nào nó hoạt động:

.rlà chức năng dịch quay của Pyth. Nó ánh xạ từng phần tử trong đối số thứ nhất từ ​​lần xuất hiện đầu tiên của nó trong đối số thứ hai sang mục tiếp theo trong đối số thứ hai. Trong trường hợp này, đối số thứ hai làG , bảng chữ cái viết thường, do đó, điều này tương đương với một ca Caesar là 1.

Đặt một =ở phía trước của chức năng làm cho nó ở vị trí. Do đó, =.rzGgán ca Caesar của zmột cho z. Lưu ý rằngz được khởi tạo cho dòng đầu vào đầu tiên trong Pyth.

Biểu thức này được sử dụng bên trong bản đồ. m=.rzGGáp dụng chuyển đổi này thành z26 lần, một lần cho mỗi yếu tố Gvà lưu kết quả vào danh sách. Điều này đưa ra danh sách tất cả các ca Caesar có thể z.

Cuối cùng, }wkiểm tra xem dòng đầu vào tiếp theo có nằm trong danh sách đó không.


14

CJam, 17 12 11 byte

1 byte được lưu bởi Dennis.

ll.m26f%)-!

Kiểm tra nó ở đây.

Dự kiến ​​chuỗi đầu tiên là chữ thường và chuỗi thứ hai là chữ hoa. In 1cho các chuỗi tương đương Caesar và 0cách khác.

Giải trình

ll           e# Read two lines of input.
  .m         e# Take the differences of corresponding characters.
    26f%     e# Take the differences modulo 26.
        )-   e# Remove all copies of the last difference from the array. This will 
             e# yield an empty array if and only if all differences are the same.
          !  e# Logical NOT, which yields 1 for an empty array and 0 otherwise.

Lý do chúng tôi yêu cầu chuỗi đầu tiên trong chữ thường và thứ hai trong chữ hoa là để đảm bảo rằng sự khác biệt luôn luôn tích cực. Mặt khác, việc sử dụng modulo có thể trả về một số thứ âm và không nhất thiết là duy nhất, ngay cả đối với các chuỗi tương đương Caesar.


1
Nếu bạn yêu cầu từ đầu tiên là chữ thường và từ thứ hai thành chữ hoa, bạn có thể sử dụng 26f%để lưu một byte.
Dennis

Bạn có thể sử dụng quy ước shell ( stackoverflow.com/questions/2933843/ - ) để đưa nó đến gần hơn với câu trả lời của Pyth.
VicAche

1
@VicAche Quy ước được chấp nhận là diễn giải sự thật và giả dối theo bất cứ cách nào ngôn ngữ của bạn diễn giải nó. Ngoài ra, nếu tôi loại bỏ, !tôi sẽ không có 0 hoặc 1 mà là một mảng trống hoặc không trống.
Martin Ender

9

Python2, 68 67 70 69 byte

print len({(ord(y)-ord(x))%26for x,y in zip(*raw_input().split())})<2

Python3, 67 66 byte

print(len({(ord(y)-ord(x))%26for x,y in zip(*input().split())})<2)

Nó hơi khó đối với người không chuyên, vì vậy chỉ cần giải thích các phần:

  • zip(*raw_input().split())lấy đầu vào, chia nó thành một danh sách gồm hai từ, giả sử các từ được phân tách bằng khoảng trắng. Sau đó, mỗi từ được truyền dưới dạng tham số của ziphàm, bằng cách sử dụng *toán tử. Cáczip chức năng sẽ tạo ra một danh sách các thư-cặp, cho chữ ở vị trí tương đương.
  • (ord(y)-ord(x))%26for x,y in ... Điều này chỉ biến đổi danh sách 2 chữ cái thành biểu thức tạo khoảng cách giữa các chữ cái đó.
  • {...} giảm biểu thức này thành một tập hợp, về cơ bản loại bỏ các bản sao
  • len(...)<2 kiểm tra nếu chỉ còn một mục trong tập hợp (hoặc 0 cho các chuỗi trống), điều đó có nghĩa là tất cả các chữ cái có cùng khoảng cách.
  • print đầu ra giá trị đó

Cảm ơn xnor đã nhắc nhở tôi set(...)có thể được thay thế {...}và không gian trước đó forlà không cần thiết. Cũng nhờ Josay cho <=1đến <2tối ưu hóa.


Khá giống với giải pháp của tôi được đăng gần như trong cùng một phút. Bạn đã thông minh hơn tôi để đi vào đầu vào nhưng bạn có thể giảm <=1xuống '<2'.
SylvainD

1
Bạn có thể làm một bộ hiểu trực tiếp {...}hơn là set((...)). Mã của bạn cần thực sự in kết quả.
xnor

@KillianDS Các quy tắc mặc định yêu cầu in thành STDOUT hoặc trả lại (không phải đánh giá REPL) và ở đây là OP được chỉ định in. Mặt khác, cách ngắn nhất chung là sử dụng lambdađể tiết kiệm bằng văn bản printhoặc return.
xnor

1
Nhân tiện, bạn không có không gian trước đó for; Python lexer phân chia chính xác 26for.
xnor

5

APL (15)

1=≢∪26|-⌿⎕A⍳↑⍞⍞

Nó cần các chữ cái để viết hoa và in 1hoặc 0như vậy:

      1=≢∪26|-⌿⎕A⍳↑⍞⍞
ABCD
YZAB
1

      1=≢∪26|-⌿⎕A⍳↑⍞⍞
HELLO
WORLD
0

Giải trình:

  • ↑⍞⍞: đọc hai dòng từ bàn phím và sắp xếp các ký tự trong ma trận N × 2.
  • ⎕A⍳: cho mỗi ký tự, tìm vị trí nó xuất hiện ở vị trí nào ⎕A (bảng chữ cái viết hoa).
  • -⌿: cho mỗi cột, trừ giá trị thứ hai khỏi giá trị thứ nhất
  • 26|: lấy mod-26 của mỗi số đó.
  • Nếu các chuỗi tương đương với Caesar, tất cả các số trong danh sách này đều bằng nhau, vì vậy:
  • ≢∪: tìm số lượng giá trị duy nhất trong danh sách
  • 1=: so sánh với 1.

Tôi sẽ không bao giờ nâng cấp APL :)
orlp

@AlexA.: Tôi đang sử dụng Dyalog APL 14. Nếu bạn đã có Raspberry Pi, nó miễn phí; đối với sinh viên, nó cũng miễn phí; nếu không, bạn có thể tải xuống một phiên bản chưa đăng ký, đó là nagware nhưng về mặt chức năng thì giống hệt với phiên bản thật. Nhân tiện, dyalog.com dựa trên điều này.
bến tàu

Tôi rất muốn nghe suy nghĩ của bạn về Dyalog so với GNU APL, ngn / apl và APLX, mặc dù các ý kiến ​​không thực sự là nơi để thảo luận như vậy. ;)
Alex A.

3

J, 19 byte

1=[:#@~.26|-&(3&u:)

Chữ cái ở cùng một vị trí nên có cùng trường hợp.

Sau khi chuyển đổi cả hai chuỗi đầu vào thành biểu diễn mã của &(3&u:)chúng với chúng ta so sánh 1với độ dài #của nub ~.của modulo 26 26|về độ chênh lệch -của hai mảng. Nub sẽ là1 nếu tất cả các khoảng cách Caesar là như nhau.

Sử dụng:

   'abcd' (1=[:#@~.26|-&(3&u:)) 'yzab'
1

Hãy thử trực tuyến tại đây.


3

Julia, 91 87 83 byte

a=readline()
b=readline()
show(length(Set([mod(a[i]-b[i],26)for i=1:length(a)]))<2)

Ungolfed + giải thích:

# Read two strings from STDIN
a = readline()
b = readline()

# Get the absolute difference mod 26 of the character values in the strings
x = [mod(a[i] - b[i], 26) for i = 1:length(a)]

# Construct a set consisting of the elements of x. If the set has only a
# single element, the strings are Caesar equivalent. This will print a
# boolean value to STDOUT.
show(length(Set(x)) < 2)

Điều này lợi dụng thực tế là các chuỗi trong Julia có thể được coi là mảng ký tự và các phép toán số học có thể được thực hiện trên các giá trị ký tự. Các chuỗi đầu vào có thể có bất kỳ kết hợp viết hoa nào bạn muốn, miễn là viết hoa ở mỗi vị trí khớp với nhau giữa các chuỗi.


3

C99, 92 byte có lỗi   101 92 byte

  r,i;main(z,a)char**a;{for(;z=a[2][++i];)r|=(a[1][i]-z+*a[2]-*a[1]+52)%26;putchar(49-!!r);}

Khá đơn giản; giả sử các từ đến như là đối số thứ nhất và thứ hai, tương ứng. Tổng hợp với -std=c99.


Điều này cho kết quả sai cho đầu vào mẫu thứ hai.
Reto Koradi

Bạn nói đúng, tôi đã bỏ lỡ nó. Đã sửa.
rr-

3

Javascript ( Dự thảo ES7 ), 87 byte

Yêu cầu đầu vào phải là trường hợp tương tự.

(p=prompt)(![z=(a[c='charCodeAt'](i)-b[c](i)+26)%26 for(i in b=p(a=p()))].some(x=>x^z))


2

CJam, 13 byte

{r(fm26f%}2*=

Nó đòi hỏi ký tự đầu tiên trong mỗi từ phải viết hoa, những chữ khác viết thường.

Hãy thử nó ở đây . ( Firefox ở đây .)

Quá tệ, các biến thể APL không hỗ trợ mỹ phẩm nhân vật ...

Giải trình

{
    r       e# Read a word.
    (f-     e# Return each character value minus the first character.
    26f%    e# Mod 26.
}2*         e# Repeat 2 times.
=           e# Check if they are equal.

2

Perl, 80

Chỉnh sửa : Tối ưu hóa thất bại đã rơi vào mã golf. Bây giờ nó phù hợp với phiên bản chưa được chỉnh sửa. (Tuy nhiên, số byte là chính xác.)

@a=unpack"W*",<>;for(<>=~/./g){$n=ord()-shift@a;$p=!$c++||$p&&$n==$o;$o=$n}say$p

Chạy với Perl phiên bản 5.10 ( perl -M5.10.0hoặc perl -E …) cho say(). Phiên bản hơi mở rộng:

@a=unpack"W*",<>;             # read first string, split and convert to numbers

for(<>=~/./g){                # reads the second string and splits it
   $n=ord()-shift@a;          # convert next character of second string and compare
   $p= !$c++ || $p && $n==$o; # compare differences (special case for first char)
   $o=$n
}

say $p

Mã đầu ra 1(trung thực theo Perl) nếu các chuỗi tương đương với Caesar và chuỗi trống (giả trong Perl) nếu không. Nếu đây là một diễn giải quá lỏng lẻo, tôi cần thêm 2 byte cho say$p+0, in ra1 hoặc0 .

Trường hợp nhân vật phải phù hợp giữa các đầu vào.


Dựa trên các nhận xét về câu hỏi trên, bạn cũng có thể lấy đầu vào làm đối số dòng lệnh. Bạn có thể sử dụng -iđể lấy chuỗi thứ hai, chuỗi này sẽ lưu nó trong biến $^I. Ngoài ra, sử dụng -Ethay vì -ekhi chạy trên dòng lệnh sẽ giúp bạn saymiễn phí, vì vậy bạn có thể sử dụng nó mà không cần thêm bất kỳ byte nào. Hãy thử chạy cái này: perl -iteststring -E'say$^I'Bạn có thể rút ngắn điều này bằng -imẹo.
hmatt1

Cảm ơn @chilemagic, -ithủ thuật này rất gọn gàng (và tôi không biết điều đó!). Trong trường hợp này tôi không nghĩ rằng nó giúp vì $^Ilâu hơn <>.
xebtl

@chilemagic Oh, và theo cuộc thảo luận này , tôi đã không đếm byte cho -M5.10.0dù sao. (Nhưng tôi đã đề cập đến công -Etắc trong bản chỉnh sửa)
xebtl

2

Matlab, 49 48 byte

Đây là một trong những thực sự nhanh chóng. Đáng buồn nhận được một chuỗi từ stdin là khá tốn kém.

x=@()input('','s');sum(diff(mod(x()-x(),26)))==0

Lưu ý rằng nó giống như hầu hết các câu trả lời, không phân biệt chữ hoa chữ thường.

EDIT: loại bỏ một byte bằng cách xác định hàm ẩn danh!



2

C, 97 byte

#define D (*a[2]++-*a[1]+++26)%26
d,r;main(int c,char**a){for(d=D;*a[1];r|=d-D);puts(r?"N":"Y");}

1
Yay! Bạn đã khôi phục lại sự cân bằng!
DJMcMayhem

Bạn có thể lưu 4 ký tự nếu bạn sử dụng lại dvà khai báo acác tham số bên ngoài như thế này: d,r;main(int c,char**a){r;main(d,a)char**a;{
rr-

1

Scala, 57 byte

(readLine zip readLine map(x=>x._1-x._2%26)toSet).size==1

Ít lâu hơn những người khác, và về cơ bản là tương đương, nhưng đó là trong một phong cách ngôn ngữ khác nhau!

Tôi cũng có phiên bản này (56 byte):

(readLine zip readLine map(_._1-x$1._2%26)toSet).size==1

Nhưng tôi không biết nếu x $ 1 hoạt động là trùng hợp ngẫu nhiên hay do thiết kế ...


1
Điều đó thực sự kỳ lạ, làm thế nào để x$1làm việc mà không xbao giờ được xác định?
Dan Getz

@DanGetz Tôi khá chắc chắn đó là một trình biên dịch. Tôi có thể hỏi một câu hỏi về stack overflow về nó: D
Những người khác

1

Python 2, 80 byte

Có 2 chuỗi tương tự từ stdin cách nhau bởi một khoảng trắng:

s,t=raw_input().split();print len(set((ord(c)-ord(d))%26 for c,d in zip(s,t)))<2

Đã thử nghiệm trên các trường hợp thử nghiệm sau:

tests = [
    ("abc", "abc", True),
    ("abcd", "abc", False),
    ("abc", "cde", True),
    ("Abc", "Cde", True),
    ("abc", "deg", False),
    ("Hello", "World", False),
    ("Abcd", "Yzab", True),
    ("", "", True)
]

for s, t, v in tests:
    if len(s) == len(t): # I didn't read that at first
        assert v == (len(set((ord(c) - ord(d)) % 26 for c, d in zip(s, t))) < 2)

1

Python 2 - 241 237 188 147 byte

Đưa đầu vào dưới dạng chuỗi chữ thường được đặt trong dấu ngoặc kép, khoảng cách được phân tách. Có phải là một cách tốt hơn..

s=[[ord(x)for x in y]for y in input().split()];v=[];v=[v+[(s[1][i]-s[0][i])%26]for i in xrange(0,len(s[0]))];v=sum(v,[]);print sum(v)//v[0]==len(v)

Ungolfed (260 byte lẻ)

strs = [[ord(x) for x in y] for y in raw_input().split()]
vals = []
for i in xrange(0, len(strs[0])):
if strs[0][i]<strs[1][i]:
    vals += [strs[1][i]-strs[0][i]]
else:
    vals += [26-(strs[0][i]-strs[1][i])]
return sum(vals)//vals[0] == len(vals)

Tôi chắc chắn rằng bạn có thể làm cho tất cả các biến 1 ký tự dài và lưu một loạt byte. Bạn cũng phải thêm 4 vào điểm số của mình, vì bạn mong đợi "thêm 4 giây trong đầu vào của mình.

@Raticsity Tôi không thể tin rằng tôi đã không rút ngắn các biến .. di chuyển nghiệp dư. Tôi đã thêm 2 vào số byte, vì tôi đã không giải thích chính xác; đầu vào hoạt động như "abc cde".
Kade

1

R, 83 84

Khá nhiều giống như các giải pháp khác. Chuyển đổi các chuỗi thành một vectơ số nguyên. Sửa đổi sự khác biệt của các vectơ bằng 26. Thực hiện duy nhất trên danh sách khi kiểm tra độ dài là 1. Nó dự kiến ​​trường hợp giống nhau trong các ký tự tương ứng trong mỗi chuỗi.

length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2

Nó chờ hai chuỗi được nhập

> length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2
abcdefghijklmnopqrstuvwxyz
opqrstuvwxyzabcdefghijklmn
[1] TRUE
> length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2
Hello
World
[1] FALSE
> length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2
Bob
Nan
[1] TRUE
>

Bạn có thể lưu một byte bằng cách sử dụng <2chứ không phải ==1.
Alex A.

Bạn có thể tiết kiệm 3 byte chỉ bằng cách xuất 1hoặc0

@AlexA. Cảm ơn Alex tôi đã bỏ lỡ cái đó ... và bây giờ tôi nhớ cái đó :)
MickyT

@Ralityity: Thế nào?
Alex A.

@Raticsity Thật không may, nó sẽ trả về 1 hoặc lớn hơn một.
MickyT

1

Matlab / Octave, 53 52

x=@()input('','s');isscalar(unique(mod(x()-x(),26)))

Tất cả đầu vào phải là của cùng một trường hợp.

Đáng buồn thay, Matlab không tốt lắm với đầu vào của người dùng. Là một xử lý ẩn danh, điều này có thể chỉ có 35 byte:

@(a,b)isscalar(unique(mod(a-b,26)))

Matlab coi các ký tự của một chuỗi là một vectơ số. Thực hiện phép trừ sẽ cho chúng ta sự khác biệt của chúng và uniquechuyển đổi vectơ đó thành một vectơ chỉ chứa các giá trị duy nhất. Nếu chỉ có một số, các từ tương đương caeser và isscalar trả về 1, nếu không nó sẽ trả về 0.


Oh! Một mục Matlab khác! Nhìn vào câu trả lời chỉ sau khi trả lời chính mình.
Oebele

chỉ cần phát hiện ra bạn có thể lưu một byte bằng cách xác định đầu vào x = @ () ('', 's');
Oebele

@Oebele Cảm ơn! Tôi nghĩ rằng tôi sẽ bắt đầu thử nhiều vấn đề về gôn hơn ở Matlab, tôi thực sự thấy nó khá thú vị.
FryAmTheEggman

Vâng, đúng vậy Đối với nhiều vấn đề, nó có thể rất ngắn gọn với các công cụ dựa trên ma trận. Octave có cú pháp miễn phí nhiều hơn một chút, đôi khi có thể lưu thêm một vài byte nữa, chẳng hạn như định nghĩa biến nội tuyến.
Oebele

1

bash, 71 48

Sử dụng chương trình Unix Unix tiêu chuẩn caesar(6).

Phiên bản mới (với rất nhiều trợ giúp từ @DigitalTrauma):

read a b;seq -f"caesar %g <<<$a" 26|bash|grep $b
  • Các đầu vào phải nằm trên cùng một dòng, cách nhau bởi khoảng trắng
  • Trường hợp nhân vật phải phù hợp giữa các đầu vào.
  • In 1đúng hoặc không có gì sai.

Nếu đầu vào thông qua các đối số dòng lệnh được cho phép, nó có thể được rút ngắn xuống còn 39 byte :

 seq -f"caesar %g <<<$1" 26|bash|grep $2

Phiên bản cũ cho bản ghi:

 read a b;for i in `seq 26`;do [ `echo $a|caesar $i` = $b ]&&echo 1;done

48 byte, theo tính của tôi: read a b;seq -f"caesar %g <<<$a" 26|bash|grep $bKết quả là trong $?biến dựng sẵn, trong đó 0 == FALSE và 1 == TRUE, theo ngữ nghĩa shell tiêu chuẩn.
Chấn thương kỹ thuật số

@DigitalTrauma Đó là một số ý tưởng tiện lợi! Tôi đặc biệt thích seq -f | bashbit. Kết quả $?là không hợp lệ khi tôi đọc thử thách, nhưng giống như mã của tôi, kết quả của bạn không có gì sai và điều gì đó đúng (ngoại trừ trong trường hợp đường biên của hai chuỗi đầu vào trống). Dù sao, nó sẽ cảm thấy như gian lận khi sử dụng tất cả những điều này trong câu trả lời của tôi, có lẽ bạn nên gửi cho riêng mình.
xebtl

Đừng lo lắng - Tôi đang cung cấp các mẹo chơi gôn để bạn sử dụng. Nếu tôi muốn sử dụng chúng, tôi đã làm như vậy :). Đối với điều trung thực / chim ưng, tôi có xu hướng diễn giải nó là đúng và sai trong ngôn ngữ đã cho của bạn - hãy thử [ 0 == 0 ] ; echo $?[ 0 == 1 ] ; echo $?
Chấn thương kỹ thuật số

1

> <> (Cá) , 50 byte

i:3b*(?v88+0.;n1<
0)?vc1.>~ri-&l?!^i-&:&-2d*%
;n0<

Mong đợi các chữ cái ở cùng một vị trí có cùng trường hợp.

Giải trình

  • i:3b*(?vđọc từ đầu tiên vào ngăn xếp với 88+0.việc cung cấp bước nhảy
  • ~ri-&xóa ~không gian ngăn cách khỏi ngăn xếp, đảo ngược ngăn xếp r(chữ cái đầu tiên sẽ ở trên cùng), đọc trong chữ cái đầu tiên của từ thứ hai i, tính toán phần bù từ chữ cái đầu tiên của từ đầu tiên -và lưu nó vào sổ đăng ký &.
  • l?!^i-&:&-2d*%0)?vđọc mọi chữ cái tiếp theo của từ thứ hai trừ từ chữ cái tương ứng của từ thứ nhất nằm ở đầu ngăn xếp ngăn xếp phần bù &:&-được lưu trong thanh ghi và kiểm tra xem kết quả có phải là 0 mod 26 không 2d*%. Nếu không in 0 và chấm dứt 0n;. c1.cung cấp bước nhảy.
  • Nếu đạt đến cuối từ thứ hai, chương trình sẽ in 1 và kết thúc 1n;.

0

KDB (Q), 35 byte

{0=sum(1_-':)mod[;26](-)."i"$(x;y)}

Giải trình

                         "i"$(x;y)      / convert to ascii decimal
                     (-).               / get differences
             mod[;26]                   / mod 26
      (1_-':)                           / difference between the differences
 0=sum                                  / sum should be 0 if equivalent
{                                 }     / lambda

Kiểm tra

q){0=sum(1_-':)mod[;26](-)."i"$(x;y)}["abcd";"yzab"]
1b

0

Java 281

import java.util.*;enum C{E;Scanner s=new Scanner(System.in);public static void main(String[]z){char[]u=E.n(),v=E.n();int i=0,d=(u[0]-v[0]+26)%26;boolean e=true;for(;++i<u.length;)e&=d==(u[i]-v[i]+26)%26;System.out.print(e);}char[]n(){return s.next().toUpperCase().toCharArray();}}

mở rộng:

import java.util.*;
enum Caesar{
    Equivalence;
    Scanner input=new Scanner(System.in);
    public static void main(String[]z){
        char[]firstString=Equivalence.nextInput(),secondString=Equivalence.nextInput();
        int index=0,difference=(firstString[0]-secondString[0]+26)%26;
        boolean isEqual=true;
        for(;++index<firstString.length;)
            isEqual&=difference==(firstString[index]-secondString[index]+26)%26;
        System.out.print(isEqual);
    }
    char[]nextInput(){
        return input.next().toUpperCase().toCharArray();
    }
}

Tôi có thể lưu 14 byte nếu tôi thoát khỏi việc chuyển đổi mọi thứ thành chữ hoa, nhưng tôi cảm thấy như nó hoàn thiện hơn để bỏ nó vào.


0

Thạch , 5 byte

Oạ/ċ2

Hãy thử trực tuyến!

Xuất ra một số nguyên dương tương đương, 0 nếu không

Làm thế nào nó hoạt động

Oạ/ċ2 - Main link. Argument A (a list of strings)  e.g. ["abc", "cde"]

O     - Ordinal. Cast to code point                     [[97, 98, 99], [99, 100, 101]]
  /   - Reduce the list by...
 ạ    -   absolute difference                           [2, 2, 2]
   ċ2 - Count the number of 2s in the list              3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.