Russian Roulette, Reloaded


32

มาเล่นรูเล็ตรัสเซียกันเถอะ!

โดยปกติแล้วนี่จะเป็นการแข่งขันเพื่อเขียนโปรแกรม MOD6 ที่สั้นที่สุด แต่นั่นไม่เหมือนจริงมากนักเนื่องจากโอกาสในการชนะจะลดลงเมื่อคลิกแต่ละครั้ง นี่คือกฎ:

  1. เลียนแบบนักกีฬาหกคนจริง:
    • กระสุนนัดเดียวถูกวางลงในหนึ่งในหกห้องและกระบอกหมุนครั้งเดียวเท่านั้นก่อนที่จะเล่น
    • โอกาสในการแพ้ในการลองครั้งที่nคือ 1/6
    • โอกาสในการแพ้หลังจาก พยายามnคือ 1 / (6-n)
    • คุณรับประกันได้ว่าจะลองมากสุด 6 ครั้ง
  2. การสูญเสีย:
    • แสดงข้อความ *BANG!*
    • ยุติโปรแกรม
  3. ชนะ:
    • "ชนะ" หมายถึงปืนไม่ได้ยิง แต่กระสุนเป็นหนึ่งห้องใกล้กับค้อน
    • แสดงข้อความ *click*
    • แสดง "ทริกเกอร์" แก่ผู้ใช้พร้อมกับความสามารถในการยกเลิกโปรแกรม (เช่น "ctrl + c" ดูด้านล่าง)
  4. เฉพาะโปรแกรม:
    • การดึงทริกเกอร์เป็นรูปแบบการป้อนข้อมูลของผู้ใช้บางรูปแบบรวมถึงการลองครั้งแรก (นี่อาจเป็นการกดแป้นพิมพ์คลิกเมาส์อะไรก็ได้ไม่จำเป็นต้องมีข้อความแจ้ง)
    • อนุญาตเพียงหนึ่งอินสแตนซ์ของโปรแกรมจนกว่าจะถูกยกเลิก (การเรียกใช้อินสแตนซ์ใหม่ของโปรแกรมนั้นคล้ายกับการหมุนที่ดีเช่นความน่าจะเป็นที่จะแพ้ในการคลิกครั้งต่อไปจะถูกรีเซ็ตเป็น 1/6)

รหัสที่สั้นที่สุดชนะ!

ลีดเดอร์บอร์ด


3
สมมติฐานของคุณผิด - โอกาสในการแพ้ในการลอง n'th เป็นเพียง⅙หากคุณเคารพกระสุนหลังจากการยิงแต่ละครั้ง โอกาสในการแพ้โดยไม่คำนึงถึงคือ⅙ในนัดแรก⅕ในวันที่สอง, ¼ในวันที่สาม ... สิ้นสุดใน 1 ในวันที่ 6 คุณรับรู้สิ่งนี้ด้วย "คุณรับประกันได้ว่าจะลองไม่เกิน 6 ครั้ง"
rhialto

2
@ user2956063 คุณลืมว่ามีโอกาส (n-1) / 6 ที่คุณไม่เคยลองใช้ n: th และจะไม่สูญเสีย พวกเขาสมดุลกับชุด 1/6
Jacob Raihle

2
อาจเป็นความแตกต่างในวิธีที่นักวิทยาศาสตร์คอมพิวเตอร์และนักสถิติแสดงความน่าจะเป็น - สำหรับฉัน "โอกาสที่จะแพ้ในการลองครั้งที่ n คือ is" พูดว่ามันคงที่ - ไม่ว่า n คือ 1 หรือ 100
rhialto

3
เหตุใดจึงไม่มีชื่อ "Russian Roulette, Reloaded"
Hand-E-Food

1
@ user2956063: ความน่าจะเป็นของคุณมีเงื่อนไข P (แพ้เมื่อยิง 2) = ⅙ แต่ P (แพ้เมื่อยิง 2 | ไม่แพ้เมื่อยิง 1) = ⅕ นอกจากนี้n(โดยนัยฉันจะให้สิทธิ์คุณ) จำกัด เพียง [1,6] ดังนั้นจึงหมด 100 รายการ
ทิม Pederick

คำตอบ:


3

Pyth, 23 ไบต์

VO6"*click*" w;"*BANG!*

