পাঠ্য ফিজ বাজ


29

ভূমিকা

ফিজ বাজ ট্রেন্ডটি কোথা থেকে এসেছে তা আমি বিশেষত জানি না । এটি কেবল একটি মেম বা কিছু হতে পারে তবে এটি কিছুটা জনপ্রিয়।

চ্যালেঞ্জ

আপনার আজকের কাজটি হলেন যথাক্রমে ফিজ বাজকে বাইনারি (0, 1) তে রূপান্তর করা এবং সেই বাইনারিটিকে পাঠ্যে রূপান্তর করা। বেশ স্ট্যান্ডার্ড স্টাফ।

ওটা কিভাবে কাজ করে?

ফিজবজবাজবাজফিজবজফিজফিজফিজফিজফিজ ফিজবজবজফজফজবজফজফজফজফজবযযা 01101000 01101001 এ অনুবাদ করত তখন "হাই" তে অনুবাদ হবে

সীমাবদ্ধতাসমূহ

  • ইনপুট হ'ল বাইনারি স্ট্যান্ডপয়েন্টে ফিজ বাজ (নীচের উদাহরণ দেখুন see)
  • আউটপুট অবশ্যই পাঠ্য হবে।
  • আপনি ধরে নিতে পারেন FizzBuzz ইনপুটটি সঠিক।
  • এটি , সংক্ষিপ্ততম বাইট জয়।

ইনপুট

ফিজবজবাজফিজফিজবজফিজফিজফিজফিজ ফিজবজবজফজফজবজফজফজফজফজবজ ফজফজফজবজফজফজফজফজফজফজফজফজবজ

আউটপুট

"হাই!"


15
মেমে? এটি একটি প্রাথমিক (প্রাথমিক) স্কুল গেম
বিটা ডিকায়

2
আমরা কি ইনপুটটিতে ফাঁকা স্থান নিতে পারি না?
হাইপারনিউট্রিনো

2
আমরা কি সেই জায়গাটি নিতে পারি না? আমার যদি সেই স্পেসটি ইনপুট না করতে হয় তবে আমি তিনটি বাইট সংরক্ষণ করতে পারি।
হাইপার নিউট্রিনো

10
স্টিজ এক্সচেঞ্জে ফিজবজ বেশিরভাগ মুদ্রা উপভোগ করেছেন কারণ জোয়েল (অন্যতম প্রতিষ্ঠাতা) একটি ব্লগ পোস্ট করেছিলেন যা অন্য একটি ব্লগকে উল্লেখ করেছিল যা প্রোগ্রামিং আবেদনকারীদের প্রবেশের সমস্যাটিকে কম বাধা হিসাবে ব্যবহার করার বিষয়ে কথা বলেছিল
dmckee

8
@ ডিএমকেকে "অন্য একটি ব্লগ" উল্লেখ করেছেন যা জোল উল্লেখ করেছেন হ'ল জেফ অ্যাটউডস, স্ট্যাকওভারফ্লোয়ের অন্য প্রতিষ্ঠাতা।
পাইলসনেটিকস

উত্তর:


55

সি, 59 বাইট

i;f(char*s){while(*s&3?*s&9||(i+=i+*s%5):putchar(i),*s++);}

যাদু নম্বর, যাদু নম্বর সর্বত্র!

(এছাড়াও, পাইথন, জেএস, পিএইচপি, এবং রুবির চেয়ে সি সংক্ষিপ্ততর? শুনিনি!)

এটি এমন একটি ফাংশন যা ইনপুট হিসাবে স্ট্রিং নেয় এবং STDOUT এ আউটপুট দেয়।

walkthrough

মূল কাঠামোটি হ'ল:

i;           // initialize an integer i to 0
f(char*s){
while(...);  // run the stuff inside until it becomes 0
}

এখানে "ভিতরে থাকা স্টাফ" হ'ল কোডের একটি গোছা ,*s++, যেখানে কমা অপারেটর কেবল তার দ্বিতীয় যুক্তির মান প্রদান করে। অতএব, এটি স্ট্রিংয়ের মধ্য দিয়ে চলবে এবং প্রস্থান করার আগে *sঅনুশীলনকারী NUL বাইট (যেহেতু পোস্টফিক্স ++পূর্ববর্তী মানটি দেয়) সহ প্রতিটি অক্ষরে সেট করবে ।

