0xBEEF কোথায়?


92

এই চ্যালেঞ্জটি 1984 সাল থেকে এই ওয়েেন্ডির বাণিজ্যিক দ্বারা অনুপ্রাণিত হয়েছিল ।

গরুর মাংসটা কই?

টিএস রজার্সের উদাহরণ

আপনার কাজটি বাইনারি বানে একটি হেক্সাডেসিমাল 0xBEEF সন্ধান করা।

'গরুর মাংস' নিম্নলিখিত প্যাটার্ন নিয়ে গঠিত:

1 0 1 1  (0xB)
1 1 1 0  (0xE)
1 1 1 0  (0xE)
1 1 1 1  (0xF)

এবং 'বান'-এ একটি 12x12 বাইনারি ম্যাট্রিক্স রয়েছে, যেমন:

1 1 1 0 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 0 1
1 0 0 1 0 0 1 0 0 1 0 0
1 0 0 1 0 1 1 0 0 1 1 1
1 1 1 1 1 1 0 0 0 0 1 0
1 1 0 1 1 1 0 0 0 0 0 1
1 0 0 1 1 1 1 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1 1 1
1 0 0 0 0 1 0 1 0 1 1 1
1 1 0 0 1 1 0 0 0 0 1 1

ইনপুট

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

এই ক্ষেত্রে:

  • একটি একক বাইনারি স্ট্রিং, সারিগুলির মধ্যে বিভাজক সহ বা ছাড়াই:

    "111001111110 110100100000..."

    বা:

    "111001111110110100100000..."

  • বাইনারি স্ট্রিংগুলির একটি অ্যারে:

    ["111001111110", "110100100000", ...]

  • সংখ্যার একটি অ্যারে (প্রতিটি সংখ্যা একবারে বাইনারি এবং বাম-প্যাডে জিরোতে রূপান্তরিত করে এমন একটি সারি বর্ণনা করে):

    [3710, 3360, ...]

আউটপুট

বান এর উপরের বাম কোণে (X, Y)'গরুর মাংস' এর স্থানাঙ্ক (0, 0)

বিকল্পভাবে, আপনি 1-ভিত্তিক স্থানাঙ্ক ব্যবহার করতে পারেন (তবে উভয় ফর্ম্যাটের মিশ্রণ নয়, যেমন এক্স-এর জন্য 0-ভিত্তিক এবং ওয়াইয়ের জন্য 1-ভিত্তিক)।

উপরের উদাহরণের জন্য, প্রত্যাশিত উত্তরটি (3, 4)(0-ভিত্তিক) বা (4, 5)(1-ভিত্তিক):

   00 01 02 03 04 05 06 07 08 09 10 11 
00  1  1  1  0  0  1  1  1  1  1  1  0
01  1  1  0  1  0  0  1  0  0  0  0  0
02  0  1  0  0  0  1  1  1  1  1  0  1
03  1  0  0  1  0  0  1  0  0  1  0  0
04  1  0  0 [1  0  1  1] 0  0  1  1  1
05  1  1  1 [1  1  1  0] 0  0  0  1  0
06  1  1  0 [1  1  1  0] 0  0  0  0  1
07  1  0  0 [1  1  1  1] 0  0  0  0  1
08  1  0  0  1  1  1  0  1  1  1  1  1
09  1  1  1  1  1  0  0  1  1  1  1  1
10  1  0  0  0  0  1  0  1  0  1  1  1
11  1  1  0  0  1  1  0  0  0  0  1  1

আবার যে কোনও যুক্তিসঙ্গত ফর্ম্যাটটি আপনার উত্তরে নির্দিষ্ট করা অবধি কাজ করবে। আপনি যদি 0-ভিত্তিক বা 1-ভিত্তিক স্থানাঙ্ক ব্যবহার করছেন তা দয়া করে উল্লেখ করুন।

বিধি

  • আপনি নিরাপদে ধরে নিতে পারেন যে বানটিতে সর্বদা ঠিক একটি 'গো-মাংস' থাকে। আপনার কোডে একাধিক গরুর মাংস বা মোটেও কোনও গো-মাংসের ক্ষেত্রে সমর্থন করার প্রয়োজন নেই।
  • গরুর মাংসের প্যাটার্নটি বর্ণিত হিসাবে সর্বদা উপস্থিত হবে। এটি কোনওভাবেই কখনই আবর্তিত বা মিরর করা হবে না।
  • এটি কোড-গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

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

নিম্নলিখিত পরীক্ষার ক্ষেত্রে ম্যাট্রিক্সের প্রতিটি সারি তার দশমিক প্রতিনিধিত্ব হিসাবে প্রকাশ করা হয়।

Input : [ 3710, 3360, 1149, 2340, 2407, 4034, 3521, 2529, 2527, 3999, 2135, 3267 ]
Output: [ 3, 4 ]

Input : [ 1222, 3107, 1508, 3997, 1906, 379, 2874, 2926, 1480, 1487, 3565, 633 ]
Output: [ 3, 7 ]

Input : [ 2796, 206, 148, 763, 429, 1274, 2170, 2495, 42, 1646, 363, 1145 ]
Output: [ 6, 4 ]

Input : [ 3486, 3502, 1882, 1886, 2003, 1442, 2383, 2808, 1416, 1923, 2613, 519 ]
Output: [ 1, 1 ]

Input : [ 3661, 2382, 2208, 1583, 1865, 3969, 2864, 3074, 475, 2382, 1838, 127 ]
Output: [ 8, 8 ]

