একটি পূর্ণসংখ্যা 3 দ্বারা বিভাজ্য কিনা তা নির্ধারণ করুন


20

আপনার লক্ষ্যটি শর্ত ছাড়াই কোনও সংখ্যা 3 দ্বারা বিভাজ্য কিনা তা নির্ধারণ করা। ইনপুটটি 0 থেকে 255 পর্যন্ত একটি স্বাক্ষরযুক্ত 8 বিট নম্বর হবে Cre

আপনি কেবল ব্যবহারের অনুমতিপ্রাপ্ত

  • সমতা / বৈষম্য ( ==, !=, >, <, >=, <=)

  • পাটিগণিত ( +, -, x)

  • লজিকাল অপারেটর ( !না, &&এবং, || বা)

  • Bitwise অপারেটরদের ( ~না, &এবং, |বা, ^XOR, <<, >>, >>>গাণিতিক এবং লজিক্যাল বাম এবং ডান বদল আনতে)

  • ধ্রুবক (আপনি যদি এই ছোট রাখেন তবে ভাল হবে)

  • পরিবর্তনশীল অ্যাসাইনমেন্ট

যদি সত্য হয় 0তবে আউটপুট 1

স্ট্যান্ডার্ড পারমাণবিক কোড-গল্ফ বিধি প্রযোজ্য। আপনার যদি কোনও প্রশ্ন থাকে তবে তাদের মন্তব্যগুলিতে রেখে দিন। উদাহরণ পদ্ধতি এখানে । একটি টোকেন উপরের ধ্রুবকগুলি এবং ভেরিয়েবলগুলি বাদ দিয়ে।


@ গ্রেগ হিউগিল আমার টাইপো, এটি 8 বিট নম্বর হওয়া উচিত।
qwr

2
আমাদের কি কেবল উপরের অপারেটরগুলি ব্যবহারের অনুমতি দেওয়া হচ্ছে? অন্যথায়, মডুলো এইভাবে খুব সহজ করে তুলবে।
জোস্টি

এছাড়াও, টেবিল দেখার সম্পর্কে কীভাবে?
গ্রেগ হিউগিল

3
কোনও শর্ত ছাড়াই আপনি কী বোঝাতে চেয়েছেন তা কি আপনি পরিষ্কার করতে পারেন? এটি কি যদি বিবৃতিতে সীমাবদ্ধ থাকে তবে এটি লুপের মতো জিনিসগুলিতেও প্রযোজ্য?
রুসলান

1
@ রাস্লান আপনি কেবল উপরের ব্যবহারের অনুমতি পেয়েছেন।
qwr

উত্তর:


31

সি - 2 টোকেন

int div3(int x) {
    return x * 0xAAAAAAAB <= x;
}

2 31 -1 অবধি কাজ করে মনে হচ্ছে ।

zalgo("nhahtdh")গুণক বিপরীত ধারণাটির জন্য ক্রেডিট ।


1
+1 টি। কীভাবে <=কাজ করে তাতে কিছুটা হতবাক হয়েছিল এবং মনে পড়ে যে 0xAAAAAAAB unsigned intটাইপ করা হয়, সুতরাং গুণটির ফলাফল স্বাক্ষরিত হয় না।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳


@ অ্যাডিটস উফ! আমাকে আরও সাবধানে পড়তে হবে মাঝে মাঝে! +1 দুর্দান্ত উত্তর!
ডিজিটাল ট্রমা

@ অদিতসু, দুঃখিত আমি নুব, ঠিক কীভাবে এটি কাজ করে?
কার্তিক_কোরো

2
@ কার্তিক_কোরো 0 এক্সএএএএএএএবিএব * 3 == 1 অতিরিক্ত প্রবাহের কারণে, তাই কোনও এক্স এক্স, এক্স * 0 এক্সএএএএএএএবিএবি * 3 == এক্স এর জন্য। এছাড়াও y * 3 এর বিভিন্ন y এর আলাদা মান রয়েছে, তাই y = x * 0xAAAAAAAB অবশ্যই y * 3 == x এর একমাত্র y। যদি x 3 এর একাধিক হয় তবে y অবশ্যই x / 3 হওয়া উচিত, অন্যথায় এটি অবশ্যই ওভারফ্লো হয়ে কাজ করবে। এক্স এর সাথে y এর তুলনা করা সহজ পরীক্ষা করার উপায়। আরো দেখুন en.wikipedia.org/wiki/Modular_multiplicative_inverse
aditsu

