সাইক্লিং টার্নারি ডিজিটের মাধ্যমে পাঠ্যকে অবলম্বন করছে


28

এই চ্যালেঞ্জের লক্ষ্য হ'ল ইনপুট পাঠ্য গ্রহণের জন্য সংক্ষিপ্ততম ফাংশন / প্রোগ্রাম লিখুন, নীচের পদ্ধতিটি ব্যবহার করে এটি এনক্রিপ্ট করুন এবং ফলাফলটি ফিরিয়ে দিন।

উদাহরণ হিসাবে, আমি স্ট্রিংটি ব্যবহার করব hello world

প্রথমে ইনপুট টেক্সট পান।

hello world

দ্বিতীয়ত , স্ট্রিংটি টের্নারি (বেস 3) এ রূপান্তর করুন। এই কীটি ব্যবহার করুন:

a = 000
b = 001
c = 002
d = 010
e = 011
f = 012
g = 020

...

w = 211
x = 212
y = 220
z = 221
[space] = 222

এই কী দিয়ে, hello worldহয়ে 021011102102112222211112122102010, নিচের দেখা যায়।

 h   e   l   l   o       w   o   r   l   d
021 011 102 102 112 222 211 112 122 102 010

তৃতীয়ত , প্রথম অঙ্কটি প্রান্তে সরান।

021011102102112222211112122102010
becomes
210111021021122222111121221020100

চতুর্থত , একই কী ব্যবহার করে নম্বরটিকে আবার স্ট্রিংয়ে রূপান্তর করুন।

210 111 021 021 122 222 111 121 221 020 100
 v   n   h   h   r       n   q   z   g   j

শেষ অবধি , এনক্রিপ্ট করা পাঠ্যটি ফিরিয়ে দিন।

vnhhr nqzgj

এখানে কিছু নমুনা পাঠ্য এবং তাদের ফলাফল:

the turtle ==> dvo fh ego

python ==> uudwqn

code golf ==> hpjoytqgp

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

শুভকামনা!

লিডারবোর্ড:

var QUESTION_ID=54643;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:&lt;(?:s&gt;[^&]*&lt;\/s&gt;|[^&]+&gt;)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>


3
নোট করুন যে এই প্রযুক্তিগতভাবে হ'ল এনক্রিপশন নয় is এখানে কোনও এনক্রিপশন কী নেই।
জন ডিভোরাক

@ জনডভোরাক কি "সাইফার" কাজ করবেন?
কচ্ছপ

@ জনডভোরাকের মন্তব্যে গড়ে তুলতে, আমি এটিকে "এনকোডিং" হিসাবে বর্ণনা করব যা বিভিন্ন ফর্ম্যাটে ডেটা প্রকাশের একটি মানক উপায় (যেমন, আপনি হেক্সাডেসিমাল এনকোডিং বা বেস 64 এনকোডিং সহ কিছুটা স্ট্রিং প্রকাশ করতে পারেন)।
অ্যাপসিলাররা

1
@ জনডভোরাক একমত হয়েছেন - আমি "এনকোডিং" না করে ROT13 কে " অবক্ষেপ " বলার সম্ভাবনা বেশি (যদিও এটি উভয় সংজ্ঞাতেই সন্তুষ্ট হয়)। সম্ভবত সবচেয়ে সুনির্দিষ্ট শিরোনামটি
হ'ল

2
@ দ্য টার্টল ধারণাটি ছিল uint64ক্রমবর্ধমান শক্তি ব্যবহার করে অক্ষরগুলিকে একটি বড় পূর্ণসংখ্যার ( ) এ প্যাক করা 27। একটি সংখ্যার দ্বারা স্থানচ্যুতিটি তখন এই বৃহত পূর্ণসংখ্যাকে গুণক করার সমতুল্য 3এবং অন্য প্রান্তে প্রথম সংখ্যাটি প্রবর্তন কেবল একটি সংযোজন হবে। তবে জটিলতা রয়েছে যেমন শেষ "ক্যারি" (সম্ভবত কোনও modঅপারেশনের মাধ্যমে ) ফেলে দেওয়া, এবং আমি কয়েকটি বাইট নিয়ে কাজ করতে পারিনি
লুইস মেন্ডো

উত্তর:


16

পাইথ, 23 22 বাইট

sXc.<sXz=+GdJ^UK3K1KJG

