Alice và Bob có một cuộc chiến


24
  • Alice (A) và Bob (B) quyết định có một trận chiến.
  • Mỗi chiến binh có 10 máu.
  • Họ thay phiên nhau để lăn một cái chết 6 mặt cho thiệt hại.
  • Thiệt hại đó được loại bỏ khỏi sức khỏe của đối thủ.
  • Cuối cùng, Alice hoặc Bob, sẽ tiêu diệt kẻ thù của họ.

Chỉ cho tôi cách trận chiến diễn ra. Xuất các mã này cho các hành động đã xảy ra.

Tấn công

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

Cuộn

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

Thay đổi sức khỏe

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

Thắng lợi

A w 
^ Combatant
  ^ Action (win)

Ví dụ đầu ra:

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

Đây là các quy tắc:

  • Viết bằng bất kỳ ngôn ngữ nào.
  • Một cuộn súc sắc sẽ có cơ hội như nhau dẫn đến bất kỳ một trong các số 1, 2, 3, 4, 5 hoặc 6.
  • Alice luôn bắt đầu (Bob là người hào hiệp, theo cách cổ điển).
  • Xuất ra một hành động cho mỗi lượt.
  • Bạn phải báo cáo các cuộc tấn công, lăn, thiệt hại và giành chiến thắng hành động.
  • Chiến binh là chữ hoa, hành động là chữ thường.
  • Nó không nhất quán tạo ra kết quả tương tự.
  • Phải có ít nhất một ký tự khoảng trắng giữa một chiến binh đầu ra, hành động và giá trị.
  • Hành động giành chiến thắng diễn ra khi đối thủ có 0 hoặc ít máu.
  • Tất cả các phần của một hành động phải nằm trên cùng một dòng.
  • Nên có một hành động trên mỗi dòng.
  • Ít byte nhất sẽ thắng.

Có tại đó!


9
Cái tên Alice (A) và Bob (B) đang mang lại cho tôi hồi tưởng về lớp bảo mật mạng. Diễn viên Alice (A) gửi một gói cho Bob (B) bằng chìa khóa ... vv ...
Bạch tuộc ma thuật Urn

21
@MagicOctopusUrn đó là họ. Họ thường cố gắng giao tiếp. Đáng buồn là xung đột thường xảy ra khi giao tiếp bị phá vỡ.
AJFaraday

7
Tôi nhớ những ngày mà chúng tôi đang cố gắng tìm ra cách che giấu bí mật của mình khỏi Mallory ... đó là những thời điểm đơn giản hơn ...
Bob

4
@Bob Mallory là một cái gì đó gây xao lãng, thực sự. Đó là đêm giao thừa bạn cần coi chừng.
AJFaraday

3
@ msh210, chi tiết quan trọng trong môn đánh gôn là mọi người đều có cùng một thử thách, nhưng đây là logic: - nếu bạn đang chơi Dungeons và Dragons, bạn sẽ nói rằng tôi sẽ đá con yêu tinh, vậy thì bạn ' d cuộn cho hiệu quả, sau đó thực hiện kết quả của cuộn. Một cuộn là vô nghĩa nếu không ai biết bạn đang lăn để làm gì.
AJFaraday

Câu trả lời:


5

05AB1E , 49 byte

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

Hãy thử trực tuyến!

Giải trình

"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

Python 3 , 131 byte

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")

Hãy thử trực tuyến!

-8 byte nhờ chính thức
-2 byte nhờ ChooJeremy


5
định trước p=printsẽ giúp bạn tiết kiệm khoảng 8 byte.
chính thức tuyên bố

Vì y luôn thắng tại thời điểm này (Và chỉ X tấn công trong vòng lặp, sau đó được hoán đổi thành Y), nên bạn không cần kiểm tra xem y có thua không. - ChooJeremy - Từ đánh giá
NoOneIsHere 22/03/18

