ভাঁজ নম্বর


37

এটি কোনও ভাঁজ নম্বর কিনা তা নির্ধারণ করে একটি নম্বর দেওয়া।

একটি ভাঁজ নম্বর এমন একটি সংখ্যার মতো যে আপনি যদি এটি বাইনারি উপস্থাপনা নেন এবং এটি অর্ধেক অংশে "ভাঁজ" করেন, এটি সংখ্যার প্রথমার্ধের XNOR গুণনের ফলস্বরূপ এবং দ্বিতীয়ার্ধের সাথে এর বিপরীতে অঙ্কগুলি সহ, আপনি পাবেন শূন্য।

বাইনারিতে যদি সংখ্যাটির একটি বিজোড় সংখ্যা থাকে তবে এর মাঝারি সংখ্যাটি 1 হতে হবে এবং ভাঁজ করার সময় তা উপেক্ষা করা হবে।

যেহেতু এটি কিছুটা বিভ্রান্তিকর হতে পারে আমি কয়েকটি উদাহরণ দেব:

178

178 এর বাইনারি উপস্থাপনা হ'ল

10110010

এটি ভাঁজ করতে আমরা প্রথমে এটি অর্ধেক বিভক্ত

1011 0010

আমরা দ্বিতীয়ার্ধকে বিপরীত করি

1011
0100

এবং আমরা দুটি অংশ XNOR:

0000

এটি শূন্য তাই এটি একটি ভাঁজ নম্বর।

1644

1644 এর বাইনারি উপস্থাপনা হ'ল

11001101100

এটি ভাঁজ করতে আমরা প্রথমে এটি অর্ধেক বিভক্ত

11001 1 01100

মাঝখানের বিটটি 1 তাই আমরা এটিকে ফেলে দিই।

11001 01100

আমরা দ্বিতীয়ার্ধকে বিপরীত করি

11001
00110

এবং আমরা দুটি অংশ XNOR:

00000

এটি শূন্য তাই এটি একটি ভাঁজ নম্বর।

4254

4254 এর বাইনারি উপস্থাপনা হ'ল

1000010011110

এটি ভাঁজ করতে আমরা প্রথমে এটি অর্ধেক বিভক্ত

100001 0 011110

মাঝের বিটটি 0 তাই এটি কোনও ভাঁজ নম্বর নয়।

কার্য

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

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

এখানে প্রথম 99 ভাঁজ নম্বর রয়েছে:

[1, 2, 6, 10, 12, 22, 28, 38, 42, 52, 56, 78, 90, 108, 120, 142, 150, 170, 178, 204, 212, 232, 240, 286, 310, 346, 370, 412, 436, 472, 496, 542, 558, 598, 614, 666, 682, 722, 738, 796, 812, 852, 868, 920, 936, 976, 992, 1086, 1134, 1206, 1254, 1338, 1386, 1458, 1506, 1596, 1644, 1716, 1764, 1848, 1896, 1968, 2016, 2110, 2142, 2222, 2254, 2358, 2390, 2470, 2502, 2618, 2650, 2730, 2762, 2866, 2898, 2978, 3010, 3132, 3164, 3244, 3276, 3380, 3412, 3492, 3524, 3640, 3672, 3752, 3784, 3888, 3920, 4000, 4032, 4222, 4318, 4462, 4558]

4 কি ভাঁজ নম্বর নয়?
আদনান

1
@ আদনান মাঝের বিটটি 0, তাই না। (যদিও এটির মতো তৃতীয় কাজের উদাহরণ থাকা উচিত)) একইটি ১৮ এর জন্য
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার আহ, আমি সেই অংশটি মিস করেছি। ধন্যবাদ :)
আদনান

1
কেন মাঝারি সংখ্যাটি এক হতে হবে (বিজোড় অঙ্কের বাইনারি # এর মধ্যে)? যে নির্বিচারে ছিল বা কারণ ছিল?
গ্রেশিফট

3
@ টিএমআরএক্সডিডি যদি আপনি বিপরীত সংখ্যাগুলি যোগ করে কোনও সংখ্যা ভাঁজ করার চেষ্টা করেন তবে কেন্দ্রে একটি সংখ্যার সাথে আপনি একটি সংখ্যক স্ট্রিং পাবেন। এটির কেন্দ্রে যদি শূন্য থাকে তবে আপনি ফলাফলটিতে শূন্যের সাথে শেষ করবেন।
গম উইজার্ড

উত্তর:


12

জেলি , 9 বাইট

Bœs2µḢ^UȦ

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

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

Bœs2µḢ^UȦ  Main link. Argument: n

B          Binary; convert n to base 2.
 œs2       Evenly split 2; split the base 2 array into chunks of equal-ish length.
           For an odd amount of digits, the middle digit will form part of the
           first chunk.
    µ      Begin a new, monadic chain. Argument: [A, B] (first and second half)
     Ḣ     Head; remove and yield A.
       U   Upend; reverse the digits in [B].
      ^    Perform vectorized bitwise XOR of the results to both sides.
           If A is longer than B, the last digit will remain untouched.
           n is a folding number iff the result contains only 1's.
        Ȧ  Octave-style all; yield 1 iff the result does not contain a 0.

খুব নিশ্চিত যে আমি চেষ্টা করেছি, ওহ ভাল :)
জোনাথন অ্যালান

