অ্যালিস এবং বব একটি লড়াই আছে


24
  • অ্যালিস (এ) এবং বব (বি) যুদ্ধ করার সিদ্ধান্ত নিয়েছে।
  • প্রতিটি যোদ্ধার স্বাস্থ্য 10।
  • তারা ক্ষতির জন্য s পার্শ্বযুক্ত ডাই রোল করে turns
  • সেই ক্ষতি তাদের প্রতিপক্ষের স্বাস্থ্য থেকে সরানো হয়েছে।
  • শেষ পর্যন্ত অ্যালিস বা বব, তাদের শত্রুদের পরাজিত করবে।

যুদ্ধটি কীভাবে হয়েছে তা আমাকে দেখান। এই ক্রিয়াকলাপগুলির জন্য এই কোডগুলি আউটপুট করা।

আক্রমণ

B a A    
^ Combatant
  ^ Action (attack)
    ^ Target

রোল

B r 4
^ Combatant
  ^ Action (roll)
    ^ Value

স্বাস্থ্য পরিবর্তন

A h 6
^ Combatant
  ^ Attribute (health)
    ^ Value   

জয়

A w 
^ Combatant
  ^ Action (win)

উদাহরণ আউটপুট:

A a B
A r 4
B h 6
B a A
B r 6
A h 4
A a B
A r 6
B h 0        
A w

এখানে বিধি রয়েছে:

  • যে কোনও ভাষায় লিখুন।
  • ডাইয়ের একটি একক রোলের 1, 2, 3, 4, 5 বা 6 এর যে কোনও একটিতে ফলাফলের সমান সুযোগ থাকা উচিত।
  • অ্যালিস সর্বদা শুরু হয় (বব চৈতন্য, একটি পুরানো ধাঁচের উপায়ে)।
  • প্রতিটি টার্নের জন্য একটি ক্রিয়া আউটপুট করুন।
  • আপনার অবশ্যই আক্রমণ, রোল, ক্ষয়ক্ষতি এবং জয়ের ক্রিয়াটি রিপোর্ট করতে হবে।
  • যোদ্ধারা আপার কেস, ক্রিয়াগুলি লোয়ার কেস।
  • এটি অবশ্যই ধারাবাহিকভাবে একই ফলাফল উত্পাদন করতে হবে না।
  • আউটপুট যোদ্ধা, ক্রিয়া এবং মানের মধ্যে কমপক্ষে একটি সাদা স্থান থাকতে হবে।
  • যখন প্রতিপক্ষের শূন্য বা তার চেয়ে কম স্বাস্থ্য থাকে তখন বিজয় অ্যাকশন হয়।
  • কোনও ক্রিয়াকলাপের সমস্ত অংশ অবশ্যই একই লাইনে থাকতে হবে।
  • প্রতি লাইনে একটি ক্রিয়া থাকা উচিত।
  • সবচেয়ে কম বাইট জেতা

এইখানে পাবে!


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

21
পুনঃটুইট করেছেন তারা সাধারণত যোগাযোগ করার চেষ্টা করছেন। দুঃখজনকভাবে সংঘাত যখন ঘটে তখন যোগাযোগ বিচ্ছিন্ন হয় ens
এজেফারাডে

7
আমি সেই দিনগুলি মিস করছি যখন আমরা ম্যালরি থেকে কীভাবে আমাদের গোপনীয়তাগুলি গোপন রাখার চেষ্টা করছিলাম ... সেগুলি ছিল সহজ সময় ...
বব

4
@ বোবি ম্যালরি হ'ল সত্যই এক বিড়ম্বনার বিষয়। এটি প্রাক্কালে আপনার জন্য নজর রাখা প্রয়োজন।
এজেফারাডে