বাকিটা একবার দেখে নিই:

*s&3?*s&9||(i+=i+*s%5):putchar(i)

ত্রৈমাসিক এবং শর্ট সার্কিটগুলি ছড়িয়ে দিয়ে ||এটিকে প্রসারিত করা যেতে পারে

if (*s & 3) {
    if (!(*s & 9)) {
        i += i + *s % 5;
    }
} else {
    putchar(i);
}

এই যাদু নম্বরগুলি কোথা থেকে আসে? জড়িত সমস্ত চরিত্রের বাইনারি উপস্থাপনা এখানে:

F  70  01000110
B  66  01000010
i  105 01101001
z  122 01111010
u  117 01110101
   32  00100000
\0 0   00000000

প্রথমত, আমাদের বাকী অক্ষর থেকে স্থান এবং NUL আলাদা করতে হবে। এই অ্যালগরিদম যেভাবে কাজ করে, এটি "বর্তমান" সংখ্যার সঞ্চয়কারী রাখে এবং যখন এটি কোনও স্থান বা স্ট্রিংয়ের শেষে (অর্থাত্ '\0') পৌঁছে যায় তখনই এটি মুদ্রণ করে । এটি লক্ষ্য করে ' 'এবং '\0'কেবলমাত্র দুটি তাত্পর্যপূর্ণ বিট সেট না রাখার জন্য কেবলমাত্র অক্ষর, আমরা অক্ষরে অক্ষরে এবং অক্ষরটি 0b11শূন্যের সাথে পেতে পারি যদি অন্যথায় চরিত্রটি স্থান বা NUL এবং nonzero হয়।

আরও গভীর খনন, প্রথম "যদি" শাখায়, এখন আমাদের একটি চরিত্র রয়েছে যা এর মধ্যে একটি FBizu। আমি কেবলমাত্র Fএস এবং এসগুলিতে সংযোজক আপডেট করতে বেছে নিয়েছি B, সুতরাং এস ফিল্টার করার জন্য আমার কিছু উপায়ের প্রয়োজন ছিল izu। সুবিধামতো, Fএবং Bউভয়েরই কেবল দ্বিতীয়, তৃতীয়, বা সপ্তমতম সর্বনিম্ন উল্লেখযোগ্য বিট সেট রয়েছে এবং অন্য সমস্ত সংখ্যায় কমপক্ষে একটি অন্য বিট সেট রয়েছে। আসলে, তাদের সবারই প্রথম বা চতুর্থ অন্তত গুরুত্বপূর্ণ বিট রয়েছে। অত: পর, আমরা bitwise করতে এবং 0b00001001, যা 9 0 উত্পাদ করবে Fএবং Bএবং অশূন্য অন্যথায়।

একবার আমরা এই সিদ্ধান্তে পৌঁছেছি আমরা একটি আছে Fবা Bআমরা তাদের ম্যাপ করতে পারেন 0এবং 1তাদের মডুলাস 5 গ্রহণ করে যথাক্রমে কারণ Fহয় 70এবং Bহয় 66। তারপরে স্নিপেট

i += i + *s % 5;

বলার এক গোলাপি উপায় way

i = (i * 2) + (*s % 5);

যা হিসাবে প্রকাশ করা যেতে পারে

i = (i << 1) | (*s % 5);

যা সর্বনিম্ন তাৎপর্যপূর্ণ অবস্থানে নতুন বিটটি সন্নিবেশ করায় এবং বাকি সমস্ত কিছু 1 এর চেয়ে বেশি স্থানান্তর করে।

"কিন্তু অপেক্ষা করো!" আপনি প্রতিবাদ করতে পারেন। "আপনি মুদ্রণের পরে i, এটি কখন 0 এ পুনরায় সেট হয়?" ঠিক আছে, putcharএটির পক্ষে তার যুক্তিটি কাস্ট করে unsigned charযা আকারে 8 বিট হতে পারে। এর অর্থ অষ্টমতম তাত্পর্যপূর্ণ বিট (অর্থাৎ পূর্ববর্তী পুনরাবৃত্তির জাঙ্ক) থেকে সমস্ত কিছু ফেলে দেওয়া হয় এবং আমাদের এটি নিয়ে উদ্বিগ্ন হওয়ার দরকার নেই।