এটি অনলাইনে ব্যবহার করে দেখুন: নিয়মিত ইনপুট / টেস্ট স্যুট

এক বাইটের জন্য @ আইস্যাচকে ধন্যবাদ।

ব্যাখ্যা:

sXc.<sXz=+GdJ^UK3K1KJG
        =+Gd             append a space the G (preinitialized with the alphabet)
               K3        assign 3 to K
            J^UK K       assign all 3-digit ternary numbers 
                         [[0,0,0], [0,0,1],...,[2,2,2]] to J
      Xz  G J            translate input from G to J
     s                   sum (join all ternary numbers to one big list)
   .<             1      rotate by 1
  c                K     split into lists of size 3
 X                  JG   translate from J to G
s                        join chars to string and print

1
আমাদের একই ধারণা ছিল। আমি আমার সিজেমের একটি পাইথ বন্দর লিখেছিলাম, তারপরে স্ক্রোল করে আপনার উত্তরটি দেখেছি: /
আন্দ্রে বিওনদো

1
আপনি যেমন Gব্যবহারের পরিবর্তে একটি বর্ধিত অ্যাসাইনমেন্ট করে একটি বাইট সংরক্ষণ করতে পারেন । N=+Gd
isaacg

ধন্যবাদ
জাকুব

14

পাইথ, 26 বাইট

J+Gds@LJiR3c.<s.DR9xLJz1 2

পাইথ সংকলক / নির্বাহক: ডেমো | এ এটি অনলাইনে ব্যবহার করে দেখুনপরীক্ষার ক্ষেত্রে

ধারণা

ধরে নিন যে সমস্ত ইনপুট অক্ষর ইতিমধ্যে 2 পদক্ষেপের দ্বারা পূর্ণসংখ্যায় ম্যাপ করা হয়েছে।

প্রতি 3-সংখ্যার ত্রৈমাসিক সংখ্যার জন্য আমাদের কাছে সেই xyz 3 = 9x + 3y + z রয়েছে , সুতরাং 9 টি ফলক x এবং ভাগ 3y + z দ্বারা মডুলার বিভাজন রয়েছে

যদি ইনপুটটি abc 3 ডিফ 3 গি 3 হয় , প্রতিটিটিতে মডুলার বিভাগ প্রয়োগ করে একটি, 3 বি + সি, ডি, 3 ই + এফ, জি, 3 এ + i পাওয়া যায়

উপরে এক ইউনিট থেকে বাম দিকে তালিকাটি ঘোরানোর পরে, আমরা সংখ্যাগুলিগুলিকে জোড়ায় ভাগ করতে পারি। এটি তালিকাটি (3 বি + সি, ডি), (3 ই + এফ, জি), (3 ঘন্টা + আই, এ) দেয়

এখন, আমরা যদি বেস 3 থেকে পূর্ণসংখ্যায় (3y + z, w) রূপান্তর করি তবে আমরা 3 (3y + z) + w = ​​9y + 3z + w = ​​zyw 3 পাই

সুতরাং, জোড়া তালিকায় বেস রূপান্তর প্রয়োগ আমাদের বিসিডি 3 এফজি 3 হিয়া 3 দেয় যা সংক্ষিপ্তভাবে তিনটি অঙ্কের একককে বাম দিকে ঘোরানোর ফলাফল।

যা করা বাকি তা হ'ল ফলস্বরূপ পূর্ণসংখ্যার অক্ষরগুলিতে ফিরে ম্যাপিং।

কোড

J+Gd                        Concatenate "a...z" (G) with " " (d) and save in J.
                    L z     For each character in the input(z):
                   x J        Compute its index in J.
                 R          For each index I:
               .D 9           Compute (I / 9, I % 9).
              s             Concatenate the resulting pairs.
            .<         1    Rotate the resulting list one unit to the left.
           c             2  Split it back into pairs.
         R                  For each pair:
        i 3                   Perform conversion from base 3 to integer.
      L                     For each resulting integer:
     @ J                      Select the element of J at that index.
    s                       Concatenate the resulting characters.

ইয়েশ, কয়েক ঘন্টার মধ্যে আমি সিজেম এবং পাইথকে পরাজিত করেছিলাম। : /
kirbyfan64sos

কি দারুন! এটি কীভাবে কাজ করে তার ব্যাখ্যা লিখতে পারেন? আমি কৌতুহলী. :)
কচ্ছপ

