Roulette Nga


28

Viết một chương trình chơi Roulette Nga!

Nếu chương trình được bắt đầu,

  • nên có 5 trong 6 cơ hội kết thúc bình thường sau khi in "Tôi sống sót!"
  • nên có 1 trong 6 cơ hội chương trình bị sập. (lỗi phân đoạn, v.v.)

Không có đầu vào, và không có đầu ra khác được cho phép.

Tính ngẫu nhiên phải công bằng: nó phải có phân phối xác suất thống nhất. Điều này có nghĩa là một biến chưa được khởi tạo (hoặc RNG không có hạt giống) MOD 6 sẽ không đủ.

Nếu giải pháp hoạt động chỉ với một hệ điều hành / nền tảng chuyên dụng, bạn sẽ nhận được hình phạt 6 byte cho điểm số.

Mã ngắn nhất sẽ thắng, không sớm hơn 10 ngày sau câu trả lời hợp lệ đầu tiên.


1
Chúng ta có thể dựa vào thời gian chạy cơ bản để công bằng, ngay cả khi không được đảm bảo rõ ràng trong tài liệu không? Ví dụ: Python randrange(5)có thể được thực hiện như randrange(MAX_INT)%6.
ugoren

Để truyền cảm hứng cho sự sáng tạo, bạn có thể xem xét cấp tiền thưởng cho những giải pháp không dựa vào chia cho số không.
Primo

Có lẽ phần thưởng cho biết nên liên quan đến việc chia điểm cho 2.
Joe Z.

1
@JoeZeng: đó sẽ là quá nhiều. Thông thường bạn có thể làm cho nó một lỗi khác nhau, như tham chiếu con trỏ null, v.v. với chi phí chỉ bằng một vài ký tự.
vsz

Tôi hiểu rồi. Tôi không quá có kinh nghiệm trong việc tạo điều kiện ghi điểm cho các câu đố golf mã, vì vậy tôi vẫn học những thứ như vậy.
Joe Z.

Câu trả lời:


4

05AB1E , 13 12 byte

6LΩiFë“IЖd!

-1 byte nhờ @Emigna .

05AB1E thực sự không thể có lỗi, nhưng vì phiên bản mới của 05AB1E vẫn có một số vấn đề so với phiên bản cũ, tôi có thể lợi dụng điều đó để khắc phục lỗi cho thử thách này.

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

Giải trình:

6L          # Create the list [1,2,3,4,5,6]
  Ω         # Get a random choice from this list
   i        # If it is 1:
    F       #  Do a ranged loop, which currently results in a "(RuntimeError) Could not
            #  convert  to integer." error when no argument is given
   ë        # Else:
    IЖd!  #  Push dictionary string "I survived!" (which is output implicitly as result)

Xem mẹo 05AB1E này của tôi (phần Làm thế nào để sử dụng từ điển? ) Để hiểu tại sao “IЖd!"I survived!".


Có vẻ như 5ÝΩz“IЖd!nên làm việc nhưng rõ ràng 1 / 0 = 0.
Bạch tuộc ma thuật Urn

1
@MagicOctopusUrn Vâng, 05AB1E hầu như không bao giờ có lỗi .. Ngoài phần dựng sẵn khá cũ .0thường sử dụng lỗi chia 0 cho STDERR trong phiên bản cũ của 05AB1E, tôi thậm chí còn không biết cách sửa lỗi 05AB1E cũ . Tuy nhiên, phiên bản mới vẫn còn khá nhiều lỗi, tuy nhiên, tôi đã tận dụng cơ hội của mình ở đây. ;)
Kevin Cruijssen

1
Tôi nhớ người cũ .0, trong hơn một lần, nó đã khiến ai đó phải thốt lên "Wat ... Tại sao đó là một mệnh lệnh?"
Bạch tuộc ma thuật Urn

11

PHP 38 byte

<?~$$s[rand(+$s=sssss,5)]?>I survived!

