এটি থেকে একটি বাইট নিন!


24

আপনার কাজটি, একটি স্বাক্ষরবিহীন পূর্ণসংখ্যার দেওয়া nসর্বাধিক সংখ্যাটি সন্ধান করতে হবে যা একক বাইট (একটানা 8 টি বিট) ডেটা সরিয়ে তৈরি করা যায়।


উদাহরণ

নম্বর দেওয়া 7831, আমরা প্রথমে এটি বাইনারি রূপান্তর (কোন নেতৃস্থানীয় শূন্যস্থান অপসারণ):

1111010010111

এরপরে আমরা টানা 8 টি বিটের গ্রুপ খুঁজে পাই যা সরিয়ে ফেলা হলে সর্বাধিক নতুন ফলাফল পাওয়া যায়। এই ক্ষেত্রে, 3 টি সমাধান রয়েছে যা নীচে দেখানো হয়েছে

1111010010111
  ^      ^       
   ^      ^
    ^      ^

এগুলির যেকোন একটি ফলন অপসারণ করা হচ্ছে 11111, যা আমরা তারপরে 31উত্তরের দশমিক মানটিতে রূপান্তর করি ।


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

256        ->   1
999        ->   3
7831       ->   31
131585     ->   515
7854621    ->   31261
4294967295 ->   16777215 (if your language can handle 32 bit integers)

বিধি

  • এটি গ্যারান্টিযুক্ত যে বিটের দৈর্ঘ্য n8 এর চেয়ে বেশি হবে।
  • আপনার সমাধানটি তাত্ত্বিকভাবে n8 এর চেয়ে বেশি বিট দৈর্ঘ্যের জন্য কাজ করা উচিত , তবে অনুশীলনে কেবলমাত্র পূর্ণসংখ্যার জন্য কাজ করতে হবে 255 <n <2 16
  • ইনপুট / আউটপুট দশমিক হতে হবে।
  • আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন জমা দিতে পারেন।
  • এটি , তাই সংক্ষিপ্ততম প্রোগ্রামটি (বাইটে) জিতেছে!

1
আমি বুঝতে পারি না কেন লোকেরা চ্যালেঞ্জ শিরোনামে উদ্দীপনা পয়েন্ট রাখে! আমি মনে করি এটি একটি চরিত্র সীমা জিনিস হতে পারে! মানুষ যাতে চ্যালেঞ্জটি লক্ষ্য করে ঠিক তাই হতে পারে!
dkudriavtsev

1
@ মেন্ডেলিভ এটি একটি আবশ্যকীয় বাক্য। এগুলি সাধারণত বিস্মৃতিবোধের সাথে সমাপ্ত হয়। এটি শুধুমাত্র সঠিক বিরামচিহ্ন, এটি আপনাকে কেন বিচলিত করে?
আর্থার

1
@ মেন্ডেলিভ লোকেরা একটি রসিকতা নির্দেশ করতে প্রায়শই একটি বিস্ময়বোধক চিহ্ন ব্যবহার করে। ওপি এই ঘটনাটি তুলে ধরেছে যে সে শ্লেষ করছে। এফ স্কট ফিটজগারেল্ড এটি পছন্দ করেনি , তবে এই প্রসঙ্গে আমার কাছে এটি ঠিক মনে হয়েছে। যদি এটি না থাকে, আপনি সম্ভবত লোকেরা তাঁর বানান সম্পর্কে অভিযোগ করতে পারেন।
bornfromanegg

@ মেন্ডেলিভ কারণ এটি একটি খারাপ
শশা

@ornfromanegg আমার মনে হচ্ছে লোকেরা এই
শঙ্কাকে

উত্তর:


16

জেলি , 6 বাইট

BḄ-8ƤṀ

একটি মোনাডিক লিঙ্ক একটি নম্বর নিয়ে এবং একটি নম্বর ফিরিয়ে দেয়।

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

কিভাবে?

একটা চমৎকার ব্যবহার দ্রুত , Ƥ, দ্বারা উন্নত মাইল ...

BḄ-8ƤṀ - Link: number
B      - convert to a binary list
    Ƥ  - for loop over some slices to be determined...
  -8   - this is a negative nilad, therefore: use overlapping outfixes of length 8
       -   (exactly what the specification asks us to inspect)
 Ḅ     -   convert from a binary list to an integer (vectorises)
     Ṁ - maximum

