সিজার শিফটিং


22

একটি সিজার শিফট সম্ভবত এমন কিছু যা আমরা সকলেই পরিচিত।

(আপনি এমনকি এটি হোম ওয়ার্কের কাজ হিসাবেও করছেন so যদি তাই হয় তবে দয়া করে এই উত্তরগুলি অনুলিপি করবেন না, আপনার শিক্ষক অবশ্যই অবশ্যই এখানে উত্তরগুলির মতো কিছু চান না))

আপনি যদি না হন তবে সিজার শিফট হ'ল সাইফারের একটি খুব সাধারণ রূপ। সিফার্ড এবং পূর্ণসংখ্যার জন্য স্ট্রিং লাগে। তারপরে স্ট্রিংয়ের প্রতিটি বর্ণানুক্রমিক চরিত্রের জন্য, নিম্নলিখিত রূপান্তরটি সম্পাদন করুন:

  1. বর্ণমালায় চরিত্রের অবস্থান নিয়ে কাজ করুন (0 ভিত্তিক)
  2. শুরুতে পূর্ণসংখ্যা প্রাপ্ত সংখ্যাটিতে যুক্ত করুন।
  3. সংখ্যাটি 25 এর চেয়ে বড় হলেও এটি থেকে 26 টি বিয়োগ করুন।
  4. বর্ণমালার যে অবস্থান রয়েছে তার অবস্থানটি নিয়ে কাজ করুন।

বাকি চরিত্রগুলি আনশিফ্টে ছেড়ে দিন।

মূলধন অক্ষরকে সম্মান করতে হবে কারণ মূলধন বর্ণ ছাড়া ইংরেজি কী?

উদাহরণ:

abcdefghijklmnopqrstuvwxyz 1 -> bcdefghijklmnopqrstuvwxyza
Spam spam spam sausage and spam! 13 -> Fcnz fcnz fcnz fnhfntr naq fcnz!
abcdefghijklmnopqrstuvwxyz 52 -> abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz -1 -> zabcdefghijklmnopqrstuvwxy
ABCxyz 3 -> DEFabc

অনুমিতি

  • আপনি যে কোনও মুদ্রণযোগ্য ASCII অক্ষর পেতে পারেন
  • ইনপুট নম্বরটি নেতিবাচক হতে পারে এবং সর্বদা -128 এর চেয়ে বড় এবং তারপরে 128 ( -128<x<128) এর চেয়ে কম হবে
  • আপনাকে অবশ্যই বড় আকারের অক্ষর এবং অ-মূলধনী অক্ষরগুলি বিপরীতভাবে এনকোড করতে সক্ষম হতে হবে।
  • আপনাকে অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম তৈরি করতে হবে, কেবল কোনও ফাংশন বা স্নিপেট নয়
  • আপনি STDIN বা নিকটতম বিকল্প থেকে আপনার ইনপুট পাবেন
  • আপনি আপনার ইনপুটটির জন্য ফর্ম্যাটটি চয়ন করতে পারেন, দয়া করে আপনার উত্তরে এটি লিখুন
  • যে অক্ষরগুলি স্থানান্তরিত হওয়া দরকার সেগুলি হ'ল এএসসিআইআই কোডপয়েন্ট 0x41 - 0x5Aএবং 0x61-0x7A- আপার এবং লোয়ার কেস লেটার

    • বড় হাতের অক্ষরগুলি উপরের থাকা উচিত
    • লোয়ার কেসের চিঠিগুলি কম থাকে
    • এই ব্যাপ্তিতে নেই এমন অক্ষরগুলি যেমন রয়েছে তেমন রেখে দেওয়া উচিত
  • এই চ্যালেঞ্জের জন্য দ্রষ্টব্য, আপনাকে কেবল সাইফার স্ট্রিংগুলি করতে হবে, আপনি সেগুলি স্বয়ংক্রিয়ভাবে সমাধান করতে সক্ষম হবেন না (তবে -xদেওয়াই সাইফারের বিপরীত হবে)


