সিজার শিফট শিফট


13

বিবরণ

সিজার শিফট হ'ল একটি খুব সরল মনোফলাব্যাটিক সাইফার যেখানে প্রতিটি বর্ণ বর্ণমালার পরে একটি করে প্রতিস্থাপন করে। উদাহরণ:

Hello world! -> IFMMP XPSME!

( IBSLR, EGUFV!প্রকৃত চ্যালেঞ্জের জন্য আউটপুট, এটি 1 দ্বারা স্থানান্তরিত করার একটি উদাহরণ ছিল)

আপনি দেখতে পাচ্ছেন, ব্যবধান এবং বিরামচিহ্নগুলি অপরিবর্তিত রয়েছে। যাইহোক, বার্তাটি অনুমান করা রোধ করতে, সমস্ত চিঠি মূলধন করা হয়। চিঠিগুলি আবার স্থানান্তরিত করে, বার্তাটি ডিক্রিফার্ড, সুবিধাজনক, তবে অন্য ব্যক্তিদের দ্বারা বোঝার পক্ষে সত্যই সহজ, যারা এই বার্তার অর্থ কী তা জানেন না বলে ধারণা করা হয়।

সুতরাং, আমরা সিজারকে তার সাইফারের একটি উন্নত রূপ ব্যবহার করে কিছুটা সহায়তা করব: স্ব-স্থানান্তরকারী সিজার শিফট !

চ্যালেঞ্জ

আপনার টাস্কটি এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হয়, যা এনকাইফারকে একটি স্ট্রিং দেওয়া হয়, ইনপুটটির সাথে সম্পর্কিত এনক্রিপ্ট করা স্ট্রিংকে আউটপুট দেয়। উন্নত সিজার শিফট এর মতো কাজ করে:

1. Compute letter differences of all adjacent letters: 
    1.1. Letter difference is computed like this:

         Position of 2nd letter in the alphabet
        -Position of 1st letter in the alphabet
        =======================================
                              Letter difference

    1.2. Example input: Hello
         H - e|e -  l|l  -  l|l  -  o
         7 - 5|5 - 12|12 - 12|12 - 15 Letter differences: 3; -7; 0; -3
            =3|   =-7|     =0|    =-3

2. Assign the letters continously a letter difference from the list,
   starting at the second letter and inverting the differences:
    2.1. 2nd letter: first difference, 3rd letter: second difference, etc.

    2.2. The first letter is assigned a 1.

    2.3. Example input: Hello with differences 3; -7; 0; -3

         Letter || Value
         =======||======
            H   ||   1
            E   ||  -3
            L   ||   7
            L   ||   0
            O   ||   3

3. Shift the letters by the value x they have been assigned:
    3.1. In case of a positive x, the letter is shifted x letters to the right.
    3.2. In case of a negative x, the letter is shifted |x| letters to the left.
    3.3. In case of x = 0, the letter is not shifted.

    3.4. If the shift would surpass the limits of the alphabet, it gets wrapped around
         Example: Y + Shift of 2 --> A

    3.5. Example input: See the table under 2.3.

                ||       || Shifted
         Letter || Value || Letter
         =======||=======||=========
            H   ||   1   ||    I
            E   ||  -3   ||    B     Program output:
            L   ||   7   ||    S     IBSLR
            L   ||   0   ||    L
            O   ||   3   ||    R

ফাঁকা স্থান এবং অন্যান্য বিশেষ চিহ্ন যেমন বিরামচিহ্নগুলি এই প্রক্রিয়াতে এড়িয়ে যায়। এটির গ্যারান্টিযুক্ত যে আপনার প্রোগ্রামকে কেবল একটি মুদ্রণযোগ্য ASCII অক্ষরযুক্ত একটি স্ট্রিং দেওয়া হবে। আপনার ফাংশন / প্রোগ্রামের আউটপুট অবশ্যই কেবলমাত্র বড় আকারের হওয়া উচিত।

এটি , সুতরাং স্ট্যান্ডার্ড লুফোলগুলি প্রয়োগ হয় এবং বাইটের মধ্যে সংক্ষিপ্ত উত্তরটি জিততে পারে!


2
তাই না E -3?
লিকি নুন

