ত্রিফিড সাইফার (মূলশব্দ ছাড়াই)


19

পরিচিতি:

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


জন্য Trifid সাইফার বর্ণমালা (একটি শব্দ ব্যবহার না করে) (এবং অতিরিক্ত ওয়াইল্ডকার্ড) তিন 3 দ্বারা 3 টেবিল ভাগ করা হয়েছে:

table 1:     table 2:     table 3:
 |1 2 3       |1 2 3       |1 2 3
-+-----      -+-----      -+-----
1|a b c      1|j k l      1|s t u
2|d e f      2|m n o      2|v w x
3|g h i      3|p q r      3|y z  

একটি পাঠ্য যা আমরা এনকিফার করতে চাই তা হ'ল টেবিল-সারি-কলাম নম্বরগুলিতে এনকোড করা অক্ষর অনুসারে প্রথম অক্ষর। উদাহরণস্বরূপ, পাঠ্যটি this is a trifid cipherহয়ে যায়:

        t h i s   i s   a   t r i f i d   c i p h e r
table:  3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row:    1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3

তারপরে আমরা উপরের টেবিলে একের পর এক সারিতে প্রতিটি জিনিসকে তিনটি দলে রেখেছি:

311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223

এবং এগুলি একই টেবিলগুলি ব্যবহার করে অক্ষরে ফিরে গেছে:

s   y   y   z   a   g   d   d   y   y   u   i   q   u   z   w   u   u   h       u   y   o

একটি বিষয় লক্ষণীয়, ইনপুট-দৈর্ঘ্য 3 এর কপিরাইট হওয়া উচিত So সুতরাং যদি দৈর্ঘ্য 3 এর একাধিক হয় তবে আমরা ইনপুট-দৈর্ঘ্যকে একাধিক 3 না করে তৈরি করার জন্য এক বা দুটি ট্রেলিং স্পেস যুক্ত করব।

চ্যালেঞ্জ:

একটি স্ট্রিং দেওয়া sentence_to_encipherহয়েছে, উপরে বর্ণিত হিসাবে এটি এনকিফার করুন।

আপনাকে কেবল প্রদত্ত এনক্রিফার করতে হবে sentence_to_encipher, সুতরাং পাশাপাশি একটি ডিক্রিফিং প্রোগ্রাম / ফাংশন তৈরি করার দরকার নেই। ভবিষ্যতে ডিক্রিফারিংয়ের জন্য আমি একটি অংশ 2 চ্যালেঞ্জ করতে পারি (যদিও আমার মনে হয় এটি তুচ্ছ / এনসিফারিং প্রক্রিয়ার অনুরূপ)।

চ্যালেঞ্জ বিধি:

  • আপনি ধরে নিতে পারেন যে sentence_to_encipherকেবলমাত্র অক্ষর এবং স্পেস থাকবে।
  • আপনি পুরো ছোট ছোট হাতের বা পুরো বড় হাতের অক্ষর ব্যবহার করতে পারেন (দয়া করে আপনার উত্তরটিতে কোনটি ব্যবহার করেছেন) তা উল্লেখ করুন।
  • ইনপুট-দৈর্ঘ্য 3 হলে আর 3 এর একাধিক না হয়ে যাওয়ার জন্য আপনি এক বা দুটি ট্রেলিং স্পেস যুক্ত করতে বেছে নিতে পারেন।
  • I / O নমনীয়। ইনপুট এবং আউটপুট উভয়ই স্ট্রিং, তালিকা / অ্যারে / অক্ষরের স্ট্রিম ইত্যাদি হতে পারে

সাধারণ নিয়ম:

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার পক্ষে যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • আপনার উত্তরটির জন্য ডিফল্ট আই / ও বিধিগুলির সাথে মানক বিধিগুলি প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং ফিরতি-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের (যেমন টিআইও ) একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন ।
  • এছাড়াও, আপনার উত্তরের জন্য একটি ব্যাখ্যা যুক্ত করা অত্যন্ত প্রস্তাবিত।

পরীক্ষার কেস:

Input:            "this is a trifid cipher"
Output:           "syyzagddyyuiquzwuuh uyo"

Input:            "test"
Output:           "utbk"

Input:            "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)

Input:            "trifidcipher"
Possible output:  "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)