@ টার্টল আমি আমার উত্তর সম্পাদনা করেছি।
ডেনিস

10

পাইথন 2, 96

s=input()
r=y=''
for c in s+s[0]:x=(ord(c)-97)%91;r+=y and chr((y%9*3+x/9-26)%91+32);y=x
print r

পরিবর্তিত একটি অক্ষর cমান xযেমন x=(ord(c)-97)%91, মডিউল শুধুমাত্র স্থান প্রভাবিত এটা 26. বিপরীত রূপান্তর রূপান্তর সাথে আছেন iকরার chr((i-26)%91+32)মডিউল শুধুমাত্র প্রভাবিত সঙ্গে, i=26এটা স্পেস পরিণত করা।

আমরা বর্তমানের মান xএবং পূর্ববর্তী মানটি উল্লেখ করে অক্ষরগুলির মধ্য দিয়ে লুপ করি y। আমরা গত দুই তিন ডিজিট ব্যবহার y, যেমন পাওয়া y%9, এবং প্রথম তিন অঙ্ক x, যেমন পাওয়া x/9। সংক্ষিপ্তকরণের মান y%9*3+x/997স্থান পরিবর্তন এবং স্থান ঠিক করার সাথে এই পাটিগণিতের সংমিশ্রণে কিছু অপ্টিমাইজেশন রয়েছে ।

আমরা এই লুপটি প্রায় তৈরি করি, আমরা শেষে স্ট্রিংয়ের প্রথম অক্ষরে ফিরে আসি। আমরা আগের মানটিতে লেখার জন্য একটি প্রস্তুতি লুপও করি y, প্রথম লুপের জন্য অক্ষরটি দমন করে যখন yএখনও আরম্ভ করা হয়নি।


8

সিজেম, 39 29 বাইট

এটি সম্পর্কে দুর্দান্ত জিনিসটি এটি বেস রূপান্তর ব্যবহার করে না।

q'{,97>S+:XZZm*:Yere_(+3/YXer

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

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

ব্যাখ্যা

                              e# Z = 3
