বাইনারি সিকোয়েন্সস


23

ডি> 1 ডিজিটের ইনপুট হিসাবে একটি বাইনারি নম্বর দেওয়া, বি এর নবম সংখ্যা সন্ধানের জন্য নিম্নলিখিত বিধি অনুসারে ডি সংখ্যা সহ একটি বাইনারি নম্বর বি আউটপুট করুন:

  • খ এর প্রথম অঙ্কটি শূন্য হয় যদি ক এর প্রথম এবং দ্বিতীয় সংখ্যা সমান হয়; অন্যথায়, এটি এক।

  • যদি 1 <এন <ডি হয়, তবে যদি (এন-1) তম, নবম এবং (এন + 1) তম অঙ্কের সমান হয়, তবে বি এর নবম সংখ্যাটি শূন্য হয়; অন্যথায়, এটি এক।

  • খ এর dth সংখ্যা শূন্য হয় যদি A এর (d-1) তম এবং dth সংখ্যা সমান হয়; অন্যথায়, এটি এক।

বিধি

স্ট্রিং / তালিকা ইনপুট / আউটপুট ফর্ম্যাট ভাল। ইনপুট / আউটপুট এর অন্য অনুমোদিত উপায় হল পূর্বের জিরোগুলির সংখ্যা (বা পূর্ববর্তী জিরোগুলির সংখ্যা অনুসরণ করে) এর পরে একটি পূর্ণসংখ্যা।

আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করুন।

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

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

আপনার আরও 10 মিনিট অপেক্ষা করা উচিত, তবে আপনি একটি টুপি পেতেন । দুর্দান্ত চ্যালেঞ্জ যদিও!
কেয়ারড কোইনরিঙ্গিংহিং