17

পাইথন, 3 2 টোকেন

ব্রুট ফোর্স সলিউশন, তবে এটি কাজ করে।

0x9249249249249249249249249249249249249249249249249249249249249249>>x&1

1 টোকেন হ্রাসের জন্য হাওয়ার্ডকে ধন্যবাদ।


কি দারুন! আপনার সমাধানটি সম্ভবত সবচেয়ে সংক্ষিপ্ত (3 টোকেন), তবে আমি অন্যান্য উত্তরগুলিও উত্সাহিত করতে চাই।
qwr

11
এমনকি সেখানে একটি 2 টোকেন সমাধান: 0x9......>>x&1
হাওয়ার্ড

6

সি - 5 4 (?) টোকেন

int div3_m2(uint32_t n) {
    return n == 3 * (n * 0xAAAAAAABull >> 33);
}

যে কোনও স্বাক্ষরযুক্ত 32-বিট সংখ্যার জন্য কাজ করে

এই কোডটি বিভাগ অপারেশনকে গুণিত অপারেশনে রূপান্তর করতে কোনও বিভাজকের 2 গুণ 32 টি ব্যবহার করে।

সম্পাদন করা

আমার সলিউশন (2 মিনিটের পরে পোস্ট করা হয়েছে) এর আদিতসুর দ্রবণের মতোই স্পিরিট রয়েছে। ব্যবহারের জন্য তাকে Creditণ== 1 টোকেন দ্বারা আমার সমাধানকে উন্নত করে।

উল্লেখ


1
এই অবিশ্বাস্য. আমি বিখ্যাত ইনভার্স স্কয়াররুট ট্রিক থেকে ম্যাজিক নম্বরগুলি সম্পর্কে জানতাম, তবে আমি জানতাম না যে এটি একটি স্বেচ্ছাসেবী বিভাজকের জন্য ব্যবহার করা যেতে পারে। এটি Bull: পি
কিউউর

হ্যাঁ, 0xAAAAAAAB = (2 ^ 33 + 1) / 3 এবং 171 = (2 ^ 9 + 1) / 3। আমি ক্ষুদ্রতম ধ্রুবকটি বেছে নিয়েছি যা কৌশলটি করে। হুম, আসলে এটি 86 = (2 ^ 8 + 2) / 3
আদিতু

ইঁদুর এমনকি 43 = (2 ^ 7 + 1) / 3 কাজ করে, আমি কীভাবে এটি মিস করেছি তা নিশ্চিত নয়। এখনই সম্পাদিত।
অদিতসু

4

সি - 15 (?) টোকেন

int div3_m1(unsigned int n) {
    n = (n & 0xf) + (n >> 4);
    n = (n & 0x3) + (n >> 2);
    n = (n & 0x3) + (n >> 2);
    return n == 0 || n == 3;
}

4 ≡ 1 (মোড 3) থেকে, আমাদের 4 এন রয়েছে ≡ 1 (মোড 3) রয়েছে। অঙ্কের সংমিশ্রনের নিয়মটি সংখ্যার সংশ্লেষের মধ্যে সীমাবদ্ধ নয়, তবে আমাদেরকে নির্বিচারে অঙ্কের অঙ্কগুলিতে বিভক্ত করতে এবং একত্রিত করার সময় তাদের সমস্তগুলি যোগ করতে দেয়।

বেস 10 এর একটি উদাহরণ, বিভাজক = 9:

1234 ≡ 12 + 34 ≡ 1 + 2 + 3 + 4 ≡ 123 + 4 ≡ 1 (আধুনিক 9)