@NoOneIs Cảm ơn bạn đã gửi tin nhắn cho tôi: D
HyperNeutrino

randint(1,6)có thể được thay thế bằng id(X+Y)//3%6+1, mặc dù phân phối không hoàn toàn thống nhất.
Vincent

@Vincent Tôi không thấy vấn đề trong việc bẻ cong các quy tắc nếu điều đó thậm chí không giúp làm cho nó ngắn hơn ...
HyperNeutrino

7

C (gcc) , 146 141 byte

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);}

Hãy thử trực tuyến!

Bỏ chơi gôn:

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
Bạn có thể lưu một byte bằng cách sử dụng a=65+t,b=66-t?
moopet

A*B>0sẽ giúp bạn tiết kiệm một vài byte.
Olivier Grégoire

A*Bsẽ tiết kiệm hơn nữa, nhưng tôi hơi vội vàng. Tôi sẽ cập nhật vào buổi tối

Tìm thấy một lỗi trong súc sắc seq {6,4,3,1,5}. b chiến thắng với sức khỏe -4. Xem TIO tôi đã thay đổi máy tính xúc xắc của bạn để demo lỗi này.
GPS

@GPS Cảm ơn, tôi sẽ vá nó ngay bây giờ.

7

Python 3 , 127 byte

Đây là một cải tiến về câu trả lời @HyperNeutrino không phù hợp với nhận xét. Xem giải thích dưới đây.

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")

Hãy thử trực tuyến!


Một nhiệm vụ hoành tráng cho một cuộn xúc xắc ngắn hơn

TL; DR: Có thể loại bỏ 4 byte khỏi cuộn súc sắc python tiêu chuẩn bằng cách sử dụng mã hóa RSA.

Tôi muốn xem liệu cuộn xúc xắc python tiêu chuẩn ( 32 byte ) có thể được rút ngắn một chút không:

from random import*;randint(1,6)

Đặc biệt, id(x)khá thuận tiện để mang lại một số giá trị không xác định vào chương trình. Ý tưởng của tôi sau đó là bằng cách nào đó băm giá trị này để tạo ra một số ngẫu nhiên thực tế. Tôi đã thử một vài cách tiếp cận và một trong số đó đã được đền đáp: mã hóa RSA .

Mã hóa RSA, do tính đơn giản của nó, chỉ cần một vài byte : m**e%n. Giá trị ngẫu nhiên tiếp theo sau đó có thể được tạo bằng cách mã hóa giá trị trước đó. Giả sử (e,n)khóa có sẵn, cuộn súc sắc có thể được viết bằng 22 byte :

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

Điều đó có nghĩa là chúng tôi có khoảng 10 byte để xác định khóa RSA hợp lệ. Ở đây tôi đã gặp may mắn. Trong các thử nghiệm của mình, tôi bắt đầu sử dụng Mersenne Prime M67 chỉ để sau đó nhận ra rằng Mersenne đã mắc lỗi bao gồm M67 trong danh sách của mình. Nó hóa ra là sản phẩm của p=193707721q=761838257287. Tôi đã tìm thấy mô-đun của mình:

n=~-2**67

Bây giờ, số mũ và số nguyên của Charmichael (p-1)*(q-1) cần phải được cộng hưởng. May mắn thay, số nguyên tố đầu tiên không chia tổng số n chỉ dài một chữ số: 7. Cuộn xúc xắc sau đó có thể được viết bằng 28 byte (ít hơn 4 byte so với cách tiếp cận tiêu chuẩn):

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

Một điều tốt với M67 là giá trị ngẫu nhiên được tạo ra có 66 bit, nhiều hơn RNG 64 bit thông thường. Ngoài ra, việc sử dụng RSA giúp có thể quay ngược thời gian bằng cách giải mã giá trị hiện tại nhiều lần. Dưới đây là các khóa mã hóa và giải mã:

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

