কিভাবে একটি সংখ্যা?


47

প্রাচীন গ্রীকদের এই জিনিসগুলি একক এবং দ্বিগুণ এমনকি সংখ্যার নামে ডাকা হত। একক সংখ্যাটির উদাহরণ 14 example এটি একবার 2 দিয়ে বিভক্ত হতে পারে এবং এরপরে একটি বিজোড় সংখ্যাতে পরিণত হয় (7), এর পরে এটি আর 2 দ্বারা বিভাজ্য হয় না। দ্বিগুণ এমনকি সংখ্যার সংখ্যা 20. এটি 2 বার 2 দিয়ে ভাগ করা যায় এবং তারপরে 5 হয়।

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

পরীক্ষার কেস:

14 -> 1

20 -> 2

94208 -> 12

7 -> 0

-4 -> 2

উত্তরটি সর্বনিম্ন বাইটস সহ জিতল।

টিপ: নম্বরটি বেস 2 তে রূপান্তর করার চেষ্টা করুন এটি আপনাকে কী বলে তা দেখুন।


11
@AlexL। আপনি দেখতে পারেন এটি কখনই বিজোড় হয়ে উঠছে না , তাই অসীম এমনকি। যদি স্ট্যাকের ওভারফ্লো অনুমোদিত হয় তবে আমি কয়েকটি বাইট সঞ্চয় করতে পারি;)
জিওবিটস

1
The input will be a nonzero integerসম্ভাব্য ইনপুট হওয়ায় শূন্য সম্পর্কে আপনার মন্তব্য অনুসরণ করে কি এটি সম্পাদনা করা দরকার?
ট্রিকোপলাক্স

2
একে 2-অ্যাডিক মূল্যায়ন বা 2-অ্যাডিক অর্ডার বলা হয়।
পল

7
যাইহোক, উইকিপিডিয়া অনুসারে 0 এর পি-অ্যাডিক মূল্যায়ন অসীম হিসাবে সংজ্ঞায়িত করা হয়েছে।
পল

3
কি অদ্ভুত প্রশ্ন!
কর্সিকা

উত্তর:


23

জেলি , 4 বাইট

Æfċ2

জেলির সর্বশেষ সংস্করণে ÆEḢ(3 বাইট) কাজ করে।

Æf      Calculate the prime factorization. On negative input, -1 appended to the end.
  ċ2    Count the 2s.

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


এটি নেতিবাচক ইনপুটটির জন্যও কাজ করে।
lirtosiast

1
@ থমাসকওয়া আমার মনে হয় না যে এটি গণনা করা। মেটা প্রশ্ন হতে পারে?
orlp

আমি ভাল না? এটি আসলে বিজোড় সংখ্যার জন্য 0 আউটপুট করে।
বাসুকসুয়ান

@ বসুকক্সুয়ান এটি ± 1 এর জন্য কাজ করে না।
lirtosiast

1
@ টাইজয়েড জেলি ডিফল্টরূপে অফলাইন ইন্টারপ্রেটারে নিজস্ব কোড পৃষ্ঠা ব্যবহার করে , যার মধ্যে একটি চর একটি বাইট।
lirtosiast

93

x86_64 মেশিন কোড, 4 বাইট

বিএসএফ (বিট স্ক্যান ফরোয়ার্ড) নির্দেশনা ঠিক এটি করে !

0x0f    0xbc    0xc7    0xc3

জিসিসি-স্টাইল সমাবেশে এটি হ'ল:

    .globl  f
f:
    bsfl    %edi, %eax
    ret

ইনডিপটি ইডিআই রেজিস্টারে দেওয়া হয় এবং স্ট্যান্ডার্ড -৪-বিট কলিং কনভেনশন অনুযায়ী ইএএক্স রেজিস্টারে ফিরে আসে ।

দু'জনের পরিপূরক বাইনারি এনকোডিংয়ের কারণে এটি + ve সংখ্যার জন্যও কাজ করে।

এছাড়াও, "উত্স অপারেন্ডের বিষয়বস্তু 0 হলে গন্তব্য অপারেন্ডের বিষয়বস্তু অপরিবর্তিত saying " বলে ডকুমেন্টেশন থাকা সত্ত্বেও , আমি আমার উবুন্টু ভিএম-তে খুঁজে পাই যে আউটপুট f(0)0 হয়।

