| |
| |
|
|
| |
| source("R/rectangular_puzzle.R") |
| source("R/puzzle_core_clean.R") |
| source("R/jigsawR_clean.R") |
|
|
| cat("=== jigsawR Clean Implementation Examples ===\n\n") |
| cat("This implementation ensures:\n") |
| cat(" - Reproducible output (same seed = same puzzle)\n") |
| cat(" - No hard-coded adjustments\n") |
| cat(" - Adjacent pieces share exact same edge paths\n") |
| cat(" - Clean separation of concerns\n\n") |
|
|
| |
| cat("Example 1: Simple 2x2 Puzzle\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| puzzle1 <- generate_puzzle( |
| type = "rectangular", |
| grid = c(2, 2), |
| size = c(200, 200), |
| seed = 1234, |
| output = "both", |
| filename_prefix = "example1_simple" |
| ) |
|
|
| cat("Generated with seed:", puzzle1$seed, "\n\n") |
|
|
| |
| cat("Example 2: Colored Individual Pieces\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| puzzle2 <- generate_puzzle( |
| grid = c(3, 3), |
| size = c(300, 300), |
| seed = 5678, |
| output = "individual", |
| colors = c("#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A", "#98D8C8", |
| "#F7DC6F", "#BB8FCE", "#85C1E2", "#F8B739"), |
| filename_prefix = "example2_colored" |
| ) |
|
|
| cat("\n") |
|
|
| |
| cat("Example 3: Puzzle with Gradient Background\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| puzzle3 <- generate_puzzle( |
| grid = c(2, 2), |
| size = c(250, 250), |
| seed = 999, |
| output = "both", |
| background = "gradient", |
| filename_prefix = "example3_gradient" |
| ) |
|
|
| cat("\n") |
|
|
| |
| cat("Example 4: Batch Generation\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| variations <- list( |
| list(name = "easy_4piece", seed = 100, grid = c(2, 2), tabsize = 25), |
| list(name = "medium_9piece", seed = 200, grid = c(3, 3), tabsize = 20), |
| list(name = "harder_16piece", seed = 300, grid = c(4, 4), tabsize = 18), |
| list(name = "small_tabs", seed = 400, grid = c(2, 2), tabsize = 15, jitter = 2), |
| list(name = "large_tabs", seed = 500, grid = c(2, 2), tabsize = 30, jitter = 6) |
| ) |
|
|
| batch_results <- generate_puzzle_batch(variations, base_dir = "output/batch_example") |
|
|
| cat("\n") |
|
|
| |
| cat("Example 5: Validation and Reproducibility\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| |
| puzzle_struct <- generate_puzzle_core(seed = 777, grid = c(2, 2)) |
|
|
| |
| validate_puzzle_fit(puzzle_struct) |
|
|
| |
| cat("\nReproducibility test:\n") |
| test1 <- generate_puzzle(seed = 12345, grid = c(2, 2), save_files = FALSE) |
| test2 <- generate_puzzle(seed = 12345, grid = c(2, 2), save_files = FALSE) |
|
|
| if (identical(test1$svg_complete, test2$svg_complete)) { |
| cat("✓ Same seed produces identical output\n") |
| } else { |
| cat("✗ Reproducibility check failed!\n") |
| } |
|
|
| |
| cat("\nExample 6: Custom Configuration\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| custom_puzzle <- generate_puzzle( |
| type = "rectangular", |
| grid = c(5, 4), |
| size = c(400, 500), |
| seed = 2024, |
| tabsize = 22, |
| jitter = 3, |
| output = "complete", |
| background = "#E8F5E9", |
| filename_prefix = "example6_custom" |
| ) |
|
|
| cat("\n") |
|
|
| |
| cat("Example 7: Programmatic Piece Access\n") |
| cat("-" , rep("-", 40), "\n", sep="") |
|
|
| |
| puzzle <- generate_puzzle_core(seed = 888, grid = c(2, 2), size = c(200, 200)) |
|
|
| |
| cat("Generating piece paths programmatically:\n") |
| for (yi in 0:1) { |
| for (xi in 0:1) { |
| piece_path <- generate_single_piece(xi, yi, puzzle) |
| |
| |
| n_moves <- length(gregexpr("M", piece_path)[[1]]) |
| n_curves <- length(gregexpr("C", piece_path)[[1]]) |
| n_lines <- length(gregexpr("L", piece_path)[[1]]) |
| |
| cat(sprintf(" Piece [%d,%d]: %d moves, %d curves, %d lines\n", |
| xi, yi, n_moves, n_curves, n_lines)) |
| } |
| } |
|
|
| |
| cat("\n=== Summary ===\n") |
| cat("Generated examples demonstrate:\n") |
| cat(" 1. Simple 2x2 puzzle (both modes)\n") |
| cat(" 2. Colored 3x3 individual pieces\n") |
| cat(" 3. Puzzle with gradient background\n") |
| cat(" 4. Batch generation with variations\n") |
| cat(" 5. Validation and reproducibility\n") |
| cat(" 6. Custom configuration (5x4 puzzle)\n") |
| cat(" 7. Programmatic piece access\n") |
| cat("\nAll files saved to output/ directory\n") |
| cat("\nKey principles maintained:\n") |
| cat(" ✓ Deterministic generation (seed-based)\n") |
| cat(" ✓ No hard-coded adjustments\n") |
| cat(" ✓ Clean, modular architecture\n") |
| cat(" ✓ Adjacent pieces share exact edge paths\n") |