টগল করুন, মুদ্রণ করুন, পুনরাবৃত্তি করুন


17

এই চ্যালেঞ্জ ঢিলেঢালাভাবে অবাস্তবায়িত esolang দ্বারা অনুপ্রাণিত হয় Pada

8 টি বিটের অ্যারে বিবেচনা করুন, সমস্ত শূন্য থেকে শুরু করে। আমরা স্বেচ্ছাসেবী স্ট্রিং প্রিন্ট করার জন্য একটি খুব সংক্ষিপ্ত নির্দেশ সেট প্রবর্তন করব। দুটি নির্দেশনা রয়েছে, উভয়ই একটি পরামিতি নেয় Nযা কিছুটা সূচক:

  • t Nfor t oggle: এটি বিটের মান পরিবর্তন করে N
  • p Nজন্য পি দ্রণ: একটি বাইট হিসাবে এই ব্যাখ্যা করে সব 8 বিট, বিট থেকে শুরু Nএবং শেষ প্রায় মোড়ানো । এই বাইটের সাথে সম্পর্কিত চরিত্রটি STDOUT এ মুদ্রিত হয়েছে।

একটি উদাহরণ তাকান। আমরা মুদ্রণ করতে চাই :=। নিঃসন্দেহে আমরা নিম্নলিখিত হিসাবে এটি অর্জন (0 ভিত্তিক বিট সূচকগুলি):

t 2    [0 0 1 0 0 0 0 0]
t 3    [0 0 1 1 0 0 0 0]
t 4    [0 0 1 1 1 0 0 0]
t 6    [0 0 1 1 1 0 1 0]
p 0    [0 0 1 1 1 0 1 0] == 58 == ':'
t 5    [0 0 1 1 1 1 1 0]
t 6    [0 0 1 1 1 1 0 0]
t 7    [0 0 1 1 1 1 0 1]
p 0    [0 0 1 1 1 1 0 1] == 61 == '='

তবে পরিবর্তে, আমরা pদুটি নির্দেশাবলীর চক্রীয় বৈশিষ্ট্যটি ব্যবহার করতে এবং সংরক্ষণ করতে পারি:

t 2    [0 0 1 0 0 0 0 0]
t 3    [0 0 1 1 0 0 0 0]
t 4    [0 0 1 1 1 0 0 0]
t 6    [0 0 1 1 1 0 1 0]
p 0    [0 0 1 1 1 0 1 0] == 58 == ':'
t 1    [0 1 1 1 1 0 1 0]
p 7    [0 1 1 1 1 0 1 0] == [0 0 1 1 1 1 0 1] == 61 == '='
                      ^

সুতরাং p 7কেবল প্রথমটির পরিবর্তে শেষ বিট থেকে বাইট মান পড়া শুরু করুন।

চ্যালেঞ্জ

মুদ্রণযোগ্য ASCII অক্ষরগুলির একটি খালি খালি স্ট্রিং দেওয়া (0x20 থেকে 0x7E, সমেত), উপরের সিস্টেমে সেই স্ট্রিংটি মুদ্রণের জন্য নির্দেশাবলীর একটি অনুকূল তালিকা (প্রতিটি নির্দেশ প্রতি এক লাইন) উত্পাদন করে। যদি একাধিক অনুকূল সমাধান থাকে (যা প্রায়শই সর্বদা হয়ে থাকে) তবে তাদের মধ্যে একটি তৈরি করুন।

আপনি বিটগুলির জন্য 0-ভিত্তিক এবং 1-ভিত্তিক সূচকগুলির মধ্যে চয়ন করতে পারেন তবে দয়া করে আপনার পছন্দটি উল্লেখ করুন।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন। আপনি যদি ফলাফলটি STDOUT এ মুদ্রণ না করেন তবে এটি এখনও একটি একক নিউলাইন দ্বারা পৃথক স্ট্রিং হওয়া উচিত।

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

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

প্রতিটি পরীক্ষার কেস ইনপুট স্ট্রিং সহ একটি একক লাইন এবং তারপরে একটি সম্ভাব্য সমাধানের পরে যথাযথ সংখ্যক নির্দেশনা অনুসরণ করে।

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

?
7 instructions
t 2
t 3
t 4
t 5
t 6
t 7
p 0

:=
7 instructions
t 2
t 3
t 4
t 6
p 0
t 1
p 7

0123456789
26 instructions
t 2
t 3
p 0
t 7
p 0
t 6
t 7
p 0
t 7
p 0
t 5
t 6
t 7
p 0
t 7
p 0
t 6
t 7
p 0
t 7
p 0
t 2
t 3
p 3
t 2
p 3

9876543210
28 instructions
t 2
t 3
t 4
t 7
p 0
t 7
p 0
t 0
t 7
p 5
t 4
p 5
t 0
t 5
p 0
t 7
p 0
t 5
t 6
t 7
p 0
t 7
p 0
t 6
t 7
p 0
t 7
p 0