3
আমি এটি " কীবোর্ডবিহীন " হিসাবে পড়েছি । এটি একটি আনন্দদায়ক চ্যালেঞ্জ হতে চলেছিল!
আমটন কর্ট - মনিকা

1
ইনপুটটির দৈর্ঘ্য 3 টিতে কপিরাইট হওয়া উচিত কেন? আমি এখানে কিভাবে গুরুত্বপূর্ণ তা দেখতে পাচ্ছি না।
মনিকা এর মামলা মামলা

সাইফার কাজটি করার জন্য কপিরাইটের প্রয়োজনীয়তা নেই, তবে প্রাথমিক ডিজিটাল তালিকার সারি বিভাগগুলির সাথে তিনটি সংখ্যার গোষ্ঠীগুলি এক সাথে থাকবে না তা নিশ্চিত করে এটি একে একে আরও কিছুটা সুরক্ষিত করে তোলে।
স্পার

@ নিক হার্টলি আপনি সত্যই বলেছেন যে ইনপুটটি 3 দ্বারা বিভাজ্য হলেও আপনি এখনও টেবিলটি স্থানান্তর করতে পারেন। আমার প্রথমে স্যান্ডবক্সে এই নিয়ম ছিল না, তবে কেউ আমাকে উইকিপিডিয়া বলেছিলেন যে ট্রফিডের উইকিপিডিয়ায় দেখায় এটিতে এনকিফারিং কিছুটা সুরক্ষিত করার জন্য এক বা দুটি স্পেস যুক্ত করা উচিত। সুতরাং আমি এটিকে চ্যালেঞ্জের অংশ হিসাবে যুক্ত করেছি, এবং এটি উইকিপিডিয়া পৃষ্ঠার সাথে আরও সমন্বয় করার জন্য (যে কীওয়ার্ডটি আমি সরিয়েছি তা বাদ দিয়ে)।
কেভিন ক্রুইজসেন

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

উত্তর:


6

জেলি , 29 26 25 বাইট

⁶Øa;3ṗ¤,©Ṛy;⁶$L3ḍƊ¡ZFs3®y

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

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

⁶Øa;3ṗ¤,©Ṛy;⁶$L3ḍƊ¡ZFs3®y  Main link. Argument: s (string)