3
@ এমএস 210 ভাল, কোড গল্ফের গুরুত্বপূর্ণ বিশদটি হ'ল প্রত্যেকে একই চ্যালেঞ্জ গ্রহণ করে, তবে এখানে যুক্তিটি এই: - আপনি যদি ডানজিওনস এবং ড্রাগন খেলতেন তবে আপনি বলতেন "আমি গোব্লিনকে লাথি মারব", তবে আপনি ' কার্যকারিতার জন্য ডি রোল, তারপরে রোলটির ফলাফলটি কার্যকর করুন। আপনি কী রোল করছেন তা যদি কেউ না জানে তবে একটি রোল অর্থহীন।
এজেফারাডে

উত্তর:


5

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

"BaABr0Aha"S3ô»D„AB‡[6LΩ©Tǝ¤H®-©16ǝ=®0‹#s]н…ÿ w?

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

ব্যাখ্যা

"BaABr0Aha"                                        # push the initial state of B
           S                                       # split to list of characters
            3ô                                     # divide into 3 parts
              »                                    # join each part on space and all on nl
               D„AB‡                              # make a copy with A and B inverted
                     [                             # start a loop
                      6LΩ©                         # pick a random number in [1 ... 6]
                          Tǝ                       # insert at position 10 of the string
                            ¤H                     # get the last char of the string and
                                                   # convert from hex
                              ®-©                  # subtract the random number
                                 16ǝ=              # insert at position 16 and print
                                     ®0‹#          # if the hp is less than 0, break
                                         s         # swap the other string to the stack top
                                          ]        # end loop
                                           н…ÿ w?  # print the winner

13

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

x,y="AB"
from random import*
X=Y=10
p=print
while X>0:p(x,"a",y);d=randint(1,6);p(x,"r",d);Y-=d;p(y,"h",Y);x,y,X,Y=y,x,Y,X
p(y,"w")

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

-8 বাইট অফিসিয়ালাইম
-2 বাইট ধন্যবাদ ChooJeremy ধন্যবাদ


5
পূর্বনির্ধারণ p=printআপনাকে প্রায় 8 টি বাইট সংরক্ষণ করবে
officialaimm

যেহেতু y সর্বদা এই মুহুর্তে জয়ী হয় (এবং লুপটিতে কেবল এক্স আক্রমণ করে, যা পরে ওয়াইয়ের মধ্যে বদলানো হয়), আপনার y হারিয়েছে কিনা তা খতিয়ে দেখার দরকার নেই। - ChooJeremy - পর্যালোচনা থেকে
NoOneIsHere

@ ননওআইএস আমাকে এই বার্তাটি দেওয়ার জন্য ধন্যবাদ: ডি
হাইপার নিউট্রিনো

randint(1,6)এর সাথে প্রতিস্থাপন করা যেতে পারে id(X+Y)//3%6+1, যদিও বিতরণটি যথেষ্ট অভিন্ন নয়।
ভিনসেন্ট

@ ভিনসেন্ট যদি নিয়মকে আরও খাটো করে তুলতে সহায়তা না করে তবে আমি নিয়মগুলি বাঁকতে পয়েন্টটি দেখতে পাচ্ছি না ...
হাইপারনিউটারিনো

7

সি (জিসিসি) , 146 141 বাইট

f(A,B,r,t,a,b){for(A=B=10;r=1+clock()%6,A*B>0;t=!t)printf("%c a %c\n%c r %u\n%c h %i\n",a=65+t,b=66-t,a,r,b,t?A-=r:(B-=r));printf("%c w",a);}

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

ডি-গলফ:

f(A,B,r,t,a,b){
    for(A=B=10; //Initialize HP
        r=1+clock()%6, // Get the number of processor cycles the program has consumed. This is relatively random, so I call it good enough.
        A*B>0;t=!t) // Flip t for change of turns
        printf("%c a %c\n%c r %u\n%c h %i\n", // Print the turn
            a=65+t,b=65+!t,a,r,b, // 65 is ASCII for 'A', 66 for 'B'
            t?A-=r:(B-=r)); // Deduct the damage.
    printf("%c w",a); // Print the winner
}

2
আপনি কি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন a=65+t,b=66-t?
মোপেট

A*B>0আপনাকে কয়েকটি বাইট সাশ্রয় করবে।
অলিভিয়ার গ্রাগোয়ার

A*Bআরও বেশি সাশ্রয় করবে, তবে আমি তাড়াতাড়ি এটিএমের মতো। আমি সন্ধ্যায় আপডেট করব

ডাইস সিক {6,4,3,1,5 in এ একটি বাগ খুঁজে পেয়েছে} খ স্বাস্থ্য সঙ্গে জেতা -4। টিআইও দেখুন আমি আপনার ডাইস ক্যালকুলেটরটি এই বাগটি ডেমোতে পরিবর্তন করেছি।
জিপিএস

@ জিপিএস ধন্যবাদ, আমি এখন এটি প্যাচ করব।

7

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

এটি @ হাইপারনিউটারিনো উত্তরের একটি উন্নতি যা কোনও মন্তব্যে মাপসই হয় না। নীচে ব্যাখ্যা দেখুন।

x,y="AB"
s=id(0)
X=Y=10
p=print
while X>0:p(x,"a",y);s=s**7%~-2**67;d=s%6+1;p(x,"r",d);Y-=d;p(y,"h",Y);x,y,X,Y=y,x,Y,X
p(y,"w")

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


একটি সংক্ষিপ্ত পাইথন ডাইস রোলের জন্য একটি মহাকাব্য অনুসন্ধান

টিএল; ডিআর: আরএসএ এনক্রিপশন ব্যবহার করে স্ট্যান্ডার্ড পাইথন ডাইস রোলের বাইরে 4 বাইট শেভ করা সম্ভব।

আমি দেখতে চেয়েছিলাম যে স্ট্যান্ডার্ড পাইথন ডাইস রোল ( 32 বাইট ) কিছুটা ছোট করা যায়:

from random import*;randint(1,6)

বিশেষত, id(x)প্রোগ্রামে কিছু অ-নিষ্ক্রিয় মান আনতে যথেষ্ট সুবিধাজনক। আমার ধারণাটি তখন কিছুটা সত্যিকারের এলোমেলোতা তৈরির জন্য এই মানটি হ্যাশ করা ছিল। আমি কয়েকটি পদ্ধতির চেষ্টা করেছি এবং তাদের মধ্যে একটির অর্থ প্রদান করা হয়েছে: আরএসএ এনক্রিপশন

RSA এনক্রিপশন, তার সরলতা কারণে মাত্র কয়েক বাইট প্রয়োজন: m**e%n। পরবর্তী র্যান্ডম মানটি পূর্ববর্তীটি এনক্রিপ্ট করে তৈরি করা যেতে পারে। (e,n)কীটি উপলব্ধ বলে ধরে নিলে , ডাইস রোলটি 22 বাইট দিয়ে লেখা যেতে পারে :

s=id(0);s=s**e%n;s%6+1

এর অর্থ একটি বৈধ আরএসএ কী সংজ্ঞায়িত করার জন্য আমাদের কাছে প্রায় 10 বাইট রয়েছে। এখানে আমি ভাগ্যবান পেয়েছি। আমার পরীক্ষাগুলির সময়, আমি কেবল মুরসেন প্রাইম এম 67 ব্যবহার করতে শুরু করেছিলাম পরে তা বুঝতে পেরে যে মের্সেন তার তালিকাতে এম 67 সহ একটি ভুল করেছিলেন। এটি সক্রিয় আউট গুণফল হতে p=193707721এবং q=761838257287। আমি আমার মডুলাসটি পেয়েছি:

n=~-2**67

এখন, সূচক এবং চারমাইকেল সমষ্টিটি কপিরাইট হওয়া (p-1)*(q-1) দরকার। ভাগ্যক্রমে আবার, প্রথম মৌলিক সংখ্যা যা n এর যোগফলকে ভাগ করে না, কেবল একটি ডিজিট দীর্ঘ: 7..পরে রোলটি 28 বাইট (স্ট্যান্ডার্ড পদ্ধতির চেয়ে 4 বাইট কম) ব্যবহার করে রচনা করা যেতে পারে :

s=id(0);s=s**7%~-2**67;s%6+1

এম 67 এর সাথে একটি ভাল জিনিস হ'ল এলোমেলো মান উত্পন্ন হয় 66 বিট, যা সাধারণ 64 বিট আরএনজি এর চেয়ে বেশি। এছাড়াও, আরএসএ ব্যবহারের ফলে বর্তমান মানকে একাধিকবার ডিক্রিপ্ট করে সময়মতো ফিরে যাওয়া সম্ভব হয়। এখানে এনক্রিপ্টিং এবং ডিক্রিপটিং কীগুলি রয়েছে:

Encryption: (7,                    147573952589676412927)
Decryption: (42163986236469842263, 147573952589676412927)

আমি অবশ্যই পরিসংখ্যান বা ক্রিপ্টোগ্রাফিতে বিশেষজ্ঞ নই, তাই এই আরএনজি "ভাল র্যান্ডমনেস" এর মানদণ্ড পরীক্ষা করে কিনা তা আমি সত্যিই বলতে পারি না। আমি একটি ছোট বেঞ্চমার্ক লিখেছিলাম যা বিভিন্ন আরএনজি ব্যবহার করে 1 থেকে 6 ডাইস রোলগুলির সংঘটনগুলির স্ট্যান্ডার্ড বিচ্যুতির সাথে তুলনা করে। দেখে মনে হচ্ছে প্রস্তাবিত সমাধানটি অন্যান্য সমস্যার মতোই কাজ করে।


3
চিত্তাকর্ষক কাজ! :)
হাইপারনিউটারিনো