Hello, World!
39 instructions
t 1
t 4
p 0
t 3
t 7
p 2
t 1
t 6
p 2
p 2
t 0
t 1
p 2
t 0
t 1
t 3
p 2
t 6
t 7
p 2
t 0
t 2
t 6
t 7
p 1
t 0
t 1
t 5
p 0
t 2
t 7
p 3
t 2
t 6
p 0
t 4
p 0
t 1
p 3

The quick brown fox jumps over the lazy dog.
150 instructions
t 1
t 3
t 5
p 0
t 1
t 2
p 1
t 1
t 3
t 7
p 0
t 1
t 5
t 7
p 0
t 1
t 3
t 7
p 0
t 5
p 0
t 3
t 4
t 5
p 0
t 4
t 6
p 0
t 4
p 0
t 1
t 4
t 6
t 7
p 0
t 1
t 6
p 0
t 3
p 0
t 0
t 5
p 4
t 0
t 7
p 0
t 1
p 1
t 3
t 5
t 6
t 7
p 0
t 1
t 5
t 6
p 0
t 4
t 7
p 0
t 1
t 2
p 3
t 5
t 6
t 7
p 2
t 1
t 2
t 6
p 0
t 0
p 7
t 0
t 7
p 5
t 3
t 4
t 6
t 7
p 0
t 6
t 7
p 0
t 1
t 3
t 6
t 7
p 0
t 1
t 4
t 5
t 6
t 7
p 0
t 4
p 4
t 6
p 0
t 1
t 6
p 4
t 5
t 6
t 7
p 0
t 1
t 3
t 5
p 0
t 1
p 1
t 1
t 3
t 7
p 0
t 1
t 5
t 7
p 0
t 1
t 4
t 5
p 0
t 1
p 3
t 3
t 7
p 1
t 1
t 5
p 0
t 1
t 3
t 4
t 7
p 0
t 1
t 5
p 0
t 4
t 6
t 7
p 0
t 4
p 0
t 1
t 4
t 7
p 0

এই সিজেএম রেফারেন্স প্রয়োগের মাধ্যমে পরীক্ষার কেসগুলি তৈরি করা হয়েছিল ।

উত্তর:


3

সিজেম, 67 বাইট

U]8*l{i2b8Ue[8,{1$m>2$.^:+}$0=_@m>@1$.^ee{~{"t "op}{;}?}/"p "o\p}/;

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

ব্যাখ্যা:

U]8*    Build start bit array [0 0 0 0 0 0 0 0].
l       Get input.
{       Start loop over input characters.
  i       Convert character to integer.
  2b      Convert to binary array.
  8Ue[    Pad to 8 entries with leading 0.
  8,      Generate list of possible rotation amounts.
  {       Start of sort function block.
    1$      Get bit array of character.
    m>      Rotate by rotation amount.
    2$      Get previous bit array.
    .^      Element-wise xor to get different bits.
    :+      Add elements in result to get count of different bits.
  }$      Sort possible rotations by count of different bits.
  0=      Get first rotation amount in sorted list, which is the one with the
          one that results in the smallest count of different bits.
  _       Copy count. Will use original for "p" output later.
  @       Get the character bit array to top of stack.
  m>      Rotate it, to get optimal rotated bit array.
  @       Get previous bit array to top of stack.
  1$      Copy rotated bit array, will need the original as starting point
          for next character.
  .^      Element-wise xor to get different bits.
  ee      Enumerate array to get pairs of index and bit value.
  {       Loop over bits.
    ~       Unpack index bit pair.
    {       Start of if block for bit value.
      "t "o   Output "t ".
      p  Output index and newline.
    }       End of if block.
    {       Start of else block.
      ;       Pop the index value.
    }?      End of ternary if.
  }/      End loop over bits.
  "p "o   Output "p ".
  \       Swap rotation amount to top.
  p       Print rotation amount and newline.
}/      End loop over input characters.
;       Ppp current bit array off stack to prevent extra output.

5

রুবি, 171

->w{s=[0]*8
w.chars.flat_map{|c|z=0..7
*m,i=z.map{|j|z.select{|k|s[k]!=z.map{|i|c.ord[i]}.rotate(j)[k]}<<j}.min_by &:size
m.map{|m|s[m]=1-s[m];"t #{7-m}"}+["p #{i}"]}*?\n}

একটি রুবি ফাংশন যে শুধুমাত্র রেফারেন্স বাস্তবায়ন আকার দ্বিগুণ। :)

এটি অনলাইনে ব্যবহার করে দেখুন: http://ideone.com/ysYyFP

প্রোগ্রামটি বেশ সোজা: প্রতিটি পদক্ষেপে, এটি বর্তমান অবস্থা থেকে একটি রাজ্যে সংক্ষিপ্ততম পথ নেয় যা চরিত্রটি মুদ্রণের অনুমতি দেয়। এটি নির্দিষ্ট বিন্যাসে একটি স্ট্রিং প্রদান করে।

প্রোগ্রামটির প্রাথমিক (কম গল্ফযুক্ত) সংস্করণ এখানে উপলভ্য ।


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