⁶                          Set the return value to space.
 Øa;                       Append it to "a...z".
    3ṗ¤                    Yield the third Cartesian power of [1, 2, 3].
       ,©                  Pair the results and store the pair in the register.
                           The register now holds
                           [[[1, 1, 1], ..., [3, 3, 3]], ['a', ... ,'z', ' '].
         Ṛ                 Reverse the outer array.
           ;⁶$             Append a space to s...
              L3ḍƊ¡        if the length is divisible by 3.
          y                Transliterate according to the mapping to the left.
                   ZFs3    Zip/transpose, flatten, split into chunks of length 3.
                       ®y  Transliterate according to the mapping in the register.

পার্শ্ব-প্রতিক্রিয়া ফলাফলগুলি সম্পর্কে আমি কখনই জানি না ... তবে 24 বছরের জন্য এটি গ্রহণযোগ্য হলে ব্যবস্থাটি শেষ ;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸yকরতে পারেµ
জোনাথন অ্যালান

আমাদের একটি দুর্বল sensকমত্য রয়েছে ( + 6 / -1 ) এটি অনুমোদিত, তাই ধন্যবাদ!
ডেনিস

আউটপুটটি ভুল বলে মনে হচ্ছে। আমি মনে করি না সংযুক্ত স্থানটি "লাঠি"।
ডেনিস

6

কাঠকয়লা , 39 বাইট

≔E⁺θ× ¬﹪Lθ³⌕βιθ⭆⪪E⁺÷θ⁹⁺÷θ³θ﹪鳦³§⁺β ↨³ι

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔               Assign
   θ            Input string
  ⁺             Concatenated with
                Literal space
    ×           Repeated
         θ      Input string
        L       Length
       ﹪        Modulo
          ³     Literal 3
      ¬         Logical not
 E              Mapped over characters
             ι  Current character
           ⌕    Position found in
            β   Lowercase alphabet
              θ To variable

     θ                      List of positions
    ÷                       Vectorised integer divide by
      ⁹                     Literal 9
   ⁺                        Concatenated with
         θ                  List of positions
        ÷                   Vectorised integer divide by
          ³                 Literal 3
       ⁺                    Concatenated with
           θ                List of positions
  E                         Map over values
             ι              Current value
            ﹪               Modulo
              ³             Literal 3
 ⪪                          Split into
                ³           Groups of 3
⭆                           Map over groups and join
                   β        Lowercase alphabet
                  ⁺         Concatenated with
                            Literal space
                 §          Cyclically indexed by
                       ι    Current group
                     ↨      Converted from
                      ³     Base 3
                            Implicitly print


6

পাইথ, 34 33 বাইট

m@+G;id3csCmtj+27x+G;d3+W!%lz3zd3

পুরো প্রোগ্রাম। ইনপুটটি ছোট হাতের অক্ষর হিসাবে প্রত্যাশিত, আউটপুট একটি অক্ষর অ্যারে। এটি এখানে অনলাইনে চেষ্টা করুন , বা এখানে একবারে সমস্ত পরীক্ষার কেস যাচাই করুন

m@+G;id3csCmtj+27x+G;d3+W!%lz3zd3   Implicit: z=input(), d=" ", G=lowercase alphabet
                           lz       Length of z
                          %  3      The above, mod 3
                        W!          If the above != 3...
                       +      zd    ... append a space to z
           m                        Map the elements of the above, as d, using:
                  +G;                 Append a space to the lowercase alphabet
                 x   d                Find the 0-based index of d in the above
              +27                     Add 27 to the above
             j        3               Convert to base 3
            t                         Discard first element (undoes the +27, ensures result is 3 digits long)
          C                         Transpose the result of the map
         s                          Flatten
        c                       3   Split into chunks of length 3
m                                   Map the elements of the above, as d, using:
     id3                              Convert to decimal from base 3
 @+G;                                 Index the above number into the alphabet + space
                                    Implicit print

বিকল্প 34 বাইট সমাধান: sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3- +27 এবং পুচ্ছের পরিবর্তে .[030 থেকে 3 দৈর্ঘ্যের প্যাড ব্যবহার করে 3 যদি অগ্রণী sবাদ পড়ে যায় তবে 33 হতে পারে ।

সম্পাদনা করুন: sঅক্ষরের অ্যারেগুলি বৈধ আউটপুট হিসাবে শীর্ষস্থানীয়কে ফেলে রেখে একটি বাইট সংরক্ষণ করা হয়েছে


5

রুবি , 153 145 138 131 বাইট

->a{a<<" "if a.size%3<1;a.map{|c|[(b=(c.ord%32-1)%27)/9,b%9/3,b%3]}.transpose.join.scan(/.{3}/).map{|x|((x.to_i(3)+65)%91+32).chr}}

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

একটি দ্রুত এবং নিষ্পাপ পদ্ধতি, ছোট হাতের পাঠ্যের সাথে কাজ করে। অক্ষরের ইনপুট এবং আউটপুট অ্যারে।


4

জাভা (জেডিকে) , 192 বাইট

s->{String T="",R=T,C=T,r=T;for(int c:s){c-=c<33?6:97;T+=c/9;R+=c%9/3;C+=c%3;}for(var S:(s.length%3<1?T+2+R+2+C+2:T+R+C).split("(?<=\\G...)"))r+=(char)((Byte.valueOf(S,3)+65)%91+32);return r;}

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

খুব নিখুঁত পদ্ধতির। char[]ইনপুট হিসাবে একটি ছোট হাত ধরে কিন্তু আউটপুট দেয় String

ব্যাখ্যা

s->{                                       // char[]-accepting lambda
 String T="",                              //  declare variables Table as an empty string,
        R=T,                               //                    Row as an empty string,
        C=T,                               //                    Column as an empty string,
        r=T;                               //                    result as an empty string.
 for(int c:s){                             //  for each character
  c-=c<33?6:97;                            //   map each letter to a number from 0 to 25, space to 26.
  T+=c/9;                                  //   append the table-value to Table
  R+=c%9/3;                                //   append the row-value to Row
  C+=c%3;                                  //   append the column-value to Column
 }                                         //
 for(var S:                                //  For each token of...
     (s.length%3<1?T+2+R+2+C+2:T+R+C)      //    a single string out of table, row and column and take the space into account if the length is not coprime to 3...
      .split("(?<=\\G...)"))               //    split every 3 characters
  r+=(char)((Byte.valueOf(S,3)+65)%91+32); //   Parses each 3-characters token into a number, using base 3,
                                           //  and make it a letter or a space
 return r;                                 //  return the result
}

ক্রেডিট


1
দুই ছোট golfs: Integer.valueOfথেকে Byte.valueOfএবং R+=c<26?(char)(c+97):' ';থেকেR+=(char)(c<26?c+97:32);
কেভিন Cruijssen


4

আর , 145 বাইট

function(s,K=array(c(97:122,32),rep(3,3)))intToUtf8(K[matrix(arrayInd(match(c(utf8ToInt(s),32[!nchar(s)%%3]),K),dim(K))[,3:1],,3,byrow=T)[,3:1]])

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

স্ট্রিং হিসাবে I / O; একটি স্থান যুক্ত করুন। অদ্ভুত পুনরাবৃত্তি [,3:1]কারণ আর এর প্রাকৃতিক অ্যারে সূচক কিছুটা আলাদা।


ডাং, তুমি আমাকে 200 বাইটের বেশি মার আমি আপনার কোডিং, জিজ্প্পে সর্বদা মুগ্ধ। আমার মাঝে মাঝে চেষ্টা করেও বিরক্ত করা উচিত নয়
Sumner18

1
@ Sumner18 ভাল ধন্যবাদ! আমি চ্যালেঞ্জগুলির জবাব দেওয়ার আগে আমি সাধারণত এক বা দুটি দিন কেটে যাওয়ার চেষ্টা করি যেহেতু আমি জানি যে এখানে এখন প্রচুর পরিমাণে আর গল্ফার রয়েছে, তবে আমি স্যান্ডবক্সে দেখেছি বলে আমি এটিকে প্রতিহত করতে পারিনি। আর গল্ফিং চ্যাটরুমে গল্ফ করার জন্য আইডিয়াগুলি বাউন্সে আপনাকে সর্বদা স্বাগত জানাই । :-)
জিউসেপ

3
@ Sumner18 এছাড়াও চেষ্টা করা এবং সংক্ষেপে আসা লজ্জা নেই, এখানে আমার প্রথম জমাটি ভয়াবহ ছিল এবং আমি কেবল আরও ভাল পেয়েছি! দয়া করে পোস্ট চালিয়ে যান, আমি মতামত পাওয়া সর্বদা ভাল বলে মনে করি যাতে আপনি উন্নতি করতে পারেন :-)
জিউসেপ

