সিজার সমতুল্যতা


24

দুটি অক্ষর "সিজার সমতুল্য" যদি সংশ্লিষ্ট অক্ষরের মধ্যে দূরত্ব (গণনা অবধি) একই হয় the হ্যাঁ, আমি এই পদটি তৈরি করেছি। এখানে একটি উদাহরণ:

"Abc" এবং "Cde" সমান কারণ

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

মূলধন কোনও পার্থক্য করে না।

"হ্যালো" এবং "ওয়ার্ল্ড" সিজার সমতুল্য নয় কারণ

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" এবং "Yzab" সিজার সমতুল্য কারণ

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

আপনাকে অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম লিখবেন যা STDIN থেকে দুটি স্ট্রিং নেবে এবং সিজারের সমতুল্য হলে সত্যবাদী মান এবং যদি তা না হয় তবে একটি মিথ্যা মান প্রিন্ট করে।

বৈধ ইনপুট

  • যেহেতু মূলধনটি কোনও বিষয় নয়, আপনার প্রোগ্রামটিতে সমস্ত নিম্ন-কেস, সমস্ত আপার-কেস, বা যা কিছু মিশ্রণ আপনি চান, যতক্ষণ না এটি আপনার উত্তরটিতে সুনির্দিষ্ট করা থাকে তা গ্রহণযোগ্য।

  • ইনপুটটিতে স্পেস বা বিরামচিহ্ন থাকবে না।

  • ইনপুটগুলি একই দৈর্ঘ্য হবে।


8
কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুটটিকে মঞ্জুরি দিতে ভাল লাগত। আমি একটি সি সমাধান লিখতে যাচ্ছিলাম, তবে স্টিডিনের কাছ থেকে পড়া মোটামুটি দীর্ঘ কোডের প্রয়োজন, বিশেষত যদি আপনার সময়ের আগে সর্বাধিক দৈর্ঘ্য না থাকে।
রেটো কোরাডি

পুনঃটুইট করুন এটি সম্ভবত যাইহোক জিতবে না, যেহেতু সি সংক্ষিপ্ত হওয়ার জন্য সঠিকভাবে জানা যায়নি।
DJMcMayhem

ঠিক আছে, আমি সন্দেহ করি যে সি এর কাছে কখনই পরম জয়ের সুযোগ থাকবে। সর্বোপরি, আমি সমাধানগুলির সাথে তুলনা করি যা "রিয়েল";) প্রোগ্রামিং ভাষা ব্যবহার করে। তবে সেখানেও অন্যান্য ভাষাগুলি আরও কমপ্যাক্ট হয়ে থাকে, বিশেষত যদি এতে স্ট্রিং প্রসেসিং জড়িত থাকে।
রেটো কোড়াদি

4
যতবারই আমি প্রশ্ন তালিকায় এটি দেখি, ঠিক তেমন উত্তর রয়েছে v
অ্যালেক্স এ।

1
@AlexA। যতক্ষণ না আপনি এটি নির্দেশ করেছেন ততক্ষণ পর্যন্ত অনুপাতের উত্তর দেওয়ার জন্য আমি কোনও আপত্তি দিচ্ছিলাম না। এখন এটি আমি লক্ষ্য করি।
DJMcMayhem

উত্তর:


10

পাইথ, 9 বাইট

}wm=.rzGG

দুটি স্ট্রিং ছোট হাতের অক্ষরে প্রত্যাশিত, নিউলাইন পৃথক।

প্রদর্শন.

কিভাবে এটা কাজ করে:

.rপাইথের রোটারি ট্রান্সলেশন ফাংশন। এটি প্রথম যুক্তিতে প্রথম যুক্তি থেকে প্রথম যুক্তি থেকে দ্বিতীয় যুক্তিতে পরবর্তী যুক্তিতে মানচিত্র তৈরি করে। এই ক্ষেত্রে, দ্বিতীয় যুক্তি হয়G ছোট হাতের বর্ণমালা, সুতরাং এটি 1 এর সিজার শিফটের সমতুল্য।