ง่ายจริงๆ จำนวนการสุ่มซ้ำของการแสดงผล 0 - 5 คลิกและขอบรรทัดอินพุตแล้วตามด้วยปังที่ท้าย


1
ห่าคุณ!
Cyoce

+3 ไบต์: สตริงสุดท้ายควร*BANG!*ไม่ใช่BANG
ayane

14

Ruby, 51 ไบต์

[*['*click*']*rand(6),'*BANG!*'].map{|x|gets;$><<x}

Ungolfed:

[
  *(                        # Unwrap the following array into the outer one
    ['*click*'] * rand(6)   # An array of 0-5 clicks, see Array#*
  ),
  '*BANG!*'                 # The End
].map do |x| # Shortest way to iterate I was able to find
  gets       # Await input
  $> << x    # Shove the output string to `stdout`
end          # Return value is an array of several (0-5) `stdout`s. Who cares.

หรือ

(['*click*']*rand(6)<<'*BANG!*').map{|x|gets;$><<x}

Ungolfing เหลือสำหรับผู้อ่าน ไม่ใช่เรื่องยาก

  • อีกครั้งที่รุ่งโรจน์กับมาร์ตินคราวนี้เป็นการหลอกลวงด้วย$><<การputsแทนที่
  • ไม่ส่งออกบรรทัดใหม่ แต่ไม่จำเป็น
  • ยิ่งสั้นยิ่งเรียบง่าย ส่วนที่สำคัญของพฤติกรรมที่ต้องการคือการทำ 0-5 คลิกแล้วยิง สำหรับสิ่งนั้นผลลัพธ์จะถูกสะสมภายในอาร์เรย์
  • 2 ไบต์สามารถโกนถ้าเอาท์พุทชอบ"*click*"จะถูก (สิ่งที่จำเป็นจะถูกพิมพ์ในที่สุด) โดยการแทนที่ด้วย$><< ฉันไม่แน่ใจว่าสิ่งนี้จะยังคงเป็นไปตามกฎ

68 64 ไบต์

(แนวทางอื่น)

[*0..5].shuffle.find{|x|gets;x<1||puts('*click*')};puts'*BANG!*'
  • รุ่งโรจน์ถึงMartin Büttnerสำหรับ 4 ไบต์พิเศษ

ฉันไม่ได้คิดมากในอัลกอริทึม (อาจเป็นขนาดกะทัดรัดกว่า แต่ไม่ชัดเจน) แต่ฉันชอบโมเดลที่อยู่ข้างใน:

  • อาร์เรย์เลียนแบบบาร์เรลด้วยองค์ประกอบที่เป็นเนื้อหาของห้อง เนื่องจากมีเพียงองค์ประกอบเดียวเท่านั้นที่เป็นสัญลักษณ์แสดงหัวข้อย่อยการหมุนและการสับจึงเทียบเท่ากัน
  • 0เป็นสัญลักษณ์แสดงหัวข้อ ตัวเลขอื่นไม่ได้
  • findพบว่าค่าที่ส่งคืนแรกที่บล็อกเป็นค่ามิได้falsenil
  • ||- การแสดงออกจะถูกส่งกลับโดยปริยายจากบล็อก มันเป็นไฟฟ้าลัดวงจร: มันคืนค่าตัวถูกดำเนินการแรก (ยกเว้นว่ามันเป็นnilหรือfalse) หรืออันที่สอง (อย่างอื่น) ดังนั้นมันจะส่งคืนtrue(ถ้าx<1หรือชัดเจนขึ้น แต่ยาวกว่าx == 0) หรือคืนค่าเป็นputs...
  • putsnilผลตอบแทนเสมอ อ๋อ
  • getsคำขออินพุต เพียงแค่กดปุ่มEnterพอเพียง
  • Ctrl+ Cยุติโปรแกรม

ตัดออก 64 เป็น 64 ปกติหรือไม่
Cyoce

@Cyoce uhm ... ใช่ น่าจะเป็นไปได้ มันถูก superceded โดยรายการข้างต้น แต่มันขึ้นอยู่กับความคิดที่แตกต่างกันดังนั้นฉันจึงทิ้งพวกเขาข้าม
D-side

มันเป็นปุนในเรื่องนี้
Cyoce

@Cyoce โอ้ให้อภัยฉันโพสต์แรกและทุกสิ่งที่ไม่ทราบตำนานท้องถิ่น :)
D-side

