# coding:utf-8
import random
import collections
class CardSet:
NORMAL_ITEMS = ["N", "N", "N", "N", "R", "R", "R", "SR", "SR", "UR"]
BONUS_ITEMS = ["SR", "SR", "SR", "SR", "SR", "SR", "SR", "SR", "SR", "UR"]
PRICES = [200, 210, 220, 230]
def __init__(self):
self.shuffle()
def set_normalslot(self):
r = random.randrange(10)
return CardSet.NORMAL_ITEMS[r]
def set_bonusslot(self):
r = random.randrange(10)
return CardSet.BONUS_ITEMS[r]
def shuffle(self):
self.cardset = [self.set_normalslot(), self.set_normalslot(), self.set_normalslot(), self.set_bonusslot()]
random.shuffle(self.cardset)
self.next_slot = 0
def get_nextprice(self):
return CardSet.PRICES[self.next_slot]
def open(self):
price = self.get_nextprice()
result = self.cardset[self.next_slot]
self.next_slot += 1
if self.next_slot == 4:
self.shuffle()
return price, result
def touch_カエデのおっぱい(wallet, shuffling):
# 財布が空になるまでめくる
cardset = CardSet()
results = []
while wallet >= cardset.get_nextprice():
price, result = cardset.open()
results.append(result)
wallet -= price
if shuffling(result):
cardset.shuffle()
return results
def fullopen_shuffling(result):
# シャッフルしない(全めくり)
return False
def SR_shuffling(result):
# SRを見たらシャッフルする
return result == "SR"
def SRUR_shuffling(result):
# SRかURを見たらシャッフルする
return result == "SR" or result == "UR"
def oneshot_shuffling(result):
# 毎回シャッフルする
return True
def main():
MY_WALLET = 10000000
fullopen_results = touch_カエデのおっぱい(MY_WALLET, fullopen_shuffling)
SR_results = touch_カエデのおっぱい(MY_WALLET, SR_shuffling)
SRUR_results = touch_カエデのおっぱい(MY_WALLET, SRUR_shuffling)
oneshot_results = touch_カエデのおっぱい(MY_WALLET, oneshot_shuffling)
def print_results(results):
dict = {key: val for key, val in collections.Counter(results).items()}
opened = len(results)
print(f"N: {dict['N']}({dict['N'] / opened:.04f}), R: {dict['R']}({dict['R'] / opened:.04f}), SR: {dict['SR']}({dict['SR'] / opened:.04f}), UR: {dict['UR']}({dict['UR'] / opened:.04f}), sum: {opened}")
print()
print("fullopen results:")
print_results(fullopen_results)
print("SRshuffle results:")
print_results(SR_results)
print("SRURshuffle results:")
print_results(SRUR_results)
print("oneshot results:")
print_results(oneshot_results)
if __name__ == "__main__":
main()
IyBjb2Rpbmc6dXRmLTgKCmltcG9ydCByYW5kb20KaW1wb3J0IGNvbGxlY3Rpb25zCgpjbGFzcyBDYXJkU2V0OgogICAgTk9STUFMX0lURU1TID0gWyJOIiwgIk4iLCAiTiIsICJOIiwgIlIiLCAiUiIsICJSIiwgIlNSIiwgIlNSIiwgIlVSIl0KICAgIEJPTlVTX0lURU1TID0gWyJTUiIsICJTUiIsICJTUiIsICJTUiIsICJTUiIsICJTUiIsICJTUiIsICJTUiIsICJTUiIsICJVUiJdCiAgICBQUklDRVMgPSBbMjAwLCAyMTAsIDIyMCwgMjMwXQoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnNodWZmbGUoKQoKICAgIGRlZiBzZXRfbm9ybWFsc2xvdChzZWxmKToKICAgICAgICByID0gcmFuZG9tLnJhbmRyYW5nZSgxMCkKICAgICAgICByZXR1cm4gQ2FyZFNldC5OT1JNQUxfSVRFTVNbcl0KCiAgICBkZWYgc2V0X2JvbnVzc2xvdChzZWxmKToKICAgICAgICByID0gcmFuZG9tLnJhbmRyYW5nZSgxMCkKICAgICAgICByZXR1cm4gQ2FyZFNldC5CT05VU19JVEVNU1tyXQoKICAgIGRlZiBzaHVmZmxlKHNlbGYpOgogICAgICAgIHNlbGYuY2FyZHNldCA9IFtzZWxmLnNldF9ub3JtYWxzbG90KCksIHNlbGYuc2V0X25vcm1hbHNsb3QoKSwgc2VsZi5zZXRfbm9ybWFsc2xvdCgpLCBzZWxmLnNldF9ib251c3Nsb3QoKV0KICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxmLmNhcmRzZXQpCiAgICAgICAgc2VsZi5uZXh0X3Nsb3QgPSAwCgogICAgZGVmIGdldF9uZXh0cHJpY2Uoc2VsZik6CiAgICAgICAgcmV0dXJuIENhcmRTZXQuUFJJQ0VTW3NlbGYubmV4dF9zbG90XQoKICAgIGRlZiBvcGVuKHNlbGYpOgogICAgICAgIHByaWNlID0gc2VsZi5nZXRfbmV4dHByaWNlKCkKICAgICAgICByZXN1bHQgPSBzZWxmLmNhcmRzZXRbc2VsZi5uZXh0X3Nsb3RdCiAgICAgICAgc2VsZi5uZXh0X3Nsb3QgKz0gMQogICAgICAgIGlmIHNlbGYubmV4dF9zbG90ID09IDQ6CiAgICAgICAgICAgIHNlbGYuc2h1ZmZsZSgpCiAgICAgICAgcmV0dXJuIHByaWNlLCByZXN1bHQgCgpkZWYgdG91Y2hf44Kr44Ko44OH44Gu44GK44Gj44Gx44GEKHdhbGxldCwgc2h1ZmZsaW5nKToKICAgICMg6LKh5biD44GM56m644Gr44Gq44KL44G+44Gn44KB44GP44KLCiAgICBjYXJkc2V0ID0gQ2FyZFNldCgpCiAgICByZXN1bHRzID0gW10KICAgIHdoaWxlIHdhbGxldCA+PSBjYXJkc2V0LmdldF9uZXh0cHJpY2UoKToKICAgICAgICBwcmljZSwgcmVzdWx0ID0gY2FyZHNldC5vcGVuKCkKICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpCiAgICAgICAgd2FsbGV0IC09IHByaWNlCiAgICAgICAgaWYgc2h1ZmZsaW5nKHJlc3VsdCk6CiAgICAgICAgICAgIGNhcmRzZXQuc2h1ZmZsZSgpCgogICAgcmV0dXJuIHJlc3VsdHMKCmRlZiBmdWxsb3Blbl9zaHVmZmxpbmcocmVzdWx0KToKICAgICMg44K344Oj44OD44OV44Or44GX44Gq44GE77yI5YWo44KB44GP44KK77yJCiAgICByZXR1cm4gRmFsc2UKCmRlZiBTUl9zaHVmZmxpbmcocmVzdWx0KToKICAgICMgU1LjgpLopovjgZ/jgonjgrfjg6Pjg4Pjg5Xjg6vjgZnjgosKICAgIHJldHVybiByZXN1bHQgPT0gIlNSIgoKZGVmIFNSVVJfc2h1ZmZsaW5nKHJlc3VsdCk6CiAgICAjIFNS44GLVVLjgpLopovjgZ/jgonjgrfjg6Pjg4Pjg5Xjg6vjgZnjgosKICAgIHJldHVybiByZXN1bHQgPT0gIlNSIiBvciByZXN1bHQgPT0gIlVSIgoKZGVmIG9uZXNob3Rfc2h1ZmZsaW5nKHJlc3VsdCk6CiAgICAjIOavjuWbnuOCt+ODo+ODg+ODleODq+OBmeOCiwogICAgcmV0dXJuIFRydWUKCmRlZiBtYWluKCk6CiAgICBNWV9XQUxMRVQgPSAxMDAwMDAwMAoKICAgIGZ1bGxvcGVuX3Jlc3VsdHMgPSB0b3VjaF/jgqvjgqjjg4fjga7jgYrjgaPjgbHjgYQoTVlfV0FMTEVULCBmdWxsb3Blbl9zaHVmZmxpbmcpCiAgICBTUl9yZXN1bHRzID0gdG91Y2hf44Kr44Ko44OH44Gu44GK44Gj44Gx44GEKE1ZX1dBTExFVCwgU1Jfc2h1ZmZsaW5nKQogICAgU1JVUl9yZXN1bHRzID0gdG91Y2hf44Kr44Ko44OH44Gu44GK44Gj44Gx44GEKE1ZX1dBTExFVCwgU1JVUl9zaHVmZmxpbmcpCiAgICBvbmVzaG90X3Jlc3VsdHMgPSB0b3VjaF/jgqvjgqjjg4fjga7jgYrjgaPjgbHjgYQoTVlfV0FMTEVULCBvbmVzaG90X3NodWZmbGluZykKCiAgICBkZWYgcHJpbnRfcmVzdWx0cyhyZXN1bHRzKToKICAgICAgICBkaWN0ID0ge2tleTogdmFsIGZvciBrZXksIHZhbCBpbiBjb2xsZWN0aW9ucy5Db3VudGVyKHJlc3VsdHMpLml0ZW1zKCl9CiAgICAgICAgb3BlbmVkID0gbGVuKHJlc3VsdHMpCiAgICAgICAgcHJpbnQoZiJOOiB7ZGljdFsnTiddfSh7ZGljdFsnTiddIC8gb3BlbmVkOi4wNGZ9KSwgUjoge2RpY3RbJ1InXX0oe2RpY3RbJ1InXSAvIG9wZW5lZDouMDRmfSksIFNSOiB7ZGljdFsnU1InXX0oe2RpY3RbJ1NSJ10gLyBvcGVuZWQ6LjA0Zn0pLCBVUjoge2RpY3RbJ1VSJ119KHtkaWN0WydVUiddIC8gb3BlbmVkOi4wNGZ9KSwgc3VtOiB7b3BlbmVkfSIpCiAgICAgICAgcHJpbnQoKQoKICAgIHByaW50KCJmdWxsb3BlbiByZXN1bHRzOiIpCiAgICBwcmludF9yZXN1bHRzKGZ1bGxvcGVuX3Jlc3VsdHMpIAoKICAgIHByaW50KCJTUnNodWZmbGUgcmVzdWx0czoiKQogICAgcHJpbnRfcmVzdWx0cyhTUl9yZXN1bHRzKQoKICAgIHByaW50KCJTUlVSc2h1ZmZsZSByZXN1bHRzOiIpCiAgICBwcmludF9yZXN1bHRzKFNSVVJfcmVzdWx0cykKCiAgICBwcmludCgib25lc2hvdCByZXN1bHRzOiIpCiAgICBwcmludF9yZXN1bHRzKG9uZXNob3RfcmVzdWx0cykKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCk=
fullopen results:
N: 13760(0.2958), R: 10435(0.2244), SR: 17594(0.3783), UR: 4722(0.1015), sum: 46511
SRshuffle results:
N: 12507(0.2610), R: 9580(0.1999), SR: 21030(0.4388), UR: 4806(0.1003), sum: 47923
SRURshuffle results:
N: 12767(0.2641), R: 9584(0.1983), SR: 21089(0.4363), UR: 4899(0.1013), sum: 48339
oneshot results:
N: 14971(0.2994), R: 11129(0.2226), SR: 18863(0.3773), UR: 5037(0.1007), sum: 50000