9

05 এ বি 1 ই , 13 12 বাইট

কোড:

bS2ä`R0¸«s^P

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

প্রথমত, আমরা ব্যবহার করে সংখ্যাটি বাইনারি রূপান্তর করি b1644 হয়ে 11001101100 । আমরা এটি দিয়ে দুটি টুকরো টুকরো টুকরো করলাম । উদাহরণস্বরূপ, 11001101100 হয়ে উঠবে:

[1, 1, 0, 0, 1, 1]
[0, 1, 1, 0, 0]

যদি অসম সংখ্যাতে বিট থাকে তবে প্রথম অংশটি অতিরিক্ত বিট গ্রহণ করবে। আমরা Rশেষ স্ট্রিংটি evers এবং ব্যবহার করে একটি শূন্য যুক্ত করি 0¸«। এর কারণ হ'ল মাঝারি বিটটি 1 ( 1 এক্সওর 0 = 1 এবং 0 এক্সওর 0 = 0 ) হলে কেবল সত্যবাদী ফলাফল দেওয়া । যদি মাঝারি বিট না থাকে, 05AB1E কেবল শেষ বিটটিকে উপেক্ষা করবে (শূন্য যা সংযুক্ত করা হয়েছিল):

[1, 1, 0, 0, 1, 1]
[0, 0, 1, 1, 0, 0]

আমাদের শেষ কাজটি করতে হবে একটি এলিমেন্ট-ভিত্তিক এক্সওআর করা এবং ফলাফলটির পণ্য নেওয়া। যদি খুব বেশি একটি উপাদান থাকে তবে প্রোগ্রামটি শেষ উপাদানটিকে ছাড়বে ( [1, 0, 0] XOR [0, 1] = [1, 1]) উদাহরণস্বরূপ:

[1, 1, 0, 0, 1, 1]
[0, 0, 1, 1, 0, 0] XOR

হয়ে:

[1, 1, 1, 1, 1, 1]

এবং এর গুণফল 1 , যা সত্য y


খুব সুন্দর! খুব খারাপ sদরকার।
এমিগিনা

@ এমিগনা হ্যাঁ, আমার কিছুটা সময় ঠিক করা উচিত। এটি আমাকে অন্যান্য কমান্ডগুলির জন্য কিছুটা অনুপ্রেরণাও দিয়েছে: পি
আদনান

হ্যাঁ, আমি প্রথম দিকে এখানে 05AB1E চেষ্টা করে এসেছি, এইটি বরং শক্ত ছিল। bÐg;ôসতেজ করার আগে এবং যতক্ষণ না পেরেছি আপনি তা পেরে গেছেন। দুর্দান্ত উত্তর, আমাকে শিখতে সহায়তা!
ম্যাজিক অক্টোপাস উরন

@ কারাসোকম্পুটিং ধন্যবাদ! নতুন লোকেরা 05AB1E :) এ আগ্রহী দেখে এটি সর্বদা সুন্দর। আপনার যদি কোনও প্রশ্ন থাকে তবে আপনি সর্বদা এই চ্যাটরুমে জিজ্ঞাসা করতে পারেন ।
আদনান

ওহ বিষ্ঠা! এটি ছিল অন্যরকম প্রশ্ন! আমি "সুপার ভাঁজ" প্রশ্নে ছিলাম। আমি সেই সমাধানটির উত্তরও প্রসারিত করার চেষ্টা করেছি, তবে পুনরাবৃত্তি আরও চ্যালেঞ্জক।
ম্যাজিক অক্টোপাস উরন

9

জাভা 7, 152 145 142 138 134 বাইট

boolean f(Long a){byte[]b=a.toString(a,2).getBytes();int i=0,l=b.length,z=l%2<1?1:b[l/2]-48;for(;i<l/2;)z*=b[i]-b[l-++i];return z!=0;}

স্ট্রিংয়ের উপরে লুপগুলি যেমন প্যালিনড্রোমের মতো হবে, জিরো খুঁজছে। বারবার গুণ করে ট্র্যাক রাখে, তাই আপনাকে যা করতে হবে তা পরীক্ষা শেষ পর্যন্ত শূন্য নয়।

স্ক্রোল বার ছাড়া:

boolean f(Long a){
    byte[]b=a.toString(a,2).getBytes();
    int i=0,l=b.length,z=l%2<1?1:b[l/2]-48;
    for(;i<l/2;)
        z*=b[i]-b[l-++i];
    return z!=0;
}

" তবে অবশ্যই গল্ফ করা যেতে পারে " আপনার বর্তমান উত্তরটি আরও গল্ফ করা যেতে পারে বলে আমি মনে করি না তবে আমি ভুল প্রমাণিত হতে চাই। +1 (পিএস: আপনার অগলিত অংশে দুটি বন্ধের বন্ধনী রয়েছে))
কেভিন ক্রুইজসেন

byte[]b=(a+"").getBytes();এর চেয়ে কম char[]b=a.toString(a,2).toCharArray();এবং এখনও কাজ করে বলে মনে হচ্ছে (-12 বাইট)।
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুইজসেন এটি বাইনারি স্ট্রিং এএএএফসিটি নয়, তবে আমি মনে করি getBytesএখনও এই চরটি নিয়ে কাজ করতে পারে []। ধন্যবাদ :)
জিওবিটস

@ কেভিন ক্রুজসেন হ্যাঁ, বুঝতে পেরেছেন এবং মন্তব্য সরানো হয়েছে> _ <।
ম্যাজিক অক্টোপাস উরন

@ জিওবিটস: যেহেতু পদ্ধতিটি কোনও সত্যবাদী বা মিথ্যা মানগুলি ফিরিয়ে আনতে পারে, আপনি কেবল zএকটি ইনট হিসাবে ফিরে আসতে পারেন ( 0মিথ্যাচারের জন্য, সত্যবাদীর জন্য অন্য কোনও) - আপনাকে কয়েকটা বাইট সংরক্ষণ করবে।
shooqie

9

জাভাস্ক্রিপ্ট (ES6), 61 57 52 বাইট

পুনরাবৃত্তি গণনা:

(bit(N) XOR bit(0)) AND (bit(N-1) XOR bit(1)) AND (bit(N-2) XOR bit(2)) etc.

Nইনপুটটিতে সর্বোচ্চ বিটের সেটটি কোথায় রয়েছে।

ইনপুট বিট একটি বিজোড় সংখ্যা থাকে, তাহলে মধ্যম বিট সঙ্গে XOR'ed হয় অনির্দিষ্ট (মান দ্বারা ফিরে pop()যা অপরিবর্তিত দেয় একটি খালি অ্যারে দিকে)। সুতরাং, একটি 0মাঝারি বিট আউটপুট সাফ করে এবং একটি 1মাঝারি বিট অন্যান্য ক্রিয়াকলাপগুলির ফলাফলকে পরিবর্তন করে না - যা কোনও ভাঁজ সংখ্যার চ্যালেঞ্জ সংজ্ঞার সাথে সামঞ্জস্যপূর্ণ।

f=(n,[a,...b]=n.toString(2))=>a?(a^b.pop())&f(n,b):1

// testing integers in [1 .. 99]
for(var i = 1; i < 100; i++) {
  f(i) && console.log(i);
}


নিস! আপনি কী ব্যাখ্যা করতে পারেন যে এটি কীভাবে মধ্যম বিটটিকে আমলে নেয়?
ইটিএইচ প্রোডাকশনস

@ ইথ প্রডাকশনস - অবশ্যই আমি সে সম্পর্কে একটি নোট যুক্ত করেছি।
আর্নৌল্ড

9

পাইথন 2, 57 বাইট

s=bin(input())[2:]
while''<s!='1':s[-1]==s[0]<_;s=s[1:-1]

প্রস্থান কোডের মাধ্যমে আউটপুট : ফ্যালসির জন্য ত্রুটি, এবং সত্যের পক্ষে কোনও ত্রুটি।

ইনপুটটিকে বাইনারিতে রূপান্তর করে। প্রথম এবং শেষের অক্ষরটি অসম কিনা তা পরীক্ষা করে এবং সেই অক্ষরগুলি সরিয়ে দেওয়ার পরে এটি পুনরুক্ত করে।

s[-1]==s[0]<_নাম না দেওয়া স্বতন্ত্র ভেরিয়েবলটি মূল্যায়ন করার চেষ্টা করে যদি প্রথম এবং শেষ অক্ষরটি অসম হয় তবে তুলনাটি একটি ত্রুটি দেয় _। যদি তারা সমান হয় তবে বৈষম্যের শৃঙ্খলাটি পরিবর্তে সংক্ষিপ্তসার্চিত হয়। আমরা যখন মাঝারি উপাদানের কাছে পৌঁছে যাই 1, whileলুপটি ঠিক আছে হিসাবে বিশেষ ক্ষেত্রে এটি শেষ হয়।

আমি সন্দেহ করি যে বিশুদ্ধ গাণিতিক পদ্ধতিটি f=lambda n,r=0:...f(n/2,2*r+~n%2)...শেষ থেকে বাইনারি অঙ্কগুলি ফ্লিপ করা এবং বিপরীত করা থেকে দূরে রাখতে পছন্দ করবে nএবং কখন এবং rকেন্দ্রের সমান হবে তা সনাক্ত করব 1। নেতৃস্থানীয় শূন্য এবং কেন্দ্রের সাথে যদিও সূক্ষ্মতা রয়েছে।


8

পাইথন 2, 94 79 72 67 বাইট

F=lambda s:s in'1'or(s[0]!=s[-1])*F(s[1:-1])
lambda n:F(bin(n)[2:])

@ এক্সনোরকে ধন্যবাদ 12 বাইট সংরক্ষণ করা হয়েছে

দ্বিতীয় লাইনে একটি নামহীন ফাংশন সংজ্ঞায়িত করে।

ব্যাখ্যা (কিছু সাদা জায়গা যুক্ত করে):

F = lambda s:                                        # We define a function, F, which takes one argument, the string s, which returns the following:
             s in'1'                                 # Gives true if s is '' or s is '1', the first case is a base case and the second is for the middle bit case.
                     or(s[0] != s[-1])               # Or the first and last are different
                                      * F(s[1:-1])   # And check if s, without the first and last element is also foldable.
lambda n: F(bin(n)[:-2])                             # The main function, which calls F with the argument in binary form.

এখানে চেষ্টা করুন!


4
s==''or s=='1'হতে পারেs in'1'
xnor

ওহ তাই অনুরূপ - দুর্দান্ত মন ...
জোনাথন অ্যালান

1
andগাণিতিক হতে পারে *। এছাড়াও, fনামবিহীন হতে অনুমোদিত।
xnor

6

হাস্কেল, 89 88 86 বাইট

f n|n<2=[n]|1>0=mod n 2:f(div n 2)
g n=elem(product$zipWith(+)(f n)$reverse$f n)[1,2]

বিপরীতের সাথে বিট উপস্থাপনার সংমিশ্রণ করে এবং পণ্যটি গ্রহণ করে কাজ করে। যদি এটি 1 বা 2 হয় তবে নম্বরটি ভাঁজ সংখ্যা (1 এমনকি যদি বিটগুলি যে ভাঁজ হয়, 2 যদি বিজোড় বিট থাকে এবং মাঝখানে একটি থাকে) is


5

পাইথন 2, 100 99 95 94 বাইট

এটি কিছুটা দীর্ঘ অনুভব করে তবে আমি এতে কাজ করে যাব :) অন্যথায় 1, সংখ্যাটি ভাজ করা যায় তবে একটি মুদ্রণ করে 0

a=bin(input())[2:]
b=len(a)
print(a[b/2]>=`b%2`)*all(c!=d for c,d in zip(a[:b/2],a[:~b/2:-1]))

এটি পরীক্ষা এখানে!

1 বাইট সংরক্ষণের জন্য গম উইজার্ডকে ধন্যবাদ :)

রডকে 5-বাইট সংরক্ষণের জন্য ধন্যবাদ! :)


আপনি প্রতিস্থাপন করতে পারেন b-1সঙ্গে~b
গমের উইজার্ড

@ উইট উইজার্ড দুর্দান্ত, ধন্যবাদ!
কেডে

আপনি প্রতিস্থাপন করতে পারেন [1,a[b]>'0'][len(a)%2]সঙ্গে(a[b]>=`len(a)%2`)
ডান্ডা

এছাড়াও আপনি 1 বাইট সংরক্ষণ করে ` e=len(a)পরিবর্তন করতে যোগ করতে পারেন b=e/2 `e%2। : এবং তারপর উভয় পাইথন উত্তর সংযুক্ত করা হবে গ
ডান্ডা

2
@ রড আশ্চর্য: ডি ব্যতীত এখন অন্য উত্তরগুলি আমাকে চূর্ণ করছে;)
কেড


4

জেলি , 13 বাইট

Bœs2U0¦z0^/€Ạ

ট্রাইআইটিঅনলাইন
বা 4558 অবধি শর্তাবলী মিলছে

কিভাবে?

Bœs2U0¦z0^/€Ạ - Main link: n
B             - binary
 œs2          - split into 2 slices (odd length will have first longer than second)
     0¦       - apply to index 0 (the right hand one)
    U         - reverse
       z0     - zip together with filler 0 (thus central 1 or 0 will pair with 0)
          /€  - reduce with for each
         ^    -     XOR
            Ạ - All truthy?

4

পার্ল, 46 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

STDIN এ নম্বরটি দিয়ে চালান

folding.pl <<< 178

folding.pl:

#!/usr/bin/perl -p
$_=($_=sprintf"%b",$_)<s%.%!/\G1$/^$&^chop%eg

আমি এটি পার্ল বাগ হিসাবে বিবেচনা করি যা এটি এমনকি কার্যকর করে। অভ্যন্তরীণ $_একবার পরিবর্তন হওয়ার পরে ম্যাচের অবস্থানের আপডেটগুলি পাওয়া উচিত নয়। এই প্রোগ্রামে ম্যাচের অবস্থানটি আসলে শেষের বাইরে চলে যায়$_


সুন্দর. আমি করতে পারি perl -pe '$_=sprintf("%b",$_)=~/^(.*)1?(??{reverse$^N=~y%01%10%r})$/'
দাদা

4

ব্র্যাচল্যাগ , 16 বাইট

ḃḍ{↔|h1&b↔}ᵗz₂≠ᵐ

এটি অনলাইনে বেশিরভাগ কাজ করে না ...

ইনপুট ভেরিয়েবলের মাধ্যমে ইনপুট নেয় এবং সাফল্য বা ব্যর্থতার মাধ্যমে আউটপুট দেয়। এটি z₂৩০ শে এপ্রিল থেকে ভাষায় প্রচুর পরিমাণে নির্ভর করে , তবে আমরা টিআইওতে এটি টানতে বলি ভুলে গিয়েছি তাই আপাতত এটি কেবলমাত্র ভাষার একটি স্থানীয় ইনস্টলেশন কাজ করে। যে কোনও উপায়ে এটি সম্ভবত অত্যধিক নিষ্পাপ পদ্ধতির।

                    The input
ḃ                   's binary representation
 ḍ                  split in half
  {       }ᵗ        with its second half
   ↔|               either reversed, or
     h1             if it starts with 1
       &b           relieved of its first element
         ↔          and then reversed
              ≠     has no duplicate elements
            z  ᵐ    in any pair of elements zipped from the two halves
             ₂      which are equal in length.

ব্র্যাচল্যাগ (টিআইওতে), 19 বাইট

ḃḍ{↔|h1&b↔}ᵗlᵛ↖Lz≠ᵐ

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

lᵛ↖Lzকার্যত সমান z₂(আপনি যদি অন্য কোথাও ভেরিয়েবল এল ব্যবহার না করেন) তবে এটি তিন বাইটের বেশি দীর্ঘ হয়।


3

পাইথন 2, 76 71 69 বাইট

-5 বাইট @Dennis ধন্যবাদ ( ''বর্তমানে হয় '1', তাই প্রতিস্থাপন in('','1')সঙ্গে in'1')
-2 (, ব্যবহার গুণ @xnor ধন্যবাদ বাইট (...)*স্থানে and)

f=lambda n:f(bin(n)[2:])if n<''else n in'1'or(n[0]!=n[-1])*f(n[1:-1])

Ideone

রিকার্সিভ ফাংশন, প্রথম কলটিতে nএকটি নম্বর তাই এটি খালি স্ট্রিংয়ের চেয়ে কম হিসাবে মূল্যায়ন করে if n<'', এবং ফাংশনটি আবার বলা হয় তবে nবাইনারি স্ট্রিংয়ে কাস্ট করে; লেজটি হয় একটি খালি স্ট্রিং (এমনকি বিট-দৈর্ঘ্য) বা মাঝের বিট, যা খালি বা এটির জন্য সত্য ফিরে আসে '1'; পথে নামার পথে এটি অসমতার জন্য বাইরের বিটগুলি পরীক্ষা করে (এক্সওর এর সমতুল্য) এবং অভ্যন্তরীণ বিটগুলিতে পুনরাবৃত্তি করে n[1:-1],।


1
আমি মনে করি n in'1'কাজ করে।
ডেনিস

উজ্জ্বল, আমি মনে করি ''এটি উপস্থিত ছিল না 'blah', তবে হ্যাঁ এটি :)
জোনাথন অ্যালান

1
andগাণিতিক হতে পারে *
xnor

3

পাইথন 2, 63 বাইট

s=bin(input())[2:]
while s[0]!=s[-1]:s=s[1:-1]or'1'
print'1'==s

প্রিন্ট Trueবা False। বাইনারি উপস্থাপনা নেয় sএবং বার বার প্রথম এবং শেষ অক্ষর যতক্ষণ না তা অসম হয় removed যা অবশিষ্ট রয়েছে তা খালি স্ট্রিং বা কেন্দ্রিয় কিনা তা পরীক্ষা করে 1। এটি রূপান্তর ''করে '1'এবং ফলাফলের সমান কিনা তা পরীক্ষা করে এটি করা হয় '1', যা খালি স্ট্রিংয়ে সূচী ত্রুটি এড়ায়।


3

পাওয়ারশেল ভি 2 +, 143 বাইট

দুটি সম্ভাব্য পন্থা, উভয় একই বাইট গণনা।

পদ্ধতি 1:

param($n)if($n-eq1){$n++}$o=1;0..(($b=($n=[convert]::ToString($n,2)).length-1)/2-!($b%2))|%{$o*=$n[$_]-ne$n[$b-$_]};$o*(+"$($n[$b/2])",1)[$b%2]

ইনপুট নেয় $n, যদি এটি -eqইউল হয় 1(এই অ্যালগোরিদমের জন্য একটি বিশেষ ক্ষেত্রে), এটি বাড়িয়ে তুলুন। $oইউপুট সেট 1(যেমন, সত্যবাদী হিসাবে ধরে নেওয়া) সেট করুন, তারপরে বাইনারিতে সম্পাদিত 0ইনপুট সংখ্যার মাঝের পয়েন্ট থেকে লুপ করুন [convert]-!($b%2)বিজোড় দৈর্ঘ্যের বাইনারি সংখ্যার জন্য অ্যাকাউন্টে নোট করুন ।

প্রতিটি পুনরাবৃত্তি, আমরা বর্তমান অঙ্কটি $n[$_]শেষ থেকে একই দৈর্ঘ্যের সাথে অঙ্কের সাথে তুলনা করি $n[$b-$_]এবং বুলিয়ান ফলাফলকে $o( -andতাদের সকলের উপর মূলত একটি সম্পাদন করে) এর মধ্যে গুণ করি। লুপটি শেষ হয়ে গেলে, আমাদের মাঝামাঝি বাইনারি অঙ্কের সম্ভাব্যভাবে অ্যাকাউন্ট করতে হবে, এটি শেষের দিকে সিউডো-টের্নারি (এর মাধ্যমে সূচকযুক্ত $b%2) হবে। এটি 1বা 0পাইপলাইনে রেখে গেছে, এবং আউটপুট অন্তর্ভুক্ত।


পদ্ধতি 2:

param($n)for($n=[convert]::ToString($n,2);$n.Length-gt2){if($n[0]-ne$n[-1]){$n=$n[1..($n.Length-2)]}else{0;exit}}($n-join'+'|iex)-eq1-or$n-eq10

ইনপুট নেয় এবং [convert]বাইনারি সংখ্যায় একই প্রক্রিয়া করে । তারপর আমরা একটি আছেন forতাই যতদিন লুপ .lengthবাইনারি স্ট্রিং হয় -greater tহান 2। যখন আমরা লুপটিতে থাকি, প্রথম $n[0]এবং শেষ $n[-1]সংখ্যাটি যদি -nকোট eকোয়ালিটি হয় তবে এই দুটি অঙ্কটি স্লাইস করে $nএটিকে পুনরায় স্টোর করুন $n। অন্যথায়, আউটপুট 0এবং exit। একবার আমরা লুপ ফুরিয়েছে, আমরা হয় আছে (একটি অ্যারের 1, 1,0, 0,1, 1,1, অথবা 0,0), অথবা দুই জন্য বাইনারি স্ট্রিং 10অথবা 3 11। সুতরাং, আমাদের সেই দুটি সম্ভাবনার পরীক্ষা করা দরকার। প্রথমটির জন্য, আমরা -join $nএকসাথে +এবং ফলাফলটি মূল্যায়ন এবং এটি পরীক্ষা করে1(এই অ্যারে জন্য সত্য 1, 1,0এবং 0,1, কিন্তু $falseঅ্যারে জন্য 0,0এবং 1,1বা স্ট্রিং 10বা 11)। অপরার্ধ -orপরীক্ষা করছে কিনা $nহয় -eqকরতে ual 10(অর্থাত, ইনপুট 2)। যে বুলিয়ান পাইপলাইনে রেখে গেছে, এবং আউটপুট অন্তর্ভুক্ত।


3

সিজেম , 13 বাইট

ri2b_W%.+:*3&

এটি অনলাইন চেষ্টা করুন! অথবা একটি নির্দিষ্ট নম্বর পর্যন্ত ভাঁজ সংখ্যাগুলির একটি তালিকা তৈরি করুন


ri2b   e# convert input to binary
_W%.+  e# flip and sum (if folding all bits are 1 except middle)
:*     e# product is 0 or power of 2 (2 if middle folds)
3&     e# keep only 1 or 2, everything else becomes 0 (false)

2

এমএটিএল , 16 বাইট

tBn2/kW&\hBZ}P=~

সত্যবাদিতা সকলের সাথে একটি অ্যারে। সত্যতা / মিথ্যা মানদণ্ড এখানে পরীক্ষা করুন

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

ব্যাখ্যা

1644উদাহরণ হিসাবে ইনপুট ব্যবহার করা যাক ।

t     % Imolicitly take input. Duplicate
      %   STACK: 1644, 1644
Bn    % Number of digits of binary expansion
      %   STACK: 1644, 11
2/k   % Divide by 2 and round down
      %   STACK: 1644, 5
W     % 2 raised to that
      %   STACK: 1644, 32
&\    % Divmod
      %   STACK: 12, 51
h     % Concatenate horizontally
      %   STACK: [12 51]
B     % Binary expansion. Each numnber gives a row, left-padded with zeros if needed
      %   STACK: [0 0 1 1 0 0; 1 1 0 0 1 1]
Z}    % Split into rows
      %   STACK: [0 0 1 1 0 0], [1 1 0 0 1 1]
P     % Reverse
      %   STACK: [0 0 1 1 0 0], [1 1 0 0 1 1]
=~    % True for entries that have different elements
      %   STACK: [1 1 1 1 1 1]
      % Implicitly display

2

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

for($r=1;$i<($l=strlen($b=decbin($argv[1])))>>1;)$r*=$b[$i]^1^$b[$l-++$i]^1;$r*=$l%2?$b[$i]:1;echo$r;

বা লগ সঙ্গে

for($r=1,$s=log($n=$argv[1],2)^0;2*$i<$s;)$r*=($n>>$i)%2^($n>>$s-$i++)%2;$s%2?:$r*=($n>>$i)%2;echo$r;

অ্যারে সহ 108 বাইটস

for($r=1,$a=str_split(decbin($argv[1]));$a;)$r*=array_pop($a)!=($a?array_shift($a):0);$r*=$a?$a[0]:1;echo$r;

সত্য মান <10000

1,2,6,10,12,22,28,38,42,52,56,78,90,108,120,142,150,170,178,204,212,232,240,286,310,346,370,412,436,472,496,542,558,598,614,666,682,722,738,796,812,852,868,920,936,976,992,1086,1134,1206,1254,1338,1386,1458,1506,1596,1644,1716,1764,1848,1896,1968,2016,2110,2142,2222,2254,2358,2390,2470,2502,2618,2650,2730,2762,2866,2898,2978,3010,3132,3164,3244,3276,3380,3412,3492,3524,3640,3672,3752,3784,3888,3920,4000,4032,4222,4318,4462,4558,4726,4822,4966,5062,5242,5338,5482,5578,5746,5842,5986,6082,6268,6364,6508,6604,6772,6868,7012,7108,7288,7384,7528,7624,7792,7888,8032,8128,8318,8382,8542,8606,8814,8878,9038,9102,9334,9398,9558,9622,9830,9894

2

জুলিয়া , 66 বাইট

c(s)=s==""||s=="1"||(s[1]!=s[end]&&c(s[2:end-1]))
f(x)=c(bin(x))

আমার প্রথম গল্ফ! একই দৈর্ঘ্যের পাইথন সমাধানের মতো একইভাবে কাজ করে, ভাষার কারণে সামান্য পার্থক্য (যদিও আমি নিজে থেকে এটি নিয়ে এসেছি, যদিও ...)।

ব্যাখ্যা:

c(s) = s == "" || # Base case, we compared all the digits from 
                  # both halves.
       s == "1" || # We compared everything but left a 1 in the middle
       (s[1] != s[end] &&  # First digit neq last digit (XNOR gives 0).
        c(s[2:end-1]))     # AND the XNOR condition is satisfied for the  
                           # 2nd to 2nd to last digit substring.
f(x) = c(bin(x))  # Instead of a string f takes an integer now.

2

সি, 223 201 189 194 178 বাইট

i,j,m,l,r;f(n){for(m=j=1,i=n;i/=2;++j);for(l=r=i=0;i<j/2;i++)r|=n&m?1<<j/2-i-1:0,m*=2;i=(j&1&&n&m)?i+1:(j&1)?l=r:i;n>>=i;for(m=1;i<j;i++)l|=n&m,m*=2;return !(~(l^r)&(1<<j/2)-1);}

ব্রুট ফোর্স অ্যালগোরিদম। আসুন দেখি এটি কতদূর গল্ফ করা যায়।

আরও ভাল পরীক্ষার সেটআপ বাগফিক্স ...

 main()
 {
    int t, s, u, testSet[] = 
    {
    1, 2, 6, 10, 12, 22, 28, 38, 42, 52, 56, 78, 90, 108, 120,
    142, 150, 170, 178, 204, 212, 232, 240, 286, 310, 346, 370,
    412, 436, 472, 496, 542, 558, 598, 614, 666, 682, 722, 738,
    796, 812, 852, 868, 920, 936, 976, 992, 1086, 1134, 1206,
    1254, 1338, 1386, 1458, 1506, 1596, 1644, 1716, 1764, 1848,
    1896, 1968, 2016, 2110, 2142, 2222, 2254, 2358, 2390, 2470,
    2502, 2618, 2650, 2730, 2762, 2866, 2898, 2978, 3010, 3132,
    3164, 3244, 3276, 3380, 3412, 3492, 3524, 3640, 3672, 3752,
    3784, 3888, 3920, 4000, 4032, 4222, 4318, 4462, 4558
    };


    for (u=s=0,t=1;t<=4558;t++)
    {
        if (f(t))
        {
          u++;            
          if (testSet[s++]!=t)
              printf("BAD VALUE %d %d\n", testSet[s-1], t);
        }
    }

    printf("%d == %d Success\n", u,
           sizeof(testSet)/sizeof(testSet[0]));

}

2

এমএটিএল , 13 বাইট

BttP=<~5Ms2<*

সত্যবাদিতা সকলের সাথে একটি অ্যারে। সত্যতা / মিথ্যা মানদণ্ড এখানে পরীক্ষা করুন

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

ব্যাখ্যা

1644উদাহরণ হিসাবে ইনপুট ব্যবহার করা :

B     % Implicit input. Convert to binary
      %   STACK: [1 1 0 0 1 1 0 1 1 0 0]
t     % Duplicate
      %   STACK: [1 1 0 0 1 1 0 1 1 0 0], [1 1 0 0 1 1 0 1 1 0 0]
tP=   % Element-wise compare each entry with that of the reversed array
      %   STACK: [1 1 0 0 1 1 0 1 1 0 0], [0 0 0 0 0 1 0 0 0 0 0]
<~    % True (1) if matching entries are equal or greater
      %   STACK: [1 1 1 1 1 1 1 1 1 1 1]
5M    % Push array of equality comparisons again
      %   STACK: [1 1 1 1 1 1 1 1 1 1 1], [0 0 0 0 0 1 0 0 0 0 0]
s     % Sum of array
      %   STACK: [1 1 1 1 1 1 1 1 1 1 1], 1
2<    % True (1) if less than 2
      %   STACK: [1 1 1 1 1 1 1 1 1 1 1], 1
*     % Multiply
      %   STACK: [1 1 1 1 1 1 1 1 1 1 1]
      % Implicitly display

1

জাভাস্ক্রিপ্ট, 71 বাইট

(i,n=i.toString(2))=>/^(1*)2?\1$/.test(+n+ +n.split``.reverse().join``)

একটি বেনামী ফাংশন সংজ্ঞায়িত করে।

এই পদ্ধতিটি সংক্ষিপ্ততম নাও হতে পারে তবে যতদূর আমি জানি এটি অনন্য। এটি বাইনারিতে সংখ্যার বিপরীতে যুক্ত হয়, তাদেরকে দশমিক হিসাবে বিবেচনা করে, তারপরে ফলাফলটি কোনও রেজেক্স ব্যবহার করে বৈধ কিনা তা পরীক্ষা করে।


1

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

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

.+
$*
+`(1+)\1
${1}0
01
1
^((.)*?)1??((?<-2>.)*$.*)
$1¶$3
O$^`.(?=.*¶)

T`01`10`^.*
^(.*)¶\1

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

