কীবোর্ড শিফট সিফার


21

নিম্নলিখিত ইনপুট দেওয়া হয়েছে:

  • একটি পূর্ণসংখ্যা nযেখানেn > 0
  • একটি স্ট্রিং sযেখানে sখালি নয় এবং s~=[0-9A-Z]+(কেবলমাত্র আলফা-সংখ্যার মূলধনগুলি)।

একটি স্ট্যান্ডার্ড, সরলীকৃত QWERTY কীবোর্ড ব্যবহার (নীচে দেখানো হয়েছে):

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

নিম্নলিখিত ক্রিয়াকলাপ সম্পাদন করুন:

  • প্রতিটি অক্ষর কীবোর্ডে থাকা মূল সারিটি সন্ধান করুন।
  • চিঠির nআসল অবস্থান + n এর উপর ভিত্তি করে সঠিক স্থানান্তরিত সমতুল্য দিয়ে প্রতিস্থাপন করুন ।
    • ইজি s="AB"এবং n=2: Aহয়ে যাবে Dএবং Bহয়ে যাবে M
  • যদি keyboard_row[position + n] > keyboard_row.length, আবার শুরুতে মোড়ানো।
    • ইজি s="0P"এবং n=2: 0হয়ে যাবে 2এবং Pহয়ে যাবে W

উদাহরণ:

f("0PLM",1)    = 1QAZ
f("ZXCVB",2)   = CVBNM
f("HELLO",3)   = LYDDW
f("0PLM",11)   = 1QSV
f("0PLM",2130) = 0PHX

বিধি

  • এটি , সর্বনিম্ন বাইট-কাউন্ট জেতা।

এটি প্রথম নজরে দেখে মনে হয় তার চেয়ে কিছুটা বেশি কঠিন।


2
আমাদের কি স্ট্রিংয়ের পরিবর্তে অক্ষর-অ্যারে হিসাবে ইনপুট নেওয়ার অনুমতি দেওয়া হচ্ছে? বর্তমানে আমরা ধরে
নিয়েছি

@KevinCruijssen অসহায়তা নিশ্চিত, এটা খুব বিদঘুটে নয়। টাই না ভাঙার জন্য যদি এটি আপনাকে একটি বাইট সংরক্ষণ না করে তবে আমি অভিযোগ করছি না।
যাদু অক্টোপাস উরন

উত্তর:


11

জেলি , 13 বাইট

ØQØDṭ,ṙ€¥⁸F€y

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

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

ØQØDṭ,ṙ€¥⁸F€y  Main link. Left argument: n (integer). Right argument: s (string)

ØQ             Qwerty; set the return value to
               ["QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM"].
  ØD           Digits; yield "0123456789".
    ṭ          Tack, yielding ["QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM", "0123456789"].
        ¥⁸     Call the two links to the left as a dyadic chain, with right
               argument n.
      ṙ€       Rotate each string in the array n units to the left.
     ,         Yield the pair of the unmodified and the rotated string array.
          F€   Flatten each, mapping, e.g., ["QWERTYUIOP", ..., "0123456789"] to
               "QWERTYUIOPASDFGHJKLZXCVBNM0123456789".
            y  Translate s according to the mapping we've built.

2
জেলি কিবোর্ড-লেআউটটি বিল্ট-ইনস এহ আছে?
যাদু অক্টোপাস উরন

4
@ ম্যাজিক অ্যাক্টপাস ইউরন না, এই মুহূর্তে কেবল QWERTY :
পি

13 বাইট? কোন চরিত্রের সেট হওয়ার কথা? ইউটিএফ -8 এ এটি 26 বাইট!
শেফালপড

2
@ সেফালপড জেলি জেলি কোড পৃষ্ঠাটি ব্যবহার করে ।
ডেনিস

9

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

lambda s,n,y='1234567890'*99+'QWERTYUIOP'*99+'ASDFGHJKL'*99+'ZXCVBNM'*99:''.join(y[y.find(c)+n%630]for c in s)

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

এটি প্রতিটি সারির মধ্যে স্বতন্ত্র সংশোধন এড়ানো সঠিক বিকল্প খুঁজে পেতে সর্বাধিক বড় স্ট্রিং (প্রতিটি সারিটির 99 কপি) এবং সারি দৈর্ঘ্যের (630) এর মধ্যে এলসিএম ব্যবহার করে।


