একটি পূর্ণসংখ্যা থেকে সর্বাধিক উল্লেখযোগ্য বিট সাফ করা


29

ইনপুট

ইনপুটটি একক ধনাত্মক পূর্ণসংখ্যা n

আউটপুট

আউটপুটটি এটিতে nসবচেয়ে উল্লেখযোগ্য বিট সেট করা আছে 0

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

1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244

উদাহরণস্বরূপ: 350বাইনারি হয় 101011110। দশমিক পূর্ণসংখ্যার , আউটপুটের সমতুল্য এটিতে রূপান্তর 1করতে এর সর্বাধিক উল্লেখযোগ্য বিট (অর্থাত্ বামতম বিট) সেট করা । এটি OEIS A053645000101111094


19
10স্পষ্টতই দেয় সবচেয়ে গুরুত্বপূর্ণ বিট সাফ করার জন্য 0: ডি
ক্লাবচিও

@ ক্লাবাচ্চিও আমি .. এটি ... এর ... ওয়া? (দুর্দান্ত এক)
বাল্ড্রিক ক্রমশ

12
আমার কাছে মনে হয় যে শূন্যগুলি যেমন রয়েছে তেমনি তাত্পর্যপূর্ণ। আপনি যখন "সর্বাধিক উল্লেখযোগ্য বিট" বলছেন তখন আপনার অর্থ "সবচেয়ে উল্লেখযোগ্য বিট যা সেট করা আছে"।
মাইকেল কে

উত্তর:


12

সি (জিসিসি) , 49 44 40 39 বাইট

i;f(n){for(i=1;n/i;i*=2);return n^i/2;}

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


1
আপনি প্রতিস্থাপন করতে পারেন i<=nসঙ্গে n/iজন্য -1 বাইট। এটি আমার গল্ফ নয়, অন্য কেউ এটি আপনার পোস্টে সম্পাদনা করার চেষ্টা করেছিল তবে আমি এটিকে ফিরিয়ে আনি কারণ গল্ফিং পোস্টগুলির সম্পাদনাগুলি আমাদের সম্প্রদায়ের নিয়ম অনুসারে গৃহীত হয় না।
হাইপারনিউটারিনো

1
@ হাইপারনিউট্রিনো আমি এখনই সম্পাদনাটি দেখেছি এবং অনুমোদিত করেছি। এই নিয়ম সম্পর্কে অবহিত ছিল না তবে এটি একটি দুর্দান্ত গল্ফিং টিপ!
ক্লাব্ল্যাঙ্ক

আহ ঠিক আছে. হ্যাঁ সাধারণত গল্ফিং টিপসের জন্য লোকেদের মন্তব্য পোস্ট করার কথা এবং ওপি'র সম্পাদনা করা উচিত, তবে আপনি যদি তা স্বীকার করেন তবে এটি আসলে খুব বেশি সমস্যা নয়। :)
হাইপারনিউটারিনো


9

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

.²óo-

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

একটি পূর্ণসংখ্যা থেকে সবচেয়ে গুরুত্বপূর্ণ বিট ও মুছে ফেলার পদ্ধতি এন থেকে দূরত্ব খোঁজার সমতূল্য এন সর্বোচ্চ পূর্ণসংখ্যা ক্ষমতায় 2 চেয়ে কম এন

সুতরাং, আমি সূত্রটি এন - 2 তল (লগ 2 এন) ব্যবহার করেছি :

  • - বেস 2 সহ লোগারিদম ।
  • ó - একটি পূর্ণসংখ্যার মেঝে।
  • o- 2 উপরে ফলাফলের শক্তি উত্থাপিত।
  • - - পার্থক্য।

1
b¦Cকাজ করে ... তাই না? বাইনারি রূপান্তর করুন, এমএসবি সর্বদা সূচক 1 এ থাকে, এমএসবি সরান, ফিরে রূপান্তর করুন।
ম্যাজিক অক্টোপাস উরন

