reasoning-gym/examples/exercises/algorithmic/caesar_cipher_examples.py
2025-02-09 08:44:54 +00:00

97 lines
No EOL
3.9 KiB
Python

"""Examples of generated problems from the CaesarCipher exercise.
This file demonstrates different types of Caesar cipher problems that can be generated
at various difficulty levels.
"""
from reasoning_gym.curricula.algorithmic.caesar_cipher_curriculum import CaesarCipherCurriculum
from reasoning_gym.exercises.algorithmic.caesar_cipher import CaesarCipherExercise
import random
def main():
# Initialize with fixed seed for reproducibility
curriculum = CaesarCipherCurriculum()
exercise = CaesarCipherExercise()
curriculum.rng = random.Random(42)
print("\n========================================\n")
# Level 0: Basic decryption with short text and small rotation
curriculum.set_attr_level("num_words", 0) # Short text (5 words)
curriculum.set_attr_level("rotation", 0) # Small rotation (1-3)
curriculum.set_attr_level("text_case", 0) # UPPER case only
problem = exercise.generate(curriculum)
print("Level 0 (Basic Decryption):")
print(problem)
print("\n========================================\n")
# Level 1: Medium length text with larger rotation
curriculum.set_attr_level("num_words", 1) # Medium text (10 words)
curriculum.set_attr_level("rotation", 2) # Medium rotation (10-15)
curriculum.set_attr_level("text_case", 1) # lower case only
problem = exercise.generate(curriculum)
print("Level 1 (Medium Length Text):")
print(problem)
print("\n========================================\n")
# Level 2: Long text with mixed case and large rotation
curriculum.set_attr_level("num_words", 2) # Long text (20 words)
curriculum.set_attr_level("rotation", 4) # Large rotation (20-25)
curriculum.set_attr_level("text_case", 2) # Mixed case with preserved capitalization
problem = exercise.generate(curriculum)
print("Level 2 (Complex Text):")
print(problem)
print("\n========================================\n")
# Random Examples with Different Seeds
print("Random Examples (Different Seeds):")
for seed in range(10, 15):
curriculum.rng = random.Random(seed)
# Randomly set curriculum levels
curriculum.set_attr_level("num_words", random.randint(0, 2))
curriculum.set_attr_level("rotation", random.randint(0, 4))
curriculum.set_attr_level("text_case", random.randint(0, 2))
problem = exercise.generate(curriculum)
print(f"\nRandom Example (Seed {seed}):")
print(problem)
print("\n========================================\n")
# Special Cases
print("Special Cases:")
# Case 1: Maximum length with small rotation
for attr in curriculum.attributes: # Reset all attributes
curriculum.set_attr_level(attr, 0)
curriculum.set_attr_level("num_words", 2) # Maximum words (20)
curriculum.set_attr_level("rotation", 0) # Small rotation (1-3)
curriculum.set_attr_level("text_case", 0) # UPPER case
problem = exercise.generate(curriculum)
print("\nLong Text with Small Rotation:")
print(problem)
# Case 2: Short text with maximum rotation
for attr in curriculum.attributes: # Reset all attributes
curriculum.set_attr_level(attr, 0)
curriculum.set_attr_level("num_words", 0) # Minimum words (5)
curriculum.set_attr_level("rotation", 4) # Maximum rotation (20-25)
curriculum.set_attr_level("text_case", 2) # Mixed case
problem = exercise.generate(curriculum)
print("\nShort Text with Large Rotation:")
print(problem)
# Case 3: Medium text with mixed case
for attr in curriculum.attributes: # Reset all attributes
curriculum.set_attr_level(attr, 0)
curriculum.set_attr_level("num_words", 1) # Medium length (10 words)
curriculum.set_attr_level("rotation", 2) # Medium rotation (10-15)
curriculum.set_attr_level("text_case", 2) # Mixed case
problem = exercise.generate(curriculum)
print("\nMedium Text with Mixed Case:")
print(problem)
if __name__ == "__main__":
main()