3
বর্ণের বর্ণের বর্ণ যদি বর্ণের বাইরে চলে আসে? যেমন ZEN, উদাহরণস্বরূপ। Z1 দ্বারা স্থানান্তরিত হয় ... A? (পার্শ্ব নোট হিসাবে, 05AB1E উত্তরটি Zরূপান্তরিত হয় A)
মিঃ এক্সকোডার

6
দয়া করে পরীক্ষা করুন এছাড়াও, কোন চরিত্রগুলি ঠিক এড়িয়ে চলেছে? এবং তাদের এড়িয়ে যাওয়ার অর্থ কী? সেগুলি কি পুরোপুরি সরানো হয়েছে, না তাদের আউটপুটে থাকতে হবে?
লুইস মেন্ডো

1
@ জিউজেপ্প পরীক্ষার কেসগুলির জন্য উত্সাহিত উত্তরগুলি দেখুন, সেগুলিকে ওপি দ্বারা যথাযথভাবে যাচাই করা হয়েছে, আমি ধরে নিইব, বা তাদের ডাউনওয়েট থাকবে।
ম্যাজিক অক্টোপাস উরান

2
আপনি কি একই শব্দটির জন্য RELIEFএবং RELIESএকই ফলকে উভয় এনসিফারকে বোঝাতে চেয়েছিলেন SRSFAG?
অ্যান্ডারস কাসের্গ

উত্তর:


5

05 এ বি 1 ই , 28 27 24 বাইট

láÇ¥R`XIlvyaiAyk+Aèëy}u?

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

ব্যাখ্যা

l                          # convert input to lower case
 á                         # keep only letters
  ǥ                       # compute deltas of character codes
    R`                     # reverse and push separated to stack
      X                    # push 1
       Ilv                 # for each char y in lower case input
          yai              # if y is a letter
             Ayk           # get the index of y in the alphabet
                +          # add the next delta
                 Aè        # index into the alphabet with this
            ëy             # else push y
              }            # end if
            u?             # print as upper case

আমরা উভয় পেতে IBSLR, EGUFV!জন্য Hello, World!, এটা কি ঠিক? ওপি কি এই উদাহরণটিকে বিশৃঙ্খল করে তুলেছে?
ম্যাজিক অক্টোপাস উরান

1
@ ম্যাজিক অ্যাক্টোপাস উর্ন: শুরুতে তাঁর উদাহরণটি কেবল শিফট কী তা দেখায়। এটি কেবলমাত্র 1 টি অক্ষর দ্বারা স্থানান্তরিত হয়েছে যাতে এটি বেশ বিভ্রান্তিকর।
এমিগিনা

4

পাইথন 3 , 100 বাইট

b=0
for c in map(ord,input().upper()):
 if 64<c<91:b,c=c,(c+c-(b or~-c)-65)%26+65
 print(end=chr(c))

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

bশেষ চিঠির এএসসিআইআই কোডটি ট্র্যাক রাখে বা প্রাথমিকভাবে শূন্য হয়; সূত্র c+c-(b or~-x)হওয়া ASCII কোড সহ একটি চিঠি অর্থ cদ্বারা স্থানান্তরিত পরার c-bযদি bনন-জিরো, এবং c-(c-1) == +1যদি b(খুব প্রথম চিঠি জন্য) শূন্য।

bআর কখনই শূন্য হয়ে উঠবে না, কারণ স্ট্রিংটি মুদ্রণযোগ্য এএসসিআইআই অক্ষরের সমন্বয়ে গ্যারান্টিযুক্ত ।

অবশেষে, বড় হাতের ASCII চিঠি 64<c<91কিনা cতা যাচাই করে এবং (…-65)%26+65সবকিছুকে আবার পরিসীমাতে আবৃত করে A-Z

ovs একটি বাইট সংরক্ষণ করে। ধন্যবাদ!





1

এমএটিএল , 27 বাইট

