একটি ডায়াগোনাল বুরোস-হুইলারের রূপান্তর সমাধান করুন


11

ভূমিকা

এই চ্যালেঞ্জটিতে আপনি ডায়াগোনাল বুরোস-হুইলারের রূপান্তরগুলি সমাধান করবেন। এখানে একটি তির্যক বুরোস-হুইলারের রূপান্তর কী তা সম্পর্কে একটি সাধারণ ওভারভিউ। কোনও বার্তা এনকোড করার জন্য আপনাকে অবশ্যই গ্যারান্টি দিতে হবে যে এটি দৈর্ঘ্যের মধ্যে (যেমন 5, 7, 9, ইত্যাদি) is তারপর আপনি একটি গ্রিড করতে, nদ্বারা n, যেখানে nবার্তার দৈর্ঘ্য হল। প্রথম সারিটি মূল বার্তা। তার পরে প্রতিটি সারিতে এটির উপরে সারি থাকে তবে প্রথম অক্ষরটি পিছনে চলে যাওয়ার সাথে 1 অক্ষর বামে স্থানান্তরিত হয়। উদাহরণ স্বরূপ:

Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
 WorldHello
WorldHello 
orldHello W
rldHello Wo
ldHello Wor
dHello Worl

তারপরে আপনি এনডাব্লুতে প্রতিটি চিঠিটি এসই তির্যকে নিয়ে যান এবং এটিকে একটি নতুন স্ট্রিংয়ে রাখেন:

Hello World  H
ello WorldH  l
llo WorldHe  o
lo WorldHel  W
o WorldHell  r
 WorldHello  d
WorldHello   e
orldHello W  l
rldHello Wo  (space)
ldHello Wor  o
dHello Worl  l

আপনার এনকোডযুক্ত বার্তাটি HloWrdel ol। ডিকোড করতে, প্রথমে এনকোড হওয়া বার্তার দৈর্ঘ্য নিন, 1 যুক্ত করুন এবং 2 দিয়ে ভাগ করুন this এই নাম্বারে কল করুন x। এখন আমরা জানি যে x, প্রথম অক্ষরটি শুরু করে প্রতিটি অক্ষর xশেষের পরে, প্রায় লুপ করে around উদাহরণ স্বরূপ:

H   l   o   W   r   d   e   l     o   l
1   

Then...

H   l   o   W   r   d   e   l     o   l
1                       2

And again...

H   l   o   W   r   d   e   l     o   l
1   3                   2

Until you get...

H   l   o   W   r   d   e   l       o   l
1   3   5   7   9  11   2   4   6   8  10

এখন পেতে সঠিক ক্রমে অক্ষরগুলি পুনরায় সাজান Hello World!

চ্যালেঞ্জ

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

আবশ্যকতা

প্রথম প্রোগ্রাম / ফাংশন

  • উপরে তালিকাভুক্ত যে কোনও পদ্ধতি ব্যবহার করে একটি একক স্ট্রিং ইনপুট।
  • একটি তির্যক বারো-হুইলারের রূপান্তর শৈলী ব্যবহার করে স্ট্রিংটি এনকোড করতে হবে।

দ্বিতীয় প্রোগ্রাম / ফাংশন

  • উপরে তালিকাভুক্ত যে কোনও পদ্ধতি ব্যবহার করে একটি একক স্ট্রিং ইনপুট।
  • একটি তির্যক বারো-হুইলারের রূপান্তর শৈলী ব্যবহার করে স্ট্রিংটি ডিকোড করতে হবে।

সীমাবদ্ধতাসমূহ

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

স্কোরিং

এটি কোড গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম ।

আমার যদি আরও তথ্য যুক্ত করতে হয় তবে একটি মন্তব্য করুন!


2
আমাদের কি এমনকি দৈর্ঘ্যের ইনপুট স্ট্রিংকে বিজোড় দৈর্ঘ্যে রূপান্তর করতে হবে?
অপ্টিমাইজার

5
এটি কোনও বুরোজ-হুইলারের ট্রান্সফোরমেশন নয়।
FUZxxl

3
একটি বুড়ো-হুইলারের রূপান্তর ভিন্ন যে আপনি শেষ আইটেমগুলি নেওয়ার আগে সমস্ত ঘোরার অ্যারে ডিক্সিকোগ্রাফিকভাবে বাছাই করা হয়।
FUZxxl

@ অপ্টিমাইজার এটি প্রয়োজনীয় নয়।
GamrCorps

উত্তর:


12

সিজেএম, (4 + 8 =) 12 বাইট

এনকোডিং প্রোগ্রাম:

q2/z

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

ডিকোডিং প্রোগ্রাম:

q_,2/)/z

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

