बाइनरी अनुक्रम


23

बाइनरी नंबर ए को डी> 1 अंकों के साथ इनपुट के रूप में देखते हुए, बी के एनटी अंक को खोजने के लिए निम्नलिखित नियमों के अनुसार डी अंकों के साथ एक बाइनरी नंबर बी का उत्पादन करें:

  • B का पहला अंक शून्य है यदि A का पहला और दूसरा अंक बराबर हैं; अन्यथा, यह एक है।

  • यदि 1 <n <d, तो यदि (n-1) th, nth और (n + 1) th अंक A के बराबर हैं, तो B का nth अंक शून्य है; अन्यथा, यह एक है।

  • B का dth अंक शून्य है अगर (D-1) वें और A का dth अंक बराबर हैं; अन्यथा, यह एक है।

नियम

स्ट्रिंग / सूची इनपुट / आउटपुट प्रारूप ठीक है। इनपुट / आउटपुट का एक और अनुमत तरीका पूर्ववर्ती शून्य (या पूर्ववर्ती शून्य की संख्या) के बाद एक पूर्णांक है।

अपने कोड को यथासंभव छोटा करें।

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

00 -> 00
01 -> 11
11 -> 00
010111100111 -> 111100111100
1000 -> 1100
11111111 -> 00000000
01010101 -> 11111111
1100 -> 0110

आपको 10 मिनट और इंतजार करना चाहिए था, तब आपको एक टोपी मिली होगी । हालांकि अच्छी चुनौती!
caird coinheringaahing

