Ekuivalensi Caesar

24

Dua string adalah "setara Caesar" jika jarak (menghitung) antara karakter yang sesuai adalah sama. Ya, saya mengarang istilah ini. Ini sebuah contoh:

"Abc" dan "Cde" setara karena

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

Kapitalisasi tidak membuat perbedaan.

"Halo" dan "Dunia" tidak setara dengan Caesar karena

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" dan "Yzab" adalah setara dengan Caesar karena

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

Anda harus menulis program lengkap yang mengambil dua string dari STDIN, dan mencetak nilai kebenaran jika mereka setara dengan Caesar, dan nilai palsu jika tidak.

Input yang valid

  • Karena kapitalisasi tidak menjadi masalah, maka dapat diterima jika program Anda meminta input untuk semua huruf kecil, semua huruf besar, atau campuran apa pun yang Anda inginkan, selama ini ditentukan dalam jawaban Anda.

  • Input tidak akan memiliki spasi atau tanda baca.

  • Inputnya akan sama panjangnya.

DJMcMayhem
sumber
8
Akan lebih baik untuk mengizinkan input sebagai argumen baris perintah. Saya akan menulis solusi C, tetapi membaca dari stdin membutuhkan kode yang cukup panjang, terutama jika Anda tidak memiliki panjang maksimum sebelumnya.
Reto Koradi
@RetoKoradi Mengapa tidak? Lagipula itu mungkin tidak akan menang, karena C tidak terlalu dikenal ringkas.
DJMcMayhem
Benar, saya ragu C akan pernah memiliki kesempatan untuk menang mutlak. Paling-paling, saya membandingkan dengan solusi yang menggunakan bahasa pemrograman "nyata";). Tetapi bahkan di sana, bahasa lain cenderung lebih kompak, terutama jika itu melibatkan pemrosesan string.
Reto Koradi
4
Setiap kali saya melihat ini dalam daftar pertanyaan, ia memiliki jumlah upvotes yang sama persis dengan jawaban.
Alex A.
1
@AlexA. Saya tidak memperhatikan rasio suara untuk menjawab sampai Anda menunjukkannya. Sekarang semua saya perhatikan.
DJMcMayhem

Jawaban:

10

Pyth, 9 byte

}wm=.rzGG

Dua string diharapkan dalam huruf kecil, baris baru dipisahkan.

Demonstrasi.

Bagaimana itu bekerja:

.radalah fungsi terjemahan putar Pyth. Ini memetakan setiap elemen dalam argumen pertama dari kejadian pertama dalam argumen kedua ke entri berikutnya dalam argumen kedua. Dalam hal ini, argumen kedua adalah G, huruf kecil, jadi ini setara dengan pergeseran Caesar dari 1.

Menempatkan =di depan fungsi membuatnya di tempat. Dengan demikian, =.rzGmenetapkan pergeseran Caesar satu zper satu ke z. Catatan yang zdiinisialisasi ke baris input pertama di Pyth.

Ungkapan ini digunakan di dalam peta. m=.rzGGmenerapkan transformasi ini hingga z26 kali, sekali untuk setiap elemen G, dan menyimpan hasilnya dalam daftar. Ini memberikan daftar semua kemungkinan pergeseran Caesar z.

Terakhir, }wperiksa apakah baris input berikutnya ada dalam daftar itu.

isaacg
sumber
14

CJam, 17 12 11 byte

1 byte disimpan oleh Dennis.

ll.m26f%)-!

Uji di sini.

Mengharapkan string pertama menjadi huruf kecil dan yang kedua menjadi huruf besar. Cetakan 1untuk string setara Caesar dan 0sebaliknya.

Penjelasan

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.

Alasan kami memerlukan string pertama dalam huruf kecil dan yang kedua dalam huruf besar adalah untuk memastikan bahwa perbedaan selalu positif. Kalau tidak, mengambil modulo mungkin mengembalikan sesuatu yang negatif dan tidak akan selalu unik, bahkan untuk string setara Caesar.