একটি রাখা =ফাংশনটির সামনে স্থাপন করা এটি যথাস্থানে পরিণত করে। সুতরাং, এক এক =.rzGকরে সিজার শিফট বরাদ্দ করে । মনে রাখবেন যেzzz পাইথের ইনপুটটির প্রথম লাইনে আরম্ভ করা হয়েছে।

এই এক্সপ্রেশনটি কোনও মানচিত্রের অভ্যন্তরে ব্যবহৃত হয়। m=.rzGGzপ্রতিটি রূপের একবারের জন্য একবার এই রূপান্তরটি 26 বার প্রয়োগ Gকরে এবং ফলাফলগুলিকে তালিকায় সংরক্ষণ করে। এটি সমস্ত সম্ভাব্য সিজার শিফ্টের তালিকা দেয় z

অবশেষে, }wইনপুটটির পরবর্তী লাইনটি সেই তালিকায় রয়েছে কিনা তা পরীক্ষা করে।


14

সিজেম, 17 12 11 বাইট

ডেনিস দ্বারা 1 বাইট সংরক্ষণ করা।

ll.m26f%)-!

এটি এখানে পরীক্ষা করুন।

প্রথম স্ট্রিংটি লোয়ার কেস এবং দ্বিতীয়টি বড় হাতের হবে বলে প্রত্যাশা করে। 1সিজার-সমতুল্য স্ট্রিং এবং 0অন্যথায় মুদ্রণ ।

ব্যাখ্যা

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.

নিম্নতর ক্ষেত্রে আমাদের প্রথম স্ট্রিং এবং দ্বিতীয় ক্ষেত্রে উচ্চর ক্ষেত্রে প্রয়োজনীয় কারণটি হ'ল পার্থক্যটি সর্বদা ইতিবাচক। অন্যথায় মডিউলটি নেওয়া কিছু নেতিবাচক প্রত্যাবর্তন করতে পারে এবং এটি সিজার-সমতুল্য স্ট্রিংগুলির জন্যও অদ্বিতীয় নয়।


1
আপনার যদি প্রথম শব্দটি ছোট হাতের এবং দ্বিতীয়টি বড় হাতের হতে হয় তবে আপনি 26f%একটি বাইট সংরক্ষণ করতে পারেন use
ডেনিস

এটিকে পাইথ উত্তরের নিকটে আনতে আপনি শেল কনভেনশন ( স্ট্যাকওভারফ্লো .com/ প্রশ্নস / ২৯৩৩84৪৩/২ ) ব্যবহার করতে পারেন ।
ভিসাচে

1
@ ভিকাচে স্বীকৃত কনভেনশন হ'ল আপনার ভাষা যেভাবে ব্যাখ্যা করে তা সত্যবাদী এবং মিথ্যা বলে interpret এছাড়াও, যদি আমি অপসারণ করি তবে আমার !0 বা 1 না থাকলে একটি ফাঁকা বা শূন্য নয় অ্যারে থাকবে।
মার্টিন এন্ডার

9

পাইথন 2, 68 67 70 69 বাইট

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

পাইথন 3, 67 66 বাইট

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

উনল্ফ করা কিছুটা শক্ত, তাই কেবল টুকরো টুকরোটি ব্যাখ্যা করে:

  • zip(*raw_input().split())ইনপুটটি নেয়, দুটি শব্দের তালিকায় বিভক্ত করে, ধরে নেওয়া শব্দের স্পেসস্পেস দিয়ে আলাদা করা হয়। এর পরে প্রতিটি শব্দ zipফাংশনের প্যারামিটার হিসাবে *অপারেটর ব্যবহার করে পাস করা হয় । দ্যzipফাংশন একই অবস্থান অক্ষর জন্য, চিঠি-জোড়া একটি তালিকা তৈরি করবে।
  • (ord(y)-ord(x))%26for x,y in ... এটি কেবলমাত্র 2 টি অক্ষরের তালিকাকে এই অক্ষরগুলির মধ্যে দূরত্বের জেনারেটর এক্সপ্রেশনে রূপান্তরিত করে।
  • {...} মূলত ডুপ্লিকেটগুলি ছড়িয়ে দিয়ে সেটটিতে এই অভিব্যক্তি হ্রাস করে
  • len(...)<2 সেটে (বা শূন্য স্ট্রিংয়ের জন্য 0) কেবলমাত্র একটি আইটেম বাকী আছে কিনা তা পরীক্ষা করে, যার অর্থ মূলত সমস্ত বর্ণের একই দূরত্ব ছিল।
  • print যে মান আউটপুট

