Russisches Roulette, Reloaded

32

Lass uns russisches Roulette spielen!

Normalerweise wäre dies ein Rennen, um das kürzeste MOD 6-Programm zu schreiben, aber das ist nicht sehr realistisch, da die Gewinnchance mit jedem Klick abnimmt. Hier sind die Regeln:

  1. Emulieren Sie einen echten Sechser :
    • Eine einzelne Kugel wird in eine der sechs Kammern gegeben, und der Lauf wird nur einmal gedreht, bevor gespielt wird.
    • Die Chance, beim n- ten Versuch zu verlieren , ist 1/6.
    • Die Chance nach n Versuchen zu verlieren ist 1 / (6-n)
    • Sie werden garantiert in höchstens 6 Versuchen verlieren.
  2. Verlieren:
    • Zeigen Sie den Text an *BANG!*
    • Beenden Sie das Programm.
  3. Gewinnen:
    • "Gewinnen" bedeutet, dass die Waffe nicht feuert, aber die Kugel ist eine Kammer näher am Hammer.
    • Zeigen Sie den Text an *click*
    • Präsentieren Sie dem Benutzer einen "Trigger" sowie die Möglichkeit, das Programm zu beenden (z. B. "Strg + C", siehe unten).
  4. Programmspezifisch:
    • Das Drücken des Auslösers ist eine Form der Benutzereingabe, einschließlich des ersten Versuchs. (Dies kann ein Tastendruck sein, ein Mausklick, was auch immer; Eingabeaufforderungen sind nicht erforderlich.)
    • Nur eine Instanz des Programms ist zulässig, bis es beendet wird. (Das Ausführen einer neuen Instanz des Programms entspricht einer guten Drehung des Laufs, dh die Wahrscheinlichkeit, beim nächsten Klick zu verlieren, wird auf 1/6 zurückgesetzt.)

Kürzester Code gewinnt!

Bestenliste

Ayane
quelle
3
Ihre Annahmen sind falsch - die Chance, beim n-ten Versuch zu verlieren, ist nur ⅙, wenn Sie die Kugeln nach jedem Schuss erneut einschlagen. Ohne zu reagieren, ist die Chance zu verlieren first beim ersten Schuss, ⅕ beim zweiten, ¼ beim dritten ... und endet mit 1 beim 6.. Sie erkennen dies an "Sie werden garantiert in höchstens 6 Versuchen verlieren".
Rhialto
2
@ user2956063 Sie vergessen, dass es eine (n-1) / 6-Chance gibt, dass Sie den n-ten Versuch nie erreichen und daher nicht verlieren können. Sie gleichen sich zu einem einheitlichen 1/6 aus.
Jacob Raihle
2
vielleicht ist das ein Unterschied in der Art und Weise Informatiker und Statistiker Wahrscheinlichkeit ausdrücken dann - mir „Die Chance auf den n - ten Versuch zu verlieren , ist ⅙“ sagen ist es Konstante - ob n 1 oder 100.
Rhialto
3
Warum wurde dieser Titel nicht "Russian Roulette, Reloaded" genannt?
Hand-E-Food
1
@ user2956063: Ihre Wahrscheinlichkeiten sind abhängig . P (bei Schuss 2 verlieren) = ⅙, aber P (bei Schuss 2 verlieren | bei Schuss 1 nicht verlieren) = ⅕. Außerdem nist (implizit, das gebe ich dir) auf [1,6] begrenzt, also sind 100 aus.
Tim Pederick

Antworten:

3

Pyth, 23 Bytes

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

Ganz einfach. Eine zufällige Anzahl von Iterationen von 0 bis 5 zeigt einen Klick an und fordert eine Eingabezeile an, gefolgt von einem Knall am Ende.

isaacg
quelle
1
Verdammt, Pyth!
Cyoce
+3 Bytes: Der letzte String sollte sein *BANG!*, nichtBANG
Ayane
14

Ruby, 51 Bytes