একটি বাইট সংরক্ষণের সাথে প্রতিস্থাপনের পরামর্শ দেওয়ার জন্য @ETH প্রডাকশনগুলিকে ধন্যবাদ !579


পুটচরের সাথে দুর্দান্ত কৌশল।
কম্পুটারনিয়াম

এটি পুনরুত্থিত দুর্দান্ত। সি ঠিক করেছে!
গুস্তাভো ম্যাকিয়েল

13
জিনিসগুলি সঠিকভাবে করার বিষয়ে কথা বলছি, এটি আমার বিনীত মতে নয় যে কোড-গল্ফের উত্তর কীভাবে করা উচিত। আপনি একটি চতুর, অন্তর্দৃষ্টিপূর্ণ সমাধান পোস্ট করুন, এর সাথে একটি সম্পূর্ণ, সুস্পষ্ট লিখিত ব্যাখ্যা যা প্রকৃতপক্ষে ভাষা সম্পর্কে এমন কিছু শেখায় যা অন্যান্য, আরও ব্যবহারিক পরিস্থিতিতে কার্যকর হতে পারে।
কোডি ধূসর

3
@ কোডি গ্রে ঠিক এইভাবে। কোড গল্ফ আমার এসই এর শীর্ষে না রয়েছে যেগুলির মধ্যে আমি প্রায়শই ঘুরে দেখি কারণ প্রচুর উত্তর কেবল "এখানে কোড রয়েছে"। ভাষাগুলির সাথে খুব পরিচিত এমন লোকদের পক্ষে এটি দুর্দান্ত যদিও এটি আমার কাছে শোরগোলের মতো দেখাচ্ছে। আমি এখানে এর মতো ব্যাখ্যা দেখতে চাই কারণ এটি পদ্ধতিটি প্রকাশ করে , যা আমি মনে করি বেশিরভাগ লোক কোডের চেয়ে অনেক বেশি আকর্ষণীয় বলে মনে করে। কেবল আমার দুটি সেন্ট ...
ক্রিস সাইরেফাইস

খুব সুন্দর বিট্যাক, তবে আপনি এমএসবি (বাম) থেকে এলএসবি (ডান) থেকে আপনার বিটগুলি গণনা করছেন? আইএমও 8 বিট বাইটে বিট গণনা করার একমাত্র বুদ্ধিমান উপায় (বা একটি 128-বিট সিমডি ভেক্টর, বা যাই হোক না কেন) এলএসবি = বিট 0 থেকে এমএসবি = বিট 7
পিটার কর্ডেস

10

ওহ স্মার্ট, চ্যাপ্টা এটা অপ্রয়োজনীয় ছিল। খুশী হলাম।
হাইপার নিউট্রিনো

@ হাইপার নিউট্রিনো আপনার সম্পর্কে আমি যে মন্তব্য করেছি তা নোট করুন, ডুপিং এড়ানোর জন্য আমি কিছুটা আলাদা অ্যালগরিদম ব্যবহার করেছি (যদিও প্রযুক্তিগতভাবে অনুমতি দেওয়া হয়েছে আমি এটি পছন্দ করি না)।
এরিক আউটগল্ফার

@ ডাউনভোটার: ড্রাইভ বাই ডাউনভোটিংয়ের আগে আপনি কি একেবারেই পরীক্ষা করে দেখেছেন?
এরিক আউটগল্ফার


9

পাইথন 3 , 169 101 93 91 85 81 বাইট

lambda s,j="".join:j(chr(int(j('01'[b<"C"])for b in c[::4]),2))for c in s.split())

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

ব্যাখ্যা:

lambda s,j="".join:  # Create a lambda function
    j(  # call "".join, adds characters together with nothing in between
        chr(  # character by int
            int(  # string to int
                j(  # "".join again
                    '01'[b<"C"]  # 1 or 0, based on what character we get
                    for b in c[::4]  # For every first of 4 characters
                ),
                2)  # Base 2
        )
        for c in s.split()  # for every group of Fizz and Buzz with any whitespace character after it
    )