q                             e# Push input string
 '{,                          e# Push ['\0' ... 'z']
    97>                       e# Keep ['a' ... 'z']
       S+                     e# Append space
         :X                   e# Assign "a...z " to X
           ZZm*               e# Push 3rd cartesian power of [0 1 2]
                              e# i.e. all 3-digit permutations of 0, 1, 2
                              e# (in lexicographical order)
               :Y             e# Assign those permutations to Y
                 er           e# Translate input from X to Y
                   e_         e# Flatten resulting 2D array
                     (+       e# Rotate first element to the end
                       3/     e# Split back into 3-digit elements
                         YXer e# Translate from Y to X

7

সিজেম, 30 29 27 বাইট

q'{,97>S+:Af#9fmd(+2/3fbAf=

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

আমার অন্যান্য উত্তরের মতই মতামতটি একই , যা পাইথের কাছে এই কোডটির একটি বন্দর।

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

q                           e# Read from STDIN.
 '{,                        e# Push ['\0' ... 'z'].
    97>                     e# Remove the first 97 elements (['\0' - '`']).
       S+:A                 e# Append a space and save in A.
           f#               e# Find the index of each input character in A.
             9fmd           e# Apply modular division by 9 to each index.
                 (+         e# Shift out the first quotient and append it.
                   2/       e# Split into pairs.
                     3fb    e# Convert each pair from base 3 to integer.
                        Af= e# Select the corresponding elements from A.


6

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

ওয়ান লাইনার!

"পরিবর্তনশীল vপুরষ্কারের অতিরিক্ত ব্যবহার, কেউ?"

আপডেট: মোট বিভ্রান্তির জন্য এখন কেবল পরিবর্তনশীল নামে পরিচিত ব্যবহার করে v!

@ বিহানকে 6 বাইট সংরক্ষণের জন্য ধন্যবাদ!

27 বাইট বাঁচানোর জন্য @ নীলকে ধন্যবাদ !!

v=>(([...v].map(v=>(v<"V"?53:v.charCodeAt()-70).toString(3).slice(1)).join``)+v[0]).slice(1).match(/..?.?/g).map(v=>(v=String.fromCharCode(parseInt(v,3)+97))>"z"?" ":v).join``

একটি বেনামী ফাংশন সংজ্ঞায়িত করে। ব্যবহার করতে, v=ফাংশনটির একটি নাম দেওয়ার জন্য কোডের আগে যুক্ত করুন এবং এটিকে পছন্দ করুনalert(v("hello world"))


আপনি .slice(-3)6 বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন , এই সময়ে আপনি "00"+vঅন্য বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন । (আপনি কোনও টেমপ্লেট দিয়ে সম্মতি জানাতে পারেন তবে ফলাফলের দৈর্ঘ্যটি একই))
নিল

প্রকৃতপক্ষে, আপনি যথেষ্ট পরিমাণে গ্যারান্টি হিসাবে আপনার মানগুলিতে 27 টি যোগ করে তাদের তিনটি বেসকে রূপান্তর করার আগে পুরো গুচ্ছ সংরক্ষণ করতে পারেন। .map(v=>(v<"V"?26:v.charCodeAt()-97).toString(3)).map(v=>("000"+v).slice(v.length))তারপর হয়ে যায় .map(v=>(v<"V"?53:v.charCodeAt()-70).toString(3).slice(1))
নিল

@ নীল ওয়াও, এটি কোডটি সংক্ষিপ্ত করে দিয়েছে! এটি কেবলমাত্র মধ্যবর্তী ভেরিয়েবলটি সরিয়ে এটিকে একটি সত্য 'ওয়ান-লাইনার' হিসাবে তৈরি করেছে। ধন্যবাদ!
সমৃদ্ধ

5

জুলিয়া, 149 137 বাইট

আমার প্রথম গল্ফ!

s->(j=join;b=j([base(3,i==' '?26:i-'a',3)for i=s]);r=b[2:end]*b[1:1];j([i==26?" ":i+'a'for i=[parseint(r[i:i+2],3)for i=1:3:length(r)]]))

(আংশিকভাবে) অবরুদ্ধ:

f = s -> (
    # join the ternary represenations:
    b = join([base(3, i == ' ' ? 26 : i - 'a',3) for i = s]);
    # rotate:
    r = b[2:end] * b[1:1];
    # calculate the new numbers:
    n = [parseint(r[i:i+2],3) for i = 1:3:length(r)];
    # convert back to characters:
    join([i == 26 ? " " : 'a' + i for i = n])
)
assert(f("hello world") == "vnhhr nqzgj")
assert(f("the turtle")  == "dvo fh ego")
assert(f("python")      == "uudwqn")
assert(f("code golf")   == "hpjoytqgp")

আপনি লুপগুলির =পরিবর্তে ব্যবহার করতে পারেন inএবং আপনি তার b[1]জায়গায় ব্যবহার করতে পারেন b[1:1]। এছাড়াও আপনি ডান বন্ধনী এবং বন্ধ মধ্যে একটি স্থান প্রয়োজন হবে না for
অ্যালেক্স এ।

@AlexA। চিয়ার্স =, তবে এমন b[1]একটি চরিত্র দেয় যা দিয়ে কোনও স্ট্রিং যুক্ত করা যায় না *
কেভিনস 5

ওহ ঠিক আছে, এটি সম্পর্কে ভুলে গেছি।
অ্যালেক্স এ।

@AlexA। forকৌতুক ছিমছাম হয়। কাছাকাছি উদ্ধৃতি দেওয়ার পরে আপনি এটি সরাসরি রাখতে পারেন। আমি বুঝতে পারিনি যে পার্সারটি ছিল নমনীয়।
কেভিনস 5

এটি সরাসরি সংখ্যার আক্ষরিক অনুসরণ করতে পারে, যেমনটি পারে end
অ্যালেক্স এ

4

জাভাস্ক্রিপ্ট (ES6), 178 , 172 , 170

p=>{p=p.replace(' ','{');c="";l=p.length;for(i=0;i<l;){c+=String.fromCharCode(((p.charCodeAt(i)-97)%9)*3+(((p.charCodeAt((++i)%l)-97)/9)|0)+97)}return c.replace('{',' ')}

কিছুটা দিকের সাথে ম্যাথ.ফ্লুর প্রতিস্থাপন করা হয়েছে বা। একটি বেনামী ফাংশন তৈরি করেছে। আমি যদি সঠিকভাবে বুঝতে পারি তবে এটি আমার নোংরামি কিছুটা ঠিক করতে হবে (ধন্যবাদ ডেনিস!) এবং আমাকে আরও 2 বাইট নামিয়ে আনতে হবে।


3

জুলিয়া, 169 166 বাইট

s->(J=join;t=J(circshift(split(J([lpad(i<'a'?"222":base(3,int(i)-97),3,0)for i=s]),""),-1));J([c[j:j+2]=="222"?' ':char(parseint(c[j:j+2],3)+97)for j=1:3:length(t)]))

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

function f(s::String)
    # Convert the input into a string in base 3, with space mapping to 222
    b = join([lpad(i < 'a' ? "222" : base(3, int(i) - 97), 3, 0) for i = s])

    # Split that into a vector of single digits and shift once
    p = circshift(split(b, ""), -1)

    # Join the shifted array back into a string
    t = join(p)

    # Convert groups of 3 back into characters
    c = [t[j:j+2] == "222" ? ' ' : char(parseint(t[j:j+2], 3) + 97) for j = 1:3:length(t)]

    # Return the joined string
    join(c)
end

3

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

a!k|Just v<-lookup k a=v
x=['a'..'z']++" "
y="012";z=mapM id[y,y,y]
m(a:u:r:i:s)=[u,r,i]:m(a:s)
m[e,a,t]=[[a,t,e]]
main=interact$map(zip z x!).m.(>>=(zip x z!))

ওহ, এটি অনেক দীর্ঘ অনুভূত হচ্ছে তবে কমপক্ষে আমি ... কোনওভাবে পাইথনকে মারছি। আর রুবি।


3

জাভাস্ক্রিপ্ট (ES6), 141 124 120 বাইট

এটা বিশ্বাস করি বা না.... :-)

