মুদ্রণযোগ্য এএসসিআইআই সামনের দিকে সরান


19

পটভূমি

পদক্ষেপ টু সামনে রুপান্তর (MTF) একটি ডাটা এনকোডিং এনট্রপি এনকোডিং প্রযুক্তির পারফরম্যান্সের উন্নতি করার জন্য ডিজাইন করা অ্যালগরিদম হয়।

ইন Bzip2 কম্প্রেশন অ্যালগরিদম , এটা পরে প্রয়োগ করা হয় বারোজ-হুইলার রুপান্তর (যেমন দেখা বারোজ, Wheeler এবং পিছনে ), ছোট, সহজে সংকোচনশীল অ নেতিবাচক পূর্ণসংখ্যার মধ্যে পুনরাবৃত্তি অক্ষরের গ্রুপ বাঁক উদ্দেশ্য সঙ্গে।

সংজ্ঞা

এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা এমটিএফ এর মুদ্রণযোগ্য এএসসিআইআই সংস্করণটি নিম্নলিখিতভাবে সংজ্ঞায়িত করব:

প্রদত্ত একটি ইনপুট স্ট্রিং গুলি , একটি খালি অ্যারে নেওয়া , স্ট্রিং সব মুদ্রণযোগ্য ASCII অক্ষর এর (0x7E করার 0x20) এবং প্রতিটি অক্ষর জন্য নিম্নলিখিত পুনরাবৃত্তি এর গুলি :

  1. সূচী সংযোজন করুন মধ্যে করার

  2. সরান সামনে , অর্থাত্, অপসারণ থেকে এবং বাকি থেকে এটি পূর্বে লিখুন।

শেষ অবধি, আমরা আর এর উপাদানগুলিকে মূল d তে সূচক হিসাবে গ্রহণ করি এবং সংশ্লিষ্ট অক্ষরগুলি আনব।

ধাপে ধাপে উদাহরণ

INPUT: "CODEGOLF"

0. s = "CODEGOLF"
   d = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = []
1. s = "ODEGOLF"
   d = "C !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35]
2. s = "DEGOLF"
   d = "OC !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47]
3. s = "EGOLF"
   d = "DOC !\"#$%&'()*+,-./0123456789:;<=>?@ABEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47 37]
4. s = "GOLF"
   d = "EDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47 37 38]
5. s = "OLF"
   d = "GEDOC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47 37 38 40]
6. s = "LF"
   d = "OGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47 37 38 40 3]
7. s = "F"
   d = "LOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABFHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47 37 38 40 3 45]
8. s = ""
   d = "FLOGEDC !\"#$%&'()*+,-./0123456789:;<=>?@ABHIJKMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
   r = [35 47 37 38 40 3 45 41]

OUTPUT: "COEFH#MI"

কার্য

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা প্রিন্টযোগ্য এএসসিআইআই এমটিএফ প্রয়োগ করে (উপরে বর্ণিত হিসাবে)

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

Input:  Programming Puzzles & Code Golf
Output: Prpi"do lp%((uz rnu&3!P/o&$U$(p

Input:  NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN BATMAN!
Output: Na! !! !! !! !! !! !! !! !! !! !! !! !! !! !! !!"DDUP"%'

Input:  Two more questions and I have bzip2 in less than 100 bytes!
Output: Twp#o"si$sv#uvq(u$(l#o#W!r%w+$pz,xF%#,"x(. #0--'$GG ".z(**:

অতিরিক্ত বিধি

  • আপনি কোনও বিল্ট-ইন অপারেটর ব্যবহার করতে পারবেন না যা কোনও স্ট্রিংয়ের এমটিএফ গুনছে।

  • আপনি যদি আউটপুট জন্য STDOUT চয়ন করেন তবে আপনার কোডটি একটি ট্রেলিং নিউলাইন মুদ্রণ করতে পারে।

  • আপনার কোডটি 1000 বা তার বেশি মুদ্রণযোগ্য ASCII অক্ষর (0x20 থেকে 0x7E) এর কোনও ইনপুট জন্য কাজ করতে হবে to

  • স্ট্যান্ডার্ড কোড গল্ফ বিধি প্রযোজ্য। বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়।


1
"নানানানা ডিডিইউপি!" ঠিক "ব্যাটম্যান!" এর মতো আকর্ষণীয় নয় ... ...
ডুরকনব

8
@ ডুরকনব: তবে ব্যাটম্যান সহজে সংকোচনের নয়।
ডেনিস

আমরা ফলাফলটি STDOUT এ মুদ্রণের পরিবর্তে কোনও ফাংশন রিটার্নে আউটপুট দিতে পারি?
22:39

@ ফ্যাটালাইজ করুন: এটি ফাংশনগুলির জন্য আউটপুটটির সবচেয়ে প্রাকৃতিক রূপ, তাই হ্যাঁ। যাইহোক, আমাদের আই / ও এর জন্য খেলাপি আছে , সুতরাং যদি প্রশ্নটি স্পষ্টভাবে অন্যথায় না বলে, এটি সর্বদা অনুমোদিত।
ডেনিস

উত্তর:


6

সিজেম, 20

'¡,q{_C#c' ,C+@|}fC;

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

ব্যাখ্যা:

'¡,      make a string of characters with codes from 0 to 160 (a modified "d")
         could have been to 126 but stackexchange doesn't like the DEL character
q        read the input (s)
{…}fC    for each character C in s
  _      duplicate the d string
  C#     find the index of C in d
  c      convert to character (this is the result)
  ' ,    make a string of characters from 0 to 31
  C+     append C to the string
  @      bring d to the top
  |      set union, preserving order; effectively, C is moved to position 32
         this is the updated d string
