পূর্ণসংখ্যাগুলি বিভক্ত করুন, ফ্লিপ করুন এবং পুনরায় সংযুক্ত করুন


16

পটভূমি

এটি গণিতে সুপরিচিত যে পূর্ণসংখ্যাকে জোড়গুলির সংখ্যার সাথে এক থেকে একের সাথে যোগাযোগের ক্ষেত্রে স্থাপন করা যেতে পারে। এটি করার অনেকগুলি সম্ভাব্য উপায় রয়েছে এবং এই চ্যালেঞ্জে আপনি তাদের মধ্যে একটি এবং এর বিপরীতমুখী ক্রিয়াকলাপ বাস্তবায়ন করবেন ।

কাজটি

আপনার ইনপুটটি ইতিবাচক পূর্ণসংখ্যা n > 0। জানা যায় অনন্য অ নেতিবাচক পূর্ণসংখ্যার বিদ্যমান আছে যে a, b ≥ 0যেমন যে । আপনার আউটপুটটি ইতিবাচক পূর্ণসংখ্যার "উল্টানো সংস্করণ" ।n == 2a * (2*b + 1)n2b * (2*a + 1)

আপনি ধরে নিতে পারেন যে ইনপুট এবং আউটপুটটি আপনার ভাষার স্ট্যান্ডার্ড স্বাক্ষরযুক্ত পূর্ণসংখ্যার ডেটাটাইপের সাথে খাপ খায়।

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

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

এগুলি ফর্ম্যাটে দেওয়া হয় in <-> out, যেহেতু কার্যকর করা হবে ফাংশনটি তার নিজস্ব বিপরীতমুখী: আপনি যদি আউটপুটটিকে এতে ফিরিয়ে দেন তবে আপনার মূল ইনপুটটি পাওয়া উচিত।

1 <-> 1
2 <-> 3
4 <-> 5
6 <-> 6
7 <-> 8
9 <-> 16
10 <-> 12
11 <-> 32
13 <-> 64
14 <-> 24
15 <-> 128
17 <-> 256
18 <-> 48
19 <-> 512
20 <-> 20
28 <-> 40
30 <-> 384
56 <-> 56
88 <-> 224
89 <-> 17592186044416

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট। আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

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

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


1
মজার বিষয় হচ্ছে, এই সমস্যাটি গত সপ্তাহে অরাজকতা
গল্ফটিতে

@ ফেয়ারস ওহ, আমি সচেতন ছিলাম না। কি কাকতালীয়.
জাগারব

2
বাধ্যতামূলক xkcd.com/153
corsiKa

উত্তর:


11

জেলি , 17 16 15 বাইট

BUi1µ2*³:2*×Ḥ’$

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

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

BUi1µ2*³:2*×Ḥ’$    Main link. Input: n

B                  Convert n to base 2.
 U                 Reverse the array of binary digits.
  i1               Get the first index (1-based) of 1.
                   This yields a + 1.
    µ              Begin a new, monadic chain. Argument: a + 1
     2*            Compute 2 ** (a+1).
       ³:          Divide n (input) by 2 ** (a+1).
                   : performs integer division, so this yields b.
         2*        Compute 2 ** b.
              $    Combine the two preceding atoms.
            Ḥ      Double; yield 2a + 2.
             ’     Decrement to yield 2a + 1.
           ×       Fork; multiply the results to the left and to the right.

অপেক্ষা করুন, আপনি সমস্যার জন্য জেলিতে অপারেটরগুলি প্রয়োগ করছেন? যে ক্ষেত্রে উচ্চহাস্য ইন
আলেকজান্ডার Torstling

আমি না. শুধুমাত্র কমিট জেলি যাওয়ার পর এই প্রতিদ্বন্দ্বিতা পোস্ট করা হয়েছে নথিপত্রের একটি আপডেট ছিল, এবং সব এই উত্তর ব্যবহৃত অপারেটর অন্তত এক মাসের জন্য বাস্তবায়ন করা হয়েছে। নিখরচায় নিখরচায়
ডেনিস