এটা দ্রুত ছিল. +1
হাইপারনিউট্রিনো

আমি কিছুটা আগে এর সাথে এরকম কিছু করেছি, এটি কেবল অনুলিপি-পেস্ট করার বিষয় ছিল এবং এটিকে ফিজবুজ-এ পরিবর্তন করা হয়েছে: পি
মার্টমিস্টরা

1
ওহ যে ব্যাখ্যা করে। : পি কিন্তু আপনি ছাপিয়ে গেছেন; _;
হাইপার নিউট্রিনো


1
উফফফফফফফ, এটি আবার করলেন , 85 বার বাইট দিয়ে একটি lambdaফাংশন দিয়েছিলেন
মিঃ এক্সকোডার

8

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

let f =

s=>`${s} `.replace(/.{4} ?/g,m=>m[s=s*2|m<'F',4]?String.fromCharCode(s&255):'')

console.log(f("FizzBuzzBuzzFizzBuzzFizzFizzFizz FizzBuzzBuzzFizzBuzzFizzFizzBuzz FizzFizzBuzzFizzFizzFizzFizzBuzz"))


খুব সুন্দর. আমি চেষ্টা এবং খাটো কিছু সঙ্গে আসা পর্যন্ত করতে ব্যর্থ হয়েছে, যদিও বিভিন্ন বিকল্প 80-বাইট ব্যবহার সমাধান আছে .replace(/..zz/g,, '0b'+ইত্যাদি
ETHproductions

@ ইথ প্রডাকশনগুলি পরিত্রাণ nপেতে 79 এ পৌঁছতে দেয় Sad দুঃখের বিষয়, এর জন্য ইনপুটটিতে অতিরিক্ত স্থান যুক্ত করা দরকার। সুতরাং বরং ব্যয়বহুল `${s} `
আর্নৌল্ড

7

জাপট , 26 24 19 17 বাইট

¸®ë4 ®c u5Ãn2 dÃq

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

সংরক্ষিত 2 ধন্যবাদ বাইট @Shaggy করার & 2 বাইট ধন্যবাদ @ETHproductions

ব্যাখ্যা

input: "FizzBuzzBuzzFizzBuzzFizzFizzFizz FizzBuzzBuzzFizzBuzzFizzFizzBuzz FizzFizzBuzzFizzFizzFizzFizzBuzz"

¸®                // ["FizzBuzzBuzzFizzBuzzFizzFizzFizz","FizzBuzzBuzzFizzBuzzFizzFizzBuzz","FizzFizzBuzzFizzFizzFizzFizzBuzz"]
  ë4              // ["FBBFBFFF","FBBFBFFB","FFBFFFFB"]
     ®c           // [[70,66,66,70,66,70,70,70],[70,66,66,70,66,70,70,66],[70,70,66,70,70,70,70,66]]
        u5Ã       // ["01101000","01101001","00100001"]
           n2     // [104,105,33]
              d   // ["h","i","!"]
               Ãq // "hi!"

1
আপনি 2 এর })সাথে প্রতিস্থাপন করতে পারেন Ã। এর চেয়ে আরও বেশি কিছু বাঁচাতে হবে তবে আমি এটি আমার ফোনে কাজ করতে পারছি না।
শেগি

1
খুব সুন্দর, জাপট ব্যবহারের জন্য ধন্যবাদ! আপনি প্রতিস্থাপন দুয়েক বাইট সংরক্ষণ করতে পারবেন ò4...q n2সঙ্গে ë4...n2( ë4হিসেবে একই জিনিস ò4; অদ্ভুত, এটা নথিভুক্ত হবে বলে মনে হচ্ছে না, শুধুমাত্র প্রথম আইটেম ফিরে ব্যতীত)
ETHproductions

1
জেফট তৈরির জন্য ধন্যবাদ!
বুলেটগুলি

6

রুবি, 65 63 60 বাইট

->s{s.split.map{|x|x.gsub(/..../){$&.ord%5}.to_i(2).chr}*''}

এটি একটি বেনাম প্রকল্প যা ইনপুট নেয় এবং স্ট্রিং হিসাবে আউটপুট দেয়।