;        pop the last d

6

অস্ট্রিচ , 46 45 টি অক্ষর

শিরোনামে কোনও সংস্করণ নম্বর নেই কারণ এটি আসলে সর্বশেষতম প্রতিশ্রুতি । আমি Oসর্বশেষ সংস্করণ প্রকাশের পরে (স্ট্রিংটিতে ascii কোড) অপারেটর যুক্ত করেছি (তবে এখনও এই চ্যালেঞ্জ পোস্ট হওয়ার আগে)।

{a95,{32+O}%:d3@{:x\.3@?3@\+\x-x\+}/;{d=}%s*}

ব্যাখ্যা:

a             this is the "r" array (a is short for [], empty array)
95,{32+O}%:d  this is the "d" array
3@{...}/      for each character in the input (as an "argument")...
  :x            store in variable x (stack is now [r d c])
  \.3@?         find index in d     (stack is now [r d idx])
  3@\+          append index to r   (stack is now [d modified_r])
  \x-           remove char from d, and then...
  x\+           prepend char to d   (stack is now [modified_r modified_d])
;             throw away modified_d
{d=}%         map r to indices of (original) d
s*            join (s is short for ``, empty string)

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

1
@AlexA। ... অপেক্ষা কর, হাহ, এভাবে বানান? আমার পুরো জীবনটি মিথ্যা হয়ে গেছে
ডুরকনব

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

3

পাইথন 3, 88

*d,=range(127)
for c in input():y=d.index(ord(c));d[:32]+=d.pop(y),;print(chr(y),end='')

আমার সিজেএম সমাধান থেকে কিছু ধারণা ব্যবহার করে।
-4 বাইট স্প3000 এর অন্তর্গত :)


2

এসডাব্লুআই-প্রোলগ, 239 197 189 বাইট

a(S):-l([126],X),a(S,X,[],R),b(R,X).
a([A|T],X,S,R):-nth0(I,X,A,Z),(a(T,[A|Z],[I|S],R);R=[I|S]).
b([A|T],X):-(b(T,X);!),nth0(A,X,E),put(E).
l([B|R],Z):-A is B-1,X=[A,B|R],(A=32,Z=X;l(X,Z)).

উদাহরণ: ফলাফল a(`Two more questions and I have bzip2 in less than 100 bytes!`).:

Twp#o"si$sv#uvq(u$(l#o#W!r%w+$pz,xF%#,"x(. #0--'$GG ".z(**:

(এবং এর true .পরেও স্পষ্টতই)

দ্রষ্টব্য: আপনার এসডাব্লুআই-প্রোলোগ সংস্করণটি এমন একটি নতুন হতে হবে যাতে ব্যাককোটি `কোডগুলির স্ট্রিং উপস্থাপন করে। "পুরানো সংস্করণগুলিতে ডাবল-কোট সহ কোড স্ট্রিংগুলি উপস্থাপন করা হত ।


2

পাইথন 2, 137 110 104

না বাস্তবায়ন কঠিন, কিন্তু এরকম ছিল হয়তো এখনো golfable?

এখানে চেষ্টা করুন

e=d=map(chr,range(32,127))
r=""
for c in raw_input():n=e.index(c);r+=d[n];e=[e[n]]+e[:n]+e[n+1:]
print r

1
আমি মনে করি আপনি e=d=map(chr,range(32,127))পাইথন 2 এ তালিকার মানচিত্রটি করা ভাল , যদিও আপনাকে eএকটি তালিকা হ্যান্ডেল করার জন্য টুইঙ্ক করতে হবে।
xnor

@ এক্সনোর ধন্যবাদ আমি ব্যবহার করার চেষ্টাও করেছি e=[e.pop(n)]+e, তবে এটি কার্যকর হয় না। তা কেন?
mbomb007

আপনি পেয়েছেন e=d=, সুতরাং যখন আপনি থেকে পপ আপনিও eপপিং d। ব্যবহার করে দেখুন d=e[:]
Sp3000

1
তবে এই মুহুর্তে স্রেফ করা n=e.index(ord(c));r+=chr(n+32);এবং ড্রপ করা সম্ভবত ভালd
Sp3000

1

পাইথ, 24 বাইট

JK>95CM127s@LKxL~J+d-Jdz

প্রদর্শন. পরীক্ষার জোতা।

প্রথম বিট। JK>95CM127প্রয়োজনীয় তালিকা সেট এবং এটি সংরক্ষণ করে Jএবং K~J+d-Jdতালিকার আপডেটগুলি সম্পাদন করে, যখন xL ... zইনপুট অক্ষরগুলিকে তালিকায় তাদের অবস্থান ম্যাপ করে। অবশেষে s@LKindex সূচকগুলিকে মূল তালিকার অক্ষরে রূপান্তরিত করে।


1

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

e#s=[b|(b,a)<-zip[0..]s,a==e]!!0
a=[' '..'~']
f=snd.foldl(\(d,r)e->(e:take(e#d)d++tail(drop(e#d)d),r++[a!!(e#d)]))(a,[])

ব্যবহারের উদাহরণ: f "CODEGOLF"->"COEFH#MI"

এটা কিভাবে কাজ করে: #একটি সূচক ফাংশন যা অবস্থান ফেরৎ eমধ্যে s(Haskell, এর নেটিভ ব্যবহার করতে পারবেন না elemIndexকারণ একটি ব্যয়বহুল এর import)। মূল ফাংশনটি fভাঁজ প্যাটার্ন অনুসরণ করে যেখানে এটি ইনপুট স্ট্রিংয়ের মধ্য দিয়ে হাঁটার সময় অবস্থান স্ট্রিং dএবং ফলাফল স্ট্রিং আপডেট করে r

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