9

จาวาสคริปต์, 64 ไบต์

for(i=6;i<7&&prompt();)alert(new Date%i--?"*click*":i="*BANG!*")

คำอธิบาย

เมื่อต้องการดึงทริกเกอร์ให้ป้อนข้อความใด ๆ ลงในพร้อมท์ ป้อนอะไรหรือคลิกยกเลิกเพื่อยกเลิก

for(
  i=6;             // i = number of chambers
  i<7              // i equals "*BANG!*" (not less than 7) if we lost
    &&prompt();    // see if we should do another shot
)
  alert(           // alert the result
    new Date%i--   // use the current time in milliseconds as a random number, this is safe
                   //     to use because the gap between shots is greater than i (max 6ms)
      ?"*click*"   // on win pass "*click*" to alert
      :i="*BANG!*" // on lose alert "*BANG!*" and set i to not less than 7
  )

"*Bang!*"ไม่มากกว่า 7 แต่NaNไม่เล็กกว่า 7
Bergi

@Bergi นั่นจริง ฉันสร้างคำอธิบายใหม่เพื่อให้ชัดเจนขึ้น
user81655

6
@Bergi เฉพาะใน Javascript คำแถลงดังกล่าวมาใกล้เคียงกับความสมเหตุสมผล
MikeTheLiar

7

Lua, 82 75 ไบต์

ค่อนข้างยาว แต่มี verbose มากมายในลัวะ

for a=math.random(6),1,-1 do io.read()print(a>1 and"*click*"or"*BANG!*")end

6

LabVIEW, 46 LabVIEW Primitives

สร้าง Array of 0s และ 1 1 มีลูปเพื่อรอการคลิกและส่งออกสตริง เริ่มแรกพูดว่า BANG เพราะฉันลืมรีเซ็ตตัวบ่งชี้ก่อนที่จะเริ่ม

นอกจากนี้โปรดทราบว่านี่เป็น gif ถ้าหากไม่เล่น / โหลดให้คุณโปรดเปิดหน้านี้อีกครั้ง


ฉันไม่เห็นว่าคุณทำออกมา"*click*"ในกรณีที่ปืนไม่ยิง นอกจากนี้ยังไม่ส่งออกไป"bang"หรือ"*BANG!*"?
Katenkyo

นี่ควรเป็น gif แต่สำหรับฉันแล้วมันไม่ได้เล่นนั่นอาจเป็นปัญหา และใช่เพียงทำให้ปังนั่นคือฉันไม่ได้อ่านอย่างถูกต้องฉันเปลี่ยนที่ในวินาที
Eumel

ฉันโง่ลืมที่จะเตรียมใช้งานใหม่สตริงที่ว่างเปล่าก่อนที่จะเริ่มเพื่อ thats ทำไมมัน showes BANG ที่เริ่มต้น ...
Eumel

ไม่มีปัญหาผมเห็น GIF ตอนนี้ดูเหมือนว่ามันทำงานสวยดี :)
Katenkyo

5

Pyth, 31 30 28 ไบต์

FN.S6 EI!N"*BANG!*"B"*click*

สามารถปรับปรุงได้อย่างแน่นอน ป้อนหมายเลขใด ๆ เพื่อดึงทริกเกอร์อินพุตว่างเปล่าเพื่อยกเลิกก่อน (มีข้อผิดพลาด)

คำอธิบาย:

FN                               for N in...
  .S6                            shuffle(range(6))...
      E                          get a line of input
       I!N                       if N is falsy (i.e. 0)
          "*BANG!*"              implicit output
                   B             break
                    "*click*     else, print click

อันแรกของคุณสั้นกว่าจริง ๆ คุณไม่จำเป็นต้องตาม"มา
FryAmTheEggman

@FryAmTheEggman โอ้ใช่แล้วลืมเรื่องนั้นไป ขอบคุณ!
Doorknob

นอกจากนี้ฉันเพิ่งสังเกตเห็นอะไรบางอย่างที่โง่เง่าFN<any>ยังคงเหมือนเดิมทั้งหมดV<any>ซึ่งน่าจะเปลี่ยนเป็นสับสนนักกอล์ฟใหม่ ... : P
FryAmTheEggman

1
คุณสามารถลบตัวอักษร.?ได้อย่างง่ายดาย elseไม่มีความจำเป็นต้องใช้สำหรับ
Jakube