নির্দেশাবলী:

  • উপরের হিসাবে সংরক্ষণ করুন evenness.sএবং একত্রিতgcc -c evenness.s -o evenness.o
  • নিম্নলিখিত পরীক্ষা ড্রাইভার হিসাবে সংরক্ষণ করুন evenness-main.cএবং এর সাথে সংকলন gcc -c evenness-main.c -o evenness-main.o:
#include <stdio.h>

extern int f(int n);

int main (int argc, char **argv) {
    int i;

    int testcases[] = { 14, 20, 94208, 7, 0, -4 };

    for (i = 0; i < sizeof(testcases) / sizeof(testcases[0]); i++) {
        printf("%d, %d\n", testcases[i], f(testcases[i]));
    }

    return 0;
}

তারপর:

  • লিঙ্ক: gcc evenness-main.o evenness.o -o evenness
  • চালান: ./evenness

@ ফারাজমাসরুর এই উত্তর কীভাবে প্রাপ্ত হয়েছিল সে সম্পর্কে আরও বিশদ জানতে চেয়েছিলেন।

আমি x86 এর সমাবেশের জটিলতার চেয়ে সাথে বেশি পরিচিত , তাই সাধারণত আমি আমার জন্য সমাবেশ কোড উত্পন্ন করতে একটি সংকলক ব্যবহার করি। আমি অভিজ্ঞতা থেকে জানি যে জিসিসি এক্সটেনশানগুলি যেমন __builtin_ffs(), __builtin_ctz()এবং__builtin_popcount() সাধারণত x86 এর 1 বা 2 নির্দেশাবলীতে সংকলন করে একত্রিত হয়। সুতরাং আমি একটি ফাংশন দিয়ে শুরু :

int f(int n) {
    return __builtin_ctz(n);
}

কোড অবজেক্ট করার জন্য সমস্তভাবে নিয়মিত জিসিসি সংকলন ব্যবহার না করে -Sআপনি কেবল সমাবেশে - সংকলনের বিকল্পটি ব্যবহার করতে পারেন gcc -S -c evenness.c। এটি এই জাতীয় সংসদ ফাইল দেয় evenness.s:

    .file   "evenness.c"
    .text
    .globl  f
    .type   f, @function
f:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    %edi, -4(%rbp)
    movl    -4(%rbp), %eax
    rep bsfl    %eax, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   f, .-f
    .ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4"
    .section    .note.GNU-stack,"",@progbits

এর অনেক কিছুই গল্ফ করা যেতে পারে। বিশেষত আমরা জানি যে স্বাক্ষর সহ ফাংশনগুলির জন্য কলিং কনভেনশনটি দুর্দান্তint f(int n); এবং সহজ - ইনপুট প্যারামটি EDIরেজিস্টারে পাস করা হয় এবং ফেরতের মান EAXরেজিস্টারে ফিরে আসে । সুতরাং আমরা বেশিরভাগ নির্দেশাবলী বাইরে নিতে পারি - তাদের মধ্যে অনেকগুলিই নিবন্ধগুলি সংরক্ষণ এবং একটি নতুন স্ট্যাক ফ্রেম স্থাপনের সাথে সম্পর্কিত। আমরা এখানে স্ট্যাকটি ব্যবহার করি না এবং কেবল EAXনিবন্ধক ব্যবহার করি , সুতরাং অন্যান্য রেজিস্টারগুলির বিষয়ে চিন্তা করার দরকার নেই। এটি "গল্ফড" সমাবেশ কোডটি ছেড়ে দেয়:

    .globl  f
f:
    bsfl    %edi, %eax
    ret

@ Zwol পয়েন্ট হিসাবে উল্লেখ করুন, আপনি অনুরূপ ফলাফল অর্জনের জন্য অনুকূলিত সংকলনও ব্যবহার করতে পারেন। বিশেষত -Osউপরের নির্দেশাবলীর হুবহু উত্পন্ন করে (কয়েকটি অতিরিক্ত এসেম্বলার নির্দেশাবলী যা কোনও অতিরিক্ত অবজেক্ট কোড তৈরি করে না।)

এটি এখন একত্রিত করা হয়েছে gcc -c evenness.s -o evenness.o, যা উপরে বর্ণিত হিসাবে টেস্ট ড্রাইভার প্রোগ্রামের সাথে যুক্ত করা যেতে পারে।

এই সমাবেশের সাথে সম্পর্কিত মেশিন কোড নির্ধারণের বিভিন্ন উপায় রয়েছে। আমার প্রিয়টি হ'ল জিডিবি disassবিযুক্তকরণ কমান্ডটি ব্যবহার করা :