7

জাভা 8, 159 158 বাইট

n->s->{for(int i=s.length,j;i-->0;)for(String x:"1234567890;QWERTYUIOP;ASDFGHJKL;ZXCVBNM".split(";"))if((j=x.indexOf(s[i])+n)>=n)s[i]=x.charAt(j%x.length());}

-1 বাইট ধন্যবাদ @ অলিভিগ্রগ্রোয়েয়ারকে সরাসরি মুদ্রণের পরিবর্তে ইনপুট-অ্যারে পরিবর্তন করে ifying

ব্যাখ্যা:

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

n->s->{  // Method with integer and character-array parameters, and no return-type
  for(int i=s.length,j;i-->0;)
         //  Loop over the input character-array with index
    for(String x:"1234567890;QWERTYUIOP;ASDFGHJKL;ZXCVBNM".split(";"))
         //   Inner loop over the qwerty-lines
      if((j=x.indexOf(s[i])+n)>=n)
         //    If the current qwerty-line contains the character
         //     Set `j` to the index of this character on that line + input `n`
        s[i]=x.charAt(j%x.length());}
         //     Replace the character at index `i`
         //     with the new character (at index `j` modulo length_of_qwerty_line)

1
ইনপুট-আউটপুটটিংয়ের ব্যয়ে 158 বাইটchar[]
অলিভিয়ার গ্রাগোয়ার

5

রেটিনা , 49 বাইট

"$&"+T`9o`dQW\ERTYUI\OPQASDFG\HJK\LAZXC\VBNMZ
0A`

এটি অনলাইন চেষ্টা করুন! ইনপুট নেয় nএবং sপৃথক লাইনে। ব্যাখ্যা:

"$&"+

একই পদ্ধতি পুনরাবৃত্তি করুন nবার।

T`9o`dQW\ERTYUI\OPQASDFG\HJK\LAZXC\VBNMZ

সমস্ত অক্ষরকে ডানদিকে একটি চাবি স্থানান্তর করুন।

0A`

মুছুন n


5

জাভাস্ক্রিপ্ট (ES6), 101 99 বাইট

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (s)(n)। অক্ষরের অ্যারে নিয়ে কাজ করে।

s=>n=>s.map(c=>(S='1QAZ2WSX3EDC4RFV5TGB6YHN7UJM8IK_9OL_0P')[(p=S.search(c)+n*4)%(-~'9986'[p%4]*4)])

পরীক্ষার মামলা

কিভাবে?

আমরা পদের জন্য চেহারা পি একটি স্ট্রিং মধ্যে ইনপুট প্রতিটি চরিত্রের এস যেখানে কীবোর্ড সারি দর্শন অন্তর্বর্তীবিরতি করা হয়: প্রথম 4 অক্ষর '1QAZ' (কীবোর্ড প্রথম কলামে), পরবর্তি 4 অক্ষর '2WSX' (দ্বিতীয় কলামে কীবোর্ডের) এবং তাই। অব্যবহৃত অবস্থানগুলি আন্ডারস্কোর দিয়ে প্যাড করা হয় এবং শেষগুলি কেবল খালি ফেলে দেওয়া হয়।

col # | 0    | 1    | 2    | 3    | 4    | 5    | 6    | 7    | 8    | 9
------+------+------+------+------+------+------+------+------+------+---
row # | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 01
------+------+------+------+------+------+------+------+------+------+---
char. | 1QAZ | 2WSX | 3EDC | 4RFV | 5TGB | 6YHN | 7UJM | 8IK_ | 9OL_ | 0P

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

আমরা দ্বারা আগাম 4n অবস্থান, এই সারি (40, 40, 36 এবং 28 যথাক্রমে) জন্য সঠিক মডিউল প্রয়োগ এবং প্রতিস্থাপন চরিত্রে এই নতুন অবস্থানে পাওয়া বাছাই এস



3

সি,  152  149 বাইট

তিনটি বাইট সংরক্ষণের জন্য @ গ্যাস্ট্রোপনারকে ধন্যবাদ!

