সংখ্যাটি কি 2 এর শক্তিতে বিভক্ত হতে পারে?


33

গতকাল আমার বাচ্চাটির সাথে খেলতে গিয়ে আমি তার খেলনা ট্রেনে নম্বরটি লক্ষ্য করেছি:

4281

সুতরাং আমাদের কাছে

4281
যা
4-2-8-1
বা বিভক্ত হতে পারে
22-21-23-20

এত সহজ চ্যালেঞ্জ: ইনপুট হিসাবে একটি অ-নেতিবাচক নম্বর দেওয়া, ধারাবাহিক সত্য এবং মিথ্যা মানগুলি প্রত্যাবর্তন করে যা সংখ্যার স্ট্রিং উপস্থাপনা (বেস 10 এবং অগ্রণী জিরো ব্যতীত) কোনওভাবে 2 সংখ্যায় বিভক্ত হতে পারে যা সংখ্যায় বিভক্ত হতে পারে ।

উদাহরণ:

4281      truthy (4-2-8-1)
164       truthy (16-4 or 1-64)
8192      truthy (the number itself is a power of 2)
81024     truthy (8-1024 or 8-1-02-4)
101       truthy (1-01)
0         falsey (0 cannot be represented as 2^x for any x)
1         truthy
3         falsey
234789    falsey
256323    falsey (we have 256 and 32 but then 3)
8132      truthy (8-1-32)

Tests for very large numbers (not really necessary to be handled by your code):
81024256641116  truthy (8-1024-256-64-1-1-16)
64512819237913  falsey

এটি , তাই প্রতিটি ভাষার জন্য সংক্ষিপ্ততম কোডটি জয় পেতে পারে!


2
@ স্টেভি গ্রিফিন শুরুতে আমি ইনপুট নম্বরটিকে একটি প্রমিত মানের int(4 বাইট) সীমার মধ্যে সীমাবদ্ধ করার বিষয়ে চিন্তা করেছিলাম , তবে আসলে আপনার কোডটি খুব বড় সংখ্যক সমর্থন না করলে আমার কোনও আপত্তি নেই। কেবলমাত্র আপনার উত্তরে আপনার কোডের সীমাবদ্ধতাগুলি লিখুন।
চার্লি

3
প্রস্তাবিত পরীক্ষার কেস: 101(0 এর কারণে মিথ্যা) ... বা এটি এখনও সত্য হওয়া উচিত ( 1 - 01)?
শিয়েরু আসাকোটো

1
@ শিরুআসাকোটো আমি 101বর্তমানের উত্তরগুলির সাথে কেসটি পরীক্ষা করে যাচ্ছি এবং তারা সবাই ফিরে গেছে true, কারণ এটি 1-01দুটি অংশেই বিভক্ত হতে পারে, সুতরাং আমি এই কেসটিকে সত্য বলে বিবেচনা করব।
চার্লি

6
এখানে সবার জন্য পরামর্শ হিসাবে রেখে দেওয়া। সংখ্যাটি 2: 1 এর শক্তি কিনা তা যাচাই করার জন্য এখানে তিনটি সম্ভাব্য উপায় রয়েছে) log2(n)কমা পরে দশমিক সংখ্যা নেই কিনা তা পরীক্ষা করে দেখুন । 2) পরীক্ষা করুন কিনা n AND (n-1) == 0। 3) স্কয়ার-এনআরএসের একটি তালিকা তৈরি করুন nএবং সেই তালিকায় আছেন কিনা তা পরীক্ষা করে দেখুন ।
কেভিন ক্রুইজসেন

1
অবশ্যই উপরের আমার মন্তব্যে " বর্গ-এনআরএস " " 2 পাওয়ার " হওয়া উচিত ..
>>>

উত্তর:


11

05 এ বি 1 ই , 9 8 বাইট

Ýos.œåPZ