3

এপিএল + উইন, 102 বাইট

⎕av[n[c⍳(⊂[2]((⍴t),3)⍴,⍉⊃(c←⊂[2]c,(,⍉9 3⍴c←9/⍳3),[1.1]27⍴⍳3)[(⎕av[n←(97+⍳26),33])⍳t←t,(3|⍴t←⎕)↓' '])]]

ব্যাখ্যা:

t←t,(3|⍴t←⎕)↓' ' Prompts for input and applies coprime condition

(⎕av[n←(97+⍳26),33]⍳ Indices of characters in APL atomic vector 

c←⊂[2]c,(,⍉9 3⍴c←9/⍳3),[1.1]27⍴⍳3) Create a matrix of table, row column for 27 characters

⊂[2]((⍴t),3)⍴,⍉⊃ Extract columns of c corresponding to input and re-order

c⍳ Identify Column indices of re-ordered columns

⎕av[.....] Use indices back in atomic vector to give enciphered text  

পরীক্ষার কেস স্ক্রিন শট এর উদাহরণ:

⎕av[n[c⍳(⊂[2]((⍴t),3)⍴,⍉⊃(c←⊂[2]c,(,⍉9 3⍴c←9/⍳3),[1.1]27⍴⍳3)[(⎕av[n←(97+⍳26),33])⍳t←t,(3|⍴t←⎕)↓' '])]]
⎕:
'output'
rrvgivx  

আপনি পরীক্ষা ক্ষেত্রে (এক বা একাধিক) স্ক্রিনশট যুক্ত করতে আপত্তি করবেন? আমি জানি যে টিআইও-তে উইন এপিএল সংস্করণটি উপলভ্য নয়, তবে আমি এখনও একধরণের যাচাইকরণ দেখতে চাই, যেহেতু আমি এপিএল কোডটি কেবল এটি পড়ার মাধ্যমে কীভাবে ব্যাখ্যা করতে পারি তা কেবল চালানো ছাড়াই এটি যাচাই করা যাক। :)
কেভিন ক্রুইজসেন 14