Đặt một +trước một chuỗi không số sẽ đánh giá 0. Nên rand(0,5)trả về 5, $s[rand(0,5)]sẽ là chuỗi rỗng (vì $schỉ dài năm ký tự) và sau đó $$s[rand(0,5)]sẽ là một biến chưa được khởi tạo. Cố gắng thực hiện đảo ngược sẽ dừng trên Loại toán hạng không được hỗ trợ. Bất kỳ giá trị nào khác, 0-4sẽ trả về svà vì $sđược xác định, bạn sẽ tồn tại.

Lưu ý: kể từ phiên bản php 4.2.0, trình tạo số ngẫu nhiên được gieo tự động .


6

R 30

"I survived!"[6*runif(1)<5||Z]

Một lần trong sáu, nó sẽ báo lỗi: Error: object 'Z' not found


6

Hồng ngọc, 24-28

p rand(6)<5?"I survived!":1/0

Khoảng 6 lần, có một ZeroDivisionError

Thậm chí còn có một phiên bản ngắn hơn với 24 ký tự (Nhờ ugoren và histocrat):

6/rand(6);p"I survived!"

Nếu bạn không chấp nhận "đầu ra, thì tôi cần thêm 3 ký tự. Tùy chọn đầu tiên ( puts) thêm một dòng mới, thứ hai ( $><<) không tạo ra dòng mới:

6/rand(6);puts"I survived!"
6/rand(6);$><<"I survived!"

Có một câu hỏi về số ngẫu nhiên trong ruby ​​tại SO . Hạt giống srandđược gọi tự động với hạt giống từ thời điểm hiện tại nếu nó chưa được gọi. (xem bình luận của Julians )


Primo đã có ý tưởng cho một phần thưởng thêm cho những giải pháp không dựa vào sự phân chia bằng 0 .

Giải pháp đầu tiên của tôi có thể được rút ngắn (28 ký tự) với một undefined local variable or method ``a' for main:Object (NameError)

p rand(6)<5?"I survived!":a

Có thể thậm chí ngắn hơn với 6/rand(6).
ugoren

Ruby có tự động RNG không?
vsz

Bạn có thể cắt ba ký tự khác bằng cách xóa luồng điều khiển:1/rand(6);p "I survived!"
lịch sử

@ugoren / histocrat Cảm ơn gợi ý của bạn, tôi đã điều chỉnh giải pháp của mình.
knut

Một byte khác cho bạn: không yêu cầu khoảng trắng giữa p"I survived!". Theo tính toán của tôi, đó chỉ là 24 byte.
primo

6

Thuốc nhuộm APL - 25 22 21 20 Charachters

'I Survived!'⊣1÷6⊤?6

Bản in DOMAIN ERROR là lỗi, do chia cho số không.

Giải pháp không phân chia ngắn nhất bằng 0 mà tôi có thể đưa ra là 23 ký tự.

('I Survived!'1)[~6⍷?6]

Nó ném một INDEX ERROR

Hãy thử nó ở đây

Phông chữ APL tại đây


Tôi muốn chấp nhận nó, nhưng nó dường như không hoạt động. Một vài lần nó in " I survived", nhưng sau khi in DOMAIN ERRORmột lần, nó chỉ tiếp tục in. Ngay cả khi tôi tải lại trang web hoàn toàn, nó sẽ không bao giờ tồn tại nữa.
vsz

@vsz Thật kỳ lạ ... Nó hoạt động trong WSL DyL của tôi và tôi nhớ thử nghiệm nó với TryAPL khi tôi hoàn thành. Nó vẫn hoạt động trên trình thông dịch của tôi, nhưng không phải trên trang web. Nếu điều này có ích: dl.dropbox.com/u/9086539/apl.png
MrZander

1
1÷0là một DOMAIN ERRORtrong Dyalog nhưng trong ngn / apl nó . Kết quả từ ?6là 1..6 khi ⎕IO←1(mặc định trong Dyalog) và 0..5 khi ⎕IO←0(chỉ có tùy chọn trong ngn / apl). Trong Dyalog, PRNG có thể được gieo bằng cách cài đặt ⎕RL. Ban đầu nó có một số giá trị mặc định được xác định trước. Nếu bạn đặt ⎕RL←0, PRNG sẽ được hệ điều hành tái định nghĩa khá khó đoán. TryAPL đang sử dụng Dyalog và không hỗ trợ ?chức năng .
ngn