যেহেতু এটি একটি ক্যাটালগ, তাই এই চ্যালেঞ্জের পরে তৈরি ভাষাগুলিকে প্রতিযোগিতা করার অনুমতি দেওয়া হয়। নোট করুন যে সেখানে একজন দোভাষী থাকতে হবে যাতে জমা দেওয়ার পরীক্ষা করা যায়। পূর্ববর্তী অপ্রয়োজনীয় ভাষার জন্য নিজেকে এই অনুবাদক লিখতে (এবং এমনকি উত্সাহিত) অনুমতি দেওয়া হয়েছে। তা ছাড়া সমস্ত স্ট্যান্ডার্ড নিয়ম মানতে হবে। বেশিরভাগ ভাষায় জমা দেওয়া যথাযথ প্রিক্সিস্টিং এনকোডিংয়ে (সাধারণত ইউটিএফ -8) বাইটে স্কোর করা হবে।

তালিকা

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে ক্যাটালগ তৈরি করে a) ভাষার প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

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

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [<><](https://esolangs.org/wiki/Fish), 121 bytes


8
"আপনি এমনকি এটি হোমওয়ার্কের কাজ হিসাবেও করছেন। যদি তাই হয় তবে দয়া করে এই উত্তরগুলি অনুলিপি করবেন না, আপনার শিক্ষক অবশ্যই উত্তরগুলির মতো এখানে কিছু চান না ।" আমি অবাক হয়েছি আপনি যদি কোনও শিক্ষককে নোংরা চরিত্র এবং শর্টকাটগুলির 90-বাইট
কলডেজ হস্তান্তর করেন

উত্তর:


9

পাইথ, 13 বাইট

uXGH.<HQrBG1z

পরীক্ষা স্যুট

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


খুব সুন্দর, আমি বিভক্তকরণটি ভুলে যেতে থাকি ...: পি
ফ্রাইআমএইজিগম্যান


5

বাশ + বিএসডি-গেমস প্যাকেজ, 21

caesar $[($1+130)%26]

বিল্টিন এফটিডাব্লু! প্রায় ম্যাথমেটিকার মতো অনুভূত হয়। পাইথ উত্তরগুলি এখনও কম।

ইনপুট স্ট্রিংটি STDIN থেকে পাঠানো হয় এবং কমান্ড-লাইন থেকে পূর্ণসংখ্যা হয়। উদাহরণ:

$ ./caesar.sh 13 <<< "Spam spam spam sausage and spam!"
Fcnz fcnz fcnz fnhfntr naq fcnz!
$

বা যদি আপনি বিল্টিন পছন্দ না করেন:

বাশ + কোর্টিলস, 63

printf -va %s {a..z}
t=${a:$1%26}${a:0:$1%26}
tr A-Z$a ${t^^}$t

আমার কাছে মনে হয় যে কোর্টিলস সংস্করণ -127 এবং / অথবা 127 এর সাথে কাজ করে না?
নীল

নিল হ্যাঁ ভালো বল ধরা. সংশোধন করা হয়েছে।
ডিজিটাল ট্রমা

5

জাভাস্ক্রিপ্ট (ES6), 122 118 114 111 বাইট

alert((p=prompt)().replace(/[a-z]/gi,c=>String.fromCharCode((x=c.charCodeAt(),a=x&96,x-a+n+129)%26-~a),n=+p()))

সংরক্ষিত 4 বাইট @ নীলকে ধন্যবাদ !

ব্যাখ্যা

প্রথম প্রম্পট ইনপুট স্ট্রিং নেয়। দ্বিতীয়টি হ'ল প্রতিটি বর্ণ দ্বারা স্থানান্তরিত করার সংখ্যা।

alert(
  (p=prompt)()              // get input string
    .replace(/[a-z]/gi,c=>  // for each letter
      String.fromCharCode((
        x=c.charCodeAt(),   // x = code of character
        a=x&96,             // a = index of letter a (-1) in same capitalisation
        x-a+n+129)%26-~a    // add N to the letter code and wrap at 26
      ),                    // (+129 is needed to make the % work with negative numbers)
      n=+p()                // get number to shift by
    )
)

1
খুব সুন্দর! তবে এটি সমস্ত ইনপুটগুলিতে কাজ করে না; চেষ্টা "abcdefg", -26। সূত্রটি এ পরিবর্তন করে এটি ঠিক করা যেতে পারে (x-a+n+130)%26
ইটিএইচ প্রোডাকশনস

এইচটি প্রোডাকশনস এটি ধরার জন্য ধন্যবাদ!
ব্যবহারকারী 81655

"আপনাকে অবশ্যই একটি সম্পূর্ণ অনুষ্ঠান তৈরি করতে হবে, কেবল কোনও ফাংশন বা স্নিপেট নয়"
LegionMammal978

@ LegionMammal978 ধন্যবাদ, আমি এটি লক্ষ্য করিনি।
ব্যবহারকারী 81655

নেই a=x&96,(x-a+n+129)%26+a+1সহায়তা প্রয়োজন?
নীল

3

সিজেম, 34 22 21 20 বাইট

1 বাইট সংরক্ষণের জন্য FryAmTheEggman কে ধন্যবাদ।

l'[,_el^_26/l~fm<ser

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

ইনপুট হ'ল স্ট্রিংটি প্রথম লাইনে শিফট করা হবে এবং দ্বিতীয়টিতে শিফট হবে।

ব্যাখ্যা

l    e# Read the first line of input.
'[,  e# Push a string with all ASCII characters up to and including Z.
_el  e# Duplicate and convert to lower case. This only affects the letters.
^    e# Symmetric set-difference: except for the letters, each character appears in both
     e# sets and will be omitted from the difference, but all the letters will be included.
     e# This gives us "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
_26/ e# Duplicate and split into chunks of 26 characters, separating lower and upper case.
l~   e# Read the second line of input and evaluate.
fm<  e# Shift each of the two substrings by that many characters to the left.
s    e# Convert to a single string, joining both substrings back together.
     e# On the stack are now the input, the letters in alphabetical order and the letters
     e# in shifted order.
er   e# Character transliteration: replace each occurrence of a letter with the character
     e# at the corresponding position in the shifted string.

@ ফ্রাইআম দ্য এজম্যান দ্য '[,_el^ডেনিসের একটি পরামর্শ। fযদিও আপনি এর অর্থ কি তা আমি জানি না , এটি মোটামুটি স্বাভাবিক ব্যবহারের মতো বলে মনে হচ্ছে?
মার্টিন ইন্ডার

আমি অনুমান করি যে আমি কেবল পর্যাপ্ত সিজেএম উত্তরগুলি পড়িনি: পি মানচিত্রের মতো এটি ব্যবহার করা কিন্তু যুক্তির ক্রম পরিবর্তন করা সত্যই ঝরঝরে বলে মনে হচ্ছে।
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আসলে, আমার একেবারেই দরকার নেই @। :)
মার্টিন ইন্ডার