Xnor ধন্যবাদ আমাকে স্মরণ করিয়ে দেওয়ার জন্য set(...)প্রতিস্থাপন করা যেতে পারে {...}এবং আগের জায়গার forপ্রয়োজন হয় না। এছাড়াও Josay ধন্যবাদ <=1করার <2অপ্টিমাইজেশান।


আমার সমাধানটির মতো একই একই মুহূর্তে প্রায় পোস্ট করা posted আপনি ইনপুট যেতে আমার চেয়ে বেশি স্মার্ট হয়েছিলেন তবে আপনি <=1'<2' এ হ্রাস করতে পারেন ।
সিলভাইন

1
আপনি {...}তার চেয়ে সরাসরি একটি সেট বোধগম্য করতে পারেন set((...))। আপনার কোডটি আসলে ফলাফল মুদ্রণ করা প্রয়োজন।
xnor

@ কিলিয়ানডিএস ডিফল্ট নিয়মের জন্য প্রিন্টিং STDOUT বা ফিরে আসা (REPL মূল্যায়ন নয়) প্রয়োজন হয় এবং এখানে ওপি নির্দিষ্ট মুদ্রণ নির্দিষ্ট করে। অন্যথায়, জেনেরিক সংক্ষিপ্ত রাস্তা ব্যবহার করা lambdaলেখা নেভিগেশন সংরক্ষণ printবা return
xnor

1
যাইহোক, আপনি আগে স্থান না for; পাইথন লেজার সঠিকভাবে বিভক্ত হয় 26for
xnor

5

এপিএল (15)

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

বড় হাতের অক্ষরগুলির এটির দরকার হয়, এবং হয় 1বা এর 0মতো প্রিন্ট করে :

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

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

ব্যাখ্যা:

  • ↑⍞⍞: কীবোর্ড থেকে দুটি লাইন পড়ুন এবং একটি এন × 2 ম্যাট্রিক্সে অক্ষরগুলি সাজান।
  • ⎕A⍳: প্রতিটি চরিত্রের জন্য, এটি কোন অবস্থানে রয়েছে তা সন্ধান করুন ⎕A (বড় হাতের বর্ণমালা) ।
  • -⌿: প্রতিটি কলামের জন্য, প্রথম মান থেকে দ্বিতীয় মানটি বিয়োগ করুন
  • 26|: এই সংখ্যার প্রত্যেকটির মোড -26 নিন।
  • স্ট্রিংগুলি যদি সিজার-সমতুল্য হয় তবে এই তালিকার সমস্ত সংখ্যা এখন সমান, সুতরাং:
  • ≢∪: তালিকায় অনন্য মানগুলির সংখ্যাটি সন্ধান করুন
  • 1=: যে তুলনা 1


@ অ্যালেক্সা: আমি ডায়ালগ এপিএল 14 ব্যবহার করছি you've আপনি যদি রস্পবেরি পাই পেয়ে থাকেন তবে এটি নিখরচায়; শিক্ষার্থীদের জন্য এটিও বিনামূল্যে; অন্যথায় আপনি একটি নিবন্ধভুক্ত সংস্করণটি ডাউনলোড করতে পারেন, যা নাগওয়্যার তবে অন্যথায় আসল সংস্করণ হিসাবে কার্যত অভিন্ন। ডায়ালগ ডট কম ট্রাইএপিএল এটি ভিত্তিতে তৈরি করা হয়।
মেরিনাস

ডায়ালগ বনাম জিএনইউ এপিএল, এনএনজি / এপিএল এবং এপিএলএক্স সম্পর্কে আপনার মতামত শুনতে আগ্রহী, যদিও মন্তব্যগুলি এই জাতীয় আলোচনার জন্য সত্যিকারের জায়গা নয়। ;)
অ্যালেক্স এ।

3

জে, 19 বাইট

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

একই পদের চিঠিগুলিতে একই কেস থাকা উচিত।