@FryAmTheEggman ผู้คนที่สับสนนั้นยอดเยี่ยมมาก มันอาจจะเป็นที่น่าตื่นตาตื่นใจที่กรองออกมาขัด
Cyoce

5

อย่างจริงจัง27 25 ไบต์

"*BANG!*"6J"*click*"nW,X.

ไม่มีการเชื่อมโยงออนไลน์เพราะไม่มีวิธีที่จะทำพร้อมท์กับอินพุต piped โปรแกรมสามารถเป็น CTRL-C ในเวลาใดก็ได้ที่จะไก่ออกยุติ

คำอธิบาย:

"*BANG!*"6J"*click*"nW,X.
"*BANG!*"                  push "*BANG!*"
         6J                push a random integer in [0,6) (n)
           "*click*"n      push "*click*" n times
                     W     while loop (implicitly closed at EOF):
                      ,X.    get input and discard, pop and print top of stack

4

PHP, 52 ไบต์

*<?=$n=&rand(0,6-$argi)?click:"BANG!*";$n||@\n?>*

ต้องใช้-Fตัวเลือกบรรทัดคำสั่งนับเป็นสาม Enterทริกเกอร์ถูกดึงโดยการกด

เพราะ-Fแท้จริงเรียกใช้สคริปต์อีกครั้งสำหรับทุกการป้อนข้อมูล (เด็กผมคุณไม่ได้) dieและไม่ชอบจะไม่ยุติดังนั้นเราจึงออกผ่านทางข้อผิดพลาด runtime @\nปราบปรามแทน


ตัวอย่างการใช้งาน

$ php -F primo-roulette.php

*click*
*click*
*BANG!*
$

4

Perl 5, 43 ไบต์

perl -pทำงานด้วย ชุดกระสุนที่มีเสถียรภาพ - ตำแหน่งกระสุนคือการตัดสินใจเพียงครั้งเดียวในการเริ่มต้นมาก

$i//=0|rand 6;$_=$i--?'*click*':die'*BANG*'

ดี! ฉันจะเปลี่ยนส่วนหัวเพื่อ "Perl 5.10+" //=เนื่องจากคุณกำลังใช้ ยังไม่ลืมที่จะนับ-pคะแนนของคุณ
ThisSuitIsBlackNot

4

C, 110 74 72 ไบต์

ขอบคุณเดนนิสที่กำจัดสิ่งที่มีอยู่และไบต์น้อยลง

main(r){for(r=time(0)%6;getchar(),r--;)puts("*click*");puts("*BANG!*");}
main(r)
{
    for(r=time(0)%6;getchar(),r--;)
        puts("*click*");
    puts("*BANG!*");
}

3

ลูกกวาด 36 ไบต์

