একটি ক্যামেরা ঘোরান; একটি নভোচারী সংরক্ষণ করুন


23

নোট: মাইনর জন্য ধ্বংসকারীগুলি দ্য মঙ্গল এই প্রতিদ্বন্দ্বিতায় হয়। সাবধানতার সাথে এগিয়ে পড়ুন


মার্টিয়ান একটি মহাকাশচারী এবং উদ্ভিদবিজ্ঞানী অসাধারণ, মার্ক ওয়াটনি সম্পর্কে একটি সায়েন্স ফিকশন উপন্যাস , যিনি দুর্ঘটনাক্রমে মঙ্গলগ্রহে আটকা পড়েছিলেন। বইয়ের এক পর্যায়ে, মার্ক নাসার সাথে যোগাযোগের চেষ্টা করে, তবে তাদের কাছে যোগাযোগের একমাত্র মাধ্যম একটি ক্যামেরা। চিহ্ন সূচক কার্ডগুলিতে লিখিত বার্তাগুলি প্রেরণ করে এবং, যেহেতু নাসা ক্যামেরাটি 360 ডিগ্রিটি ঘোরতে পারে, নাসা "হ্যাঁ" বা "না" লেবেল কার্ডগুলিতে ক্যামেরাটি দেখিয়ে উত্তরগুলি ফেরত পাঠায়।

যেহেতু নাসা কেবলমাত্র ডেটা পাঠাতে পারে সেই দিকটিই ক্যামেরাটির মুখোমুখি হয়, তাই মার্ক একটি সিস্টেম নিয়ে আসে যেখানে তারা বর্ণমালার অক্ষরের সাথে কার্ডগুলিতে বার্তা টাইপ করতে পারে point তবে 'আজ' অক্ষর ব্যবহার করা অবৈধ হবে। বইটির উদ্ধৃতি দিতে ( এই উত্তর থেকে , স্কিফি.সি উপর):

আমাদের প্রতি আধ ঘন্টা পরে হ্যাঁ / কোনও প্রশ্নের চেয়ে দ্রুত কথা বলতে হবে। ক্যামেরাটি 360 ডিগ্রি ঘোরতে পারে এবং আমার কাছে প্রচুর অ্যান্টেনার অংশ রয়েছে। বর্ণমালা তৈরির সময়। তবে আমি কেবল জেডের মাধ্যমে A অক্ষরগুলি ব্যবহার করতে পারি না Twenty ছাব্বিশটি অক্ষরের সাথে আমার প্রশ্নপত্রটি ল্যান্ডারের চারপাশে সাতাশটি কার্ড। প্রত্যেকে কেবল 13 ডিগ্রি তোরণ পাবে। এমনকি জেপিএল ক্যামেরাকে নিখুঁতভাবে নির্দেশ করলেও, তাদের পক্ষে কোন চিঠিটি বোঝানো হয়েছে তা আমি জানি না good

সুতরাং আমি ASCII ব্যবহার করতে হবে। কম্পিউটারগুলি এইভাবে অক্ষর পরিচালনা করে। প্রতিটি চরিত্রের 0 এবং 255 এর মধ্যে একটি সাংখ্যিক কোড থাকে। 0 এবং 255 এর মধ্যে মানগুলি 2 হেক্সাডেসিমাল অঙ্ক হিসাবে প্রকাশ করা যেতে পারে। আমাকে হেক্স ডিজিটের জোড়া দিয়ে, তারা সংখ্যা, বিরামচিহ্ন ইত্যাদি সহ তাদের পছন্দ মতো যে কোনও অক্ষর প্রেরণ করতে পারে

...

সুতরাং আমি 0 থেকে 9, এবং এফ এর মাধ্যমে এ জন্য কার্ড তৈরি করব যা ক্যামেরার চারপাশে 16 টি কার্ড তৈরি করে, পাশাপাশি প্রশ্ন কার্ড। সতেরোটি কার্ডের অর্থ প্রতিটি 21 ডিগ্রির বেশি। মোকাবেলা করা অনেক সহজ।

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