উভয় ইনপুট স্ট্রিংগুলিকে তাদের কোডপয়েন্ট উপস্থাপনায় রূপান্তর করার পরে &(3&u:)আমরা দুটি অ্যারের পার্থক্যের মডিউল 26 এর নুর 1দৈর্ঘ্যের সাথে তুলনা করি । সমস্ত সিজার-দূরত্ব একই থাকলে নুব হবে ।#~.26|-1

ব্যবহার:

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

এটি এখানে অনলাইনে চেষ্টা করুন।


3

জুলিয়া, 91 87 83 বাইট

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

অবহেলিত + ব্যাখ্যা:

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

এটি জুলিয়ার স্ট্রিংগুলিকে চরিত্রের অ্যারে হিসাবে বিবেচনা করা যেতে পারে এবং পাটিগণিতের ক্রিয়াকলাপগুলি চরিত্রের মানগুলিতে সম্পাদন করা যেতে পারে তার এই সুবিধাটি গ্রহণ করে। ইনপুট স্ট্রিংগুলিতে আপনার চাইলে যে কোনও মূলধনের মিশ্রণ থাকতে পারে, যতক্ষণ না প্রতিটি অবস্থানের মূলধনটি স্ট্রিংগুলির মধ্যে মেলে।


3

সি 99, 92 বাইট   101 92 বাইট সহ

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

অনেকটাই অকপট; ধরে নেওয়া হয় যে শব্দগুলি যথাক্রমে প্রথম এবং দ্বিতীয় যুক্তি হিসাবে আসে। সঙ্গে সংকলিত -std=c99


এটি দ্বিতীয় নমুনা ইনপুটটির জন্য ভুল ফলাফল দেয়।
রেটো কোরাডি

আপনি ঠিক বলেছেন, আমি এটি মিস করেছি। সংশোধন করা হয়েছে।
rr-

3

জাভাস্ক্রিপ্ট ( ES7 খসড়া ), 87 বাইট

একই ক্ষেত্রে হতে ইনপুট প্রয়োজন।

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


2

সিজেম, 13 বাইট