Input : [ 361, 1275, 3304, 2878, 3733, 3833, 3971, 3405, 2886, 448, 3101, 22 ]
Output: [ 0, 3 ]

Input : [ 3674, 2852, 1571, 3582, 1402, 3331, 1741, 2678, 2076, 2685, 734, 261 ]
Output: [ 7, 7 ]

1-ভিত্তিক সূচকগুলি ব্যবহারের অনুমতি রয়েছে (উপরের বামদিকে কোথায় (1,1))?
ডুরকনব

@ ডুরকনব হ্যাঁ, যদি এটি এক্স এবং ওয়াই উভয়ের জন্য একই বিন্যাস হয় (সেই অনুযায়ী প্রশ্ন আপডেট করা হয়)।
আর্নৌল্ড

35
বোনাস পয়েন্টগুলি যদি আমরা 0xBEEF 0xDEAD হয় তবে আউটপুটও হয়? : পি
টাকসক্রাফ্টিং

10
এই চ্যালেঞ্জটি সত্যই এলোমেলো এবং দারুণ মূর্খ। তবে এটি আসলে এখনও একটি দুর্দান্ত চ্যালেঞ্জ। +1
ডিজেএমসিএমহেম

আমি আউটপুট যাবে y, x(অর্থাত অর্ডার বিপরীত)?
লুইস মেন্ডো

উত্তর:


30

জেলি , 20 17 16 বাইট

ṡ€4ḄZw€“¿ÇÇБĖUṀ

ইনপুটটি বুলিয়ান ম্যাট্রিক্সের আকারে, আউটপুটটি 1-ভিত্তিক সূচক জুটি (ওয়াই, এক্স)

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

ṡ€4ḄZw€“¿ÇÇБĖUṀ  Main link. Argument: M (2D array of Booleans)

ṡ€4               Split each row into 9 chunks of length 4.
   Ḅ              Convert these chunks from base 2 to integer.
    Z             Zip/transpose. This places the columns of generated integers
                  into the rows of the matrix to comb through them.
       “¿ÇÇБ     Push the array of code points (in Jelly's code page) of these
                  characters, i.e., 0xB, 0xE, 0xE, and 0xF.
     w€           Window-index each; in each row, find the index of the contiguous
                  subarray [0xB, 0xE, 0xE, 0xF] (0 if not found).
                  Since the matrix contains on one BEEF, this will yield an array
                  of zeroes, with a single non-zero Y at index X.
             Ė    Enumerate; prefix each integer with its index.
              U   Upend; reverse the pairs to brings the zeroes to the beginning.
               Ṁ  Take the maximum. This yields the only element with positive
                  first coordinate, i.e., the pair [Y, X].

14
আমি এটি পাই না ... আপনি এমন কিছু কোড কীভাবে করতে পারেন যা মানুষের পাঠযোগ্য নয় ??
L3n

12
জেলি পড়ার চেয়ে লেখার চেয়ে অনেক সহজ। : পি
ডেনিস

45
@ l3n আপনি বোঝাচ্ছেন যে ডেনিস একজন মানুষ। যদিও এটি সম্ভাবনার মতো, নিয়মিত ধরণের কৌশলগুলি অনুসরণ করে, আমি অন্যটিকে ছাড় দেব না ... বলি, আরও সাইবারপাঙ্ক বিকল্প ;-)
ফ্রান্সেস্কো

1
আপনি আউটপুট করতে পারেন (x, y)ṡ4Z€Ḅw€“Ье‘ĖUṀ
জোনাথন অ্যালান

2
@ জোনাথান অ্যালান নিস ṡ€4ḄZjw“¿ÇÇБ’d240-ভিত্তিক সূচকের সাথেও রয়েছে তবে দুর্ভাগ্যক্রমে এটি একটি বাইট দীর্ঘতর longer
ডেনিস

40

vim, 126 80 77 76

