পার্সেল পার্স করুন


24

মার্ক মাই মেল চ্যালেঞ্জটিতে আপনার সহায়তার জন্য ধন্যবাদ , পিপিসিজি-পোস্ট সফলভাবে উত্পন্ন বারকোডগুলির সাথে এর সমস্ত পার্সেল স্ট্যাম্প করেছে!

এখন, তাদের ডিকোড করার সময় এসেছে।

এই চ্যালেঞ্জে আপনার প্রোগ্রামটি, মার্ক মাই মেল চ্যালেঞ্জ থেকে উত্পন্ন একটি বারকোড দেওয়া হয়েছে , এটি ডিকোড করবে এবং এনকোডড পূর্ণসংখ্যাটি ফিরিয়ে দেবে।

তবে নজর রাখুন! বারকোড উল্টো দিকে হতে পারে ...


4-রাষ্ট্রের বারকোড

আপনি যদি এনকোডিং চ্যালেঞ্জটি মিস করেন তবে আপনার জানা দরকার যে আমরা কী ধরণের বারকোডের কথা বলছি। একটি 4-রাষ্ট্রীয় বারকোড চারটি সম্ভাব্য রাজ্যের বারগুলির একটি সারি যা প্রতিটি বেস -4 পূর্ণসংখ্যার প্রতিনিধিত্ব করে:

            |       |
Bar:    |   |   |   |
                |   |

Digit:  0   1   2   3

এএসসিআইআই-তে সরবরাহিত, বারকোডগুলি |বারের অংশ উপস্থাপনের জন্য পাইপ ( ) অক্ষর এবং খালি অংশটি উপস্থাপনের জন্য একটি স্থান ( ) ব্যবহার করে পাঠ্যটির তিনটি লাইন গ্রহণ করবে । প্রতিটি বারের মধ্যে একটি একক স্থান থাকবে। একটি উদাহরণ বারকোড এর মতো দেখতে পারে:

| | | | | | | | | |
| | | | | | | | | | | | | | | | |
    | | | | | | | |

বারকোডটিকে পূর্বে পূর্ণসংখ্যার এনকোডে রূপান্তর করতে, প্রতিটি বারটিকে তার সংশ্লিষ্ট বেস -4 অঙ্কে মানচিত্র করুন, এগুলি সংক্ষেপণ করুন এবং এটি দশমিক রূপান্তর করুন।

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


চ্যালেঞ্জ

আপনার কাজটি হল একটি ASCII 4-রাষ্ট্রীয় বারকোড দেওয়া, এটি বিশ্লেষণ করুন এবং এটি পূর্ণ এনকোড পূর্ণসংখ্যাটি ফিরিয়ে দিন - মূলত মার্ক মাই মেইলের বিপরীত ।

তবে জিনিসগুলি মশালার জন্য, একটি ধরা আছে - বারকোডটি উল্টো দিকে দেওয়া যেতে পারে। বাস্তব বিশ্বে যেমন, এটি শুরু / স্টপ অনুক্রমটি ব্যবহার করে সঠিক ওরিয়েন্টেশন নির্ধারণ করতে বারকোড পাঠক (আপনার প্রোগ্রাম) এ রেখে দেওয়া হবে

উদাহরণ:

নিম্নলিখিত বারকোড দেওয়া:

    | | | |
| | | | | | | | | | |
  | | | | |

আমরা পরিষ্কারভাবে দেখতে পাচ্ছি যে প্রথম এবং শেষ জোড়াটি অঙ্কগুলির হয় 0, 2এবং না 1, 0। এর অর্থ হ'ল বারকোডটি উল্টো দিকে রয়েছে - সুতরাং সঠিক ওরিয়েন্টেশন অর্জনের জন্য আমাদের অবশ্যই এটি 180 ডিগ্রি (কেবলমাত্র প্রতিটি বারে ফ্লিপ করবেন না) দ্বারা ঘোরানো উচিত :

| | | | |  
| | | | | | | | | | |
    | | | |    

এখন, আমরা ডিকোডিং শুরু করতে পারি। আমরা প্রতিটি বারটিকে এর সাথে সম্পর্কিত বেস -4 অঙ্কে ম্যাপ করি, প্রারম্ভ / স্টপ সিকোয়েন্সগুলি উপেক্ষা করে কারণ এগুলি ডেটা এনকোড করে না।

| | | | |  
| | | | | | | | | | |
    | | | |    