$ gdb ./evenness
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
...
Reading symbols from ./evenness...(no debugging symbols found)...done.
(gdb) disass /r f
Dump of assembler code for function f:
   0x00000000004005ae <+0>: 0f bc c7    bsf    %edi,%eax
   0x00000000004005b1 <+3>: c3  retq   
   0x00000000004005b2 <+4>: 66 2e 0f 1f 84 00 00 00 00 00   nopw   %cs:0x0(%rax,%rax,1)
   0x00000000004005bc <+14>:    0f 1f 40 00 nopl   0x0(%rax)
End of assembler dump.
(gdb) 

সুতরাং আমরা দেখতে পাচ্ছি যে জন্য মেশিন কোড bsfনির্দেশ হল 0f bc c7এবং জন্য retহয় c3


আমরা কি এটি 2 হিসাবে গণনা করি না?
lirtosiast

2
আমি কীভাবে মেশিনের ভাষা / বাইট ডাম্প কোড শিখব? অনলাইনে কিছু খুঁজে পাচ্ছেন না
ফারাজ মাসরুর

1
এটি সি কলিং কনভেনশনকে সন্তুষ্ট করে না। X86-32-তে, আর্গুমেন্টটি স্ট্যাকের উপর দিয়ে যায়; x86-64 এ, আর্গুমেন্টটি% rdi এ পাস করা হয়েছে। এটি কেবলমাত্র আপনার পরীক্ষার জোয়ারের মধ্যেই কাজ করে বলে মনে হয় কারণ আপনার সংকলকটি% eax এ আর্গুমেন্টের একটি বাসি অনুলিপি রেখে গেছে। আপনি যদি evenness-main.cবিভিন্ন অপটিমাইজেশন সেটিংস দিয়ে জোতাটি কম্পাইল করেন তবে এটি ভেঙে যাবে; আমার জন্য এটি সঙ্গে ভঙ্গ -O, -O2অথবা -O3
অ্যান্ডার্স কাসের্গ

1
@ আন্ডারস ক্যাসরগ - এটি উল্লেখ করার জন্য ধন্যবাদ। আমি এখন এটি কেবল x86_64 এর মধ্যে সীমাবদ্ধ রেখেছি, যাতে ইনপুটটি আরডিআইতে আসে।
ডিজিটাল ট্রমা

3
"এছাড়াও, ডকুমেন্টেশন সত্ত্বেও [...]" - আপনার যে কোনও মান প্রয়োজনীয়ভাবে পাওয়া যায় তা নথির সাথে একমত হয়। এটি অন্য প্রসেসরের মডেলগুলিকে আপনার চেয়ে আলাদা মান দেওয়ার বিষয়টি অস্বীকার করে না।
এইচডিভি

25

পাইথন, 25 বাইট

lambda n:len(bin(n&-n))-3

n & -n সর্বনিম্ন উল্লেখযোগ্য বিট ব্যতীত অন্য কিছু শূন্য করে, যেমন:

100010101010100000101010000
            v
000000000000000000000010000

আমরা অনুসরণীয় শূন্যগুলির সংখ্যাতে আগ্রহী, সুতরাং আমরা এটি ব্যবহার করে এটি একটি বাইনারি স্ট্রিংয়ে রূপান্তর করি bin, যা উপরের সংখ্যাটির জন্য হবে "0b10000"। যেহেতু আমরা 0b, এবং না এর বিষয়ে চিন্তা করি না 1, আমরা তারের দৈর্ঘ্য থেকে 3 বিয়োগ করি।


আমার উত্তর পোস্ট করার পরে আমি বুঝতে পেরেছিলাম যে আপনারটি খুব স্মার্ট, তাই আমি এটিকে পাইথে রূপান্তরিত করার চেষ্টা করেছি এবং দেখছি আপনার চেয়ে আমার চেয়ে খাটো। লেন (বিন (_)) এর পরিবর্তে লগ 2 ব্যবহার করে এটি এল এবং কিউকিউ দিয়েছে। এটি আমার পাইথের উত্তরের মতো একই দৈর্ঘ্যের পাশাপাশি অন্য একটি পাইথ উত্তর ছিল, মনে হচ্ছে এটি
পাইথের



13

জাভাস্ক্রিপ্ট ES6, 22 19 বাইট

f=x=>x%2?0:f(x/2)+1

