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-आधारित निर्देशांक का उपयोग कर सकते हैं (लेकिन दोनों प्रारूपों का मिश्रण नहीं, जैसे कि X- के लिए 0-आधारित और Y के लिए 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-आधारित निर्देशांक का उपयोग कर रहे हैं।

नियम

  • आप सुरक्षित रूप से मान सकते हैं कि बन पर हमेशा एक 'बीफ' होता है। आपके कोड को एक से अधिक बीफ़ या बिना बीफ़ के मामलों का समर्थन करने की आवश्यकता नहीं है।
  • बीफ पैटर्न हमेशा वर्णित के रूप में दिखाई देगा। इसे कभी भी किसी भी तरह से घुमाया या मिरर नहीं किया जाएगा।
  • यह कोड-गोल्फ है, इसलिए बाइट्स में सबसे कम जवाब जीतता है। मानक खामियों को मना किया जाता है।

परीक्षण के मामलों

निम्नलिखित परीक्षण मामलों में, मैट्रिक्स की प्रत्येक पंक्ति को उसके दशमलव प्रतिनिधित्व के रूप में व्यक्त किया जाता है।

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))?
दरवाज़े

@Doorknob हाँ, यदि यह X और Y दोनों के लिए समान प्रारूप है (तदनुसार अद्यतन किया गया प्रश्न)।
अरनौलद

35
बोनस अंक अगर हम भी 0xBEEF 0xDEAD उत्पादन wether है? : पी
TuxCrafting

10
यह चुनौती वास्तव में यादृच्छिक और थोड़े मूर्खतापूर्ण है। लेकिन यह वास्तव में अभी भी एक बहुत बड़ी चुनौती है। +1
DJMcMayhem

मैं उत्पादन कर सकते हैं 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-आधारित इंडेक्सिंग के साथ भी है , लेकिन यह दुर्भाग्य से, एक बाइट लंबी है।
डेनिस

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। (परीक्षण नहीं किया है कि हालांकि)
DJMcMayhem