ประมาณครึ่งหนึ่งของโปรแกรมคือข้อความที่จะพิมพ์ออกมา :(

:6H_(=b"*click*"(;):=)"*BANG!*\n"(;)

แบบยาว:

getc
digit6 rand range0  # build a range from 0 .. rand#
while
  popA              # these are the *click* instances  
  stack2
  "*click*"
  while
    printChr
  endwhile
  getc
  popA
endwhile
"*BANG!*\n"         # out of luck
while
  printChr
endwhile

3

Python 3, 95 ไบต์

นอกจากนี้ฉันพยายามเล่นกอล์ฟครั้งแรกใน Python 3 ฉันสาบานกับ Bruce และฉันไม่ใช่คนคนเดียวกัน

from random import*
for a in range(randint(0,5)):input();print("*click*")
input();print("*bang*")

Ungolfed:

from random import*
for a in range(randint(0,5)):
    input()
    print("*click*")
input()
print("*bang*")

สร้างตัวเลขสุ่มระหว่าง 0 และ 5 รวมพิมพ์คลิกที่หลายครั้งแล้วพิมพ์ปัง กด Enter / return เพื่อดึงไก


ตามตัวอย่างของ Bruce คุณสามารถบันทึกสองสามไบต์ด้วยfrom random import*
wnnmaw

เว้นแต่จะมีอย่างอื่นที่ฉันขาดไปมันคือหนึ่งไบต์ในการออม แต่ฉันจะเอามัน! ขอบคุณ!
Steve Eckert

ความพยายามดีฉันใช้โซลูชันของคุณเป็นแรงบันดาลใจสำหรับโซลูชัน python 2 ของฉัน ^^
basile-henry



2

R, 86 80 77 ไบต์

ตามปกติ R มีคุณสมบัติที่ยอดเยี่ยมในการเขียนโค้ดกอล์ฟ แต่ชื่อฟังก์ชั่น looooooong

sapply(sample(0:5),function(n){!n&&{cat('*BANG!*');q()};readline('*click*')})

2

Python 2, 108 104 102 100 98 ไบต์

ความพยายามครั้งแรกของฉันในการเล่นกอล์ฟ:

from random import*
a=[1]+[0]*5
shuffle(a)
for i in a:input();print("*click*","*BANG!*")[i];" "[i]

บางทีฉันควรจะเพิ่มว่าโปรแกรมไม่ยุติอย่างถูกต้องเมื่อคุณสูญเสียมันแค่โยนข้อยกเว้น (ซึ่งผลในการยกเลิก):

Traceback (most recent call last):
  File "russian_roulette.py", line 4, in <module>
    for i in a:input();print("*click*","*BANG!*")[i];" "[i]
IndexError: string index out of range

ยินดีต้อนรับสู่ Programming Puzzles & Code Golf! เมื่อคุณโพสต์คำตอบกอล์ฟกรุณาใส่ชื่อภาษาและจำนวนไบต์ (ฉันแก้ไขให้คุณที่นี่) ขอบคุณ!
ProgramFOX

ใช่ขอบคุณมาก! ที่จริงฉันพยายามแก้ไขปัญหานั้นไม่ได้รับการแก้ไขอย่างถูกต้องก่อนที่คุณจะทำ
ბიმო

ฉันได้รับจำนวนไบต์ของคุณเป็น 112 คุณใช้อะไร?
wnnmaw

นอกจากนี้คุณสามารถบันทึก 2 ไบต์ด้วยการทำa=shuffle([1,0,0,0,0,0])
wnnmaw

1
เท่าที่ฉันรู้ว่าสับเปลี่ยนการเปลี่ยนแปลงโครงสร้างข้อมูลพื้นฐานและไม่กลับอะไร ฉันลองแล้วขอบคุณมาก พาดหัว (ภาษาและจำนวนไบต์) เขียนโดย ProgramFOX แต่เมื่อฉันใช้wcมันให้ฉัน 109 อันไหนมากเกินไปมันถูกต้อง คุณนับอย่างไร
ბიმო

2

Perl 5, 40 ไบต์

<>,print"*$_*"for(click)x rand 5,'BANG!'

Enterทำงานโดยไม่เลือกบรรทัดคำสั่งเรียกถูกดึงโดยการกด


2

Python ขนาด 81 ไบต์

import time
for i in["*click*"]*(int(time.time())%6)+["*BANG!*"]:input();print(i)

แรงบันดาลใจจากโซลูชั่น Ruby (51) และ Python


1

เสียงกระเพื่อมสามัญ, 109

(do(g(b(nthcdr(random 6)#1='(t()()()()() . #1#))))(g)(read-char)(princ(if(setf g(pop b))"*BANG!*""*click*")))

ไม่ได้แข่งขันมาก แต่ฉันชอบรายชื่อวงกลม:

(do (;; auxiliary variable x
     x
     ;; initialize infinite barrel, rotate randomly
     (b (nthcdr (random 6) #1='(t()()()()() . #1#))))

    ;; we end the loop when x is T (a bullet is fired)
    (x)

  ;; press enter to shoot
  (read-char)

  ;; pop from b, which makes b advance down the list. The popped value
  ;; goes into x and is used to select the appropriate string for
  ;; printing.
  (princ
   (if (setf x(pop b))
       "*BANG!*"
       "*click*")))

1

Perl 5, 43 ไบต์

-pตัวเลือกบรรทัดคำสั่ง42 ไบต์ + เพียงกดenterเพื่อทริกเกอร์

$_=0|rand 7-$.<++$i?die"*BANG!*":"*click*"

ขอบคุณ Dom Hastings สำหรับความช่วยเหลือของเขา! คำตอบเดิมคือ 67 ไบต์:

$i++;$a=$i>=int(rand(6));print$_=$a?'*BANG!*':'*click*';last if($a)

ปัญหาที่เกิดขึ้นจริง-pคือมันจะออกก่อนที่จะเรียกprintคำสั่งสุดท้ายไม่แน่ใจว่าทำไม ฉันลองแล้ว นอกเหนือจากนั้นคำแนะนำที่ยอดเยี่ยมขอบคุณ! ความรู้ของฉันยังคงเติบโต ...
Codefun64

@DomHastings ยังโชคไม่ดีด้วยเหตุผลบางอย่าง0|เคล็ดลับที่ใช้งานไม่ได้ตามที่คาดไว้ แต่ฉันได้ทำการลบไบท์บางส่วนออกไปคำสั่งพิมพ์และคำสั่งสุดท้ายตามที่คุณแนะนำ ตอนนี้มันเป็นอย่างไร
Codefun64

@DomHastings ประณามคุณเป็นคนดี ฉันแนะนำให้วางไว้เป็นคำตอบของคุณเองเนื่องจากคุณเขียนโปรแกรมขนาดเล็กกว่าฉัน (คุณมี 40 bytes เทียบกับ 67 เดิมของฉัน!)
Codefun64

ฉันขอขอบคุณคำอธิบาย! มีความสุขเสมอที่ได้เรียนรู้ภาษาสคริปต์ที่ฉันโปรดปรานมากขึ้น! ฉันไม่เคยรู้เลยเกี่ยวกับการเพิ่มขึ้นของ prefex มันยอดเยี่ยมมาก ขอบคุณ :)
Codefun64

คุณยินดีมากยินดีที่ได้ช่วยเหลือ!
Dom Hastings

1

MATL , 41 ไบต์

6Yr`j?t@=?'*BANG!*'DT.}'*click*'DT]}T.]]x

ในการดึงทริกเกอร์ให้ป้อนสตริงที่ไม่ว่าง (เช่น'try')

หากต้องการยกเลิกให้ป้อนสตริงว่าง

ตัวอย่าง

ในกรณีนี้ทริกเกอร์ถูกดึงหนึ่งครั้งและ ... โชคไม่ดี:

>> matl
 > 6Yr`j?t@=?'*BANG!*'DT.}'*click*'DT]}T.]]x
 > 
> try
*BANG!*

ในกรณีนี้ผู้ใช้หยุด (สังเกตการป้อนข้อมูลสุดท้ายที่ว่างเปล่า) หลังจากการจับรางวัลสองครั้ง:

>> matl
 > 6Yr`j?t@=?'*BANG!*'DT.}'*click*'DT]}T.]]x
 > 
> try
*click*
> try
*click*
> 

คำอธิบาย

6Yr                  % random avlue from 1 to 6    
`                    % do...while  
  j                  % input string
  ?                  % if nonempty
    t                % duplicate the orignal random value
    @                % loop iteration index  
    =                % are the equal?
    ?                % if so             
      '*BANG!*'D     % display string
      T.             % unconditional break                                     
    }                % else
      '*click*'D     % display string
      T              % true value, to go on with do...while loop
    ]                % end if               
  }                  % else                                                    
    T.               % unconditional break
  ]                  % end                                                     
]                    % end                                                     
x                    % delete original random value