2
@ ম্যাজিক অ্যাক্টপাস ইউরান যে কোনও ভুল নয়, এর জন্য ব্যর্থ হয় 1!
মিঃ এক্সকোডার

8

জেলি , 3 বাইট

BḊḄ

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

ব্যাখ্যা

BḊḄ  Main Link
B    Convert to binary
 Ḋ   Dequeue; remove the first element
  Ḅ  Convert from binary

2
নয় এবং দুই-বাইট codepoints? এটি সামগ্রিক আকারটি 5 বাইটে পরিবর্তন করবে।
বারটেক বানাচেউইচজ

3
@BartekBanachewicz জেলি নিজস্ব ব্যবহার codepage , তারা সব কোথায় অক্ষর মাত্র 1 বাইট হয়।
স্টেনবার্গ

1
এটি জিজ্ঞাসা করার এবং উত্তর দেওয়ার জন্য ধন্যবাদ, এটি আমাকে দীর্ঘদিন ধরে ছিটিয়ে রেখেছে!
উক্কো

8

সি (জিসিসি) - 59 বাইট

main(i){scanf("%d",&i);return i&~(1<<31-__builtin_clz(i));}

এই সিসির উত্তরটি কেবলমাত্র পূর্ণসংখ্যার বিটওয়াইজ এবং গাণিতিক ক্রিয়াকলাপগুলি ব্যবহার করে। এখানে কোনও লগারিদম নেই! এটিতে 0 এর ইনপুট নিয়ে সমস্যা থাকতে পারে এবং এটি সম্পূর্ণ অ-বহনযোগ্য।

এটি এই সাইটে আমার প্রথম উত্তর, তাই আমি প্রতিক্রিয়া এবং উন্নতি পছন্দ করব। আমি নিশ্চিত বিটওয়াইজ এক্সপ্রেশন শিখতে মজা করেছি।


1
পিপিসিজিতে আপনাকে স্বাগতম, এবং দুর্দান্ত প্রথম উত্তর! আমরা আশা করি আপনি আরও অনেক চ্যালেঞ্জগুলিতে অংশ নিতে উপভোগ করবেন :-)
ETH প্রোডাকশন

আপনার সাথে পুরো প্রোগ্রামের দরকার নেই main, একটি ফাংশনটি বৈধ জমা দেওয়া । একটি ফাংশন মধ্যে এই বদল ও ইনপুট গ্রহণ যেমন একটি আর্গুমেন্ট বলেন ফাংশন 18 বাইট সংরক্ষণ
স্টেডিবক্স

1
এমনকি আপনি আরও দুটি বাইট সংরক্ষণ করতে ম্যাক্রো হিসাবে এটি লিখতে পারেন ।
স্টেডিবক্স

7

এমএটিএল , 8 6 বাইট

B0T(XB

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

সিনাস্কিকে ধন্যবাদ দুটি বাইট সংরক্ষণ করা। রেফারেন্স ইনডেক্সিংয়ের পরিবর্তে অ্যাসাইনমেন্ট ইনডেক্সিংয়ে স্যুইচ করা ছিল 2 বাইট সংক্ষিপ্ত :)

ব্যাখ্যা:

          % Grab input implicitly: 267