2

জাভা, 249 বাইট

এটি যতটা সংক্ষিপ্ত আমি এটি পেতে পারি। স্টিডিন থেকে পড়া এক টন বাইট খায়। কমান্ড লাইন আরগস ব্যবহার করে একটি সমাধান লক্ষণীয়ভাবে সংক্ষিপ্ত হয় তবে, এই টাস্কটি ইনপুটটির জন্য স্ট্যান্ডিন নির্দিষ্ট করে।

ইনপুট ফর্ম্যাট হ'ল স্ট্রিং এর পরে একটি নতুন লাইনে শিফ্ট নম্বর।

interface C{static void main(String[]a){java.util.Scanner r=new java.util.Scanner(System.in);String s=r.nextLine();int i=(r.nextInt()+26)%26;s.chars().forEach(c->System.out.print((char)(c>64&c<91|c>96&c<123?c<91?65+(c+i-65)%26:97+(c+i-97)%26:c)));}}

কমান্ড লাইন যুক্তি ব্যবহার করে এই সমাধানটি কেবল 188 বাইট। ইনপুট হ'ল প্রথম আর্গুমেন্ট হিসাবে স্ট্রিং এবং দ্বিতীয় হিসাবে শিফট।

interface C{static void main(String[]a){int i=(Integer.parseInt(a[1])+26)%26;a[0].chars().forEach(c->System.out.print((char)(c>64&c<91|c>96&c<123?c<91?65+(c+i-65)%26:97+(c+i-97)%26:c)));}}

1

আর, 111 বাইট

কোড

n=scan();s=scan(,"");for(l in as.numeric(sapply(s,charToRaw))){v=97;if(l<97)v=65;cat(intToUtf8((l+n-v)%%26+v))}

ungolfed

n <- scan()                           # input integer
s <- scan(,"")                        # input string letter by letter
z <- as.numeric(sapply(s,charToRaw))  # get ASCII index of character
for (l in z){                         # loop through chars
  v=97                                # base index of not capitalized chars
  if(l<97)v=65                        # base index of capitalized chars
  cat(intToUtf8((l+n-v)%%26+v))       # paste the char of the shifted index
}

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