এটি কীভাবে করবেন তা পুরোপুরি নিশ্চিত নয় তবে এটি দেখতে এটির মতো দেখাচ্ছে। আমি উপরের প্রবেশে কিছু যুক্ত করব
গ্রাহাম

সাধারণত আমি টিআইওতে ডায়ালগ ক্লাসিক ব্যবহার করতে পারি তবে এক্ষেত্রে এর পারমাণবিক ভেক্টরটি একটি ভিন্ন ক্রমে থাকে তাই সূচকটি কাজ করবে না।
গ্রাহাম

3

এসএএস, 305 বাইট

এই এসএএস মনস্ট্রোসিটির জন্য একটি আন্তরিক 'ওফ' of এখানে অনেকগুলি এলোমেলো স্ট্রিং ফর্ম্যাটিং রয়েছে যা আমি ভেবেছিলাম যে আমি এতে যাওয়া এড়াতে পারি; আমি নিশ্চিত যে এর কিছু করার আরও ভাল উপায় আছে।

data;input n:&$99.;n=tranwrd(trim(n)," ","{");if mod(length(n),3)=0then n=cats(n,'{');f=n;l=length(n);array a(999);do i=1to l;v=rank(substr(n,i,1))-97;a{i}=int(v/9);a{i+l}=mod(int(v/3),3);a{i+l*2}=mod(v,3);end;f='';do i=1to l*3by 3;f=cats(f,byte(a{i}*9+a{i+1}*3+a{i+2}+97));end;f=tranwrd(f,"{"," ");cards;

কার্ড স্টেটমেন্টের পরে নতুন লাইনে ইনপুট প্রবেশ করা হয়, যেমন:

data;input n:&$99.;n=tranwrd(trim(n)," ","{");if mod(length(n),3)=0then n=cats(n,'{');f=n;l=length(n);array a(999);do i=1to l;v=rank(substr(n,i,1))-97;a{i}=int(v/9);a{i+l}=mod(int(v/3),3);a{i+l*2}=mod(v,3);end;f='';do i=1to l*3by 3;f=cats(f,byte(a{i}*9+a{i+1}*3+a{i+2}+97));end;f=tranwrd(f,"{"," ");cards;
this is a trifid cipher
test
output
trifidcipher

fসহায়ক ভেরিয়েবল / অ্যারে মানগুলির একগুচ্ছ পাশাপাশি চলকটিতে আউটপুট সমেত একটি ডেটাসেট আউটপুট করে ।

এখানে চিত্র বর্ণনা লিখুন

Ungolfed / ব্যাখ্যা:

data;
input n : & $99.; /* Read a line of input, maximum 99 characters */

n=tranwrd(trim(n)," ","{"); /* Replace spaces with '{' (this is the ASCII character following 'z', so it makes it easy to do byte conversions, and lets us not have to deal with spaces, which SAS does not like) */
if mod(length(n),3)=0then n=cats(n,'{'); /* If length of n is not coprime with 3, add an extra "space" to the end */

f=n; /* Set output = input, so that the string will have the same length */
l=length(n);    /* Get the length of the input */
array a(999);   /* Array of values to store intermediate results */

do i = 1 to l; /* For each character in the input... */
    v = rank(substr(n,i,1))-97; /* Get the value of the current character, from 0-26 */

    a{i}=int(v/9);          /* Get the table of the current character and store at appropriate index, from 0-2  */
    a{i+l}=mod(int(v/3),3); /* Get the row of the current character, from 0-2 */
    a{i+l*2}=mod(v,3);      /* Get the column of the current character, from 0-2  */
end;

f='';

do i = 1 to l*3 by 3; /* For each character in the output... */
    f=cats(f,byte(a{i}*9+a{i+1}*3+a{i+2}+97)); /* Convert values back from base 3 to base 10, and convert back into ASCII value */
end;

f = tranwrd(f,"{"," "); /* Replaces our "spaces" with actual spaces for final output */

/* Test cases */
cards;
this is a trifid cipher
test
output
trifidcipher

