import random

class SelectionPuzzle():
    """选择题谜题生成器
    
    Args:
        text: 原始字符串(需要 "/" 分割句子, 末尾应有 "/")
        min_denominator: 最小概率倒数(如占所有可生成填空数的 1/7 中的 7, 若期望值小于 1, 则取 1)
    """
    def __init__(self, prefix_text, origin_dict, min_denominator):
        self.text = text
        self.min_denominator = min_denominator
        self.wording = "填空题 - 尚未刷新谜题"
        self.answer = ["填空题 - 尚未刷新谜题"]

    def refresh(self): # 刷新谜题
        placeholder = "___SLASH___" 
        tmp_text = self.text.replace("/", placeholder)
        words = tmp_text.split(placeholder)
        if not words:
            return ""
        words = [word for word in words if word] 
        num_blanks = min(max(1, len(words) // self.min_denominator), len(words)) 
        indices_to_blank = random.sample(range(len(words)), num_blanks)
        indices_to_blank.sort()
        blanked_words = list(words)
        answer = list()
        for index in indices_to_blank:
            blanked_words[index] = "__" * len(words[index])
            answer.append(words[index])
        result = []
        for word in blanked_words:
            result.append(word)
        self.answer = answer
        self.wording = "".join(result)
    
    def __str__(self):
        return f"{self.wording}\n{str(self.answer)}"

# demo
text = """我联合国人民/同兹/决心/: /欲免/后世/再遭/今代人类/两度/身历/惨不堪言/之战祸/.../"""
riddle = BlankPuzzle(text, 3)
print(riddle)
riddle.refresh()
print(riddle)