প্রোগ্রামের সমস্ত বিবৃতি এই সম্পত্তিটি ব্যবহার করে। এটি আসলে এমন একটি লুপে সরল করা যায় যা স্টেটমেন্ট চালায় n = (n & 0x3) + (n >> 2);যতক্ষণ না অবধি n < 4স্টেটমেন্টটি বেস -4 এর সংখ্যাটি কমপক্ষে উল্লেখযোগ্য অঙ্কে ভেঙে 2 অংশ যুক্ত করে।


+1: আকর্ষণীয়ভাবে এটি 512 অবধি (আসলে এন = 590) এন এর জন্য কাজ করে তবে আমি কেন তা নিশ্চিত তা নিশ্চিত নই।
পল আর

@ পলআর: বহন করার কারণে এটি বড় সংখ্যার পক্ষে কাজ করবে না (নোট করুন যে আমি গণনায় যোগটি ব্যবহার করেছি)। এছাড়াও পুনরাবৃত্তি লাইন নোট করুন।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

হ্যাঁ, আমি ঠিক নিশ্চিত নই কেন এটি 9 বিটের মানগুলির জন্য কাজ করে, যেহেতু এটি কেবল 8 টি বিট পরীক্ষা করছে?
পল আর

9-বিট সংখ্যার জন্য প্রথম উপরন্তু পর, সবচেয়ে 5 বিট এ পরিণত প্রথম পর n = (n & 0x3) + (n >> 2);ফলাফলের 3 বিট কমে যাবে এবং পুনরাবৃত্তি সৃষ্ট এটি শুধুমাত্র 2 বিট থাকা stackoverflow.com/a/3421654/995714
phuclv

1
ওহ আমি ভুল করেছি একটি 5-বিট সংখ্যা + একটি 4-বিট সংখ্যা 6-বিট সংখ্যার ফলাফল করতে পারে। তবে যদি এন <= 588 শীর্ষে 4 টি বিট যোগ করে এবং সেই 6 বিট সংখ্যার নীচের 2 বিটগুলি কেবল 4-বিট যোগফল দেয় produce আবার 2 বিট সংখ্যায় ফলাফল যুক্ত করে। 589 এবং 590 ফলাফল সর্বশেষ
রাশিতে

2

পাইথন (2 টোকেন?)

1&66166908135609254527754848576393090201868562666080322308261476575950359794249L>>x

অথবা

1&0x9249249249249249249249249249249249249249249249249249249249249249L>>x

অথবা

1&0b1001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001>>x

2
হাওয়ার্ডের মন্তব্যের নকল
অদিতসু

@ অ্যাডিটসু ... দুর্দান্ত মন কি এক সাথে ভাবছে? আমি কসম খেয়েছিলাম যে আমি এটি পোস্ট করার আগে এটি দেখিনি।
Junuʎs

2

জাভাস্ক্রিপ্ট - 3 টোকেন

function div3(n) {
    var a = n * 0.3333333333333333;
    return (a | 0) == a;
}

এটি কোনও সংখ্যায় বিটওয়াইজ অপারেটর ব্যবহার করে এটি জাভাস্ক্রিপ্টের কোনও পূর্ণসংখ্যায় ছাঁটাই করে দেয় এই বিষয়টি অপব্যবহার করে।


: 4 টোকেন হওয়া উচিত =, *, |,==
n̴̖̋h̷͉a̷̭̿h̸̡̅ẗ̵̨d̷̰ĥ̷̳

1
আমি ভেরিয়েবল অ্যাসাইনমেন্টকে টোকেন হিসাবে গণনা করি না বলে মনে করি।
টাইলো

1

সি - 4 টোকেন

int div3(int x) {
    return ((x * 43) >> 7) * 3 == x;
}

383 অবধি কাজ করে।

পূর্ববর্তী সংস্করণ (বড় ধ্রুবক):

int div3(int x) {
    return ((x * 171) >> 9) * 3 == x;
}

1535 অবধি কাজ করে


1

বাশ - ???

কীভাবে এটি স্কোর করবেন তা নিশ্চিত নন।

seq 0 85 | awk '{print $1 * 3}' | grep -w [number] | wc -l

যেমন

$ seq 0 85 | awk '{print $1 * 3}' | grep -w 11 | wc -l
0