@cairdcoinheringaahing मुझे याद है उन पिछले साल ... ओह, ठीक है। :-(
0WJYxW9FMN

2
सुझाया गया परीक्षण मामला: 1100 -> 0110(आउटपुट के पहले 2 अंक हमेशा अन्य सभी परीक्षण मामलों में समान होते हैं; अंतिम 2 अंकों के लिए
डिट्टो

यह देखना अच्छा है कि इस चुनौती पर या इसके पच्चीस उत्तरों पर कोई डाउनवोट नहीं डाला गया है। सबने बहुत अच्छा किया!
0WJYxW9FMN

जवाबों:


7

हास्केल, 59 58 54 बाइट्स

f s=[1-0^(a-b+a-c)^2|a:b:c:_<-scanr(:)[last s]$s!!0:s]

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

f s=                        -- input is a list of 0 and 1
          s!!0:s            -- prepend the first and append the last number of s to s
      scanr(:)[last s]      --   make a list of all inits of this list
     a:b:c:_<-              -- and keep those with at least 3 elements, called a, b and c
    1-0^(a-b+a-c)^2         -- some math to get 0 if they are equal or 1 otherwise

संपादित करें: @ Johanrjan जोहानसन ने 4 बाइट्स बचाए। धन्यवाद!


यदि आप स्ट्रिंग आउटपुट पर स्विच करने में कोई आपत्ति नहीं करते हैं, तो "0110"!!(a+b+c)एक बाइट बचाता है।
लिकोनी

@ लिकोनी: धन्यवाद, लेकिन मैंने अपने गणित में एक बाइट भी पाया है।
नीमी

2
[last s]scanrप्रारंभिक मूल्य पर ले जाया जा सकता है ।
रंजन जोहान्स

वाह। inits (आयात के साथ); पेट; अगर तब या; नक्शा (ले 3); zipWith; takeWhile (not.null); chunksOf (साथ अपने आयात) ... सभी golfed दूर! क्या गोल्फिंग की प्रसिद्धि का एक हॉल है, कहीं, कहीं भी?
विल नेस

7

जेली , 9 बाइट्स

.ịṚjṡ3E€¬

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

I / O अंकों की सूची के रूप में।

स्पष्टीकरण:

.ịṚjṡ3E€¬
.ịṚ       Get first and last element
   j      Join the pair with the input list, thus making a list [first, first, second, ..., last, last]
    ṡ3    Take sublists of length 3
      E€  Check if each has all its elements equal
        ¬ Logical NOT each

मेरे प्रयास से लगभग समान : पी
लीक नून

@LeakyNun आसान चुनौतियों में समान कोड प्राप्त करना काफी आम है; पी
एरिक आउटोलॉफ़र

2
क्या आप एक स्पष्टीकरण जोड़ सकते हैं?
caird coinheringaahing

@cairdcoinheringaahing आप सबसे अधिक संभावना कोड को समझते हैं , लेकिन मैं इसे सभी के लिए एक संदर्भ के रूप में जोड़ रहा हूं जब तक एरिक एक जोड़ता है (यदि वह करता है): .ị- 0.5 पर तत्व हो जाता है । चूंकि मंजिल (0.5) il छत (0.5) , तत्वों को इंडेक्स 0 और 1 पर लौटाता है । जेली एक अनुक्रमित है, इस प्रकार 0 वास्तव में अंतिम तत्व को पकड़ लेता है। जोड़ी को उलट देता है (क्योंकि उन्हें वापस लौटा दिया जाता है last, first)। फिर jइनपुट पर जोड़े को ṡ3जोड़ता है और इसे लंबाई के ओवरलैपिंग स्लाइस में विभाजित E€करता है । 3. चेक (प्रत्येक सूची के लिए) यदि सभी तत्व समान हैं, और ¬तार्किक रूप से प्रत्येक को नकारता है।
श्री एक्सकोडर

6

05AB1E , 6 बाइट्स

¥0.ø¥Ā

I / O बिट सरणियों के रूप में है।

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

यह काम किस प्रकार करता है

¥       Compute the forward differences of the input, yielding -1, 0, or 1 for each
        pair. Note that there cannot be two consecutive 1's or -1's.
 0.ø    Surround the resulting array with 0‘s.
    ¥   Take the forward differences again. [0, 0] (three consecutive equal 
        elements in the input) gets mapped to 0, all other pairs get mapped to a 
        non-zero value.
     Ā  Map non-zero values to 1.


5

हास्केल , 66 61 59 बाइट्स

g t@(x:s)=map("0110"!!)$z(x:t)$z t$s++[last s]
z=zipWith(+)

इसे ऑनलाइन आज़माएं! इनपुट शून्य और लोगों की एक सूची है, आउटपुट एक स्ट्रिंग है। उपयोग उदाहरण: g [0,1,0,1,1,1,1,0,0,1,1,1]पैदावार "111100111100"


पिछला 61 बाइट समाधान:

g s=["0110"!!(a+b+c)|(a,b,c)<-zip3(s!!0:s)s$tail s++[last s]]

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


4

जे , 26 14 बाइट्स

Emigna के 05AB1E समाधान का श्रेय

2=3#@=\{.,],{:

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

मूल प्रयास

2|2#@="1@|:@,,.@i:@1|.!.2]

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

             ,.@i:@1              -1, 0, 1
                    |.!.2]         shift filling with 2
  2         ,                      add a row of 2s on top
         |:                        transpose
   #@="1                           count unique elements in each row
2|                                 modulo 2

शुरू और अंत में 3 के infixes बनाने का चतुर तरीका।
कोल


2

भूसी , 15 11 बाइट्स

Ẋȯ¬EėSJ§e←→

सूची के रूप में इनपुट लेता है, इसे ऑनलाइन आज़माएं! या ऐसा प्रयास करें जो I / O के लिए स्ट्रिंग्स का उपयोग करता है।

व्याख्या

Ẋ(¬Eė)SJ§e←→ -- implicit input, for example [1,0,0,0]
      SJ     -- join self with the following
        §e   --   listify the
                  first and
                  last element: [1,0]
             -- [1,1,0,0,0,0]
Ẋ(   )       -- with each triple (eg. 1 0 0) do the following:
    ė        --   listify: [1,1,0]
   E         --   are all equal: 0
  ¬          --   logical not: 1
             -- [1,1,0,0]

2

जेली , 8 बाइट्स

I0;;0In0

I / O बिट सरणियों के रूप में है।

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

यह काम किस प्रकार करता है

I0;;0In0  Main link. Argument: A (bit array of length d)

I         Increments; compute the forward differences of all consecutive elements
          of A, yielding -1, 0, or 1 for each pair. Note that there cannot be
          two consecutive 1's or -1's.
 0;       Prepend a 0 to the differences.
   ;0     Append a 0 to the differences.
     I    Take the increments again. [0, 0] (three consecutive equal elements in A)
          gets mapped to 0, all other pairs get mapped to a non-zero value.
      n0  Perform not-equal comparison with 0, mapping non-zero values to 1.

मैं एक मजाकिया विकल्प पर पहुंचा, शायद आप इससे प्रेरणा ले I0,0jI¬¬
सकें

2

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

वर्णों के एक सरणी के रूप में इनपुट लेता है। पूर्णांक की एक सरणी देता है।

a=>a.map((v,i)=>(i&&v^p)|((p=v)^(a[i+1]||v)))

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

टिप्पणी की गई

a =>                  // given the input array a
  a.map((v, i) =>     // for each digit v at position i in a:
    (                 //   1st expression:
      i &&            //     if this is not the 1st digit:
           v ^ p      //       compute v XOR p (where p is the previous digit)
    ) | (             //   end of 1st expression; bitwise OR with the 2nd expression:
      (p = v) ^       //     update p and compute v XOR:
      (a[i + 1] ||    //       the next digit if it is defined
                   v) //       v otherwise (which has no effect, because v XOR v = 0)
    )                 //   end of 2nd expression
  )                   // end of map()


1

जेली , 16 बाइट्स

ḣ2W;ṡ3$;ṫ-$W$E€¬

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

मैं इसे गोल्फ जा रहा था, लेकिन एरिक के पास पहले से ही एक छोटा सा उपाय है और गोल्फिंग मेरा सिर्फ उसे अपने करीब लाएगा। मैं अभी भी गोल्फ खेल रहा हूं लेकिन मैं तब तक अपडेट नहीं करूंगा जब तक मैं उसे हरा नहीं सकता या एक अद्वितीय विचार नहीं ढूंढ सकता।

व्याख्या

ḣ2W;ṡ3$;ṫ-$W$E€¬  Main Link
ḣ2                First 2 elements
  W               Wrapped into a list (depth 2)
   ;              Append
    ṡ3$           All overlapping blocks of 3 elements
       ;          Append
        ṫ-$W$     Last two elements wrapped into a list
             E€   Are they all equal? For each
               ¬  Vectorizing Logical NOT

कम पैसे का उपयोग करना और एरिक के समान नहीं है
caird coinheringaahing

1

पर्ल 5 , 62 + 1 ( -n) = 63 बाइट्स

s/^.|.$/$&$&/g;for$t(0..y///c-3){/.{$t}(...)/;print$1%111?1:0}

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


49 बाइट्स के लिए छोटा: ऑनलाइन प्रयास करें!
दादा

आपको इसे उत्तर के रूप में पोस्ट करना चाहिए। मैं आपके काम का श्रेय नहीं लेना चाहता। यही कारण है कि s;..$;अंत में निर्माण गंधा है। मुझे उस एक को याद रखना होगा।
Xcali


1

जाप , 14 13 12 बाइट्स

आंशिक रूप से डेनिस 'जेली समाधान से चित्रित। इनपुट और आउटपुट अंक के सरणियाँ हैं।

ä- pT äaT mg

ETHproductions के लिए एक बाइट धन्यवाद सहेजा गया।

कोशिश करो


व्याख्या

सरणी का निहित इनपुट Uä-सरणी का डेल्टा प्राप्त करता है। pTसरणी के अंत में 0 पुश करता है। äaTपहले पूर्ण डेल्टास प्राप्त करने से पहले सरणी की शुरुआत में एक और 0 जोड़ता है। mgऋणात्मक संख्याओं के लिए प्रत्येक तत्व के चिह्न को -1 के रूप में लौटाने वाले सरणी के तत्वों पर मानचित्र, सकारात्मक संख्याओं के लिए 0 या 1 के लिए।


हम्म, मुझे आश्चर्य है कि एक विधि बनाने के लिए एक अच्छा तरीका है जो किसी सरणी की शुरुआत और अंत में एक आइटम डालता है, जैसे 05AB1E उत्तर में। मुझे लगता है कि यह 1 बाइट को छोटा बना देगा ...
ETHproductions

@ETHproductions, A.ä()जिसमें से इसके दूसरे तर्क को प्रस्तुत करने के लिए, आप एक 3 तर्क जोड़ सकते हैं जो कि जोड़ा जाता है। तो, इस मामले में, 2 बाइट की बचत के लिए pT äaTबन सकता है äaTT
झबरा


1

जे, 32 बाइट्स

B=:2&(+./\)@({.,],{:)@(2&(~:/\))

यह काम किस प्रकार करता है:

B=:                              | Define the verb B
                       2&(~:/\)  | Put not-equals (~:) between adjacent elements of the array, making a new one
            ({.,],{:)            | Duplicate the first and last elements
   2&(+./\)                      | Put or (+.) between adjacent elements of the array

मैंने कुछ @ और कोष्ठक छोड़ दिए, जो यह सुनिश्चित करते हैं कि यह अच्छी तरह से एक साथ हो।

एक कदम दर कदम उदाहरण:

    2&(~:/\) 0 1 0 1 1 1 1 0 0 1 1 1
1 1 1 0 0 0 1 0 1 0 0

    ({.,],{:) 1 1 1 0 0 0 1 0 1 0 0
1 1 1 1 0 0 0 1 0 1 0 0 0

    2&(+./\) 1 1 1 1 0 0 0 1 0 1 0 0 0
1 1 1 1 0 0 1 1 1 1 0 0

    B 0 1 0 1 1 1 1 0 0 1 1 1
1 1 1 1 0 0 1 1 1 1 0 0

0

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

(.)((?<=(?!\1)..)|(?=(?!\1).))?
$#2

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। स्पष्टीकरण: रेगेक्स प्रत्येक इनपुट अंक को बदले में मिलान करके शुरू होता है। एक कब्जा समूह विचाराधीन अंक से पहले या बाद में एक अलग अंक से मेल खाने की कोशिश करता है। ?प्रत्यय तो कब्जा 0 या 1 बार मैच के लिए अनुमति देता है; $#2इसे आउटपुट अंक में बदल देता है।


0

अजगर , 15 बाइट्स

mtl{d.:++hQQeQ3

यहाँ यह कोशिश करो!

वैकल्पिक रूप से:

  • mtl{d.:s+hQeBQ3
  • .aM._M.+++Z.+QZ

यह पहले तत्व को प्रस्तुत करता है और अंतिम तत्व को जोड़ता है, फिर लंबाई 3 के सभी ओवरलैपिंग सबस्ट्रिंग प्राप्त करता है, और अंत में प्रत्येक सबलिस्ट में अलग-अलग तत्वों की संख्या लेता है और इसे घटाता है। यह गड़बड़ मोबाइल पर आधी रात को की गई है इसलिए मुझे आश्चर्य नहीं होगा अगर कुछ आसान गोल्फ हैं।


0

गैया , 9 बाइट्स

ọ0+0¤+ọ‼¦

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

व्याख्या

ọ0 + 0¤ + ọ‼ A ~ एक तर्क, द्विआधारी अंकों की एक सूची को स्वीकार करने वाला एक कार्यक्रम।

ọ ~ डेल्टास।
 ०+ ~ एक ० लगाओ।
   0 ~ स्टैक के लिए एक शून्य धक्का।
    ¤ ~ स्टैक पर शीर्ष दो तर्कों को स्वैप करें।
     + ~ कॉनसैटनेट (पिछले तीन बाइट्स मूल रूप से एक 0 को रोकते हैं)।
      ọ ~ डेल्टास।
        N ~ और प्रत्येक तत्व के लिए एन:
       ‼ ~ यील्ड 1 यदि N, 0, और 0।

गैया , 9 बाइट्स

ọ0¤;]_ọ‼¦

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


0

सी , 309 बाइट्स

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char** argv){int d=strlen(argv[1]);char b[d + 1];char a[d + 1];strcpy(a, argv[1]);b[d]='\0';b[0]=a[0]==a[1]?'0':'1';for(int i=1;i<d-1;i++){b[i]=a[i]==a[i+1]&&a[i]==a[i - 1]?'0':'1';}b[d-1]=a[d-1]==a[d-2]?'0':'1';printf("%s\n",b);}

गोल्फ के लिए बिल्कुल ठीक भाषा नहीं है, लेकिन एक जवाब के लायक कोई भी नहीं है। इसे यहाँ आज़माएं !

व्याख्या

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {
    /* Find the number of digits in number (taken in as a command line argument) */
    int d = strlen(argv[1]);

    /* d + 1 to account for d digits plus the null character */
    char b[d + 1];
    char a[d + 1];

    /* Saves having to type argv[1] every time we access it. */
    strcpy(a, argv[1]);

    /* Set the null character, so printf knows where our string ends. */
    b[d] = '\0';

    /* First condition */
    /* For those not familiar with ternary operators, this means b[0] is equal to '0' if a[0] equals a[1] and '1' if they aren't equal. */
    b[0] = a[0] == a[1] ? '0' : '1';

    /* Second condition */
    for(int i = 1; i < d - 1; i++) {
        b[i] = a[i] == a[i+1] && a[i] == a[i - 1] ? '0' : '1';
    }

    /* Third condition */
    b[d - 1] = a[d - 1] == a[d - 2] ? '0' : '1';

    /* Print the answer */
    printf("%s\n", b);
}

PPCG में आपका स्वागत है :)
झबरा

0

एपीएल + विन, 29 बाइट्स

(↑b),(×3|3+/v),¯1↑b←×2|2+/v←⎕

अंकों के वेक्टर के रूप में स्क्रीन इनपुट के लिए संकेत और अंकों के एक वेक्टर को आउटपुट करता है।

व्याख्या

b←×2|2+/v signum of 2 mod sum of successive pairs of elements

×3|3+/v signum of 3 mod sum of successive triples of elements

(↑b),...., ¯1↑b concatenate first and last elements of b for end conditions

0

SNOBOL4 (CSNOBOL4) , 273 बाइट्स

	I =INPUT
	D =SIZE(I)
N	P =P + 1
	EQ(P,1)	:S(S)
	EQ(P,D)	:S(E)
	I POS(P - 2) LEN(2) . L
	I POS(P - 1) LEN(2) . R
T	Y =IDENT(L,R) Y 0	:S(C)
	Y =Y 1
C	EQ(P,D) :S(O)F(N)
S	I LEN(1) . L
	I POS(1) LEN(1) . R :(T)
E	I RPOS(2) LEN(1) . L
	I RPOS(1) LEN(1) . R :(T)
O	OUTPUT =Y
END

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

	I =INPUT			;* read input
	D =SIZE(I)			;* get the string length
N	P =P + 1			;* iNcrement step; all variables initialize to 0/null string
	EQ(P,1)	:S(S)			;* if P == 1 goto S (for Start of string)
	EQ(P,D)	:S(E)			;* if P == D goto E (for End of string)
	I POS(P - 2) LEN(2) . L		;* otherwise get the first two characters starting at n-1
	I POS(P - 1) LEN(2) . R		;* and the first two starting at n
T	Y =IDENT(L,R) Y 0	:S(C)	;* Test if L and R are equal; if so, append 0 to Y and goto C
	Y =Y 1				;* otherwise, append 1
C	EQ(P,D) :S(O)F(N)		;* test if P==D, if so, goto O (for output), otherwise, goto N
S	I LEN(1) . L			;* if at start of string, L = first character
	I POS(1) LEN(1) . R :(T)	;* R = second character; goto T
E	I RPOS(2) LEN(1) . L		;* if at end of string, L = second to last character
	I RPOS(1) LEN(1) . R :(T)	;* R = last character; goto T
O	OUTPUT =Y			;* output
END


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