1

Perl 6 ,  58    53 ไบต์

for ^6 .pick(*) {get;say <*BANG!* *click*>[?$_];!$_&&last} # 58 bytes

$ perl6 -pe '$///=^6 .pick;$_=$/--??"*click*"!!say("BANG!")&&last' # 52+1= 53 bytes

กด Enter เพื่อดึงทริกเกอร์หรือ ctrl + c เพื่อวางลง


1

Python 2, 88 84 ไบต์

โซลูชันนี้ได้รับแรงบันดาลใจจากโซลูชัน python 3 ที่ให้ไว้แล้ว ฉันเลือกหลาม 2 เพื่อลบวงเล็บการพิมพ์แม้ว่าสิ่งนี้จะเปลี่ยนพฤติกรรมของอินพุต ()

import time
for i in[0]*int(time.time()%6)+[1]:input();print("*click*","*BANG!*")[i]
  • ฉันใช้โมดูโล่ของเวลาเป็นฟังก์ชั่นแบบสุ่ม (ดีพอสำหรับรูเล็ตรัสเซีย)
  • อินพุตของผู้เล่นควรเป็น "i" จากนั้นกด Enter (มิฉะนั้นอินพุต () จะโยนข้อผิดพลาด) เคล็ดลับนี้ขึ้นอยู่กับความจริงที่ว่าอินพุตนั้นอาจเป็น "อะไรก็ได้"