{r(fm26f%}2*=

এটি প্রতিটি শব্দের প্রথম অক্ষর বড় হাতের অক্ষরে, অন্যদের নিম্ন ক্ষেত্রে হতে হয়।

এখানে চেষ্টা করুন । ( ফায়ারফক্স এখানে ।)

খুব খারাপ এপিএল রূপগুলি অক্ষর পাটিগণিত সমর্থন করে না ...

ব্যাখ্যা

{
    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

পার্ল, 80

সম্পাদনা করুন : একটি ব্যর্থ অপ্টিমাইজেশন গল্ফ কোডে স্খলিত হয়েছে। এখন এটি অদৃশ্য সংস্করণের সাথে মেলে। (যদিও বাইট গণনাটি সঠিক ছিল))

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

এর জন্য পার্ল সংস্করণ 5.10 ( perl -M5.10.0বা perl -E …) দিয়ে চালান say()। সামান্য প্রসারিত সংস্করণ:

@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

কোড 1আউটপুটস (পার্লে সত্যবাদী) যদি স্ট্রিংগুলি সিজার সমতুল্য হয়, এবং খালি স্ট্রিং (পার্লে মিথ্যা) যদি তা না থাকে। এটি যদি খুব ব্যাখ্যা ছাড়িয়ে যায় তবে আমার জন্য 2 বাইট যুক্ত করতে হবে say$p+0যা প্রিন্ট করে 1বা0

অক্ষরের ক্ষেত্রে অবশ্যই ইনপুটগুলির মধ্যে মেলে।


উপরের প্রশ্নের মন্তব্যের ভিত্তিতে আপনি কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট নিতে পারেন। আপনি ব্যবহার করতে পারে -iদ্বিতীয় স্ট্রিং, যা এটি পরিবর্তনশীল সংরক্ষণ করবে নেওয়া $^I। এছাড়াও, কমান্ড লাইনে চলাকালীন -Eপরিবর্তে ব্যবহার করা -eআপনাকে sayনিখরচায় পাবেন, যাতে কোনও বাইট না যোগ করে আপনি এটি ব্যবহার করতে পারেন। এটি চালানোর চেষ্টা করুন: perl -iteststring -E'say$^I'আপনি -iকৌশলটি দিয়ে এটি সংক্ষিপ্ত করতে সক্ষম হতে পারেন ।
hmatt1

ধন্যবাদ @ চিলিমাজিক, -iকৌশলটি ঝরঝরে (এবং আমি এটি জানতাম না!)। এই ক্ষেত্রে আমি মনে করি না যে এটি সাহায্য করে কারণ $^Iএটি তার চেয়ে দীর্ঘ <>
xebtl

@ চিলিমাজিক ওহ, এবং এই আলোচনা অনুসারে আমি -M5.10.0কোনওভাবেই বাইটগুলি গণনা করি নি । (তবে আমি -Eসম্পাদনায় স্যুইচটি উল্লেখ করেছি )
xebtl

2

মতলব, 49 48 বাইট

এটি একটি সত্যই দ্রুত ছিল। দুঃখজনকভাবে স্ট্ডিনের কাছ থেকে স্ট্রিং পাওয়া বেশ ব্যয়বহুল।

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

নোট করুন যে এটি সবচেয়ে উত্তর মত নয়, সমস্ত জবাব, কেস সংবেদনশীল।

সম্পাদনা: একটি বেনামে ফাংশন সংজ্ঞায়িত করে একটি বাইট বন্ধ করে দেওয়া!



2

সি, 97 বাইট

#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
হ্যাঁ! ভারসাম্য ফিরিয়ে দিয়েছেন!
DJMcMayhem

আপনি 4 টি অক্ষর সংরক্ষণ করতে পারবেন যদি আপনি পুনরায় ব্যবহার করেন dএবং aএর মতো বাইরের প্যারামিটারগুলি এর মতো প্রকাশ করেন: d,r;main(int c,char**a){r;main(d,a)char**a;{
rr-

1

স্কালা, 57 বাইট

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

অন্যদের তুলনায় সামান্য দীর্ঘ, এবং মূলত সমতুল্য, তবে এটি ভাষার ভিন্ন ধরণের হয়!

আমার এই সংস্করণটিও রয়েছে (56 বাইট):

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

তবে আমি জানি না যে x $ 1 কাজটি কাকতালীয় বা ডিজাইনের দ্বারা ...


1
এটি সত্যিই অদ্ভুত, কখনই সংজ্ঞায়িত না হয়ে x$1কাজ করবে x?
ড্যান গেটেজ

@ ডানগেটজ আমি মোটামুটি নিশ্চিত যে এটি একটি সংকলক ফ্লুক। আমি এটি সম্পর্কে স্ট্যাক ওভারফ্লো সম্পর্কে একটি প্রশ্ন জিজ্ঞাসা করতে পারি: ডি
অন্যরা

1

পাইথন 2, 80 বাইট

একটি স্পেস দ্বারা পৃথক পৃথক স্টিডিন থেকে 2 অনুরূপ-কেসযুক্ত স্ট্রিং নেয়:

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

নিম্নলিখিত পরীক্ষার ক্ষেত্রে পরীক্ষিত:

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

পাইথন 2 - 241 237 188 147 বাইট

উদ্ধৃতিতে স্থানটি পৃথক করে লোয়ারকেস স্ট্রিং হিসাবে ইনপুট নেয়। এখানে অবশ্যই একটি ভাল রাস্তা আছে..

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)

অবরুদ্ধ (260-বিজোড় বাইট)

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)

আমি নিশ্চিত যে আপনি সমস্ত ভেরিয়েবল 1 অক্ষর দীর্ঘ করতে এবং একগুচ্ছ বাইট সংরক্ষণ করতে পারেন। আপনার ইনপুটটিতে 4 "টি অতিরিক্ত প্রত্যাশা করার সাথে সাথে আপনাকে আপনার স্কোর 4 টি যুক্ত করতে হবে।

@ সত্যবাদিতা আমি বিশ্বাস করতে পারি না আমি ভেরিয়েবলগুলি ছোট করিনি .. অপেশাদার পদক্ষেপ। আমি সঠিকভাবে ব্যাখ্যা না করায় আমি বাইট গণনায় 2 টি যুক্ত করেছি; ইনপুট "abc cde" এর মতো কাজ করে।
কেডে

1

আর, 83 84

অন্যান্য সমাধানগুলির মতো মোটামুটি একই। স্ট্রিংগুলিকে পূর্ণসংখ্যার ভেক্টরে রূপান্তর করুন। 26 দ্বারা ভেক্টরগুলির পার্থক্যটি মোড করুন the দৈর্ঘ্য 1টি যাচাই করুন তালিকার তুলনায় একটি অনন্য করুন It এটি প্রতিটি স্ট্রিংয়ের অক্ষরগুলির সাথে একই অক্ষর হিসাবে প্রত্যাশা করে।

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

এটি দুটি স্ট্রিং প্রবেশের জন্য অপেক্ষা করে

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

আপনি <2বরং ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারে ==1
অ্যালেক্স এ।

আপনি কেবল আউটপুট দিয়ে 1বা0

@AlexA। ধন্যবাদ অ্যালেক্স আমি
সেটিকে

@ নিরপেক্ষতা: কিভাবে?
অ্যালেক্স এ।

@ বিশুদ্ধতা দুর্ভাগ্যক্রমে এটি 1 বা একের বেশি হবে return
মিকিটি

1

মতলব / অষ্টাভ, 53 52

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

ইনপুট সব একই ক্ষেত্রে হওয়া উচিত।

দুঃখের বিষয়, মতলব ব্যবহারকারী ইনপুট নিয়ে খুব ভাল নয়। বেনামী হ্যান্ডেল হিসাবে, এটি কেবল 35 বাইট হতে পারে:

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

মতলব স্ট্রিংয়ের অক্ষরগুলিকে সংখ্যার ভেক্টর হিসাবে বিবেচনা করে। বিয়োগফলগুলি করা আমাদের তাদের পার্থক্য অর্জন করে এবং uniqueসেই ভেক্টরকে কেবলমাত্র অনন্য মানযুক্ত ভেক্টরে রূপান্তরিত করে। যদি কেবল একটি সংখ্যা থাকে তবে শব্দগুলি সিজারের সমতুল্য এবং ইস্যুকারার 1 প্রদান করে, অন্যথায় এটি 0 এ ফিরে আসবে।


উহু! আর এক মতলব প্রবেশ! নিজের উত্তর দেওয়ার পরে কেবল উত্তরগুলি তাকান।
ওবেলে

সন্ধান পেয়েছি আপনি x = @ () ইনপুট ('', 'গুলি') সংজ্ঞায়িত করে একটি বাইট সংরক্ষণ করতে পারেন;
ওবেলে

@ ওবেলে ধন্যবাদ! আমি মনে করি আমি মতলব আরও গল্ফ সমস্যা চেষ্টা শুরু করতে যাচ্ছি, আমি এটি আসলে মজা পেয়েছে।
FryAmTheEggman

হ্যাঁ, এটা। অনেকগুলি সমস্যার জন্য এটি এর ম্যাট্রিক্স-ভিত্তিক স্টাফের সাথে খুব সংক্ষিপ্ত হতে পারে। অক্টোটাতে আরও কিছুটা ফ্রি সিনট্যাক্স রয়েছে, যা মাঝে মাঝে আরও কয়েকটি বাইট সংরক্ষণ করতে পারে যেমন ইনলাইন ভেরিয়েবল সংজ্ঞা।
ওবেলে

1

বাশ, 71 48

"স্ট্যান্ডার্ড" ইউনিক্স প্রোগ্রামটি ব্যবহার করে caesar(6)

নতুন সংস্করণ (@ ডিজিটাল ট্রামুমার প্রচুর সহায়তায়):

read a b;seq -f"caesar %g <<<$a" 26|bash|grep $b
  • ইনপুটগুলি একই লাইনে থাকতে হবে, ফাঁক দিয়ে আলাদা করা উচিত
  • অক্ষরের ক্ষেত্রে অবশ্যই ইনপুটগুলির মধ্যে মেলে।
  • 1সত্যের জন্য মুদ্রণ বা মিথ্যা জন্য কিছুই নয়।

যদি কমান্ড লাইন আর্গুমেন্টের মাধ্যমে ইনপুট অনুমোদিত হয়, তবে এটি 39 বাইটে সংক্ষিপ্ত করা যেতে পারে :

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

রেকর্ডের জন্য পুরানো সংস্করণ:

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

48 বাইট, আমার গণনা অনুসারে: read a b;seq -f"caesar %g <<<$a" 26|bash|grep $bফলাফলটি $?বিল্টিন ভেরিয়েবলে আসে যেখানে 0 == মিথ্যা এবং 1 == সত্য, মানক শেল শব্দার্থক হিসাবে।
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা এগুলি কিছু নিফটি ধারণা! আমি বিশেষত seq -f | bashবিট পছন্দ করি । ফলে $?চ্যালেঞ্জের আমার পড়া দ্বারা বৈধ নয়, কিন্তু আমার কোড, সত্য জন্য মিথ্যা এবং কিছু জন্য পুলিশের আউটপুট কিছুই মত (দুই খালি ইনপুট স্ট্রিং সীমান্তরেখা ক্ষেত্রে ব্যতীত)। যাইহোক, আমার উত্তরে এই সমস্তগুলি ব্যবহার করে প্রতারণার মতো মনে হবে, সম্ভবত আপনার নিজের জমা দেওয়া উচিত।
xebtl

চিন্তা করবেন না - আমি আপনাকে ব্যবহার করার জন্য গল্ফিং টিপস দিচ্ছি। আমি যদি সেগুলি ব্যবহার করতে চাইতাম তবে আমি ইতিমধ্যে এটি করতাম :)। সত্য / মিথ্যা বিষয় হিসাবে, আমি এটিকে আপনার প্রদত্ত ভাষায় সত্য এবং মিথ্যা কী তা ব্যাখ্যা করার প্রবণতা রেখেছি - চেষ্টা করুন [ 0 == 0 ] ; echo $?এবং[ 0 == 1 ] ; echo $?
ডিজিটাল ট্রমা