4

জাভা (জেডিকে 10) , 180 বাইট

v->{var r="";int p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,p+65,(p^=1)+65);return r+(char)(66-p)+" w";}

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

ক্রেডিট


1
জাভা 10 আছে var? o.Ô আমি সত্যিই, শীঘ্রই নতুন চশমা কিছু তদন্ত করতে .. যাই হোক প্রয়োজন আপনি যা করতে পারেন গলফ INT-অ্যারেতে গৃহস্থালির কাজ-বিন্যস্ত পরিবর্তন করে 4 বাইট:v->{var r="";int P[]={65,66},p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,P[p],P[p^=1]);return r+=P[p^1]+" w";}
কেভিন Cruijssen

1
@ কেভিন ক্রুজসেন ইয়েপ, জাভা 10-এর বর্ণ রয়েছে। আরও পড়ার দরকার নেই, এটি মূলত একমাত্র পরিবর্তন যা আমাদের গল্ফারদের জন্য ব্যবহারযোগ্য। এবং না আমি আপনার প্রস্তাব মতো যা করতে পারি না: ফলাফলের শেষ লাইনটি পরীক্ষা করুন: এটি 65 wপরিবর্তে হয়ে যায় A w। এজন্যই আমি এই int ...বিবৃতিটি থেকে বের করেছি : কয়েক বাইট গল্ফ ;-)
অলিভিয়ার গ্রাগোয়ার