> _> ... বাহ আপনি আমার 10 বাইট দ্বারা পরাজিত করেছেন
মিঃ এক্সকডার

8

জে , 12 বাইট

[:>./8#.\.#:

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

          #:     to binary
     8  \.       remove consecutive groups of eight
      #.         convert each result to decimal
  >./            maximum
[:               do nothing, this lets me avoid parentheses

আপনি কি নিফটি অ্যালগরিদম আছে? আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
মিঃ এক্সকোডার

@জনাব. Xcoder FrownyFrog সংখ্যাটিকে বাইনারি অঙ্কের তালিকায় (#:) রূপান্তর করে, তারপরে সমস্ত 8-আউটফিক্সকে রূপান্তর করে, বা টানা 8-বিট ইনফিক্সের সাথে তালিকাকে দশমিক সংখ্যা সিস্টেমে (8 #। \।) রূপান্তর করে এবং শেষ পর্যন্ত গ্রহণ করে বৃহত্তম এক। [: কেবল তৈরি করে পূর্ববর্তী দুটি ক্রিয়াগুলি ক্যাপ করে> ./কে একাকীভাবে মৃত্যুদণ্ড কার্যকর করা যায় (কেবলমাত্র সঠিক যুক্তি দিয়ে)
গ্যালেন ইভানভ

আপনি আজ আমাকে আউটফিক্স সম্পর্কে শিখিয়েছেন, তার জন্য ধন্যবাদ! এটি লজ্জাজনক যে এটি আন্ডার- এর চেয়ে কম ব্যবহার করা হবে বলে মনে হয় না &.; এটি এটির জন্য সঠিক ধরণের সমস্যা।
কোলে


6

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

f=(n,v=n>>8,b=1,m=0)=>b>v?m:f(n,(v^n)&b^v,b+b,v>m?v:m)
<input type=number min=256 max=2147483647 oninput=o.textContent=f(this.value)><pre id=o>

2 ** 31-1 পর্যন্ত কাজ করে। কারণ কেউ কিছুটা দ্বিধাদ্বন্দ্বপূর্ণ উত্তর চেয়েছিল ...



3

গণিত, 69 বাইট

Max@Array[Drop[#&@@s,#;;#+7]~FromDigits~2&,Last[s=#~RealDigits~2]-7]&

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

এই সমাধানটি বৃহত সংখ্যক জন্য কাজ করে এটি অনলাইন চেষ্টা করে দেখুন!

কেলিলাউডার থেকে -3 বাইট


আরও 3 টি বাইট সংরক্ষণ করুন:Max[c=#~RealDigits~2;Array[Drop[c[[1]],#;;#+7]~FromDigits~2&,Last@c-7]]&
কেলি লোডার

1
পছন্দ করুন আমি আপনার সমাধানটি আরও কিছুটা
গল্ফ করেছি

3

পাইথন 3 , 68 66 60 বাইট

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

-4 বাইট ধন্যবাদ ওভেসকে!

-২ বাইটস এরিককে আউটগোলফারকে ধন্যবাদ !

lambda n:max(n%2**i|n>>i+8<<i for i in range(len(bin(n))-9))

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


1
66 বাইটn.bit_length()-8সমতূল্য len(bin(n))-10
মিঃ এক্সকোডার



3

ওল্ফ্রাম ভাষা (গণিত) , 46 বাইট

Floor@If[#<256,0,Max[#/256,2#0[#/2]+#~Mod~2]]&

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

এই সংস্করণটি কেবলমাত্র 518 -1 অবধি ইনপুটগুলি পরিচালনা করতে পারে , অন্যথায় আমরা ম্যাথমেটিকার স্ট্যাক আকারের সীমাতে চলে যাই। (গণিতের ইনস্টলেশনগুলির মধ্যে আবদ্ধ হতে পারে)) এই উত্তরের দ্বিতীয় সমাধান তা এড়িয়ে চলে।

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

নিম্নলিখিত যুক্তি উপর ভিত্তি করে একটি পুনরাবৃত্তি পদ্ধতির:

  • সর্বাধিক মানটি 0কোনও ইনপুটের চেয়ে কম হওয়া উচিত 256, যেহেতু সংখ্যার বাইরে বাইট নেওয়া পুরো সংখ্যাটি খায়। এটি আমাদের বেস কেস, এ কারণেই এটি অন্তর্ভুক্ত করা হয়েছে যদিও চশমা আমাদের প্রতিশ্রুতি দেয় যে আমাদের এ জাতীয় ইনপুটগুলি পরিচালনা করতে হবে না।
  • অন্যথায়, আমরা Maxদুটি বিকল্প গ্রহণ করি: সর্বনিম্ন বাইট খান (আমাদের দ্বারা বিভক্ত ইনপুট দিন 256) বা সর্বনিম্ন বিটটি কেটে ফেলুন, অবশিষ্ট পূর্ণসংখ্যার উপর পুনরাবৃত্তি করুন এবং আমাদের কাজ শেষ হয়ে গেলে সর্বনিম্ন বিট যুক্ত করুন।

ওল্ফ্রাম ভাষা (গণিত) , 55 বাইট

Max@Table[Mod[#,m=2^k]+Floor[#/m/2^8]m,{k,0,Log2@#-8}]&

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

একটি বিকল্প সংস্করণ যা পুনরাবৃত্তির পরিবর্তে একটি টেবিল তৈরি করে, তাই এটি ম্যাথমেটিকাকে পরিচালনা করতে পারে এমন কোনও আকারের জন্য কাজ করে।


2
পুনরাবৃত্তির গভীরতা 10 ^ 160 এর চেয়ে বড় সংখ্যার জন্য ছাড়িয়ে গেছে যদিও গণিতিকা বড় সংখ্যা হ্যান্ডেল করতে পারে। তবে আমার ধারণা ওপি এটির সাথে ঠিক আছে
J42161217

2

রেটিনা , 71 67 64 বাইট

.+
$*
+`(1+)\1
$+0
01
1
.
$`_$'¶
_.{7}

A`_
O^`
1G`
+1`\B
:$`:
1

এটি অনলাইন চেষ্টা করুন! লিঙ্কটিতে কেবল দ্রুত পরীক্ষার মামলাগুলি অন্তর্ভুক্ত থাকে, যাতে ডেনিসের সার্ভারকে অযথা ওভারলোড না করা যায়। সম্পাদনা করুন: @ মার্টিনইেন্ডারকে ধন্যবাদ 3 টি বাইট সংরক্ষণ করা হয়েছে ব্যাখ্যা:

.+
$*
+`(1+)\1
$+0
01
1

দশমিক থেকে বাইনারি রূপান্তর করুন।

.
$`_$'¶
_.{7}

A`_

সমস্ত সম্ভাব্য উপায়ে টানা 8 ডিজিট মুছে ফেলা স্ট্রিংগুলির একটি তালিকা তৈরি করুন।

O^`
1G`

এগুলি বিপরীত ক্রমে বাছাই করুন এবং প্রথম (বৃহত্তম) নিন।

+1`\B
:$`:
1

দশমিকের দিকে ফিরে রূপান্তর করুন। (@ মার্টিনএেন্ডারের ব্যাখ্যা দেখুন ))


1
কিছুক্ষণ আগে আমি এই সংক্ষিপ্ত বাইনারি সাথে দশমিক রূপান্তর করতে এসেছি । আমি ব্যাখ্যা করেছি যে এটি এই উত্তরে কীভাবে কাজ করে
মার্টিন ইন্ডার


2

রিরেজেক্স , 294 275 বাইট

আরও ভাল 'ফাংশন' সংজ্ঞা ব্যবহার করে 19 বাইট সংরক্ষণ করা হয়েছে

আমি বলতাম এটি কেবলমাত্র রেগেক্স ভাষার জন্যই বেশ ভাল।

বেস লিব ইউনারি এবং দশমিকের মধ্যে রূপান্তর করার অনুমতি দেয় (যা চ্যালেঞ্জটি স্পষ্টভাবে দশমিককে বর্ণিত হিসাবে প্রয়োজন), তবে বাইনারি সমর্থন করে না; সুতরাং আমি এটি লিখতে হয়েছিল স্ক্রিপ্টের অংশ হিসাবে এটিতে 120 বাইট যুক্ত করা উচিত।

#import base
b(\d*):(_*)\2_b/b1$1:$2b/b(\d*):(_+)\2b/b0$1:$2b/b(\d+):b/$1/b:b/0/B(_*):1/B$1$1_:/B(_*):0/B$1$1:/B(_*):B/$1/j(\d*),\1(\d)(\d{7})(\d*):/j$1$2,$1$2$3$4:,B:$1$4B/j(\d*),\1\d{0,7}:,?(.*)/,$2,/,((_+)_+),(\2),/,$1,/,(_+),(\1_*),/,$2,/^,(_*),$/d<$1>/j,b:u<(?#input)>b:

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

স্বতন্ত্র রেজেক্সেস দ্বারা।

#import base
b(\d*):(_*)\2_b/b1$1:$2b/
b(\d*):(_+)\2b/b0$1:$2b/
b(\d+):b/$1/
b:b/0/
B(_*):1/B$1$1_:/
B(_*):0/B$1$1:/
B(_*):B/$1/
j(\d*),\1(\d)(\d{7})(\d*):/j$1$2,$1$2$3$4:,B:$1$4B/
j(\d*),\1\d{0,7}:,?(.*)/,$2,/
,((_+)_+),(\2),/,$1,/
,(_+),(\1_*),/,$2,/
^,(_*),$/d<$1>/
j,b:u<(?#input)>b:

ধাপ

প্রথমত, আমরা 'বেস' লাইব্রেরিটি আমদানি করি যা দুটি রেগেক্স দেয়। এক যা u<numbers>একাকারে রূপান্তরিত হয়। এবং এক রূপান্তরিত যাd<unary_underlines> দশমিক হয়। এটি কারণ, চ্যালেঞ্জটির বেস 10 এ আইও প্রয়োজন।

তারপরে আমরা কয়েকটি মুষ্টিমেজাজকে সংজ্ঞায়িত করি যা ইউনারিকে বাইনারি রূপান্তর করে।

b(\d*):(_*)\2_b/b1$1:$2b/
b(\d*):(_+)\2b/b0$1:$2b/
b(\d+):b/$1/
b:b/0/

এর মধ্যে প্রথমটি b(\d*):(_*)\2_b/b1$1:$2b/অনুসন্ধান করে b, বিকল্পভাবে কিছু বাইনারি অঙ্কগুলি অনুসরণ করা হয়, তারপরে একটি :, তারপরে যে কোনও পরিমাণ আন্ডারলাইন থাকে, তারপরে ঠিক একই পরিমাণে আন্ডারলাইন প্লাস একের শেষে এবং অন্যটি হয় b

এরপরে আমরা এরপরে b1আগে থেকে বাইনারি অঙ্কগুলি :এবং আন্ডারস্কোরগুলির প্রথমার্ধে এবং শেষ পর্যন্ত শেষ করে প্রতিস্থাপন করবb

সুতরাং এইটি পরীক্ষা করে যদি অ্যানারি দুটি দ্বারা বিভাজ্য না হয় এবং যদি তাই হয় তবে এটি 1 টি বাইনারি অঙ্কগুলিতে প্রেন্ডেন্ড করে, তারপর একে বিয়োগকে দুটি দ্বারা বিভক্ত করে।

দ্বিতীয়টিটি b(\d*):(_+)\2b/b0$1:$2b/প্রায় আদর্শিক, তবে অতিরিক্তের জন্য _এটি যাচাই করে না , এর অর্থ এটি দুটি দ্বারা বিভাজ্য হলে কেবল এটি মেলে এবং এই ক্ষেত্রে 0তার পরিবর্তে প্রিপেন্ড করে।

তৃতীয়টি চেক করে যদি আমরা অ্যানারি ডিজিটের বাইরে না থাকি এবং যদি তাই হয় তবে কেবল বাইনারি অঙ্কগুলি ছেড়ে যাওয়ার জন্য প্যাডিংটি সরিয়ে ফেলে।

গত এক চেক যদি সেখানে ছিল না কোনো বাইনারি ডিজিট সরবরাহকৃত, এবং যে ক্ষেত্রে শুধু পাতার মধ্যে 0

আমরা সংজ্ঞায়িত রেগেক্সেসের পরবর্তী গ্রুপটি হ'ল বাইনারিটিকে ইউনারিতে রূপান্তর করা, এবং কিছুটা সহজ।

B(_*):1/B$1$1_:/
B(_*):0/B$1$1:/
B(_*):B/$1/

এই গোষ্ঠীর প্রথমটি, একে একে এর বিরোধীতার B(_*):1/B$1$1_:/মতো, একটি সনাক্ত করে এবং Bতারপরে যেকোন পরিমাণ ইউনারি ডিজিটের পরে :1। এটি Bএই ক্ষেত্রে ম্যাচের জন্য যাচাই করে না , কারণ এটি একবারে কেবল একটি সংখ্যার জন্য অনুসন্ধান করে। এটি যদি মিলে যায় তবে এটি আগের মিলিত পরিমাণটি ইউনারি অঙ্কের দ্বিগুণ করে এবং একটি যোগ করে, তারপরে একটিটি সরিয়ে দেয়।

দ্বিতীয়টি, B(_*):0/B$1$1:/প্রথমটির তুলনায় প্রায় আদর্শবাদী, ব্যতীত এটির 0পরিবর্তে মেলে 1এবং একটি অতিরিক্ত অখণ্ড অঙ্কটি যোগ করে না।

এর মধ্যে সর্বশেষ,, B(_*):B/$1/যদি বাইনারি সংখ্যার বেশি না থাকে এবং তা যদি অ্যানারিটিকে আবদ্ধ করে তা পরীক্ষা করে। এটির বিরোধী থেকে পৃথক, এর জন্য বিশেষ 0 কেসের দরকার নেই।

পরবর্তী আমরা jরেজেক্সেস সংজ্ঞায়িত করি, যা বিভাজন ফাংশন হিসাবে কাজ করে।

j(\d*),\1(\d)(\d{7})(\d*):/j$1$2,$1$2$3$4:,B:$1$4B/
j(\d*),\1\d{0,7}:,?(.*)/,$2,/

প্রথমটি, j(\d*),\1(\d)(\d{7})(\d*):/j$1$2,$1$2$3$4:,B:$1$4B/বেশিরভাগ ভারী উত্তোলন করে। এটি অনুসন্ধান করে j, বিকল্পভাবে বাইনারি অঙ্কগুলি অনুসরণ করে যা "ইনক্রিমেন্টার", তারপরে একটি কমা যার পরে বর্ধনকারী হয় ঠিক তখন 8 বাইনারি অঙ্কগুলি পরে বাকী বাইনারি সংখ্যাটি অনুসরণ করে, তারপর ক :। 8 সংখ্যার প্রথমটি বর্ধনকারীকে যুক্ত করা হয়, এভাবে এটি বৃদ্ধি করে, তারপরে বাইনারি ইনপুট থেকে those সংখ্যার ব্যতীত সমস্ত কিছুই :নিম্নলিখিত ক পরে সংযুক্ত করা হয় ,। তাই (যদি আমরা 8 পরিবর্তে 2 সংখ্যা ব্যবহার করে ছিল) j,1001:হয়ে যাবে j1:1001:,01তারপর j10:1001,01,11। অতিরিক্তভাবে, সংযুক্ত অ্যারে উপাদানগুলি মোড়ানো হয়B এগুলিতে ফিরে রূপান্তর করতে, সেগুলিতে ।

অন্যটি, j(\d*),\1\d{0,7}:,?(.*)/,$2,/ইনক্রিমেন্টারের পরে যাচাই করার জন্য 8 টিরও কম বাইনারি সংখ্যা রয়েছে কিনা তা পরীক্ষা করে এবং যদি তা হয় তবে এসগুলিতে আবৃত অ্যারে ব্যতীত অন্য সমস্ত কিছু সরিয়ে ফেলবে ,। যেমন।,_,___,

অ্যারে তৈরি করার সময় এবং তার পরে আমরা তুলনা রেজিক্সগুলি সংজ্ঞায়িত করি।

,((_+)_+),(\2),/,$1,/
,(_+),(\1_*),/,$2,/

এর মধ্যে প্রথমটি, ,((_+)_+),(\2),/,$1,/কমা পরীক্ষা করে তারপরে কিছু পরিমাণ আন্ডারস্কোর, তারপরে আরও কিছু, তার পরে কমা, তারপরে প্রথম পরিমাণের আন্ডারস্কোর, কমা থেকে নয়। এরপরে এটি ,এর দ্বারা ঘিরে থাকা প্রথম উপাদানের মোট পরিমাণের আন্ডারস্কোরের সাথে এটি প্রতিস্থাপন করে ।

পরেরটি, ,(_+),(\1_*),/,$2,/কমা অনুসন্ধান করে তারপরে কিছু পরিমাণ আন্ডারস্কোর অনুসরণ করে অন্য কমা, তারপরে একই পরিমাণ বা আরও আন্ডারস্কোর এবং একটি শেষ কমা। এটি পরিবর্তে সঠিক উপাদান ছেড়ে যাবে।

অবশেষে, যখন এইরূপে ম্যাচিংয়ের কোনও উপাদান বাকি থাকে, তখন ^,(_*),$আমরা পার্শ্ববর্তী কমাগুলি সরিয়ে দিয়ে দশমিকের মাধ্যমে ফিরে রূপান্তর করি d<>। তারপরে আর কোনও রেজেক্সস গুলি চালাতে পারে না এবং আউটপুট উপস্থাপন করা হয়।

ইনপুটটি প্রথমে টেম্পলেটে স্থাপন করা হয় j,b:u<(?#input)>b:, যা প্রথমে দশমিক ইনপুটটিকে আনারীতে রূপান্তর করে, যেমন 5-> j,b:_____b:, তারপরে ফলস্বরূপ অ্যানারি বাইনারি হয়ে যায়, j,101:তারপরে বাইনারি বিভক্ত হয় (যা উদাহরণের জন্য কাজ করে না), বৃহত্তম উপাদান পায়, রূপান্তর করে দশমিক ফিরে, এবং সম্পন্ন।


2

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

j;m;t;f(x){for(j=m=0;t=x>>j+8;m<t?m=t:j++)t=t<<j|x%(1<<j);return m;}

-২৩ বাইট বাই কোলেরা সু থেকে

পর্যন্ত সমর্থন করে 2**31-1

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

কম 8 বিট দিয়ে শুরু হয় (j=0), তারপরে উঠে যায়, যদি বিটগুলির সাথে [j,j+8)কাটা সংখ্যাটি আমাদের বর্তমানের চেয়ে বড় হয় এবং এক্স এর উপরে কোনও বিট না থাকে ততক্ষণ চালিয়ে যাওয়াj+8


2
স্টোর x>>j+8এবং x>>j+8<<j|x%(1<<j)একটি ভেরিয়েবলে (বন্ধনীগুলি সরানো) এটিকে হ্রাস করবে 68 বাইটে
কোলেরা সু


1

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

-3 বাইটস জাস্টিন মেরিনারকে ধন্যবাদ

f=(n,d='',c=n.toString(2).match(`(${d}).{8}(.*)`))=>c?Math.max('0b'+c[1]+c[2],f(n,d+'.')):0

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

আমার সমাধানটি পুনরাবৃত্তভাবে স্ট্রিং থেকে একটি 8-বিট খণ্ডকে ধরে, সর্বাধিক মানটি পাওয়া যায় taking


1
আমি মনে করি আপনি এটি একটি সংখ্যায় +(...)রূপান্তর করতে পারেন '0b'+c[1]+c[2], কারণ Math.maxইতিমধ্যে এটি করে। এটি অনলাইন চেষ্টা করুন! ( ভবিষ্যতের রেফারেন্সের জন্য বিশেষ )
জাস্টিন মেরিনার

@ জাস্টিনমারিনার, মিষ্টি, ধন্যবাদ!
রিক হিচকক

1

সি # (.নেট কোর) , 122 + 13 = 135 120 + 13 = 133 বাইট

n=>{int m=0,i=0,t;for(var b=Convert.ToString(n,2);i<b.Length-7;m=t>m?t:m)t=Convert.ToInt32(b.Remove(i++,8),2);return m;}

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

+13 এর জন্য using System;

আমি ভাবছি এটি ব্যবহার করার বাইরেও উপায় আছে Convert। যেভাবেই হোক, আমি নিশ্চিত যে এটি হ্রাস পেতে পারে।

প্রাপ্তি স্বীকার

-২ বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ

UnGolfed

n=>{
    int m=0,
        i=0,
        t;

    // convert n to a binary string,
    // go through removing each possible byte,
    // check if this is the biggest int so far
    for (var b=Convert.ToString(n,2); i<b.Length-7; m=t>m?t:m)
        t=Convert.ToInt32(b.Remove(i++,8),2); // remove 8 bits from position i, then convert from binary string to int

    return m;
}

আপনি পরিবর্তন করে একটি বাইট সংরক্ষণ করতে পারবেন whileকরার forএবং নির্বাণ var bএতে:for(var b=Convert.ToString(n,2);i<b.Length-7;)
কেভিন Cruijssen

এবং আপনি নতুন ইনট ভেরিয়েবল যুক্ত করে ,tএবং ব্যবহার না করে আরও 1 টি বাইট সংরক্ষণ করতে পারেন Math.Maxতবে পরিবর্তে একটি ম্যানুয়াল চেক করুন: n=>{int m=0,i=0,t;for(var b=Convert.ToString(n,2);i<b.Length-7;m=t>m?t:m)t=Convert.ToInt32(b.Remove(i++,8),2);return m;}( 120 + 13 বাইট )
কেভিন ক্রুইজসেন


1

পাইথ, 19 বাইট

eSmi.>>.<.BQd8d2a6l

বিকল্প উত্তর:

eSmi.<<8.>.BQdd2a6l

ব্যাখ্যা:

eSmi.>>.<.BQd8d2a6lQ | Implicit Q at the end, where Q = input
  m             a6lQ | Map the over [0, 1, 2, ... , floor(log base 2 of Q) - 7]
         .BQ         |  Convert Q to binary string
       .<   d        |  Cyclically rotate left by d
      >      8       |  Get string from position 8 to end.
    .>        d      |  Cyclically rotate right by d
   i           2     |  Convert from binary string to integer
eS                   | Find the last element of sorted list (maximum value)

অন্য উত্তরটি একই ধরণের পদ্ধতির ব্যবহার করে, এটি প্রথমে ডানদিকে ঘোরার পরে এবং শেষ 8 বাদে সমস্ত বিট পায়।


1

এমএটিএল , 23 21 বাইট

Bn8-:"GB[]@8:q+(XBvX>

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

B                       % Implicitly grab input, convert to binary
 n8-:                   % Create list of 1,2,... n-8, with n the size of the binary string
     "                  % Loop over this list
      GB                % Grab the input again, convert to binary once more.
        @8:q+           % Create indices of a slice of length 8
             [](        % Index into binary string, delete the slice
                XB    % Convert the remainder from binary to integer
                  vX> % Get the maximum number so far.

দুঃখজনকভাবে, Bn8-:8:!+q&)কেবল স্লাইসগুলি সরানোর জন্যই উত্পাদন করে, আমরা বাকি অংশটি রাখতে চাই না।


এই বাইট দুয়েক সংরক্ষণ Bn8-:"GB[]@8:q+(XBvX>(বরাদ্দ []দিয়ে (পরিবর্তে ব্যবহার করার &), এবং প্রতিস্থাপন &:দ্বারা :এবং উপরন্তু)
লুইস Mendo

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


0

অক্টাভা , 81 80 বাইট

@(x)max(bin2dec(dec2bin(x*(c=2.^(0:(b=nextpow2(x+1)-8))))(:,[1:b b+9:end]))'./c)

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

এটি আমার আসল প্রচেষ্টার একটি পৃথক সমাধান, আরও 14 বাইট সংরক্ষণ করে।

কোডটি নীচে ভেঙে দেওয়া হয়েছে:

@(x)max(                                                                       )
        bin2dec(                                                          )'./c
                                                         (:,[1:b b+9:end])
                dec2bin(x*(                            ))
                           c=2.^(0:                   )
                                   (b=nextpow2(x+1)-8)

ষষ্ঠ লাইনে পরবর্তী সংখ্যার ইনপুট (ইনপুট সংখ্যায় বিটের সংখ্যা) এর চেয়ে বড় শক্তির এক্সপোনেন্ট খুঁজে বের করে এবং প্রতিটি গ্রুপ থেকে আমরা 8 টি বিট অপসারণ করার সাথে সাথে 7 টি বিয়োগ করে গ্রুপের সংখ্যা গণনা করা হয় - ফলাফলটি হ'ল সঞ্চিত b পরে জন্য

এরপরে আমরা পঞ্চম লাইনে দু'জনের শক্তির একটি অ্যারে গণনা করি যা সমস্ত সম্ভাব্য গোষ্ঠীগুলির জন্য যথেষ্ট বড় যা সরানো যায়। আমরা এটিকে ভেরিয়েবলে সংরক্ষণ করিc পরবর্তী সময়ের জন্য ।

পরের লাইনে উপরে (সামনের লাইন), আমরা দুটি শক্তির অ্যারের দ্বারা ইনপুটটিকে গুণিত করি (প্রতিটি সংখ্যাকে সামান্যভাবে স্থানান্তরিত করে) এবং ফলাফলটি বাইনারিতে রূপান্তর করি। আমরা যদি 7831 এর উদাহরণ নিই তবে এর ফলে 2D অ্যারে রয়েছে:

000001111010010111
000011110100101110
000111101001011100
001111010010111000
011110100101110000
111101001011100000

এরপরে যদি আমরা কেন্দ্রটি 8 টি বিট কেটে ফেলি তবে এটি 8 টি বিটের প্রতিটি গ্রুপকে অপসারণের সমান। এটি তৃতীয় লাইনের দ্বারা করা হয়।

ফলস্বরূপ অ্যারেটি দ্বিতীয় লাইনের দশমিক দশকে রূপান্তরিত হয়। আমাদেরও ভাগ করে নিতে হবেc স্কেলিং যে প্রাথমিকভাবে প্রতিটি গ্রুপে করা হয়েছিল পূর্বাবস্থা।

অবশেষে প্রথম লাইনে একটি বেনাম ফাংশন ঘোষণা করা হয় এবং সমস্ত গ্রুপের সর্বাধিক মান গণনা করা হয়।


  • nextpow2(x+1)পরিবর্তে ব্যবহার করে 1 বাইট সংরক্ষণ করুনnnz(bin2dec(x))


আসল প্রচেষ্টা - 120 98 95 বাইট

@(x)max(bin2dec(reshape(repmat(a=(d=@dec2bin)(x)',1,b=nnz(a)-7)(d(255*2.^(0:b-1))'<49),[],b)'))

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

কোডটি নিম্নরূপে বিভক্ত হয়েছে:

@(x)max(                                                                                      )
        bin2dec(                                                                             )
                reshape(                                                              ,[],b)'
                        repmat(a=(d=@dec2bin)(x)',1,b=nnz(a)-7)(                     )
                                                                d(255*2.^(0:b-1))'<49

মূলত এটি এমন একটি ম্যাট্রিক্স গণনা করে যা মুছতে পারে এমন মানগুলির সম্ভাব্য গোষ্ঠীগুলি সমন্বিত করে এবং তারপরে কাজ করে যা সর্বাধিক সংখ্যা প্রদান করে।

লাইনে লাইনে কাজ করা, পঞ্চম লাইনটি সরিয়ে ফেলা যায় এমন গ্রুপগুলি গণনা করে। উদাহরণস্বরূপ, 7831 নিন This এটি একটি 13 বিট সংখ্যা, গ্রুপগুলি প্রদান করে:

1111100000000
1111000000001
1110000000011
1100000000111
1000000001111
0000000011111

পঞ্চম লাইনের ফলাফলটি 2D লজিক্যাল অ্যারে যা সূচকের জন্য ব্যবহার করা যেতে পারে।

কোডের চতুর্থ লাইন ইনপুটটিকে বিটের একটি অ্যারে রূপান্তর করে (অক্ষর '0' এবং '1' হিসাবে উপস্থাপিত) এবং তারপরে এটি n-7 বার প্রতিলিপি করে (যেখানেn বিটের সংখ্যায়) প্রতি সম্ভাব্য গ্রুপিংয়ের জন্য একটি লাইন প্রদান করে lic উপরের গ্রুপ মাস্কটি সম্ভাব্য প্রতিটি গ্রুপকে অপসারণ করতে ব্যবহৃত হয়।

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


  • গণিত ব্যবহার করে গ্রুপের ম্যাট্রিক্স তৈরি করে 22 বাইট সংরক্ষণ করা হয়েছে।
  • বাইনারি স্ট্রিং থেকে লজিকাল গ্রুপ মাস্কে রূপান্তর করতে 3 বাইট সংরক্ষণ করা হয়েছে।



0

পার্ল, 53 বাইট

( use 5.10.1লেন্জেজ স্তরে পার্ল আনতে ৫.১০.১ বিনামূল্যে)

এসটিডিনে ইনপুট নম্বর দিন। বড় সংখ্যাগুলির জন্য মেমরি ফুরিয়ে যাবে, তবে ইনপুটটিতে 32-বিট নম্বর এখনও কোনও সমস্যা নয়

#!/usr/bin/perl
use 5.10.1;
$_=sprintf"%b",<>;/.{8}(?{\$F[oct"0b$`$'"]})^/;say$#F
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.