কোনও উদ্বেগের বিষয় নয়, আমি নিয়ম বা কোনও কিছুর সাথে পরিচিত নই, আমি কেবল ভেবেছিলাম এটি দুর্দান্ত ছিল যে গল্ফিং লোকেরা তাদের নিজস্ব ভাষা উদ্ভাবন করতে এসেছিল!
আলেকজান্ডার টর্সলিং


10

পাইথ, 16 15 বাইট

*hyJ/PQ2^2.>QhJ

ডেনিসকে 1 বাইট ধন্যবাদ

পরীক্ষা স্যুট

ব্যাখ্যা:

*hyJ/PQ2^2.>QhJ
                    Implicit: Q = eval(input())
     PQ             Take the prime factorization of Q.
    /  2            Count how many 2s appear. This is a.
   J                Save it to J.
  y                 Double.
 h                  +1.
          .>QhJ     Shift Q right by J + 1, giving b.
        ^2          Compute 2 ** b.
*                   Multiply the above together, and print implicitly.

7

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

Yft2=XK~)pq2/2w^Ks2*Q*

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

ব্যাখ্যা

Yf      % factor
t       % duplicate
2=      % compare to 2 (yields a logical array)
XK      % save a copy of that to variable K
~)      % keep only values != 2 in the factors array
p       % multiply that factors
q2/     % product - 1 / 2
2w^     % 2^x

K       % load variable K (the logical array)
s       % sum (yields the number of 2s)
2*Q     % count * 2 + 1

*       % multiply both values

খুব সুন্দর! আপনি ব্যবহার করতে পারেন Qজন্য 1+(এই সম্প্রতি চালু হয়েছে) এবং qজন্য 1-। এটি একটি স্থানও সাশ্রয় করে (যা আপনি Hযেভাবেই সংরক্ষণ করতে পারেন )। এখানে
লুইস মেন্ডো

ধন্যবাদ লুইস মেন্ডো বৈশিষ্ট্যটি জানতেন না।
রেনার পি।

5
এমএটিএল ব্যবহার করে লুইসকে মারধর করেছেন!
স্টিভি গ্রিফিন

6

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

lambda n:2*len(bin(n&-n))-5<<n/2/(n&-n)

n & -nবিভাজক করে এমন 2 এর বৃহত্তম শক্তি দেয় n। এটি কাজ করে কারণ দুটি এর পরিপূরক গাণিতিক -n == ~n + 1,। তাহলে nহয়েছে trailing শূন্য, তার সম্পূরক গ্রহণ এটা আছে কারণ হবে trailing বেশী। তারপরে 1 যুক্ত করা সমস্ত অনুসরণকারীকে শূন্যে পরিবর্তন করবে এবং 2 ^ কে বিটটি 0 থেকে 1 তে পরিবর্তন করবে So সুতরাং -n1 এর সাথে শেষ হবে কে 0 এর (ঠিক মতো n), যখন nসমস্ত উচ্চতর স্থান থেকে বিপরীত বিট থাকবে ।


আপনি কি শীঘ্রই ব্যাখ্যা করতে পারেন কিভাবে n&-nকাজ করে? আমি দেখছি এই কৌশলটি কী করে তবে কীভাবে নয় :(
এরওয়ান

n&-nবিভক্ত হওয়া সর্বোচ্চ 2 প্রদান করে n
নিল

@ ইরওয়ান সম্পর্কে আমি ব্যাখ্যা করেছি n & -n
ফেয়ারসুম

আমি আনারকি গল্ফে সংশ্লিষ্ট প্রোগ্রামটি অর্জন করেছি n=1;exec"c=n&-n;print n,':',2*len(bin(c))-5<<n/2/c;n+=1;"*100, তবে এটি সেরা সমাধানের পিছনে দুটি অক্ষর।
xnor

@ এক্সনর ইঙ্গিত: 59-বাইট সমাধান (ভাল, কমপক্ষে আমার) এর সমস্ত মানের জন্য কাজ করে না n
ফেয়ারসাম

6

এমএটিএল , 25 26 বাইট

:qt2w^w!2*Q*G=2#f2*q2bq^*

এটি ভাষা / সংকলকের বর্তমান প্রকাশ (10.2.1) ব্যবহার করে।

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

ব্যাখ্যা

জোর বলয়ের উপর ভিত্তি করে বেশ সোজা। চেষ্টাতে সব সমন্বয় একটি এবং উপযুক্ত এক নির্বাচন এবং প্রয়োজনীয় গণনার আছে।

:q          % implicit input "n". Generate row vector [0,1,...,n-1], say "x"
t2w^        % duplicate and compute 2^x element-wise
w!2*Q       % swap, transpose to column vector, compute 2*x+1
*           % compute all combinations of products. Gives 2D array
G=2#f       % find indices where that array equals n
2*q2bq^*    % apply operation to flipped values

1
Hah! :- পি নিজের ভাষায় মারছেন ... প্রথমবার?
স্টিভি গ্রিফিন

@ স্টেভিগ্রিফিন ইয়েপ! একটি দুর্দান্ত মাইলফলক :-)
লুইস মেন্ডো