3

জাভাস্ক্রিপ্ট (নোড.জেএস) ,  146 141 139  136 বাইট

আই / ও লোয়ারকেসে আছে।

s=>'931'.replace(/./g,d=>Buffer(s.length%3?s:s+0).map(c=>(o=(c>48?c-16:26)/d%3+o*3%27|0,++i)%3?0:(o+97)%123||32),i=o=0).split`\0`.join``

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

মন্তব্য

s =>                       // s = input string
  '931'.replace(/./g, d => // for each digit d = 9, 3 and 1:
    Buffer(                //   create a buffer from:
      s.length % 3 ?       //     if the length of s is coprime with 3:
        s                  //       the original input string
      :                    //     else:
        s + 0              //       the input string + an extra '0'
    )                      //
    .map(c =>              //   for each ASCII code c from this Buffer:
      ( o =                //     update o:
        ( c > 48 ?         //       if c is neither a space nor the extra '0':
            c - 16         //         yield c - 16 (which gives 81 .. 106)
          :                //       else:
            26             //         this is the 26th character (space)
        ) / d % 3 +        //       divide by d and apply modulo 3
        o * 3 % 27 | 0,    //       add o * 3, apply modulo 27, coerce to integer
        ++i                //       increment i
      ) % 3 ?              //     if i mod 3 is not equal to 0:
        0                  //       yield 0 (NUL character)
      :                    //     else:
        (o + 97) % 123     //       convert o to the ASCII code of the output letter
        || 32              //       or force 32 (space) for the 26th character
    ),                     //   end of map()
    i = o = 0              //   start with i = o = 0
  ).split`\0`.join``       // end of replace(); remove the NUL characters

আমি মনে করি আপনি এর আগে একবার ব্যাখ্যা করেছেন, তবে কীভাবে (o=...,++i)%3আবার জেএসে কাজ করবেন? কি (o,i)একটি tuple বা কিছু, এবং উভয় ভিতরের পূর্ণসংখ্যার তাদের মডিউল -3 রূপান্তরিত করা হয়? জাভা বিকাশকারী হিসাবে এটি এখনও আমাকে কিছুটা বিভ্রান্ত করে (a,b)%c। ভাল উত্তর যদিও! আমি পছন্দ করি আপনি কীভাবে প্রতি তৃতীয় অঙ্কে রূপান্তর করেন এবং তারপরে প্রথম দুটি নাল-বাইটস সরিয়ে ফেলুন। আমার কাছ থেকে +1
কেভিন ক্রুইজসেন 14

2
বরাত দিয়ে @KevinCruijssen MDN : "(বাঁ দিক থেকে ডানদিকে) কমা অপারেটর তার operands প্রতিটি মূল্যায়ন এবং আয় গত প্রতীক এর মান। " তাহলে, মডিউল শুধুমাত্র প্রয়োগ করা হয় ++i
আর্নল্ড

3

05 এ বি 1 ই , 25 বাইট

g3Öð׫SAð«3L3㩇ø˜3ô®Að«‡

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

স্ট্রিং হিসাবে ইনপুট, অক্ষরের তালিকা হিসাবে আউটপুট। দৈর্ঘ্য 3 দ্বারা বিভাজ্য হলে একটি স্থান যুক্ত করে।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

g3Ö         # Check if the length of the (implicit) input is divisible by 3
            # (results in 1 for truthy or 0 for falsey)
            #  i.e. "out" → 1
            #  i.e. "test" → 0
   ð×       # Repeat a space that many times
            #  i.e. 1 → " "
            #  i.e. 0 → ""
     «      # And append it to the (implicit) input
            #  i.e. "out" and " " → "out "
            #  i.e. "test" and "" → "test"
      S     # Then make the string a list of characters
            #  i.e. "out " → ["o","u","t"," "]
            #  i.e. "test" → ["t","e","s","t"]
A           # Push the lowercase alphabet
 ð«         # Appended with a space ("abcdefghijklmnopqrstuvwxyz ")
   3L       # Push list [1,2,3]
     3ã     # Cartesian repeated 3 times: [[1,1,1],[1,1,2],...,[3,3,2],[3,3,3]]
       ©    # Save that list of triplets in the registry (without popping)
           # Transliterate, mapping the letters or space to the triplet at the same index
            #  i.e. ["o","u","t"," "] → [[2,2,3],[3,1,3],[3,1,2],[3,3,3]]
            #  i.e. ["t","e","s","t"] → [[3,1,2],[1,2,2],[3,1,1],[3,1,2]]
