বিকল্প বিট গন্ধযুক্ত


12

ভূমিকা

এই চ্যালেঞ্জটির জন্য আপনাকে একটি পূর্ণসংখ্যার বাইনারি উপস্থাপনার পিছনে শূন্যগুলি সেট করা দরকার 010101…, এটি একটি উদাহরণ দিয়ে সবচেয়ে ভাল ব্যাখ্যা করা হয়েছে:

পূর্ণসংখ্যা দেওয়া 400, প্রথম পদক্ষেপটি এটি বাইনারি রূপান্তর করা:

110010000

যেহেতু আমরা দেখতে পাচ্ছি পঞ্চম বিটটি সর্বনিম্ন তাৎপর্যপূর্ণ 1বিট, সুতরাং সেখান থেকে শুরু করে আমরা নীচের শূন্যগুলি প্রতিস্থাপন করব 0101:

110010101

শেষ পর্যন্ত আমরা এটিকে দশমিক রূপে রূপান্তর করি: 405

চ্যালেঞ্জ

উপরোক্ত সংজ্ঞায়িত প্রক্রিয়াটির যথাযথ ফলাফলের মানটি ইতিবাচক পূর্ণসংখ্যা / ফলাফল প্রদান করে।

বিধি

  • এই ক্রমটি কেবল কমপক্ষে এক 1বিট সহ পূর্ণসংখ্যার জন্য সংজ্ঞায়িত করা হয় , সুতরাং ইনপুটটি সর্বদা ≥ 1 হবে
  • আপনি স্ট্রিং হিসাবে ইনপুট নিতে পারেন, পরিবর্তে অঙ্কের তালিকা (দশমিক)
  • আপনাকে অবৈধ ইনপুটগুলি পরিচালনা করতে হবে না

Testcases

মধ্যস্থতাকারী পদক্ষেপগুলির সাথে এখানে আরও কয়েকটি টেস্টকেস দেওয়া হয়েছে (এগুলি আপনাকে প্রিন্ট করতে / ফেরত দিতে হবে না):

In -> … -> … -> Out
1 -> 1 -> 1 -> 1
2 -> 10 -> 10 -> 2
3 -> 11 -> 11 -> 3
4 -> 100 -> 101 -> 5
24 -> 11000 -> 11010 -> 26
29 -> 11101 -> 11101 -> 29
32 -> 100000 -> 101010 -> 42
192 -> 11000000 -> 11010101 -> 213
400 -> 110010000 -> 110010101 -> 405
298 -> 100101010 -> 100101010 -> 298

আমরা কি 32-বিট পূর্ণসংখ্যা ধরে নিতে পারি?
আর্নৌল্ড

@ আরনাউল্ড: অবশ্যই!
ბიმო

9
কিছু গল্ফিং ধারণা: যদি n2 এর সর্বাধিক শক্তি হয় যা ইনপুটকে ভাগ করে দেয় তবে উত্তরটি সহজভাবে হয়(input) + ceil((2^n - 2)/3)
JungHwan Min

উত্তর:


12

পাইথন 3 , 20 বাইট

lambda n:(n&-n)//3+n

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

ব্যাখ্যা

192উদাহরণ হিসাবে নিন । এটির বাইনারি ফর্মটি 11000000এবং আমাদের এটিকে রূপান্তর করা দরকার 11010101

আমরা নোট করি যে আমাদের 10101সংখ্যায় যোগ করতে হবে। এটি একটি জ্যামিতিক সিরিজ ( 4^0 + 4^1 + 4^2), যা হিসাবে একটি বদ্ধ ফর্ম রয়েছে (4^3-1)/(4-1)। এটি একই হিসাবে 4^3//3যেখানে //পূর্ণসংখ্যা বিভাগকে বোঝায়।

যদি এটি হয় 101010তবে এটি এখনও জ্যামিতিক সিরিজ ( 2×4^0 + 2×4^1 + 2×4^2) হবে, যা 2×4^3//3উপরের কারণে রয়েছে।

যাইহোক, 4^3এবং 2×4^3এটি সর্বনিম্ন তাৎপর্যপূর্ণ বিট হবে, যা আমরা পেয়েছি n&-n:

আমরা লক্ষ্য করি যে এর পরিপূরক nহয় 00111111। আমরা যদি একটি যুক্ত করি তবে এটি হয়ে যায় 01000000এবং এটি কেবল n=11000000কমপক্ষে উল্লেখযোগ্য অঙ্কের সাথেই ওভারল্যাপ হয় । নোট করুন যে "পরিপূরক এবং একটি যোগ করুন" কেবলমাত্র প্রত্যাখ্যান।


