এইচকিউ 9 + দোভাষী তৈরি করা হচ্ছে


31

এই কোড গল্ফের লক্ষ্য হ'ল প্রোগ্রামিং ভাষার HQ9 + জন্য অনুবাদক তৈরি
করা উচিত এই প্রোগ্রামিং ভাষায় 4 টি কমান্ড রয়েছে:

  • এইচ - মুদ্রণ "হ্যালো, বিশ্ব!"
  • প্রশ্ন - প্রোগ্রামের উত্স কোড মুদ্রণ
  • 9 - "99 বোতল বিয়ার" গানের কথা ছাপায়
  • + - সঞ্চয়কারী বৃদ্ধি করে

নিয়ম:

  1. সংগ্রহকারী সংজ্ঞায়িত না হওয়ায় আপনি + কমান্ড উপেক্ষা করতে পারেন
  2. আপনার প্রোগ্রামটি ইনপুটটির জন্য প্রম্পট করবে (এই ইনপুটটি উত্স কোড হবে) বা উত্স কোডটি কোনও ফাইল থেকে পড়ে
  3. আপনাকে কোনও ফাইলে "99 বোতল বিয়ার" র গানের কথা রাখার অনুমতি নেই এবং ফাইলটি পাঠ্যটি পড়তে পারবেন না
  4. গানের পাঠ্যকে সংকুচিত করতে আপনাকে জিজিপ বা বিজেপ-এর মতো সংকোচনের অ্যালগরিদম ব্যবহার করার অনুমতি নেই: আপনাকে নিজের সংকোচনের অ্যালগরিদম তৈরি করতে হবে। এটি একটি জটিল অ্যালগরিদম হতে হবে না, তবে যতটা সম্ভব পাঠ্যকে সংকুচিত করার চেষ্টা করুন (মনে রাখবেন: এটি একটি কোড-গল্ফ, সবচেয়ে কম বাইটস সহকারে জয়যুক্ত কোড)
  5. যদি উত্স কোডে এমন একটি চর থাকে যা এইচ , কিউ , 9 বা + নয় , তবে আউটপুট "উত্স কোডটিতে অবৈধ অক্ষর রয়েছে" কোনও আদেশ চালানোর আগে! এর অর্থ হ'ল, যদি সোর্স কোড H1উদাহরণস্বরূপ হয় তবে আপনার আউটপুট Hello, world!দেওয়ার আগে আউটপুট করবেন না Source code contains invalid characters। না, সঙ্গে সঙ্গে আউটপুটSource code contains invalid characters
  6. আপনার দোভাষী যদি বড় হাতের এবং ছোট হাতের অক্ষর উভয়ই গ্রহণ করে, তবে আপনি আপনার অক্ষর গণনায় -8 পাবেন

শুভকামনা!


3
বিধি 4 এ "তিনি কেন এটি নিষিদ্ধ করবেন ?!" এর অর্থ বোঝায় না স্তর; বিধি 5 এর অর্থ "সে কী বোঝায় ?!" স্তর।
পিটার টেলর

4
নিয়ম 5 কীভাবে বোঝায় না?
মাইক সি

আমি মনে করি এটি কেবলমাত্র বড় হাতের ব্যবহারের চেয়ে বেশি ভাল হবে, স্বেচ্ছাচারিতা হয়ে বলার চেয়ে আপনি যদি এটি গ্রহণ করেন তবে আপনি একটি বিনামূল্যে 8 টি অক্ষর পাবেন। 8 ভাষা নির্ভর করে এটি কভার করতে পারে বা নাও পারে।
মাইক সি

10
বিধি 5 টি অর্থবোধ করে না কারণ এটি এইচকিউ 9 + স্পেসটি ভেঙে দেয়।
বুথবি

2
এইচকিউ 9 + এর একজন দোভাষীর স্বয়ংক্রিয়ভাবে জিততে হবে।
TheNumberOne

উত্তর:


16

এপিএল (ডায়ালগ) (326 - 8 = 318)

এডিটর উইন্ডোতে এটি আটকে দিন এবং কল করুন H। কীবোর্ড থেকে ইনপুট নেওয়া হয়।

H
⎕←'Source code contains invalid characters'/⍨~∧/'HhQq9+'∊⍨V←⍞
B←' of beer'
W←' on the wall'
L←⎕TC[2]
Z←{k←' bottle','s'/⍨⍵≠1⋄⍵<0:'99',k⋄⍵=0:'No',k⋄k,⍨⍕⍵}
{⍵∊'Hh':⎕←'Hello, world!'
⍵∊'Qq':⎕←V
⍵∊'9':{⎕←G,K,(G←Z⍵),B,L,(⊃'Go to the store and buy some more' 'Take one down and pass it around'[1+×⍵]),L,(Z⍵-1),K←B,W,L}¨1-⍨⌽⍳100}¨V

6