?0123456789ABCDEF

এবং এই কার্ডগুলির প্রত্যেকের 21 ডিগ্রি আলাদা, তাই ক্যামেরাটি থেকে অন্যদিকে ঘোরানোর ?জন্য 0, আপনাকে ক্যামেরাটি 21 ডিগ্রি ঘোরানো উচিত, এবং 21 ডিগ্রি 2হতে 1হবে। (এটা না ঠিক 21, কিন্তু আমরা তা সহজ রাখার সুসম্পন্ন করব) এই গোপন, তাই থেকে যেতে Fকরার 3105 ডিগ্রী (5 পালাক্রমে, 5 * 21 = 105) হয়। এটি -২২২-এর চেয়ে বেশি দক্ষ, যেহেতু ক্যামেরাটিকে এতদূর যেতে হবে না।

আপনার প্রোগ্রাম বা ফাংশনটি অবশ্যই করতে হবে তা এখানে।

  1. ইনপুট হিসাবে একটি স্ট্রিং নিন। আমরা এই স্ট্রিংকে এস বলব । এটি সহজ রাখতে, আমরা বলব যে ইনপুটটি কেবল প্রিন্টযোগ্য এএসসিআইআই হবে। আমাদের উদাহরণস্বরূপ, ধরা যাক যে ইনপুটটি ছিলSTATUS

  2. প্রতিটি চরিত্রকে এর হেক্সাডেসিমাল উপস্থাপনায় রূপান্তর করুন। এটি রূপান্তরিত STATUSহবে 53 54 41 54 55 53

  3. প্রিন্ট আউট বা একটানা ডিগ্রি ঘুরিয়ে ফিরিয়ে ক্যামেরা প্রতিটি কার্ডের দিকে নির্দেশ করতে এবং "প্রশ্ন কার্ড" এ ফিরে আসতে হবে will আমাদের উদাহরণস্বরূপ, এটি হবে:

    6  * 21 = 126   (?-5)
    -2 * 21 = -42   (5-3)
    2  * 21 = 42    (3-5)
    -1 * 21 = -21   (5-4)
    0  * 21 = 0     (4-4)
    -3 * 21 = -63   (4-1)
    4  * 21 = 84    (1-5)
    -1 * 21 = -21   (5-4)
    1  * 21 = 21    (4-4)
    0  * 21 = 0     (5-5)
    0  * 21 = 0     (5-5)
    -2 * 21 = -42   (5-3)
    -4 * 21 = -84   (3-?)
    

    অথবা, অ্যারে বিন্যাসে:

    [126, -42, 42, -21, 0, -63, 84, -21, 21, 0, 0, -42, -84]
    

নোট করুন যে আপনাকে অবশ্যই সর্বদা সম্ভাব্য ঘূর্ণনের সবচেয়ে ছোটতম গ্রহণ করা উচিত। সুতরাং যদি ইনপুটটি ছিল NO, যা ছিল 4E 4F, আপনার আউটপুট করা উচিত:

5    * 21 = 105
-7   * 21 = -147
7    * 21 = 147
-6   * 21 = -126
1    * 21 = 21

বরং:

 5   * 21 = 105
 10  * 21 = 210
 -10 * 21 = -210
 11  * 21 = 231
 -16 * 21 = -336

এখানে আরও কয়েকটি কাজের উদাহরণ দেওয়া হল:

Input: CROPS?
ASCII: 43 52 4F 50 53 3F
Worked Example:

5  * 21 = 105
-1 * 21 = -21
2  * 21 = 42
-3 * 21 = -63
2  * 21 = 42
-6 * 21 = -126
7  * 21 = 147
-5 * 21 = -105
5  * 21 = 105
-2 * 21 = -42
0  * 21 = 0
-5  * 21 = -105
1 * 21 = 21

Result: [105 -21 42 -63 42 -126 147 -105 105 -42 0 -105 21]