কায়ারডকোইনরিঙ্গিংহিং আমি গত বছরগুলি স্মরণ করছি ... ওহ, ভাল। :-(
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

সম্পাদনা করুন: @ janrjan জোহানসেন 4 বাইট সংরক্ষণ করেছেন ধন্যবাদ!


আপনি যদি স্ট্রিং আউটপুটটিতে স্যুইচ করতে আপত্তি করেন না, তবে "0110"!!(a+b+c)একটি বাইট সংরক্ষণ করুন।
লাইকনি

@ লাইকনি: ধন্যবাদ, তবে আমি আমার গণিতে একটি বাইটও পেয়েছি।
নিমি

2
[last s]scanrপ্রাথমিক মানে স্থানান্তরিত করা যায় ।
janrjan জোহানসেন

কি দারুন. inits (আমদানি সহ); ABS; যদি-তারপর-আর; মানচিত্র (3 নিন); zipWith; takeWhile (not.null); খণ্ড খণ্ড ( তার আমদানি সহ) ... সমস্ত গল্ফ ! গল্ফিং খ্যাতির একটি হল আছে, কোথাও, কোথাও?
নেস

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

আমার প্রচেষ্টার সাথে প্রায় একই : পি
লিকি নুন

@ লিক্যনুন সহজ চ্যালেঞ্জগুলিতে অভিন্ন কোড পাওয়া একেবারেই সাধারণ বিষয়; পি
এরিক আউটগল্ফার

2
আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
শে 26

@Cairdcoinheringaahing আপনি সম্ভবত কোডটি বুঝতে পেরেছেন তবে এরিক একটি যোগ না করা পর্যন্ত আমি সবার জন্য এটি উল্লেখ হিসাবে যুক্ত করছি (যদি তিনি করেন): .ị- সূচকটি 0.5 তে পাওয়া যায় । যেহেতু মেঝে (০.০) il সিল (০.৫) , 0 এবং 1 সূচীতে উপাদানগুলি ফেরত দেয় । জেলি হ'ল একটি সূচকযুক্ত, সুতরাং 0 আসলে শেষ উপাদানটি ধরে। জুটিটি বিপরীত করে (কারণ তারা হিসাবে প্রত্যাবর্তিত হয়েছে )। তারপরে জোড়টিকে ইনপুটটিতে যোগ দেয় এবং এটিকে 3 টি দৈর্ঘ্যের ওভারল্যাপিং স্লাইসে বিভক্ত করে তোলে (প্রতিটি তালিকার জন্য) যদি সমস্ত উপাদান সমান হয়, এবং যৌক্তিকভাবে প্রতিটিটিকে উপেক্ষা করে। last, firstjṡ3E€¬
মিঃ এক্সকোডার

6

05 এ বি 1 ই , 6 বাইট

¥0.ø¥Ā

আই / ও বিট অ্যারে আকারে।

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

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

¥       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 বাইট

এমিগিনার 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 এর ইনফিক্সগুলি তৈরির চতুর উপায়।
কোলে


2

হুশ , 15 11 বাইট

Ẋȯ¬EėSJ§e←→

একটি তালিকা হিসাবে ইনপুট নেয়, এটি অনলাইনে চেষ্টা করুন! অথবা এই এক চেষ্টা যে ইনপুট / আউটপুট জন্য ব্যবহারসমূহ স্ট্রিং।

ব্যাখ্যা

Ẋ(¬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

আই / ও বিট অ্যারে আকারে।

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

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

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

জাভাস্ক্রিপ্ট (ES6), 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}

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



আপনার উত্তর হিসাবে এটি পোস্ট করা উচিত। আমি আপনার কাজের জন্য কৃতিত্ব নিতে চাই না। s;..$;শেষে যে নির্মাণ নিফটি হয়। আমি এটা মনে রাখতে হবে।
এক্সকালি


1

জাপট , 14 13 12 বাইট

আংশিকভাবে ডেনিসের জেলি সমাধান থেকে পোর্ট করা হয়েছে। ইনপুট এবং আউটপুট হল অঙ্কের অ্যারে।

ä- pT äaT mg

ETH প্রোডাকশনগুলিতে একটি বাইট ধন্যবাদ সংরক্ষণ করা।

চেষ্টা করে দেখুন


ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট Uä-অ্যারের ডেল্টা পায়। pTঅ্যারের শেষে 0 টি ধাক্কা দেয়। äaTপরম ডেল্টাস পাওয়ার আগে অ্যারের শুরুতে প্রথমে আরও 0 যুক্ত করে। mgঅ্যারের উপাদানগুলির উপরে মানচিত্রগুলি নেতিবাচক সংখ্যার জন্য -1 হিসাবে 0, 0 বা 1 এর জন্য ধনাত্মক সংখ্যার জন্য প্রতীক প্রদান করে element


হুম, আমি অবাক হয়েছি যে এমন পদ্ধতি তৈরি করার কোনও ভাল উপায় আছে যা কোনও আইটেমকে অ্যারের শুরু এবং শেষের দিকে রাখে, যেমন 05AB1E উত্তরের মতো। আমি মনে করি এটি এটিকে 1 বাইট ছোট করবে ...
ETH প্রোডাকশনস

@ এথ প্রডাকশনগুলি, পছন্দগুলির জন্য A.ä()যা এর দ্বিতীয় যুক্তিকে প্রিপেন্ড করে, আপনি তৃতীয় যুক্তি যুক্ত করতে পারেন যা সংযুক্ত হয়ে যায়। সুতরাং, এই ক্ষেত্রে, একটি 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¤ + ọ‼ ¦ ~ একটি আর্গুমেন্ট গ্রহণ করে এমন একটি প্রোগ্রাম, বাইনারি অঙ্কের তালিকা।

~ ~ ডেল্টাস।
 0+ ~ একটি 0 যুক্ত করুন।
   0 the স্ট্যাকের একটি শূন্য চাপুন।
    ~ St স্ট্যাকের শীর্ষ দুটি আর্গুমেন্ট অদলবদল করুন।
     + ~ কনকাটেনেট (শেষ তিনটি বাইট মূলত একটি 0 প্রিপেন্ড করুন)।
      ~ ~ ডেল্টাস।
        Element ~ এবং প্রতিটি উপাদান এন এর জন্য:
       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


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