গণিত, 349 346 341 অক্ষর

h = If[StringMatchQ[#, ("H" | "Q" | "9" | "+") ...], 
   b = If[# > 0, ToString@#, "No"] <> " bottle" <> 
      If[# == 1, "", "s"] <> " of beer" &; 
   w = b@# <> " on the wall" &; 
   Print /@ 
    StringCases[#, {"H" -> "Hello, world!", "Q" -> #, 
      "9" -> "" <> 
        Table[w@n <> ",\n" <> b@n <> 
          ".\ntake one down, pass it around,\n" <> w[n - 1] <> 
          If[n == 1, ".", ".\n\n"], {n, 99, 1, -1}]}];, 
   "Source code contains invalid characters"] &

খুব চিত্তাকর্ষক তবে কিছু ছোটখাটো ঝলক দেখা যাচ্ছে '' ["কিউ"] আউটপুটগুলি "কিউ"। এইচ ["9"] কাজ করে, তবে এইচ [9] পুরো প্রোগ্রামটি আউটপুট করে দেয় (আমি বুঝতে পারি না কীভাবে।)
ডেভিডসি

@DavidCarraher এটা আউটপুট কিভাবে StringMatchQ এবং যদি ব্যর্থ হয় কারণে কোড:If[StringMatchQ[3, "a"], x, y]
ssch

6

সি, 599 587 487 481 467 টি অক্ষর

আমি নিশ্চিত এই মারপিট করা যেতে পারে। আমি সব পরে সি ব্যবহার করছি। সেখানে আপনি যে কারণে দেখতে না পান গলফ এন্ট্রি সি এই লেখা বিজয়ী অনেকটা এখন অপরাধমূলক অপব্যবহার 467 অক্ষর ধন্যবাদ হয় #define

কমান্ড লাইন আর্গুমেন্ট হিসাবে এইচকিউ 9 + উত্স ফাইলটি নির্দিষ্ট করুন।

সম্পাদনা: এখন স্টিডিন থেকে উত্স গ্রহণ করে, কোনও ফাইল নয়। প্রোগ্রামটি শুরু করুন, কোড টাইপ করা শুরু করুন CTRL- Cএটি চালানোর জন্য হয়ে গেলে।

এটি কমপক্ষে MinGW / GCC এ সংকলন করে: gcc -o hq9+.exe hq9+.c

এমএসভিসিতে কাজ করা উচিত, তবে আমি কেবল এটির জন্য একটি সম্পূর্ণ সমাধান তৈরি করার মতো মনে করি না। :)

#define B "bottles of beer"
#define C case
#define P printf
#define R break
a,i,j,s;
main(){
char p[9999],c;
for(;;) {
    switch(c=getch()){
    C 'H':C 'Q':C '9':C '+': C 3: R;
    default:P("Source code contains invalid characters\n");
    }
    if (c==3) R;
    p[s++]=c;
}
for(i=0;i<s;i++){
    c = p[i];
    switch(c){
    C 'H':
        P("Hello world!");
        R;
    C 'Q':
        for(j=0;j<s;j++)putchar(p[j]);
        R;
    C '9':
        j=99;
        while(j){
            P("%d "B" on the wall,\n%d "B".\nTake one down, pass it around,\n%d "B".\n",j,j,j-1);
            j--;
        }
        R;
    C '+':
        a++;
    }
}
}

বা:

#define B "bottles of beer"
#define C case
#define P printf
#define R break
a,i,j,s;main(){char p[9999],c;for(;;){switch(c=getch()){C 'H':C 'Q':C '9':C '+': C 3: R;default:P("Source code contains invalid characters\n");}if (c==3) R;p[s++]=c;}for(i=0;i<s;i++){c = p[i];switch(c){C 'H':P("Hello world!");R;C 'Q':for(j=0;j<s;j++)putchar(p[j]);R;C '9':j=99;while(j){P("%d "B" on the wall,\n%d "B".\nTake one down, pass it around,\n%d "B".\n",j,j,j-1);j--;}R;C '+':a++;}}}

ইনপুট দেওয়ার জন্য কোনও ফাইলের পরিবর্তে স্টিডিন ব্যবহার করে এটি 487 টি অক্ষরে নেমে এসেছেন।
মাইক সি

# ডেফাইনকে গালি দিয়ে 464 করুন।
মাইক সি

আপনি স্থানগুলি পরিত্রাণ পেতে পারেন, Cআগের মতো এবং দু'এক আগে R;p[s++]=0;মুদ্রণ সরল করতে ইনপুট লুপের পরে 8 টি চরও শেভ করতে পারে p
ড্যানিয়েল লুবারভ

3

পাইথন 2 - 452 453 443 বাইট

q=raw_input()
if set(q)-set('HQ9+'):print'Source code contains invalid characters'
b=' bottles of beer'
b=[b,b.replace('s','')]
w=[a+' on the wall'for a in b]
t='Take one down, pass it around,\n'
c={'H':'Hello, world!','Q':q,'9':''.join(`i`+w[i<2]+',\n'+`i`+b[i<2]+'.\n'+t+(`i`if i>1 else'No')+w[0]+'.\n'for i in range(1,100)[::-1])+'No'+w[0]+',\nNo'+b[0]+'.\n'+'Go to the store, buy some more,\n99'+w[0]+'.'}
for d in q:
 if d in c:print c[d]

Bleh। এটি ইতিমধ্যে রক্তাক্ত ছিল, কিন্তু তারপরে আমি একটি বাগ আবিষ্কার করেছি যা ঠিক করতে আমার একটি বাইট খরচ হয়েছে। Bleh।

(আমি +আউটপুটটির জন্য অন্তর্ভুক্ত করতাম না Qof উদাহরণস্বরূপ একটি ইনপুট Q+++আউটপুট দেয় Q))