B         % Convert to binary: [1 0 0 0 0 1 0 1 1]
 0T(      % Set the first value to 0: [0 0 0 0 0 1 0 1 1]
    XB    % Convert to decimal: 11

1
আপনি যদি এর 4Lপরিবর্তে ব্যবহার করেন তবে আপনি রেফারেন্স ইনডেক্সিং (6 বাইটের জন্যও) ব্যবহার করতে পারেন [2J]। আরেকটি মজাদার 6 বাইট: tZlcW-(কেবলমাত্র ম্যাটল্যাবেই কাজ করে, টিআইও / অকটাভে নয়)
সানচাইসেস

6

জাভা (ওপেনজেডিকে 8) , 23 বাইট

n->n^n.highestOneBit(n)

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

দুঃখিত, অন্তর্নির্মিত: - /


জাভা একটি বিল্ট-ইন সহ যা আরও কিছু জনপ্রিয় ভাষাগুলির মতো। নেট এবং পাইথনের মতো নয় ?! o.Ô + এটি। বিল্ড-ইনগুলি ছাড়া আর কিছু পোস্ট করতে চলেছে .. আপনার বয়স 15 বাইট কম। এক্সডি
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন এই জাতীয় কিছু n->n^1<<(int)Math.log2(n)কাজ করবে এবং সম্ভবত 38 বাইটের চেয়ে কম হবে। যদি এটি highestOneBitযথাযথভাবে কাজ না করে তবে এটি আমার দ্বিতীয় (এখনও অপরিশোধিত) ধারণা ছিল । কৌতূহলের বাইরে, আপনার সমাধানটি কী ছিল
অলিভিয়ার গ্রাগোয়ার

খনিটি জাভাতে নেই n->n^1<<(int)(Math.log(n)/Math.log(2))বলেই ছিল Math.log2। ; পি শুধুমাত্র Math.log, Math.log10এবং Math.loglpউপলব্ধ।
কেভিন ক্রুইজসেন

2
আমি একই পোস্ট করতে যাচ্ছিলাম, জোর এর পরিবর্তে কেবল বিয়োগ করা। থেকে পদ্ধতি স্মরণ রাখা এই
JollyJoker

1
@ কেভিন ক্রুজসেন ওফস, Math.log2আসলেই নেই ... আমার খারাপ। দেখুন? একটি দুর্দান্ত পদ্ধতি ( highestOneBit) বিদ্যমান তবে অন্যটি নয় ( Math.log2)। জাভা অদ্ভুত ;-)
অলিভিয়ার

6

কাস্তে , 3 বাইট

ḋtḋ

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

ব্যাখ্যা:

    -- implicit input, e.g. 350
  ḋ -- convert number to list of binary digits (TNum -> [TNum]): [1,0,1,0,1,1,1,1,0]
 t  -- remove first element: [0,1,0,1,1,1,1,0]
ḋ   -- convert list of binary digits to number ([TNum] -> TNum): 94

একইভাবে জেলির সমাধানের মতো, এটি দেখে মনে হয় এটি আসলে 5 বাইট, 3 নয়
বারটেক বানাচেউইচজ

1
@ বার্তেকবানাচিউইচজ একইভাবে জেলির জন্যও, হুসের নিজস্ব কোডপেজ ব্যবহার করা হয়েছে, সুতরাং এটি আসলে 3 বাইট: পি
হাইপারনিট্রিনো

@ বার্তেকবাণেউইচিজ কোডেপেজের জন্য এখানে দেখুন: গিথুব.com
barbuz


5

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

lambda n:n-2**len(bin(n))/8

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

ব্যাখ্যা

lambda n:n-2**len(bin(n))/8  # Lambda Function: takes `n` as an argument
lambda n:                    # Declaration of Lambda Function
              len(bin(n))    # Number of bits + 2
           2**               # 2 ** this ^
                         /8  # Divide by 8 because of the extra characters in the binary representation
         n-                  # Subtract this from the original

... আমি যখন বিটওয়াইজ গণিতের বাইরে কাজ করছিলাম। : পি
সম্পূর্ণরূপে

@ টোটালিহুমান হেই দুঃখিত, তবে আপনাকে এতে মারধর করেছেন: পি
হাইপার নিউট্রিনো

2**len(bin(n))/8এছাড়াও বানানও করা যেতে পারে 1<<len(bin(n))-3এবং তারপরে এটি 2 এবং 3 উভয় ক্ষেত্রেই কাজ করবে (কোনও বাইট সংরক্ষিত / যুক্ত হয়নি)।
মেগো

@ মেগো কুল, সংযোজনের জন্য ধন্যবাদ!
হাইপারনিউটারিনো

5

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

-8 বাইটস কেয়ারড কোইনারিংহাহিংকে ধন্যবাদ। আমি স্মৃতি থেকে টাইপ। হে