দেখে মনে হচ্ছে পুনরাবৃত্তি হ'ল সংক্ষিপ্ততম রুট।


ওহ নুও! আপনি আমাকে বীট! সুন্দরভাবে সম্পন্ন হয়েছে :) +1
কনার বেল

6

পাইথ, 8 বাইট

lec.BQ\1
     Q    autoinitialized to eval(input())
   .B     convert to binary string
  c   \1  split on "1", returning an array of runs of 0s
 e        get the last run of 0s, or empty string if number ends with 1
l         take the length

উদাহরণস্বরূপ, এর বাইনারি উপস্থাপনা 94208হ'ল:

10111000000000000

1এর উপর বিভাজন এবং ফলাফল অ্যারের শেষ উপাদানটি গ্রহণের পরে , এটি হয়ে যায়:

000000000000

এটি 12 শূন্য, সুতরাং এটি "12-ল্য সমান"।

এটি কাজ করে কারণ x / 2মূলত এটি x >> 1- এর বিটশীফ্ট ডান 1। সুতরাং, একটি সংখ্যা কেবলমাত্র 2 দ্বারা বিভাজ্য যখন এলএসবি হয় 0(ঠিক যেমন দশমিক সংখ্যাটি যখন তার শেষ অঙ্ক হয় তখন 10 দ্বারা বিভাজ্য হয় 0) like



6

পাইথ, 6 বাইট

x_.BQ1

মূলত ঠিক

convert2BinString(evaluatedInput())[::-1].index("1")

6

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

Yf2=s

এটি সমস্ত পূর্ণসংখ্যার জন্য কাজ করে।

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

Yf      % implicit input. Compute (repeated) prime factors. For negative input
        % it computes the prime factors of the absolute value, except that for
        % -1 it produces an empty array instead of a single 1
2=s     % count occurrences of "2" in the array of prime factors

"এবং এখন, সম্পূর্ণ আলাদা
বেকার

6

সি, 36 (28) বাইট

int f(int n){return n&1?0:f(n/2)+1;}

(ননজারো আর্গুমেন্ট হিসাবে নির্দিষ্ট হিসাবে শূন্য আর্গুমেন্টের জন্য পরীক্ষা করা হচ্ছে না))

আপডেট (মন্তব্যের জবাবে) : আমরা যদি কে ও আর স্টাইলের ফাংশন ঘোষণার অনুমতি দিই, তবে আমাদের কাছে একটি 28 বাইট সংস্করণ থাকতে পারে:

f(n){return n&1?0:f(n/2)+1;}

এই ক্ষেত্রে, আমরা আসলে উপর নির্ভর করে কম্পাইলার অক্ষমতা উভয় nএবং রিটার্ন টাইপ fকরতে int। এই ফর্মটি C99 এর সাথে একটি সতর্কতা উত্পন্ন করে যদিও বৈধ সি ++ কোড হিসাবে সংকলন করে না।


আপনি যদি পরিবর্তন করেন int n-> nএটি এখনও বৈধ সি কোড এবং 4 টি অক্ষর কেটে দেয়।
জোশ

ভাল যুক্তি. আমি বলতে যাচ্ছি যে এটি C99 দিয়ে কমপক্ষে একটি সতর্কতা ট্রিগার করে, তবে রিটার্নের ধরণ বাদ দেয় না। এবং সি ++ এ উভয়ই ট্রিগার ত্রুটি। সুতরাং আমি আমার উত্তর যথাযথভাবে পরিবর্তন করছি।
ভিক্টর টোথ

5

জাভা 7, 39 বা সম্ভবত 44 বাইট

int s(int a){return a%2!=0?0:s(a/2)+1;}

int s(int a){return a%2!=0|a==0?0:s(a/2)+1;}

ইয়ে পুনরুক্তি! আমাকে !=সংক্ষিপ্ত তুলনার পরিবর্তে একটি ব্যবহার করতে হয়েছিল যাতে এটি নেতিবাচক ইনপুটগুলিতে উপচে না পড়ে, তবে এটি বেশ সোজা than যদি এটি বিজোড় হয় তবে একটি শূন্য প্রেরণ করুন। এমনকি যদি, একটি যোগ করুন এবং এটি আবার করুন।