6
@ মিঃ এক্সকোডার দুর্দান্ত খেলাধুলা করেছেন
লিকি নুন

1
সম্ভবত lambda n:(n&-n)//3+nখুব কাজ করে? সমস্ত নমুনা পরীক্ষার কেসগুলি পাস করে তবে আমার স্বীকৃতি অনুসারে এটি বৈধ হওয়া উচিত নয়, তাই না?
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এটি সত্যই বৈধ।
লিকি নুন

1
বাইট বাঁচাতে পাইথন 2 ব্যবহার করবেন না কেন? টিআইও
ফ্লিপট্যাক

4
@ ফ্লিপট্যাক আমি অজগরকে ঘৃণা করি 2
লিকি নুন

8

জেলি , 5 বাইট

&N:3+

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

এবার লিকি নুনের যোগাযোগের একটি বন্দর (কমপক্ষে আমি তাকে কিছুটা গল্ফ করেছিলাম: পি)

জেলি , 7 বাইট

^N+4:6ạ

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

মার্টিন এেন্ডারের পরোক্ষ সহায়তায় জংহওয়ান মিনের দুর্দান্ত পদ্ধতির ব্যবহার করুন ।


ডেনিস পোস্টটি করেছেন, তারপরে মুছে ফেলা হয়েছে, আপনি যে সম্পাদনাটি করেছিলেন তার ঠিক পরে similar বাইট সমাধান । কিছু একটা &N:3|। অভিনন্দন; তুমি ডেনিসকে জেলিতে পরাজিত করেছ! (তবে বেশ গল্ফ করা নয়))
wizzwizz4

@ wizzwizz4 আমি ছোট্ট গল্ফকে লিকির কাছে যাওয়ার পরামর্শ দেওয়া এবং তারপরে পোর্ট করা বাদ দিয়ে সত্যিই খুব বেশি কিছু করতে পারি নি। তবে এহ :-)
মিস্টার এক্সকোডার

এটি আমি প্রথম দেখা এএসসিআইআই-কেবলমাত্র জেলি উত্তর।
এমডি এক্সএফ

6

ওল্ফ্রাম ভাষা (গণিত) , 36 28 26 24 বাইট

-8 বাইটস @ মার্টিনএেন্ডারে এবং -২ বাইট ধন্যবাদ @ মিঃ এক্সকোডারকে ধন্যবাদ

#+⌊(#~BitAnd~-#)/3⌋&

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

আমাদের কেবল ইনপুটটিতে চলমান শূন্যগুলির সংখ্যা খুঁজে বের করতে হবে 0এবং 1এর চেয়ে কম দৈর্ঘ্যের সাথে বিকল্প এস এবং গুলি সহ সংখ্যাটি খুঁজে বের করতে হবে এবং এটি ইনপুটটিতে যুক্ত করতে হবে।

সুতরাং, 400 -> 11001000 -> 110010000 + 0000 -> 110010101 + 101 -> 405

জন্য স্পষ্ট সূত্র nপর্যায়ক্রমে সঙ্গে তম সংখ্যা 1s এবং 0s এ দেওয়া হল A000975 OEIS উপর। আমরা nদ্বাদশ নম্বরটি ব্যবহার করতে পারি যেহেতু কোনও দুটি পৃথক সংখ্যা বাইনারিতে একই দৈর্ঘ্য করতে পারে না এবং বিকল্প সংখ্যা থাকতে পারে।


1
2^#~IntegerExponent~2হল(BitXor[#,#-1]+1)/2
মার্টিন এেন্ডার

নিবন্ধন করুন এবং তারপরে আমি আরও বাইট হ্রাস করতে ভগ্নাংশগুলি একত্রিত করতে পারি
JungHwan Min

1
24 বাইট#+⌊(#~BitAnd~-#)/3⌋&পরিবর্তে আপনি ব্যবহার করতে পারেন ।
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার সম্পাদিত :)
জংহওয়ান মিন

5

জে , 19 18 বাইট