lambda n:int('0'+bin(n)[3:],2)

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



ঠিক আছে, ক) যে 1 এ ত্রুটি ঘটবে , খ) আমি এটাকে ভেবে ভেবে যথেষ্ট বলছি না। তবে আমি এটি একটি সামান্য পরিবর্তন দিয়ে ঠিক করেছি। ধন্যবাদ!
সম্পূর্ণরূপে

আমি কোডটি সম্পাদনা করেছি যাতে এটি কার্যকর হয় (এবং 4 বাইট সংরক্ষণ করে)
কায়ারড coinheringaahing

এটি এখনও 1 এ ত্রুটি ।
সম্পূর্ণরূপে

@ কায়ারডকোইনরিঙ্গিংহিং এটি আমার আসল উত্তর ছিল তবে আমি বুঝতে পেরেছিলাম যে এটি ভুল হয়েছে 1.. ওয়ার্কআরউন্ডটি একটি সাধারণ
এক্সওআর


4

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

সংরক্ষিত 2 ধন্যবাদ বাইট ovs

a=>a^1<<Math.log2(a)

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

আরেকটি পদ্ধতি, 32 বাইট

a=>'0b'+a.toString`2`.slice`1`^0

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


আপনি ঠিক .slice`1`^0তখনই .slice(1)^0কাজ করবেন কেন , হাহা
ETH প্রোডাকশনস

@ETHproductions। এটি আরও ভাল দেখাচ্ছে :)

4

জে, 6 বাইট

}.&.#:

বেশ সহজ.

ব্যাখ্যা

}.&.#:
    #:  convert to list of binary digits
  &.    apply right function, then left, then the inverse of right
}.      behead