5

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

n->2^(n>>(a=get(factor(n),2,0)+1))*(2a-1)

এটি একটি বেনামে ফাংশন যা কোনও পূর্ণসংখ্যা গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

aএর প্রধান গুণক হিসাবে আমরা 1 এর ঘনিষ্ঠ হিসাবে 2 হিসাবে সংজ্ঞায়িত করি n। যেহেতু factorএকটি রিটার্ন দেয় Dict, getতাই প্রাইম ফ্যাক্টরিয়ালে ২ থাকে না এমন ক্ষেত্রে আমরা 0 এর একটি ডিফল্ট মান দিয়ে ব্যবহার করতে পারি We আমরা ডান বিট শিফট nকরে a, এবং এই শক্তিতে 2 নিয়ে যাই। আমরা 2a-1ফলাফলটি পেতে এর দ্বারা গুণ করি ।


4

পার্ল 5, 40 বাইট

38 বাইট প্লাস 2 এর জন্য -p

$i++,$_/=2until$_%2;$_=2*$i+1<<$_/2-.5

-pপরিবর্তনশীল মধ্যে STDIN পড়ে $_

$i++,$_/=2until$_%2ইনক্রিমেন্ট $i(যা 0 থেকে শুরু হয়) এবং নোনজারো মোড 2 $_হওয়া পর্যন্ত অর্ধেক হয় $_তার পরে, $_মূল সংখ্যার বিজোড় ফ্যাক্টর এবং $iএটি 2 এর এক্সপোনেন্ট হয়।

$_=2*$i+1<<$_/2-.5- এর ডান দিকের দিকটি =কেবল চাওয়া সংখ্যার সূত্র: {1 2} গুণ {2 এর ব্যয়কারের দ্বিগুণের চেয়ে {অর্ধ বিজোড় গুণক বিয়োগের অর্ধেক power} তবে "বার {2 এর শক্তিতে ...}" "বিট-শিফট বাম দিকে…" হিসাবে গল্ফ হয়। এবং সেই ডান হাতটি বরাদ্দ করা হয়েছে $_

এবং -pপ্রিন্ট $_



2

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

n=>63-2*Math.clz32(b=n&-n)<<n/b/2

আমার বোঝার বিষয়টি Math.clz32হ'ল চারপাশে কম্পনের চেয়ে কম হবে toString(2).length

সম্পাদনা: @ ব্যবহারকারী81655 ধন্যবাদ 3 বাইট সংরক্ষণ করা।


খুশী হলাম। আপনি n&-nএকটি ভেরিয়েবল সেট করে কয়েকটি n=>63-2*Math.clz32(x=n&-n)<<n/x/2
বাইটও

@ ব্যবহারকারী 81655 ধন্যবাদ; আমি কেবল চাই যদি আমি ব্যবহার করতে পারি n&=-nতবে আমার nআবার দরকার ...
নীল

1

প্যারি / জিপি , 38 বাইট

f(n)=k=valuation(n,2);(2*k+1)<<(n>>k\2)

নোট করুন >>এবং \একই নজির রয়েছে এবং বাম থেকে ডান হিসাবে গণনা করা হয়েছে, সুতরাং শেষ অংশটি n>>k\2পরিবর্তে হতে পারে (n>>k)\2। Ungolfed সংস্করণ করতে হবে kসঙ্গে আভিধানিক my:

f(n)=
{
  my(k=valuation(n,2));
  (2*k+1) << ((n>>k)\2);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.