Martin Ender
sumber
1
Jika Anda membutuhkan kata pertama menjadi huruf kecil dan yang kedua untuk huruf besar, Anda dapat menggunakan 26f%untuk menyimpan satu byte.
Dennis
Anda dapat menggunakan konvensi shell ( stackoverflow.com/questions/2933843/… ) untuk membawanya lebih dekat ke jawaban Pyth.
VicAche
1
@VicAche Konvensi yang diterima adalah untuk menafsirkan kebenaran dan kepalsuan dengan cara apa pun yang ditafsirkan oleh bahasa Anda . Juga, jika saya menghapus !saya tidak akan memiliki 0 atau 1 tetapi array kosong atau tidak kosong.
Martin Ender
9

Python2, 68 67 70 69 Bytes

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

Python3, 67 66 Bytes

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

Agak sulit untuk ungolf, jadi jelaskan saja bagiannya:

  • zip(*raw_input().split())mengambil input, membaginya menjadi daftar dua kata, dengan asumsi kata dipisahkan oleh spasi. Setelah itu setiap kata dilewatkan sebagai parameter zipfungsi, dengan menggunakan *operator. The zipfungsi akan membuat daftar surat-pasang, untuk huruf di posisi yang sama.
  • (ord(y)-ord(x))%26for x,y in ... Ini hanya mengubah daftar 2 huruf menjadi ekspresi generator dari jarak antara huruf-huruf itu.
  • {...} mengurangi ekspresi ini menjadi satu set, pada dasarnya membuang duplikat
  • len(...)<2 memeriksa apakah hanya ada satu item yang tersisa di set (atau 0 untuk string kosong), yang pada dasarnya berarti semua huruf memiliki jarak yang sama.
  • print menampilkan nilai itu

Berkat xnor untuk mengingatkan saya set(...)dapat diganti dengan {...}dan ruang sebelumnya fortidak diperlukan. Juga terima kasih kepada Josay untuk <=1untuk <2optimasi.

KillianDS
sumber
Cukup mirip dengan solusi saya yang diposting kira-kira di menit yang sama. Anda lebih pintar dari saya untuk memasukkan input tetapi Anda dapat mengurangi <=1menjadi '<2'.
SylvainD
1
Anda dapat melakukan satu set pemahaman secara langsung {...}daripada set((...)). Kode Anda harus benar-benar mencetak hasilnya.
xnor
@KillianDS Aturan default mengharuskan pencetakan ke STDOUT atau kembali (bukan evaluasi REPL), dan di sini pencetakan yang ditentukan OP. Kalau tidak, cara terpendek yang umum adalah menggunakan lambdauntuk menghemat menulis printatau return.
xnor
1
By the way, Anda tidak punya ruang sebelumnya for; Python lexer membelah dengan benar 26for.
xnor
5

APL (15)

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

Perlu huruf menjadi huruf besar, dan mencetak salah satu 1atau 0, seperti:

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

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

Penjelasan:

  • ↑⍞⍞: membaca dua baris dari keyboard, dan mengatur karakter dalam matriks N × 2.
  • ⎕A⍳: untuk setiap karakter, temukan di posisi mana ia berada ⎕A(alfabet huruf besar).
  • -⌿: untuk setiap kolom, kurangi nilai kedua dari nilai pertama
  • 26|: ambil mod-26 dari masing-masing angka tersebut.
  • Jika string setara dengan Caesar, semua angka dalam daftar ini sekarang sama, jadi:
  • ≢∪: temukan jumlah nilai unik dalam daftar
  • 1=: bandingkan dengan 1.
marinus
sumber
Saya tidak akan pernah
meng
@AlexA .: Saya menggunakan Dyalog APL 14. Jika Anda punya Raspberry Pi, gratis; untuk siswa juga gratis; jika tidak, Anda dapat mengunduh versi yang tidak terdaftar, yang merupakan nagware tetapi secara fungsional identik dengan yang asli. byalog.com TryAPL didasarkan pada ini, omong-omong.
marinus
Saya tertarik untuk mendengar pendapat Anda tentang Dyalog vs GNU APL, ngn / apl, dan APLX, meskipun komentarnya tidak benar-benar tempat untuk diskusi semacam itu. ;)
Alex A.
3