$ seq 0 85 | awk '{print $1 * 3}' | grep -w 12 | wc -l
1

$seq 0 85 | awk '{print $1 * 3}' | grep -w 254 | wc -l
0

$seq 0 85 | awk '{print $1 * 3}' | grep -w 255 | wc -l
1

1

বেফঞ্জ 93 - 5 টোকেন

স্থির - বিভাগ সরানো হয়েছে।

v      @._1.@
         \   
         0   
         +   
         3   
>&>3-:0\`|   
  ^      <   

, ইনপুট পায় 3 বিয়োগ পর্যন্ত এটি 0 থেকে ছোট, পয়েন্টার আপ নির্দেশ রাখে ( '|'), তারপর 3. যোগ তাহলে মান 0 তারপর পয়েন্টার প্যাচসমূহ সঠিক ( " 1. @" আউটপুট '1') আর প্যাচসমূহ বাম ("@। " আউটপুট '0')। '@' প্রোগ্রামটি শেষ করে।


1

ব্যাচ - 7 টোকেন

আমি মনে করি

@echo off
for /L %%a in (0,3,%1) do set a=%%a
if %a%==%1 echo 1

রিটার্নস 1প্রদত্ত সংখ্যার (stdin হিসাবে) তিন দিয়ে বিভাজ্য হবে।


লুপ অনুমোদিত?
সার্জিওল

1

রুবি, 6 (?) টোকেন

টোকেনগুলি কীভাবে গণনা করা যায় তা আমি সত্যই নিশ্চিত নই। ওপি, আপনি আমাকে স্কোর করতে পারেন?

আমার মনে হয় এটা 6 আছে ... 1, 0, 0, *, 255,x

মনে রাখবেন যে এটি *পূর্ণসংখ্যার গুণ নয়।

def div3(x)
  ([1,0,0]*255)[x]
end

ওপির অর্থে একটি টোকেন কি প্রশ্নে তালিকাভুক্ত উপরোক্তগুলির মধ্যে একটি হবে না?
C5H8NNaO4

@ C5H8NNaO4 তাহলে কী? 0?
চার্লস 2

@ সি 5 এইচ 8 এনএনএও 4 4 ধ্রুবকদের জন্য সম্ভবত 4?
চার্লস

1

পাইথন 0

আমি কানের শুল্ক পোস্ট করেছি তবে আমি শর্তসাপেক্ষ ব্যবহার করেছি। এখানে কোনও শর্তযুক্ত এবং কোনও টোকেন নেই, কেবল কীওয়ার্ড

def g(x): return ([[lambda : g(sum(int(y) for y in list(str(x)))),lambda: 0][[False,True].index(x in[0,1,2,4,5,7,8])], lambda: 1][[False,True].index((lambda y: y in[3,6,9])(x))])()

3 টির একাধিকের 3 টিতে যুক্ত হওয়া ট্রিকটি ব্যবহার করে

সম্পাদনা করুন: অপ্রয়োজনীয় ল্যাম্বদা সরানো হয়েছে

def g(x):return([[lambda: g(sum(int(y) for y in list(str(x)))),lambda:0][[False,True].index(x in[0,1,2,4,5,7,8])], lambda:1][[False,True].index(x in[3,6,9])])()

সম্পাদনা করুন: আরও গল্ফ করা (১১7 টি চর) এখনও টোকেন নেই

exec"g=`x:(((`:g(sum(int(y)for y in str(x)),`:0)[x in[0,1,2,4,5,7,8]],`:1)[x in[3,6,9]])()".replace('`','lambda ')

পাইথনের নিফটি গাইটাইটেম লম্বা জন্য 132 চরে সরাসরি অ্যাক্সেস হত্যা করা হয়েছে

exec"g={0}x:((({0}:g(sum(int(y)for y in str(x))),{0}:0{1}0,1,2,4,5,7,8]),{0}:1{1}3,6,9]))()".format('lambda ',').__getitem__(x in[')

http://www.codeskulptor.org/#user34_uUl7SwOBJb_0.py


[]যদিও অ্যারে অ্যাক্সেসের অনুমতি নেই।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳


ভাল, প্রশ্নটি উইকি ট্যাগটিতে নিয়মটি ব্যবহার করে না। প্রশ্নে অনুমতি দেওয়া অপারেশনগুলিতে সীমাবদ্ধতা রয়েছে। শব্দটি নোট করুন only
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ আচ্ছা এটা খুব ভাল বিষয় যে পাইথনেরও এর একটি স্থানীয় বৈশিষ্ট্য রয়েছে
ডিলান মাদিসেট্টি

0

পাইথন - 25 টোকেন

জিনিস শুরু করার জন্য, আমার একটি দীর্ঘ সমাধান রয়েছে যা আমার প্রথম পোস্টের লিঙ্কের উত্তরগুলির মধ্যে একটির বাস্তবায়ন। nইনপুট হয়।

a = (n>>7)-((n&64)>>6)+((n&32)>>5)-((n&16)>>4)+((n&8)>>3)-((n&4)>>2)+((n&2)>>1)-(n&1)
print(a==0 or a==3)

orসমতূল্য ||


0

জাভাস্ক্রিপ্ট - 3 টোকেন

এটি আপনার ব্রাউজারের কনসোলে পরীক্ষা করুন:

a = prompt().split('');
sum = 0;

do {
  sum = a.reduce(function(p, c) {
     return parseInt(p) + parseInt(c); 
  });

  a = sum.toString().split('');

} while(a.length > 1)

alert([3, 6, 9].indexOf(+sum) > -1)

কীভাবে আপনি এই সিদ্ধান্তে এসেছেন? আমি প্রায় 37 টি টোকেন গণনা করি।
nyuszika7h

"উপরের ধ্রুবক এবং ভেরিয়েবলগুলি বাদ দিয়ে একটি টোকেন হ'ল"। আপনি কিভাবে 37 গণনা করেছেন?
উইলিয়াম বারবোসা

1
আচ্ছা বুঝলাম. ওপি পারমাণবিক কোড-গল্ফের তথ্য পৃষ্ঠার সাথে একমত নয় বলে মনে হচ্ছে ।
nyuszika7h

আসলে, এখন আমি ঠিক আছি কি না তা নিশ্চিত নই। আমার স্কোরটি পারমাণবিক কোড গল্ফ ফিডল অনুসারে 70+ হবে।
উইলিয়াম বারবোসা

1
সমস্যাটি টোকেনের সংখ্যা নিয়ে নয়, আপনি কী অপারেশন ব্যবহার করছেন তা নিয়ে। আমি মনে করি না যে স্ট্রিং, পার্সেন্ট, লুপস, অ্যারে ইত্যাদি অনুমোদিত are
অদিতসু

0

টোকেন # সম্পর্কে জাভাস্ক্রিপ্ট
নিশ্চিত নয়

function mod3 (i) { return {'undefined':'100','0':'0'}[[0][i]][i.toString (3).split('').pop ()]}

বা যদি 0 এর আউটপুট 1 করার অনুমতি দেওয়া হয়;

function mod3 (i) { return '100'[i.toString (3).split('').pop ()]}


2
আমার বলতে হবে, আমি নিশ্চিত নই যে এই চ্যালেঞ্জের জন্য কী বিধি প্রযোজ্য। ফাংশনকল এবং সম্পত্তি স্যাক্সেস অনুমোদিত?
C5H8NNaO4

0

Tcl , 83 বাইট

proc T n {while \$n>9 {set n [expr [join [split $n ""] +]]};expr {$n in {0 3 6 9}}}

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


ব্যর্থ আউটগল্ফ: 96 বাইট proc T n {set n [expr [join [split [expr [join [split $n ""] +]] ""] +]];expr {$n in {0 3 6 9}}} এটি অনলাইনে চেষ্টা করুন!
সার্জিওল

আর একটি ব্যর্থ: ** 87 বাইট ** proc T n {expr {[expr [join [split [expr [join [split $n ""] +]] ""] +]] in {0 3 6 9}}} এটি অনলাইনে চেষ্টা করুন!
সার্জিওল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.