বিট বিড়ম্বনা


9

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

00 00 00 11

বা, বলুন, বিপরীত ক্রমে এবং কিছু সজ্জকারের সাথে, যেমন:

11_00_00_00

তদ্ব্যতীত, '0' এবং '1' কাস্টম অক্ষর হিসাবে তাদের আরও আলাদা করে দেখানোর সম্ভাবনা থাকতে হবে, যেমন:

XX oo oo oo

সুতরাং চ্যালেঞ্জটি হ'ল কোডটি লিখুন যা নিম্নলিখিত স্পেসিফিকেশনগুলির সাথে সমস্ত করে।

সবিস্তার বিবরণী

ফাংশনটি এইভাবে ইনপুট নেয়: চ (এ, মাস্ক, জিরো, এক)

পরামিতি:

- ইনপুট নম্বর - 0-255 সীমাতে যে কোনও (স্বাক্ষরবিহীন) পূর্ণসংখ্যা।
মাস্ক - একটি স্ট্রিং প্যারামিটার যা আউটপুট নির্মাণের সংজ্ঞা দেয়।
জিরোস - একই দৈর্ঘ্যের একটি স্ট্রিং প্রতিটি আউটপুট স্লটের জন্য 'শূন্য' গ্লাইফগুলি সংজ্ঞায়িত করে।
বেশী - একই দৈর্ঘ্যের একটি স্ট্রিং প্রতিটি আউটপুট স্লটের জন্য 'এক' গ্লাইফগুলি সংজ্ঞায়িত করে।

আউটপুট নির্মাণের জন্য বিধি:

আউটপুটটি কীভাবে উত্পন্ন হয় তা বোঝার জন্য উদাহরণ সহ এই চিত্রটি দেখুন:

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

সুতরাং কেবল মাস্কের একক অঙ্কগুলি পার্স করা হবে এবং এ এর ​​বিট দ্বারা প্রতিস্থাপিত হবে, অন্যান্য অক্ষর যেমন রয়েছে তেমনই রেখে দেওয়া হয় । আরও, যদি নেওয়া বিটের মান 1 হয় তবে এটি চূড়ান্ত আউটপুটে "এক্স" হিসাবে প্রদর্শিত হবে এবং যদি এটি 0 হয় তবে এটি "ও" হিসাবে প্রদর্শিত হবে। উপরের উদাহরণে নেওয়া চারটি বিট "1" তাই আমরা সমস্ত স্লটে "এক্স" দেখি।

যদি ইনপুট নম্বরটি 128 হয়, তবে, যুক্তিযুক্তভাবে, আউটপুট হবে X foo bar ooo। "জিরো" এবং "একগুলি" পরামিতিগুলির অক্ষর: যে কোনও মুদ্রণযোগ্য ASCII অক্ষর, ধরে নিন যে তারা সর্বদা মুখোশের সাথে চারদিকে সুসংযুক্ত থাকে।

দ্রষ্টব্য :

  • বিটগুলি 0-সূচকযুক্ত: 0 তম বিএসটি হ'ল এমএসবি।
  • ধরে নিন যে 8,9 অঙ্কগুলি মাস্ক স্ট্রিংয়ে অনুমোদিত নয়।
  • ইনপুট স্ট্রিংগুলিতে যে কোনও মুদ্রণযোগ্য এএসসিআইআই অক্ষর অন্তর্ভুক্ত থাকে।
  • 'জিরোস' এবং 'জেনস' মুখোশটির সাথে চারদিকে সমন্বিত।
  • আপনার ভাষায় বিশেষ অক্ষর / সংশোধকগুলির জন্য: আমরা ধরে নিতে পারি যে তারা ইনপুট স্ট্রিংটিতে উপস্থিত হবে না।

স্বচ্ছতার জন্য আরও উদাহরণ দেখুন।

ইনপুট -> আউটপুট উদাহরণ

স্পেস ডিলিমিটারের সাথে সমস্ত সাধারণ 8 টি বিট আউটপুট, সাধারণ ডিম্বাকৃতি এবং স্টিক স্বরলিপি:

mask  =  "0123 4567"  
zeros =  "0000 0000"  
ones  =  "1111 1111"  

A=1 ->    0000 0001


বিপরীত ক্রমে আউটপুট, ড্যাশ-এবং-গ্লিফ নোটেশনে:

mask =    "| 7654 3210 |"
zeros=    "  ---- ----  "
ones =    "  ssss ssss  "

A=1  ->    | s--- ---- |
A=3   ->   | ss-- ---- |
A=128->    | ---- ---s |


একটি আউটপুটে বিভিন্ন স্বরলিপি যেমন প্যাকড ডেটার জন্য:

mask =       "0 | 123 4567"
zeros=       "    --- ----"
ones =       "X   kkk ssss"

A= 15  ->       | --- ssss
A= 16  ->       | --k ----
A= 32  ->       | -k- ----
A= 128 ->     X | --- ----
A= 255 ->     X | kkk ssss


পুনরাবৃত্তি নিদর্শন:

mask =    "| 7 66 555 4444 |"
zeros=    "  . .. ... ....  "
ones =    "  0 00 000 0000  "

A= 0 ->    | . .. ... .... |
A= 1 ->    | 0 .. ... .... |
A= 2 ->    | . 00 ... .... |
A= 3 ->    | 0 00 ... .... |
A= 4 ->    | . .. 000 .... |

হালনাগাদ

নিয়মগুলি কিছুটা সরল করা হয়েছে - প্রোগ্রামটি অবশ্যই একটি নম্বর মুদ্রণ করতে হবে (প্রাথমিকভাবে প্রস্তাবিত হিসাবে সংখ্যার অ্যারে / তালিকা নয়)।


আমরা কি এমন একটি প্রোগ্রাম জমা দিতে পারি যা চারটি ইনপুট গ্রহণ করে? কিছু ভাষা খুব ভাল ফাংশন করে না।
স্টিফেন

@ স্টিফেনস আমি মনে করি হ্যাঁ, তবে আমি নিশ্চিত নই যে এগুলি আমি বুঝতে পেরেছি: /
মিখাইল ভি

2
শেষ দুটি যুক্তি বেশিরভাগ ভাষায় সম্পূর্ণ অপ্রাসঙ্গিক বলে মনে হয়, কেন কেবল 1 এবং 0 প্রয়োজন হয় না? প্রথম যুক্তি একটি তালিকা হিসাবে নিয়মিত ভাষাগুলি একটি সহজ লুপ / ​​পুনরাবৃত্তি যুক্ত করার সাথে আরও বেশি কিছু করার কথা বলে মনে হয় না, আরও বেশি ছদ্মবেশী ভাষাগুলি প্রতিযোগিতা করা আরও শক্ত করে তোলে।
FryAmTheEggman

@ মিখাইলভি যদি আপনি আপনার চ্যালেঞ্জগুলির উপরের সমস্ত জমাটি বুঝতে চান তবে সৌভাগ্য: / তাদের বেশিরভাগের ট্রাইআইটলাইন লিংক রয়েছে যাতে আপনি তাদের কাজগুলি দেখতে পান তবে তারা বেশিরভাগ গল্ফিংয়ের ভাষা দেখতে বাজেযানের মতো দেখায় যতক্ষণ না তারা জানেন যে তারা কী করে
স্টিফেন

@ ফ্রাইআম দ্য এজিগম্যান আমি কী বুঝতে পারি তাও বুঝতে পারছি Aনা, যেহেতু পরীক্ষার সব ক্ষেত্রেই এটি একই রকম
স্টিফেন ২

উত্তর:


2

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

(A,M,O,I)=>M.replace(/[\d]/g,(d,i)=>(A>>7-d)%2?I[i]:O[i])


2

রুবি , 48 বাইট