- - 2 1 0 3 0 2 3 - -

আমরা এটিকে বেস -4 পূর্ণসংখ্যার সাথে সংযুক্ত করি 2103023, তারপরে এটি 9419চূড়ান্ত ফলাফলের জন্য দশমিক উপস্থাপনায় রূপান্তর করি ।


বিধি

  • ইনপুটটি সর্বদা একটি বৈধ, 4-রাষ্ট্রীয় বারকোড হবে, যা বর্ণিত শুরু / স্টপ অনুক্রমের সাথে উপরে বর্ণিত হিসাবে ASCII তে রেন্ডার করা হয়েছে।
    • আপনি ট্রেলিং স্পেস, বা স্ট্রিপড লাইনগুলির পাশাপাশি একটি পিছনে থাকা নতুন লাইনের জন্য অনুরোধ করতে পারেন - যে কোনও ফর্ম্যাটটি আপনার গল্ফিংয়ের জন্য উপযুক্ত।
    • এটি সঠিক দিকনির্দেশনায় থাকতে পারে বা নাও থাকতে পারে - আপনার প্রোগ্রামটি অবশ্যই স্টার্ট / স্টপ ক্রমটি ব্যবহার করে এটি উল্টে পড়তে হবে কিনা তা নির্ধারণ করতে হবে।
    • এটি বেস -4 পূর্ণসংখ্যায় শীর্ষস্থানীয় শূন্য-অঙ্কগুলি এনকোড করবে না।
  • আপনি ইনপুটটিকে লাইনগুলির তালিকা হিসাবে বা নিউলাইনগুলির সাথে স্ট্রিং হিসাবে নিতে পারেন।
  • বারকোড দ্বারা এনকোড করা ডেটা উপস্থাপন করে আউটপুটটি আপনার ভাষার স্ট্যান্ডার্ড পূর্ণসংখ্য বেসের একটি পূর্ণসংখ্যা হওয়া উচিত।
  • যেহেতু ডাকটিকিট স্ট্যাম্পগুলি ছোট এবং সেগুলিতে খুব সামান্য কোড ফিট করতে পারে তাই আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়া দরকার: এটি একটি - যাতে সংক্ষিপ্ততম প্রোগ্রাম (বাইটে) জেতে!

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

| | | | | | | | | | |
  | | |

= 4096 (উল্টানো)

      | | | | | | | |
| | | | | | | | | | | | | | | |
  | | | | | | | | | |

= 7313145 (উল্টানো)

    | | | |
| | | | | | | | | | |
  | | | | |

= 9419 (উল্টানো)

| | | | | |   
| | | | | | | | |
    | | | |     

= 990 (উল্টানো হয়নি)

| | | | |   
| | | | | | | | | | |
    | | |       

= 12345 (উল্টানো হয়নি)