j,l;f(S,n){for(char*s=S,*k;*s;++s)for(k="1234567890\0QWERTYUIOP\0ASDFGHJKL\0ZXCVBNM\0";l=strlen(k);k+=l+1)for(j=l;j--;)k[j]-*s||putchar(k[(j+n)%l]);}

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

Unrolled:

j,l;
f(S,n)
{
    for (char*s=S, *k; *s; ++s)
        for (k="1234567890\0QWERTYUIOP\0ASDFGHJKL\0ZXCVBNM\0"; l=strlen(k); k+=l+1)
            for (j=l; j--;)
                k[j]-*s || putchar(k[(j+n)%l]);
}

হয় আমি হ্যালুসিনেট করছি, না অভ্যন্তরীণ লুপটি পরিবর্তিত হতে পারে for(j=l;j--;)তবে কেন জানি না কেন অন্য কোনও পরিবর্তন করা হয়নি। এখনও, এর 149. আপনি পাওয়া উচিত
gastropner

@ গ্যাস্ট্রোপনার আহ, হ্যাঁ, অনুসন্ধানের অর্ডারটি কোনও ব্যাপার নয়, তাই এটি কার্যকর হয়। ধন্যবাদ!
স্টেডিবক্স


2

হাস্কেল , 99 বাইট

f(s,n)=[dropWhile(/=c)(cycle r)!!n|c<-s,r<-words"1234567890 QWERTYUIOP ASDFGHJKL ZXCVBNM",elem c r]

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


আপনি এর s#n= ...পরিবর্তে ব্যবহার করতে পারেন f(s,n)= ...উদাহরণগুলির জন্য ব্যবহৃত উদাহরণ উদাহরণ মাত্র।
লাইকনি

1

পার্ল 5 , 94 + 1 ( -p) = 95 বাইট

$s=<>;for$i(1234567890,QWERTYUIOP,ASDFGHJKL,ZXCVBNM){eval"y/$i/".(substr$i,$s%length$i)."$i/"}

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


অভিশাপ, আমি আপনার উত্তরটি দেখতে পেলাম না। এগুলি মূলত একই, আমার অপটিমাইজেশন ব্যবহার করতে নির্দ্বিধায় এবং আমি আমার উত্তরটি সরিয়ে দেব remove আমাকে জানাবেন, যদি না হয় তবে আমি এই মন্তব্যটি সরিয়ে দেব :)
ডম হেস্টিংস

@ ডোমহাস্টিংস এগুলি যথেষ্ট আলাদা। উভয় রাখুন দয়া করে। আমি পদ্ধতির বিভিন্নতা দেখতে পছন্দ করি। আমি তাদের সবার কাছ থেকে শিখেছি ...
টন হসপেল


1

পার্ল, 59 58 57 56 বাইট

+জন্য অন্তর্ভুক্ত-p

STDIN এ 2 লাইন হিসাবে ইনপুট দিন, প্রথম স্ট্রিং, তারপরে পুনরাবৃত্তি করুন

(echo 0PLM; echo 2130) | perl -pe '$a="OPQWERTYUILASDF-MZXCVBNM0-90";eval"y/HI$a/J$a/;"x<>'

বাহ, আমি বিশ্বাস করতে পারি না আপনি আমার কাছ থেকে 29 বাইট পেয়েছেন! আমি এটির সাথে মূলত বেশ খুশি ছিলাম ...
ডম হেস্টিংস



0

রুবি , 101 বাইট

->s,n{n.times{s.tr! '1234567890QWERTYUIOPASDFGHJKLZXCVBNM','2345678901WERTYUIOPQSDFGHJKLAXCVBNMZ'};s}

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

আমি সত্যই কিছুটা হতাশ যে আমি 'চালক' পদ্ধতিতে আরও ভাল করতে পারিনি। আমার কাছে সবচেয়ে কাছেরটি ছিল লাইন বরাবর

a=%w{1234567890 QWERTYUIOP ASDFGHJKL ZXCVBNM}
b=a.map{|r|r[1..-1]<<r[0]}*''
a*=''
n.times{s.tr! a,b}

7 টি অক্ষরের নেট লাভের জন্য।

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