Tôi chắc chắn không phải là một chuyên gia về thống kê hoặc mật mã, vì vậy tôi thực sự không thể biết liệu RNG này có kiểm tra các tiêu chí cho "tính ngẫu nhiên tốt" hay không. Tôi đã viết một điểm chuẩn nhỏ so sánh độ lệch chuẩn của các lần xuất hiện của 1 đến 6 cuộn xúc xắc bằng các RNG khác nhau. Có vẻ như giải pháp đề xuất hoạt động giống như những giải pháp khác.


3
Công việc ấn tượng! :)
HyperNeutrino


4

Java (JDK 10) , 180 byte

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";}

Hãy thử trực tuyến!

Tín dụng


1
Java 10 có vargì? o.Ô Tôi thực sự cần sớm điều tra một số thông số kỹ thuật mới .. Dù sao, bạn có thể chơi golf 4 byte bằng cách thay đổi mảng char thành int-Array: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";}
Kevin Cruijssen 22/03/18

1
@KevinCruijssen Yep, Java 10 có var. Không cần đọc thêm, về cơ bản, đó là thay đổi duy nhất có thể sử dụng được đối với người chơi golf. Và không, tôi không thể làm những gì bạn đề xuất: kiểm tra dòng cuối cùng của kết quả: nó trở thành 65 wthay vì A w. Đó là lý do tại sao tôi trích xuất nó từ int ...tuyên bố: chơi gôn vài byte ;-)
Olivier Grégoire

1
@KevinCruijssen Tôi đã tuân thủ một vài ví dụ ở đây: codegolf.stackexchange.com/a/159922/16236
Olivier Grégoire



3

Ruby , 122 120 96 92 91 byte

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]}

Đã lưu 1 byte nhờ Asone Tuhid .

Hãy thử trực tuyến!


1
Nó giống như tôi thậm chí không biết làm thế nào để Ruby nữa;)
AJFaraday 22/03/18

Tôi e rằng sự thay thế của bạn không hoạt động, "Tất cả các phần của một hành động phải nằm trên cùng một dòng." Mặc dù, có thể thực hiện tối ưu hóa tương tự với một ký tự tab?
AJFaraday

@AJFaraday Có thể chấp nhận các dòng đầu ra ở định dạng ["A", "a", "B"]không? Nếu vậy, tôi có này giải pháp 96-byte.
Cristian Lupascu

Nếu họ đầu ra một dòng trên mỗi dòng. Điều đó nên làm.
AJFaraday

-1 byte nếu bạn thay thế ?(p [x,?w]):bằng?p([x,?w]):
Asone Tuhid 22/03/18

3

Java 8, 230 byte

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);}

Lưu ý: đã có câu trả lời Java ngắn hơn nhiều, vì vậy hãy đảm bảo nâng cao câu trả lời của mình ! Tôi sử dụng một cách tiếp cận hoàn toàn khác, tuy nhiên, vì vậy nó cũng đáng để đăng.

Giải trình:

Hãy thử trực tuyến.

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

C (gcc) , 142 byte

#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);}

Hãy thử trực tuyến!


Chỉ một vấn đề, điều này đã không kết thúc trong một chiến thắng.
AJFaraday

@AJFaraday Ồ vâng, đã sửa.
nwellnhof

2

Mẻ, 174 byte

@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

Giải trình: % tham chiếu biến được thay thế tại thời điểm phân tích. Điều này có hai lợi ích hữu ích:

  • %d%-=rtrừ rtừ biến được đặt tên bởid (tức là tham chiếu gián tiếp)
  • set c=%d%&set d=%c% chỉ đơn giản là một trao đổi thẳng.

2

PHP 7.1: 159 byte

<?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";

Chạy nó trong trình duyệt ở đây!

PHP 5,6: 156 byte

<?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";

Chạy nó trong trình duyệt ở đây!

Đây là giải pháp PHP 5.6 trông như thế nào với định dạng và nhận xét:

<?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