কীভাবে (বা বরং, কেন) তারা কাজ করে :

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

Hello World

হিসাবে 2D ম্যাট্রিক্স হিসাবে প্রতিনিধিত্ব করা হয়

He
ll
o 
Wo
rl
d

এখন কেবল এটি কলাম অনুযায়ী পাঠ করুন, দিন:

HloWrdel ol

যা বুরোজ-হুইলারের রূপান্তর।

ডিকোডিংটি কেবল প্রক্রিয়াটির বিপরীত, স্ট্রিংটিকে 2 সারি 2 ডি ম্যাট্রিক্স হিসাবে লিখুন এবং কলাম অনুসারে পড়ুন।

কোড সম্প্রসারণ :

এনকোডার:

q          "Read the input";
 2/        "divide it into sub arrays of 2 characters";
   z       "Take transform";

সঙ্কেতমোচক:

q_,        "Read the input, take copy and get length of copy";
   2/      "Divide the length by 2";
     )/    "Increment and split the input into two rows";
       z   "Take transform";

7

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

E=lambda x:x[::2]+x[1::2]
D=lambda y:(-~len(y)/2*y)[::len(y)/2+1]

Eএনক্রিপ্ট এবং Dডিক্রিপ্ট আমি E=এবং D=স্কোর জন্য গণনা করছি না ।

ডিক্রিপশনটি প্রতিটি nঅক্ষরের চারপাশে মোড়ানো থাকে, যেখানে nঅর্ধেক স্ট্রিং দৈর্ঘ্য থাকে। এই বিপরীত কারণগুলি হল 2এবং nস্ট্রিংয়ের দৈর্ঘ্যটি বিপরীত হয়, সুতরাং প্রতিটি nতম অক্ষর প্রতিটি 2এনডি গ্রহণ করে উল্টায় ।

যদি একটি একক ফাংশন ব্যবহারের অনুমতি দেওয়া হয় তবে আমি 44 বাইট করতে পারি

def F(x,b):n=1+len(x)**b>>b;return(n*x)[::n]

যখন bথাকে এনক্রিপ্ট Falseএবং কখন bথাকে ডিক্রিপ্ট হয় True। ভাবটি 1+len(x)**b>>bসমান [2,len(x)/2+1][b]


4

