একটি ফিজবুজ সংকলক তৈরি করুন


17

সংকলক গল্ফ বিশ্বের আপনাকে স্বাগতম। আপনার কাজটি হ'ল এমন একটি প্রোগ্রাম লিখুন যা স্পিতে ফিজবুজের একটি বৈকল্পিক খেলতে অন্য প্রোগ্রাম উত্পন্ন করে।

আপনার সংকলক

একটি কম্পাইলার লিখুন যা ফিজবজ প্রোগ্রামটির বিভিন্ন রূপ তৈরি করে। এই বৈকল্পিকের বৈশিষ্টটি পূর্ণসংখ্যার / স্ট্রিং জোড়াগুলির অ্যারের আকারে প্রকাশ করা হয়।

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

উপরোক্ত নিয়মগুলি মেনে চলতে না দেওয়া ইনপুটগুলির জন্য আচরণটি অপরিজ্ঞাত।

আপনার উত্সাহিত FizzBuzz প্রোগ্রাম

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

  • উত্পন্ন প্রোগ্রাম অবশ্যই সংকলক হিসাবে একই ভাষায় থাকতে হবে।
  • ইনপুট এন কোনওভাবে আপনার ভাষার পক্ষে সুবিধাজনক হতে পারে।
  • n এর কমপক্ষে একটির মান হবে।
  • সংখ্যার সংকলকটিতে অন্তত একটি পূর্ণসংখ্যার ইনপুটগুলির একাধিক সংখ্যার একসাথে যোগদান হওয়া সংখ্যার সাথে যুক্ত জোড়যুক্ত সমস্ত স্ট্রিং প্রতিস্থাপন করতে হবে।
  • একটি নম্বর যা ফিজবুজ স্ট্রিং দ্বারা প্রতিস্থাপন করা হবে না তা অবশ্যই দশমিক ASCII এ আউটপুট হতে হবে।

উদাহরণ স্বরূপ;

> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz

স্কোরিং

আপনার সংকলকটি আপনার সংকলকটির দৈর্ঘ্যে যোগ হওয়া সংস্থাগুলির দৈর্ঘ্যে আপনার এন্ট্রি স্কোর করবে। নীচের প্রতিটি প্যারামিটারের সাথে আপনার সংকলকটি বহুবার চালান এবং আপনার স্কোর সন্ধানের জন্য সংকলকটির দৈর্ঘ্যের সাথে উত্পন্ন প্রোগ্রামগুলির দৈর্ঘ্য যুক্ত করুন।

  1. জাস্ট কাউন্ট। (কোনও ইনপুট নেই - উত্পন্ন প্রোগ্রামটি প্রতিস্থাপন ছাড়াই 1 থেকে n গণনা করবে ))
  2. জাস্ট গল্ফ (1: গল্ফ - উত্পন্ন প্রোগ্রামটি "গল্ফ" কে n বার আউটপুট দেবে ))
  3. ক্লাসিক FizzBuzz। (3: ফিজ, 5: বাজ)

(নোট করুন যে আপনার সংকলকটি কেবল এই তালিকাভুক্ত নয়, কোনও বৈধ ইনপুট জন্য কোড উত্পন্ন করতে প্রয়োজন))


সংকলকের দৈর্ঘ্যের জন্য কোনও স্কোরিং নেই ??
স্পার

আমরা কি অনুমান করতে পারি যে পূর্ণসংখ্যাগুলি একক অঙ্ক? যে স্ট্রিং মধ্যে কোন ফাঁকা আছে?
স্পার

পছন্দ করুন মনে রাখবেন, এটি কেবলমাত্র কোড তৈরি করেছে যা আপনার স্কোর তৈরি করে।
বিলপিজ

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

1
অবশেষে এমন একটি গল্ফ চ্যালেঞ্জ যা এডাব্লুকে-তে লিখতে বোধগম্য।
শ্যাডটলকার

উত্তর:


8

পাইথন 3 - 168 162 + 230 = 392

ওহ, পাইথন, আপনি অনেক চেষ্টা করে দেখুন, তবে import sys;sys.argv 4 টি সত্যিই ব্যথা হয়!