Bash, 178 byte

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

F #, 238 235 byte

Tôi nghĩ rằng tôi đang làm tốt, nhưng tất cả các bạn vượt xa tôi!

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"

Hãy thử trực tuyến!

Cảm ơn Rogem vì lời khuyên tuyệt vời để sử dụng A * B> 0 thay vì A> 0 && B> 0 (mất 3 byte).

Cũng xin cảm ơn chính thức, người có gợi ý về việc xác định trước printf trong câu trả lời Python cũng giúp tôi loại bỏ một vài byte.


1
Một lời khuyên mà tôi nhận được từ @OlivierGregoire: A*B>0sẽ giúp bạn tiết kiệm hơn một chút.

Đó là hoàn toàn rực rỡ. Yêu nó. Cảm ơn nhiều!
Ciaran_McCarthy

1

Haskell , 204 byte

Nỗ lực của tôi với Haskell, tôi đã không thể có được sự cạnh tranh đáng tiếc hơn

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

Hãy thử trực tuyến!

Giải thích:

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

Bạn có thể xem Mẹo chơi golf của chúng tôi ở Haskell . Ví dụ where m=b-xcó thể được đưa vào một bảo vệ : |m<-b-x=.
Laikoni

Bạn có thể mất lambda và một bộ dấu ngoặc đơn bằng cách sắp xếp lại một số tham số : main=putStr=<<q"A "10"B "10.randomRs(1,6::Int)<$>getStdGen. Bạn cũng có thể sử dụng một danh sách và nối nó để thoát khỏi việc xác định lại (++). Việc cuối cùng dường như không có lợi khi chỉ sử dụng b-xở mọi nơi.
Angs

1

Julia 0,6 , 175 byte

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"))

Hãy thử trực tuyến!

Phiên bản dài, không có bản quyền:

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

Dường như không có bất kỳ đầu ra nào trong liên kết TIO của bạn.
AJFaraday

Vâng tôi không biết tại sao tio không thích nó. Nó hoạt động tốt trên máy của tôi. Tôi sẽ xem xét nó nếu tôi có thời gian.
niczky12

1

VBA, 222 185 179 byte

Giải pháp đệ quy này liên quan đến 3 subs

  1. g là trò chơi bắt đầu từ lượt đầu tiên
  2. t được gọi cho mỗi lượt . Nó sử dụng đệ quy.
  3. p ngắn hơn Debug.Print khi được sử dụng hơn 3 lần (chỉ 4 trong giải pháp này) Chỉnh sửa: Bây giờ tôi đã biết rằng đó Debug.?là một thay thế chấp nhận được Debug.Print, Debug.?xngắn hơn gọi Sub để in.
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

Đây là một thử thách thú vị. Nếu bạn biết một trình thông dịch trực tuyến như TIO cho VB6 / VBScript / VBA, vui lòng để lại nhận xét. Sau đó tôi có thể gửi một liên kết đến một giải pháp làm việc.

Nếu bạn muốn kiểm tra mã này và cài đặt Microsoft Excel, Word, Access hoặc Outlook (chỉ dành cho Windows), hãy nhấn Alt + F11 để mở VBA IDE. Chèn một mô-đun mã mới (Alt + I, M) và xóa Tùy chọn Rõ ràng. Sau đó dán mã và nhấn F5 để chạy nó. Kết quả sẽ xuất hiện trong Cửa sổ ngay lập tức (nhấn Ctrl + G nếu bạn không nhìn thấy nó).

Chỉnh sửa 1: Xóa khoảng trắng mà trình soạn thảo VBA sẽ tự động thêm lại. Giảm 37 byte
Chỉnh sửa 2: Đã xóa Sub p () * để lưu 6 byte sau khi học Debug.?là cách thay thế chấp nhận được Debug.Print. Gọi một Sub để xử lý Debug.?chỉ lưu byte sau hơn sáu cuộc gọi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.