জে, 10 + 10 = 20

   ({~#|2*i.@#) 'Hello World'
HloWrdel ol

   (/:#|2*i.@#) 'HloWrdel ol'
Hello World

(চারপাশের ধনুর্বন্ধনী স্কোর হিসাবে গণনা করা হয় না কারণ তারা ফাংশন সংজ্ঞা অংশ না।)

3-বাইট উন্নতির জন্য FUZxxl ধন্যবাদ ।

এখন এটি দুর্দান্তভাবে দেখানো হয়েছে যে দুটি ফাংশন বিপরীত কারণ প্রথমটি তালিকার দ্বারা নির্ধারিত অবস্থানগুলি থেকে অক্ষর নেয় #|2*i.@#এবং দ্বিতীয় ফাংশনটি ক্রম হিসাবে একই তালিকা ব্যবহার করে অক্ষরগুলি ফিরে সাজায়।

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


প্রথম এক 10 অক্ষর মধ্যে সম্পন্ন করা যাবে পাশাপাশি: {~#|2*i.@#
FUZxxl

@FUZxxl ধন্যবাদ, আপডেট হয়েছে। এখন দুটি ফাংশনের মধ্যে সম্পর্কটি খুব সুন্দরভাবে দেখানো হয়েছে।
এলোমেলো

3

পাইথ - 5 + 11 = 16 বাইট

আমি একটি প্যাটার্ন লক্ষ্য! Happy সুখী নাচা করে ~ রূপান্তরটি কেবল অন্য প্রতিটি উপাদানকে বাছাই করে স্ট্রিংয়ের মধ্য দিয়ে লুপিং হয়। এটি কেবলমাত্র অদ্ভুতভাবে কাজ করে কারণ অন্যথায় এটি কখনই অর্ধেক উপাদানগুলি পেতে পারে না। এটি 2 প্রশস্ত ম্যাট্রিক্স ঘোরার সমতুল্য।

এনকোডার:

%2*2z

পাইথনের স্টেপ স্লাইসিং প্রায় লুপ হয় না তাই আমি স্ট্রিংটির পুনরাবৃত্তি করেছি।

%2      Take every other elements
 *2z    Double input string

সঙ্কেতমোচক:

K/hlz2%K*Kz

আবার ধাপ-স্লাইসিংয়ের জন্য কোনও মোড়ক নেই।

K/hlz2       K=length of (input+1)/2
%K           Every kth element
 *Kz         From K*the input

@ ফ্রাইআম দ্য এজিগম্যান আমি নিশ্চিত যে এটি কেবলমাত্র বিজোড় দৈর্ঘ্যের স্ট্রিং নেওয়ার কথা। এটি বর্ণনার শুরুতে ছিল।
মালটিসেন

ওহো দুঃখিত. : এস
ফ্রাইআম দ্য এজিগম্যান

2

জিএনইউ সেড-আর, (20 + 104 + 1) = 125

স্কোরের অতিরিক্ত +1 হ'ল -r বিকল্পটি সেড করার জন্য। বিজোড় দৈর্ঘ্যের ইনপুট স্ট্রিংগুলি ধরে নেওয়া হয়।

এনকোডার:

s/.*/&&/
s/(.)./\1/g
  • ইনপুট স্ট্রিং দ্বিগুণ করুন
  • প্রতিটি বিজোড় (1 থেকে গণনা) অক্ষরটি ফেলে দিন

সঙ্কেতমোচক:

ডিকোডারটি :একটি অস্থায়ী চিহ্নিতকারী চরিত্র হিসাবে ব্যবহার করে , সুতরাং এটি যদি ইনপুট স্ট্রিংয়ে উপস্থিত হয়, আপনি অনির্ধারিত আচরণ পাবেন। যদি ইনপুট স্ট্রিংটি 95 এএসসিআইআই অক্ষরগুলিতে সীমাবদ্ধ থাকে তবে এগুলি ঠিক করার জন্য এই চিহ্নিতকারীগুলিকে ASCII ব্যাপ্তির (যেমন BEL 0x7) বাইরে কিছু দিয়ে প্রতিস্থাপন করা যেতে পারে।

s/.*/:&:/
:l;s/:(.)(.+)(.):/\1:\2:\3/;tl
s/:(.*)/\1:/
:m;s/(.)(.*):(.?)(.*):(.*)/\2:\4:\5\1\3/;tm
s/://g
  • :ইনপুট স্ট্রিংয়ের শুরু এবং শেষে মার্কার রাখুন
  • চিহ্নিতকারীরা মাঝের চরিত্রের উভয় পাশ না হওয়া পর্যন্ত একযোগে প্রথম :ফরোয়ার্ড এবং দ্বিতীয় :পশ্চাৎপদ এক চরিত্রটি :সাফ করুন
  • প্রথমটি সরান :এবং অন্যটিতে :"এ: বি:" রেখে অন্যটি যুক্ত করুন , যেখানে A সরলরেখার ইনপুট থেকে বিজোড় অক্ষর দ্বারা গঠিত স্ট্রিং এবং বি সমান অক্ষরের সমন্বিত স্ট্রিং is
  • প্লেটেক্সট ইনপুটটিকে :পুনরায় সংযুক্ত করতে শেষের পরে A এবং B এর অক্ষরগুলি এক সাথে রিফেল করুন
  • অবশিষ্ট :চিহ্নিতকারীগুলি সরান

2

জাভাস্ক্রিপ্ট ES6, 41 + 49 = 90 বাইট

এনকোডার

(t=>t.replace(/./g,(_,o)=>t[o*2%t.length]))('Hello World')

সঙ্কেতমোচক

(t=>t.replace(/./g,(_,o)=>t[-~(l=t.length)/2*o%l]))('HloWrdel ol')

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


এই সম্পর্কে [t=>t.replace(/./g,(_,o)=>t[o*2%t.length]),t=>t.replace(/./g,(_,o)=>t[(1+(l=t.length))/2*o%l])]:? আপনি এটি [...][0]('encode string')এবং মত ব্যবহার করুন [...][1]('decode string')। কিছুই করা যাচ্ছে না যে এটি করা যায় না! এবং আপনি 1 বাইট সংরক্ষণ করুন।
ইসমাইল মিগুয়েল

ধন্যবাদ, বু এটি 2 টি ফাংশন লিখতে বলেছে, এবং আমার মনে হয় না এটি গণনা করবে।
নিনজাবিয়ারমনেকি

এটি এখনও 2 ফাংশন। নিয়মগুলি কার্যকারিতা অ্যাক্সেস করার নাম বা উপায় নির্দিষ্ট করে না। এটি কেবলমাত্র আপনাকে 2 টি ফাংশন ব্যবহার করতে বলেছে।
ইসমাইল মিগুয়েল

1
@ ইসমাইল মিগুয়েল এখন আমি এটি সম্পর্কে চিন্তাভাবনা করি বলে আমার মনে হয় বেনামি ফাংশনগুলি নিজেরাই মঞ্জুরিপ্রাপ্ত, সুতরাং এটি ব্যবহার করে আমাকে আরও বেশি বাইট সংরক্ষণ করে।
নিনজাবিয়ারমনেকি

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