->a,f,*b{f.gsub(/\d/){b[a[55-$&.ord]][$`.size]}}

শূন্য এবং পরামিতিগুলির একটি অ্যারে ( *b) হিসাবে গণ্য করা হয় এবং জিরোগুলির সাথে প্যারামিটারটি সংরক্ষণ করা হয় b[0]এবং সেইগুলি পরামিতি সঞ্চিত থাকে b[1]

মুখোশ প্যারামিটারে fপ্রতিটি অঙ্ক ( /\d/) যথাযথ অ্যারে থেকে একটি অক্ষর দ্বারা প্রতিস্থাপিত হয়। $`বর্তমান চলমান ম্যাচ পর্যন্ত টেক্সটটি ধারণ করে এমন বিশেষ ভেরিয়েবলটি অবস্থানের উপর নজর রাখতে এখানে (আব) ব্যবহার করা হয়।

রুবির বিট ইনডেক্সিং 0 কে সর্বনিম্ন-তাত্পর্যপূর্ণ বিট কল করে তবে চ্যালেঞ্জটি 0টিকে সবচেয়ে উল্লেখযোগ্য বিট বলে। 55 থেকে ASCII বিয়োগ ('7' অক্ষর) একটি ব্যবহারযোগ্য রুবি বিট সূচক দেয়।

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




1

গণিত, 131 বাইট

""<>Table[(f/@{##2})[[x[[i]],i]],{i,Length[x=(f=Characters)@#2/.Table[ToString@i->2+Floor[#/2^(7-i)]~Mod~2,{i,0,7}]/._String->1]}]&

Length[x]হতে পারে Length@xএবং {#2,#3,#4}হতে পারে {##2}
ক্যালকুলেটরলাইন

এছাড়াও, StringJoin@@শুধু হতে পারে StringJoin@এবং #1ঠিক হয়#
CalculatorFeline

আমি কিছুটা নিয়ম সরল করেছি, আপডেট দেখুন।
মিখাইল ভি

1

q / kdb +, 86 64 বাইট

সমাধান:

f:{[A;M;Z;O]@[M;m;:;((-8#0b vs A)"I"$'M m)(Z;O)'m:(&)M in .Q.n]}

উদাহরণ:

q)f[1;"0123 4567";"0000 0000";"1111 1111"]
"0000 0001"
q)f[1;"| 7654 3210 |";"  ---- ----  ";"  ssss ssss  "]
"| s--- ---- |"
q)f[15;"0 | 123 4567";"    --- ----";"X   kkk ssss"]
"  | --- ssss"
q)f [0;"| 7 66 555 4444 |";"  . .. ... ....  ";"  0 00 000 0000  "]
"| . .. ... .... |"

ব্যাখ্যা:

সূচকগুলি বাইরে টানুন যেখানে ইনপুট মাস্ক Mএকটি সংখ্যাসূচক হয়, এটিকে এখানে কল করুন mযেখানে আমরা ইনপুট মাস্কটি সংশোধন করব। সঠিক ক্রম পেতে স্ট্রিংয়ের বাইরে অঙ্কগুলি নিয়ে যান, পূর্ণসংখ্যায় কাস্ট করা হয় এবং তারপরে আমাদের 8-বিট অ্যারেতে সূচক দিন। এই 8-বিট অ্যারেটিকে সূচক হিসাবে ব্যবহার করুন O(যদি 1 সেট করা থাকে) বা Z(যদি 0 সেট করা থাকে), এবং তারপরে প্রদত্ত সূচকগুলিতে এই তালিকাগুলিতে সূচী করুন m। পরিশেষে :সূচকগুলিতে মূল মুখোশটিতে এই নতুন তালিকাটি প্রয়োগ করুন m

{[A;M;Z;O]                                                   } / lambda function with 4 parameters
          @[ ; ; ;                                          ]  / apply, applies 3rd parameter to 1st parameter at indexes from parameter 2 with parameter 4 :)
                   (-8#0b vs A)                                / convert input number to binary (64 bit), take the last 8 items
                                              m:(&)M in .Q.n   / returns indices where mask is in "0123..789", stores in variable m
                               "I"$'M m                        / index into mask at indices m, then cast these numbers to an integer array
                  (                    )                       / we then index into our 8 bits a these offsets to get the output order
                                        (Z;O)                  / 2-item list of the zeroes and ones mask
                                             '                 / take each item on the left and right and apply them to (Z;O) (ie index in at 0 / 1 and then 123..67)
            M m :                                              / apply *this* list to M at each index given by m

মন্তব্য:

যদি আমাদের ফর্মের মধ্যে আর্গুমেন্ট দেওয়ার অনুমতি দেওয়া হয় তবে আরও 14 বাইট ছাঁটাই করতে পারে:

[A;M;(Z;O)]

যেমন কুই 3 আর্গুমেন্ট পর্যন্ত জন্য করতে পারবেন (তারা স্পষ্টভাবে নামে হচ্ছে না একটি ফাংশন দেওয়া হবে x, yএবং zযথাক্রমে):

f:{@[y;m;:;((-8#0b vs x)"I"$'y m)z'm:(&)y in .Q.n]}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.