J, 19 byte

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

Surat pada posisi yang sama harus memiliki huruf yang sama.

Setelah mengkonversi kedua string input ke representasi codepoint mereka dengan &(3&u:)kami membandingkan 1dengan panjang #inti ~.dari modulo 26 26|dari perbedaan -dua array. Nub akan menjadi 1jika semua jarak Caesar adalah sama.

Pemakaian:

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

Cobalah online di sini.

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

Penjelasan + tidak dikumpulkan:

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

Ini mengambil keuntungan dari fakta bahwa string dalam Julia dapat diperlakukan sebagai array karakter dan bahwa operasi aritmatika dapat dilakukan pada nilai karakter. String input dapat memiliki campuran kapitalisasi yang Anda inginkan, selama kapitalisasi pada setiap posisi cocok dengan string.

Alex A.
sumber
3

C99, 92 byte dengan bug   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);}

Cukup mudah; mengasumsikan kata-kata datang sebagai argumen pertama dan kedua, masing-masing. Disusun dengan -std=c99.

rr-
sumber
Ini memberikan hasil yang salah untuk input sampel kedua.
Reto Koradi
Anda benar, saya melewatkannya. Tetap.
RR
3

Javascript ( ES7 Draft ), 87 byte

Membutuhkan input untuk kasus yang sama.

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

nderscore
sumber
2

CJam, 13 byte

{r(fm26f%}2*=

Ini membutuhkan karakter pertama dalam setiap kata yang dalam huruf besar, yang lain dalam huruf kecil.

Coba di sini . ( Firefox di sini .)

Sayang sekali varian APL tidak mendukung aritmatika karakter ...

Penjelasan

{
    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.
jimmy23013
sumber
2

Perl, 80

Sunting : Pengoptimalan yang gagal telah dimasukkan ke dalam kode golf. Sekarang ini cocok dengan versi yang ungolfed. (Namun demikian, jumlah byte benar.)

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

Jalankan dengan Perl versi 5.10 ( perl -M5.10.0atau perl -E …) untuk say(). Versi sedikit diperluas:

@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

Output kode 1(benar dalam Perl) jika string adalah setara Caesar, dan string kosong (falsy dalam Perl) jika tidak. Jika interpretasi ini terlalu longgar, saya perlu menambahkan 2 byte untuk say$p+0, yang dicetak1 atau 0.

Huruf karakter harus sesuai dengan input.

xebtl
sumber
Berdasarkan komentar pada pertanyaan di atas, Anda dapat mengambil input sebagai argumen baris perintah juga. Anda bisa menggunakan -iuntuk mengambil string kedua, yang akan menyimpannya dalam variabel $^I. Selain itu, menggunakan -Ealih-alih -esaat menjalankan pada baris perintah akan membuat Anda saygratis, sehingga Anda dapat menggunakannya tanpa menambahkan byte. Coba jalankan ini: perl -iteststring -E'say$^I'Anda mungkin dapat mempersingkat ini dengan -itriknya.
hmatt1
Terima kasih @ chememagic, -itriknya rapi (dan saya tidak tahu itu!). Dalam hal ini saya tidak berpikir itu membantu karena $^Ilebih lama daripada <>.
xebtl
@chememagic Oh, dan sesuai diskusi ini , saya -M5.10.0toh tidak menghitung byte . (Tapi saya sebutkan -Esaklar di edit)
xebtl
2

Matlab, 49 48 byte

Ini sangat cepat. Sayangnya mendapatkan string dari stdin cukup mahal.

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

Perhatikan bahwa, seperti kebanyakan jika tidak semua jawaban, peka huruf besar kecil.

EDIT: mencukur satu byte dengan mendefinisikan fungsi anonim!

Oebele
sumber
2

Prolog, 56 byte

b([],[],_).
b([A|C],[B|D],N):-N is mod(A-B,26),b(C,D,N).

Tidak semua kombinasi kasus didukung.

pemakaian

b(`abcd`,`yzab`,_).

Cobalah online di sini

Persitz
sumber
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");}
Reto Koradi
sumber
1
Yay! Anda telah memulihkan saldo!
DJMcMayhem
Anda dapat menyimpan 4 karakter jika Anda menggunakan kembali ddan mendeklarasikan atipe parameter di luar seperti ini: 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

Sedikit lebih lama dari yang lain, dan pada dasarnya setara, tetapi dalam gaya bahasa yang berbeda!

Saya juga memiliki versi ini (56 byte):

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

Tapi saya tidak tahu apakah kerja x $ 1 itu kebetulan atau karena desain ...

Lainnya
sumber
1
Itu benar-benar aneh, bagaimana cara x$1kerjanya tanpa xpernah didefinisikan?
Dan Getz
@ DanGetz Saya cukup yakin itu kebetulan compiler. Saya dapat mengajukan pertanyaan tentang stack overflow tentang hal itu: D
Lainnya
1

Python 2, 80 byte

Membawa 2 string yang sama-mirip dari stdin yang dipisahkan oleh spasi:

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

Diuji pada kasus uji berikut:

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)
SylvainD
sumber
1

Python 2 - 241 237 188 147 Bytes

Mengambil input sebagai string huruf kecil yang dilampirkan dalam tanda kutip, dipisahkan oleh ruang. Harus ada cara yang lebih baik ..

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)