1

> <> (ফিশ) , 50 বাইট

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

একই অবস্থানে একই পদের চিঠি প্রত্যাশা করে।

ব্যাখ্যা

  • i:3b*(?v88+0.লুপিং জাম্প সরবরাহ করে স্ট্যাকের মধ্যে প্রথম শব্দটি পড়ে
  • ~ri-&~স্ট্যাক থেকে পৃথককারী স্থানটি সরিয়ে দেয় , স্ট্যাকটি বিপরীত করে r(প্রথম অক্ষরটি শীর্ষে থাকবে), দ্বিতীয় শব্দের প্রথম অক্ষরে পড়ে i, প্রথম শব্দের প্রথম অক্ষর থেকে অফসেট গণনা করে -এটি রেজিস্টারে সংরক্ষণ করে &
  • l?!^i-&:&-2d*%0)?vপ্রথম শব্দের সংশ্লিষ্ট চিঠি থেকে এটি দ্বিতীয় শব্দটির প্রতিটি অক্ষর পাঠ করে যা স্ট্যাকের শীর্ষে রয়েছে &:&-যা রেজিস্টারে সঞ্চিত অফসেটটি সাবট্রাক্ট করে এবং ফলাফল 0 মড 26 হয় কিনা তা পরীক্ষা করে 2d*%। 0 এবং প্রিন্ট না হলে 0n;c1.লুপিং জাম্প সরবরাহ করে।
  • দ্বিতীয় শব্দের শেষে পৌঁছে গেলে প্রোগ্রামটি 1 টি প্রিন্ট করে এবং সমাপ্ত হয় 1n;

0

কেডিবি (কিউ), 35 বাইট

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

ব্যাখ্যা

                         "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

পরীক্ষা

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

0

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

সম্প্রসারিত:

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

আমি যদি সমস্ত কিছু বড় হাতের রূপান্তর থেকে মুক্তি পেয়ে যাই তবে আমি 14 বাইট সংরক্ষণ করতে পারতাম, তবে আমি মনে করি এটি এটিকে ছেড়ে দেওয়া আরও সম্পূর্ণ।


0

জেলি , 5 বাইট

Oạ/ċ2

এটি অনলাইন চেষ্টা করুন!

অন্যথায় 0 এর সমতুল্যের জন্য ধনাত্মক পূর্ণসংখ্যা আউটপুট দেয়

কিভাবে এটা কাজ করে

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.