/\v1011\_.{9}(1110\_.{9}){2}1111<cr>:exe'norm Go'.join(getpos('.'))<cr>xxdawhPXXd{

ফর্ম ইনপুট আশা করে

111001111110
110100100000
010001111101
100100100100
100101100111
111111000010
110111000001
100111100001
100111011111
111110011111
100001010111
110011000011

এবং ফলাফলগুলি (1-ভিত্তিক সূচকগুলি সহ) হিসাবে

4 5
/                      regex search for...
\v                     enable "very magic" mode (less escaping)
1011\_.{9}             find the first line ("B"), followed by 8 chars + 1 \n
(1110\_.{9}){2}        find the second and third lines ("EE")
1111<cr>               find the fourth line ("F")
:exe'norm Go'.         insert at the beginning of the file...
join(getpos('.'))<cr>  the current position of the cursor
xxdawhPXX              do some finagling to put the numbers in the right order
d{                     delete the input

জের্গ হ্যালসারম্যানকে অপ্রত্যক্ষভাবে 46 বাইট বাঁচানোর জন্য ধন্যবাদ আমার রিজেক্সটি সুপার বোবা ছিল, এবং আরও 3 বাইটের জন্য ডিজেএমসিমেহেমকে


1
একটি দম্পতি টিপস: 1) এর Ypচেয়ে ভাল yyp(যদিও আমি জানি আপনি আপত্তি করছেন Y: পি) 2) এতে থাকা সাদা স্থান exec 'norm Go'অপ্রয়োজনীয়। এবং 3) এর kd{চেয়ে কম হয় kdgg। (যদিও এটি পরীক্ষা করা হয়নি)
ডিজেএমসিএমহেম

1
@ ডিজেএমসিএমহেম ওহ, আমি সবসময়ই ভুলে Yযাই কারণ আমার ভিআইএমআরসিতে আমার এটি পুনঃসুত্থিত। : পি আসলে, ন্যায়বিচারের kdggসমান d{, যা আশ্চর্যজনকভাবে বর্তমান লাইনটি মুছে দেয় না।
ডুরকনব

ওহ আকর্ষণীয়। কিভাবে সুবিধাজনক!
ডিজেএমসিএমহেম

আমি সর্বদা বিভ্রান্ত হই যখন এমন জিনিসগুলি যখন {চরিত্রের আন্দোলনে পরিণত হয়; তাই {d''পুরো লাইনগুলি মোছার পরিবর্তে আমি এর মতো কিছু করেছি ।
নিল

1
আপনি বাফারে মুদ্রণের পরিবর্তে প্রতিধ্বনি ব্যবহার করতে পারেন, আমি মনে করি না যে চ্যালেঞ্জের মধ্যে এটি প্রতিরোধ করার মতো কিছু আছে। এটি প্রায় 10 বাইট ছাঁটাই করা হবে।
খ্রিস্টান রোনডাউ

22

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

s=>[(i=s.search(/1011.{9}(1110.{9}){2}1111/))%13,i/13|0]

12 12-সংখ্যার বাইনারি স্ট্রিংগুলির 155-অক্ষরের স্পেস-সীমাবদ্ধ স্ট্রিং হিসাবে ইনপুট নেয়, শূন্য-সূচকযুক্ত মানগুলি দেয়। সম্পাদনা: @ জার্গহালসারম্যানকে 3 বাইট সংরক্ষণ করা হয়েছে। @ বুদ্ধিমানের জন্য 4 টি বাইট সংরক্ষণ করা হয়েছে


আপনি সম্ভবত এর s.search(r)পরিবর্তে ব্যবহার করতে পারেন r.exec(s).index?
ইটিএইচ প্রডাকশনগুলি

1
@ ইথ প্রডাকশন অবশ্যই আমি পারতাম। আমি নিশ্চয়ই গতকাল অর্ধেক ঘুমিয়ে পড়েছি ...
নীল

আমার জন্য, nodejs ব্যবহার চালানো, এটা কাজ করছে না যদি না আমি পরিবর্তন s=>[করতে (s,i)=>[, কারণ আপনি আমি কোথাও উল্লেখ করা প্রয়োজন: /
Mijago

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

আমি মনে করি এটি 000010110010110011100011100011100011100011110000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
টিইমিয়ার

14

সি, 146 177 173 163 বাইট

কোড ঠিক করার জন্য নামকনটকে ধন্যবাদ (নীচের তিনটি সারি সরিয়ে নেওয়া)।

প্রতিস্থাপন 4 বাইট সংরক্ষণ করা হচ্ছে >>=1সঙ্গে /=24 স্থানে। লেট করে আরো 10 বাইট সংরক্ষণ করা হচ্ছে xএবং yবিশ্বব্যাপী এবং ডিফল্ট হতে intধন্যবাদ এমডি XF

#define T(i,n)(A[y+i]&15)==n
x,y;b(int A[12]){for(x=9;x--;){for(y=0;++y<9;A[y]/=2)if(T(0,11)&&T(1,14)&&T(2,14)&&T(3,15))return(x<<4)+y;A[9]/=2;A[10]/=2;A[11]/=2;}}

Ungolfed:

int b(int A[12]) {
 for (int x=8; x>=0; --x) {
  for (int y=0; y<9; ++y) {
   if ((A[y]&15)==11 && (A[y+1]&15)==14 && (A[y+2]&15)==14 && (A[y+3]&15)==15) { 
    return (x<<4) + y; 
   }
   A[y]/=2;
  }
  A[9]/=2; A[10]/=2; A[11]/=2;
 }
}

বাইটের উচ্চ এবং নিম্ন স্তনবৃন্তগুলিতে x, y (0-ভিত্তিক) প্রদান করে।

ব্যবহার:

int temp=b(array_to_solve);
int x=temp>>4;
int y=temp&15;
printf("%d %d\n",x,y);

1
আপনি আপনার সংজ্ঞায়িত করতে #define T(i,n)if((A[y+i]&15)==n)এবং if বিভাগটি T(0,11)T(1,14)T(2,14)T(3,15)return6 বাইট সংরক্ষণ করতে পারেন। এছাড়াও ফাংশনের স্বাক্ষরটিকে int b(int*A)আরও 4 টি বাইট সংরক্ষণে পরিবর্তন করুন ।
লিন্ড অ্যাসাসিনো


9

এমএটিএল , 22 21 বাইট

Eq[ODDH]B~EqZ+16=&fhq

ইনপুট একটি বাইনারি ম্যাট্রিক্স, ;সারি বিভাজক হিসাবে। আউটপুট বিপরীত ক্রম 1-ভিত্তি করে: Y X

এটি অনলাইন চেষ্টা করুন! বা দশমিক ইনপুট ফর্ম্যাট সহ সমস্ত পরীক্ষার কেস যাচাই করুন।

ব্যাখ্যা

প্যাটার্নটি 2 ডি কনভোলজ ব্যবহার করে সনাক্ত করা হয়েছে। এ জন্য,

  • ম্যাট্রিক্স এবং প্যাটার্নটি বাইপোলার আকারে থাকা দরকার, 1, -1তার পরিবর্তে 1, 0। যেহেতু প্যাটার্নটির আকার 4 × 4 রয়েছে, তাই এর উপস্থিতিটি 16কনভোলজ আউটপুটে সমান একটি এন্ট্রি দ্বারা সনাক্ত করা হয় ।
  • কনভোলশন কার্নেলটিকে উভয় মাত্রায় বিপরীত চাওয়া প্যাটার্ন হিসাবে সংজ্ঞায়িত করা দরকার।

এছাড়াও, যেহেতু সমঝোতা সনাক্ত করা সূচকগুলিতে একটি অফসেট প্রবর্তন করে, তাই আউটপুটে এটি সংশোধন করা দরকার।

Eq      % Implicitly input binary matrix. Convert to bipolar form (0 becomes -1)
[ODDH]  % Push array [0 8 8 2]
B       % Convert to binary. Each number gives a row
~Eq     % Negate and convert to bipolar. Gives [1 1 1 1; 0 1 1 1; 0 1 1 1; 1 1 0 1]
        % This is the "BEEF" pattern reversed in the two dimensions. Reversal is
        % needed because a convolution will be used to detect that patter
Z+      % 2D convolution, keeping original size
16=&f   % Find row and column indices of 16 in the above matrix
h       % Concatenate horizontally
q       % Subtract 1. Implicitly display

8

গণিত, 62 বাইট

BlockMap[Fold[#+##&,Join@@#]==48879&,#,{4,4},1]~Position~True&

বিইএফ ম্যাট্রিক্সের সমস্ত অবস্থান, 1-সূচকযুক্ত ফেরত দেয়। ইনপুটটি অবশ্যই বাইনারি অঙ্কের একটি ম্যাট্রিক্স হওয়া উচিত। যদিও আউটপুটে এক্স এবং ওয়াই স্যুইচ করা আছে।


স্যুইচ করা xএবং নিয়ে yযাওয়া নিয়ে কোনও উদ্বেগ নেই ।
আর্নল্ড

7

স্লিপ , 28 বাইট

27 কোডের বাইট, pবিকল্পের জন্য +1 ।

(?|1011)(\(?|1110)){2}\1111

শূন্যস্থান ছাড়াই 1 এবং 0 এর একটি বহুমুখী আয়তক্ষেত্র হিসাবে ইনপুট প্রয়োজন। এটি এখানে চেষ্টা করুন (ইনপুট হিসাবে তৃতীয় টেস্টকেস সহ)।

ব্যাখ্যা

স্লিপ 2-ডি প্যাটার্ন ম্যাচিং চ্যালেঞ্জের একটি ভাষা । এসপি 3000 আমি যা বলতে পারি তার থেকে এটি আরও অনেক কিছু বলতে পারে, তবে মূলত এটি কিছু দিকনির্দেশক কমান্ডের সাথে রেজেক্সের একটি বর্ধিত রূপ যা আপনাকে দুটি মাত্রায় মিলিয়ে দেয়। উপরের কোডটি উপাধিযুক্ত "স্লিপ" কমান্ডটি ব্যবহার করে \, যা ম্যাচের পয়েন্টারের দিক পরিবর্তন করে না তবে এটি একটি চরিত্রের সাথে পাশাপাশি চালিত করে। এটি "স্থিতিশীল গোষ্ঠী "ও ব্যবহার করে (?|...)যা কোনও কিছুর সাথে মেলে এবং তারপরে পয়েন্টারটিকে তার আগের অবস্থানে পুনরায় সেট করে।

কোডটি নীচে ভেঙে গেছে:

(?|1011)                     Match 1011; reset pointer to beginning of match
        (         ){2}       Do the following twice:
         \                     Slip (moves pointer down one row)
          (?|1110)             Match 1110; reset pointer to beginning of match
                      \1111  Slip and match 1111

এটি 0xBEEFস্কোয়ারের সাথে মেলে । pবিকল্প ম্যাচ স্থানাঙ্ক আউটপুট, 0-ইন্ডেক্স।


1
চমৎকার :) অদ্ভুতভাবে, ব্লক নিদর্শনগুলির জন্য মাঝে মাঝে গল্ফায়ার কেবল একটি সর্পিল ঘুরে বেড়ানো:1011>001>1(11>){3}1>1
Sp3000

@ স্প 3000 হা! সর্পিল স্নেকএক্সের সবচেয়ে সংক্ষিপ্ত পদ্ধতি ছিল, তবে আমি স্লিপে এটি চেষ্টা করার কথা ভাবি নি। সত্যিই দুর্দান্ত কৌশল 1(11>){3}
DLosc

7

পিএইচপি, 87 বাইট

বিভাজক ব্যতীত ইনপুট হিসাবে বাইনারি স্ট্রিং শূন্য-সূচকযুক্ত মানগুলি প্রদান করে।

preg_match("#1011(.{8}1110){2}.{8}1111#",$argv[1],$c,256);echo($s=$c[0][1])%12,$s/12^0;

ইনপুট 128 বাইট হিসাবে সংখ্যার অ্যারে

<?foreach($_GET[a]as$a)$b.=sprintf("%012b",$a);preg_match("#1011(.{8}1110){2}.{8}1111#",$b,$c,256);echo($s=$c[0][1])%12,$s/12^0;

@ টিটাস দ্বারা 14 টি বাইট সংরক্ষণ করা হয়েছে আপনাকে ধন্যবাদ


ব্যবহার করুন ,পরিবর্তে .মধ্যে echoএবং আপনার প্রথম বন্ধনী অপসারণ করতে পারেন। (-4)
তিতাস

মন্তব্যে, আরনাউল্ড একটি ডিলিমিটার ছাড়াই আউটপুট দেয়। (-4)
তিতাস

ফ্ল্যাগ ব্যবহার PREG_OFFSET_CAPTURE: সংযুক্ত ,256করার preg_matchপরামিতি, অপসারণ ^(.*), Regex থেকে $c[0][1]পরিবর্তে strlen($c[1])(-6)
তিতাস

@ টিটাস সুন্দর এবং সম্পন্ন হয়েছে
জার্গ হালসারম্যান

5

জাভা 7,182 177 বাইট

আমি কার্ল Napf বৈশিষ্ট্যসমূহ নিয়ে আসা সি উত্তর জাভা প্রয়োজন এবং ধন্যবাদ কার্ল Napf আমাকে বিট যাদু মনে করিয়ে 5 বাইট সংরক্ষণ করার জন্য। (Btw আমিও এই ধারণা নিয়ে এসেছেন কিন্তু @KarlNapf অংশ ধারণা আসতে তোমার না আমার ছিল না) .Sorry যদি আমি তোমাকে খুশী হলেন না।

(0 ভিত্তিক)

int f(int[]a){int x=9,y,z=0;for(;x-->0;){for(y=0;y<9;a[y++]/=2) if((a[y]&15)==11&(a[y+1]&15)==14&(a[y+2]&15)==14&(a[y+3]&15)==15)z=(x<<4)+y;a[y]/=2;a[10]/=2;a[11]/=2;}return z;}

Ungolfed

class Beef {

    public static void main(String[] args) {
        int x = f(new int[] { 1222, 3107, 1508, 3997, 1906, 379, 2874, 2926, 1480, 1487, 3565, 633 });
        System.out.println(x >> 4);
        System.out.println(x & 15);
    }

    static int f(int[] a) {
        int x = 9,
            y,
            z = 0;

        for (; x-- > 0; ) {
            for (y = 0; y < 9; a[y++] /= 2)
                if ((a[y] & 15) == 11 
                  & (a[y + 1] & 15) == 14
                  & (a[y + 2] & 15) == 14 
                  & (a[y + 3] & 15) == 15)
                    z = (x << 4) + y;

            a[y] /= 2;
            a[10] /= 2;
            a[11] /= 2;
        }
        return z;
    }

}

2
যারা চার শূণ্যস্থান মধ্যে সেখানে কি কি a[y++]>>=1)এবং if((a[y]&15)==। বিটিডব্লিউ, আমি 183 এর পরিবর্তে 182 বাইট গণনা করব? : এস
কেভিন ক্রুইজসেন

পুনঃটুইট
নম্বনট নোট

1
সবকিছু
ঠিকঠাক

1
আপনি এখনও ...a[y++]/=2)এবং এর মধ্যে স্থান সরাতে পারেন if((a[y]&15)==...
কেভিন ক্রুইজসেন

5

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

আমি এটিকে ক্ষমা চেয়ে নিয়ে বলতে চাই। আমি মনে করি এটি সম্ভবত ভয়াবহ এবং ভাষাটি কীভাবে ব্যবহার করতে হয় তার একটি খারাপ উদাহরণ, তবে যেহেতু আমি আমার পার্ল উত্তরের জন্য একটি রেজেক্স ব্যবহার করেছি, তাই আমি ভেবেছিলাম আমি রেটিনা চেষ্টা করব। আমি খুব ভাল নই. :( গিথুবের স্নিপেটগুলি আমাকে অনেক সাহায্য করেছে!

@ ধন্যবাদ wullzx -3 বাইট জন্য এবং @ আমার পার্ল উত্তরে তার মন্তব্যের জন্য Taemyr আমার পদ্ধতি নিয়ে একটি সমস্যা ইশারা জন্য!

স্থান-বিচ্ছিন্ন বাইনারি স্ট্রিং হিসাবে আউটপুট আশা করে এবং স্থান পৃথক পৃথকভাবে সমন্বয় করে।

(.{13})*(.)*1011(.{9}1110){2}.{9}1111.*
$#2 $#1

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

সমস্ত পরীক্ষা একবারে যাচাই করুন।


1
'000010110010110000111000111000111000111000111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' আপনার (।) * হতে হবে
.8 ই

এটি কি প্রতিরোধ করে You can safely assume that there is always exactly one 'beef' on the bun. Your code is not required to support cases with more than one beef or no beef at all.? যদিও প্রয়োজনবোধে এটি নিরপেক্ষ সংশোধকগুলির সাথে সমাধান করা যেতে পারে (.{12})*?(.)*?
ডম হেস্টিংস

1
আবার দেখুন, input ইনপুটটিতে কেবল একটি গরুর মাংস রয়েছে - এবং এটি আপনার প্রোগ্রামটি নির্দেশ করে এমন স্থানে নয়। উত্সাহী মোডিফার ব্যবহার করে সমস্যাটি সমাধান করা হবে না, যেহেতু আমি আসল গরুর সাথে নকল গোমাংসটি স্যুইচ করতে পারি। সমস্যাটি হ'ল আপনার রেগেক্স একটি "গরুর মাংস" এর সাথে মেলে যা একটি ম্যাট্রিক্স সারির শেষে থেকে 4 বিটের চেয়ে কম শুরু হয়।
Taemyr

আপনি জিরো বাইট ব্যয় নির্ধারণের জন্য, 8 8} 's কে {9 to এ পরিবর্তন করে এবং ইনপুটটির লাইনগুলি স্থান পৃথকীকরণের জন্য অনুরোধ করেও এটি সমাধান করতে পারেন।
Taemyr

@ তােমির আহ! আমি দেখি! আমি আপনার বক্তব্য ভুল বুঝেছি ... আপনি সত্যই সঠিক। আমার পার্ল দ্রষ্টব্য এটির জন্যও সম্ভাব্য f যে ASAP পরিবর্তিত পাবেন। আপনার মন্তব্য এবং পরামর্শের জন্য আপনাকে ধন্যবাদ!
ডম হেস্টিংস

4

স্কালা, 90 বাইট

("1011.{8}(1110.{8}){2}1111".r.findAllMatchIn(_:String).next.start)andThen(i=>(i/12,i%12))

ব্যাখ্যা:

(
  "1011.{8}(1110.{8}){2}1111" //The regex we're using to find the beef
  .r                          //as a regex object
  .findAllMatchIn(_:String)   //find all the matches in the argument thats going to be passed here
  .next                       //get the first one
  .start                      //get its start index
)                             //this is a (String -> Int) function
andThen                       //
(i=>                          //with the found index
  (i/12,i%12)                 //convert it to 2d values
)                             

(a -> b) andThen (b -> c)কোনও (a -> c)ফাংশনে ফলাফল , এটি রচনা বিপরীত মত, তবে স্কেলে কম ধরণের টিকা প্রয়োজন। এই ক্ষেত্রে, এটি ইনপুট হিসাবে বাইনারি অঙ্কগুলির একটি স্ট্রিং নেয় এবং শূন্য-ভিত্তিক সূচকগুলির একটি দ্বিগুণ দেয়।


4

জে, 31 29 বাইট

[:($#:I.@,)48879=4 4#.@,;._3]

ইনপুটটি বাইনারি মানগুলির 2 ডি অ্যারে হিসাবে ফর্ম্যাট করা হয় এবং আউটপুটটি অ্যারে হিসাবে শূন্য-ভিত্তিক স্থানাঙ্ক হয় [y, x]

সূচকটি খুঁজতে ফ্ল্যাটিং এবং বেস রূপান্তর হ'ল ডেনিসের এই মন্তব্য থেকে আমি শিখেছি ।

ব্যবহার

   f =: [:($#:I.@,)48879=4 4#.@,;._3]
   ] m =: _12 ]\ 1 1 1 0 0 1 1 1 1 1 1 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1
1 1 1 0 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 0 1
1 0 0 1 0 0 1 0 0 1 0 0
1 0 0 1 0 1 1 0 0 1 1 1
1 1 1 1 1 1 0 0 0 0 1 0
1 1 0 1 1 1 0 0 0 0 0 1
1 0 0 1 1 1 1 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1 1 1
1 0 0 0 0 1 0 1 0 1 1 1
1 1 0 0 1 1 0 0 0 0 1 1
   f m
4 3
   f (#:~2#~#) 3710 3360 1149 2340 2407 4034 3521 2529 2527 3999 2135 3267
4 3
   f (#:~2#~#) 1222 3107 1508 3997 1906 379 2874 2926 1480 1487 3565 633
7 3
   f (#:~2#~#) 2796 206 148 763 429 1274 2170 2495 42 1646 363 1145
4 6
   f (#:~2#~#) 3486 3502 1882 1886 2003 1442 2383 2808 1416 1923 2613 519
1 1
   f (#:~2#~#) 3661 2382 2208 1583 1865 3969 2864 3074 475 2382 1838 127
8 8
   f (#:~2#~#) 361 1275 3304 2878 3733 3833 3971 3405 2886 448 3101 22
3 0
   f (#:~2#~#) 3674 2852 1571 3582 1402 3331 1741 2678 2076 2685 734 261
7 7

ব্যাখ্যা

[:($#:I.@,)48879=4 4#.@,;._3]  Input: 2d array M
                            ]  Identity. Get M
                 4 4    ;._3   For each 4x4 subarray of M
                       ,         Flatten it
                    #.@          Convert it to decimal from binary
           48879=              Test if equal to 48879 (decimal value of beef)
[:(       )                    Operate on the resulting array
         ,                       Flatten it
      I.@                        Find the indices where true
    #:                           Convert from decimal to radix based on
   $                               The shape of that array
                               Returns the result as coordinates [y, x]

4

পাইথন 2, 98 95 92 বাইট

lambda x:'%x'%(`[''.join('%x'%int(s[i:i+4],2)for s in x)for i in range(9)]`.find('beef')+15)

ইনপুটটি স্ট্রিংগুলির একটি তালিকা, আউটপুটটি স্ট্রিং এক্সওয়াই (1-ভিত্তিক সূচকগুলি)।

আইডিয়নে এটি পরীক্ষা করুন ।


এটি কি ভুলের সাথে সীমানা জুড়ে একটি "গরুর মাংস" খুঁজে পাবে যেখানে দুটি লাইনকে সংযুক্ত করা হয়েছে?
xnor

হাঁ আমি তাই মনে করি. আমি সম্পাদনাটি সঠিকভাবে পরীক্ষা না করা পর্যন্ত ফিরিয়ে আনব।
ডেনিস

2
আপনি যখন টেরয়েডাল বান ব্যবহার করেন তখন এটিই ঘটে।
mbomb007

4

পার্ল, 54 বাইট

53 বাইট কোড +1 এর জন্য -n-Eকোনও অতিরিক্ত ব্যয় ছাড়াই ব্যবহার করে।

0-ভিত্তিক সূচকগুলি ব্যবহার করে। 1S এবং 0s এর স্ট্রিং হিসাবে ইনপুট আশা করে এবং স্থান পৃথক সমবায় আউটপুট দেয়।

@ বুলক্স এবং @ গ্যাব্রিয়েল বেনামি আমাকে 9 বাইট বাঁচাতে সাহায্য করার জন্য, এবং কোনও ইস্যু দেখানোর জন্য @ রেটিনা জবাব সম্পর্কে টেইমিরের মন্তব্যে ধন্যবাদ!

/1011.{9}(1110.{9}){2}1111/;say$-[0]%13,$",$-[0]/13|0

ব্যবহার

perl -nE '/1011.{9}(1110.{9}){2}1111/;say$-[0]%13,$",$-[0]/13|0' <<< '111001111110 110100100000 010001111101 100100100100 100101100111 111111000010 110111000001 100111100001 100111011111 111110011111 100001010111 110011000011
010011000110 110000100011 010111100100 111110011101 011101110010 000101111011 101100111010 101101101110 010111001000 010111001111 110111101101 001001111001
101011101100 000011001110 000010010100 001011111011 000110101101 010011111010 100001111010 100110111111 000000101010 011001101110 000101101011 010001111001
110110011110 110110101110 011101011010 011101011110 011111010011 010110100010 100101001111 101011111000 010110001000 011110000011 101000110101 001000000111
111001001101 100101001110 100010100000 011000101111 011101001001 111110000001 101100110000 110000000010 000111011011 100101001110 011100101110 000001111111
000101101001 010011111011 110011101000 101100111110 111010010101 111011111001 111110000011 110101001101 101101000110 000111000000 110000011101 000000010110
111001011010 101100100100 011000100011 110111111110 010101111010 110100000011 011011001101 101001110110 100000011100 101001111101 001011011110 000100000101'
3 4
3 7
6 4
1 1
8 8
0 3
7 7

1
বাইনারি EE এর জন্য রেজেক্স একত্রিত করে আপনি 3 টি অক্ষর বাঁচাতে পারবেন: এর (.{8}1110){2}পরিবর্তে.{8}1110.{8}1110
ওউলক্সজ

1
আপনি আরও 3 বাইট সংরক্ষণ করতে পারেনlength$`$-[0]
গ্যাব্রিয়েল বেনামি

@ ওউলক্সজ অবশ্যই! আমি চেষ্টা করেছি \1কিন্তু ভাগ্য হয়নি, চেষ্টা করার কথা ভাবেনি {2}! ধন্যবাদ!
ডম হেস্টিংস

@ গ্যাব্রিয়েল বেনামি আশ্চর্যজনক, আপনাকে অনেক ধন্যবাদ! আপডেট করা হয়েছে!
ডম হেস্টিংস

2
@ User112638726 " $-[0]অন্তিম সফল ম্যাচ শুরুর অফসেট করা হয়। $-[n]সাবস্ট্রিং n- তম subpattern দ্বারা মেলানো বা শুরুর অফসেট হয় undefযদি subpattern মেলেনি।" থেকে: perldoc.perl.org/perlvar.html (দেখুন @-)
ডম হেস্টিংস

1

স্কালা, 318 বাইট

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

বাইনারি স্ট্রিংয়ের অ্যারে হলে আসল সমাধান

def has(s: String, t: String): Int = s.indexOf(t)
val beef = List("1011", "1110", "1110", "1111")
l.zipWithIndex.map{case(e,i)=>l.drop(i).take(4)}.map{_.zip(beef)}.map{_.collect{case e=>has(e._1,e._2)}}.zipWithIndex.filterNot{e => e._1.contains(-1) ||  e._1.distinct.length > 1}.map{e=>s"(${e._1.head},${e._2})"}.head

নমুনা কাজ

val bun = 
"""1 1 1 0 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 0 1
1 0 0 1 0 0 1 0 0 1 0 0
1 0 0 1 0 1 1 0 0 1 1 1
1 1 1 1 1 1 0 0 0 0 1 0
1 1 0 1 1 1 0 0 0 0 0 1
1 0 0 1 1 1 1 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1 1 1
1 0 0 0 0 1 0 1 0 1 1 1
1 1 0 0 1 1 0 0 0 0 1 1
""".replaceAll(" ","")
def has(s: String, t: String): Int = s.indexOf(t)
val beef = List("1011", "1110", "1110", "1111")
val l = bun.split("\n").toList
l.zipWithIndex.map{case(e,i)=>l.drop(i).take(4)}
.map{_.zip(beef)}
.map{_.collect{case e=>has(e._1,e._2)}}.zipWithIndex
.filterNot{e => e._1.contains(-1) ||  e._1.distinct.length > 1}
.map{e=>s"(${e._1.head},${e._2})"}.head

1

পাইথন, 137 বাইট (লিনাক্স অনুসারে (এলপিড্রো ধন্যবাদ))

def f(s,q=0):import re
 i=s.index(re.findall('1011.{8}1110.{8}1110.{8}1111',s)[q])+1
 x=i%12
 y=(i-x)/12
 if x>8:x,y=f(s,q+1)
 return x,y

হুবহু প্রতিযোগিতামূলক বাইটকাউন্ট নয়, তবে অ্যালগরিদমটি কিছুটা আকর্ষণীয়। বাইনারি মানগুলির একটি স্ট্রিং হিসাবে ইনপুট নেয়।


আপনি যদি 4 এর পরিবর্তে একক স্পেসে মামলা করেন এবং লিনাক্সে এটি পরীক্ষা করে থাকেন তবে এটি 137
এলপেড্রো

1
আমি মনে করি আমদানির আগে আপনার একটি নতুন লাইন এবং স্থানের প্রয়োজন (এটি ছাড়া পাইথন 2 এ আমি একটি ইনডেন্টার পেতে পারি) যার দাম 2 বাইট তবে আপনি i = ..., x = ... এবং y = ... রাখতে পারেন একই লাইন এবং পৃথক; 136 এর জন্য 1 বাইট হারাতে
এলপ্যাড্রো

@ এলপেড্রো আমি পাইথন 3 ব্যবহার করছি এবং আমদানি একই লাইনে থাকায় এটি ঠিক আছে।
পেনালোসা

পুরোপুরি বুঝতে
পেরেছি

জিৎ, কেবল আমার মন্তব্যগুলি আবার পড়ুন এবং আমি আজ রাতে অনেকগুলি টাইপস তৈরি করছি। ভাল কথা আমি কোনও কোড লেখার চেষ্টা করছি না ...
এলপেড্রো


1

এফ # - 260 বাইট

প্রয়োজনীয় এন্ট্রিপয়েন্ট পয়েন্ট ডিজাইনার সহ পুরো প্রোগ্রাম (সুতরাং আপনি যদি মনে করেন তবে কম গণনা করুন)।

ইনপুট: প্রতিটি সারি পৃথক স্ট্রিং হিসাবে: "111001111110" "110100100000" "" 010001111101 "" 100100100100 "" 100101100111 "" 111111000010 "" 110111000001 "" 100111100001 "" 100111011111 "" 111110011111 "" 100001010111 "" 11001111001 "" 11001111111 "" 11001111111 "" 11001110111 "" 11001111111 "" 11001110111 "" 11001110111 "" 11001110111 "" 11001110111 "

কোড:

[<EntryPoint>]
let main a=
 let rec f r:int=
  let b=a.[r].IndexOf"1011"
  if(b>0)then if(a.[r+1].[b..b+3].Equals"1110"&&a.[r+2].[b..b+3].Equals"1110"&&a.[r+3].[b..b+3].Equals"1111")then r else f(r+1)
  else f(r+1)
 printfn"%d%d"(a.[f 0].IndexOf"1011")(f 0);0

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

কার্লের উত্তর এফ # তে পোর্ট করার বিষয়ে আমি খুব ভেবেছিলাম কারণ এটি একটি ভাল, এবং এখনও অন্য পদ্ধতির হিসাবে মজা করার জন্য এটি করতে পারে, তবে এইটির সাথে আলাদা থাকতে চাই।


1

ডায়ালগ এপিএল, 29 27 বাইট

ব্যবহারকারী ইনপুট হিসাবে একটি 12x12 বাইনারি অ্যারে নেয় এবং বিপরীত ক্রমে স্থানাঙ্কগুলি প্রদান করে, সূচকগুলি 1 থেকে শুরু হয়।

অনেকগুলি বাইট সংরক্ষণ করার জন্য @ অ্যাডমকে ধন্যবাদ। -২ বাইট কারণ আমি বোবা এবং বিনা কারণে একটি ফাংশনে সমস্ত কিছু রেখেছি।

0~⍨∊{⍵×⍳⍴⍵}⎕⍷⍨~0 8 0 6⊤⍨4/2

প্রতিস্থাপন 2 সংরক্ষণ করুন ~2 8 12∊⍨4 4⍴⍳16সঙ্গে 15 7 15 9⊤⍨4/2। দ্রষ্টব্য যে ১ version.০ সংস্করণ থেকে 0~⍨∊{⍵×⍳⍴⍵}প্রতিস্থাপন করা যেতে পারে (আপনার কোডটি কেবল ডায়ালগ এপিএলে কাজ করে)।
Adám

হ্যাঁ, ডায়ালগের এমন অক্ষর রয়েছে যা জিএনইউ থেকে পৃথক। নাকি এটা অন্য কিছু?
জ্যাকারি

ভাল, v16 থেকে যুক্ত করা হচ্ছে, আমি GNUAPL আদিমদের একটি তালিকা খুঁজে পেতে অক্ষম।
অ্যাডম

আমি জিএনইউ এপিএল চালাচ্ছি, এটি বেশিরভাগ ক্ষেত্রে কেবল ভিন্ন ভিন্ন কোডডপয়েন্ট।
জাকারি

যা আমি লক্ষ্য করেছি তা থেকে।
জ্যাকারি

0

উপাদান , 130 বাইট

_144'{)"1-+2:';}144'["1-+19:~?1+~?!2+~?3+~?12+~?13+~?14+~?15+~?!24+~?25+~?26+~?27+~?!36+~?37+~?38+~?39+~?16'[&][12%2:`\ `-+12/`]']

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

কোনও সীমানা ছাড়াই 1s এবং 0 এর এক দীর্ঘ স্ট্রিং হিসাবে ইনপুট নেয়। আউটপুটগুলি 3 4(0-ভিত্তিক সূচক)।

এটি ইনপুট ডেটাটিকে "অ্যারে" (মূলত পূর্ণসংখ্যার কীগুলির সাথে একটি অভিধান) রাখার মাধ্যমে কাজ করে এবং তারপরে, প্রতিটি সম্ভাব্য প্রারম্ভিক মানের জন্য, বিশেষ অফসেটগুলিতে বিটগুলি পরীক্ষা করে (তাদের 16 টি খুব শ্রমসাধ্য প্রক্রিয়াতে)।

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