Tidak digabungkan (byte 260-ganjil)

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)
Kade
sumber
Saya yakin Anda bisa membuat semua variabel 1 karakter panjang dan menyimpan banyak byte. Anda juga harus menambahkan 4 pada skor Anda, karena Anda mengharapkan "tambahan 4 dalam input Anda.
@Reticality Saya tidak percaya saya tidak mempersingkat variabel .. langkah amatir. Saya menambahkan 2 ke jumlah byte, karena saya tidak menjelaskan dengan benar; input bekerja seperti "abc cde".
Kade
1

R, 83 84

Cukup banyak sama dengan solusi lainnya. Ubah string menjadi vektor bilangan bulat. Mod selisih vektor dengan 26. Lakukan unik atas daftar sebagai memeriksa panjangnya adalah 1. Ia berharap case menjadi sama dalam karakter yang sesuai di setiap string.

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

Ia menunggu dua string dimasukkan

> 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
>
MickyT
sumber
Anda bisa menyimpan byte dengan menggunakan <2daripada ==1.
Alex A.
Anda bisa menghemat 3 byte hanya dengan keluaran 1atau0
@AlexA. Terima kasih Alex, saya melewatkan yang itu ... dan sekarang saya merindukan yang itu :)
MickyT
@Reticality: Bagaimana?
Alex A.
@Reticality Sayangnya itu akan mengembalikan 1 atau lebih dari satu.
MickyT
1

Matlab / Oktaf, 53 52

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

Semua input harus dari kasus yang sama.

Sayangnya, Matlab tidak begitu baik dengan input pengguna. Sebagai pegangan anonim, ini bisa hanya 35 byte:

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

Matlab memperlakukan karakter string sebagai vektor angka. Melakukan pengurangan membuat kita berbeda, dan uniquemengubah vektor itu menjadi vektor yang hanya berisi nilai unik. Jika hanya ada satu angka, kata-kata tersebut setara caeser dan isscalar mengembalikan 1, jika tidak maka akan mengembalikan 0.

FryAmTheEggman
sumber
Oh! Entri Matlab lain! Memandang jawaban hanya setelah menjawab sendiri.
Oebele
baru diketahui Anda dapat menyimpan satu byte dengan mendefinisikan x = @ () input ('', 's');
Oebele
@ Oebele Terima kasih! Saya pikir saya akan mulai mencoba lebih banyak masalah golf di Matlab, saya merasa ini agak menyenangkan.
FryAmTheEggman
Ya itu. Untuk banyak masalah bisa sangat ringkas dengan hal-hal berbasis matriks. Oktaf memiliki sintaks bebas sedikit lebih, yang kadang-kadang dapat menyimpan beberapa byte lebih juga, seperti definisi variabel inline.
Oebele
1