অ্যানারিতে রূপান্তর করুন। বাইনারি রূপান্তর করুন। অর্ধেক সংখ্যাটি কেটে একটি মিডল 1থাকলে সেখানে সরিয়ে ফেলুন । প্রথমার্ধকে বিপরীত করুন। এরগুলি এবং শূন্যগুলি স্যুইচ করুন। উভয় অর্ধেক সমান হলে মিল।


1

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

.+
$*
+`^(1*)\1(1?)\b
$1 $.2
+`^ (.)(.*) (?!\1).$
$2
^( 1)?$

রেটিনা সম্পর্কে আমার এখনও অনেক কিছু শিখার আছে (যেমন পুনরাবৃত্তী রেজেক্স?)। ব্যাখ্যা: পদক্ষেপ 1 দশমিক থেকে আনারিতে রূপান্তর করে। পদক্ষেপ 2 আনরি থেকে সিউডো-বাইনারি রূপান্তরিত করে। পদক্ষেপ 3 যতক্ষণ না মিলছে ততক্ষণ উভয় প্রান্ত থেকে অঙ্কগুলি সরিয়ে ফেলবে। চতুর্থ পদক্ষেপটি প্রয়োজনে একটি alচ্ছিক চূড়ান্ত কেন্দ্রীয় 1 এর সাথে মেলে। সম্পাদনা করুন: @ mbomb007 ধন্যবাদ 1 বাইট সংরক্ষণ করা। আমার বাইনারি রূপান্তর থেকে অ্যানারি উন্নত করে 10 বাইট সংরক্ষণ করা হয়েছে।