import sys;a=eval(sys.argv[1])
print("import sys\nfor i in range(1,int(sys.argv[1])+1):print("+"+".join('"%s"*(i%%%d==0)'%t for t in a)+(a and"or str(i))"or"i)"))

আউটপুট প্রোগ্রাম:

import sys
for i in range(1,int(sys.argv[1])+1):print(i)
import sys
for i in range(1,int(sys.argv[1])+1):print("Golf"*(i%1==0)or str(i))
import sys
for i in range(1,int(sys.argv[1])+1):print("Fizz"*(i%3==0)+"Buzz"*(i%5==0)or str(i))
  • মূল প্রোগ্রামটির জন্য প্রত্যাশিত ইনপুটটি পাইথন টিপলসের একটি বাছাই-সক্ষম ক্রম বা '()'কোনও ইনপুট নয়। (আপনি "সুবিধাজনক" বলেছেন did) উদাহরণ ইনপুট:'()' , '("Golf",1),', '("Fizz",3),("Buzz",5)'নোট শেল জন্য মূল্য উদ্ধৃতি এবং এক ইনপুট জন্য কমা trailing।

  • ডিক (অপরিজ্ঞাত অর্ডার!) থেকে টিপলস এ পরিবর্তন করে 1am ভুল স্থির করা হয়েছে।

  • অন্যান্য প্রোগ্রামগুলির জন্য প্রত্যাশিত ইনপুটটি কেবল সংখ্যা