[*['*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.

oder

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

Ungolfing ging für die Leser. Gar nicht so schwer

  • Nochmals ein großes Lob an Martin, diesmal für einen Trick mit $><<als putsErsatz.
  • Gibt keine Zeilenumbrüche aus, aber das war nicht erforderlich.
  • Je kürzer, desto einfacher. Der Kern des erforderlichen Verhaltens besteht darin, 0-5 Klicks auszuführen und dann zu feuern. Zu diesem Zweck werden die Ausgänge innerhalb des Arrays angesammelt.
  • 2 weitere Bytes kann abgeschabt werden , wenn Ausgänge mag in "*click*"Ordnung sind (was erforderlich ist , ist am Ende gedruckt), durch Ersatz $><<mit . Ich war mir nicht sicher, ob dies den Regeln entsprechen würde.

68 64 Bytes

(Ein anderer Ansatz)

[*0..5].shuffle.find{|x|gets;x<1||puts('*click*')};puts'*BANG!*'

Ich habe nicht viel über den Algorithmus nachgedacht (er kann möglicherweise noch kompakter sein, aber nicht so klar), aber das Modell darin gefällt mir wirklich gut:

  • Ein Array emuliert ein Fass, dessen Elemente der Inhalt der Kammern sind. Da nur ein Element eine Kugel ist, ist es äquivalent, sie zu drehen und zu mischen.
  • 0ist eine Kugel. Andere Nummern sind es nicht.
  • findfindet einen ersten Rückgabewert, für den der Block weder falsenoch ist nil.
  • ||-Ausdruck wird implizit aus dem Block zurückgegeben. Es ist ein Kurzschluss: Es gibt seinen ersten Operanden zurück (es sei denn, es ist niloder false) oder einen zweiten (ansonsten). Also gibt es entweder true(wenn x<1oder, klarer aber länger x == 0) oder den Rückgabewert von puts, während ...
  • putskehrt immer zurück nil. Ja.
  • getsfordert Eingabe an. Es Enterreicht aus, nur zu schlagen .
  • Ctrl+ Cbeendet das Programm
D-Seite
quelle
Durchgestrichen 64 ist normal 64?
Cyoce
@Cyoce ähm ... ja. Sollte wahrscheinlich sein. Es wurde durch den obigen Eintrag ersetzt, aber es basiert auf einer anderen Idee, also habe ich sie durchgestrichen gelassen.
D-Seite
Es war ein Wortspiel dazu
Cyoce
@Cyoce oh, verzeihung, erster Beitrag und all das, nicht bewusst von der lokalen Überlieferung :)
D-Seite
9

JavaScript, 64 Byte

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

Erläuterung

Um den Abzug zu betätigen, geben Sie einen beliebigen Text in die Eingabeaufforderung ein. Geben Sie nichts ein oder klicken Sie auf Abbrechen, um den Vorgang zu beenden.

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
  )
user81655
quelle
"*Bang!*"ist nicht größer als 7. NaN
Ist
@Bergi Das stimmt. Ich habe die Erklärung umformuliert, um sie etwas klarer zu machen.
user81655
6
@Bergi nur in Javascript macht diese Aussage fast Sinn.
MikeTheLiar
7

Lua, 82 75 Bytes

Ziemlich lang, aber in lua steckt viel Verbose.

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

LabVIEW, 46 LabVIEW-Grundelemente

Erstellt ein Array aus 0 und 1, wartet in einer Schleife auf Klicks und gibt den String aus. Es sagt zunächst BANG, weil ich vergessen habe, den Indikator vor dem Starten zurückzusetzen.

Beachten Sie auch, dass dies ein GIF ist. Wenn es nicht für Sie abgespielt / geladen wird, öffnen Sie die Seite erneut.

Eumel
quelle
Ich sehe nicht, wo du die Ausgabe von machst, "*click*"falls die Waffe nicht geschossen hat. Auch gibt es aus "bang"oder "*BANG!*"?
Katenkyo
Dies sollte ein GIF sein, aber für mich spielt es nicht, das könnte das Problem sein. Und ja, es macht nur Spaß, das habe ich nicht richtig gelesen. Ich ändere das in einer Sekunde
Eumel
dumm, dass ich vergessen habe, die Zeichenfolge erneut zu initialisieren, um sie vor dem Start zu leeren. Deshalb wird BANG am Anfang angezeigt ...
Eumel,
Kein Problem, ich habe das GIF jetzt gesehen, sieht so aus, als ob es ziemlich gut funktioniert :)
Katenkyo
5