-1 দুটি পোস্টে শিরোনাম একই বিন্যাস নয়। ("পি দ্য পি" বনাম "এম মাই এম", '' 'বা' আমার 'বেছে নিন: পি)
R6

1
"লাইনের তালিকা" কোন হতে চান [String], [{#Char}], [{Char}], [[Char]]? দেওয়া যে Stringসমতুল্য হয়{#Char}
Οurous

3
@ ওরোস কি স্বরলিপি? আমি উত্তরটি হ্যাঁ হ্যাঁ দৃ "়ভাবে সন্দেহ করি, কারণ ভাষার মধ্যে ডেটা ধরণগুলি খুব আলাদা, তাই কোডিং চ্যালেঞ্জগুলি সাধারণত "আপনার ভাষার সমতুল্য যাই হোক না কেন" গ্রহণ করে তবে আপনি কী উপস্থাপনের চেষ্টা করছেন সে সম্পর্কে আমার কোনও ধারণা নেই।
IMSoP

1
এরপর কি? ইমেলটি প্রেরণ করবেন? টেলিগ্রাম প্রেরণ করবেন? পোস্ট প্রক্রিয়া?
সান্চাইজস

1
@ আমাদের হ্যাঁ, আইএমএসওপি বর্ণিত হিসাবে ডেটা টাইপ নমনীয়।
ফ্লিপট্যাক

উত্তর:



5

হুশ , 16 বাইট

ḋṁẊ=hhttĊ2T§▼↔m↔

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

ইনপুট হ'ল লাইনের একটি তালিকা (টিআইও লিঙ্কটি স্বচ্ছতার জন্য একাধিক রেখা ব্যবহার করে)। রেখাগুলির সমান দৈর্ঘ্য থাকতে হবে এবং অতিরিক্ত ট্রেলিং স্পেস থাকা উচিত নয়।

ব্যাখ্যা

ḋṁẊ=hhttĊ2T§▼↔m↔  Input is a list of strings x.
           §▼     Lexicographic minimum of
             ↔    x reversed and
              m↔  x with each line reversed.
          T       Transpose. Now we have a list of columns.
        Ċ2        Get every second column, removing the blank ones.
    hhtt          Remove first 2 and last 2 (the orientation markers).
 ṁ                Map and concatenate
  Ẋ=              equality of adjacent pairs.
                  This turns a column like "|| " into [1,0], and these pairs are concatenated.
ḋ                 Convert from binary to integer.




2

রেটিনা , 71 বাইট

(.).
$1
sO$^`^\|.*|.

^..|..¶.*¶..|..$
¶
\|
 |
+`\| 
 ||||
.*¶$
$&$&
\|

এটি অনলাইন চেষ্টা করুন! লিঙ্কটিতে ছোট পরীক্ষার কেস অন্তর্ভুক্ত। মাঝের লাইনের দৈর্ঘ্যে স্পেস প্যাড করার জন্য প্রথম এবং শেষ লাইনগুলি প্রয়োজন। ব্যাখ্যা:

(.).
$1

অপ্রয়োজনীয় স্পেস মুছুন।

sO$^`^\|.*|.

কোডের অক্ষরগুলি বিপরীত করুন, তবে বার কোডটি যদি একটি দিয়ে শুরু হয় |, তবে পুরো কোডটি নির্বাচন করুন, অন্যথায় এটি অক্ষরে ভাগ করুন। তারপরে, তাদের বিপরীত করুন। এটি কোডটি ফ্লিপ করে যদি এটি একটি দিয়ে শুরু হয় 0

^..|..¶.*¶..|..$
¶

প্রারম্ভ / স্টপ ক্রম এবং মাঝের সারিটি মুছুন (যা আমাদের কোনও কাজে আসে না)।

\|
 |
+`\| 
 ||||

স্পেস এবং |গুলি বেস 4 থেকে অ্যানারিতে রূপান্তর করুন ।

.*¶$
$&$&

শেষ লাইন দ্বিগুণ।

\|

দশমিক রূপান্তর।


2

জাভা (ওপেনজেডিকে 8) , 181 160 বাইট

জাভা সমাধানের জন্য খুব নড়বড়ে নয়, আমি নিশ্চিত যে আমি করতে পারি এমন অপ্টিমেশন রয়েছে তবে আমি ইতিমধ্যে খুব দীর্ঘকাল ধরে এটিকে ঘুরে দেখছি।

সাবস্ট্রিং ব্যবহার না করে লুপটি সংক্ষিপ্ত করে কয়েকটি বাইট কেটে ফেলুন।

Golfed

c->{String r="";Integer i,j,l=c[0].length;for(i=4;i<l-4;i+=2){j=c[0][0]>32?i:l-1-i;r+=c[0][j]%8/4*(j==i?1:2)+c[2][j]%8/4*(j==i?2:1)+"";}return l.parseInt(r,4);}

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

Ungolfed

String r = "";
Integer i, j, l = c[0].length;
for(i=4; i<l-4; i+=2){
    j = c[0][0]>32 ? i : l-1-i;
    r += c[0][j]%8/4 * (j==i?1:2) + c[2][j]%8/4 * (j==i?2:1) + "";
}
return l.parseInt(r, 4);

কেবল আপনার কোড চেষ্টা করেছেন তবে "| | |" উদাহরণের বিপরীত বারকোডের সাহায্যে "| | | | | | | | | | |)" এবং আমাকে 1024 দিন, ঠিক আছে আমি এটিকে ফর্ম্যাট করতে পারি না, উদাহরণের মধ্যে একটি তবে আপনি যে উদাহরণটি দিয়েছেন তা চেষ্টা করুন তবে এটির উল্টোটি নাও বোধহয় আমি খারাপ ইনপুট করেছি :)
জাভা গঞ্জার

@ জাভাগনজালেজ অরিবাবাস আমি প্রথম উদাহরণটি চেষ্টা করেছি (ফ্লিপড না করে) এবং এটি দুর্দান্ত কাজ করছে বলে মনে হচ্ছে। আপনি কি ইনপুটটির প্রথম লাইনে খুব কম জায়গা রেখে দিতে পারেন?
লুক স্টিভেনস

সম্ভবত সমস্যাটি হ'ল দুর্দান্ত উত্তর :)
জাভা গঞ্জার

সুপারিশ l+~iপরিবর্তেl-1-i
ceilingcat

2

জাভা 8 , 208 166 157 151 বাইট

এটি চেষ্টা করে, সম্ভবত আরও ভাল হতে পারে, অপ্রয়োজনীয় চেকের কারণে 42 টি হ্রাস করা যেতে পারে, -9 ভেরিয়েবলগুলি অপসারণ করা যায়, -6 লুক স্টিভেন্সকে ধন্যবাদ

ইনপুট হ'ল ক char[][3]

(a)->{int i=2,c,s=0;c=(a[0][0]>32)?1:-1;for(;i<a.length-2;i++){s+=((a[i][1-c]>32?1:0)+(a[i][1+c]>32?2:0))*Math.pow(4,c==1?a.length-i-3:i-2);}return s;}

ungolfed:

int b(char[][] a) {
    int i=2,c,s=0;                      //i for looping, c to check if it's reversed, s is the sum, n the number
    c=(a[0][0]>32)?1:-1; //Check if must be reversed

    for(;i<a.length-2;i++){         //Looping elements

            //(Checking value for 1 + Checking value for 2) * Power, if reversed increasing, else decreasing
        s+=((a[i][1-c]>32?1:0)+(a[i][1+c]>32?2:0))*Math.pow(4,c==1?a.length-i-3:i-2);   
    }
    return s;
}

1
আপনি স্ট্রিংয়ের পরিবর্তে অক্ষরের একটি অ্যারে ব্যবহার করেন, আপনি | পরীক্ষা করতে পারেন == "" | "এর পরিবর্তে> 32 ব্যবহার করে যা প্রতিটি ব্যবহারের জন্য 2 বাইট সংরক্ষণ করে (সামগ্রিকভাবে 6)। ল্যাম্বডাকে আরও দুটি বাইটের জন্য ঘোষণার সময় আপনি কাছাকাছি বন্ধনীগুলি সরিয়ে ফেলতে পারেন।
লুক স্টিভেন্স


1

পিপ , 46 43 42 বাইট

IsQ@@gg:RV*RVgY^gR'|1(J@UW2*y@2+@y)TM2FB:4

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

ব্যাখ্যা

প্রথমে কিছু প্রস্তুতিমূলক কাজ:

IsQ@@gg:RV*RVg Y^gR'|1

                        g is cmdline args; s is space (implicit)
IsQ                     If space equals
   @@g                  the first character of the first line, then:
           RVg           Reverse the order of the rows in g
        RV*              then reverse the characters in each row
      g:                 and assign the result back to g
                 gR'|1  In g, replace pipe character with 1
                ^       Split each row into a list of characters
               Y        Yank the result into y

এখন দেখুন যে আমরা যদি মাঝারি সারিটিকে উপেক্ষা করে |1 এবং 0 হিসাবে বিবেচনা করি তবে প্রতিটি বারটি কেবল একটি 2-বিট বাইনারি সংখ্যা:

(J@UW2*y@2+@y)TM2FB:4

       y@2             Third row
     2*                Multiply by 2, turning 1 into 2 and space into 0
           @y          First row
          +            Add
   UW                  Unweave: creates a list of two lists, the first containing all
                       even-indexed elements (in our case, the actual data), the second
                       containing all odd-indexed elements (the space separators)
  @                    First item of that list
 J                     Join the list of digits into a string
(            )TM2      Trim 2 characters from the beginning and end
                 FB:4  Convert from base 4 (: makes the precedence lower than TM)
                       Autoprint

1

হুশ , 39 38 বাইট

B4ththmȯ%4+3%5f≠192Ḟz+zṀ·*cN?↔m↔(='|←←

স্ট্রিংগুলির তালিকা হিসাবে ইনপুট নেয়: এটি অনলাইনে চেষ্টা করুন বা চেষ্টা করুন পরীক্ষার স্যুটটি চেষ্টা করুন!

ব্যাখ্যা

B4ththm(%4+3%5)f≠192Ḟz+zṀ·*cN?↔m↔(='|←←)
                             ?   (='|←←)  -- if the very first character == '|'
                              ↔           --   reverse the lines
                                          -- else
                               m↔         --   reverse each line
                       zṀ·*cN             -- zip the lines with [1,2,3..] under..
                        Ṁ·*c              --   convert each character to its codepoint and multiply by one of [1,2,3]
                    Ḟz+                   -- reduce the lines under zipWith(+) (this sums the columns)

               f≠192                      -- only keep elements ≠ 192 (gets rid of the separating lines)

-- for the example from the challenge we would now have:
--   [652,376,468,652,376,744,376,468,744,652,376]

      m(      )                           -- map the following function
        %4+3%5                            --   λx . ((x % 5) + 3) % 4
-- this gives us: [1,0,2,1,0,3,0,2,3,1,0]
    th                                    -- remove first & last element
  th                                      -- remove first & last element
B4                                        -- interpret as base4 number


0

অক্টাভা , 80 75 68 বাইট

@(b)bi2de({rot90(t=~~(b-32)([3,1],[1:2:end]),2),t}{2-t(2)}(5:end-4))

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

মজার ব্যাপার হলো, bi2deডান বদলে বাম ডিফল্ট MSB কয়েকটি মাথাব্যাথা নেতৃস্থানীয় যখন আমি এই করেছি ... আমার মনে হয় আমি এটা ইন্ডেক্স আগে অ্যারের আলোকসম্পাতের অনুকূল উপায় আছে উচিত, কিন্তু আছে অত্যন্ত এটা করতে অনেক উপায় ( পারেন প্রথম ইন্ডেক্স, বা সঙ্গে flipud, fliplr, rot90, '(TRANSPOSE), চূড়ান্ত ইন্ডেক্স ...)। ফাঁকা জায়গা এবং |গুলি দিয়ে একটি আয়তক্ষেত্রাকার অ্যারে নেয় (সুতরাং, ফাঁকা স্থানগুলি প্রয়োজনীয়)

@(b)                    % Define anonymous function taking input b

t=                      % Inline-define t,
~~(b-32)                % which is the input, converted to 1's and 0's,
([3 1],[1:2:end])       % but only keep the relevant rows (1 and 3 flipped vertically) and columns (only odd) 

{rot90(t,2),t}          % Flip 180 degrees
{2-t(2)                 % depending on whether the second element of t is 1 or 0.}

(5:end-4)               % Flatten array, discarding control bits
bi2de( ... )            % and convert from binary to decimal,

0

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

আমি অভিজ্ঞ গল্ফার নই - আমি নিশ্চিত এটির উন্নতি হতে পারে তবে আমি এই চ্যালেঞ্জটি পছন্দ করেছিলাম! আমি সবসময় এই চিহ্নগুলি সম্পর্কে ভাবছিলাম।

ফাংশন fপ্রয়োজনীয় ট্রেলিং স্পেস সহ স্ট্রিংগুলির একটি তালিকা নেয়। স্পষ্টতার জন্য নীচের কোডটিতে নিউলাইনগুলি যুক্ত হয়েছে (বাইট গণনায় অন্তর্ভুক্ত নয়)।

f=t=>((o=[[...t[0]],[...t[2]]])[0][0]=='|'?o:(z=a=>a.reverse())(o.map(z)))
.map((a,r)=>a.filter((_,i)=>~i%2).map(e=>(1+r)*(e=='|')).slice(2,-2))
.reduce((a,b)=>a+parseInt(b.join``,4),0)

ব্যবহার

t=['                     ','| | | | | | | | | | |','  |             |   |']
console.log(f(t)) // 4096

ব্যাখ্যা সহ বর্ণহীন সংস্করণ

// take list of strings, t, as input:
f = t => ( 

  // create output variable o, discard middle row, turn other rows into lists:
  ( o = [ [...t[0]], [...t[2]] ] )

  // if top-left position isn't a pipe, rotate 180 degrees.
  // Alias [].reverse to save 3 bytes :D
  [0][0] == '|' ? o : ( z = a=> a.reverse() )( o.map(z) )

).map( (a,r) => 

  // remove even-numbered positions (non-encoding spaces):
  a.filter( (_,i) => ~i%2 )

  // convert non-pipes into zeros, and pipes into 1 or 2;
  // top row becomes the base4 1-component, bottom row is 2:
  .map( e => (1+r) * (e=='|') ).slice(2,-2)

// convert rows to base4 component strings, then decimal, then sum them:
).reduce( (a,b) => a + parseInt(b.join``,4),0)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.