প্রথম লাইন হতে পারে .*বা .+
mbomb007

1

পাইথন 2, 61 59 বাইট

শিফ্টকে গুণায় রূপান্তর করার জন্য দুটি বাইট সংরক্ষণ করা হচ্ছে

m=n=input()
i=0
while m:i*=2;i+=m&1;m/=2
print(n+i+1)&(n+i)

0একটি ভাঁজ নম্বর এবং ভাঁজবিহীন জন্য অন্য কোনও কিছুর জন্য ফেরত দেয় । বিট-টুইডলিং পদ্ধতির ব্যবহার করে।


0

সি, 65 63 বাইট

শিফ্টকে গুণায় রূপান্তর করার জন্য দুটি বাইট

i,m;
f(n){
 m=n;i=0;
 while(m)i*=2,i+=m&1,m/=2;
 return(n+i+1)&(n+i);
}

হোয়াইটস্পেস ইতিমধ্যে বাইটকাউন্ট থেকে বাদ দেওয়া হয়েছে, একটি ভাঁজ নম্বর এবং 0-ফোল্ডিংয়ের জন্য অন্য কোনও কিছুর জন্য 0 প্রদান করে। বিট-টুইডলিং পদ্ধতির ব্যবহার করে।


0

k, 77 বাইট

{X:2 0N#X@&:|\X:0b\:x;c:#:'X;$[(~*X 1)|(=). c;~|/(=).(::;|:)@'(-&/ c)#'X;0b]}

ব্যাখ্যা দ্বারা, একটি অনুবাদ q

{X:2 0N#X where maxs X:0b vs x;
  c:count each X;
  $[(not first last X)or(=). c;
    not any(=).(::;reverse)@'(neg min c)#'X;0b]
  };
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.