bash, 71 48

Menggunakan program Unix "standar" caesar(6).

Versi baru (dengan banyak bantuan dari @DigitalTrauma):

read a b;seq -f"caesar %g <<<$a" 26|bash|grep $b
  • Input harus berada di jalur yang sama, dipisahkan oleh spasi
  • Huruf karakter harus sesuai dengan input.
  • Mencetak 1untuk benar atau tidak untuk salah.

Jika input melalui argumen baris perintah diizinkan, ini dapat dipersingkat menjadi 39 byte :

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

Versi lama untuk catatan:

 read a b;for i in `seq 26`;do [ `echo $a|caesar $i` = $b ]&&echo 1;done
xebtl
sumber
48 byte, menurut perhitungan saya: read a b;seq -f"caesar %g <<<$a" 26|bash|grep $bHasilnya adalah dalam $?variabel builtin, di mana 0 == SALAH dan 1 == BENAR, sesuai dengan semantik shell standar.
Digital Trauma
@DigitalTrauma Itu adalah beberapa ide bagus! Saya terutama menyukai seq -f | bashbit. Hasilnya $?tidak valid dengan membaca tantangan saya, tetapi sama seperti kode saya, milik Anda tidak menghasilkan apa pun yang salah dan sesuatu yang benar (kecuali dalam kasus garis batas dua string input kosong). Bagaimanapun, akan terasa seperti curang untuk menggunakan semua ini dalam jawaban saya, mungkin Anda harus mengirimkan milik Anda sendiri.
xebtl
Jangan khawatir - saya menawarkan tips golf untuk Anda gunakan. Jika saya ingin menggunakannya, saya sudah melakukannya :). Adapun hal yang benar / salah, saya cenderung menafsirkannya sebagai apa yang benar dan salah dalam bahasa Anda - coba [ 0 == 0 ] ; echo $?dan[ 0 == 1 ] ; echo $?
Digital Trauma
1

> <> (Ikan) , 50 byte

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

Mengharapkan surat pada posisi yang sama memiliki kasus yang sama.

Penjelasan

  • i:3b*(?v membaca kata pertama ke stack 88+0. memberikan lompatan perulangan
  • ~ri-&menghapus ~ruang pemisah dari tumpukan, membalikkan tumpukan r(huruf pertama akan berada di atas), membaca huruf pertama dari kata kedua i, menghitung offset dari huruf pertama kata pertama -dan menyimpannya dalam register& .
  • l?!^i-&:&-2d*%0)?vmembaca setiap huruf berikutnya dari kata kedua yang mengurangkannya dari huruf yang sesuai dengan kata pertama yang berada di bagian atas tumpukan mengurangi offset yang &:&-disimpan dalam register dan memeriksa apakah hasilnya 0 mod 26 2d*%. Jika tidak mencetak 0 dan berakhir0n; . c1.memberikan lompatan perulangan.
  • Jika mencapai akhir kata kedua, program mencetak 1 dan berakhir 1n;.
randomra
sumber
0

KDB (Q), 35 byte

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

Penjelasan

                         "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

Uji

q){0=sum(1_-':)mod[;26](-)."i"$(x;y)}["abcd";"yzab"]
1b
WooiKent Lee
sumber
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();}}

diperluas:

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

Saya bisa menghemat 14 byte jika saya menyingkirkan mengubah semuanya menjadi huruf besar, tapi saya merasa lebih lengkap untuk meninggalkannya.

Jack Ammo
sumber
0

Jelly , 5 byte

Oạ/ċ2

Cobalah online!

Menghasilkan bilangan bulat positif untuk setara, 0 sebaliknya

Bagaimana itu bekerja

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
caird coinheringaahing
sumber