অবৈধ ইনপুট থেকে বেরিয়ে না গিয়ে কিছু অক্ষর সংরক্ষণ করা হয়েছে যেমন আমি ভেবেছিলাম আপনার উচিত ছিল।

বর্ণিত সংস্করণটি শীঘ্রই আসছে।আমি ইস্তফা দিলাম. আমি সবেও বুঝতে পারি যে এই বিজাতীয়তা আর কীভাবে কাজ করে। যদি চাহিদা থাকে তবে আমি এটিকে আবার যেতে দেব তবে ততক্ষণে তা ঘটছে না।


আপনি exitঅবৈধ চরিত্রটিতে নেই, কেবল বার্তাটি প্রদর্শন করুন, যাতে আপনি সেখানে 7 টি অক্ষর সংরক্ষণ করতে পারেন।
কাইল কানোজ

@ কাইলক্যানোস ওহ, আমি এটি ভুল বুঝেছি। ধন্যবাদ!
আন্ডারগ্রাউন্ডোমোনাইল

আপনার লিরিক্স সঠিক নয় - বর্তমানে এটি বলেছেন: 99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *99* bottles of beer on the wall. এটি অনুমান করা উচিত:99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *98* bottles of beer on the wall.
অলিভার নি

আমি প্রবেশ করার সময় এটি একটি ত্রুটিও দেয় +। আপনার অবহেলা করার কথা +, কোনও ত্রুটি দেওয়া উচিত নয়
অলিভার নি

আউটপুটগুলির মধ্যে কিছু হওয়ার কথা নেই। যদি আমি প্রবেশ HQHHকরি তবে এটির মতো বলা উচিতHello World!HQHHHelloWorld!Hello World!
অলিভার নি

3

পার্ল, 325 - 8 = 317