-1 বাইট ধন্যবাদ (সত্যবাদী) এর জন্য একটি কমান্ড অনুকরণ করতে 0s এবং 1s তালিকার জন্য (সর্বাধিক) ব্যবহার করে @ এমিগানাকে ধন্যবাদ ।Zany1

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন । (দ্রষ্টব্য: тশিরোনামের 100মধ্যে 2 সংখ্যার পাওয়ারের প্রথম ইনপুট পরিমাণের পরিবর্তে কেবল 2 সংখ্যার প্রথম 100 পাওয়ার পেতে হবে It এটি 2 পাওয়ারের ইনপুট পরিমাণের সাথেও কাজ করে তবে এটি বেশ অদক্ষ এবং শক্তিশালী ইনপুট যথেষ্ট বড় হলে টিআইওতে সময়সীমা শেষ

ব্যাখ্যা:

Ý            # Create a list in the range [0,n], where n is the (implicit) input
             # (or 100 in the TIO)
             #  i.e. 81024 → [0,1,2,3,...,81024]
 o           # Raise 2 to the `i`'th power for each `i` in the list
             #  → [1,2,4,8,...,451..216 (nr with 24391 digits)]
  s          # Swap to take the input
           # Create each possible partition of this input
             #  i.e. 81024 → [["8","1","0","2","4"],["8","1","0","24"],...,["8102","4"],["81024"]]
     å       # Check for each if it's in the list of powers of 2
             #  → [[1,1,0,1,1],[1,1,0,0],...,[0,1],[0]]
      P      # Check for each inner list whether all are truthy
             #  → [0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0]
       Z     # Take the maximum (and output implicitly)
             #  → 1 (truthy)

2
ভাল, আমার সমাধানটি ছিল .œ.²1%O0å(9 টি বাইটও)। আমার ব্যর্থ হয়েছে 0, তবে।
মিঃ এক্সকডার

@ মিঃ এক্সকোডার আহ, .²1%O0পাশাপাশি বেশ স্মার্ট। আমি এটির log2মতো ব্যবহার সম্পর্কে ভেবেছিলাম .²DïQ, তবে প্রতিটি সংখ্যার জন্য এটি করার জন্য এটির চারপাশের একটি মানচিত্রের প্রয়োজন হবে এবং এটি প্রকৃতপক্ষে প্রান্তের ক্ষেত্রে কাজ করে না 0
কেভিন ক্রুইজসেন


6

জাভাস্ক্রিপ্ট (নোড.জেএস) , 69 64 58 বাইট

f=(x,m=10,q=!(x%m&x%m-1|!x))=>x<m?q:q&&f(x/m|0)||f(x,10*m)

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

সংখ্যা হিসাবে ইনপুট। লজিক অংশটি বেশ সংশ্লেষিত, সুতরাং এটি কীভাবে আনুষঙ্গিকভাবে কাটবে এবং কীভাবে মুক্তি পাবেন সে সম্পর্কে কোনও ধারণা নেই q

পাওয়ার-অফ -2 চেকটি গল্ফ করে -11 বাইট।



5

জেলি , 9 বাইট

ŒṖḌl2ĊƑ€Ẹ

পরীক্ষা স্যুট পরীক্ষা করে দেখুন!


বিকল্প

নির্ভুলতার কারণে বৃহত পরীক্ষার ক্ষেত্রে কাজ করে না।

ŒṖḌæḟƑ€2Ẹ

পরীক্ষা স্যুট পরীক্ষা করে দেখুন!

কিভাবে?

প্রোগ্রাম আই

ŒṖḌl2ĊƑ€Ẹ     Full program. N = integer input.
ŒṖ            All possible partitions of the digits of N.
  Ḍ           Undecimal (i.e. join to numbers).
   l2         Log2. Note: returns (-inf+nanj) for 0, so it doesn't fail.
     ĊƑ€      For each, check if the logarithm equals its ceil.
        Ẹ     Any. Return 0 if there are no truthy elements, 1 otherwise.

প্রোগ্রাম II

ŒṖḌæḟƑ€2Ẹ     Full program. N = integer input.
ŒṖ            All possible partitions of the digits of N.
  Ḍ           Undecimal (i.e. join to numbers).
     Ƒ€       For each partition, check whether its elements are invariant under...
   æḟ  2      Flooring to the nearest power of 2.
        Ẹ     Any. Return 0 if there are no truthy elements, 1 otherwise.


5

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

s=>eval(`/^(${(g=x=>x>s?1:x+'|0*'+g(x+x))(1)})+$/`).test(s)

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

/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/2 এর ক্ষমতার মতো একটি রেজেক্স তৈরি করে এবং এটি পরীক্ষা করে s

কেবল জাভাস্ক্রিপ্ট সংখ্যাগুলির যথার্থতা পর্যন্ত কাজ করে, অবশ্যই: অবশেষে রেজেক্সের শর্তগুলি 1.2345678e30(বা Inf) এর মতো দেখাবে । তবে 2 এর শক্তি যেহেতু ভাসমান-বিন্দুতে সঠিকভাবে প্রতিনিধিত্ব করা সহজ, সেগুলি কখনও ভুল পূর্ণসংখ্যার হবে না , যা আরও অযোগ্য বলে বিবেচিত হবে,

@tsh 14 বাইট সংরক্ষণ করেছে Neato!





3

এপিএল (এনএআরএস), 154 চর, 308 বাইট

∇r←f w;g;b;z;k
   g←{⍵≤0:1⋄t=⌊t←2⍟⍵}⋄→A×⍳∼w≤9⋄r←g w⋄→0
A: z←w⋄b←0⋄k←1
B: b+←k×10∣z⋄z←⌊z÷10
   →C×⍳∼g b⋄r←∇z⋄→0×⍳r
C: k×←10⋄→B×⍳z≠0
   r←0
∇
h←{⍵=0:0⋄f ⍵}

অনুশীলনের জন্য ফাংশনটি এইচ। অ্যালগরিদমটিকে তাত্পর্যপূর্ণ বা তাত্পর্যপূর্ণ মনে হয় না ... পরীক্ষা:

  h¨ 4281 164 8192 81024 101 
1 1 1 1 1 
  h¨ 0 1 3 234789 256323 8132
0 1 0 0 0 1 
  h 81024256641116
1
  h 64512819237913
0





2

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

এটি 100 এর নিচে পাওয়া যাবে বলে মনে হয় না; কিন্তু আমি এটা পেতে পারে থেকে 100 যদি 101একটি falsy কেস।

function f($s){for($x=.5;$s>=$x*=2;)if(preg_match("/^$x(.*)$/",$s,$m)?!~$m[1]||f(+$m[1]):0)return 1;}

এনইউএলএল1

বৈচিত্র:

for($x=.5;$s>=$x*=2;)
while($s>=$x=1<<$i++)   # yields notices "undefined variable $i"

?!~$m[1]||f(+$m[1]):0
?~$m[1]?f(+$m[1]):1:0

পিএইচপি 5 বা তার বেশি বয়সী, 95 বাইট

function f($s){while($s>=$x=1<<$i++)if(ereg("^$x(.*)$",$s,$m)?$m[1]>""?f(+$m[1]):1:0)return 1;}

2

লাল , 212 211 বাইট

func[n][g: func[x][(log-2 do x)% 1 = 0]repeat i 2 **((length? s: form n)- 1)[b: a:
copy[] k: i foreach c s[append b c if k % 2 = 0[alter a g rejoin b
b: copy[]]k: k / 2]append a g form c if all a[return on]]off]

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

আর একটি দীর্ঘ জমা, তবে আমি পুরোপুরি অসন্তুষ্ট নই, কারণ রেডে সমস্ত সাবস্ট্রিংগুলি সন্ধানের জন্য কোনও অন্তর্নির্মিত নেই।

আরও পঠনযোগ্য:

f: func [ n ] [
    g: func [ x ] [ (log-2 do x) % 1 = 0 ]
    repeat i 2 ** ((length? s: form n) - 1) [
        b: a: copy []
        k: i
        foreach c s [
            append b c
            if k % 2 = 0 [ 
                append a g rejoin b
                b: copy []
            ]
            k: k / 2 
        ]
        append a g form c
        if all a[ return on ]
    ]
    off
]

2

অ্যাক্সিয়াম, 198 বাইট

G(a)==(a<=1=>2>1;x:=log_2 a;x=floor x)
F(n)==(n<=9=>G n;z:=n;b:=0;k:=1;repeat(b:=b+k*(z rem 10);z:=z quo 10;if G b and F z then return 2>1;k:=k*10;z<=0=>break);1>1)
H(n:NNI):Boolean==(n=0=>1>1;F n)

ungolf এবং পরীক্ষা

g(a)==(a<=1=>2>1;x:=log_2 a;x=floor x)
f(n)==
   n<=9=>g n
   z:=n;b:=0;k:=1
   repeat
      b:=b+k*(z rem 10);z:=z quo 10;
      if g b and f z then return 2>1
      k:=k*10
      z<=0=>break
   1>1
h(n:NNI):Boolean==(n=0=>1>1;f n)

(15) -> [[i,h i] for i in [4281,164,8192,81024,101]]
   (15)  [[4281,true],[164,true],[8192,true],[81024,true],[101,true]]
                                                      Type: List List Any
(16) -> [[i,h i] for i in [0,1,3,234789,256323,8132]]
   (16)  [[0,false],[1,true],[3,false],[234789,false],[256323,false],[8132,true]]
                                                      Type: List List Any
(17) -> [[i,h i] for i in [81024256641116, 64512819237913]]
   (17)  [[81024256641116,true],[64512819237913,false]]
                                                      Type: List List Any
(18) -> h 44444444444444444444444444
   (18)  true
                                                            Type: Boolean
(19) -> h 44444444444444444128444444444
   (19)  true
                                                            Type: Boolean
(20) -> h 4444444444444444412825444444444
   (20)  false
                                                            Type: Boolean
(21) -> h 2222222222222244444444444444444412822222222222210248888888888882048888888888888888
   (21)  true
                                                            Type: Boolean
(22) -> h 222222222222224444444444444444441282222222222225128888888888882048888888888888888
   (22)  true
                                                            Type: Boolean



1

এপিএল (এনএআরএস), 70 টি চর, 140 বাইট

P←{k←↑⍴⍵⋄x←11 1‼k k⋄y←⍵⋄∪{x[⍵;]⊂y}¨⍳↑⍴x}
f←{⍵=0:0⋄∨/∧/¨y=⌊y←2⍟⍎¨¨P⍕⍵}

পরীক্ষা:

  f¨ 4281 164 8192 81024 101
1 1 1 1 1 
  f¨ 0 1 3 234789 256323 8132
0 1 0 0 0 1 
  f 126
0

আমি আরও বড় সংখ্যক করার চেষ্টা করি না ... আমার মনে রাখতে হবে যে পি সাধারণ পার্টিশন নয়, তবে এটি এমন একটি পার্টিশন যেখানে সমস্ত উপাদানগুলি সাবসেট থাকে যেগুলি ক্রমাগত সদস্য থাকে, উদাহরণস্বরূপ

  ⎕fmt P 'abc'
┌4──────────────────────────────────────────────────┐
│┌1─────┐ ┌2─────────┐ ┌2─────────┐ ┌3─────────────┐│
││┌3───┐│ │┌2──┐ ┌1─┐│ │┌1─┐ ┌2──┐│ │┌1─┐ ┌1─┐ ┌1─┐││
│││ abc││ ││ ab│ │ c││ ││ a│ │ bc││ ││ a│ │ b│ │ c│││
││└────┘2 │└───┘ └──┘2 │└──┘ └───┘2 │└──┘ └──┘ └──┘2│
│└∊─────┘ └∊─────────┘ └∊─────────┘ └∊─────────────┘3
└∊──────────────────────────────────────────────────┘

দ্রষ্টব্য যে অনুপস্থিত ((এসি) (খ)) বা আরও ভাল, ¨ ('এসি') 'বি'

  ⎕fmt ,,¨('ac')'b'
┌2─────────┐
│┌2──┐ ┌1─┐│
││ ac│ │ b││
│└───┘ └──┘2
└∊─────────┘

1

পজিক্স আগে, 91 বাইট

(0*([1248]|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288))+

এটি পুরোপুরি প্রতারণামূলক, প্রশ্নের মধ্যে বৃহত সংখ্যার পাঠ্য (আপনার কোড দ্বারা পরিচালিত হওয়া সত্যই প্রয়োজন নয়) এর উপর ভিত্তি করে ; এটি উদাহরণগুলির আকারের পরিসরে সমস্ত মান পরিচালনা করে। স্পষ্টতই আকার ব্যয় করে 32- বা 64-বিট পূর্ণসংখ্যার ধরণের পূর্ণ পরিসীমা পর্যন্ত বাড়ানো যেতে পারে। আমি মূলত এটিকে কীভাবে সমস্যাটি স্বাভাবিকভাবে সরঞ্জামটির সাথে মানিয়ে যায় তার একটি প্রদর্শন হিসাবে লিখেছি। একটি মজাদার অনুশীলন এটিকে আবার এমন একটি প্রোগ্রাম হিসাবে পুনর্লিখন করবে যা স্বেচ্ছাসেবী পরিসরের জন্য ERE উৎপন্ন করে তারপরে ম্যাচ করে।



1

পাওয়ারশেল, 56 বাইট

$x=(0..63|%{1-shl$_})-join'|0*'
"$args"-match"^(0*$x)+$"

পরীক্ষার স্ক্রিপ্ট:

$f = {

    $x=(0..63|%{1-shl$_})-join'|0*'
    "$args"-match"^(0*$x)+$"

}

@(
    ,(4281            ,$true)
    ,(164             ,$true)
    ,(8192            ,$true)
    ,(81024           ,$true)
    ,(101             ,$true)
    ,(0               ,$false)
    ,(1               ,$true)
    ,(3               ,$false)
    ,(234789          ,$false)
    ,(256323          ,$false)
    ,(8132            ,$true)
    ,("81024256641116"  ,$true)
    ,("64512819237913"  ,$false)
) | % {
    $n, $expected = $_
    $result = &$f $n
    "$($result-eq$expected): $result <- $n"
}

আউটপুট:

True: True <- 4281
True: True <- 164
True: True <- 8192
True: True <- 81024
True: True <- 101
True: False <- 0
True: True <- 1
True: False <- 3
True: False <- 234789
True: False <- 256323
True: True <- 8132
True: True <- 81024256641116
True: False <- 64512819237913

ব্যাখ্যা:

^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$2 এর ক্ষমতার মতো একটি রেজেক্স তৈরি করে এবং এটি আর্গুমেন্টে পরীক্ষা করে।


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