1

Ruby, 45 + 1 = 46

ไม่ฉลาดเท่าD-sideแต่สั้นกว่าเล็กน้อย

ด้วยแฟล็กบรรทัดคำสั่งpให้รัน

rand(7-$.)<1?(puts'*BANG*';exit):$_='*click*'

ผู้ใช้สามารถดึงทริกเกอร์ด้วยการกลับและออกด้วย control-c pทำให้โปรแกรมที่จะทำงานในวงอ่านบรรทัดจาก STDIN และ $_outputting แต่ละครั้งที่รันจะเพิ่มขึ้นทุกครั้ง$.ทุกครั้ง ดังนั้นในการเรียกใช้ครั้งแรกมันเลือกจำนวนเต็มบวกแบบสุ่มน้อยกว่า 6 จากนั้น 5 จากนั้น 4 และอื่น ๆ ใน 0 แรกเราส่งออกด้วยตนเองและออกจนกว่าเราจะออกโดยปริยาย

(และตอนนี้ฉันสังเกตเห็นว่ามี Perl ที่คล้ายกันอยู่แล้วโอ๊ะ)


1

Perl 5, 69 51 49 ไบต์

map{<>;print"*click*"}1..rand 6;<>;print"*BANG!*"

อาจมีศักยภาพในการเล่นกอล์ฟเพิ่มขึ้นฉันจะพิจารณาเรื่องนี้

การเปลี่ยนแปลง:

  • บันทึก 8 ไบต์ด้วยการลบ$lและอัฒภาคบางส่วนและ 10 ไบต์โดยเปลี่ยน<STDIN>เป็น<>
  • บันทึก 2 ไบต์ต้องขอบคุณ Oleg V. Volkov

1
49:map{<>;print"*click*"}1..rand 6;<>;print"*BANG!*"
Oleg V. Volkov

@ OlegV.Volkov ขอบคุณ! ฉันจะแก้ไขในตอนนี้
ASCIIThenANSI

0

VBA, 126 ไบต์

เวอร์ชั่นกอล์ฟสำหรับขนาดเล็กที่สุดของไบต์

Sub S()
r=Int(5*Rnd())
e:
a=MsgBox("")
If a=1 Then: If i=r Then MsgBox "*BANG!*" Else: MsgBox "*click*": i=i+1: GoTo e
End Sub

เวอร์ชั่นสนุกที่ทำให้ปุ่มชัดเจนยิ่งขึ้นเพื่อการยอมรับของผู้ใช้ที่เพิ่มขึ้น

Sub RR()
r = Int(5 * Rnd())
e:
a = MsgBox("Are you Feeling Lucky?", 4)
If a=6 Then: If i=r Then MsgBox "*BANG!*", 16 Else: MsgBox "*click*", 48: i=i+1: GoTo e
End Sub

สนุกกับฟอร์มที่กำหนดเองและคุณสามารถสร้างเกม Slick ที่สวยงามใน VBA


0

APL, 39/65 ไบต์

{⍞⊢↑⍵:⍞←'*BANG*'⋄∇1↓⍵⊣⍞←'*click*'}6=6?6

คำตอบที่ตรงไปตรงมาสวย


การนับสองไบต์หมายความว่าอย่างไร
Mego

0

C, 180 ไบต์

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){srand(time(NULL));int r,i=6;while(i!=1){getchar();r=rand()%i;if(r){puts("CLICK");}else{puts("BANG");exit(0);}i--;}}

ความพยายามครั้งแรกของฉันที่การตีกอล์ฟมีแนวโน้มที่จะปรับปรุงมาก :)


0

Julia, 71 ไบต์

b=rand(1:6);while b>0 readline();print(b>1?"*click*":"*BANG!*");b-=1end

กดEnterเพื่อยิงหรือCtrl+Cเพื่อออก หลังจบด้วยInterruptExceptionปลายหลังกับ

Ungolfed:

# Set an initial bullet location
b = rand(1:6)

while b > 0
    # Read user input
    readline()

    # Check the location
    if b > 1
        print("*click*")
    else
        print("*BANG!*")
    end

    b -= 1
end

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.