1
@ কেভিন ক্রুইজসেন আমি এখানে কয়েকটি উদাহরণ মেনে চললাম
অলিভিয়ার



3

রুবি , 122 120 96 92 91 বাইট

f=->x=?A,y=?B,m=10,n=m{p [x,?a,y],[x,?r,r=1+rand(6)],[y,?h,t=n-r]
t<1?p([x,?w]):f[y,x,t,m]}

অসোন তুহিদকে ধন্যবাদ 1 বাইট সংরক্ষণ করা হয়েছে

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


1
এটি এর মতো আমি এমনকি রুবিকে আর কীভাবে জানব তাও জানি না;)
এজেফারাডে

আমি আশঙ্কা করছি আপনার বিকল্পটি কাজ না করে, "একটি ক্রিয়াকলাপের সমস্ত অংশ অবশ্যই একই লাইনে থাকা উচিত।" যদিও, কোনও ট্যাব চরিত্রের সাহায্যে একই অপ্টিমাইজেশন করা সম্ভব?
এজেফারাডে

@ এজেফারাডে ফর্ম্যাটটিতে লাইন আউটপুট গ্রহণযোগ্য হবে ["A", "a", "B"]? যদি তা হয় তবে আমার কাছে এই 96-বাইট সমাধান রয়েছে।
ক্রিশ্চিয়ান লুপাস্কু