Pyth, 31 30 28 Bytes

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

Mit ziemlicher Sicherheit kann verbessert werden. Geben Sie eine beliebige Zahl ein, um den Auslöser zu betätigen, und eine leere Zahl, um den Vorgang vorzeitig zu beenden (mit einem Fehler).

Erläuterung:

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
Türknauf
quelle
Dein erstes ist eigentlich kürzer, du brauchst das Nachziehen nicht ".
FryAmTheEggman
@FryAmTheEggman Oh, richtig, das habe ich vergessen. Vielen Dank!
Türklinke
Außerdem ist mir gerade etwas Dummes aufgefallen, FN<any>das noch völlig identisch ist mit V<any>, das man wohl ändern sollte, um neue Golfer nicht zu verwirren ...: P
FryAmTheEggman
1
Sie können die Zeichen einfach entfernen .?. Es besteht keine Notwendigkeit für eine else.
Jakube
@FryAmTheEggman verwirrende Leute ist fantastisch. Es kann erstaunlich sein, die Peelings herauszufiltern .
Cyoce
5

Im Ernst, 27 25 Bytes

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

Keine Online-Verknüpfung, da keine Eingabeaufforderung mit Pipe-Eingaben möglich ist. Das Programm kann CTRL-C'D zu jederzeit sein kneifen beenden.

Erläuterung:

"*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
Mego
quelle
4

PHP, 52 Bytes

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

Erfordert die -FBefehlszeilenoption, die als drei gezählt wird. Der Abzug wird durch Drücken von betätigt Enter.

Da -Fdas Skript buchstäblich für jede Eingabe erneut ausgeführt wird (ich verstehe Sie nicht) dieund dergleichen nicht tatsächlich beendet wird, beenden wir es stattdessen über einen unterdrückten Laufzeitfehler @\n.


Beispielnutzung

$ php -F primo-roulette.php

*click*
*click*
*BANG!*
$
primo
quelle
4

Perl 5, 43 Bytes

Laufen Sie mit perl -p. Stabile Geschossvariante - dh die Geschossposition wird nur einmal von Anfang an festgelegt.

$i//=0|rand 6;$_=$i--?'*click*':die'*BANG*'
Oleg V. Volkov
quelle
Nett! Ich würde den Header in "Perl 5.10+" ändern, da Sie verwenden //=. Vergessen Sie auch nicht, in Ihrer Punktzahl zu zählen-p .
ThisSuitIsBlackNot
4

C 110 74 72 Bytes

Vielen Dank an Dennis für das Entfernen der Includes und viel weniger Bytes.

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!*");
}
Rainer P.
quelle
3

Candy , 36 Bytes

