Jump to content

Wandler, bitte machs mir (in anydice)


Wandler
 Share

Recommended Posts

Weil offensichtlich öfter die Frage ist: "Wie hoch ist die Wahrscheinlichkeit X wenn Y einen Würfelpool von Z und ein Limit von L hat" auftritt, biete ich hier an für diejenigen die anydice nicht kennen oder selbst nicht darüber trauen das zusammenzustellen und im Forum hier gegenzulinken. Die Frage sollte aber relativ genau formuliert sein, weil natürlich das Limit auf jeder Seite einen Unterschied macht ebenso wieder Würfelpool.

Link to comment
Share on other sites

Da ich mich erst in das Programm einarbeiten müsste, schon mal die Frage aus dem anderen Thread:

 

Die Situation ist folgende:

En Decker mit einem Würfelpool von 15 für die betreffende Probe tritt gegen ein Gerät (kein Host) mit Stufe 4 an.

 

Wie sehen die Erfolgsaussichten des Deckers aus, wenn:

1) Sich das Gerät mit [Gerätestufe]x2 verteidigt, so wie in den offiziellen Regeln vorgesehen.

2) Sich das Gerät mit [Gerätestufe]x2 verteidigt, aber dabei ein Limit in Höhe der Gerätestufe gilt.

 

Danke schonmal für die Mühen.  ^_^

Edited by Sandorian
Link to comment
Share on other sites

Sich das Gerät mit [Gerätestufe]x2 verteidigt, so wie in den offiziellen Regeln vorgesehen

Anydice (Kein Limit auf einer Seite)

output [count {5,6} in 15d6] > [count {5,6} in 8d6] named "vs 8d6"

In Worten: Zähle 5 und 6 in 15d6 und sag mir wie hoch die Chance ist das es häufiger vorkommt als 5 und 6 in 8d6.

Resultat: 79% Erfolgschance

 

Was heißt diese eine Zeile? 

  • output erzwingt die Ausgabe.
  • [count A in B] zählt wie oft die Elemente aus A in B vorkommen.
  • {} ist eine Menge
  • 15d6 sind alle möglichen Resultate wenn man 15 sechseitige Würfel wirfelt. Es sind wirklich alle Resultate, darum ist anydice auch schnell an seinen Grenzen wenn ihr zu große Würfelpools angebt.
  • > ist ein gewöhnliches größer als
  • named "vs 8d6" gibt der Ausgabe einen Namen und ist optional.
Sich das Gerät mit [Gerätestufe]x2 verteidigt, so wie in den offiziellen Regeln vorgesehen

Wie sieht es nun mit Limits für den Hacker aus - eigentlich egal auf welcher Seite. Ein Limit ist leicht selbst zu schreiben, wir brauchen also ein count, dass wenn das Resultat größer ist als das Limit eben nur das Limit zurückgibt:

Anydice 15d6[4] vs 8d6

function: countl VALUES:s in SEQUENCE:s limit by L{
 COUNT: 0
 loop P over {1..#VALUES} {
  COUNT: COUNT + (P@VALUES = SEQUENCE)
 }
 if COUNT > L {result: L}
 result: COUNT
}
LIMIT:4
output [countl {5,6} in 15d6 limit by LIMIT] > [count {5,6} in 8d6] named "15d6[[LIMIT]] vs 8d6"

In Worten: Tu genau das was [count A in B] macht, aber wenn du mehr zählst als L dann tu so als wäre es L.

 

Resultat: 65% Erfolgschance

 

Was macht der Code. Der Anfang ist die 1:1 Version der Funktion count, wie sie auf anydice selbst definiert ist. Mit einer einer Änderung: Wenn COUNT > L dann gibt L zurück. LIMIT:4 weißt der Variable LIMIT eben den Wert 4 zu und kann beliebig geändert werden. [LIMIT] wandelt LIMIT in einen Text um für die Ausgabe, die doppelte Klammern sind damit es danach nach [4] aussieht und nicht nach 4. Wir haben unsere eigene Funktion einfach countl genannt und um den Text "limit by L" erweitert damit wir ein LIMIT übergeben können.

 

Sich das Gerät mit [Gerätestufe]x2 verteidigt, aber dabei ein Limit in Höhe der Gerätestufe gilt

Selber Code wie im letzten Beispiel mit der Änderung:

Anydice 15d6[4] vs 8d6[4]

function: countl VALUES:s in SEQUENCE:s limit by L{
 COUNT: 0
 loop P over {1..#VALUES} {
  COUNT: COUNT + (P@VALUES = SEQUENCE)
 }
 if COUNT > L {result: L}
 result: COUNT
}
LIMIT:4
output [countl {5,6} in 15d6 limit by LIMIT] > [countl {5,6} in 8d6 limit by 4] named "15d6[[LIMIT]] vs 8d6[4]"

In Worten: Vergleiche Erfolge des Hackers (links) mit denen des Geräts (rechts) wenn beide ein Limit haben.

 

Und wie sieht es aus wenn wir uns nun ansehen wollen wie sich die Erfolgswahrscheinlichkeit verändert wenn sich das Limit verändert?

Das geht sehr einfach weil anydice Schleifenaufrufe unterstützt, wir ändern also die letzte Zeile nur auf

Anydice 15d6[4,5,6] vs 8d6[4]

function: countl VALUES:s in SEQUENCE:s limit by L{
 COUNT: 0
 loop P over {1..#VALUES} {
  COUNT: COUNT + (P@VALUES = SEQUENCE)
 }
 if COUNT > L {result: L}
 result: COUNT
}

loop LIMIT over {4..6}{
    output [countl {5,6} in 15d6 limit by LIMIT] > [countl {5,6} in 8d6 limit by 4] named "15d6[[LIMIT]] vs 8d6[4]"
}

In Worten: Tu was wir vorher gemacht haben, aber mach es einmal für LIMIT=4 einmal für LIMIT=5 einmal für LIMIT=6

Resultat: Limit 4: 65% Erfolgschance

Resultat: Limit 5: 81% Erfolgschance

Resultat: Limit 6: 81% Erfolgschance

 

Das gibt uns also eine Ausgabe für LIMIT=4 eine für LIMIT=5 und eine für LIMIT=6. Jetzt kannst du die {4..6} beliebig ändern und dir ansehen wie sich das Limit des Deckers auswirkt.

 

Edit: Habe gerade ein wenig mit dem Texteditor hier gekämpft... Jetzt sollte es passen.

Edited by Wandler
  • Like 3
Link to comment
Share on other sites

Alle Achtung. Schonmal vielen Dank für die Mühe.  ^_^

 

Wenn ich das richtig verstehe, sieht die das Ganze so aus.

Decker: 15W6 gegen Gerät 8W6

 

Keine Limits:

15W6 gegen 8W6 => Erfolgschance für den Decker: 79%

 

Offizielle Regeln:

15W6[4] gegen 8W6 => Erfolgschance: 65%

15W6[5] gegen 8W6 => Erfolgschance: 76%

15W6[6] gegen 8W6 => Erfolgschance: 78%

(Copy und Paste ist doch 'was tolles. ;) )

 

Mit Limit auf der Gegenseite:

15W6[4] gegen 8W6[4] => Erfolgschance: 65%

15W6[5] gegen 8W6[4] => Erfolgschance: 81%

15W6[6] gegen 8W6[4] => Erfolgschance: 81%

 

Das heißt ein Limit auf der Gegenseite würde tatsächlich einen leichten Unterschied bewirken.  ^_^

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...