sub p{print@_}$_=<>;$a=' on the wall';$b=' bottle';$e=' of beer';$c='Take one down, pass it around';if(!/^[hqHQ9+]+$/){p"Source code contains invalid characters";exit}$k=$_;for(/./g){/H|h/&&p"Hello, World!";if(/9/){$i=99;$d=$b."s$e";while($i>0){p"$i$d$a
$i$d
$c
";$q=--$i==1?'':'s';$d="$b$q$e";$i||=No;p"$i$d$a
"}}/Q|q/&&p$k}

সম্প্রসারিত:

sub p{print@_}
$_=<>;
$a=' on the wall';
$b=' bottle';
$e=' of beer';
$c='Take one down, pass it around';
if(!/^[hqHQ9+]+$/){
    p"Source code contains invalid characters";
    exit
}
$k=$_;
for(/./g){
    /H|h/&&p"Hello, World!";
    if(/9/){
        $i=99;
        $d=$b."s$e";
        while($i>0){
            p"$i$d$a
$i$d
$c
";
            $q=--$i==1?'':'s';
            $d="$b$q$e";
            $i||=No;
            p"$i$d$a
"
        }
    }
    /Q|q/&&p$k
}

2

রুবি, 364 360 - 8 = 352

এখনও উন্নতির জন্য অনেক জায়গা আছে। এখান থেকে 99 বোতল কোড চুরি হয়েছে

p=gets.upcase
if p=~/[^HQ9+
]/
puts"Source code contains invalid characters"else
p.each_char{|x|case x
when ?H
puts"Hello, world!"
when ?Q
puts p
when ?9
def c;"#{$n} bottle#{'s'if$n>1} of beer on the wall"end
($n=99).times{puts"#{c}, #{c[0..-13]}.
#{$n<2?"Go to the store and buy some more":"Take one down and pass it around"}, #{$n=($n-2)%99+1;c}.

"}end}end

অনুচ্ছেদটি No more bottles of beer on the wallপরে থাকার কথা 1 bottle। তারপরে এটিGo to the store...
অলিভার নি

1 bottle of beer on the wall, 1 bottle of beer on the wall, take one down, pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer, go to the store, buy some more, 99 bottles of beer on the wall.
অলিভার নি

@ অলিভার প্রশ্নটি গানের সঠিক লিরিক্স নির্দিষ্ট করে না। কোনও জায়গায় এটি "আর নেই" বিভাগ অন্তর্ভুক্ত করার প্রয়োজন নেই।
ডুরকনব

ঠিক আছে, তবে, আউটপুটগুলির মধ্যে একটি নতুন লাইন হওয়ার কথা নেই।
অলিভার নি

@ অলিভার চ্যালেঞ্জটি কোথায় বলে?
ডুরকনব

2

হাস্কেল, 298

main=interact g
g s|all(`elem`"HQ9+")s=s>>=(%s)|0<1="Source code contains invalid characters"
'H'%_="hello World!"
'Q'%s=s
'9'%_=drop 32$d 99
_%_=""
k=" bottles of beer on the wall"
d 0="No more"++k++"."
d n|a<-shows n k=[a,".\n\n",a,",\n",take 18a,".\ntake one down, pass it around\n",d$n-1]>>=id

এটি বেশ সোজা। %একটি কমান্ডের আউটপুট প্রদান করে (ব্যবহারের জন্য উত্স কোডটি দেওয়া হয়েছে Q)। dগল্ফের কারণে শুরুতে 99 বোতলগুলির গানটি জাঙ্ক লাইনের সাথে ফেরত দেয়। সমস্ত কিছু একটি ইন্টারঅ্যাক্টে আবৃত (আপনি যখন পরীক্ষা করার gপরিবর্তে ব্যবহার করতে চান main)


আমি কীভাবে এটি চালাব? আমি এটি WinGHCi এ আটকানোর চেষ্টা করেছি, তবে আমি পেয়েছি <interactive>:8:5: parse error on input ‘=’
ProgramFOX

@ প্রোগ্রামফক্স আমার কোনও ধারণা নেই ... আমি কখন পারব তা পরীক্ষা করে দেখুন
অভিমানী হাসেল্লার

@ প্রোগ্রামফক্স দুঃখিত: এটি দীর্ঘ সময় নিয়েছে :-)। আপনি GHCi সঠিকভাবে ব্যবহার করছেন না। জিএইচসিআইতে আপনি প্রত্যক্ষভাবে সংজ্ঞাগুলি ইনপুট করতে পারবেন না কারণ এটি প্রকাশের প্রত্যাশা করে। আপনি হয় letসংজ্ঞা সন্নিবেশ করানোর জন্য একটি ব্যবহার করতে পারেন (একাধিক সংজ্ঞা সংযোজন করার সময় বিচ্ছিন্ন নয় ;) বা ফাইল থেকে কোড চালাতে পারেন।
গর্বিত হাস্কেলর

আমি দেখি. আমি এখনও এটি চালানোর চেষ্টা করতে ব্যর্থ; আমি যখন ফাইলটি লোড করি এবং কল করি তখন mainএটি বলে যে আমি সম্পাদন করার চেষ্টা করার সময় উত্স কোডটিতে অবৈধ অক্ষর রয়েছে H। আমি gপরিবর্তে যখন চালানোর চেষ্টা করি তখন mainতা তাত্ক্ষণিকভাবে একটি ত্রুটি দেয়।
প্রোগ্রামএফক্স

@ প্রোগ্রাম্রামফক্স mainকাজ করে না কারণ যুক্ত করা নতুন লাইনটি কোনও আইনী আদেশ নয়। এজন্য আমি gপরিবর্তে ব্যবহারের পরামর্শ দিয়েছি। হিসাবে g, putStrLn $ g "H" সঠিকভাবে কাজ করে না?
গর্বিত হাসেলেলার

2

জে - 444 বাইট

আমি নম্বরটি পছন্দ করেছি, তাই গল্ফ করা বন্ধ করলাম। এই যে, একক অভিব্যক্তি ফাংশন!

f=:'Source code contains invalid characters'"_`('Hello, world!'"_`[`((((s=:(<:@[s],L,(v,LF,'Take one down and pass it around, '"_,b@<:,' of beer on the wall.'"_)@[,''"_)`(],(L=:LF,LF),(v=:1&b,' of beer on the wall, '"_,b,' of beer.'"_)@[)@.([<1:))''"_),LF,'Go to the store and buy some more, '"_,(b=:({&'Nn'@([=0:),'o more'"_)`(":@])@.(]>0:),{.&' bottles'@(8:-=&1@])),' of beer on the wall.'"_)@(99"_))`]@.('HQ9+'&i.@])"0 1 0])@.(*./@e.&'HQ9+')

উদাহরণ:

   hq9 '9QHHQ+'
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

...

3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer on the wall.

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
9QHHQ+
Hello, world!
Hello, world!
9QHHQ+
+
   hq9 '9QHHaQ'
Source code contains invalid characters

এবং না, আমি এর জন্য ব্যাখ্যা লিখব না। অনেক দেরি.
seequ

দাঁড়াও, কেন এটাকে বঞ্চিত করা হচ্ছে?
seequ

2

ফোর্টরান 528 470 481

এটা দিয়ে কম্পাইল করার প্রয়োজন -fpp(স্কোর +3) পতাকা 1 (তাই আমি যে তার সাথে সম্পূর্ণভাবে ঠিক আছি, কোন দিকে আরো 3 টি অক্ষর চেয়ে সংরক্ষণ) preprocessing নির্দেশনা ব্যবহার করতে। এটি ক্ষেত্রেও সংবেদনশীল, তাই এখানে -8: ডি। যাইহোক একবার ব্যবহার করা হয় endifযেমন প্রস্রোসেসিং না করে 5 টি অক্ষর সংরক্ষণ করা হয়েছে

ফাইলটি একটি .F90এক্সটেনশন (এটি কল করতে বুদ্ধি করে hq9+.F90) প্রয়োজন যাতে সংকলক প্রাক প্রসেসিংয়ের জন্য বাধ্য করে। কোডটি কেস-সংবেদনশীল; এটিকে কেস-সংবেদনশীল তৈরি করে 16 টি অক্ষরের মতো কিছু যুক্ত করা হয়েছে, সুতরাং 8 টি অক্ষর সংরক্ষণ করা এটির পক্ষে সত্য নয়। আমার আগের উত্তরে পরিবর্তন বহুবচন গুলো হিসাব না bottlesজন্য 9; এই সংস্করণটি এটিকে সংশোধন করে (এবং দুঃখের সাথে আরও অনেকগুলি অক্ষর যুক্ত করে)।

#define P print*,
#define W " of beer on the wall"
#define N print'(x,i0,a,a)',
#define e enddo
#define S case
#define J len(trim(c))
character(len=99)::c,b=" bottles";read*,c;do i=1,J;if(all(c(i:i)/=["H","Q",'9',"+"])) then;P"Source code contains invalid characters";exit;endif;e;do i=1,J;select S(c(i:i));S("H");P"Hello, world!";S("Q");P c;S("9");l=8;do k=99,1,-1;N k,b(1:l),W;N k,b(1:l)," of beer";P "Take one down, pass it around";if(k==2)l=l-1;if(k==1)exit;N k-1,b(1:l),W;P"";e;P"No more",trim(b),W;S default;endselect;e;end

অনেক উন্নত অবরুদ্ধ এবং অ-প্রাক-প্রসেসেড মনে হচ্ছে (সম্ভবত আপনি কী দেখতে পাচ্ছেন তা দেখতে পারেন):

program hq9
   character(len=99)::c,b=" bottles"
   read*,c
   do i=1,len(trim(c))
! change the below to ["H","h","Q","q","9","+"] to be case-insensitive
      if(all(c(i:i)/=["H","Q","9","+"]))then
         print*,"Source code contains invalid characters"
         exit
      endif
   enddo
   do i=1,len(trim(c))
      select case(c(i:i))
        case("H")                ! change to case("H","h") for case-insensitive
           print*,"Hello, world!"
        case("Q")                ! change to case("Q","q") for case-insensitive
           print*, c
        case("9")
           l=8
           do k=99,1,-1
              print'(x,i0,a,a)', k,b(1:l)," of beer on the wall"
              print'(x,i0,a)', k,b(1:l)," of beer"
              print*,"Take one down, pass it around"
              if(k==2) l=l-1
              if(k==1) exit
              print'(x,i0,a)', k-1,b(1:l)," of beer on the wall"
              print*,""
           enddo
           print*,"No more",trim(b)," of beer on the wall"
        case default
           ! do nothing
      endselect
   enddo
end program hq9

আমি মনে করি এটি সংকলকটি কী সংকলন করছে তা জানতে একটি নির্দিষ্ট বর্ধনের প্রয়োজন হয় acceptable পতাকাটির .ccপ্রয়োজন এড়াতে কোনও এনালগের নামকরণের জন্য একটি সি ++ ফাইলের প্রয়োজন হতে পারে -lstdc++
primo

2

পাইথন 2, 340 - 8 = 332

s,o=raw_input(),''
for z in s:
 if z in'Hh':o+='Hello World!'
 elif z in'Qq':o+=s
 elif'9'==z:
  i=298
  while~-i:print i/3or 99,'bottle'+'s of beer on the wall.\n'[2<i<6:9+i%3*12]+'..\nGToa kteo  otnhee  dsotwonr,e ,p absusy  isto maer omuonrde,,'[(i>3)+i%3*68::2];i-=1
 elif'+'!=z:o='Source code contains invalid characters';break
print o

1

লুয়া 443 - 8 = 435 464 - 8 = 456

আমি if-endএর পরিবর্তে একাধিক গুলি ব্যবহার করে 21 টি অক্ষর সংরক্ষণ করতে পেরেছি if-elseif-end। আমার কয়েকটি অতিরিক্ত সাদা জায়গাও কয়েকজনের পরে ভেসে উঠল )

p=print o=" of beer"t=" on the wall"B=" bottle"b=" bottles"l=io.read("*l");g=l:lower()if g:match"[^hq9+]"then p("Source code contains invalid characters")end for i=1,#g do s=g:sub(i,i)if s=='h'then p("Hello, world")end if s=='q'then p(l)end if s=='9'then n=99 repeat p(n..b..o..t..", "..n..b..o)n=n-1 p("Take one down, pass it around, "..n..b..o..t..".")p()until n==1 p("1"..B..o..t..", 1"..B..o)p("No more"..b..o..t..", no more"..b..o)end end

আমি এটির সাথে মোটামুটি খুশি, যদিও এটি আমার ফোর্টরান উত্তরের চেয়ে খুব কম নয় । 99 টি বোতল বিয়ার কোড এলেসান্দ্রো দ্বারা উত্তরটি পরিবর্তন করা হয়েছে । অসম্পূর্ণ, আমাদের আছে

-- reuse stuff
p=print
o=" of beer"
t=" on the wall"
B=" bottle"
b=" bottles"
-- read the line & then lowercase it for case insensitivity
l=io.read("*l");g=l:lower()
if g:match"[^hq9+]" then -- horray for basic regex
   p("Source code contains invalid characters")
end
for i=1,#g do
   s=g:sub(i,i)               -- take substring
   if s=='h' then p("Hello, world") end
   if s=='q' then p(l) end
   if s=='9' then
      n=99
      repeat
         p(n..b..o..t..", "..n..b..o)
         n=n-1
         p("Take one down, pass it around, "..n..b..o..t..".")
         p()
      until n==1
      p("1"..B..o..t..", 1"..B..o)
      p("No more"..b..o..t..", no more"..b..o)
   end
end

ইনপুট ছোট করার কোডটির জন্য 12 টি অক্ষর লাগে, তাই বোনাসটি মূল্যবান নয়।
nyuszika7h

আপনার ইনপুট ছোট করার দরকার নেই, আপনি ঠিক কিছু করতে পারেনif s in'Hh'
অলিভার নি

এটি 8 টি অক্ষর বাঁচায়
অলিভার নি

@ এমসিপিএরডক্স: এর, আপনি যে পাইথনটির কথা ভাবছেন, লুয়া inহ'ল লুপটি পুনরায় লোপের জন্য এবং তুলনা নয়; আপনি যদি সেখানে আটকে থাকেন তবে একটি ত্রুটি পাবেন। এখানে তিনটি পছন্দ রয়েছে: (1) matchপ্রতিটি লাইনে ব্যবহার , (2) s=='h'or s=='H'প্রতিটি লাইনে ব্যবহারকারী , (3) এটি আমি এটি করেছিলাম do স্পষ্টত (3) (1) এবং (2) এর চেয়ে কম is
কাইল কানোস

1

জুলিয়া, 362

s = chomp(readline(STDIN))
l=""
z=" of beer"
q,r,w,t=" bottles$z"," bottle$z"," on the wall.\n","take one down, pass it around,\n"
for j=99:-1:2
b="$j$q"
l*="$b$w$b.\n$t"
end
l*="1$r$(w)1$r.\n$(t)No$q$w"
p=println
all(c->c in "HQ9+", s)||p("Source code contains invalid characters")
for c in s
    c=='Q'&&p(s)
    c=='H'&&p("Hello, world!")
    c=='9'&&p(l)
end

1

টিসিএল, 515

set d [read stdin]
if {![regexp {^[hq9\+HQ]*$} $d]} {puts "Source code contains invalid characters"}
lmap c [split $d {}] {set b { bottles of beer}
switch -- $c H {puts "Hello, world"} Q {puts $d} 9 {for {set i 99} {$i>2} {incr i -1} {puts "$i$b on the wall,
$i$b.
Take one down, pass it around,
[expr $i-1]$b on the wall.
"}
puts "2$b on the wall,
2$b.
Take one down, pass it around,
1 bottle of beer on the wall.

1 bottle of beer on the wall,
1 bottle of beer.
Take one down, pass it around,
No$b on the wall."}}

কিছুটা গল্ফ করা, সি থেকে এখনও ছোট এবং বিয়ারের শেষ শ্লোকটির সঠিক 99 বোতল


ঠিক আছে, এখন যে তার বৈধ। ভালো কাজ, তুমি আমাকে মারধর করেছ আমার গল্ফের জন্য সি ব্যবহার বন্ধ করা উচিত।
মাইক সি

আপনি প্রথম লাইনটি সরিয়ে এটির শেষ প্যারামিটারে এম্বেড করতে পারেন regexp। আপনি কোডগলফ.স্টাকেকেক্সচেঞ্জ
a/

1

জাভাস্ক্রিপ্ট (ES6), 385

s=>{n=99,b=' bottle',j=' of beer',d=' on the wall',e='Take one down, pass it around',k='Go to the store, buy some more',l='No',o='s',f=', ';for(i=s.split(m=v='');~n;)v+=[n||l,b,n-1?o:m,j,d,f,n||l,b,n-1?o:m,j,f,n?e:k,f,--n<1?99:n,b,n-1?o:m,j,d,'! '].join(m);return s.match(/[^HQ9\+]/,r='')?'Source code contains invalid characters':[...s].map(c=>({H:'Hello World!',9:v,Q:s})[c]).join``}

কেস-সংবেদনশীলকে বেছে নেননি, এর জন্য অনেকগুলি অক্ষরের দাম পড়তে পারে। এমনকি অন্য কিছু এন্ট্রিগুলির কাছাকাছিও নয়, তবে মজাও ছিল!

জাভাস্ক্রিপ্ট, 344

আমি গানের কম সম্পূর্ণ সংস্করণ সহ একটি সংস্করণ তৈরি করেছি:

(function(i){if(s.match(/[^HQ9\+]/)){m='Source code contains invalid characters'}else{n=99,b=' bottles of beer ',d='on the wall',e='take one down, pass it around',f=', ';for(;n;)v+=[n,b,d,f,n,b,f,e,f,--n||'no more',b,d,'! '].join(m);h={H:'Hello World!',Q:arguments.callee+m,9:v};for(;c=i[n++];)m+=h[c]||''}alert(m)})((s=prompt()).split(m=v=''))

তবে অন্যান্য এন্ট্রিগুলি দেখার পরে (এবং প্রকৃত গানের দিকে তাকান, যারা জানেন!), আমি ভেবেছিলাম এটি কিছুটা পুলিশ ছিল!


এটি হওয়া উচিত Go to the store, buy some more, *99* bottles of beer on the wall, না*No more* bottles of beer on the wall
অলিভার নি

আপনি যদি আরও কিছু কিনে থাকেন তবে কীভাবে এখনও আর কিছু থাকবে না?
অলিভার নি

এবং এছাড়াও, Qআমার জন্য কাজ করে না।
অলিভার নি

@ অলিভার তখন আপনার পিছনে মন্তব্যটি লক্ষ্য করেনি ... আমি তখন পুরোপুরি ভুল বুঝেছিলাম যে সময়টি করা উচিত ছিল এবং ইনপুটটির Qপরিবর্তে ফাংশনের উত্স কোড সরবরাহ করেছিল ... এটি মূলত এটি করার কারণ ছিল জেএসে, অংশটি সহজ হবে, তবে আমি এখন জানি যে যা প্রয়োজন তা নয়!
ডোম হেস্টিংস

@ অলিভার লিরিক্স আপডেট করেছেন!
ডোম হেস্টিংস

1

সি, 562 বাইট

char*c="%1d %3$s of %4$s on the %5$s, %1d %3$s of %4$s.\n\0Take one down and pass it around, %2d %3$s of %4$s on the %5$s.\n\0Go to the store and buy some more, %1d %3$s of %4$s on the %5$s.\n";main(int a,char**b){int x=0;for(int i=0;i<strlen(b[1]);i++){if(b[1][i]=='+')x++;else if(b[1][i]=='9'){int k=99;while(1){printf(&c[0],k,k,k==1?"bottle":"bottles","beer","wall");if(k!=1){printf(&c[49],k,k,"bottles","beer","wall");k--;}else{k=99;printf(&c[114],k,k,"bottles","beer","wall");break;}}}else printf("%s",b[1][i]=='H'?"Hello, world!":(b[1][i]=='Q'?b[1]:""));}}

পুরো প্রোগ্রাম হিসাবে। প্রথম যুক্তি হল এইচকিউ 9 + প্রোগ্রাম। একটি সত্যিকারের সংগ্রহকারী সহ। আমি নিজেকে চ্যালেঞ্জ জানিয়েছিলাম সংজ্ঞায়িত বিবৃতি ব্যবহার না করা।

অবরুদ্ধ সংস্করণ:

char* c = "%1d %3$s of %4$s on the %5$s, %1d %3$s of %4$s.\n\0Take one down and pass it around, %2d %3$s of %4$s on the %5$s.\n\0Go to the store and buy some more, %1d %3$s of %4$s on the %5$s.\n";
main (int a, char** b) {
    int x = 0;
    for (int i = 0; i < strlen(b[1]); i++) {
        if (b[1][i] == '+')
            x++;
        else if (b[1][i] == '9') {
            int k = 99;
            while (1) {
                printf(&c[0], k, k, k == 1 ? "bottle" : "bottles", "beer", "wall");
                if (k != 1) {
                    printf(&c[49], k, k, "bottles", "beer", "wall");
                    k--;
                } else {
                    k=99;
                    printf(&c[114], k, k, "bottles", "beer", "wall");
                    break;
                }
            }
        } else
            printf("%s",b[1][i] == 'H' ? "Hello, world!" : (b[1][i] == 'Q' ? b[1] : ""));
    }
}

0

জাভা, 546 বাইট

এটি আমার প্রথম কোড গল্ফ জমা দেওয়া। আমি নিশ্চিত যে আমরা এটি দিয়ে আরও কিছু করতে পারব। এটি ইনপুটটি কমান্ড লাইন আর্গুমেন্ট হিসাবে পড়ে। বিয়ারের কোড "ধার করা" "বিয়ারের 99 টি বোতল" জাভা উত্তর (ক্রিয়েটিভ কমন্স) থেকে

class a{public static void main(String[] a){if(a[0].matches("^[HQ9\\Q+\\E]+$")){for(char c:a[0].toCharArray()){if(c=='H')p("Hello, world!");if(c=='Q')p(a[0]);if(c=='9')b();}}else{System.out.println("Source code contains invalid characters");}}static void p(String s){System.out.println(s);}static void b(){String b=" of beer",c=" on the wall",n=".\n",s;for(int i=100;i-->1;){s=" bottle"+(i>1?"s":"");p(i+s+b+c+", "+i+s+b+n+(i<2?"Go to the store and buy some more, 99":"Take one down and pass it around, "+(i-1))+" bottle"+(i!=2?"s":"")+b+c+n);}}}

কমান্ড লাইন আরগগুলি গ্রহণযোগ্য না হলে আমাকে জানতে দিন। এটা অনেক মজার ছিল!


সিএলএ ঠিক আছে। চমৎকার উত্তর.
আর

0

এক্সেল ভিবিএ, 489 বাইট

ইন্ডেন্টমুক্ত হয়েছে:

Sub h(s)
For c=1 To Len(s)
Select Case Mid(s,c,1)
Case "H"
Debug.? "Hello,World!"
Case "Q"
Set v=ActiveWorkbook.VBProject.VBComponents("M").CodeModule:For n=1 To v.countoflines:Debug.? v.Lines(n,1):Next
Case "+"
a=a+1
Case "9"
s=" Bottles of Beer":o=" Bottle of Beer":w=" on the wall":t=". Take 1 down pass it around,":p=",":d=".":For n=99 To 3 Step -1:Debug.? n;s;w;p;n;s;t;n-1;s;w;d:Next:Debug.? 2;s;w;p;2;s;t;1;o;w;d:Debug.? 1;o;w;p;1;o;t;"No";s;w;d
End Select
Next
End Sub

(পাঠযোগ্যতার জন্য অভিযুক্ত)

Sub h(s)
For c=1 To Len(s)
Select Case Mid(s,c,1)
    Case "H"
        Debug.? "Hello,World!"
    Case "Q"
        Set v=ActiveWorkbook.VBProject.VBComponents("M").CodeModule
        For n=1 To v.countoflines
            Debug.? v.Lines(n,1)
        Next
    Case "+"
        a=a+1
    Case "9"
        s=" Bottles of Beer"
        o=" Bottle of Beer"
        w=" on the wall"
        t=". Take 1 down pass it around,"
        p=","
        d="."
        For n=99 To 3 Step -1
            Debug.? n;s;w;p;n;s;t;n-1;s;w;d
        Next
        Debug.? 2;s;w;p;2;s;t;1;o;w;d
        Debug.? 1;o;w;p;1;o;t;"No";s;w;d
End Select
Next
End Sub

ডিফল্ট মডিউল 1 এর সাথে এম
কল h "+++++++++Your Code"
করে নাম পরিবর্তন করুন এটি অন্যান্য অফিস অ্যাপ্লিকেশনগুলিতেও কাজ করবে, অ্যাক্টিভ ওয়ার্কবুককে উপযুক্ত নথির ধরণে পরিবর্তন করে


নোট করুন যে এক্সেল স্পেস যুক্ত করবে, এবং সংক্ষিপ্তসারগুলি প্রসারিত করবে, সুতরাং
এক্সেলের

Thats 636 অক্ষর
অলিভার নি

আমার উদ্বোধন থেকে সমস্ত শ্বেত স্থানটি সরান, @ অলিভার
সানসি

আপনি সমস্ত উদাহরণ রূপান্তর দ্বারা 3 বাইট আলগা করতে For n=1 Toকরতে For n=1To(আগে হোয়াইটস্পেস সরানোর Toসমস্ত উদাহরণ রূপান্তর দ্বারা এবং 4 বাইট) Debug.? 2;থেকে Debug.?2;(পরে হোয়াইটস্পেস সরানোর ?শব্দ)
টেলর স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.