1

পার্ল, 81 বাইট

( -pপতাকাটির জন্য +1 )

s/[^ ]+ //;$n=$&%26;eval"y/a-zA-Z/".($x=chr(97+$n)."-za-".chr$n+96).uc$x."/"if$n

এখনও এটি গল্ফ করে কাজ করছে ...

টেস্ট:

llama@llama:...code/perl/ppcg67044caesar$ printf '1 abcdefghijklmnopqrstuvwxyz\n13 Spam spam spam sausage and spam!\n52 abcdefghijklmnopqrstuvwxyz\n-1 abcdefghijklmnopqrstuvwxyz\n3 ABCxyz' | perl -p caesar.pl; echo
bcdefghijklmnopqrstuvwxyza
Fcnz fcnz fcnz fnhfntr naq fcnz!
abcdefghijklmnopqrstuvwxyz
zabcdefghijklmnopqrstuvwxy
DEFabc


1

পাইথন 2, 163 160 বাইট

আমি এখনও এটি গল্ফ করতে পারি কিনা তা নিশ্চিত নন ..

import sys;k=sys.argv
def f(x,n):r=chr((ord(x.lower())-97+n)%26+97);return(x,[r,r.upper()][x.isupper()])
print''.join(f(x,int(k[2]))[x.isalpha()] for x in k[1])

যেহেতু এটি বেশ অপঠনযোগ্য, তাই এখানে একটি অসমাপ্ত সংস্করণ:

import sys

def shift(x,n):
    # shift character x by n (all in lowercase)
    r = chr((ord(x.lower())-97+n)%26+97)
    if x.isalpha() and x.islower():
        return r
    elif x.isalpha() and x.isupper():
        return r.upper()
    else:
        return x

# 'map' the function shift to each character of the input   
output = ''.join(shift(x,int(sys.argv[2])) for x in sys.argv[1])
print(output)

ইনপুট সম্পর্কিত: এটি দুটি যুক্তি প্রত্যাশা করে, প্রথমটি অবশ্যই একটি স্ট্রিং এবং দ্বিতীয়টি পূর্ণসংখ্যার (শিফ্টের পরিমাণ) হতে হবে be উদাহরণ (ফাইল বলা হয়)csr.py ):

$ python csr.py gnu 9
pwd
$ python csr.py "Spam spam spam sausage and spam\!" 13
Fcnz fcnz fcnz fnhfntr naq fcnz!

দ্রষ্টব্য: দ্বিতীয় উদাহরণে একটি পালানোর চরিত্র এবং ""প্রয়োজন


1

পাইথন 2, 118 116 বাইট

s,n=input()
print''.join([[c,chr((ord(c)-97+n)%26+97)]['`'<c<'{'],chr((ord(c)-65+n)%26+65)]['@'<c<'[']for c in s)