Input: DDD
ASCII: 44 44 44
Worked Example:

5   * 21 = 105
0   * 21 = 0
0   * 21 = 0
0   * 21 = 0
0   * 21 = 0
0   * 21 = 0
-5  * 21 = -105

Result: [105, 0, 0, 0, 0, 0, -105]


Input: Hello world!
ASCII: 48 65 6c 6c 6f 20 77 6f 72 6c 64 21
Worked example:

5   * 21 = 105
4   * 21 = 84
-2  * 21 = -42
-1  * 21 = -21
1   * 21 = 21
6   * 21 = 126
-6  * 21 = -126
6   * 21 = 126
-6  * 21 = -126
-8  * 21 = -168
4   * 21 = 84
-2  * 21 = -42
7   * 21 = 147
0   * 21 = 0
-1  * 21 = -21
-8  * 21 = -168
-8  * 21 = -168
-5  * 21 = -105
4   * 21 = 84
6   * 21 = 126
-6  * 21 = -126
-2  * 21 = -42
-2  * 21 = -42
-1  * 21 = -21
-2  * 21 = -42

Result: [105 84 -42 -21 21 126 -126 126 -126 -168 84 -42 147 0 -21 -168 -168 -105 84 126 -126 -42 -42 -21 -42]

যেহেতু নাসা দক্ষতার উপর নিজেকে গর্বিত করে, আপনার লক্ষ্য সম্ভব সবচেয়ে সংক্ষিপ্ততম কোডটি লেখা। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য। এবার ওকে বাসায় নিয়ে এস!


পার্শ্ব দ্রষ্টব্য: এই পরীক্ষার কেসগুলি হাত দ্বারা তৈরি হয়েছিল এবং এটি এক ধরনের ব্যথা ছিল, তাই কিছুটা ছোটখাটো ভুল হতে পারে। কিছু ভুল মনে হয় দয়া করে আমাকে জানান। :)
ডিজেএমসিএমহেম

উত্তর:


5

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

s=>[...s.replace(/./g,c=>c.charCodeAt().toString(16)),10].map(n=>((24-p-~(p='0x'+n))%17-8)*21,p=-1)

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