->s{
s.split            # split on whitespace
.map{|x|           # for each word as x,
  x.gsub(/..../){  # replace each sequence of four characters with
    $&.ord%5       # the ASCII value of the first character, mod 5
                   # F is 70, B is 66, so this yields 0 for Fizz and 1 for Buzz
  }.to_i(2)        # interpret as a binary number
  .chr             # the character with this ASCII value
}*''               # join on empty string
}

6

জাভাস্ক্রিপ্ট (ES6), 95 88 85 81 বাইট

s=>s.replace(/..zz/g,m=>m<"F"|0).replace(/\d+ ?/g,m=>String.fromCharCode("0b"+m))

চেষ্টা করে দেখুন

f=
s=>s.replace(/..zz/g,m=>m<"F"|0).replace(/\d+ ?/g,m=>String.fromCharCode("0b"+m))
oninput=_=>o.innerText=f(i.value)
o.innerText=f(i.value="FizzBuzzBuzzFizzBuzzFizzFizzFizz FizzBuzzBuzzFizzBuzzFizzFizzBuzz FizzFizzBuzzFizzFizzFizzFizzBuzz")
*{font-family:sans-serif}
<input id=i><p id=o>


আমি বিশ্বাস করি এর +চেয়ে কমparseInt
ক্রিটিক্সী লিথোস

2
আমি মনে করি +(m[0]<"F")এটিকে সংক্ষিপ্ত করা যেতে পারেm<"F"|0
ইটিএইচ প্রডাকশনগুলি

5

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

print(pack'B*',<>=~y/FB -z/01/dr)

ইনপুটটিতে যথাক্রমে 0 এবং 1 এর সাথে 'এফ' এবং 'বি' প্রতিস্থাপন করে এবং অন্যান্য অক্ষর মুছে দেয়। এটি তখন packএই বিট স্ট্রিংটিকে ASCII অক্ষরে রূপান্তর করতে পার্লের ফাংশন ব্যবহার করে uses


বাহ এটি আমার পার্ল 5 প্রচেষ্টার প্রায় অর্ধেক আকারে গল্ফ হয়েছে। যশ।
ডেভিড কনরাড

1
আমি বিশ্বাস করি আপনি -p0কমান্ড লাইন বিকল্পটি ব্যবহার করে এটি যথেষ্ট সংক্ষিপ্ত করে তুলতে পারবেন (যা আপনাকে <>=~rইনপুট দেওয়ার জন্য সাশ্রয় করবে এবং এর $_=পরিবর্তে আপনি ব্যবহার করতে পারবেন print())। আপনি কীভাবে নিউলাইনগুলি পরিচালনা করতে চান তার উপর নির্ভর করে আপনার এমনকি এগুলির দরকারও পড়বে না 0। (এমনকি যদি আপনি কমান্ড লাইন বিকল্পের জরিমানা এড়াতে চান তবে এর sayচেয়ে কম হয় print))

@ ক্রিস আমার নয়, ফৌবিগুয়ের। কিন্তু ধন্যবাদ. ;)
ডেভিড কনরাড

@ ডেভিডকনরড আমার খারাপ হা হা।
ক্রিস

1
আপনার অবশ্যই 0 টির দরকার নেই। কেবল -p পতাকা ব্যবহার করুন এবং $_=pack'B*',y/FB -z/01/drআপনার প্রোগ্রামের জন্য আপনার স্কোরটি 26 বাইটে নামিয়ে আনুন।
ক্রিস

5

পাইথন 2 , 90 83 82 81 বাইট

-১ বাইট সম্পূর্ণরূপে মানবকে ধন্যবাদ
-১ বাইট ধন্যবাদ মার্টমিস্টদের
-1 বাইট ধন্যবাদ জোনাথন ফ্রেচের কাছে

lambda x:''.join(chr(int(`[+(l<'D')for l in b[::4]]`[1::3],2))for b in x.split())

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



আপনি বাঁক দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন *1 forমধ্যে*1for
Martmists

আপনি যেহেতু *1বুলিয়ান থেকে পূর্ণসংখ্যায় রূপান্তর করতে ব্যবহার করেন তাই আপনি একটি ব্যবহার করে বাইট সংরক্ষণ করতে পারেন +: (l<'D')*1forহতে পারে +(l<'D')for
জোনাথন ফ্রেচ