আপনার উদাহরণ কমান্ড লাইন আর্গুমেন্টে, আমাকে ডাবল উদ্ধৃতিতে মুড়ে ফেলা এবং 'ফিজ' এবং 'বাজ' এর জন্য একক উদ্ধৃতি ব্যবহার করতে হয়েছিল - যেমন `" {3: 'ফিজ', 5: 'বাজ' however "তবে প্রোগ্রামটি এখনও রয়েছে আমার জন্য একটি ত্রুটি নিক্ষেপ।
জেমস উইলিয়ামস

ত্রুটি কী?
জেসন এস

@ জেসনস - হাই! আমি এই চ্যালেঞ্জ আপনার অভিজ্ঞতা আগ্রহী। meta.codegolf.stackexchange.com/questions/5050/…
বিলপিজ

6

perl6 376 340 84 + 115 = 199

আপডেট: sayছাড়াই পার্ল 5 থেকে পার্ল 6 এ স্যুইচ করা হয়েছে use feature

আপডেট: পাঁচটির পরিবর্তে তিনটি পরীক্ষার মামলা

ফিজবুজ-এর ইতিমধ্যে কয়েকশ 'গল্ফযুক্ত সমাধান রয়েছে এবং অনেকগুলি প্রতিযোগিতা একই ফলাফলের সাথে শেষ হয়, তাই আমি এখান থেকেই শুরু করেছি। আমার সংকলকটি কেবলমাত্র সেই সমাধানটির একটি কাস্টমাইজড সংস্করণ তৈরি করে। "কেবল গণনা" প্রকরণের জন্য অ্যাকাউন্টে কয়েকটি অতিরিক্ত অক্ষর .োকানো হয়েছিল।

সংকলক, এরকম আর্গুমেন্ট প্রত্যাশা করে: "Fizz 3" "Buzz 5"

print'say(('.(join'.',map{'('.(join')[$_%',split).']'}@ARGV).')||$_)for 1..$ARGV[0]'

সংকলিত প্রোগ্রামগুলি, এর মতো যুক্তির প্রত্যাশা করুন: 100

say(()||$_)for 1..$ARGV[0]
say(((Golf)[$_%1])||$_)for 1..$ARGV[0]
say(((Fizz)[$_%3].(Buzz)[$_%5])||$_)for 1..$ARGV[0]

পুরানো পরীক্ষার মামলার জন্য সংকলিত প্রোগ্রাম:

say(((Twoo)[$_%2].(Four)[$_%4].(Eiht)[$_%8])||$_)for 1..$ARGV[0]
say(((Twoo)[$_%2].(Thre)[$_%3].(Five)[$_%5].(Sevn)[$_%7])||$_)for 1..$ARGV[0]

আমি প্রশ্নের মন্তব্যে আলোচিত নিয়মগুলি পরিবর্তন করেছি। আপনি আপনার স্কোরটি পুনরায় গণনা করতে চাইবেন।
বিলপিজ

@ বিলপিগ সম্পন্ন হয়েছে, এবং উন্নত হয়েছে :)
স্পার

হাই! আমি এই চ্যালেঞ্জ আপনার অভিজ্ঞতা আগ্রহী। meta.codegolf.stackexchange.com/questions/5050/…
বিলপিজ

3

পাইথ - 51 + (38 + 43 + 50) = 182 বাইট

সম্ভবত কয়েক বাইট সংকলক গল্ফ করতে পারেন। তাদের সকলের লিঙ্কগুলি অনলাইন ইন্টারপ্রেটারের কাছে পারমলিক্স।

সংকলক - 51 বাইট

%"K[%s)=dc\"%s\"dFGr1hQJkFNKI!%%GN~J@dxKN))?JJG",zw

কেবল ইনপুট টিপল দিয়ে স্ট্রিং ফর্ম্যাটিং করে। ইনপুট লাগে:

3 5
Fizz Buzz

কিছুই - 38 বাইট

K[)=dc""dFGr1hQJkFNKI!%GN~J@dxKN))?JJG

জাস্ট গল্ফ - 43 বাইট

K[1)=dc"Golf"dFGr1hQJkFNKI!%GN~J@dxKN))?JJG

ক্লাসিক ফিজ বাজ - 50 বাইট

K[3 5)=dc"Fizz Buzz"dFGr1hQJkFNKI!%GN~J@dxKN))?JJG

2

সি ++ 11 ~ 486 + (234 + 244 + 255) = 1219

এখানে প্রথম অংশগ্রহণ, এই চ্যালেঞ্জটি সবচেয়ে কঠিন সমস্যাগুলির মধ্যে নয় তাই আমি ভেবেছিলাম এটি চেষ্টা করে দেখি। যদিও সি ++ ব্যবহার করা হচ্ছে এবং সি ++ 11 সংযোজন সহ এটি এখনও একটি সুন্দর ভার্জোজ ভাষা, তবে আমি নিশ্চিত যে উন্নতির কোনও জায়গা আছে।

সংকলক (486):

#include<sstream>
#include<iostream>
using namespace std;main(int c,char**v){stringstream t;int i;string s,o;o="#include <iostream>\n#include <map>\nusing namespace std;main(int c,char**v){int i,n=stoi(v[1]);map<int,string> f{";int z=2;for(int j=1;j<c;++j){t.str(v[j]);t.clear();t >> i; t >> s;o+="{"+to_string(i)+",\""+s+"\"}"+(z++==c?"":",");}o+= R"(};bool p;for(i=1;i<n;++i){p=true;for(auto e:f){if(i%e.first==0){cout<<e.second;p=false;}}cout<<(p?to_string(i):"")+"\n";}})";cout<<o;}

এটি 3Fizz 5Buzzইত্যাদি আকারে যুক্তি ধরে নেয়

গণনা (234):

#include <iostream>
#include <map>
using namespace std;main(int c,char**v){int i,n=stoi(v[1]);map<int,string> f{};bool p;for(i=1;i<n;++i){p=true;for(auto e:f){if(i%e.first==0){cout<<e.second;p=false;}}cout<<(p?to_string(i):"")+"\n";}}

গল্ফ (244):

#include <iostream>
#include <map>
using namespace std;main(int c,char**v){int i,n=stoi(v[1]);map<int,string> f{{1,"Golf"}};bool p;for(i=1;i<n;++i){p=true;for(auto e:f){if(i%e.first==0){cout<<e.second;p=false;}}cout<<(p?to_string(i):"")+"\n";}}

ফিজবজ (255):

#include <iostream>
#include <map>
using namespace std;main(int c,char**v){int i,n=stoi(v[1]);map<int,string> f{{3,"Fizz"},{5,"Buzz"}};bool p;for(i=1;i<n;++i){p=true;for(auto e:f){if(i%e.first==0){cout<<e.second;p=false;}}cout<<(p?to_string(i):"")+"\n";}}

অতিরিক্ত তথ্য

জিসিসি 4.8.1 এর সাথে পরীক্ষিত, কোনও সংকলক চিট নয়।

পরীক্ষার কেসগুলি উত্পন্ন করে স্বয়ংক্রিয়ভাবে চালাতে এবং সেগুলি চালাতে (ব্যবহার করুন make run) এখানে একটি ছোট মেকফিল রয়েছে :

run:
    g++ main.cpp --std=c++11 -o fbc

    ./fbc > count.cpp
    g++ count.cpp --std=c++11
    echo "======= Count ========"
    ./a.out 15

    ./fbc 1Golf > golf.cpp
    g++ golf.cpp --std=c++11
    echo "======= Golf ========"
    ./a.out 15

    ./fbc 3Fizz 5Buzz > fizzbuzz.cpp
    g++ fizzbuzz.cpp --std=c++11
    echo "======= FizzBuzz ========"
    ./a.out 15

হাই! আমি এই চ্যালেঞ্জ আপনার অভিজ্ঞতা আগ্রহী। meta.codegolf.stackexchange.com/questions/5050/…
বিলপিজ

map<int,string> fহতে পারে map<int,string>f। আপনি j=1একই সাথে আরম্ভ করতে পারে z
Yytsi

2

রুবি 99 + (86 + 94 + 103) = 382

puts"(1..ARGV[0].to_i).each{|i|x=[];#{ARGV[0]}.each{|k,v|x<<v if i%k==0};puts x.size>0?x.join():i}"

ব্যবহার:

wc -c main.rb # 99 chars
ruby main.rb "{}" | ruby - 100 # 1..2..3..
ruby main.rb "{}" | wc -c # 86 chars
ruby main.rb "{1=>:Golf}" | ruby - 100 # Golf..Golf..Golf..
ruby main.rb "{1=>:Golf}" | wc -c # 94 chars
ruby main.rb "{3=>:Fizz,5=>:Buzz}" | ruby - 100 # 1..2..Fizz..4..Buzz..
ruby main.rb "{3=>:Fizz,5=>:Buzz}" | wc -c # 103 chars

2

স্ট্যাক্স , 23 + 5 + 17 + 29 = 74

╥╟.└ç╘SJ∞CF╔v=▌╝Σ@∞ìé«g

এটি চালান এবং এটি ডিবাগ করুন

এখন পর্যন্ত সংক্ষিপ্ত উত্তর জেলি দ্বারা আশ্চর্যজনকভাবে পরাজিত নয়। স্ট্যাক্সে সরবরাহ করা স্ট্রিং টেম্পলেটটি সত্যই ঝরঝরে এবং প্রিন্টফের মতো ফাংশন সরবরাহ করে। সংকলক দ্বারা উত্পাদিত প্রোগ্রামগুলি প্যাকিং ব্যবহার না করে ম্যানুয়ালি কোডগলফিংয়ের মাধ্যমে অর্জন করা সর্বোত্তম হিসাবে প্রায় সর্বদা সংক্ষিপ্ত থাকে।

সংকলক নিজেই 23 বাইট দীর্ঘ।

এএসসিআইআই সমতুল্য:

{H34|S_h"_`c%z`n?+"m"mz`cc_?