ø           # Zip, swapping all rows/columns
            #  i.e. [[2,2,3],[3,1,3],[3,1,2],[3,3,3]] → [[2,3,3,3],[2,1,1,3],[3,3,2,3]]
            #  i.e. [[3,1,2],[1,2,2],[3,1,1],[3,1,2]] → [[3,1,3,3],[1,2,1,1],[2,2,1,2]]
 ˜          # Flatten the list
            #  i.e. [[2,3,3,3],[2,1,1,3],[3,3,2,3]] → [2,3,3,3,2,1,1,3,3,3,2,3]
            #  i.e. [[3,1,3,3],[1,2,1,1],[2,2,1,2]] → [3,1,3,3,1,2,1,1,2,2,1,2]
  3ô        # Split it into parts of size 3
            #  i.e. [2,3,3,3,2,1,1,3,3,3,2,3] → [[2,3,3],[3,2,1],[1,3,3],[3,2,3]]
            #  i.e. [3,1,3,3,1,2,1,1,2,2,1,2] → [[3,1,3],[3,1,2],[1,1,2],[2,1,2]]
®           # Push the triplets from the registry again
 Að«        # Push the lowercase alphabet appended with a space again
           # Transliterate again, mapping the triplets back to letters (or a space)
            # (and output the result implicitly)
            #  i.e. [[2,3,3],[3,2,1],[1,3,3],[3,2,3]] → ["r","v","i","x"]
            #  i.e. [[3,1,3],[3,1,2],[1,1,2],[2,1,2]] → ["u","t","b","k"]

3

জাপট , 42 বাইট

;Êv3 ?UpS:U
m!bS=iC)®+27 ì3 ÅÃÕc ò3 £SgXì3

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

এই উত্তরের মূলটি শেগির একটি মুছে ফেলা উত্তর থেকে এসেছে তবে 3 টি দ্বারা বিভাজ্য দৈর্ঘ্যের ইনপুটগুলি পরিচালনা করতে তিনি কখনই ফিরে আসেননি এটি এটি একটি স্থির সংস্করণ

ব্যাখ্যা:

;                                 #Set C to the string "abcdefghijklmnopqrstuvwxyz"

 Ê                                #Get the length of the input
  v3 ?                            #If it is divisible by 3:
      UpS                         # Add a space
         :U                       #Otherwise don't add a space
                                  #Store the result in U

   S=iC)                          #Set S to C plus a space
m                                 #For each character in U:
 !bS                              # Get the position of that character in S
        ®        Ã                #For each resulting index:
             ì3                   # Convert to base 3
         +27    Å                 # Including leading 0s up to 3 places
                  Õ               #Transpose rows and columns
                   c              #Flatten
                     ò3           #Cut into segments of length 3
                        £         #For each segment:
                           Xì3    # Read it as a base 3 number
                         Sg       # Get the letter from S with that index

3

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 178 বাইট

s=>{int[]a={9,3,1},b=(s.Length%3>0?s:s+0).Select(c=>c<97?26:c-97).ToArray();s="";for(int i=0,k,l=b.Length;i<l*3;s+=(char)(k>25?32:97+k))k=a.Sum(p=>b[i%l]/a[i++/l]%3*p);return s;}

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

কম গল্ফড ... এটি এখনও বিভ্রান্তিকর :)

// s is an input string
s=>{
  // powers of 3
  int[]a={9,3,1},
  // ensure the length of s is coprime to 3
  // and convert to numbers from 0-26
  b=(s.Length%3>0?s:s+0).Select(c=>c<97?26:c-97).ToArray();
  // reset s to collect result
  s="";
  // main loop
  for(
    // i is the main index variable
    // k is the value of the encoded character
    // l is the length
    int i=0,k,l=b.Length;
    // i continues until it is 3x the length of the string
    i<l*3;
    // convert k to a character and append
    s+=(char)(k>25?32:97+k)
  )
    // compute the trifid
    // (this is the confusing part :)
    k=a.Sum(p=>b[i%l]/a[i++/l]%3*p);
  // return the result
  return s;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.