এই কাজ করবে? s.replace(/./g,->[...s].map(
লূক

@ লুক নোপ, কারণ আমাদের প্রতিটি হেক্সাডেসিমাল ডিজিট আলাদা করতে হবে। ...s.replace(/./g,যেমন দেয় "4","8","6","5","6","c"..., যখন। ...[...s.map(দেবে"48","65","6c",...
ETH প্রোডাকশনগুলি

4

সি, 212 202 199 187 বাইট

3 ক্রিটিক্সিলিথসকে ধন্যবাদ 3 বাইট সংরক্ষিত!

i;f(a,b){i=abs(a-b);i=8>i?i:17-i;i=a<b&a>b-8?i:a<b&a<b-8?-i:b<a&b>a-8?-i:i;i*=21;}v;g(char*s){for(v=0;*s;s+=v++%2)printf("%d ",v?v%2?f(*s%16,s[1]?s[1]/16:-1):f(*s/16,*s%16):f(-1,*s/16));}

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


1
আমি মনে করি আপনি এর 8>i?i:17-iপরিবর্তে করতে পারবেন17-i>i?...
ক্রিটিক্সী লিথোস

@ ক্রিটিক্সিলিথস আপ, ধন্যবাদ
betseg

3

পাইথন, 187 178 বাইট

def g(x):w,z=map('?0123456789abcdef'.index,x);d=w-z;return min(d,d+17*(d<=0 or -1),key=abs)*21
def f(s):s=''.join(map('{:2x}'.format,s.encode()));return[*map(g,zip(s+'?','?'+s))]

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

for k in ['STATUS', 'NO', 'CROPS?', 'DDD', 'Hello world!']:
    print('Input:  {}\nOutput: {}'.format(k, f(k)))


1

জেলি , 21 19 বাইট

Ob⁴F-;;-I+8%17_8×21

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

কিভাবে?

Ob⁴F-;;-I+8%17_8×21 - Main link: string s        e.g. 'e.g.'
O                   - cast to ordinals            [101,     46,       103,      46]
 b                  - convert to base
  ⁴                 -     16                   [[6,   5], [2,  14], [6,   7], [2,  14]]
   F                - flatten                   [6,   5,   2,  14,   6,   7,   2,  14]
    -;              - -1 concatenate      [-1,   6,   5,   2,  14,   6,   7,   2,  14]
      ;-            - concatenate -1      [-1,   6,   5,   2,  14,   6,   7,   2,  14,  -1]
        I           - increments            [  7,  -1,  -3,  12,  -8,   1,  -5,  12, -15]
         +8         - add 8                 [ 15,   7,   5,  20,   0,   9,   3,  20,  -7]
           %17      - mod 17                [ 15,   7,   5,   3,   0,   9,   3,   3,  10]
              _8    - subtract 8            [  7,  -1,  -3,  -5,  -8,   1,  -5,  -5,   2]
                ×21 - multiply by 21        [147, -21, -63,-105,-168,  21,-105,-105,  42]

1

ওহম , 20 19 বাইট (সিপি 437), অ-প্রতিযোগী

সম্পাদনা : পুনরাবৃত্ত একক উপাদান মানচিত্রে মানচিত্রের ব্লক পরিবর্তন করে 1 বাইট সংরক্ষণ করা হয়েছে।

যদি আমার অন্তর্ভুক্ত ভেক্টরাইজেশন থাকে তবে সম্ভবত কিছুটা খাটো হবে।

`»x»}{»úΓXΓHδ▓_~21*

ব্যাখ্যা:

`»x»}{»úΓXΓHδ▓_~21*    Main wire, arguments: s

`»x                    Convert char codes of s to hex
   »}                  Split digit pairs
     {                 Flatten
      »ú               Convert digits back to base 10
        ΓXΓH           Append and prepend with -1
            δ          Get deltas between each element of array
             ▓         Map array over...
              _~21*      Negate, multiply by 21

0

পিএইচপি, 125 116 বাইট:

function m($i){static$a;$a+=$d=($i-$a+10)%17-9;echo$d*21,"
";}for(;$c=ord($argv[1][$i++]);m($c%16))m($c/16|0);m(-1);

ভাঙ্গন

function m($i)              // function to turn camera:
{
    static$a;                   // remember angle
    $a+=                        // add delta to angle
    $d=($i-$a+10)%17-9;         // delta: target=nibble value+1-current angle
                                // add 9, modulo 17, -9 -> shortest movement
    echo$d*21,"\n";                 // print delta * 21 and a linebreak
}
for(;$c=ord($argv[1][$i++]);// loop through input characters
    m($c%16))                   // 2. move to low nibble value
    m($c/16|0)                  // 1. move to high nibble value
;
m(-1);                      // move back to "?"

অবশ্যই, 21এটি বেশ ভুল এবং 14 অক্ষরের চেয়ে বেশি স্ট্রিংগুলির জন্য ব্যর্থ হতে পারে; তবে তারপরে ... 360/17চার বাইট দীর্ঘ হবে।

বিকল্প সমাধান হ'ল ক্যামেরায় একটি লেজার পয়েন্টার সংযুক্ত করা;
আমরা সমস্ত মুদ্রণযোগ্য আসকি চরগুলি এবং সেই সাথে প্রতিটি 3.75 ডিগ্রিতে একটি "প্রশ্ন" কার্ড ব্যবহার করতে পারি।

আর একটি বিকল্প: 16 টি কার্ড (22.5 ডিগ্রীতে) প্রতিটি 6 টি অক্ষর সহ ব্যবহার করুন:
কোনও ধরণের T9 প্রয়োগ করুন এবং আমরা উচ্চ স্তনবৃন্তকে বাদ দিতে পারি। ;)

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