1
Rất có thể có điều gì đó đã được thay đổi vào thời điểm đó, đôi khi chúng tôi đang cập nhật phần mềm đằng sau TryAPL hoặc thử nghiệm các tính năng của trang web. Tôi có liên kết không? Nếu tôi nói với bạn, tôi sẽ phải giết bạn ... tốt, với xác suất là 1 ÷ 6 :)
ngn

1
Nhân tiện, đây là một giải pháp gồm 18 ký tự: 'Tôi đã sống sót!' ÷? 6
ngn

5

Con trăn, 96

from ctypes import*
from random import*
randrange(5)or pointer(c_int())[9**9]
print'I survived!'

Nếu randrange(5)trả về 0, thì python sẽ bị sập do lỗi phân đoạn.


5

vba, 27

?1/int(6*rnd),"I Survived!"

được sử dụng trong cửa sổ ngay lập tức.
Khi thất bại, một cửa sổ lỗi cho biết:
chia cho số không
xuất hiện


Thiếu !trong văn bản.
steenslag

@steenslag, cố định
SeanC

@SeanCheshire Tôi đã đưa ra một giải pháp thay thế cho câu trả lời của bạn.
Gaffi

5

Befunge - 48 ký tự

 v >91+"!devi"v
/?>?<v"I surv"<
 / / :
   :,_@#

Tính ngẫu nhiên duy nhất của Befunge là ?toán tử, sẽ đưa bạn đi theo một trong bốn hướng rõ ràng ( 1/4cơ hội). Bằng cách chặn một hoặc hai hướng, bạn có 1/3hoặc có 1/2cơ hội và bằng cách kết hợp những hướng này, bạn sẽ có được1/6 cơ hội thoát khỏi chương trình "còn sống".

Chương trình gặp sự cố bằng cách thực hiện divive-by-zero. Tôi đoán đó là cụ thể về việc triển khai những gì sẽ xảy ra (trên Wikipedia có nói chương trình sẽ yêu cầu câu trả lời mong muốn), nhưng befungee.py sẽ gặp sự cố hoặc thoát ra một cách giận dữ:

$ for i in {1..6} ; do ./befungee.py roulette.befunge ; done
Error (1,2): integer division or modulo by zero
Error (3,2): integer division or modulo by zero
Error (1,2): integer division or modulo by zero
I survived!
Error (0,1): integer division or modulo by zero
I survived!

5

J, 18