(t,i=0,c=w=>(t.charCodeAt(w)-123)%91+26)=>String.fromCharCode(...[...t].map(k=>(c(i)%9*3+c(++i%t.length)/9+65|0)%91+32))

আমার অন্যান্য উত্তরের মতো এটিও একটি বেনামে ফাংশন এবং এটি ব্যবহার করার আগে এটি একটি ভেরিয়েবলের কাছে বরাদ্দ করা দরকার। এটি এখানে চেষ্টা করুন:

আমি ভেবেছিলাম যে আমি অন্য কৌশলটি ব্যবহার করে আমার আগের উত্তরটি বন্ধ করে দিতে পারি, তাই আমি টেকনোর অনুরূপ একটি দিয়ে শুরু করি এবং সেখান থেকে আমার মাথাটি গল্ফ করে। আমি ফাংশনটির আর্গুমেন্ট বিভাগে কিছু পরিবর্তনশীল সূচনা করেছিলাম এবং আবার সমস্ত কিছু একটি .mapফাংশনে স্টাফ করেছি । তারপরে আমি বুঝতে পারলাম এর String.fromCharCodeবাইরে আরও বেশি দক্ষ হবে .map। সব কিছু বলা এবং হয়ে যাওয়ার পরে, আমি 30 45 বাইটেরও বেশি শেভ করেছিলাম !

সম্পাদনা 1: এর থেকে মুক্তি পেয়ে 17 বাইট সংরক্ষণ করা হয়েছে.replace এক্সনোর পাইথন দ্রবণের অনুরূপ একটি কৌশল ব্যবহার এস থেকে ।

ঠিক আছে, সম্ভবত এখন অন্য চ্যালেঞ্জের দিকে এগিয়ে যাওয়ার সময় ....


2

পাইথন 2, 182 180 বাইট

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

b=lambda k:k and b(k/3)*10+k%3
s=''.join('%03d'%b(ord(x)-6-91*(x>' '))for x in input())
print`[chr(int((s[1:]+s[0])[i:i+3],3)+97)for i in range(0,len(s),3)]`[2::5].replace('{',' ')

ইনপুট মত "hello world"


ইনপুটটিতে প্রয়োজনীয় উদ্ধৃতি চিহ্নের জন্য আপনার 2 বাইট গুনতে হবে, তাই না?
mbomb007

@ mbomb007 এটাই আমি আগে ভেবেছিলাম, তবে একাধিক লোক আমাকে বলেছে যে এর জন্য আমাকে অ্যাকাউন্ট করার দরকার নেই।
কেড

2

গণিত, 162 বাইট by