প্রদত্ত ইনপুট [], এটি তৈরি করে (5 বাইট)

mzc_?

এটি চালান এবং এটি ডিবাগ করুন

প্রদত্ত ইনপুট [[1,"Golf"]], এটি তৈরি করে (17 বাইট)

mz_1%z"Golf"?+c_?

এটি চালান এবং এটি ডিবাগ করুন

প্রদত্ত ইনপুট [[3,"Fizz"],[5,"Buzz"]], এটি তৈরি করে (29 বাইট)

mz_3%z"Fizz"?+_5%z"Buzz"?+c_?

এটি চালান এবং এটি ডিবাগ করুন


1

সাধারণ লিপ, 636 577

(ql:quickload'cl-ppcre)(lambda(z)(princ(subseq(ppcre:regex-replace-all" *([(')]) *"(with-output-to-string(@)(print`(lambda(n)(dotimes(i n)(loop for(m s)in ',z if(=(mod(1+ i)m)0)do(princ s))(do()((fresh-line))(princ (1+ i)))))@))"\\1")1)))

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

স্কোর

(let ((*standard-output* (make-broadcast-stream)))
  (loop
     for form in '(215                      ; Compiler
                   ()                       ; Count
                   ((1 "Golf"))             ; Golf
                   ((3 "Fizz")(5 "Buzz")))  ; FizzBuzz
     for length = (if (numberp form) form
                      (length (funcall *fun* form)))
     collect length into lengths
     sum length into sum
     finally (return (values sum lengths))))