+(2|-.i.@#.-.)&.#:

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

দ্রুত ব্যাখ্যা

এটি একটি পুরানো উত্তর, তবে এটি বর্তমানের সাথে প্রকৃতির সাথে খুব একইরকম, এটি কেবল অনুসরণীয় শূন্যগুলিকে আলাদাভাবে গণনা করে। এটি কীভাবে কাজ করে তা বোঝাতে কোনও লিঙ্কের জন্য মন্তব্যগুলি দেখুন।

+(2|i.@i.&1@|.)&.#:
                 #:  Convert to binary list
       i.&1@|.       Index of last 1 from right
            |.         Reverse
       i.&1            Index of first 1
    i.               Range [0, index of last 1 from right)
  2|                 That range mod 2
               &.    Convert back to decimal number
+                    Add to the input

অন্যান্য উত্তর:

পূর্ববর্তী উত্তর (19 বাইট)

+(2|i.@i.&1@|.)&.#:

এর চেয়ে দীর্ঘতর হওয়া উচিত কারণ \ডান থেকে বামে যায়।

+(2|#*-.#.-.)\&.(|.@#:)

1
18 বাইট+(2|-.i.@#.-.)&.#:
মাইল

@ মাইলস এখানে বেস বেস রূপান্তর সঙ্গে কি চলছে তা বোঝাতে মন? আমি অনুমান করছি যে এটি জিরোদের সাথে কিছু করার আছে তবে আমি নিশ্চিত নই।
কোলে

#.~ চলমান সত্যের সংখ্যা গণনা করে , তাই আমাদের যা প্রয়োজন তা হল #.~ -. #:পিছনের শূন্যের সংখ্যা গণনা করা
মাইল

@ মাইলস আহ! এটা খুব, খুব চালাক।
কোলে

4

এটি দেখতে একটি দক্ষ পদ্ধতির মতো, আপনি কি অপারেটরটির নজিরটি ব্যাখ্যা করতে পারেন? উদাহরণস্বরূপ, আমি বলতে পারি না তা যেমন মূল্যায়ন হচ্ছে ((!n=(n|n))&-n)/3, অথবা !n=(((n|n)&(-n))/3)ইত্যাদি
এমডি XF

জুলিয়া সালে bitwise অপারেটরদের, তাদের গাণিতিক প্রতিরূপ হিসাবে একই precedences তাই |ভালো হয় +এবং &ভালো হয় *। সুতরাং, n|n&-n÷3হিসাবে পার্স করা হয় n | ((n&-n) ÷3)
ডেনিস

3

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

32-বিট পূর্ণসংখ্যার হিসাবে ইনপুট নেয়।

n=>n|((n&=-n)&(m=0xAAAAAAAA)?m:m/2)&--n

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


2

05 এ বি 1 , 13 8 5 বাইট

মিঃ এক্সকোডার এবং জংহওয়ান মিনের ঝরঝরে সূত্রের জন্য 5 বাইট সংরক্ষণ করা জনাব এক্সকোডারকে
আরও 3 ধন্যবাদ সংরক্ষণ করা হয়েছে

(&3÷+

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

ব্যাখ্যা

(      # negate input
 &     # AND with input
  3÷   # integer divide by 3
    +  # add to input

1
ম্যাথমেটিকা ​​উত্তরটি পোর্টিং আপনাকে 8 টি বাইট
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার: ওহ, এটি একটি ঝরঝরে সূত্র।
Emigna

1
05ab1e এর কি বিটওয়াস এবং রয়েছে? যদি তা হয় তবে (<bitwise and here>3÷+~ 5 বাইটের জন্য কাজ করা উচিত।
মিঃ এক্সকোডার

2

আর , 71 58 বাইট

নোফপিকে -6 বাইটের জন্য ধন্যবাদ

function(n){n=n%/%(x=2^(0:31))%%2
n[!cumsum(n)]=1:0
n%*%x}

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

ধরে নিই ইনপুটটি 32-বিট পূর্ণসংখ্যা। আর কেবল 32-বিট পূর্ণ সংখ্যক ( doubleকোনও পূর্ণসংখ্যার উপচে পড়লে কাস্ট করা ) স্বাক্ষর করেছে এবং কোনও 64-বিট বা স্বাক্ষরযুক্ত ইনট নেই।


আপনি রূপান্তর করতে পারেন which.max(n):1-1থেকে !cumsum(n)একটি পেতে 65 বাইট সমাধান
NofP

@ নোপ্প ধন্যবাদ! এটা বেশ ভাল ধারণা.
জিউসেপ

2

ব্রেনফাক , 120 বাইট

>+<[[>-]++>[[>]>]<[>+>]<[<]>-]>[-<+>[-<[<]<]>]>[>]<[>+<[->+<]<[->+<]<]>>[<]+>[-[-<[->+<<+>]>[-<+>]]<[->++<]<[->+<]>>>]<<

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

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


1

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

param($n)$a=($c=[convert])::ToString($n,2);if(($x=[regex]::Match($a,'0+$').index)-gt0){$c::ToInt32(-join($a[0..($x-1)]+($a[$x..$a.length]|%{(0,1)[$i++%2]})),2)}else{$n}

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

সেকি। বাইনারি এবং অ্যারে স্লাইসিংয়ে / থেকে রূপান্তর করা আসলে পাওয়ারশেলের শক্তিশালী মামলা নয়।

$nএকটি সংখ্যা হিসাবে ইনপুট নেয় । আমরা তত্ক্ষণাত্ convertবাইনারি বেস 2এবং এটিতে সঞ্চয় করি $a। এরপরে আমাদের একটি if / অন্য নির্মাণ আছে। যদি দফা পরীক্ষা কিনা regex Match1 বা বেশি বিরুদ্ধে 0পংক্তির শেষে গুলি ( '0+$') আছে তার indexচেয়ে অবস্থান বৃহত্তর এ 0(অর্থাত, বাইনারি স্ট্রিং এর শুরু)। যদি এটি হয়, আমাদের সাথে কাজ করার কিছু আছে, elseআমরা কেবল সংখ্যাটি আউটপুট করি।

এর অভ্যন্তরে ifআমরা xপ্রথম তম সংখ্যার টুকরো টুকরো করে রাখি এবং +বাকী অঙ্কগুলির সাথে অ্যারে-কনটেটেট করি । তবে, বাকি অঙ্কগুলির জন্য, আমরা সেগুলির মধ্য দিয়ে লুপ করব এবং এর পরিবর্তে একটি 0বা বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে বেছে 1ব্যবহার করব $i++%2। এটি আমাদের শেষে s এর 010101...পরিবর্তে প্যাটার্নটি পায় 0। আমরা তারপরে -joinআবার একসাথে স্ট্রিংয়ে $cফিরে আসি এবং এটিকে আবার Int32বেস থেকে ফেরত দেব 2

উভয় পরিস্থিতিতেই, নম্বরটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।


1

এপিএল + উইন, 43 বাইট

p←+/^\⌽~n←((⌊1+2⍟n)⍴2)⊤n←⎕⋄2⊥((-p)↓n),p⍴0 1

স্ক্রিন ইনপুট জন্য অনুরোধ জানানো হয়





1

পাইথন 3 , 56 বাইট

lambda n:eval((bin(n).rstrip("0")+"01"*n)[:len(bin(n))])

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

এখনো এই সঙ্গে সত্যিই খুশি নয়, কিন্তু আমি সত্যিই না সূত্র ... -2 ধন্যবাদ ব্যবহার করতে চান না ডান্ডা । -1 জনাথন ফ্রেচকে ধন্যবাদ ।


eval(...)পরিবর্তে int(...,2)একটি বাইট সংরক্ষণ করতে পারে।
জোনাথন ফ্রেচ





1

সি, 56 বাইট

i,k;f(n){for(k=i=1;n>>i<<i==n;k+=++i&1)k*=2;return n|k;}

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

সি (জিসিসি), 50 বাইট

i,k;f(n){for(k=i=1;n>>i<<i==n;k+=++i&1)k*=2;k|=n;}

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

 51  48 বাইট আর্নল্ডের সমাধান ব্যবহার করে :

তিনটি বাইট সংরক্ষণের জন্য @ l4m2 কে ধন্যবাদ!

m;f(n){return n|((n&-n)&(m=-1u/3*2)?m:m/2)&n-1;}

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

জিসিসি সহ 43:

m;f(n){m=n|((n&-n)&(m=-1u/3*2)?m:m/2)&n-1;}

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


0xAAAAAAAA=>-1u/3*2
l4m2


0

জেলি , 13 বাইট

BŒgṪµ2Ḷṁ×CḄ+³

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

ব্যাখ্যা

উদাহরণ ইনপুট হিসাবে 24 নিন।

BŒgṪµ2Ḷṁ×CḄ+³
B                Binary representation of the input → 11000
 Œg              Group runs of equal length → [[1,1],[0,0,0]]
   Ṫ             Tail → [0,0,0]
    µ            New monadic link
     2Ḷ          [0,1] constant
       ṁ         Mold [0,1] to the shape of [0,0,0] → [0,1,0]
        ×        Multiply [0,1,0] by...
         C       1-[0,0,0]. If last bit(s) of the original input are 1 this will add nothing to the original input
          Ḅ      Convert to decimal from binary → 2
           +³    Add this with the original input → 26
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.