r=Append[#->IntegerDigits[LetterNumber@#-1,3]~PadLeft~3&/@Alphabet[]," "->{2,2,2}];StringJoin[Partition[RotateLeft[Characters@#/.r//Flatten,1],3]/.(#2->#1&@@@r)]&

(পুনরায়) ডিজিটাল Ruleতালিকাগুলিকে অক্ষর এবং পিছনে রূপান্তর করতে একটি ব্যবহার করে ।


2

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

s=>[...s+s[0]].map(q=>`00${(q<'a'?26:q.charCodeAt(0)-97).toString(3)}`.slice(-3)).join``.slice(1,-2).match(/..?.?/g).map(q=>q>221?' ':String.fromCharCode(parseInt(q,3)+97)).join``

রেগেক্সের জন্য বিহানকে প্রপস করুন .match


1

রুবি, 177

each_charপদ্ধতির জন্য কমপক্ষে রুবি দরকার 1.9

l=[*('a'..'z'),' '];n=(0..26).map{|m|m=m.to_s(3).rjust 3,'0'};s='';gets.chomp.each_char{|x|s+=n[l.index x]};puts("#{s[1..-1]}#{s[0]}".scan(/.../).map{|i|i=l[n.index i]}.join '')

1

জাভা, 458 449 বাইট

জাভা 8 স্ট্রিম এবং map()পদ্ধতিটি ব্যবহার না করে আমি 10 বাইট ছাঁটাই করতে পারি তা নির্ধারণ করতে এটি আমাকে একটু দু: খিত করে তোলে ।

গল্ফ করা সংস্করণটি এখানে:

import org.apache.commons.lang.ArrayUtils;class A{public static void main(String[]a){int b=0;String[] c=new String[27];for(;b<27;++b)c[b]=String.format("%03d",Integer.valueOf(Integer.toString(b,3)));String d=a[0],e="abcdefghijklmnopqrstuvwxyz ",f="",g="";for(b=0;b<d.length();++b)f+=c[e.indexOf(d.substring(b,b+1))];f=f.substring(1)+f.charAt(0);for(b=0;b<f.length();b+=3)g+=e.charAt(ArrayUtils.indexOf(c,f.substring(b,b+3)));System.out.println(g);}}

এখানে অনেক কম গল্ফযুক্ত সংস্করণ। এটি পাঠযোগ্য হওয়ার উদ্দেশ্যে, তবে আমি কোনও গ্যারান্টি দিচ্ছি না।

import org.apache.commons.lang.ArrayUtils;
class A {
    public static void main(String[] a) {
        int b=0;
        String[] c = new String[27];
        for (; b < 27; ++b)
            c[b] = String.format("%03d", Integer.valueOf(Integer.toString(b, 3)));
        String
            d = a[0],
            e = "abcdefghijklmnopqrstuvwxyz ",
            f = "",
            g = "";
        for (b = 0; b < d.length(); ++b)
            f += c[e.indexOf(d.substring(b, b + 1))];
        f = f.substring(1) + f.charAt(0);
        for (b = 0; b < f.length(); b += 3)
            g += e.charAt(ArrayUtils.indexOf(c, f.substring(b, b + 3)));
        System.out.println(g);
    }
}

এই প্রোগ্রামটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে রূপান্তর করতে স্ট্রিং নেয়। আপনি যদি আপনার ইনপুটটিতে ফাঁকা স্থান পেতে চান তবে আপনাকে এটি দ্বিগুণ উদ্ধৃতি দিয়ে ঘিরে রাখতে হবে।

আমি কমান্ড লাইন থেকে এটি ব্যবহারের একটি উদাহরণ দিতে চেয়েছি, তবে আমি এই কোডটি গ্রহণের বাইরে কাজ করতে পারিনি। আমি কখনই কমান্ড লাইন Java _ ^ থেকে জাভা ব্যবহার করতে শিখিনি; খুব বেশি ঝামেলা ছাড়াই আপনি সম্ভবত আপনার পছন্দের আইডিই এর ভিতরে এই দৌড়াতে পারেন।


আপনি যদি কেবলমাত্র কোডের অভ্যন্তরে সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নামটি ব্যবহার করে একবার অ্যারে ইউটিল ব্যবহার করেন তবে তা আমদানির বিবরণীর চেয়ে কম। দেখুন: কোডগল্ফ.স্ট্যাকেক্সেঞ্জারএইভিএ / 16100/10801 (লিঙ্কযুক্ত উত্তরের নীচের অর্ধেক)
মাস্টারএক্স 244

1

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

t=>((x=[...t].map(k=>`00${(k<'!'?26:k.charCodeAt(0)-97).toString(3)}`.slice(-3)).join``).slice(1)+x[0]).match(/.../g).map(j=>j>221?' ':String.fromCharCode(parseInt(j,3)+97)).join``

এটি একটি বেনামে ফাংশন, সুতরাং এটি ব্যবহার করার আগে এটির একটি নাম দেওয়া দরকার। (উদাহরণস্বরূপ encrypt=t=>...) এখানে চেষ্টা করে দেখুন:

আমি একাধিক ভেরিয়েবল এবং for পরিবর্তে লুপ .map। আমি তখন অ্যালগরিদম পরিবর্তন না করেই এটি প্রতিটি সম্ভাব্য উপায়ে গল্ফ দিয়েছিলাম, যা আমাকে প্রায় 217 বাইটের কোথাও রেখেছিল। অপরিবর্তিত ফাংশনের উত্তরটি একবার দেখার পরে আমি তা ১৯৫-এ নামিয়ে নিয়েছি এবং ডেনড্রোবিয়ামের উত্তরের কিছুটা পরিদর্শন করার ফলে আরও 14 জন গলফ বন্ধ হয়ে গেছে।

আমি যতদূর সচেতন, আমি আর যেতে পারছি না বা আমার ফলাফল কার্যত ডেন্ড্রোবিয়ামের সাথে একরকম হবে (একটি চরিত্রের সংক্ষিপ্ত হওয়া ছাড়া!)। আমি যেখানে একটি চর সংরক্ষণ করেছি সেখানে কেউ কি জায়গাটি পেতে পারেন? :-)