প্রত্যাবর্তিত মান:

574
(215 111 119 129)

চমত্কার

(defun fizz-buzz-compiler (z)
  (princ (subseq
          (cl-ppcre:regex-replace-all
           " *([(')]) *"
           (with-output-to-string (stream)
             (print
              `(lambda (n)
                 (dotimes(i n)
                   (loop for (m s) in ',z
                      if (=(mod(1+ i)m)0)
                      do (princ s))
                   (do () ((fresh-line))
                     (princ (1+ i))))) stream))
             "\\1") 1)))

ইনপুট ফর্ম্যাটটি (number string)দম্পতিদের একটি তালিকা । উদাহরণ স্বরূপ:

(fizz-buzz-compiler '((3 "Fizz")(5 "Buzz")))

... স্ট্যান্ডার্ড আউটপুট প্রিন্ট:

(LAMBDA(N)(DOTIMES(I N)(LOOP FOR(M S)IN'((3 "Fizz")(5 "Buzz"))IF(=(MOD(1+ I)M)0)DO(PRINC S))(DO NIL((FRESH-LINE))(PRINC(1+ I)))))

... যা বেশ সুন্দরভাবে মুদ্রিত:

(lambda (n)
  (dotimes (i n)
    (loop for (m s) in '((3 "Fizz") (5 "Buzz"))
          if (= (mod (1+ i) m) 0)
          do (princ s))
    (do () ((fresh-line)) (princ (1+ i)))))

ফলাফলের কার্যকারিতা পরীক্ষা করা:

CL-USER> ((lambda (n)
  (dotimes (i n)
    (loop for (m s) in '((3 "Fizz") (5 "Buzz"))
          if (= (mod (1+ i) m) 0)
          do (princ s))
    (do () ((fresh-line)) (princ (1+ i))))) 20)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz


1

জেলি , 88 84 83 73 বাইট

এখন পর্যন্ত সংক্ষিপ্ত উত্তর ( 1 বাইট দ্বারা পূর্ববর্তী "সংক্ষিপ্ত উত্তর" বীট )

কম্পাইলার:

Ṿ€“ḍ@€“ẋ"ЀF€ȯ"”jµFF?⁾RY

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

এটি অনলাইন চেষ্টা করুন! (বাইটোক্যান্ট যাচাই করুন)


পরিসংখ্যান:

19 24 সংকলক
   20 গল্ফ
17   2 গণনা
   27 ফিজবজ
83 73 মোট

মারধর করা দেখে ভাল লাগল।
ওয়েইজুন চাউ

0

সি, 1080 বাইট মোট

সংকলক [369 বাইট]

#include<stdlib.h>
r,t,f=3,b=5,n;char*F="FIzz",*B="buZZ";main(int c,char **v){if(f)for(c=atoi(v[1]),n=1;c>=n;)r=f?n%f:0,r?(t=b?n%b:0)?printf("%i\n",n):puts(B):r?printf("%s%s\n",F,B):puts(F),++n;else for(c=0;c<atoi(v[1]);)printf("%i\n",++c);}

ফিজ বাজ [২৪১]

#include<stdlib.h>
r,t,f=3,b=5,n;char*F="FIzz",*B="buZZ";main(int c,char **v){if(f)for(c=atoi(v[1]),n=1;c>=n;)r=f?n%f:0,r?(t=b?n%b:0)?printf("%i\n",n):puts(B):r?printf("%s%s\n",F,B):puts(F),++n;else for(c=0;c<atoi(v[1]);)printf("%i\n",++c);}

গল্ফ [২77]

#include<stdlib.h>
r,t,f=1,b=0,n;char*F="golf",*B="";main(int c,char **v){if(f)for(c=atoi(v[1]),n=1;c>=n;)r=f?n%f:0,r?(t=b?n%b:0)?printf("%i\n",n):puts(B):r?printf("%s%s\n",F,B):puts(F),++n;else for(c=0;c<atoi(v[1]);)printf("%i\n",++c);}

গণনা [২৩৩ বাইট]

#include<stdlib.h>
r,t,f=0,b=1,n;char*F="",*B="";main(int c,char **v){if(f)for(c=atoi(v[1]),n=1;c>=n;)r=f?n%f:0,r?(t=b?n%b:0)?printf("%i\n",n):puts(B):r?printf("%s%s\n",F,B):puts(F),++n;else for(c=0;c<atoi(v[1]);)printf("%i\n",++c);}

0

ডিসি , 434 বাইট

[:a]sa[91Pn93Pznlanps_znlanz0<R]sR[[[lj1-;aP1sb]sB0sj[dljd2+sj;a%0=Bljlz>F]sF[p2Q]sP]P]sI[[[]sF[pq]sP]nq]sN[z0=Nzn[sz]PlRxlIx]x[sn0dsb[1+0sjlFx[lb0=PAP]x0sbdln>M]dsMx]P

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

সংকলক (168 বাইট) জন্য ইনপুট স্ট্যাকের উপর পূর্ণসংখ্যার, স্ট্রিং, পূর্ণসংখ্যার, স্ট্রিং এবং ( 3 [Fizz] 5 [Buzz]) হিসাবে স্থাপন করা উচিত । এটি তাদের অর্পণ করা উচিত যাতে তাদের ফিজ এবং বাজগুলি মুদ্রিত হতে পারে, যা কিছুটা প্রতারণা হতে পারে ( dcআগে বুদ্বুদ সাজানো বাস্তবায়িত হয়েছিল, আমি বিশ্বাস করি এটি আমার প্রায় 100 বাইট ব্যয় করতে পারে) তবে এটি ব্যবহারকারীকেও অনুমতি দেয় বলুন, এখনও 3 এ 'ফিজ' চালানো আছে এবং 5 তে 'বাজ' চালানো আছে, তবে 15 টি 'বাজফিজ' পেয়েছে।

আমি নিশ্চিত যে এটি আরও কিছুটা গল্ফ করা যায়; চূড়ান্ত প্রোগ্রামের মূল ম্যাক্রো ( M) দুটি ম্যাক্রোর উপর নির্ভর করে ( FএবংP ) যা কোনও ইনপুট না দিয়ে অপ্রয়োজনীয়। এই মুহুর্তে সংকলক ইনপুট পরীক্ষা করে এবং যদি কোনও না থাকে তবে এই ম্যাক্রোগুলির বিভিন্ন (অনেক ছোট) সংস্করণ আউটপুট করে তবে আমি নিশ্চিত না যে পুরো সেটআপটি সর্বোত্তম।

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

কোনও ইনপুট নেই (46 বাইট):

[]sF[pq]sPsn0dsb[1+0sjlFx[lb0=PAP]x0sbdln>M]dsMx

3 [ফিজ] 5 [বাজ] (117 বাইট):

4sz[Buzz]3:a5
2:a[Fizz]1:a3
0:a[lj1-;aP1sb]sB0sj[dljd2+sj;a%0=Bljlz>F]sF[p2Q]sPsn0dsb[1+0sjlFx[lb0=PAP]x0sbdln>M]dsMx

1 [গল্ফ] (103 বাইট):

2sz[Golf]1:a1
0:a[lj1-;aP1sb]sB0sj[dljd2+sj;a%0=Bljlz>F]sF[p2Q]sPsn0dsb[1+0sjlFx[lb0=PAP]x0sbdln>M]dsMx

তারা সকলেই স্ট্যাকের এন মানটি আশা করে , এটি সঞ্চিত হয় n। যাঁদের 'বিধি' রয়েছে সেগুলি aএ্যারিতে রাখে, বিজোড় সূচকগুলিতে স্ট্রিংগুলি এবং সন্ধ্যায় পূর্ণসংখ্যাগুলি। প্রধান ম্যাক্রো, M, বাড়তি যাই হোক না কেন স্ট্যাক হয়, ম্যাক্রো চালায় Fযা চেক অ্যারের বিরুদ্ধে মান a, চেক কিনা Fসেট রেজিস্টার btruthy অথবা না এবং স্ট্যাকের উপরে ছাপে যদি তাই হয় বা একটি newline যদি না, রিসেট bfalsy, এবং তারপর রাখে nএখনও পৌঁছানো না হলে নিজেই চলমান । Fপ্রদত্ত নিয়ম ম্যাক্রো পুরো অ্যারে ম্যাচগুলির সন্ধান করে। এটি দুটি দ্বারা বৃদ্ধি পায় যেহেতু আমাদের পূর্ণসংখ্যা এবং স্ট্রিংগুলি অ্যারের মাধ্যমে বোনা হয় এবং একটি ম্যাচে এটি ম্যাক্রোকে কল করে B। ম্যাক্রোBকেবল স্ট্রিংটি পুনরুদ্ধার করুন (অ্যারেতে বর্তমান অবস্থানটি কম এক) এবং এটি মুদ্রণ করে। এটি bসত্যেও সেট করে। আমাদের সংকলকটি Bকোনও ইনপুট না দেওয়ার জন্য মুদ্রণ করতে বিরক্ত করে না এবং মূলত Fএকটি ডগা দেয়।


0

ভিএম, 122 (সংকলক) + 73 (খালি) + 90 (গল্ফ) + 123 (ফিজবজ) = 392 বাইট

সংকলনকারী

:%s/\v(.*):(.*)/qq\1jA\2<C-V><C-V><C-V><ESC>q=@qgg
VgggJAddGdd:%s/\v[0-9]*([^0-9])/\1
<C-V><ESC>:%@n
:w
:so! %
<ESC>ggii%s/=/<C-V><ESC><C-V><C-A>a/g<C-V><ESC>"ncc:%!seq 0 =
<ESC>

ছক পূরণ করা

3:Fizz
5:Buzz

ফিজবজ মামলার জন্য উত্পন্ন কোড

i%s/=/<ESC><C-A>a/g<ESC>"ncc:%!seq 0 =
qq3jAFizz<C-V><ESC>q=@qggqq5jABuzz<C-V><ESC>q=@qggddGdd:%s/\v[0-9]*([^0-9])/\1
<ESC>:%@n
:w
:so! %

উত্পন্ন কোড, টীকাগুলি

# replace the input number with a regex that replaces the placeholder (=) 
# with the real number + 1 (we'll need an extra line as a terminator later)
i%s/=/<ESC><C-A>a/g<ESC>

# pull the substitution command into register c and enter insert mode
"ncc

# create the numbers 0..N+1
:%!seq 0 =

# for each word, scan down k lines at a time and append the word to each
qq3jAFizz<C-V><ESC>q=@qgg
qq5jABuzz<C-V><ESC>q=@qgg

# delete the 0 and N+1 lines
ddGdd

# remove the numbers from any line with words
:%s/\v[0-9]*([^0-9])/\1
<ESC>

# Run the command we created at the beginning, replacing the placeholder 
# with the real number
:%@n

# The file now contains yet another program, with the constants defined.   
# Save and run.
:w
:so! %

# The file now contains a program that, when run on a buffer containing 
# a single line with a number, will produce the appropriate output

<C-V>0x16 হয়। <ESC>0x1 বি হয়। <C-A>0x01 হয়।

উদাহরণ সেশন

$ cat code.txt
2:Foo
4:Bar
$ cat input.txt
8
$ { cat compile.vim; echo ':wq'; } | vim code.txt
# code.txt now contains the generated code
$ { cat code.txt; echo ':wq'; } | vim input.txt
$ cat input.txt
1
Foo
3
FooBar
5
Foo
7
FooBar

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

-2

স্লোওসার্ক্সি। ল্যাং, 179

%%--43^jjk"/][][0[#!#111# h SD G ergDFGdfg[]9--99+==

10
আমি এই ভাষার সাথে পরিচিত নই; আপনি কি আমাদের বর্ণনা করতে একটি পৃষ্ঠায় লিঙ্ক করতে পারেন?
lirtosiast
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.