আপনি if/elseউদাহরণগুলির পরিবর্তে তালিকাগুলি ব্যবহার করতে চাইতে পারেন ( কোডগল্ফ.স্ট্যাকেক্সেঞ্জারএইচএ / 62২ / 6868৮৮৫ ) উদাহরণস্বরূপ, print''.join([[c,chr((ord(c)-97+n)%26+97)]['~'<c<'{'],chr((ord(c)-65+n)%26+65)]['@'<c<'[']for c in s)একটু খাটো, এবং একই কাজ করা উচিত। (আপনার আগের মতো
টিল্ডটিকে

1

গণিত, 117 বাইট

Echo[InputString[]~StringReplace~Thread[Join[a=Alphabet[],b=ToUpperCase@a]->(c=RotateLeft)[a,d=Input[]]~Join~c[b,d]]]

স্ট্রিং নেয়, একটি নতুন লাইন পরে, শিফিং ফ্যাক্টর অনুসরণ করে। এখনও গল্ফযোগ্য হতে পারে ...


1

পার্ল 6 , 73 + 1 = 74 বাইট

$ perl6 -pe 's:g:i/<[a..z]>/{chr ((my$o=ord ~$/)-(my$a=$o+&96+1)+BEGIN get%26)%26+$a}/' # 73+1

ইনপুটটির প্রথম লাইন হ'ল অক্ষরকে উপরে স্থানান্তরিত করতে অক্ষরের সংখ্যা।

ব্যবহার:

$ perl6 -pe 's:g:i/<[a..z]>/{...}/' <<< \
'1
abcdefghijklmnopqrstuvwxyz'
bcdefghijklmnopqrstuvwxyza
$ perl6 -pe 's:g:i/<[a..z]>/{...}/' <<< \
'13
Spam spam spam sausage and spam!'
Fcnz fcnz fcnz fnhfntr naq fcnz!
$ perl6 -pe 's:g:i/<[a..z]>/{...}/' <<< \
'52
abcdefghijklmnopqrstuvwxyz'
abcdefghijklmnopqrstuvwxyz
$ perl6 -pe 's:g:i/<[a..z]>/{...}/' <<< \
'-1
abcdefghijklmnopqrstuvwxyz'
zabcdefghijklmnopqrstuvwxy
$ perl6 -pe 's:g:i/<[a..z]>/{...}/' <<< \
'3
ABCxyz'
DEFabc
$ perl6 -pe 's:g:i/<[a..z]>/{...}/' <<< \
'1000000000000000000000000000000000000000
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ'
mnopqrstuvwxyzabcdefghijkl
MNOPQRSTUVWXYZABCDEFGHIJKL

1

সি ++, 163 154 152 বাইট

#include<cstdio>
#include<cstdlib>
int main(int x,char**a){for(int c,b,s=atoi(a[1]);1+(c=getchar());putchar(c<b|c>b+26?c:(c+s-b+26)%26+b))b=c<97?65:97;}

ব্যবহার:

$ ./caesar -1 <<< "123 a A z Z aBcDeFgHiKlMnOpQrStUvWxYz"
123 z Z y Y zAbCdEfGhJkLmNoPqRsTuVwXy

0

k4, 80 বাইট

প্রোগ্রামটি শিফট নম্বরটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে এবং স্টিডিনের পাঠ্য পাঠ করে।

কোনও প্রযুক্তিগত প্রতিবন্ধকতার কারণে, নেতিবাচক শিফটগুলিকে হাইফেন-বিয়োগের পরিবর্তে আন্ডারস্কোর দিয়ে এনকোড করতে হবে। (এই এনকোডিংটির ব্যাখ্যা করার জন্য পার্সার ছাড়াই সমাধানটি 64 বাইট হবে))

% wc -c c.k
80 c.k
% cat c.k
c:{x;,/x{y!(x_y),x#y}'.Q`a`A}
.z.pi:{1@x^c[.q.mod[.*{x^((!).$"_-")x}.z.x]26]x;}
% 

এখানে কার্যকর করা উদাহরণগুলি:

% echo abcdefghijklmnopqrstuvwxyz|q c.k 1
bcdefghijklmnopqrstuvwxyza
% echo 'Spam spam spam sausage and spam!'|q c.k 13
Fcnz fcnz fcnz fnhfntr naq fcnz!
% echo abcdefghijklmnopqrstuvwxyz|q c.k 52
abcdefghijklmnopqrstuvwxyz
% echo abcdefghijklmnopqrstuvwxyz|q c.k _1
zabcdefghijklmnopqrstuvwxy
% echo ABCxyz|q c.k 3
DEFabc
%

এবং এখানে একটি নির্বোধ সামান্য পরীক্ষার জোতা যা এনকোড এবং ডিকোড উভয়ই যাচাই করে। (এটি zsh; এর জন্য bashবা এর জন্য লুপকে ইনডেক্সিং kshপরিবর্তন করুন One এক-ভিত্তিক অ্যারে, উঘ ....)for((i=0;i<5;i++))

% a=(abcdefghijklmnopqrstuvwxyz 'Spam spam spam sausage and spam!' abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz ABCxyz)
% b=(1 13 52 _1 3)
% c=(bcdefghijklmnopqrstuvwxyza 'Fcnz fcnz fcnz fnhfntr naq fcnz!' abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy DEFabc)
% for ((i=1;i<=5;i++))
for> do
for>     r=$(echo "${a[i]}"|q c.k "${b[i]}")
for>     s=$(echo "$r"|if [[ ${b[i]} == _* ]]; then q c.k "${b[i]/_}"; else q c.k "_${b[i]}"; fi)
for>     printf '%s\t%s\n' "$([[ ${c[i]} == $r ]] && echo good || echo bad)" "$([[ ${a[i]} == $s ]] && echo good || echo bad)"
for> done
good    good
good    good
good    good
good    good
good    good
% 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.