যথারীতি, পরামর্শগুলি আনন্দের সাথে স্বাগত!


রেজেক্স টিপের জন্য ধন্যবাদ! আমি নিশ্চিত না যে কীভাবে লুপটি অন-লুপটি এই এক-লাইন ফাংশনে কাজ করা যেতে পারে তবে সম্ভবত এটি কোনওভাবে কোনও স্থান সাশ্রয় করবে। আপনি চাইলে আপনার সংস্করণটি পোস্ট করতে পারেন।
ইটিএইচ প্রডাকশনগুলি

0

মতলব, 113 বাইট

x=dec2base(strrep(input('','s'),' ','{')-97,3)';strrep(char(base2dec(reshape(x([2:end 1]),3,[])',3)+97)','{',' ')

ইনপুট স্টিডিনের মাধ্যমে হয়।

উদাহরণ:

>> x=dec2base(strrep(input('','s'),' ','{')-97,3)';strrep(char(base2dec(reshape(x([2:end 1]),3,[])',3)+97)','{',' ')
hello world
ans =
vnhhr nqzgj

0

জুলিয়া - 92 87 61 54 বাইট

s->join(32+(3(i=[s...]%91+579)%27+i[[2:end,1]]÷9)%91)

Ungolfed:

function f(s)
  t=[s...];       # Convert the string into a char array
                      #
  i=t%91+579          # Mod 91 drops the alpha characters to sit just
                      # below space, then 579 is added as a trick,
                      # equivalent to subtracting 6 and adding 9*65
  v1=3i%27            # This shifts the bottom two ternary digits up
                      # and removes the first ternary digit
  v2=i[[2:end,19    # This shifts the first ternary digit down and
                      # removes the bottom two ternary digits. [2:end,1]
                      # rotates the array to put the first value at the end
  N=(v1+v2)%91+32     # this combines the ternary digits, then returns
                      # the values to the correct ASCII values
  j=join(N)           # join the char array back to a string
  return j
end

কৌশল আপনাকে বিভ্রান্ত করতে পারে। মোডের পরে 6 টি 'a' ডাউন শূন্যে বিয়োগ করা হচ্ছে। 9 * 65 যোগ করা 65 কে ভি 1 + ভি 2 যুক্ত করার সমতুল্য, যা তাদের আসকি মানগুলিতে মানগুলি পুনঃস্থাপনের প্রক্রিয়ার অংশ। আপনি প্রতিস্থাপন করতে পারে i=t%91+579সঙ্গে i=t%91-6, এবং তারপর প্রতিস্থাপন N=(v1+v2)%91+32সঙ্গে N=(v1+v2+65)%91+32একই ফলাফল পেতে, কিন্তু এটা এক অতিরিক্ত অক্ষর প্রয়োজন।

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