দুটি সংস্করণ রয়েছে কারণ এখনই শূন্যের আউটপুট অজানা। প্রথমটি স্ট্যাকের ওভারফ্লো না হওয়া পর্যন্ত পুনরাবৃত্তি হবে এবং কিছুই আউটপুট দেবে না, কারণ 0 অসীম এমনকি। দ্বিতীয়টি আউটপুটটির জন্য একটি দুর্দান্ত, নিরাপদ, তবে সম্ভবত-গাণিতিকভাবে-কঠোর 0 ছাড়ায় না।


4

জাভাস্ক্রিপ্ট (ES6), 20 বাইট 19 বাইট

f=x=>~x%2&&1+f(x/2)

এটি জাভাস্ক্রিপ্ট থেকে @ নিমিমি দ্বারা হাস্কেল সমাধানের একটি বন্দর। এটি "শর্ট-সার্কিট" বৈশিষ্ট্য ব্যবহার করে &&যার মধ্যে এটি মিথ্যা হলে (যা এই ক্ষেত্রে হয় -0) বা তার ডান দিকটি ফিরিয়ে দেয় তবে তার বাম দিকটি ফিরিয়ে দেয়। বাস্তবায়নের জন্য odd x = 0আমরা বাম হাতটি তৈরি করি 1 - (x % 2)যা বুদবুদ 0হয়ে যায় &&, অন্যথায় আমরা পুনরাবৃত্তি করি 1 + f(x / 2)

এর খেউরি 1 - (x % 2)যেমন (~x) % 2নিচের @Neil কারণে, এবং অদ্ভুত সম্পত্তি নির্গত উপরের ফাংশন ঘটায় যে হয়েছে -0ছোট বিজোড় সংখ্যার জন্য। এই মানটি জেএসের সিদ্ধান্তের এক বিশেষত্ব যা পূর্ণসংখ্যাগুলি আইইইই 754 ডাবল হয়; এই সিস্টেমটির একটি পৃথক রয়েছে +0এবং -0যা ===একে অপরের সাথে থাকতে জাভাস্ক্রিপ্টে বিশেষ ক্ষেত্রে রয়েছে । ~অপারেটরের নম্বর, যা ছোট বিজোড় সংখ্যার জন্য একটি নেতিবাচক জোড় সংখ্যা হবে 32 বিট সাইন-পূর্ণসংখ্যা, bitwise বিপর্যয় নির্ণয় করে। ( Math.pow(2, 31) + 1উদাহরণস্বরূপ ধনাত্মক সংখ্যাটি 0তার চেয়ে বেশি উত্পন্ন করে -0)) 32-বিট-স্বাক্ষরিত পূর্ণসংখ্যার সাথে অদ্ভুত সীমাবদ্ধতার কোনও অন্য প্রভাব নেই; বিশেষত এটি সঠিকতা প্রভাবিত করে না।


~x&1চেয়ে বাইট খাটো 1-x%2
নিল

@ নিল খুব দুর্দান্ত এর কিছুটা পাল্টা স্বজ্ঞাত সম্পত্তি আছে তবে আমি তা যাই হোক না কেন।
সিআর ড্রস্ট

4

পার্ল 6, 23 18 বাইট

{+($_,*/2...^*%2)}

ব্যবহার