আমি এটি পোস্ট করতে যাচ্ছি :(
সাইয়েস

@ কিওস মি আমাকেও ...
অ্যাডম

4

এপিএল (ডায়ালগ) , 10 বাইট

ট্যাসিট প্রিফিক্স ফাংশন।

212∘⊥⍣¯1

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

2∘⊥… বেস -২ থেকে ডিকোড…
 ... ⍣¯1 নেতিবাচক এক সময় (যেমন বেস -২ এ এনকোড)

1↓ প্রথম বিট ড্রপ

2⊥ বেস -2 থেকে ডিকোড করুন


4

রুবি, 26 বাইট

-7 বাইটস ভেন্টোরোর ধন্যবাদ জানায়। -2 বাইটস historicতিহাসিকের জন্য ধন্যবাদ।

->n{/./=~'%b'%n;$'.to_i 2}

আপনি কেবলমাত্র প্রথম অক্ষরটি এড়িয়ে কিছু অপ্রয়োজনীয় প্রথম বন্ধনী ফেলে কিছুটা বাইট সংরক্ষণ করতে পারেন:->n{n.to_s(2)[1..-1].to_i 2}
ভেন্টোরো

->n{/./=~'%b'%n;$'.to_i 2}
হিস্টোক্র্যাট

4

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

অন্তর্নির্মিত জিসিসি ব্যবহৃত।

f(c){return c^1<<31-__builtin_clz(c);}

প্রতিস্থাপন করা হচ্ছে 31-সঙ্গে ~দুই বাইট সংরক্ষণ করা উচিত।

@ পাইরেট বে, শিফটটি মুখোশযুক্ত কিনা তা হার্ডওয়্যারের উপর নির্ভর করে। আমার কম্পিউটারে, এটি 0 আউটপুট হবে
কোলেরা সু

4

এআরএম সমাবেশ, 46 43 বাইট

(উত্স হিসাবে একই হয়ে গেলে আপনি গন্তব্য নিবন্ধটি বাদ দিতে পারেন)

clz x1,x0
add x1,1
lsl x0,x1
lsr x0,x1
ret

এআরএম অ্যাসেম্বলি সিনট্যাক্সের এটি কী স্বাদ? আমার জিএনইউ সমাবেশকারী shr/ shl/ বুঝতে পারে না retএবং এর পরিবর্তে lsr/ lsl/ এর মতো কিছু চায় bx lr
রুসলান

সম্ভবত একাধিক সংস্করণ জুড়ে সিনট্যাক্স মিশ্রণ করা হয়েছে (ret aarch64 থেকে এসেছে), যদিও আমি ভেবেছিলাম যে এসেম্বেবলার আপনার জন্য এগুলি ছদ্ম করে দেবে। এখানকার উদ্দেশ্যে, যদিও, পুরানো এবং সরাসরি lsl / lsr ব্যবহার সম্ভবত সঠিক।
মাইকেল ডরগান

মজার বিষয়, আমি এটি 1 টি কম অপারেশনে করতে পারি, তবে আমি বাইট আকারটি 2 দিয়ে উপরে যাই Ah আহ কোড গল্ফ।
মাইকেল ডরগান


3

এলিস , 8 বাইট

./-l
o@i

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

ব্যাখ্যা

.   Duplicate an implicit zero at the bottom of the stack. Does nothing.
/   Switch to Ordinal mode, move SE.
i   Read all input as a string.
l   Convert to lower case (does nothing, because the input doesn't contain letters).
i   Try reading all input again, pushes an empty string.
/   Switch to Cardinal mode, move W.
.   Duplicate. Since we're in Cardinal mode, this tries to duplicate an integer.
    To get an integer, the empty string is discarded implicitly and the input is 
    converted to the integer value it represents. Therefore, at the end of this,
    we get two copies of the integer value that was input.
l   Clear lower bits. This sets all bits except the MSB to zero.
-   Subtract. By subtracting the MSB from the input, we set it to zero. We could
    also use XOR here.
/   Switch to Ordinal, move NW (and immediately reflect to SW).
o   Implicitly convert the result to a string and print it.
/   Switch to Ordinal, move S.
@   Terminate the program.

3

জাপট , 6 বাইট

^2p¢ÊÉ

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

ব্যাখ্যা

^2p¢ÊÉ
   ¢     Get binary form of input
    Ê    Get length of that
     É   Subtract 1
 2p      Raise 2 to the power of that
^        XOR with the input

যদি ইনপুট 1ব্যর্থ হতে পারে: 4 বাইট

¢Ån2

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

ব্যাখ্যা : ইনপুট বাইনারি ( ¢) পান, প্রথম চর ( Å) কেটে টুকরো টুকরো করে বাইনারি হিসাবে সংখ্যায় ফেরান ( n2)।



3

এপিএল (ডায়ালগ ইউনিকোড) , 9 বাইট

⊢-2*∘⌊2⍟⊢

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

-1 বাইট ধন্যবাদ আদমকে


সম্পূর্ণরূপে সঠিক, যদিও আমি আমার জন্য একটি টেমপ্লেট তৈরি করতে টিআইও ব্যবহার করতাম। যাইহোক, ⊢-2*∘⌊2⍟⊢একটি বাইট সংরক্ষণ করুন।
অ্যাডম

আমি দু: খিত ছিলাম যে এপিএলকে প্রতিনিধিত্ব করা হয়নি, এবং সেখানে রয়েছে, প্রায় স্ক্রোলটিতে হারিয়ে গেছে! আমি এপিএল মিস করছি।
সিএমএম

@cmm এপিএল জীবিত এবং ভাল স্ট্যাক এক্সচেঞ্জের এপিএল চ্যাট রুমে নির্দ্বিধায় আউট পেতে ।
Adám

3

সিজেম , 7 বাইট

{2b()b}

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

ব্যাখ্যা:

{     }  Block:         267
 2b      Binary:        [1 0 0 0 0 1 0 1 1]
   (     Pop:           [0 0 0 0 1 0 1 1] 1
    )    Increment:     [0 0 0 0 1 0 1 1] 2
     b   Base convert:  11

এটি মুছে ফেলা এড়াতে এমএসবি (যা সর্বদা 1) পুনরায় ব্যবহার করুন; যে কৌশল ছাড়া সমতুল্য হবে {2b1>2b}বা {2b(;2b}


3

রেটিনা , 15 13 বাইট

^(^1|\1\1)*1

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

আনারি ইনপুট এবং আউটপুট (টেস্ট স্যুটে সুবিধার জন্য দশমিক থেকে রূপান্তর অন্তর্ভুক্ত)।

ব্যাখ্যা

এটি আনারিতে করা বেশ সহজ। আমরা যা করতে চাই তা হ'ল ইনপুট থেকে 2 টির বৃহত্তম শক্তি মুছুন। আমরা 2 এর সামর্থ্য কিছু সামনের রেফারেন্সের সাথে মেলে পারি। 2 এন -1 ফর্মের মানগুলির সাথে মিল পাওয়া প্রকৃত পক্ষে সহজ , তাই আমরা এটি করব এবং একটির সাথে পৃথকভাবে 1 টি মিলাব:

^(^1|\1\1)*1

গোষ্ঠীটি শুরুতে 1কোনও 1এককটির সাথে জিনিসগুলি সরিয়ে ফেলতে শুরু করে, অথবা এটি শেষ পুনরাবৃত্তিতে যা করেছিল তার দ্বিগুণ। সুতরাং এটি মিলছে 1, তারপরে 2, তারপরে 4এবং আরও অনেক কিছু। যেহেতু এগুলি যুক্ত হয়, আমরা সর্বদা 2 এর পাওয়ারের একটি সংক্ষিপ্ত, যা আমরা 1শেষে দিয়ে ঠিক করি ।

পেছনের লাইনফিডের কারণে ম্যাচটি কেবল ইনপুট থেকে সরানো হয়।



3

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

n->n-2^logint(n,2)

বিকল্প সমাধান:

n->n-2^exponent(n)

প্রথমটি ভুল উত্তর দেয় বলে মনে হচ্ছে। এটা করা উচিত n->n-2^logint(n,2)? দ্বিতীয়টি প্যারি / জিপি এর আমার সংস্করণে সমর্থিত নয় বা টিওআরুন দ্বারা ব্যবহৃত সংস্করণেও সমর্থিত নয় । এটি একটি নতুন ফাংশন?
জেপ্পে স্টিগ

@ জেপ্পস্টিগনিয়েলসন ওফস, স্থির - আমি আমার ফোন থেকে জমা দেওয়ার জন্য এটি পাই। হ্যাঁ, দ্বিতীয়টি একটি নতুন ফাংশন।
চার্লস

@ জেপ্পস্টিগনিয়েলসন আমি সবেমাত্র যাচাই করেছিলাম, exponentএই চ্যালেঞ্জের তুলনায় গতকাল যুক্ত হওয়া তুলনায় 5 দিন আগে যোগ করা হয়েছিল। :)
চার্লস

3

হাস্কেল , 32 29 বাইট

(!1)
x!y|2*y>x=x-y|z<-2*y=x!z

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

-3 বাইটস @ লাইকনি ধন্যবাদ

পুরানো সমাধান, 32 বাইট

f x=last[x-2^i|i<-[0..x],2^i<=x]

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


1
বেনামে ফাংশন অনুমোদিত, তাই আপনার f=প্রথম বৈকল্পিক প্রয়োজন হয় না। অতিরিক্তভাবে z<-2*y=x!zএকটি বাইট সংরক্ষণ করে: এটি অনলাইনে চেষ্টা করুন!
লাইকনি


3

এক্সেল, 36 31 বাইট

-5 বাইটস @ আইয়ানএম_ম্যাট্রিক্স 1 এর জন্য ধন্যবাদ

=BIN2DEC(MID(DEC2BIN(A1),2,99))

বিশেষ কিছুই নেই.


একটি এমআইডি দিয়ে REPLACE প্রতিস্থাপন করে আকারটি 31 বাইটে কমিয়ে আনুন: = BIN2DEC (MID (DEC2BIN (A1), 2,99%))
আইয়ানএম_ম্যাট্রিক 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.