3

হোয়াইটস্পেস, 123 বাইট

দৃশ্যমান উপস্থাপনা:

SSNNSSNSNSSSNSNSTNTSTTTSSSTSSSSSNTSSTSNSNTSSNSSSTSSTTSNTSSTNTSTNSSSTNTSSSNSSTNSSNSNSSNSTNTSTNTSTNTSTSSSNSNNNSSSNSNTTNSSNSNN

অনাবৃত প্রোগ্রাম:

    push  0
loop:
    dup
    push  0
    dup
    ichr
    get
    push  32
    sub
    dup
    jz    space
    push  38
    sub
    jz    fizz
    push  1
    add
fizz:
    push  0
    dup
    dup
    ichr
    ichr
    ichr
    add
    jmp   loop
space:
    swap
    pchr
    jmp   loop

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


3

অক্টাভা , 59 57 53 বাইট

@(s)['',bi2de(flip(reshape(s(65<s&s<71)<70,8,[]))')']

এটি টিআইও-তে কাজ করে না, যেহেতু যোগাযোগ সরঞ্জাম বাক্সটি কার্যকর করা হয়নি। আপনি যদি অক্টটাভ-অনলাইনে এটি অনুলিপি করেন তবে এটি দুর্দান্ত কাজ করে । এটি এমএটিএলবিএতে কোডিং কোডের কাছাকাছিও নয়।

চারপাশে অন্য উপায়ের পরিবর্তে, ম্যাট্রিক্সটিকে উল্টানোর পরে ট্রান্সপোজ করে দুটি বাইট সংরক্ষণ করার ব্যবস্থা করা।

ব্যাখ্যা:

@(s)             % Anonymous function that takes a string as input
    ['',<code>]  % Implicitly convert the result of <code> to its ASCII-characters

এর মাঝখানে শুরু করা যাক <code>:

s(65<s&s<71)      % Takes the elements of the input string that are between 66 and 70 (B and F)
                  % This gives a string FBBFFBBFBBBFFFBF...
s(65<s&s<71)<70   % Converts the resulting string into true and false, where F becomes false.
                  % Transformation: FBBFFB -> [0, 1, 1, 0, 0, 1]

এর কল ফলে বুলিয়ান (বাইনারি) জন্য ভেক্টর যাক t

reshape(t,8,[])       % Convert the list of 1 and 0 into a matrix with 8 rows, one for each bit
flip(reshape(t,8,[])) % Flip the matrix vertically, since bi2de reads the bits from the wrong end
flip(reshape(t,8,[]))' % Transpose it, so that we have 8 columns, and one row per character
bi2de(.....)'          % Convert the result decimal values and transpose it so that it's horizontal

3

পার্ল 5, 28 বাইট + 4 বাইট ফ্ল্যাগের জন্য = 32 বাইট

পতাকা সহ চালান -040pE

$_=chr oct"0b".y/FB -z/01/dr

-040 রেকর্ড পৃথককারীটিকে একটি স্পেসে সেট করে যাতে পার্ল ফিৎজবাউজের প্রতিটি গ্রুপকে একটি পৃথক লাইন হিসাবে দেখবে, তারপরে সেই রেখাগুলির উপরে লুপ করবে, এফ থেকে 0, বি থেকে 1 পরিবর্তন করবে, সমস্ত কিছু মুছবে, তারপরে বাইনারিতে রূপান্তর করবে এবং সেখান থেকে এসকিআইতে রূপান্তর করবে।


2

জেলি , 9 বাইট

Ḳm€4=”BḄỌ

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

Ḳm€4=”BḄỌ  Main Link
Ḳ          Split on spaces
  €        Map
 m 4       Take every fourth letter (F and B)
    =”B    Check if each letter is equal to B (gives the binary representation)
       Ḅ   Binary -> Integer
        Ọ  Unord; gives chr(i)

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




2

ব্রেন-ফ্লাক , 107 বাইট

{(((((()()()()){}){}){})({}[{}])()())((){[()](<{}>)}{}<>)<>{(<{}{}{}{}>)<>({}({}){})<>}{}}<>{({}<>)<>}<>

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

জন্য +3 বাইট -cপতাকা ।

ব্যাখ্যা

{                                        For each character in input:
 (((((()()()()){}){}){})({}[{}])()())    Push 32-n and 66-n
 ((){[()](<{}>)}{}<>)<>                  If character is B, push 1 on second stack.  Otherwise, push 0
 {                                       If character is not space:
  (<{}{}{}{}>)                           Burn 3 additional characters
  <>({}({}){})<>                         Multiply current byte by 2 and add previously pushed bit
 }                                       (otherwise, the pushed 0 becomes the new current byte)
 {}                                      Remove character from input
}
<>{({}<>)<>}<>                           Reverse stack for output

2

কিউ / কেডিবি +, 41 40 37 33 বাইট

সমাধান:

{10h$0b sv'66=vs[" ";x][;4*(!)8]}

উদাহরণ:

q){10h$0b sv'66=vs[" ";x][;4*(!)8]}"FizzBuzzBuzzFizzBuzzFizzFizzFizz FizzBuzzBuzzFizzBuzzFizzFizzBuzz FizzFizzBuzzFizzFizzFizzFizzBuzz"
"hi!"

ব্যাখ্যা:

প্রথম অক্ষরটিতে (যেমন ) এই তালিকাগুলির প্রত্যেকটিতে " "আলাদা আলাদা FizzBuzz...সূচি, সূচী দেওয়াতে ইনপুট স্ট্রিংটি বিভক্ত করুন 0 4 8 ... 28। প্রতিটি অক্ষর "B"(ASCII 66) কিনা তা দ্বারা নির্ধারিত বুলিয়ান তালিকা প্রদান করুন । এই তালিকাগুলিকে বেস 10 এ রূপান্তর করুন এবং তারপরে ফলাফলটি স্ট্রিংয়ে দিন।

{10h$0b sv'66=vs[" ";x][;4*til 8]} / ungolfed solution
{                                } / lambda function with x as implicit input
              vs[" ";x]            / split (vs) input (x) on space (" ")
                           til 8   / til 8, the range 0..7 inclusive
                         4*        / vectorised multiplication, 0 1 2 3 => 0 4 8 12
                       [;       ]  / index the 2nd level at these indices (0, 4, 8 ... 28)
           66=                     / 66 is ASCII B, 66="FBBFBFFF" -> 01101000b
     0b sv'                        / join (sv) each row back with 0b (converts from binary)
 10h$                              / cast to ASCII (0x686921 -> "hi!")

1

হাস্কেল, 72 বাইট

(>>= \w->toEnum(foldl1((+).(2*))[mod(fromEnum c)5|c<-w,c<'a']):"").words

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

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

            words      -- split input string into words at spaces
(>>=      )            -- map the function to each word and flatten the resulting
                       -- list of strings into a single string
   \w->                -- for each word w
       [  |c<-w,c<'a'] -- take chars c that are less than 'a' (i.e. B and F)
     mod(fromEnum c)5  -- take ascii value of c modulus 5, i.e. convert to bit value
    foldl1((+).(2*))   -- convert list of bit to int
  toEnum(   ):""       -- convert ascii to char.  :"" forces toEnum to be of type String
                       -- now we have a list of single char strings, e.g. ["h","i","!"]        

1

জাভাস্ক্রিপ্ট ES6 - 98 বাইট

অনেকগুলি বাইট, তবে কমপক্ষে পাঠযোগ্য

এটি 98 বাইট হিসাবে ফাংশন হিসাবে সংজ্ঞায়িত করা হয়েছে

let s=>s.replace(/(F)|(B)|./g,(c,F,B)=>B?1:F?0:'').replace(/.{8}/g,v=>String.fromCharCode('0b'+v))

পরীক্ষা:

"FizzBuzzBuzzFizzBuzzFizzFizzFizz FizzBuzzBuzzFizzBuzzFizzFizzBuzz FizzFizzBuzzFizzFizzFizzFizzBuzz"
.replace(/(F)|(B)|./g,(c,F,B)=>F?0:B?1:'').replace(/.{8}/g,v=>String.fromCharCode('0b'+v))

ব্যাখ্যা:

/(F)|(B)|./

গ্রুপ এফ এবং বি অক্ষর এবং অন্য যে কোনও কিছুর সাথে মেলে

(c,F,B)=>F?0:B?1:''

একটি ফাংশন যা গ্রুপগুলি ক্যাপচার করে, F এর জন্য 0 এবং B এর জন্য 1 প্রদান করে, বা ''

সি হ'ল চরিত্রটি মেলে
এফ এবং বি এখন পরামিতি!
3 য় গ্রুপ পরামিতি হিসাবে বাদ দেওয়া হয়

F এবং B হয় undefinedযখন তৃতীয় গ্রুপের মিল হয়
B হয় undefinedযখন গ্রুপ F এর সাথে মিল হয়

ফলাফল 0100 .. ইত্যাদি স্ট্রিং

8 বাইট টুকরা কাটা হয়

.replace(/.{8}/g,v=>String.fromCharCode('0b'+v))

এবং 0 বি বাইনারি স্ট্রিং হিসাবে প্রক্রিয়াজাত করা হয়


2
পিপিসিজিতে আপনাকে স্বাগতম! এই চ্যালেঞ্জের উদ্দেশ্যটি হল একটি প্রোগ্রাম বা ফাংশন সরবরাহ করা যথেচ্ছ ফিজবজ স্ট্রিং অনুবাদ করে। আমি বেশি জাভাস্ক্রিপ্ট জানি না, তবে একটি বৈধ ফাংশন জমা দেওয়া হতে পারে s=>s.replace( ...। এছাড়াও আপনার উত্তর শিরোনাম একটি বাইট গণনা অন্তর্ভুক্ত করবেন না।
লাইকনি

আমি আপনার কোড ফর্ম্যাটিং কিছু পরিষ্কার করেছি। এছাড়াও, আপনার প্রয়োজন নেই let, বেনামে ফাংশন গ্রহণযোগ্য।
শেগি




0

গুগল শিটস, 94 বাইট

=ArrayFormula(JOIN("",CHAR(BIN2DEC(SPLIT(SUBSTITUTE(SUBSTITUTE(A1,"Fizz",0),"Buzz",1)," ")))))

আমি ফিজবজ বাইনারি সম্পর্কে পরিচিত নই তবে মনে হয় তারা স্পেস দিয়ে অঙ্কিত তাই এই সূত্রটি তার উপর নির্ভর করে। যুক্তিটি বেশ সহজ:

  • Fizzসাথে 0এবং Buzzসাথে প্রতিস্থাপন করুন1
  • ডিলিমিটার হিসাবে একটি স্থান ব্যবহার করে ফলাফলটিকে অ্যারেতে বিভক্ত করুন
  • প্রতিটি উপাদানকে বাইনারি থেকে দশমিক এ রূপান্তর করুন
  • প্রতিটি উপাদানকে এর ASCII সমতুল্য দিয়ে প্রতিস্থাপন করুন
  • সীমানা ছাড়াই প্রতিটি উপাদান যোগ দিন

0

জাভা 8, 117 115 বাইট

s->{for(String x:s.split(" "))System.out.print((char)Long.parseLong(x.replace("Fizz","0").replace("Buzz","1"),2));}

আমি সন্দেহ করি আপনি অন্যান্য উত্তরগুলির মতো জাভাতে প্রচুর অভিনব রেগেক্স রিপ্লেসমেন্ট করতে পারবেন, মূলত কারণ আপনি জাভা-রেজিজেসগুলিতে বন্দী ক্যাপচার-গ্রুপগুলির সাথে কিছুই করতে পারবেন না ( উদাহরণস্বরূপ "$1".charAt(...)বা "$1".replace(...)সম্ভবত সম্ভব নয়।)

ব্যাখ্যা:

এখানে চেষ্টা করুন।

s->{                          // Method with String parameter and no return-type
  for(String x:s.split(" "))  //  Loop over the input split by spaces:
    System.out.print(         //   Print:
     (char)                   //    Each character
     Long.parseLong(          //    after we've converted each binary-String to a long
      x.replace("Fizz","0").replace("Buzz","1")
                              //    after we've replaced the Fizz/Buzz to 0/1
     ,2));
}                             // End of method

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.