যদি তারা প্রতি লাইনে আউটপুট হয়। এটা করা উচিত।
এজেফারাডে

-1 বাইট আপনি যদি এর ?(p [x,?w]):সাথে প্রতিস্থাপন করেন?p([x,?w]):
Asone Tuhid

3

জাভা 8, 230 বাইট

v->{for(int h=104,a=h,x=0,y=1,A=10,B=A,r=0,t=0,T;a<119;)System.out.printf("%c %3$c %c%n",(x=a>h|A*B<1?x^1:x)+65,y=(a<98?t=r+=Math.random()*6-r+1:a>h?(T=x<1?A-=t:(B-=t))<0?0:T:A*B<1?-16:(x^1)+17)+48,a=a<98?114:a>h?104:A*B<1?119:97);}

নোট: সেখানে আগে থেকেই অনেক খাটো জাভা উত্তর, তাই তার ভোট দিন করতে ভুলবেন না ! আমি তবে সম্পূর্ণ ভিন্ন পন্থা ব্যবহার করি, সুতরাং এটি পোস্ট করাও উপযুক্ত ured

ব্যাখ্যা:

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

v->{                     // Method with empty unused parameter and no return-type
  for(int h=104,         //  Temp integer with unicode for 'h' to save bytes
          a=h,           //  Second part (Action)
          x=0,           //  First part
          y=1,           //  Third part
          A=10,          //  Score player A, starting at 10
          B=A,           //  Score player B, starting at 10
          r=0,           //  Random dice-roll
          t=0,           //  Previous dice-roll
          T;             //  Temp integer
      a<119;)            //  Loop until there is a winner
     System.out.printf(  //   Print
      "%c %3$c %c,%n",   //    The three parts with spaces, and a new-line
      (x=                //    First part:
         a>h             //     If the previous action is 'r',
         |A*B<1?         //     or there is a winner:
           x^1           //      Change A→B or B→A
         :               //     Else:
          x)             //      A/B remains unchanged
       +65,              //     Add 65 to convert 0/1 to 65/66 (unicode values of A/B)
      (y=                //    Third part:
         (a<98?          //     If the previous action was 'a'
           t=r+=Math.random()*6-r+1
                         //      Roll the dice, and save it in `t`
          :a>h?          //     Else-if the previous action was 'r':
           (T=x<1?       //      If the first part changed to player A:
            A-=t         //       Subtract the previous dice-roll from A
           :             //      Else:
            (B-=t))      //       Subtract the previous dice-roll from B
           <0?           //      If this score is below 0:
            0            //       Use 0
           :             //      Else:
            T            //       Use this score
         :               //     Else (the previous action was 'h'):
          A*B<1?         //      Is there a winner:
           -16           //       Change the third part to a space
          :              //      Else:
           (x^1)+17)     //       Change the third part to the other player
       +48,              //     Add 48 to convert it to unicode
       a=                //    Second part:
         a<98?           //     If the previous action was 'a': 
          114            //      Change it to 'r'
         :a>h?           //     Else-if the previous action was 'r':
          h              //      Change it to 'h'
         :               //     Else (the previous action was 'h'):
          A*B<1?         //      If either score is 0:
           119           //       Use 'w'
          :              //      Else:
           97);}         //       Use 'a'

3

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

#define R(c,t)r=rand()%6+1,c&&printf(#c" a "#t"\n"#c" r %d\n"#t" h %d\n",r,t-=t<r?t:r),t||puts(#c" w")
f(A,B,r){for(A=B=10;A*B;R(B,A))R(A,B);}

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


কেবল একটি সমস্যা, এটি কোনও জয়ের সাথে শেষ হয়নি।
এজেফারাডে

@ এজেফারাডে ওহ হ্যাঁ, স্থির
নয়েলহোহফ

2

ব্যাচ, 174 বাইট

@set/aA=B=10
@set c=A
@set d=B
:g
@set/ar=%random%%%6+1,h=%d%-=r
@echo %c% a %d%
@echo %c% r %r%
@echo %d% h %h%
@if %h% gtr 0 set c=%d%&set d=%c%&goto g
@echo %c% w

ব্যাখ্যা: %পরিবর্তনশীল উল্লেখগুলি পার্স সময়ে পরিবর্তিত হয়। এর দুটি কার্যকর সুবিধা রয়েছে:

  • %d%-=rrদ্বারা চিহ্নিত ভেরিয়েবল থেকে বিয়োগ d(যেমন পরোক্ষ রেফারেন্স)
  • set c=%d%&set d=%c% কেবল একটি সোজা সোয়াপ।

2

পিএইচপি 7.1: 159 বাইট

<?php $A=$B=10;$t='AB';while($A>0&&$B>0){$a=$t[0];$b=$t[1];$d=rand(1,6);$$b-=$d;echo"$a a $b\n$a r $d\n$b h {$$b}\n";$t=strrev($t);}echo($A>0?'A':'B')." w\n";

এটি এখানে ব্রাউজারে চালান!

পিএইচপি 5.6: 156 বাইট

<?php $A=$B=10;$t='AB';while($A>0&&$B>0){list($a,$b)=$t;$d=rand(1,6);$$b-=$d;echo"$a a $b\n$a r $d\n$b h {$$b}\n";$t=strrev($t);}echo($A>0?'A':'B')." w\n";

এটি এখানে ব্রাউজারে চালান!

ফর্ম্যাটিং এবং মন্তব্যে পিএইচপি 5.6 সমাধানটি দেখতে দেখতে এখানে:

<?php
// Initialize both HP counters
$A = $B = 10;

// Set the turn order as a string (which 5.6 allows to be unpacked into a list)
$t = 'AB';

// Run this loop as long as both players have HP
while ($A > 0 && $B > 0) {
    // Unpack the turn string into $a and $b variables; on the first run, $a = 'A'
    // and $b = 'B'. This is no longer possible in PHP 7.0, so the PHP 7.0
    // solution needed to use an array instead.
    list($a, $b) = $t;

    // Set damage to a random number between 1 and 6
    $d = rand(1, 6);

    // Subtract the damage from the referenced value $b. On the first turn, this
    // is 'B', so this ends up subtracting $d from $B. Next turn, $b will be 'A',
    // so it'll subtract $d from $A
    $$b -= $d;

    // Echo the string (interpolated values)
    echo "$a a $b\n$a r $d\n$b h {$$b}\n";

    // Reverse the turn order string ('AB' becomes 'BA', which will affect the
    // call to list in the first line of the while-loop)
    $t = strrev($t);
}

// Someone's run out of HP; figure out whom by figuring out who still has HP
echo ($A > 0 ? 'A' : 'B') . " w\n";

1

বাশ, 178 বাইট

A=10 B=10 e=echo
a(){ $e $1 a $2;d=$((RANDOM%6+1));$e $1 r $d;eval $2=$((${!2}-$d));$e $2 h ${!2};[ ${!2} -gt 0 ];}
while a A B && a B A;do cd;done;[ $A -gt 0 ]&&$e A w||$e B w

1

এফ #, 238 235 বাইট

আমি ভেবেছিলাম আমি ভাল করছি, তবে আপনি আমাকে এতদূর ছাড়িয়ে গেছেন!

let p=printfn
let mutable A=10
let mutable B=A
let x h a d=
 p"%s a %s"a d
 let i=(new System.Random()).Next(1,7)
 let j=h-i
 p"%s r %i"a i
 p"%s h %i"d j
 if j<=0 then p"%s w"a
 j
while A*B>0 do
 B<-x B"A""B"
 if B>0 then A<-x A"B""A"

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

রোজেমকে A> 0&&B> 0 এর পরিবর্তে A * B> 0 ব্যবহার করার 3 টি উজ্জ্বল পরামর্শ দেওয়ার জন্য ধন্যবাদ (3 বাইট ছাড়ায়)।

অফিসিয়ালাইমকেও ধন্যবাদ, যার পাইথন উত্তরে প্রিন্টফাই প্রিন্টিং সম্পর্কে ইঙ্গিতটি আমাকে কয়েকটা বাইট বন্ধ করে দিতেও সহায়তা করেছিল।


1
@ অলিভারগ্রিগোয়ারের কাছ থেকে পাওয়া একটি পরামর্শ: A*B>0আপনাকে আরও কয়েকটা বাঁচাতে পারে।

এটা একেবারে উজ্জ্বল। ভাল লাগবে। আপনাকে অনেক ধন্যবাদ!
Ciaran_McCarthy

1

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

হাস্কেলের সাথে আমার প্রচেষ্টা, দুর্ভাগ্যক্রমে আমি এটিকে আরও প্রতিযোগিতামূলক করতে সক্ষম হইনি

import System.Random
main=getStdGen>>= \g->putStr$q(randomRs(1,6)g)10(10::Int)"A ""B "
(!)=(++)
l="\n"
q(x:z)a b p o=p!"a "!o!l!p!"r "!show x!l!o!"h "!show n!l!if n<1then p!"w"else q z n a o p where n=b-x

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

ব্যাখ্যা:

import System.Random  --import random module
main=                        --main function, program entry point
 getStdGen                   -- get the global random number generator
   >>= \g->                  --using the random generator g
       putStr $ q            --print the result of function q, passing in ..
          (randomRs (1,6) g) --an infinite list of random numbers, 1 to 6 generated by g
           10 (10::Int)      --the starting health of both players, 
                             --type annotation sadly seems to be required
           "A " "B "         --The names of the players,
                             --with an extra space for formatting
(!)=(++) --define the operator ! for list (String) concatenation, 
         -- we do this a lot so we save a bit by having a one byte operator
l="\n"   -- define l as the newline character

q      --define function q                         
 (x:z) --our list of random numbers, split into the next number (x) and the rest (z)
 a     -- the health of the active player
 b     -- the health of the player getting attacked
 p     -- the name of the active player
 o     -- the name of the player getting attacked
=
  p!"a "!o!l --create the attack action string with a newline
 !p!"r "!show x!l -- append the roll action
 !o!"h "!show n!l -- append the health remaining
 !           -- append the result of the following if
  if n<1     -- if the player being attacked has been defeated
  then p!"w" -- append the win string for the active player
  else q z n a o p  --otherwise append the result of calling q again with 
                    --rest of the random numbers, and the active players swapped
  where n=b-x -- define the attacked player's new health n
              -- their current health b - the random roll x

হাসকেলে গল্ফ করার জন্য আমাদের টিপসটি দেখতে পারেন । যেমন where m=b-xগার্ড পুরা করা যেতে পারে: |m<-b-x=
লাইকোনি

আপনি কিছু প্যারামিটার সাজানোর দ্বারা বন্ধনীর ল্যামডা এবং এক সেট হারাতে পারেন: main=putStr=<<q"A "10"B "10.randomRs(1,6::Int)<$>getStdGen। পুনরায় সংজ্ঞাটি থেকে মুক্তি পেতে আপনি একটি তালিকাও ব্যবহার করতে পারেন এবং এটিকে একত্র করতে পারেন (++)। শেষটি যেখানে কেবলমাত্র b-xসর্বত্র ব্যবহার করা উপকারী বলে মনে হচ্ছে না ।
অ্যাঙ্গস ২৯:২৯

1

জুলিয়া 0.6 , 175 বাইট

p=println()
f(l="AB",h=[10,10],a=1)=(while min(h...)>0;d=3-a;p(l[a]," a ",l[d]);r=rand(1:6);h[d]-=r;p(l[a]," r ",r);p(l[d]," h ",max(h[d],0));a=d;end;p(l[findmax(h)[2]]," w"))

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

দীর্ঘ, নিরবচ্ছিন্ন সংস্করণ:

function status(player, health)
    println("$player h $(max(0,health))")
end

function roll(player)
    x = rand(1:6)
    println("$player r $x")
    x
end

function play()
    players = ["A","B"]
    healths = [10, 10]
    attacker = 1

    while min(healths...) > 0
        println("$(players[attacker]) a $(players[3-attacker])")
        healths[3-attacker]-=roll(players[attacker])
        status(players[3-attacker], healths[3-attacker])

        attacker = 3 - attacker
    end

    winner = findmax(healths)[2]
    println("$(players[winner]) w")
end

আপনার টিআইও লিঙ্কটিতে কোনও আউটপুট বলে মনে হচ্ছে না।
এজেফারাডে

হ্যাঁ আমি জানি না কেন টিও পছন্দ করে না। এটি আমার মেশিনে কাজ করে। সময় পেলে আমি এটি খতিয়ে দেখব।
নিকজকি 12

1

ভিবিএ, 222 185 179 বাইট

এই পুনরাবৃত্ত সমাধানে 3 টি সাবস্ক্রাইব জড়িত

  1. জিটি গেমটি শুরু করে যা প্রথম টার্নটি বন্ধ করে দেয়
  2. টি প্রতিটি পালা জন্য বলা হয় । এটি পুনরাবৃত্তি ব্যবহার করে।
  3. পি ডিবগের চেয়ে কম হয়.প্রিন্ট যখন 3 বারের বেশি ব্যবহৃত হয় (এই সমাধানে কেবল 4) সম্পাদনা: এখন আমি শিখেছি যে Debug.?এর একটি গ্রহণযোগ্য বিকল্প Debug.Print, Debug.?xএটি একটি সাবকে মুদ্রণ করার চেয়ে ছোট is
Sub g()
t "A",10,"B",10
End Sub
Sub t(i,j,x,h)
d=Int(Rnd()*6)+1
Debug.?i &" a "&x
Debug.?i &" r "&d
h=h-d
If h<1Then
Debug.?i &" w"
Else
Debug.?x &" h "&h
t x,h,i,j
End If
End Sub

এটি একটি মজার চ্যালেঞ্জ ছিল। আপনি যদি ভিবি 6 / ভিবিএসক্রিপ্ট / ভিবিএর জন্য টিআইওর মতো কোনও অনলাইন দোভাষী সম্পর্কে জানেন তবে দয়া করে একটি মন্তব্য করুন। তারপরে আমি একটি কাজের সমাধানের জন্য একটি লিঙ্ক পোস্ট করতে পারি।

আপনি যদি এই কোডটি পরীক্ষা করতে চান এবং মাইক্রোসফ্ট এক্সেল, ওয়ার্ড, অ্যাক্সেস, অথবা আউটলুক ইনস্টল করেছেন (কেবল উইন্ডোজ), ভিবিএ আইডিই খুলতে Alt + F11 চাপুন। একটি নতুন কোড মডিউল Altোকান (Alt + I, M) এবং অপশন সুস্পষ্টভাবে সাফ করুন। তারপরে কোডে পেস্ট করুন এবং এটি চালানোর জন্য F5 টিপুন। তাত্ক্ষণিক উইন্ডোতে ফলাফলগুলি উপস্থিত হওয়া উচিত (আপনি যদি এটি না দেখেন তবে Ctrl + G টিপুন)।

সম্পাদনা 1: সরিয়ে নেওয়া শ্বেতস্পেস যা ভিবিএ সম্পাদক স্বয়ংক্রিয়ভাবে ফিরে আসবে 37 37 বাইট কমিয়ে
সম্পাদনা 2: শেখার পরে 6 বাইট সংরক্ষণ করার জন্য সাব পি () * সরানো এর Debug.?একটি গ্রহণযোগ্য বিকল্প Debug.Print। একটি সাব কল করার জন্য Debug.?ছয়টির বেশি কল করার পরে কেবল বাইটস সাশ্রয় হয়।

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