Ungefähr die Hälfte des Programms besteht aus dem auszudruckenden Text :(

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

lange Form:

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
Dale Johnson
quelle
3

Python 3, 95 Bytes

Auch mein erster Golfversuch, ebenfalls in Python 3. Ich schwöre Bruce und ich bin nicht die gleiche Person.

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

Generieren Sie eine Zufallszahl zwischen 0 und einschließlich 5, drucken Sie so oft klicken , und drucken Sie dann Knall . Drücken Sie die Eingabetaste, um den Abzug zu betätigen.

Steve Eckert
quelle
Nach dem Beispiel von Bruce können Sie mitfrom random import*
wnnmaw
Wenn ich nicht noch etwas vermisse, ist es ein Byte Ersparnis. Aber ich werde es nehmen! Vielen Dank!
Steve Eckert
Netter Versuch, ich habe deine Lösung als Inspiration für meine Python 2-Lösung genommen ^^
basile-henry
3

PlatyPar , 26 25 Bytes

6#?;wT"*click*"O;"*BANG!*

Erläuterung:

6#?;                        ## random integer [0,6)
    w           ;           ## while stack.last
     T                      ## stack.last--
      "*click*"O            ## alert "*click*"
                 "*BANG!*   ## alert "*BANG!*"

Probieren Sie es online !

Cyoce
quelle
2

Emacs Lisp, 94 89 Bytes

(set'b(%(random)6))(dotimes(a(+ b 1))(read-string"")(message(if(eq a b)"BANG""*click*")))

Ungolfed:

(set 'b (% (random) 6))
(dotimes (a (+ b 1))
  (read-string"")
  (message (if (eq a b) "BANG" "*click*")))
Lord Yuuma
quelle
2

R 86 80 77 Bytes

Wie üblich, hat R fantastische Funktionen zum Codieren von Golfspielen, aber looooooong Funktionsnamen.

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

Python 2, 108 104 102 100 98 Bytes

Mein erster Golfversuch:

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

Vielleicht sollte ich hinzufügen, dass das Programm nicht korrekt beendet wird, wenn Sie verlieren, sondern nur eine Ausnahme auslöst (was zur Beendigung führt):

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
ბიმო
quelle
Willkommen bei Programming Puzzles & Code Golf! Wenn Sie eine Code Golf Antwort posten, geben Sie bitte den Namen der Sprache und die Anzahl der Bytes an (ich habe sie hier für Sie bearbeitet). Vielen Dank!
ProgramFOX
Ja, vielen Dank! Ich habe tatsächlich versucht, dieses Problem zu beheben, konnte es aber nicht richtig bearbeiten, bevor Sie es getan haben.
16.
Ich bekomme deine Byteanzahl als 112, was hast du benutzt?
wnnmaw
Sie können auch 2 Bytes sparen, indem Sie tuna=shuffle([1,0,0,0,0,0])
wnnmaw
1
Meines Wissens ändert shuffle die zugrunde liegende Datenstruktur und gibt nichts zurück. Ich habe es trotzdem versucht, danke. Die Überschrift (Sprache und Anzahl der Bytes) wurde von ProgramFOX geschrieben. Aber wenn ich es benutze, wchabe ich zu viel davon, also ist es richtig. Wie zählt ihr?
16.
2

Perl 5, 40 Bytes

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

Ohne Befehlszeilenoptionen ausführen, wird der Auslöser durch Drücken von gedrückt Enter.

primo
quelle
2

Python, 81 Bytes

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

inspiriert von den Ruby (51) - und Python-Lösungen

Lars
quelle
1

Common Lisp, 109

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

Nicht sehr wettbewerbsfähig, aber ich mag Zirkellisten:

(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*")))
Core-Dump
quelle
1

Perl 5, 43 Bytes

42 Bytes + -pBefehlszeilenoption. enterZum Auslösen einfach drücken .

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

Vielen Dank an Dom Hastings für seine Hilfe! Die ursprüngliche Antwort war 67 Bytes:

$i++;$a=$i>=int(rand(6));print$_=$a?'*BANG!*':'*click*';last if($a)
Codefun64
quelle
Tatsächlich bestand das Problem darin, -pdass es beendet wurde, bevor die letzte printAnweisung aufgerufen wurde, nicht sicher warum. Ich habe es versucht. Ansonsten tolle Vorschläge, danke! Mein Wissen wächst weiter ...
Codefun64
@DomHastings Leider hat der 0|Trick auch aus irgendeinem Grund nicht wie erwartet funktioniert, aber ich habe ein paar Bytes davon entfernt, die print-Anweisung und die letzte Anweisung, wie Sie vorgeschlagen haben. Wie sieht es jetzt aus?
Codefun64
@DomHastings Verdammt, du bist gut. Ich empfehle dies als Ihre eigene Antwort, da Sie definitiv ein kleineres Programm als ich geschrieben haben (Sie haben 40 Bytes im Vergleich zu meinen ursprünglichen 67!)
Codefun64
Ich schätze die Erklärung! Immer froh, mehr von meiner Lieblingsskriptsprache zu lernen! Ich habe noch nie etwas über das Prefex-Inkrementieren gewusst, das ist ziemlich großartig. Danke :)
Codefun64
Gern geschehen, froh geholfen zu haben!
Dom Hastings
1

MATL , 41 Bytes

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

Um den Auslöser zu betätigen, geben Sie eine nicht leere Zeichenfolge ein (z. B. 'try' ) .

Geben Sie zum Beenden eine leere Zeichenfolge ein

Beispiele

In diesem Fall wurde der Abzug einmal gedrückt und ... Pech gehabt:

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

In diesem Fall stoppte der Benutzer nach zwei glücklichen Zügen (notiere die letzte leere Eingabe):

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

Erläuterung

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
Luis Mendo
quelle
1

Perl 6 ,  58    53 Bytes

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

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

Drücken Sie die Eingabetaste, um den Abzug zu betätigen, oder Strg + C, um den Abzug zu betätigen.

Brad Gilbert b2gills
quelle
1

Python 2, 88 84 Bytes

Diese Lösung ist von den bereits gegebenen Python 3-Lösungen inspiriert. Ich habe Python 2 gewählt, um die Druckerklammer zu entfernen, obwohl dies das Verhalten von input () verändert.

import time
for i in[0]*int(time.time()%6)+[1]:input();print("*click*","*BANG!*")[i]
  • Ich benutze Modulo der Zeit als Zufallsfunktion (gut genug für russisches Roulette)
  • Die Spielereingabe sollte "i" und dann "Enter" sein (andernfalls wird durch input () ein Fehler ausgelöst). Dieser Trick beruht auf der Tatsache, dass die Eingabe "was auch immer" sein kann.
Basilikum-Henry
quelle
1

Rubin, 45 + 1 = 46

Nicht so schlau wie die D-Seite , aber etwas kürzer.

pFühren Sie mit dem Befehlszeilenflag aus

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

Der Benutzer kann mit Return den Abzug betätigen und mit Control-C gehen. pBewirkt, dass das Programm in einer Schleife abläuft, Zeilen aus STDIN liest und ausgibt $_. Jedes Mal, wenn es ausgeführt wird, wird es inkrementiert$. . Im ersten Durchgang wird also eine zufällige positive Ganzzahl kleiner als 6, dann 5, dann 4 usw. ausgewählt. Bei der ersten 0 geben wir manuell aus und beenden, bis dahin geben wir implizit aus.

(Und jetzt bemerke ich, dass es bereits ein sehr ähnliches Perl gibt. Na ja.)

Histokrat
quelle
1

Perl 5, 69 51 49 Bytes

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

Es gibt wahrscheinlich mehr Golfpotential, ich werde das untersuchen.

Änderungen:

  • 8 Bytes durch Entfernen $lund einige Semikolons und 10 Bytes durch Ändern <STDIN>in gespeichert<>
  • 2 Bytes dank Oleg V. Volkov gespeichert
ASCIIThenANSI
quelle
1
49:map{<>;print"*click*"}1..rand 6;<>;print"*BANG!*"
Oleg V. Volkov
@ OlegV.Volkov Danke! Ich werde es jetzt bearbeiten.
ASCIIThenANSI
0

VBA, 126 Bytes

Golfversion für minimale Bytes

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

Unterhaltsame Version, die die Schaltflächen klarer macht und die Akzeptanz der Benutzer erhöht.

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

Ein bisschen Spaß mit benutzerdefinierten Formularen und Sie könnten ein hübsches Slick-Spiel in VBA erstellen.

JimmyJazzx
quelle
0

APL, 39/65 Bytes

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

Ziemlich einfache Antwort.

Oberon
quelle
Was bedeuten die zwei Byte-Zählungen?
Mego
0

C 180 Bytes

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

Mein erster Versuch beim Codegolf, es gibt wahrscheinlich viel Raum für Verbesserungen :)

Ryan Fitzpatrick
quelle
0

Julia, 71 Bytes

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

Drücken Sie Enterzum Auslösen oder Ctrl+ Czum Beenden. Letzteres endet mit einem 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
Alex A.
quelle
0

Lua, 73 Bytes

q=io.read q()for i=2,math.random(6)do print"*click*"q()end print"*BANG!*"
Oleg V. Volkov
quelle