tXkt1Y2mXH)tlwdh+64-lY2w)H(

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

আমি মনে করি এটি আমার পক্ষে সবচেয়ে সংক্ষিপ্ত, তবে প্রচুর বিভিন্ন প্রকার রয়েছে যেহেতু প্রচুর 'ভেরিয়েবল' (সেখানে 3 t(সদৃশ) এবং 2 টি w(অদলবদল) অপারেশন রয়েছে, ক্লিপবোর্ড Hব্যবহৃত হয়েছে এবং তারপরেও একটি অনুলিপি আছে 1Y2...)। দুঃখের বিষয়, আমি স্বয়ংক্রিয় Mক্লিপবোর্ডের সাহায্যে বাইটগুলি সংরক্ষণ করতে পারি নি ।

প্রোগ্রামের অর্ধেকেরও বেশি এটি বড় হাতের অক্ষরে তৈরি এবং অ-বর্ণমালা অক্ষর উপেক্ষা করার জন্য উত্সর্গীকৃত - কেবল সাইফারটি 13 বাইটের বেশি নয় ( এটি অনলাইনে চেষ্টা করুন! )


1

পার্ল, 90 89

নন-কোডগল্ফ ভাষা খুব কমই প্রতিযোগিতামূলক হলেও আমরা 100% এর নিচে যেতে পারি)

@a=split//,<>;say uc(++$a[0]).join'',map{uc chr(2*ord($a[$_+1])-ord($a[$_])+!$_)}0..$#a-1

আমি সিদ্ধান্ত নিয়েছি

@a = split//,<>; এসটিডিএন থেকে ইনপুট নেয়, অক্ষর তালিকা (নিউলাইন সহ!) @A এ সঞ্চয় করে।

say uc(++$a[0])আউটপুট বড় হাতের অক্ষর প্রথম অক্ষরটি ১ দ্বারা স্থানান্তরিত হয়েছে Turn এটি একটি মিউটর অফ।

2*ord($a[$_+1])-ord($a[$_])+!$_আমাদের এক্স এর সাথে অক্ষর নিতে এবং পার্থক্যটি + (x- (x-1)) যোগ করতে বলা হয়। আচ্ছা এটি 2x - (x-1)। তবে: আমি প্রথম চিঠিটি বদলেছি! সুতরাং আমি সেই ত্রুটিটি সংশোধন করতে পেরেছি +!$_, যার ফলে 0 পজিশনে খুব বেশি লোককে বিয়োগ করার জন্য এটি সঠিক হবে (কেবলমাত্র! $ _ অপরিশোধিত নয়)। আমরা তখন uc chrগণনা করা ASCII মান থেকে একটি বড় অক্ষর পেতে পারি।

map{ ... } $#a-2- $#aসর্বশেষ অ্যারে উপাদান অ্যাক্সেস করার অবস্থান। যেহেতু আমি আমার চাই একটি যুক্ত করছি $#a-1, তবে ইনপুট থেকে নতুন লাইনটি উপেক্ষা করা দরকার, এটি $#a-2

এটি প্রথম চিঠির সাথে সম্মিলিত হয় এবং আমরা সম্পন্ন করি :)


বর্ণমালার চারপাশে মোড়ানো এবং অ-বর্ণমালা সংক্রান্ত অক্ষরগুলির সাথে অফসেটগুলি মোকাবেলায় এতে কিছু সমস্যা হয়েছে বলে মনে হচ্ছে। এটি অনলাইন চেষ্টা করুন!
এক্সকালি

1

পার্ল 5 -F , 73 77 74 বাইট

/\w/&&($_=chr 65+(2*($n=ord uc)-65-($!||-1+ord uc))%26)&($!=$n)for@F;say@F

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


এটি সম্পূর্ণরূপে নন-অক্ষরগুলি এড়িয়ে যায় না; এটি কেবল তাদের রূপান্তর করে না। আমি মনে করি এর Hello, World!ফলাফল হওয়া উচিত IBSLR, EGUFV!, না IBSLR, XGUFV!
টাইটাস

তুমি ঠিক বলছো. আগের চিঠিটি সংরক্ষণের জন্য আরও 4 টি বাইট দিয়ে এটি স্থির করে।
এক্সকালি

1

পিএইচপি, 106 98 বাইট

বেশ খারাপ যে এক ... যদি base_convertএত দীর্ঘ না হয় (বা ctype_alpha) ...
তবে আমি এটি 100 এর নিচে পেয়েছি। সন্তুষ্ট

for(;$a=ord($c=$argn[$i++]);print ctype_alpha($c)?chr(65+($p?(25-$p+2*$p=$a)%26:$p=$a)):$c)$a&=31;

পাইপ হিসাবে চালান -nRবা এটি অনলাইনে চেষ্টা করুন


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