> my &f = {+($_,*/2...^*%2)}
-> ;; $_? is raw { #`(Block|117104200) ... }
> f(14)
1
> f(20)
2
> f(94208)
12
> f(7)
0
> f(-4)
2

4

রুবি 24 বাইট

আমার প্রথম কোড গল্ফ জমা (ইয়ে!)

("%b"%$*[0])[/0*$/].size

আমি এখানে কীভাবে পেলাম :

প্রথমে আমি এমন কোড পেতে চেয়েছিলাম যা সমস্যাটি ঘিরে আমার মাথা পেতে প্রকৃতপক্ষে বাস্তবায়ন করেছিল, তাই আমি বাইটের সংখ্যাকে না রেখে পদ্ধতিটি তৈরি করেছি:

def how_even(x, times=1)
  half = x / 2
  if half.even?
    how_even(half, times+1)
  else
    times
  end
end

এই জ্ঞানের সাথে আমি ফাংশনটিকে কিছুক্ষণ লুপের মধ্যে পুনর্বার করলাম এবং $*ইনপুট হিসাবে (এআরজিভি) যুক্ত করেছি এবং আমি সংখ্যাটি বিজোড় হওয়ার আগে কতবার অর্ধেক হয়ে গেছে তার গণনা হিসাবে।

x=$*[0];i=1;while(x=x/2)%2<1;i+=1;end;i

আমি এটির জন্য বেশ গর্বিত হয়েছি এবং এটি প্রায় আঘাত করার আগেই আমি এটি জমা দিয়েছিলাম যে এই দুটি দ্বারা বিভক্ত হওয়া আমার কাছে কিছুটা বাইনারি লাগছিল, একজন সফটওয়্যার ইঞ্জিনিয়ার হলেও এতটা কম্পিউটার বিজ্ঞানী নন যে এটি প্রথম বিষয় নয় যা মনে মনে উদ্ভূত হয়েছিল।

সুতরাং আমি ইনপুট মানগুলি বাইনারিতে দেখতে কেমন তা সম্পর্কে কিছু ফলাফল সংগ্রহ করেছি:

input      in binary      result
---------------------------------
   14               1110   1
   20              10100   2
94208  10111000000000000  12

আমি লক্ষ্য করেছি যে ফলাফলটি সংখ্যাটি বিজোড় হওয়ার আগে আমাদের বাম দিকে অবস্থিত পজিশনের সংখ্যা ছিল।

কিছু সাধারণ স্ট্রিং ম্যানিপুলেশনগুলি সম্পাদন করে আমি 1 এর শেষ ঘটনাটিতে স্ট্রিংটি বিভক্ত করে রেখেছিলাম এবং 0 টির দৈর্ঘ্য গণনা করেছি:

("%b"%$*[0])[/0*$/].size

ব্যবহার ("%b" % x)বাইনারি করার জন্য একটি সংখ্যা, এবং ঘুরে বিন্যাস স্ট্রিং # ফালি আমার স্ট্রিং আপ যেভাবেই করতে।

আমি এই অনুসন্ধানে রুবি সম্পর্কে কয়েকটি জিনিস শিখেছি এবং শীঘ্রই আরও গল্ফের প্রত্যাশায়!


2
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্ট্যাক এক্সচেঞ্জে আপনাকে স্বাগতম। এটি একটি দুর্দান্ত উত্তর; আমি সত্যিই ব্যাখ্যা পছন্দ। +1 টি! আপনি যদি আরও কোড-গল্ফ চ্যালেঞ্জ চান তবে কোড-গল্ফ ট্যাগটিতে ক্লিক করুন । আমি আপনার আরও উত্তর দেখার জন্য প্রত্যাশায়।
wizzwizz4

1
আপনার কোন প্রশ্ন সম্পর্কে নির্দ্বিধায় আমাকে জিজ্ঞাসা করুন। @wizzwizz4আমাকে উত্তর দেওয়ার জন্য একটি মন্তব্যের শুরুতে টাইপ করুন। (এটি সমস্ত ব্যবহারকারীর সাথে কাজ করে!)
wizzwizz4

4

জে, 6 বাইট

1&q:@|

ব্যাখ্যা:

     |    absolute value
1&q:      exponent of 2 in the prime factorization

4

সি, 37 বাইট

f(int x){return x?x&1?0:1+f(x/2):0;} এটি 0 না হওয়া অবধি শেষ বিটটি পরীক্ষা করুন।


এছাড়াও, f(int n){return __builtin_ctz(n);}আপনি যদি সিসি এক্সটেনশনগুলি ব্যবহার করতে ইচ্ছুক থাকেন তবে তাও রয়েছে। বা এমনকি#define f __builtin_ctz
ডিজিটাল ট্রমা

সরান int । এটি অন্তর্নিহিত, যেমন রিটার্ন টাইপের মতো।
লুসার droog

@ লেসারড্রোগ, মানে f(n){...}? জিসিসি এটি সংকলন করবে না। আমি কোনও সি বিশেষজ্ঞ নই, তবে একটি দ্রুত অনুসন্ধানে জানা গেছে যে সম্ভবত সি এর আরও সাম্প্রতিক সংস্করণগুলিতে এই বৈশিষ্ট্যটি সরানো হয়েছিল তাই সম্ভবত এটি উপযুক্ত পতাকাগুলি সংকলন করবে?
অ্যান্ডি সোফার

@ AndySoffer- কে দেখতে পাচ্ছি। হতে পারে -ansiনাকি -gnu99? আমি জানি এটি কাজ করতে পেরেছি। আমি এটি সম্পর্কে একটি টিপস উত্তর লিখেছিলাম!
লুসার droog

3

হাস্কেল, 28 বাইট

f x|odd x=0|1<2=1+f(div x 2)

ব্যবহারের উদাহরণ: f 94208-> 12

যদি নম্বরটি বিজোড় হয় তবে ফলাফলটি হয় 0অন্যথায় 1অর্ধ সংখ্যা সহ একটি পুনরাবৃত্ত কল।


div x 2? না কেন x/2?
ক্যালকুলেটরফলাইন

@ ক্যাটস আরেফ্লুফি: হাস্কেলের খুব কড়া টাইপ সিস্টেম রয়েছে has divপূর্ণসংখ্যা বিভাগ, /ভাসমান পয়েন্ট বিভাগ।
নিমি

3

বেফুঞ্জ, 20

&:2%#|_\1+\2/#
   @.<

কোড এক্সিকিউশনটি ডানদিকে সরানো থাকে এবং আউটপুট #না হওয়া পর্যন্ত প্রথম লাইনের দ্বিতীয় অক্ষর (পেছনের দিকে ধন্যবাদ ) দিয়ে আবৃত করে রাখে , যার ফলে বাম দিকে দিক পরিবর্তন হয়, তারপরে উপরে যায়, যা দ্বিতীয় সারিতে প্রায় আবৃত হয় , যা ফলাফল এবং প্রস্থান করে। আমরা প্রতিবার লুপের মাধ্যমে স্ট্যাকের দ্বিতীয় থেকে শীর্ষের উপাদানটি বাড়িয়ে তুলি, তারপরে উপরের অংশটি 2 দ্বারা বিভক্ত করি।2%1_|<


3

রেটিনা ,29 17

+`\b(1+)\1$
;$1
;

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

2 বাইট সংরক্ষণ করেছেন মার্টিনকে ধন্যবাদ!

অবিচ্ছিন্ন ইনপুট নেয়। এটি বারবার এটির বৃহত্তম অঙ্কের সাথে মিলে যায় 1যে এটির সংখ্যার সাথে সংখ্যার 1ঠিক মিলে 1যায়। প্রতিটি সময় এটি এটি স্ট্রিংতে একটি প্রিপেন্ড ;করে। শেষে, আমরা ;স্ট্রিংয়ে গুলি এর সংখ্যা গণনা করি ।

আপনি যদি দশমিক ইনপুট চান তবে যুক্ত করুন:

\d+
$0$*1

প্রোগ্রামের শুরুতে।


3

জल्फ, 6 বাইট

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

Zlm)j2
Zl   2  count the number occurrences of 2 in
  m)j   the prime factorization of j (input)

বরং সরল ... জোল্ফকে সত্যই কাজ করা উচিত এমন সংস্করণ দিয়ে আউট করার জন্য ইডিএইচপি প্রডাকশনস!


1
6 টি বাইট মনে হয় এই চ্যালেঞ্জটির ম্যাজিক নম্বর
সাইওস


3

6502 মেশিন ল্যাঙ্গুয়েজ, 7 বাইট

এক্সেসরেটরটিতে ননজারো মানের কমপক্ষে উল্লেখযোগ্য 1 বিটের স্থানের মানটি খুঁজে পেতে এক্স রেজিস্টারে ফলাফল রেখে:

A2 FF E8 4A 90 FC 60

এই চালানোর জন্য e-tradition.net উপর 6502 কাল্পনিক , সঙ্গে এটি পূর্বে ভী A98-বিট পূর্ণসংখ্যা করে।

এটি নিম্নলিখিতগুলিতে বিচ্ছিন্ন হয়ে যায়:

count_trailing_zeroes:
    ldx #$FF
loop:
    inx
    lsr a     ; set carry to 0 iff A divisible by 2, then divide by 2 rounding down
    bcc loop  ; keep looping if A was divisible by 2
    rts       ; return with result in X

এটি নিম্নলিখিত সি এর সমতুল্য, সি ব্যতীত intকমপক্ষে 16-বিট হওয়া দরকার:

unsigned int count_trailing_zeroes(int signed_a) {
    unsigned int carry;
    unsigned int a = signed_a;  // cast to unsigned makes shift well-defined
    unsigned int x = UINT_MAX;
    do {
        x += 1;
        carry = a & 1;
        a >>= 1;
    } while (carry == 0);
    return x;
}

একইভাবে MX = 01 (16-বিট সঞ্চালক, 8-বিট সূচক) ধরে ধরে 65816 এ কাজ করে এবং উপরের সি স্নিপেটের সমতুল্য।


2

ব্র্যাচল্যাগ , 27 15 বাইট

$pA:2xlL,Al-L=.

ব্যাখ্যা

$pA             § Unify A with the list of prime factors of the input
   :2x          § Remove all occurences of 2 in A
      lL,       § L is the length of A minus all the 2s
         Al-L=. § Unify the output with the length of A minus L

2

সিজেম, 8 বাইট

rizmf2e=

পূর্ণসংখ্যা, পরম মান, প্রাথমিক গুণনীয়ক, গণনা দুটি পড়ুন।


2

জাভাস্ক্রিপ্ট ES6, 36 38 বাইট

দুটি বাইট গল্ফড @ ETH প্রডাকশন ধন্যবাদ

মোটামুটি বিরক্তিকর উত্তর, কিন্তু এটি কাজ করে। আসলে অন্য একটি উত্তরের সাথে খুব মিল থাকতে পারে, যদি তিনি প্রস্তাবিত পরিবর্তনগুলি যুক্ত করেন তবে আমি আমার সরিয়ে দেব will

b=>{for(c=0;b%2-1;c++)b/=2;alert(c)}

এটি চালানোর জন্য এটিকে একটি চলক ( a=>{for...) এ নির্ধারণ করুন কারণ এটি একটি বেনাম ফাংশন, তারপরে এটি কল করুন a(100)


চমৎকার উত্তর! b%2==0পরিবর্তন করা যাবে b%2-1, এবং c++শেষ অংশ ভিতরে সরানো যাবে না forবিবৃতি। আমার মনে হয় এটিও কার্যকর হবে:b=>eval("for(c=0;b%2-1;b/=2)++c")
ETH প্রোডাকশনগুলি

পছন্দ করুন চমৎকার ধরা :)
কনার বেল

আরও একটি বাইট: b%2-1=> ~b&1এছাড়াও, আমি মনে করি 0b&&~b&1
এটির

আমার কম্পিউটারটিকে পরীক্ষা করে এটি একটি নেতিবাচক সংখ্যায় স্থির করুন। b%2-1নেতিবাচক বিজোড় সংখ্যাগুলির জন্য চেক ব্যর্থ।
প্যাট্রিক রবার্টস


2

DUP , 20 বাইট

[$2/%0=[2/f;!1+.][0]?]f:

Try it here!

পুনরাবৃত্তিতে রূপান্তরিত, আউটপুট এখন স্ট্যাকের শীর্ষ সংখ্যা। ব্যবহার:

94208[2/\0=[f;!1+][0]?]f:f;!

ব্যাখ্যা

[                ]f: {save lambda to f}
 2/\0=               {top of stack /2, check if remainder is 0}
      [     ][ ]?    {conditional}
       f;!1+         {if so, then do f(top of stack)+1}
              0      {otherwise, push 0}

2

জাপট, 9 5 বাইট

¢w b1

এটি অনলাইন পরীক্ষা!

পূর্ববর্তী সংস্করণটি পাঁচটি বাইট হওয়া উচিত ছিল, তবে এটি আসলে কাজ করে।

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

       // Implicit: U = input integer
¢      // Take the binary representation of U.
w      // Reverse.
b1     // Find the first index of a "1" in this string.
       // Implicit output

2

সি, 44 40 38 36 বাইট

2 বাইট বন্ধ ধন্যবাদ @ জনডাব্লুএইচএসমিথকে । 2 বাইট অফ ধন্যবাদ @ লিউসারড্রোগ

a;f(n){for(;~n&1;n/=2)a++;return a;}

টেস্ট এ লাইভ ideone


আপনি !(n%2)একটি দুর্দান্ত সামান্য ব্যয়বহুল প্রতিস্থাপন করে আপনি 1 বাইট অফ নিতে সক্ষম হতে পারেন ~n&1
জন ডব্লিউ এইচ স্মিথ

@JohnWHSmith। ভাল লাগলো !! ধন্যবাদ
সরানো হয়েছে


@luserdroog। ধন্যবাদ, আমি এটি সম্পর্কে জানতাম না।
সরানো হয়েছে

আমি ভুল হলে আমাকে সংশোধন করুন তবে যেহেতু এই ফাংশনটি বৈশ্বিক পরিবর্তনশীল ব্যবহার করে a, তাই এটি কি প্রথমবার বলা হয়ে কাজ করার গ্যারান্টিযুক্ত নয়? আমি জানতাম না যে অনুমোদিত ছিল।
প্যাট্রিক রবার্টস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.