1
@DJMcMayhem ओह, मैं हमेशा इस बारे में भूल जाता Yहूं क्योंकि मेरे पास मेरे vimrc में इसका पुनर्जन्म है। : पी वास्तव में, kdggबस के बराबर था d{, जो आश्चर्यजनक रूप से, वर्तमान लाइन को नहीं हटाता है।
दरवाज़े

ओह दिलचस्प। कितना सुविधाजनक!
DJMcMayhem

मैं हमेशा भ्रमित होता हूं जब चीजें {एक चरित्र आंदोलन के रूप में बदल जाती हैं; इसलिए मैंने {d''पूरी लाइनें हटाने के बजाय ऐसा कुछ किया है ।
नील

1
आप बफर में प्रिंट करने के बजाय इको का उपयोग कर सकते हैं, मुझे नहीं लगता कि चुनौती में इसे रोकने के लिए कुछ भी है। यह लगभग 10 बाइट्स दाढ़ी होगी।
क्रिश्चियन रोंडेउ

22

जावास्क्रिप्ट (ईएस 6), 63 60 56 बाइट्स

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

12 12-अंकीय बाइनरी स्ट्रिंग्स के 155-वर्ण स्थान-सीमांकित स्ट्रिंग के रूप में इनपुट लेता है, शून्य-अनुक्रमित मान लौटाता है। संपादित करें: सहेजे गए 3 बाइट @ JörgHülsermann की बदौलत। सहेजे गए 4 बाइट्स @ETHproductions की बदौलत।


क्या आप संभवतः s.search(r)इसके बजाय उपयोग कर सकते हैं r.exec(s).index?
ETHproductions

1
@ETHproductions बेशक मैं कर सकता था। मैं कल सो गया होगा ...
नील

मेरे लिए, निष्पादित करने के लिए नोडज का उपयोग करना, यह तब तक काम नहीं कर रहा है जब तक कि मैं बदल नहीं s=>[जाता (s,i)=>[, क्योंकि आपको कहीं और परिभाषित करने की आवश्यकता है: /
मिजागो

@ मिजागो ऑड, यह नोड 4 में काम करता था जब मैंने इसे आज़माया था (मैं आमतौर पर स्पाइडरमोंक जेएस शेल का उपयोग करता हूं)। मान लीजिए कि आपको एक टाइपो कोड में मिला था, इसलिए उसमें से कुछ अच्छा निकला!
नील

मुझे लगता है कि यह 0000101100101100111101010001110001110001111111000000000000000000000000000000000000000000000000000000000000000000000000000000
तैमूर

14

सी, 146 177 173 163 बाइट्स

कोड को ठीक करने के लिए नंबर तीन का धन्यवाद (निचली तीन पंक्तियों को स्थानांतरित करना)।

4 स्थानों के >>=1साथ बदलकर 4 बाइट्स की बचत /=2। 10 और बाइट्स देकर बचत करना xऔर एमडी एक्सएफ के लिए yवैश्विक और डिफ़ॉल्ट intधन्यवाद

#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
आप 6 बाइट्स को बचाने के #define T(i,n)if((A[y+i]&15)==n)लिए अपने और अगर खंड को परिभाषित कर सकते हैं T(0,11)T(1,14)T(2,14)T(3,15)return। फंक्शन सिग्नेचर को int b(int*A)सेव किए गए 4 और बाइट्स में भी बदलें ।
Lince Assassino


9

MATL , 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&

BEEF मैट्रिक्स के सभी पदों को लौटाता है, 1-अनुक्रमित। इनपुट बाइनरी अंकों का एक मैट्रिक्स होना चाहिए। आउटपुट में x और y को स्विच किया जाता है, हालाँकि।


कोई चिंता नहीं है xऔर yस्विच किया जा रहा है।
अरण्युलड

7

पर्ची , 28 बाइट्स

pविकल्प के लिए कोड के 27 बाइट्स, +1 ।

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

1 और 1 के 0 के मल्टीलाइन आयत के रूप में इनपुट की आवश्यकता होती है। इसे यहाँ आज़माएँ (इनपुट के रूप में तीसरे टेस्टकेस के साथ)।

व्याख्या

स्लिप 2-डी पैटर्न मिलान चुनौती से एक भाषा है । Sp3000 इसके बारे में बहुत कुछ कह सकता है जितना मैं कर सकता हूं, लेकिन मूल रूप से यह कुछ दिशात्मक कमांड के साथ रेगेक्स का एक विस्तारित रूप है जो आपको दो आयामों में मेल खाते हैं। उपर्युक्त कोड एपिफिकेशन "स्लिप" कमांड का उपयोग करता है \, जो मैच पॉइंटर की दिशा को नहीं बदलता है, लेकिन इसे एक वर्ण द्वारा बग़ल में ले जाता है। यह "स्थिर समूह" का भी उपयोग करता है (?|...), जो कुछ से मेल खाता है और फिर सूचक को उसके पिछले स्थान पर रीसेट करता है।

कोड निम्नानुसार टूट जाता है:

(?|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

@ Sp3000 हा! सर्पिल में सर्पिल सबसे छोटा तरीका था, लेकिन मैंने इसे स्लिप में आजमाने के बारे में नहीं सोचा था। वास्तव में अच्छी चाल के साथ 1(11>){3}
DLosc

7

PHP, 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 बिट्स @Titus धन्यवाद द्वारा बचाया


का प्रयोग करें ,बजाय .में echoऔर आप कोष्ठक निकाल सकते हैं। (-4)
टाइटस

टिप्पणियों में, अरनॉल्ड बिना किसी सीमांकक के आउटपुट की अनुमति देता है। (-4)
टाइटस

ध्वज का उपयोग करें PREG_OFFSET_CAPTURE: मापदंडों के ,256लिए संलग्न preg_match, (-6 के बजाय ^(.*), रेगेक्स से हटा दें )$c[0][1]strlen($c[1])
टाइटस

@ टिट्स अच्छा और किया
जोर्ग ह्यूल्सरमैन

5

जावा 7,182 177 बाइट्स

मैंने JAVA के लिए Karl Napf C का उत्तर दिया और Karl Napf को धन्यवाद के लिए 5 bytes बचाकर मुझे बिट मैजिक दिया। (Btw मैं भी इस विचार के साथ आया था लेकिन @KarlNapf रिटर्न पार्ट आइडिया आपका था मेरा है)। अगर मैं आपसे अप्रसन्न हूं तो मेरे बारे में सोचें।

(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)==। Btw, मैं 183 के बजाय 182 बाइट्स गिनता हूं? : एस
केविन क्रूज़सेन

@ केविनक्रूजसेन ने तय किया।
नंबरनॉट

1
सब कुछ ठीक ;-)
कार्ल नैप

1
आप अभी भी ...a[y++]/=2)और के बीच की जगह निकाल सकते हैं if((a[y]&15)==...
केविन क्रूज़सेन

5

रेटिना, 47 बाइट्स

मैं इसे माफी के साथ पेश करना चाहता हूं। मुझे लगता है कि यह शायद भयानक है और भाषा का उपयोग करने का एक बुरा उदाहरण है, लेकिन जब से मैंने अपने पर्ल जवाब के लिए एक रेगेक्स का इस्तेमाल किया, मैंने सोचा कि मैं रेटिना की कोशिश करूंगा। मैं बहुत अच्छा नहीं हूँ। :( गितुब पर स्निपेट्स ने मुझे बहुत मदद की!

-3 बाइट्स के लिए मेरे पर्ल जवाब पर उनकी टिप्पणी के लिए @ wullzx और @ को धन्यवाद Taemyr मेरी विधि के साथ एक मुद्दा ओर इशारा करते हुए के लिए!

एक अंतरिक्ष-पृथक बाइनरी स्ट्रिंग के रूप में इनपुट की अपेक्षा करता है और अंतरिक्ष को अलग-अलग सह-निर्देशांक आउटपुट करता है।

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

इसे ऑनलाइन आज़माएं!

एक बार में सभी परीक्षणों को सत्यापित करें।


1
'0000101100101100111101010001110001110001111111000000000000000000000000000000000000000000000000000000000000000000000000000000 पर' आपका (।) * * होना आवश्यक है।) {0,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
फिर से देखें, उस इनपुट में केवल एक गोमांस है - और यह उस बिंदु पर नहीं है जहां आपका कार्यक्रम इंगित करता है। उत्सुक मॉडिफ़रों का उपयोग करके समस्या का समाधान नहीं किया जाएगा, क्योंकि मैं असली गोमांस के साथ नकली गोमांस को स्विच कर सकता हूं। समस्या यह है कि आपका रेगेक्स एक "बीफ़" से मेल खाता है जो मैट्रिक्स पंक्ति के अंत से 4 बिट्स से कम शुरू होता है।
तैमूर

आप इसे {8} के s को {9} में बदलकर और शून्य से बाइट लागत तय करने के लिए इनपुट के स्थान को अलग करने के लिए कह सकते हैं।
तैमूर

@ तैमिर आहह! समझा! मैंने आपकी बात को गलत समझा ... आप वास्तव में सही हैं। मेरा पर्ल समाधान संभावित रूप से इस तरह से भी गिरता है। बदल जाएगा कि 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]

इनपुट को बाइनरी मानों के 2d सरणी के रूप में स्वरूपित किया गया है, और आउटपुट एक सरणी के रूप में शून्य-आधारित निर्देशांक है [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)

इनपुट स्ट्रिंग की एक सूची है, आउटपुट स्ट्रिंग XY (1-आधारित सूचकांक) है।

Ideone पर इसका परीक्षण करें ।


क्या यह गलती से सीमा के पार एक "गोमांस" मिल सकता है जहां दो रेखाएं समतल हैं?
xnor

हाँ, मुझे ऐसा लगता है। जब तक मैं इसे ठीक से जांच नहीं पाऊंगा, मैं इसे वापस रोल करूंगा।
डेनिस

2
ऐसा तब होता है जब आप एक टॉरॉयडल बन का उपयोग करते हैं।
mbomb007

4

पर्ल, 54 बाइट्स

53 बाइट्स कोड + 1 के लिए -n-Eबिना किसी अतिरिक्त लागत के उपयोग ।

0-आधारित सूचकांकों का उपयोग करता है। इनपुट की अपेक्षा करता है कि 1एस और 0एस के एक स्ट्रिंग के रूप में और अंतरिक्ष अलग सह-निर्देशांक आउटपुट करता है।

9 बाइट्स बचाने में मेरी मदद करने के लिए @ wullxz और @ GabrielBenamy का धन्यवाद , और एक मुद्दे की ओर इशारा करने के लिए मेरे रेटिना जवाब पर @ Taemyr की टिप्पणी!

/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
बाइनरी ईई के लिए रेगेक्स के संयोजन से आप 3 वर्णों को बचा सकते हैं: (.{8}1110){2}इसके बजाय.{8}1110.{8}1110
wulxz

1
तुम भी बदलकर एक और 3 बाइट्स बचा सकता है length$`में$-[0]
गेब्रियल Benamy

@wullxz बेशक! मैंने कोशिश की \1लेकिन कोई भाग्य नहीं था, कोशिश करने के लिए नहीं सोचा था {2}! धन्यवाद!
डोम हेस्टिंग्स

@GabrielBenamy कमाल है, बहुत-बहुत धन्यवाद! अपडेट किया गया!
डोम हेस्टिंग्स

2
@ User112638726 " $-[0]अंतिम सफल मैच $-[n]की शुरुआत की भरपाई है । एन-वें सबपैटर्न द्वारा मिलान किए गए प्रतिस्थापन की शुरुआत की भरपाई है, या undefअगर सबपैटर्न मेल नहीं खाते।" से: 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 में एक IndentError मिलती है) जिसकी कीमत 2 बाइट्स होती है लेकिन फिर आप i = ..., x = ... और y = ... लगा सकते हैं। के रूप में एक ही लाइन और साथ अलग; 136 के लिए 1 बाइट खोने के लिए
ElPedro

@elpedro मैं पायथन 3 का उपयोग कर रहा हूं, और यह उसी लाइन पर आयात होने के साथ ठीक है।
पेनालॉसा

पूरी तरह से समझ गया :)
ElPedro 19

जीज़, बस मेरी टिप्पणियों को फिर से पढ़ना और मैं आज रात बहुत सारे टाइपोस बना रहा हूं। अच्छी बात है कि मैं किसी भी कोड को लिखने की कोशिश नहीं कर रहा हूं ...
ElPedro


1

एफ # - 260 बाइट्स

पूरा कार्यक्रम, जिसमें आवश्यक एंट्रीपाइप डिज़ाइनर भी शामिल है (यदि आप चाहते हैं कि मुझे लगता है तो कम गिनती करें)।

इनपुट: प्रत्येक पंक्ति अलग स्ट्रिंग के रूप में: "111001111110" "110100100000" "010001111101" "100100100100" "100101100111" "111111000010" "110111000001" "100111100001" "100111011111" "111110011111" "10000101011111" "1100001110111"।

कोड:

[<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

सबसे अधिक संभावना सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन मैं तार के साथ रखना चाहता था, इसलिए मैंने इसे कैसे किया। मुझे लगभग एक सिंगल लाइन और पाइप का उपयोग करके छोटा होना था, लेकिन डबल के साथ कुछ है अगर ब्लॉक मुझे मिल रहा था जो मैं हल नहीं कर सकता था। अतः अच्छा!

मैंने कार्ल के उत्तर को F # में पोर्ट करने के बारे में भी सोचा था क्योंकि यह एक अच्छा है, और अभी भी एक और दृष्टिकोण के रूप में मज़े के लिए ऐसा कर सकता है, लेकिन इस एक के साथ अलग रहना चाहता था।


1

दिल्लोग एपीएल, 29 27 बाइट्स

उपयोगकर्ता इनपुट के रूप में एक 12x12 बाइनरी सरणी लेता है और निर्देशांक को रिवर्स ऑर्डर में लौटाता है, इंडेक्स 1 से शुरू होता है।

कई बाइट्स बचाने के लिए @ Adám को धन्यवाद। -2 बाइट्स क्योंकि मैं गूंगा हूं और बिना किसी कारण के फंक्शन में सब कुछ छोड़ दिया।

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

के ~2 8 12∊⍨4 4⍴⍳16साथ प्रतिस्थापित करके 2 सहेजें 15 7 15 9⊤⍨4/2। ध्यान दें कि संस्करण 16.0 से 0~⍨∊{⍵×⍳⍴⍵}बदला जा सकता है (आपका कोड केवल Dyalog APL में काम करता है)।
Adám

हाँ, Dyalog में वर्ण हैं जो GNU से भिन्न हैं। या यह कुछ और है?
ज़ाचारि

खैर, v16 से जोड़ा जा रहा है, मैं GNUAPL आदिम की सूची नहीं पा रहा हूँ।
22

मुझे ग्नू एपीएल चल रहा है, यह ज्यादातर कोडपॉइंट का अंतर है।
ज़ाचरी

मैंने जो देखा है।
ज़ाचारि

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 और 0s के एक लंबे स्ट्रिंग के रूप में इनपुट लेता है। आउटपुट 3 4( जैसे 0-आधारित अनुक्रमण)।

यह इनपुट डेटा को एक "एरे" (मूल रूप से एक पूर्णांक कुंजी के साथ एक शब्दकोश) में रखकर काम करता है और फिर, प्रत्येक संभावित शुरुआती मूल्य के लिए, विशेष ऑफसेट पर बिट्स का परीक्षण करता है (सभी 16 बहुत श्रमसाध्य प्रक्रिया में)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.