'I survived!'[q:?6

Không thành công domain errorkhi cố gắng nhân tố 0.


J có gieo hạt RNG của nó tự động không?
vsz

@vsz Vâng, với ?. Bạn có thể sử dụng ?.cho hạt giống cố định.
Randomra

4

C, 67 65 62 ký tự

rand()%8không mất công bằng. Sự cố phân chia cho t=0, cho đúng cho 1 và 2 (thử lại), cho sai cho 3..7 (còn sống).
EDIT: Phiên bản trước đã sử dụng một biến tạm thời, kết thúc hoàn toàn không cần thiết. 2/(rand()%8)thực hiện cả hai điều kiện cần thiết.

main(){
        for(srand(time(0));2/(rand()%8););
        puts("I survived!");
}

Nó làm. "không cho phép kết quả đầu ra nào khác"
vsz

@vsz, bằng cách nào đó đã bỏ lỡ nó. Nhưng dù sao, với gcc / Linux, nó không in bất cứ thứ gì. Ngoài ra, tuân thủ nghiêm ngặt tiêu chuẩn, yêu cầu này là không thể, bởi vì hành vi không xác định có thể in bất cứ điều gì.
ugoren

@vsz, đã sửa ngay bây giờ - không có đầu ra thêm trong mọi trường hợp. Cũng hoạt động với tối ưu hóa, và ngắn hơn 2 ký tự.
ugoren

4

T-SQL 56 44 40 + 6

 if 1/cast(ceiling(rand()*6)-1as int)<2print'I Survived!'

Tín dụng Sean Cheshire cho gọi ra diễn viên là không cần thiết

 if 1/ceiling(rand()*6-1)<2print'I Survived!'

Tín dụng tin nhắn cá nhân từ Sean Cheshire cho đề nghị thay đổi trần để sàn.

 if 1/floor(rand()*6)<1print'I Survived!'

Death Err Msg: Msg 8134, Level 16, State 1, Line 3 Chia cho số không gặp phải lỗi.


1
-1ceilingkhông cần thiết castsẽ cắt ngắn
SeanC

Tôi đang thử nghiệm nếu trần có thể được gỡ bỏ mà không vi phạm yêu cầu phân phối đồng đều, các tài liệu nói rằng rand () trả về các giá trị float từ 0 đến 1.
miễn phí

Tôi muốn biết nếu trần có thể được gỡ bỏ từ mục đầu tiên của tôi. Tôi không thể xác định từ tài liệu T-SQL nếu hàm rand () có bao giờ trả về 1 hay không. Vì vậy, tôi đã chạy một vòng lặp khoảng 50 triệu lần để kiểm tra hàm rand (), chưa bao giờ nó trả về 1. Nhưng, loại bỏ trần khỏi mục nhập đầu tiên của tôi vẫn là 47 byte, vì vậy mục nhập thứ hai của tôi vẫn ngắn hơn. Giữ trần và loại bỏ đúc.
miễn phí

Tôi nghi ngờ bạn đã thử nghiệm kịch bản này hơn 20 lần. Điều này không phải lúc nào cũng trả lại kết quả mong đợi luôn. 1 trong 6 điều này sẽ thất bại và không trả lại đầu ra. Cú pháp này sẽ hoạt động: 0 / sàn (rand () * 6) = 0
t-clausen.dk

3

Javascript, 42

(Math.random()*6|0)?alert('i survived!'):b

Bitwise hoặc tầng kết quả của phép nhân do đó giá trị từ 0 đến 5 kết quả. 0 được gán giả thành sai, vì vậy trong 5 trên 6 trường hợp cảnh báo xuất hiện trong trường hợp thứ 6, một số nhất định bđược tham chiếu, làm hỏng quá trình.


3

Sử dụng phép chia thông thường theo phương thức zero:

Phiên bản Perl 5,8

1/(int rand 6)&&print "I survived!"

Phiên bản Perl 5.10

1/(int rand 6)&&say "I survived!"

Khi thất bại, chúng sẽ hiển thị:

Illegal division by zero at -e line 1.

Sử dụng chức năng ban phước được sử dụng để tạo các đối tượng trong perl.

Phiên bản Perl 5,8

print (int rand 6?"I survived!":bless me);

Phiên bản Perl 5.10

say (int rand 6?"I survived!":bless me);

Khi thất bại, chúng sẽ hiển thị:

Can't bless non-reference value at -e line 1.

3
một vài gợi ý: loại bỏ dấu ngoặc đơn, logic &&và khoảng trắng thừa. sử dụng ~~thay vì intđể buộc các giá trị tích phân. kết quả là thế này:1/~~rand 6;print"I survived!"
ardew

3

GolfScript, 21 ký tự

,6rand/;'I survived!'

Giống như hầu hết các câu trả lời, câu trả lời này có một trong sáu cơ hội gặp sự cố với ZeroDivisionError. Giải pháp ngắn nhất tôi có thể quản lý mà không cần sử dụng phép chia cho số 0 là 23 ký tự:

5,6rand=+;'I survived!'

trong đó có 1/6 cơ hội gặp sự cố undefined method `+' for nil:NilClass (NoMethodError).

(Ps. Trong khi phát triển điều này, tôi đã tìm thấy lỗi có thể xảy ra trong trình thông dịch GolfScript: mã như 0,1>xuất hiện để lại một nilgiá trị trên ngăn xếp, sau này sẽ làm hỏng chương trình nếu bạn cố gắng làm bất cứ điều gì với giá trị đó ngoại trừ bật nó ra và tắt vứt nó đi với ;. thật không may, thực tế là tôi làm nhu cầu sử dụng các giá trị bằng cách nào đó để kích hoạt một phương tiện tai nạn mà ngay cả khai thác lỗi này không giúp tôi có được dưới 23 ký tự.)


Đó chắc chắn là một lỗi. 5,5>[]trên chồng, đó có lẽ là những gì nó nên làm, nhưng 4,5>nil. Nếu bạn không gỡ bỏ nó, trình thông dịch sẽ thực sự gặp sự cố trong khi cố gắng xuất nó. Một tác dụng phụ thú vị là 4,6rand>+;'I survived!'trở thành một giải pháp hợp lệ. Ai đó có lẽ nên thông báo cho Flagitious.
Primo

1
Tôi đã báo cáo điều này và nó đã được sửa (cùng với một lỗi khác mà tôi tình cờ gặp phải) trong phiên bản mới nhất của trình thông dịch GolfScript.
Ilmari Karonen

3

Con trăn, 70 ký tự

Với cảm hứng từ câu trả lời của grc.

from random import*
if randrange(5)<1:exec'()'*9**5
print'I survived!'

randrange (5) trả về giá trị từ 0 đến 5.
Nếu nó trả về 0, Python gặp sự cố trong khi cố gắng thực thi (ute) một chuỗi mã chứa 9 ^ 5 bộ dấu ngoặc.


3

PHP - 30 byte

<?rand(0,5)?:~[]?>I survived!

Yêu cầu PHP 5.4+ cho cú pháp mảng ngắn, ý tưởng toán tử không hợp lệ bị đánh cắp một cách đáng xấu hổ từ @primo.

Như đã nêu, rand()được tự động gieo vào lần sử dụng đầu tiên .


Chia cho số 0 không dừng lại, nó chỉ tạo ra một cảnh báo, cũng như văn bản 'Tôi đã sống sót!'. Ngoài ra, rand()%6không phải là một phân phối thống nhất, như 32768 = 2 (mod 6). Tuy nhiên, rand(0,5)||~$ađối với 30 byte là và sẽ hoạt động bổ sung với tất cả các phiên bản PHP (biểu thức thứ hai trong một ternary chỉ là tùy chọn trong 5.3.0+).
primo

@primo Đoán tôi chỉ tìm kiếm dấu vết ngăn xếp khi tôi kiểm tra số chia cho số 0, không nhận thấy nó vẫn được in. Tôi biết tốc ký thứ ba là 5,3+, nhưng tôi thực sự không có hứng thú với việc hỗ trợ các phiên bản cũ đã hết hạn :)
Leigh

Điều đó tôi đồng ý với. Không có đối số hợp lệ để tiếp tục sử dụng ít hơn 5,3 tại thời điểm này. 5.4, ​​tôi vẫn đang giữ số sửa đổi hai chữ số.
primo

1
Tôi đếm 29 byte.
Tít

3

Befunge, 38

v>25*"!devivrus I",,,,,,,,,,,@
?^
v
?^
<1

Khá đơn giản. Sự cố được thực hiện bằng cách đẩy 1 giây lên ngăn xếp cho đến khi nó tràn ra. Tôi đã thực hiện một vài nỗ lực trong việc cắt bỏ 11 dấu phẩy đó và thay thế chúng bằng một số vòng lặp hiệu quả hơn để in mọi thứ, nhưng không thể có được nó dưới 11 ký tự.

Lưu ý rằng việc đếm các ký tự trong Befunge hơi khó khăn ... Chẳng hạn, chỉ có một ký tự trên dòng thứ ba, nhưng tôi đang đếm thêm một ký tự ở đó vì việc thực thi có thể đi qua vị trí đó.


Tôi tin rằng đó là kỷ lục cho các dấu phẩy liên tiếp nhất tôi từng thấy trong một chương trình.
Joe Z.

Và sau đó tôi tìm kiếm cách Befunge thực sự hoạt động và cọ vào mặt tôi.
Joe Z.

2

CMD Shell (Win XP trở lên), 40 +6

Tôi chỉ làm điều này vì DOS không phải là thứ thậm chí nên được nghĩ đến cho môn đánh gôn và khoảng trắng là quan trọng

set/a1/(%RANDOM% %% 6)&&echo I Survived!

Khi thất bại, nó sẽ in

Chia cho số không.


2

R, 50 44 42 36

ifelse(!is.na(sample(c(NA,1:5),1)),'I Survived!',)

ifelse(floor(runif(1,0,5))>0,'I Survived!',)

ifelse(floor(runif(1,0,5)),'I Survived!',)

ifelse(sample(0:5,1),'I Survived!',)

Tin nhắn tử thần:

Lỗi trong ifelse (! Is.na (1 / mẫu (c (NA, 1: 5), 1)), "Tôi đã sống sót!",): Thiếu đối số "không", không có mặc định


Tôi đã thử R và không thể làm cho nó thất bại - if(1/0)"I Survived!"vẫn được in Tôi sống sót
SeanC

Không giống như các ngôn ngữ khác, R không coi 1/0 là lỗi toán học và không dừng thực thi, nó chỉ trả về inf cho 1/0. Tôi nghĩ rằng @vsz muốn có một lỗi phá vỡ cho vòng này. Nhưng giả sử vsz tính NA là lỗi chết, tôi có thể đưa chương trình của mình xuống còn 41 ký tự: ifelse (mẫu (c (NA, 1: 5), 1), 'Tôi đã sống sót',)
miễn phí vào


2

Javascript, 40 ký tự

Trong Javascript, thủ thuật chia cho 0 thậm chí không hoạt động: nó chỉ trả về Infinity. Do đó, tham chiếu một biến không tồn tại:

alert(6*Math.random()|0?"I survived!":f)

Không quá ngắn, mặc dù vui :)



2

TI-BASIC (TI-84 + / SE), 36 byte

startTmr→rand:1/(1<randInt(1,6:"I survived!

Không có đầu vào, như thách thức chỉ định.
Đầu ra là I survived!nếu thành công, một DIVIDE BY 0lỗi khác.

Các DIVIDE BY 0màn hình báo lỗi trông giống như sau:

ERR:DIVIDE BY 0
1:Quit
2:Goto

Chọn một trong hai tùy chọn (và trở về màn hình chính nếu 2được chọn) sẽ hiển thị Errorsau khi gọi chương trình.

Ví dụ:

prgmCDGFE
           Error
prgmCDGFE
I survived!
prgmCDGFE
I survived!
prgmCDGFE
           Error

Giải trình:

startTmr→rand:1/(1<randInt(1,6:"I survived!   ;full program

startTmr→rand                                 ;store the current time into "rand"
                                              ; this is necessary because "rand" is 0 after
                                              ; factory reset, the default state for TI-BASIC
                                              ; submissions
                   randInt(1,6                ;get a random integer in [1,6]
                 1<                           ;is greater than 1?  1 if true, 0 if false
              1/(                             ;divide 1 by the result
                                              ; throws "DIVIDE BY 0" error if result was
                                              ; false
                               "I survived!   ;leave this string in "Ans"
                                              ;implicitly print "Ans"

Ghi chú:

  • TI-BASIC là một ngôn ngữ được mã hóa. Số lượng byte không bằng số ký tự.

  • Chữ thường là hai byte mỗi.

    • Chữ thường có thể được kích hoạt bằng chương trình lắp ráp này .
  • startTmrlà một lệnh chỉ trên các máy tính TI-84 + và TI-84 + SE. Máy tính cho biết có hệ điều hành khác nhau.


2

Python, 53 byte

Đây là một chỉ mục python ngắn 53 byte ngoài phạm vi chương trình:

import time
[0][time.time()%6<1]
print("I survived!")

Xin chào và chào mừng. Xin lưu ý rằng trong các quy tắc cho thử thách này, có ghi "MOD 6 sẽ không đủ". Mặc dù tôi không quen thuộc với Python, nhưng có vẻ như tôi đang sử dụng Modulo ở đây.
Shaun Bebbers

1
@ShaunBebbers Câu trích dẫn là "Điều này có nghĩa là một biến chưa được khởi tạo (hoặc RNG không có hạt giống) MOD 6 sẽ không đủ", nhưng bài đăng meta này nói rằng modulo thời gian hiện tại là đủ cho một PRNG cho golf-code
Stephen

Hiểu lầm rồi.
Shaun Bebbers

1

Java, 149

public class R{public static void main(String[]s){int[]a={1,1,1,1,1};System.out.println(a[new java.util.Random().nextInt(7)]>0?"I survived!":"");}}

Thất bại với lỗi "Mảng ngoài giới hạn". Quản lý để cạo một vài ký tự bằng cách sử dụng đối tượng Ngẫu nhiên ẩn danh (không nhập).


1

Groovy, 39

1/new Random().next(6);print"I survived!"

Chọn một số ngẫu nhiên trong khoảng từ 0 đến 5. Nếu 0, ném một chia cho ngoại lệ bằng không.


1

Con trăn (56), Haskell (77)

Điều này gặp sự cố với IndexError khi số được tạo là 1:

từ nhập ngẫu nhiên *
in ['Tôi đã sống sót!'] [1 / randint (1,7)]

Giải pháp Haskell có cùng ý tưởng:

nhập System.Random
main = putStrLn. (["Tôi đã sống sót!"] !!). div 1 = << RandomRIO (1,6)

1

Con trăn, 59 55 53, 65 59 56

import os
1/(ord(os.urandom(1))%6)
print"I survived!"

ZeroDivisionErrorkhi ord(os.urandom(1))%6đánh giá về 0

import os
print(["I survived!"]*5)[ord(os.urandom(1))%6]

IndexErrorkhi ord(os.urandom(1))%6đánh giá đến 5


Lưu 5 ký tự bằng cách thay đổi nhập: import random as rsau đó sử dụngr.randint
Steven Rumbalski

1
Hoặc lưu 8 ký tự bằng cách thay đổi nhập vào import os, sau đó sử dụng ord(os.urandom(1))%6làm int ngẫu nhiên.
Steven Rumbalski

Lưu 1 ký tự bằng cách xóa khoảng trắng sau print.
Steven Rumbalski

1

VBA - 39/46

Tôi không thích đầu ra số của Sean Cheshire (mặc dù vẫn là một câu trả lời hay, nhưng về mặt kỹ thuật thì nó không thành công No input, and no other outputs are allowed.từ thông số kỹ thuật ...), cộng với việc anh ấy sử dụng /0, vì vậy đây là những lựa chọn thay thế của tôi:

?Mid("I Survived!",IIf(Int(6*Rnd),1,0))

Điều này giải quyết Run-time error '5': Invalid procedurekhi cố gắng đạt đến ký tự 0 (VBA là lập chỉ mục dựa trên 1).

n="I Survived!":If Int(6*Rnd) Then ?n Else ?-n

Điều này giải quyết Run-time error '13': Type mismatchkhi áp dụng một chuyển đổi tiêu cực cho một chuỗi.


1

Japt v1.4.5, 16 byte

6ö
ªí
`I s¨viv!

Thử nó

-1 byte nhờ @Shaggy!

Ném TypeError: U.í is not a functionkhi một số ngẫu nhiên trong phạm vi [0,6)0.



Trên thực tế, có thể nên sử dụng v1.4.5 cho việc này, chỉ trong trường hợp ETH thêm N.í()phương thức vào v1.4.6.
Shaggy

Đã cập nhật - Japt cố gắng hết sức để không gặp sự cố với các chương trình lạ. Tôi đã cố gắng tìm ra cách tham chiếu một biến không tồn tại (AZ được xác định), nhưng không xem xét việc gọi một phương thức không tồn tại.
dana

Vâng, N.í()là "đi đến" của tôi để ném một lỗi (nó đã từng N.y()). Có một vài cách khác để nhận lỗi nhưng chúng hiếm khi hữu ích.
Shaggy

Bây giờ, tại sao tôi không nghĩ đến việc sử dụng dòng thứ 3?! : \
Shaggy
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.