crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

commit 1bf911eaa497b320e3e70d26816ee47088819e5f
parent e5601ee15a3db23b787d9c6a9ea74aa455f7e02b
Author: Michael Camilleri <[email protected]>
Date:   Fri, 22 May 2026 08:28:01 +0900

Browse bundled puzzles by named bundle

The new-game picker's 'Bundled' tab listed every packaged puzzle in one flat
list. It is now 'Bundles': it lists the puzzle bundles shipped under Puzzles/ —
one directory per bundle — and tapping a bundle drills into its puzzles, each
row showing the puzzle title above its publisher.

Puzzles/ now holds one subdirectory per bundle (e.g. 'Crossmate Starter')
alongside the Debug fixtures directory, replacing the flat Puzzles/Bundled.
PuzzleCatalog gains bundles(), which enumerates those subdirectories — skipping
Debug and any with no .xd files — and Entry carries the parsed publisher. Debug
is excluded from Bundles and still surfaces under the debug-gated Debug tab.

bundle-puzzles.sh is reworked to produce these bundles: it now takes a bundle
id and a title prefix, writes the picked puzzles into a per-bundle directory
under Puzzles/<title prefix>/, names them <bundle-id>-NNNN.xd, and rewrites
each puzzle's frontmatter.

Co-Authored-By: Claude Opus 4.7 <[email protected]>

Diffstat:
MCrossmate/Models/PuzzleCatalog.swift | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
MCrossmate/Models/PuzzleSource.swift | 4++--
MCrossmate/Views/BundledBrowseView.swift | 36++++++++++++++++++++++++++----------
MCrossmate/Views/NewGameSheet.swift | 15+++++++++------
DPuzzles/Bundled/Crossmate-0001.xd | 103-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0002.xd | 105-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0003.xd | 103-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0004.xd | 105-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0005.xd | 105-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0006.xd | 105-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0007.xd | 105-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0008.xd | 103-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0009.xd | 103-------------------------------------------------------------------------------
DPuzzles/Bundled/Crossmate-0010.xd | 105-------------------------------------------------------------------------------
APuzzles/Crossmate Starter/cm-starter-0001.xd | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0002.xd | 101+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0003.xd | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0004.xd | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0005.xd | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0006.xd | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0007.xd | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0008.xd | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0009.xd | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
APuzzles/Crossmate Starter/cm-starter-0010.xd | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MScripts/bundle-puzzles.sh | 44+++++++++++++++++++++++++-------------------
MTests/Unit/PuzzleCatalogTests.swift | 42+++++++++++++++++++++++++++---------------
26 files changed, 1194 insertions(+), 1104 deletions(-)

diff --git a/Crossmate/Models/PuzzleCatalog.swift b/Crossmate/Models/PuzzleCatalog.swift @@ -4,25 +4,59 @@ import Foundation /// to list available puzzles. struct PuzzleCatalog { struct Entry: Identifiable { - let id: String // resource name (e.g. "sample") - let title: String // parsed from the XD metadata - let source: String // raw XD text - let cmVersion: Int // Crossmate version parser version + let id: String // resource name (e.g. "sample") + let title: String // parsed from the XD metadata + let publisher: String? // parsed from the XD metadata + let source: String // raw XD text + let cmVersion: Int // Crossmate version parser version } - static func bundledPuzzles() -> [Entry] { - puzzles(in: "Puzzles/Bundled") + /// A directory of bundled puzzles under `Puzzles/`, e.g. "Crossmate Starter". + struct PuzzleBundle: Identifiable { + let id: String // directory name, also used as the display name + let puzzles: [Entry] + + var name: String { id } + } + + /// Name of the `Puzzles/` subdirectory reserved for debug-only fixtures. + private static let debugDirectoryName = "Debug" + + /// The puzzle bundles shipped with the app: every subdirectory of `Puzzles/` + /// except `Debug`. Directories with no `.xd` files are skipped. + static func bundles() -> [PuzzleBundle] { + guard let puzzlesURL = Bundle.main.resourceURL? + .appendingPathComponent("Puzzles", isDirectory: true) else { + return [] + } + let contents = (try? FileManager.default.contentsOfDirectory( + at: puzzlesURL, + includingPropertiesForKeys: [.isDirectoryKey] + )) ?? [] + + return contents.compactMap { url -> PuzzleBundle? in + guard (try? url.resourceValues(forKeys: [.isDirectoryKey]))?.isDirectory == true, + url.lastPathComponent != debugDirectoryName else { + return nil + } + let entries = puzzles(in: "Puzzles/\(url.lastPathComponent)") + guard !entries.isEmpty else { + return nil + } + return PuzzleBundle(id: url.lastPathComponent, puzzles: entries) + } + .sorted { $0.id.localizedStandardCompare($1.id) == .orderedAscending } } static func debugPuzzles() -> [Entry] { - puzzles(in: "Puzzles/Debug") + puzzles(in: "Puzzles/\(debugDirectoryName)") } static func source( matchingResourceID resourceID: String?, title: String? ) -> Entry? { - let entries = bundledPuzzles() + debugPuzzles() + let entries = allPuzzles() if let resourceID { return entries.first { $0.id == resourceID } @@ -34,7 +68,12 @@ struct PuzzleCatalog { } static func resourceID(matching source: String) -> String? { - (bundledPuzzles() + debugPuzzles()).first { $0.source == source }?.id + allPuzzles().first { $0.source == source }?.id + } + + /// Every cataloged puzzle — bundled and debug — flattened for lookup. + private static func allPuzzles() -> [Entry] { + bundles().flatMap(\.puzzles) + debugPuzzles() } private static func puzzles(in subdirectory: String) -> [Entry] { @@ -53,7 +92,13 @@ struct PuzzleCatalog { let xd = try? XD.parse(source) else { return nil } - return Entry(id: name, title: xd.title ?? name, source: source, cmVersion: xd.cmVersion) + return Entry( + id: name, + title: xd.title ?? name, + publisher: xd.publisher, + source: source, + cmVersion: xd.cmVersion + ) } .sorted { $0.id.localizedStandardCompare($1.id) == .orderedAscending } } diff --git a/Crossmate/Models/PuzzleSource.swift b/Crossmate/Models/PuzzleSource.swift @@ -1,7 +1,7 @@ import Foundation enum PuzzleSource: String, CaseIterable, Identifiable { - case bundled + case bundles case debug case imported case nyt @@ -10,7 +10,7 @@ enum PuzzleSource: String, CaseIterable, Identifiable { var title: String { switch self { - case .bundled: "Bundled" + case .bundles: "Bundles" case .debug: "Debug" case .imported: "Imported" case .nyt: "NYT" diff --git a/Crossmate/Views/BundledBrowseView.swift b/Crossmate/Views/BundledBrowseView.swift @@ -3,17 +3,16 @@ import SwiftUI struct BundledBrowseView: View { let onSelected: (String) -> Void - private var puzzles: [PuzzleCatalog.Entry] { - PuzzleCatalog.bundledPuzzles() + private var bundles: [PuzzleCatalog.PuzzleBundle] { + PuzzleCatalog.bundles() } var body: some View { - List(puzzles) { entry in - Button { - onSelected(entry.source) - } label: { - Text(entry.title) - .foregroundStyle(.primary) + List(bundles) { bundle in + NavigationLink(bundle.name) { + PuzzleListView(puzzles: bundle.puzzles, onSelected: onSelected) + .navigationTitle(bundle.name) + .navigationBarTitleDisplayMode(.inline) } } } @@ -27,12 +26,29 @@ struct DebugBrowseView: View { } var body: some View { + PuzzleListView(puzzles: puzzles, onSelected: onSelected) + } +} + +/// A list of individual puzzles, each showing its title above its publisher. +private struct PuzzleListView: View { + let puzzles: [PuzzleCatalog.Entry] + let onSelected: (String) -> Void + + var body: some View { List(puzzles) { entry in Button { onSelected(entry.source) } label: { - Text(entry.title) - .foregroundStyle(.primary) + VStack(alignment: .leading, spacing: 2) { + Text(entry.title) + .foregroundStyle(.primary) + if let publisher = entry.publisher, !publisher.isEmpty { + Text(publisher) + .font(.subheadline) + .foregroundStyle(.secondary) + } + } } } } diff --git a/Crossmate/Views/NewGameSheet.swift b/Crossmate/Views/NewGameSheet.swift @@ -5,14 +5,14 @@ struct NewGameSheet: View { @Environment(\.dismiss) private var dismiss @Environment(NYTAuthService.self) private var nytAuth - @AppStorage("lastPuzzleSource") private var storedSource: PuzzleSource = .bundled + @AppStorage("lastPuzzleSource") private var storedSourceRaw = PuzzleSource.bundles.rawValue @AppStorage("debugMode") private var debugMode = false - @State private var selection: PuzzleSource = .bundled + @State private var selection: PuzzleSource = .bundles @State private var duplicateSource: String? @State private var createError: String? private var availableSources: [PuzzleSource] { - var sources: [PuzzleSource] = [.bundled] + var sources: [PuzzleSource] = [.bundles] if debugMode { sources.append(.debug) } @@ -36,7 +36,7 @@ struct NewGameSheet: View { Group { switch selection { - case .bundled: + case .bundles: BundledBrowseView(onSelected: handleSelected) case .debug: DebugBrowseView(onSelected: handleSelected) @@ -56,10 +56,13 @@ struct NewGameSheet: View { } } .onAppear { - selection = availableSources.contains(storedSource) ? storedSource : .bundled + // Fall back to .bundles if the stored raw value is missing or no + // longer maps to a case (e.g. the renamed "bundled" -> "bundles"). + let stored = PuzzleSource(rawValue: storedSourceRaw) ?? .bundles + selection = availableSources.contains(stored) ? stored : .bundles } .onChange(of: selection) { _, newValue in - storedSource = newValue + storedSourceRaw = newValue.rawValue } .alert( "Puzzle Already in Library", diff --git a/Puzzles/Bundled/Crossmate-0001.xd b/Puzzles/Bundled/Crossmate-0001.xd @@ -1,103 +0,0 @@ -Title: Crossmake #1 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 05/15/2013 - - -OPTS#ISAAC#THOR -SOAP#ROLLO#REDO -HOMEREPAIR#ARID -ARENA###CONFESS -###SIDEBENEFIT# -AIREDALE#ARI### -DOER#RANK#TCELL -INN#INTEARS#RIO -TATAR#HASH#DIES -###VEE#TEENIEST -#SPANISHMAIN### -DEAREST###LEAPT -ANTI#NEWSLETTER -ROTC#ERIKA#TOTE -ERIE#RETAG#EPEE - - -A1. Chooses, with "for" ~ OPTS -A5. Newton with a famous apple story ~ ISAAC -A10. Hammer-wielding Avenger ~ THOR -A14. Sudsy bar ~ SOAP -A15. Caramel candy brand ~ ROLLO -A16. Second attempt ~ REDO -A17. Weekend project involving tools and paint, maybe ~ HOMEREPAIR -A19. Desertlike ~ ARID -A20. Stadium setting ~ ARENA -A21. Come clean ~ CONFESS -A23. Extra perk ~ SIDEBENEFIT -A27. Wiry-coated terrier ~ AIREDALE -A30. "Entourage" agent Gold ~ ARI -A31. Action-oriented sort ~ DOER -A32. Position in a hierarchy ~ RANK -A34. Immune-system lymphocyte ~ TCELL -A38. Roadside lodging ~ INN -A39. Crying ~ INTEARS -A41. City with Copacabana Beach ~ RIO -A42. Member of a Turkic-speaking people ~ TATAR -A44. Breakfast order with corned beef, perhaps ~ HASH -A45. Stops living ~ DIES -A46. Letter after u ~ VEE -A48. Most like a young adolescent ~ TEENIEST -A50. Old pirate waters of the Caribbean ~ SPANISHMAIN -A53. Most beloved ~ DEAREST -A54. Jumped ~ LEAPT -A58. Opposed to ~ ANTI -A59. Email update from a club or school ~ NEWSLETTER -A63. Campus officer-training program ~ ROTC -A64. Actress Christensen of "Parenthood" ~ ERIKA -A65. Carryall bag ~ TOTE -A66. Great Lake bordering Ohio ~ ERIE -A67. Put a new label on ~ RETAG -A68. Fencing sword ~ EPEE - -D1. Workplace-safety agcy. ~ OSHA -D2. Low on funds ~ POOR -D3. Domesticate ~ TAME -D4. "The Faerie Queene" poet Edmund ~ SPENSER -D5. Anger ~ IRE -D6. Token concession ~ SOP -D7. ___ carte ~ ALA -D8. Girl who follows a rabbit in a classic story ~ ALICE -D9. Beer often served with lime ~ CORONA -D10. Rush-hour headache ~ TRAFFIC -D11. Start of a roll-call response ~ HEREI -D12. Writer of lyric poems ~ ODIST -D13. Fishing poles ~ RODS -D18. Surprise police action ~ RAID -D22. "Drat!" ~ NERTS -D24. Mild oath ~ DARN -D25. Israeli resort on the Gulf of Aqaba ~ ELATH -D26. Under ~ BENEATH -D27. Mine entrance ~ ADIT -D28. Scottish island with an ancient abbey ~ IONA -D29. Tenant's monthly payment ~ RENT -D33. Casey who counted down the hits ~ KASEM -D35. Canal city of Pennsylvania ~ ERIE -D36. Untruths ~ LIES -D37. Unable to find the way ~ LOST -D39. Adler of Sherlock Holmes stories ~ IRENE -D40. Flightless bird of South America ~ RHEA -D43. Greed ~ AVARICE -D45. Small eating area off a kitchen ~ DINETTE -D47. Former Disney chief Michael ~ EISNER -D49. River through Cairo ~ NILE -D50. Mister, in Madrid ~ SENOR -D51. Singer LaBelle ~ PATTI -D52. Cubic meter ~ STERE -D53. Challenge to take a risk ~ DARE -D55. On top of ~ ATOP -D56. Townshend of the Who ~ PETE -D57. Maple or pine ~ TREE -D60. Clever humor ~ WIT -D61. Jamaican music genre ~ SKA -D62. Fall behind ~ LAG diff --git a/Puzzles/Bundled/Crossmate-0002.xd b/Puzzles/Bundled/Crossmate-0002.xd @@ -1,105 +0,0 @@ -Title: Crossmake #2 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 07/27/2010 - - -ADES#TSAR#SEEMS -LINT#ANNO#AERIE -MANOAMANO#FLARE -ONEIL#PASTA#### -SNACKS##TORONTO -TED#ALBA#TINEAR -###SLOANE##ERNE -#UPRIGHTPIANOS# -GRIT##SEENTO### -SALAAM#SECT#BOA -ALLSTAR##HIKERS -####TROTS#RAGES -RADII#WHITEROSE -ICALL#EERO#ANTS -GENOA#ROSE#TEES - - -A1. Fruity summer coolers ~ ADES -A5. Old Russian ruler ~ TSAR -A9. Gives the impression ~ SEEMS -A14. Dryer-screen buildup ~ LINT -A15. Year, in a Latin phrase ~ ANNO -A16. Eagle's lofty home ~ AERIE -A17. Face-to-face, in a duel ~ MANOAMANO -A19. Emergency road signal ~ FLARE -A20. Writer Eugene or basketball great Shaquille ~ ONEIL -A21. Penne or linguine ~ PASTA -A23. Between-meal bites ~ SNACKS -A25. Canada's largest city ~ TORONTO -A30. "Lasso" of Apple TV+ ~ TED -A31. Jessica of "Fantastic Four" ~ ALBA -A34. Like a dog's cropped ears, sometimes ~ TINEAR -A35. "Ferris Bueller" girlfriend ~ SLOANE -A37. Sea eagle ~ ERNE -A38. Instruments in many school music rooms ~ UPRIGHTPIANOS -A42. Perseverance ~ GRIT -A43. Witnessed by ~ SEENTO -A44. Peaceful greeting ~ SALAAM -A47. Small religious group ~ SECT -A48. Feathered neckwear ~ BOA -A51. Top player in a league ~ ALLSTAR -A53. Trail followers ~ HIKERS -A55. Moves at an easy horse gait ~ TROTS -A58. Throws a fit ~ RAGES -A59. Lines from a circle's center ~ RADII -A63. Anti-Nazi student group in 1940s Munich ~ WHITEROSE -A65. Umpire's shout before a ball or strike ~ ICALL -A66. Architect Saarinen ~ EERO -A67. Picnic invaders ~ ANTS -A68. Italian port city ~ GENOA -A69. Got up ~ ROSE -A70. Golf-course pegs ~ TEES - -D1. Just about ~ ALMOST -D2. Actress Wiest ~ DIANNE -D3. Group of nine ~ ENNEAD -D4. Unmoved by hardship ~ STOIC -D5. Scottish cap ~ TAM -D6. Break suddenly ~ SNAP -D7. "Frozen" sister ~ ANNA -D8. Henhouse perch ~ ROOST -D9. Wildlife-watching trip ~ SAFARI -D10. Long, slippery fish ~ EEL -D11. Historical period ~ ERA -D12. Former Russian space station ~ MIR -D13. Understand ~ SEE -D18. Strong base in chemistry ~ ALKALI -D22. Little kid ~ TOT -D24. Trudge through difficulty ~ SLOG -D26. Binary score in a shutout, perhaps ~ ONENO -D27. Emperor who fiddled, supposedly ~ NERO -D28. Gets some sun ~ TANS -D29. Mined mineral ~ ORE -D32. Humbug preceders ~ BAHS -D33. Poker payments before the deal ~ ANTES -D35. Spanish "Misses": Abbr. ~ SRTAS -D36. Fencing blade ~ EPEE -D38. Mountain range near Siberia ~ URAL -D39. Tablet, maybe ~ PILL -D40. Small amount of progress ~ INCH -D41. Clothing ~ ATTIRE -D42. Federal property-management agcy. ~ GSA -D45. Hun leader nicknamed "the Scourge of God" ~ ATTILA -D46. Spoil the surface of ~ MAR -D48. "Go away!" ~ BEGONE -D49. Opera title role for a tenor ~ ORESTE -D50. Evaluate ~ ASSESS -D52. Crew team member ~ ROWER -D54. Gold purity unit ~ KARAT -D56. Painter van Doesburg ~ THEO -D57. Polite address to gentlemen ~ SIRS -D59. Oil-platform setup ~ RIG -D60. Tennis serve nobody touches ~ ACE -D61. Rather of the evening news ~ DAN -D62. U.N. labor agency ~ ILO -D64. Shoe tip? ~ TOE diff --git a/Puzzles/Bundled/Crossmate-0003.xd b/Puzzles/Bundled/Crossmate-0003.xd @@ -1,103 +0,0 @@ -Title: Crossmake #3 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 12/21/2011 - - -ASPS#REAM#BEAST -SCOT#OSLO#ERNIE -LENA#NEEDLENOSE -ANGIO##NEATEN## -NEERDOWELL##UKE -TIE#DNA#TARHEEL -###ABUTS##EAVES -ANDMASTEROFNONE -REOIL##WINED### -NEEDLES#PER#SAS -ODS##REVERENTLY -##TIRANA##EARLS -PHILOSOPHY#POET -EAMES#ROBE#EDGE -ALEXA#ARON#SEEM - - -A1. Cobras' relatives ~ ASPS -A5. Paper quantity ~ REAM -A9. Monster ~ BEAST -A14. Glasgow native ~ SCOT -A15. Capital of Norway ~ OSLO -A16. Bert's roommate ~ ERNIE -A17. Dunham of "Girls" ~ LENA -A18. Pliers with tapered jaws ~ NEEDLENOSE -A20. Blood-vessel prefix ~ ANGIO -A22. Make tidier ~ NEATEN -A23. Lazy, unreliable sort ~ NEERDOWELL -A26. Small four-stringed instrument, briefly ~ UKE -A29. Deadlock ~ TIE -A30. Heredity molecule ~ DNA -A31. North Carolina student or athlete ~ TARHEEL -A34. Border on ~ ABUTS -A36. Roof overhangs ~ EAVES -A37. Phrase after "Jack of all trades" ~ ANDMASTEROFNONE -A42. Lubricate again ~ REOIL -A43. Took out for drinks, say ~ WINED -A44. Sewing-kit items ~ NEEDLES -A47. For each ~ PER -A48. Scandinavian airline ~ SAS -A51. Excessive amounts, for short ~ ODS -A52. With deep respect ~ REVERENTLY -A55. Capital of Albania ~ TIRANA -A58. British nobles ~ EARLS -A59. Major concerned with big questions ~ PHILOSOPHY -A63. Writer of verse ~ POET -A64. Midcentury designer Charles ~ EAMES -A65. Judge's garment ~ ROBE -A66. Advantage ~ EDGE -A67. Amazon voice assistant ~ ALEXA -A68. Elvis's middle name ~ ARON -A69. Appear to be ~ SEEM - -D1. At an angle ~ ASLANT -D2. Play opener ~ SCENEI -D3. Soft silk fabric ~ PONGEE -D4. Step in a flight ~ STAIR -D5. Howard of "Happy Days" ~ RON -D6. Direction opposite WNW ~ ESE -D7. One of two in naphthalene ~ ALENE -D8. Ford that followed the Model S ~ MODELT -D9. Root vegetable in borscht ~ BEET -D10. Sea eagle ~ ERNE -D11. New Year's Day, in Mexico ~ ANONUEVO -D12. Female sibling, informally ~ SIS -D13. Driving-range peg ~ TEE -D19. Repeated syllables in a tune ~ LALA -D21. Eccentric person ~ ODDBALL -D24. Burden ~ ONUS -D25. Unit named for a Scottish inventor ~ WATT -D27. Sharp-minded ~ KEEN -D28. Otherwise ~ ELSE -D32. Striped official ~ REFEREE -D33. Poker holding ~ HAND -D34. Surrounded by ~ AMID -D35. Use a needle and thread ~ SEW -D37. Florentine river ~ ARNO -D38. Require ~ NEED -D39. Serves a prison sentence ~ DOESTIME -D40. Ready to pick ~ RIPE -D41. Standout, in slang ~ ONER -D45. Historical periods ~ ERAS -D46. Married woman, in Spanish ~ SENORA -D48. Walked with long steps ~ STRODE -D49. Claim without proof ~ ALLEGE -D50. Organized set of parts ~ SYSTEM -D53. Mist or steam ~ VAPOR -D54. Backs of necks ~ NAPES -D56. Holly genus ~ ILEX -D57. Parks of civil-rights history ~ ROSA -D59. Tiny vegetable in a pod ~ PEA -D60. Computer in "2001" ~ HAL -D61. "Succession" network ~ HBO -D62. Japanese currency ~ YEN diff --git a/Puzzles/Bundled/Crossmate-0004.xd b/Puzzles/Bundled/Crossmate-0004.xd @@ -1,105 +0,0 @@ -Title: Crossmake #4 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 03/24/2010 - - -AVESTA#OSHA#OTT -BAZAAR#SHAM#SEE -ENISLE#MART#ATE -ENOS#SNAPDRAGON -TAPER#ONE#AMENS -##IDIOT##SKI### -USN#AMIDST#CLUE -SIZELIMITATIONS -NCAA#TENORS#SOP -###TAS##LEAST## -NANAS#ACE#RECTI -ANOTHERONE#LAID -OWL#TROT#ALLURE -MAT#OMIT#REESES -IRE#NADA#NOREST - - -A1. Zoroastrian sacred text ~ AVESTA -A7. Workplace safety org. ~ OSHA -A11. Mel of baseball ~ OTT -A14. Middle Eastern marketplace ~ BAZAAR -A15. Pretend; counterfeit ~ SHAM -A16. Understand ~ SEE -A17. Strand, as on an island ~ ENISLE -A18. Place to shop ~ MART -A19. Had dinner, say ~ ATE -A20. Slaughter of baseball ~ ENOS -A21. Colorful garden flower with a dragon-like name ~ SNAPDRAGON -A24. Narrow gradually ~ TAPER -A26. Single unit ~ ONE -A27. Congregational assents ~ AMENS -A28. Foolish person ~ IDIOT -A30. Hit the slopes ~ SKI -A31. Navy, for short ~ USN -A33. In the middle of ~ AMIDST -A36. Solver's hint ~ CLUE -A40. Restrictions on upload size, maybe ~ SIZELIMITATIONS -A43. March Madness org. ~ NCAA -A44. High male voices ~ TENORS -A45. Token concession ~ SOP -A46. Thanks, casually ~ TAS -A48. Smallest in amount ~ LEAST -A50. Grandmothers, informally ~ NANAS -A53. Tennis serve no one touches ~ ACE -A55. Abdominal muscles, formally ~ RECTI -A58. "Not that one either" ~ ANOTHERONE -A61. Put down, as carpet ~ LAID -A62. Night hooter ~ OWL -A63. Easy horse gait ~ TROT -A64. Attractive quality ~ ALLURE -A66. Gymnast's landing pad ~ MAT -A67. Leave out ~ OMIT -A68. Peanut-butter candy brand ~ REESES -A69. Anger ~ IRE -A70. Nothing, in Spanish ~ NADA -A71. Condition after an all-nighter ~ NOREST - -D1. Root vegetable, with article ~ ABEET -D2. Wheel of Fortune letter-turner White ~ VANNA -D3. Opera singer Pinza ~ EZIOPINZA -D4. Talked back to ~ SASSED -D5. Actor's agent, informally ~ TAL -D6. Greek war god ~ ARES -D7. Founder of the Ottoman dynasty ~ OSMAN -D8. Form ~ SHAPE -D9. Difficult ~ HARD -D10. Rail travel brand ~ AMTRAK -D11. Native American people of the Plains ~ OSAGE -D12. Grand ___ National Park ~ TETON -D13. High schoolers, often ~ TEENS -D22. "I have to run!" ~ NOTIME -D23. Friends, in Italian ~ AMICI -D25. Former Iranian currency ~ RIAL -D29. Leaves out ~ OMITS -D30. Look fixedly ~ STARE -D31. Navy, for short ~ USN -D32. Thus, in quoted text ~ SIC -D34. Loud racket ~ DIN -D35. Taken without permission ~ STOLEN -D37. Hopeless effort ~ LOSTCAUSE -D38. Card game with a Reverse card ~ UNO -D39. Mind-reading ability, briefly ~ ESP -D41. Dine in a restaurant ~ EATAT -D42. Old Russian ruler ~ TSAR -D47. Kutcher of "That '70s Show" ~ ASHTON -D49. Vendor ~ SELLER -D50. Osaka of tennis ~ NAOMI -D51. Sadat of Egypt ~ ANWAR -D52. Actor Nick ~ NOLTE -D53. Plant such as a calla lily ~ AROID -D54. Terra ___ ~ COTTA -D56. Car parts that need rotating ~ TIRES -D57. "The ___ of March" ~ IDEST -D59. Bombeck who wrote humor columns ~ ERMA -D60. Bring in, as income ~ EARN -D65. Zodiac lion ~ LEO diff --git a/Puzzles/Bundled/Crossmate-0005.xd b/Puzzles/Bundled/Crossmate-0005.xd @@ -1,105 +0,0 @@ -Title: Crossmake #5 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 12/06/2011 - - -VASSAR#ATE#ACED -EUCHRE#ION#TORE -STARED#LONGHORN -TONICS#STEAL### -###NATE##ABELES -TASK#ONRED#TORT -OPT#INEED#GENRE -REY#DESSERT#DAR -EMMAS#CAMEO#ONE -RAIN#SOYAS#UNDO -ONESEC##SIGN### -###WEARE#SELECT -ETHELRED#TEEPEE -TEAR#ANG#ESSENE -SASS#BEE#RESETS - - -A1. Seven Sisters college in Poughkeepsie ~ VASSAR -A7. Had lunch, say ~ ATE -A10. Nailed the test ~ ACED -A14. Trick-taking card game ~ EUCHRE -A15. Charged particle ~ ION -A16. Ripped ~ TORE -A17. Looked intently ~ STARED -A18. Texas cattle breed ~ LONGHORN -A20. Mixer drinks ~ TONICS -A21. Basketball takeaway ~ STEAL -A22. Archibald of basketball ~ NATE -A24. Israeli writer Aharon ___ ~ ABELES -A28. Chore ~ TASK -A31. Backing a roulette color, perhaps ~ ONRED -A34. Civil wrong ~ TORT -A35. Choose ~ OPT -A36. "Help me out here!" ~ INEED -A37. Mystery or romance, e.g. ~ GENRE -A38. Daisy Ridley's "Star Wars" role ~ REY -A39. Sweet course ~ DESSERT -A41. Daughters of the American Revolution, briefly ~ DAR -A42. Watson and Stone ~ EMMAS -A44. Brief appearance in a movie ~ CAMEO -A45. Single ~ ONE -A46. Forecast word ~ RAIN -A47. Soybean products ~ SOYAS -A48. Reverse ~ UNDO -A49. "Hold on a moment" ~ ONESEC -A51. Omen ~ SIGN -A53. "___ family" ~ WEARE -A56. Pick out ~ SELECT -A60. Medieval English king called "the Unready" ~ ETHELRED -A63. Conical tent ~ TEEPEE -A64. Rip ~ TEAR -A65. Trig function, for short ~ ANG -A66. Ancient Jewish ascetic ~ ESSENE -A67. Back talk ~ SASS -A68. Spelling contest ~ BEE -A69. Starts over ~ RESETS - -D1. Sleeveless garment ~ VEST -D2. Car, informally ~ AUTO -D3. Check with a reader, as a barcode ~ SCAN -D4. Get smaller ~ SHRINK -D5. Betel palm genus ~ ARECA -D6. Minecraft wiring material ~ REDSTONE -D7. Is under the weather ~ AILS -D8. Blow a horn ~ TOOT -D9. Group of nine ~ ENNEAD -D10. Sports competitor ~ ATHLETE -D11. Company executive, briefly ~ COO -D12. Make a mistake ~ ERR -D13. Cozy room ~ DEN -D19. Chatter ~ GAB -D23. Romanian composer George ~ ENESCO -D25. Capital on the Thames ~ LONDON -D26. Small chore outside the house ~ ERRAND -D27. Two-speaker sound system ~ STEREO -D28. Bullfighter ~ TORERO -D29. Primitive human, informally ~ APEMAN -D30. Thwart ~ STYMIE -D32. State again ~ RESAY -D33. Swellings from fluid buildup ~ EDEMAS -D36. Proofs of identity, briefly ~ IDS -D37. Classic Pontiac muscle car ~ GTO -D40. One who opposes ~ RESISTER -D43. Puzzle solutions ~ ANSWERS -D47. Egyptian beetle amulet ~ SCARAB -D48. Except if ~ UNLESS -D50. Long, slippery fish ~ EEL -D52. Honking flock ~ GEESE -D54. Artist Magritte ~ RENE -D55. Advantage ~ EDGE -D57. Fencing sword ~ EPEE -D58. Penny ~ CENT -D59. Golf-course pegs ~ TEES -D60. Little green visitors, briefly ~ ETS -D61. Afternoon drink ~ TEA -D62. Possesses ~ HAS diff --git a/Puzzles/Bundled/Crossmate-0006.xd b/Puzzles/Bundled/Crossmate-0006.xd @@ -1,105 +0,0 @@ -Title: Crossmake #6 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 11/07/2011 - - -ERIC##DEMS#IRMA -GOSH#ARMEE#LIES -GALA#POUNDSIGNS -ONESTEP##ANA### -###TED#DSTUDENT -#SEEN#CELEB#LEO -BANNS#ONES#MART -ALLEE#STU#NAIVE -RAID#EMIT#ERNES -IDS#IRISH#PIES# -CATARACT#TAN### -###RAS##MOLESTS -SINEQUANON#SAIL -EROS#RLESS#ULNA -EERO#EATS##BEET - - -A1. Idle of Monty Python ~ ERIC -A5. Some blue-state politicians, briefly ~ DEMS -A9. 2017 hurricane name ~ IRMA -A13. "Gee whiz!" ~ GOSH -A14. French army ~ ARMEE -A15. Untruths ~ LIES -A16. Fund-raising event ~ GALA -A17. Symbols also called hashtags ~ POUNDSIGNS -A19. "___ at a time" ~ ONESTEP -A21. Santa ___, California ~ ANA -A22. "Lasso" of Apple TV+ ~ TED -A23. One earning barely passing grades ~ DSTUDENT -A28. Spotted ~ SEEN -A30. Tabloid subject, for short ~ CELEB -A31. Zodiac lion ~ LEO -A32. Marriage announcements in church ~ BANNS -A33. Single bills ~ ONES -A34. Shop ~ MART -A35. Tree-lined walk ~ ALLEE -A36. Disco ___ of "The Simpsons" ~ STU -A37. Unsophisticated ~ NAIVE -A38. Police surprise ~ RAID -A39. Give off ~ EMIT -A40. Sea eagles ~ ERNES -A41. Wallet cards, briefly ~ IDS -A42. From Dublin, say ~ IRISH -A43. Bakery buys ~ PIES -A44. Eye-clouding condition ~ CATARACT -A46. Beachgoer's goal ~ TAN -A47. Org. with chapters at universities ~ RAS -A48. Harasses sexually ~ MOLESTS -A52. Essential condition ~ SINEQUANON -A57. Canvas catcher ~ SAIL -A58. Greek god of love ~ EROS -A59. Like some merchandise after markdowns ~ RLESS -A60. Forearm bone ~ ULNA -A61. Architect Saarinen ~ EERO -A62. Has dinner ~ EATS -A63. Borscht vegetable ~ BEET - -D1. Frozen waffle brand ~ EGGO -D2. Reddish-brown horse ~ ROAN -D3. Small landmass in water ~ ISLE -D4. Reprimanded ~ CHASTENED -D5. Let fall ~ DROP -D6. Flightless Australian bird ~ EMU -D7. Gentlemen ~ MEN -D8. Calms with medication ~ SEDATES -D9. Epic poem about Troy ~ ILIAD -D10. Oil-drilling setup ~ RIG -D11. Guys ~ MEN -D12. Donkey ~ ASS -D14. Imitated ~ APED -D18. Cold shoulder ~ SNUB -D20. On edge ~ TENSE -D23. Tooth doctor ~ DENTIST -D24. Detective ~ SLEUTH -D25. Benes of "Seinfeld" ~ ELAINE -D26. Courage, informally ~ NERVES -D27. Carries ~ TOTES -D28. Tea brand in a red package ~ SALADA -D29. Sign up ~ ENLIST -D30. Relating to the universe ~ COSMIC -D32. Like barium, chemically ~ BARIC -D34. Underwater naval vessel ~ MARINESUB -D37. Kathmandu's country ~ NEPAL -D39. Removal by rubbing out ~ ERASURE -D42. Baghdad's country ~ IRAQ -D45. "You ___ right!" ~ ARESO -D46. Large quantities ~ TONS -D48. Green growth on damp rocks ~ MOSS -D49. Discount event ~ SALE -D50. Fork prong ~ TINE -D51. Blind strip ~ SLAT -D52. Understand ~ SEE -D53. Anger ~ IRE -D54. "Neither" partner ~ NOR -D55. ___ carte ~ ALA -D56. Fisherman's need ~ NET diff --git a/Puzzles/Bundled/Crossmate-0007.xd b/Puzzles/Bundled/Crossmate-0007.xd @@ -1,105 +0,0 @@ -Title: Crossmake #7 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 11/29/2016 - - -ASOF#ATRA#SPRAT -ROAR#LEOS#TAEBO -RATE#LASTSUPPER -AMESS#SARA#ARES -SINCERE#OLD#ETO -###APE#ANTICS## -UPS#ANDSO#SHELF -SATURDAYMATINEE -NYASA#MEYER#TIE -##FATCAT#OAT### -ARF#EIS#INCISOR -MICA#TKOS#TRACE -PLUSWEEKLY#ALTA -LETHE#ERIE#DOER -ESSES#NAPS#ENTS - - -A1. Starting on, in date lines ~ ASOF -A5. Gillette razor brand ~ ATRA -A9. Small herring ~ SPRAT -A14. Lion's sound ~ ROAR -A15. Zodiac lions ~ LEOS -A16. Billy Blanks workout ~ TAEBO -A17. Evaluate ~ RATE -A18. Leonardo da Vinci mural ~ LASTSUPPER -A20. "What ___!" ~ AMESS -A22. Bareilles of pop music ~ SARA -A23. Greek war god ~ ARES -A24. Genuine ~ SINCERE -A26. Aged ~ OLD -A28. WWII Pacific theater initials ~ ETO -A29. Gorilla or gibbon ~ APE -A30. Silly behavior ~ ANTICS -A32. Delivery company, briefly ~ UPS -A35. "Furthermore..." ~ ANDSO -A37. Bookcase level ~ SHELF -A40. Weekend afternoon movie showing ~ SATURDAYMATINEE -A43. Lake also called Malawi ~ NYASA -A44. "Twilight" author Stephenie ~ MEYER -A45. Draw ~ TIE -A46. Wealthy power broker ~ FATCAT -A48. Breakfast grain ~ OAT -A50. Dog's bark ~ ARF -A52. German ice creams ~ EIS -A53. Cutting tooth ~ INCISOR -A57. Flaky mineral ~ MICA -A59. Referee's stoppages, briefly ~ TKOS -A61. Hint of evidence ~ TRACE -A62. Additional edition every seven days ~ PLUSWEEKLY -A65. Utah ski area ~ ALTA -A66. River of forgetfulness ~ LETHE -A67. Great Lake bordering Ohio ~ ERIE -A68. Person who takes action ~ DOER -A69. Hissing letters ~ ESSES -A70. Short sleeps ~ NAPS -A71. Tree creatures in Tolkien ~ ENTS - -D1. Tapestry wall hangings ~ ARRAS -D2. "___ right?" ~ SOAMI -D3. Made with a cereal grain ~ OATEN -D4. Grapefruit soda brand ~ FRESCA -D5. Every bit ~ ALL -D6. Rib playfully ~ TEASE -D7. Parks of civil-rights history ~ ROSA -D8. Study of stars and planets ~ ASTRONOMY -D9. Disco ___ of "The Simpsons" ~ STU -D10. Dad ~ PAPA -D11. Stand for ~ REPRESENT -D12. Root vegetable, with article ~ ABEET -D13. Body trunk ~ TORSO -D19. Seasoning from the sea ~ SALT -D21. Set apart ~ SEPARATE -D25. Tear violently ~ REND -D27. Divert attention ~ DISTRACT -D30. Up to now ~ ASYET -D31. Greek letter after phi ~ CHI -D32. Navy, for short ~ USN -D33. Wages ~ PAY -D34. Reductions in personnel ~ STAFFCUTS -D36. Decorated with inlaid metal ~ DAMASKEEN -D38. Hawaiian garland ~ LEI -D39. Charge for service ~ FEE -D41. Country with 50 states, briefly ~ USA -D42. Long span of time ~ AEON -D47. Quote as evidence ~ CITE -D49. Angry speech ~ TIRADE -D50. More than enough ~ AMPLE -D51. Annoys ~ RILES -D53. Long Island town ~ ISLIP -D54. Hairdresser's workplace ~ SALON -D55. Group of eight ~ OCTET -D56. Raises, as children ~ REARS -D58. Tennis great Arthur ~ ASHE -D60. Gumbo vegetable ~ OKRA -D63. Anderson of film ~ WES -D64. Affirmative vote ~ YES diff --git a/Puzzles/Bundled/Crossmate-0008.xd b/Puzzles/Bundled/Crossmate-0008.xd @@ -1,103 +0,0 @@ -Title: Crossmake #8 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 10/23/2012 - - -ASPS#BLAB#TEMPT -BLIP#RAIL#ISOLA -BANANACREAMPIES -ANTRA##YELP#RAT -STARLET#PLACATE -###ODEON#ONO### -WEEWILLIEWINKIE -IKE###EEL###IDI -TELLSITLIKEITIS -###ETO#SAENS### -AGITATE#SNOOKER -TEN#SALE##CLOVE -WEKISSINASHADOW -ANELE#TIRE#TAKE -RADON#EDIT#EKED - - -A1. Cobras' kin ~ ASPS -A5. Reveal a secret ~ BLAB -A9. Entice ~ TEMPT -A14. Tiny radar-screen mark ~ BLIP -A15. Train track ~ RAIL -A16. Island, in Italian ~ ISOLA -A17. Desserts with yellow fruit and whipped topping ~ BANANACREAMPIES -A20. Cavities in bones ~ ANTRA -A21. Restaurant-review app ~ YELP -A22. Informer ~ RAT -A23. Up-and-coming actress ~ STARLET -A26. Pacify ~ PLACATE -A28. Old movie theater name ~ ODEON -A30. Yoko of art and music ~ ONO -A31. Nursery-rhyme boy who runs through town ~ WEEWILLIEWINKIE -A38. Eisenhower nickname ~ IKE -A39. Sushi fish ~ EEL -A40. Amin of Uganda ~ IDI -A41. Speaks bluntly ~ TELLSITLIKEITIS -A48. WWII Pacific theater initials ~ ETO -A49. Saint-___, French composer ~ SAENS -A50. Stir up ~ AGITATE -A54. Cue sport played on a large table ~ SNOOKER -A58. Number after nine ~ TEN -A59. Store discount event ~ SALE -A61. Aromatic spice bud ~ CLOVE -A62. "The King and I" song ~ WEKISSINASHADOW -A66. Anoint, in old usage ~ ANELE -A67. Wheel covering ~ TIRE -A68. Capture on film ~ TAKE -A69. Radioactive gas ~ RADON -A70. Revise text ~ EDIT -A71. Managed with difficulty, with "out" ~ EKED - -D1. Palestinian leader Mahmoud ~ ABBAS -D2. Lean at an angle ~ SLANT -D3. One of Columbus's ships ~ PINTA -D4. Small brown songbird ~ SPARROW -D5. Lingerie item ~ BRA -D6. Resin once used in records ~ LAC -D7. Light and breezy ~ AIRY -D8. Censor's sound ~ BLEEP -D9. Kettledrums ~ TIMPANI -D10. Mind-reading ability, briefly ~ ESP -D11. Rose of "Schitt's Creek" ~ MOIRA -D12. Fold in fabric ~ PLEAT -D13. Sense sampled by a chef ~ TASTE -D18. Silent-film star Nita ~ NALDI -D19. Permit ~ ALLOW -D24. Long, slippery fish ~ EEL -D25. Available for rent, on a sign ~ TOLET -D27. Swindle ~ CON -D29. Physicist Bohr ~ NIELS -D31. Clever humor ~ WIT -D32. Scrape by ~ EKE -D33. Moray, e.g. ~ EEL -D34. Howe of hockey ~ ELIAS -D35. Set of parts ~ KIT -D36. Amin of Uganda ~ IDI -D37. German ice creams ~ EIS -D42. Permit ~ LET -D43. 1948 presidential hopeful Harold ~ STASSEN -D44. Tiny amounts ~ IOTAS -D45. Barbie's companion ~ KEN -D46. Biblical patriarch who "walked with God" ~ ENOCH -D47. Set apart ~ ISOLATE -D50. In conflict ~ ATWAR -D51. Davis of "Thelma & Louise" ~ GEENA -D52. Signed, as a contract ~ INKED -D53. Best of the best ~ ELITE -D55. Camera brand ~ KODAK -D56. Bring to mind ~ EVOKE -D57. Marry again ~ REWED -D60. Oklahoma city ~ ENID -D63. U.N. labor agency ~ ILO -D64. "Entourage" agent Gold ~ ARI -D65. Put in place ~ SET diff --git a/Puzzles/Bundled/Crossmate-0009.xd b/Puzzles/Bundled/Crossmate-0009.xd @@ -1,103 +0,0 @@ -Title: Crossmake #9 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 07/12/2012 - - -SAFE#CARE#AFLAC -AXLE#OPED#TIARA -TEARDROPS#TENET -##TOOTLE#DILATE -AHA#SELLSOLDIER -VAN#AGO#CRAG### -ENGAGE#TAM#OCHO -ROLFE#SUN#BALER -TIER#INN#MELONS -###IONA#TOY#CIO -RATKANGAROO#KEN -UBOATS#MINNOW## -DUNNE#LETSDRIVE -ESKER#OBOE#ASEA -REARS#WANT#LEER - - -A1. Out of danger ~ SAFE -A5. Concern ~ CARE -A9. Insurer with a duck mascot ~ AFLAC -A14. Wheel rod ~ AXLE -A15. Newspaper opinion piece ~ OPED -A16. Princess's headwear ~ TIARA -A17. Signs of sorrow ~ TEARDROPS -A19. Doctrine ~ TENET -A20. Move along leisurely ~ TOOTLE -A21. Widen, as pupils ~ DILATE -A22. "Now I get it!" ~ AHA -A24. Betray a comrade in arms ~ SELLSOLDIER -A26. Moving vehicle ~ VAN -A27. In the past ~ AGO -A28. Rocky outcrop ~ CRAG -A29. Take part ~ ENGAGE -A31. Scottish cap ~ TAM -A32. Eight, in Spanish ~ OCHO -A36. John of Jamestown history ~ ROLFE -A37. Star at the center of our solar system ~ SUN -A38. Hay-bundling machine ~ BALER -A39. Level in a hierarchy ~ TIER -A40. Roadside lodging ~ INN -A41. Cantaloupes and honeydews ~ MELONS -A42. Scottish island with an ancient abbey ~ IONA -A44. Child's plaything ~ TOY -A45. Tech exec, briefly ~ CIO -A46. Small desert marsupial ~ RATKANGAROO -A50. Barbie's companion ~ KEN -A51. German submarines ~ UBOATS -A52. Small fish often used as bait ~ MINNOW -A54. Writer Dominick ~ DUNNE -A55. "Hit the road!" ~ LETSDRIVE -A58. Winding glacial ridge ~ ESKER -A59. Double-reed woodwind ~ OBOE -A60. On the ocean ~ ASEA -A61. Raises, as children ~ REARS -A62. Desire ~ WANT -A63. Sly look ~ LEER - -D1. Was seated ~ SAT -D2. Chopping tool ~ AXE -D3. 180-degree angle ~ FLATANGLE -D4. Architect Saarinen ~ EERO -D5. Funeral procession ~ CORTEGE -D6. Greek god associated with the sun ~ APOLLO -D7. Drive back ~ REPEL -D8. Magazine staffers, briefly ~ EDS -D9. Hun leader nicknamed "the Scourge of God" ~ ATTILA -D10. Three-point football score ~ FIELDGOAL -D11. Hawaiian porch ~ LANAI -D12. Sharp mountain ridge ~ ARETE -D13. Provide food for an event ~ CATER -D18. Prescribed amount ~ DOSAGE -D21. Campus residence, briefly ~ DORM -D22. Ward off ~ AVERT -D23. Vietnam's capital ~ HANOI -D25. Look over quickly ~ SCAN -D30. South African of Dutch descent ~ AFRIKANER -D31. Large wine cask ~ TUN -D33. In the direction hands move on a clock ~ CLOCKWISE -D34. Figure skater Sonja ~ HENIE -D35. Welles of film ~ ORSON -D37. Catch unexpectedly ~ SNAG -D38. Past ~ BEYOND -D40. Lodgings for travelers ~ INNS -D41. Lunar disappearance below the horizon ~ MOONSET -D43. Western films, informally ~ OATERS -D44. Neptune's largest moon ~ TRITON -D46. Less polite ~ RUDER -D47. Mistreat ~ ABUSE -D48. Toy truck brand ~ TONKA -D49. Single-celled organism, variant spelling ~ AMEBA -D53. Spoken ~ ORAL -D55. Not high ~ LOW -D56. Letter after u ~ VEE -D57. Hearing organ ~ EAR diff --git a/Puzzles/Bundled/Crossmate-0010.xd b/Puzzles/Bundled/Crossmate-0010.xd @@ -1,105 +0,0 @@ -Title: Crossmake #10 -CmVer: 3 -Author: Crossmake -Publisher: Crossmake -Date: 2026-04-29 -Copyright: Generated -Source Grid: 03/27/2012 - - -AGASP#STARE#ARC -SORTA#ERNIE#GEL -PANAMACANALCITY -#TOTEM#SOL#ARID -###SLUSHY#FTLEE -MAC#ANT#SPAN### -ACLU#DEB#ARABLE -SHAKESPEAREPLAY -TENURE#END#SURE -###LAND#EOS#RAD -ANTES#YAWNED### -SEAL#AND#MERIT# -HAREBRAINEDIDEA -ETO#AIMEE#ELLAS -SOT#ADOUT#RLESS - - -A1. Open-mouthed with surprise ~ AGASP -A6. Look fixedly ~ STARE -A11. Part of a circle ~ ARC -A14. Somewhat, informally ~ SORTA -A15. Bert's roommate ~ ERNIE -A16. Set, as hair ~ GEL -A17. Colón, where a famous waterway begins ~ PANAMACANALCITY -A20. Clan emblem ~ TOTEM -A21. Musical note after fa ~ SOL -A22. Desertlike ~ ARID -A23. Partly melted ~ SLUSHY -A25. Virginia military post, for short ~ FTLEE -A26. Apple computer, casually ~ MAC -A29. Picnic invader ~ ANT -A30. Stretch of time ~ SPAN -A32. Civil-liberties org. ~ ACLU -A34. Young woman making a formal society entrance ~ DEB -A36. Fit for farming ~ ARABLE -A40. "Hamlet" or "Macbeth" ~ SHAKESPEAREPLAY -A43. Job security for a professor ~ TENURE -A44. Finish ~ END -A45. Certain ~ SURE -A46. Touch down ~ LAND -A48. Greek dawn goddess ~ EOS -A50. Cool, in old slang ~ RAD -A51. Poker payments before the deal ~ ANTES -A54. Showed boredom or fatigue ~ YAWNED -A57. Animal on a Navy emblem ~ SEAL -A58. Plus ~ AND -A59. Deserve ~ MERIT -A62. Wildly impractical notion ~ HAREBRAINEDIDEA -A66. WWII Pacific theater initials ~ ETO -A67. Singer Mann ~ AIMEE -A68. Fitzgerald and Raines ~ ELLAS -A69. Drunkard ~ SOT -A70. Stir, with "make" ~ ADOUT -A71. Like some marked-down merchandise ~ RLESS - -D1. Small venomous snake ~ ASP -D2. Barnyard bleater ~ GOAT -D3. River through Florence ~ ARNO -D4. Sports figures ~ STATS -D5. Anderson of "Baywatch" ~ PAMELA -D6. Minuscule time unit, for short ~ SEC -D7. Garbage ~ TRASH -D8. Irritates ~ ANNOYS -D9. Former Iranian currency ~ RIAL -D10. Long, slippery fish ~ EEL -D11. "Just ___" ~ AGIRL -D12. Knot again ~ RETIE -D13. Bonnie's partner ~ CLYDE -D18. Explorer Roald ~ AMUNDSEN -D19. Short sleeps ~ CATNAPS -D24. Stair part ~ STEP -D25. Bus ticket price ~ FARE -D26. Sail support ~ MAST -D27. Dull pain ~ ACHE -D28. Scottish family group ~ CLAN -D31. "Excuse me" ~ PARDONME -D33. Small four-stringed instrument ~ UKULELE -D35. Spelling contest ~ BEE -D37. Smear ~ BLUR -D38. Croft of video games ~ LARA -D39. Looked at closely ~ EYED -D41. Historical periods ~ ERAS -D42. Once more ~ ANEW -D47. Energetic person ~ DYNAMO -D49. Lawn-planting tool ~ SEEDER -D51. Fireplace remains ~ ASHES -D52. "Cool!" ~ NEATO -D53. Fortune-telling deck ~ TAROT -D55. French farewell ~ ADIEU -D56. Practice exercise ~ DRILL -D58. Desertlike ~ ARID -D60. Not active ~ IDLE -D61. Steeps, as leaves ~ TEAS -D63. Sheep's sound ~ BAA -D64. Fisherman's need ~ NET -D65. Donkey ~ ASS diff --git a/Puzzles/Crossmate Starter/cm-starter-0001.xd b/Puzzles/Crossmate Starter/cm-starter-0001.xd @@ -0,0 +1,107 @@ +Title: Crossmate Starter #1 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 241 +Seed: 1779135754099774 +Fill Score: 9888 + + +ALTO#OGRE#PIPER +RAID#TREE#ADANA +MUNI#HOER#RAREE +ORACLEOFOMAHA## +RAS#ALMS#ADOBES +###OIL##FEE#ONO +BUCKROGERS#PLAN +ANAIS#ATA#ALICE +SIRE#RESURRECTS +SON#POL##AND### +ONEARM#SPCA#BAA +##LEAPINLIZARDS +HAITI#PEAS#SEES +ALANS#SENT#TALE +DANAE#ORES#ADES + + +A1. Choir voice ~ ALTO +A5. Shrek, for one ~ OGRE +A9. Hamelin musician ~ PIPER +A14. Bug spray brand ~ RAID +A15. Source of bark ~ TREE +A16. Turkish kebab city ~ ADANA +A17. City bond, for short ~ MUNI +A18. Garden plot worker ~ HOER +A19. ___-show ~ RAREE +A20. Warren Buffett's nickname ~ ORACLEOFOMAHA +A23. Ethiopian princes of old ~ RAS +A24. Charity handouts ~ ALMS +A25. Sun-dried bricks ~ ADOBES +A28. Crude stuff ~ OIL +A29. Cover charge ~ FEE +A30. Lennon's Yoko ~ ONO +A31. Sci-fi hero of the 25th century ~ BUCKROGERS +A36. Game strategy ~ PLAN +A37. Diarist Nin ~ ANAIS +A38. Words before "glance" or "loss" ~ ATA +A39. Wonderland girl ~ ALICE +A40. Stallion, e.g. ~ SIRE +A41. Brings back to life ~ RESURRECTS +A43. Junior, to Dad ~ SON +A44. Politico, informally ~ POL +A45. Sentence connector ~ AND +A46. ___ bandit ~ ONEARM +A48. Animal welfare org. ~ SPCA +A50. Lamb's bleat ~ BAA +A53. Little Orphan Annie's cry ~ LEAPINLIZARDS +A56. Port-au-Prince's land ~ HAITI +A58. Pod contents ~ PEAS +A59. Notices ~ SEES +A60. Arkin and Alda ~ ALANS +A61. Put in the mail ~ SENT +A62. Yarn spun by the fire ~ TALE +A63. Mother of Perseus ~ DANAE +A64. Smelter's raw materials ~ ORES +A65. Cooler coolers ~ ADES + +D1. Knight's protection ~ ARMOR +D2. 1944 noir classic ~ LAURA +D3. Turner and Fey ~ TINAS +D4. Like some lofty poems ~ ODIC +D5. Shakespeare's Moor ~ OTHELLO +D6. Wedding party figure ~ GROOM +D7. Coral ridges ~ REEFS +D8. Architect Saarinen ~ EERO +D9. Macy's Thanksgiving event ~ PARADE +D10. The Gem State ~ IDAHO +D11. Like a satellite dish's shape ~ PARABOLIC +D12. Compass heading ~ ENE +D13. Issa of "Insecure" ~ RAE +D21. Villains' hideouts ~ LAIRS +D22. West and Whitman ~ MAES +D26. Pass into law ~ ENACT +D27. Loudness units ~ SONES +D28. Dust Bowl migrant ~ OKIE +D29. German Mrs. ~ FRAU +D31. Profundo predecessor ~ BASSO +D32. Labor group ~ UNION +D33. Reddish-brown gem ~ CARNELIAN +D34. Highlands native ~ GAEL +D35. Sci-fi visitors, briefly ~ ETS +D36. Entered a courtroom answer ~ PLED +D39. Desi of early TV ~ ARNAZ +D41. Easy win ~ ROMP +D42. Bigots ~ RACISTS +D44. Words of approval ~ PRAISE +D47. Insurance heavyweight ~ AETNA +D48. Look of contempt ~ SNEER +D49. Carpenter's smoothing tool ~ PLANE +D50. Bakery staple ~ BREAD +D51. "Hello" singer ~ ADELE +D52. Stubborn beasts ~ ASSES +D54. ___ facto ~ IPSO +D55. "The Thin Man" pooch ~ ASTA +D56. Possessed ~ HAD +D57. ___ carte ~ ALA diff --git a/Puzzles/Crossmate Starter/cm-starter-0002.xd b/Puzzles/Crossmate Starter/cm-starter-0002.xd @@ -0,0 +1,101 @@ +Title: Crossmate Starter #2 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 336 +Seed: 1779137520012187 +Fill Score: 11185 + + +SAGE#INAS##MART +AMEN#DECK#MOWER +BENT#EXHILARATE +ENTREATY#ANORAK +RILEY####LASERS +STEERAGE#AGE### +AIM#ELUDE#ELKS# +WEAN#GRAPH#YEWS +#SNAG#UMIAK#LEO +###MOI#SCHILLER +MODERN####LEYTE +ICEDIN#BEANTREE +STARESDOWN#TINY +TENOR#OWES#EPEE +STEP##ELSE#RADS + + +A1. Thanksgiving stuffing herb ~ SAGE +A5. Cookbook author Garten and others ~ INAS +A9. Trading center ~ MART +A13. "So be it" ~ AMEN +A14. Patio platform ~ DECK +A15. Lawn-trimming machine ~ MOWER +A16. Far from straight ~ BENT +A17. Thrill to the core ~ EXHILARATE +A19. Earnest plea ~ ENTREATY +A21. Hooded winter jacket ~ ANORAK +A22. "Inside Out" protagonist ~ RILEY +A23. Light-show beams ~ LASERS +A24. Cheapest ship class ~ STEERAGE +A28. Let mature, as cheddar ~ AGE +A29. Archer's objective ~ AIM +A30. Slip away from ~ ELUDE +A32. Lodge members ~ ELKS +A35. Stop nursing ~ WEAN +A37. Bar chart, for one ~ GRAPH +A39. Churchyard evergreens ~ YEWS +A41. Unexpected hitch ~ SNAG +A43. Open Inuit boat ~ UMIAK +A45. DiCaprio, to fans ~ LEO +A46. "Pretentious? ___?" ~ MOI +A48. "Ode to Joy" poet ~ SCHILLER +A50. Up to date ~ MODERN +A53. WWII Philippine gulf ~ LEYTE +A54. Trapped by a winter storm ~ ICEDIN +A55. Catalpa, familiarly ~ BEANTREE +A58. Intimidates with a glare ~ STARESDOWN +A60. Minuscule ~ TINY +A61. Pavarotti's range ~ TENOR +A62. Is in debt to ~ OWES +A63. Fencing weapon ~ EPEE +A64. Staircase unit ~ STEP +A65. Otherwise ~ ELSE +A66. Radiation dosage units ~ RADS + +D1. Reciprocating power tool ~ SABERSAW +D2. Hotel perks ~ AMENITIES +D3. Courteous fellow ~ GENTLEMAN +D4. Main course ~ ENTREE +D5. Brainstorm yield ~ IDEA +D6. Coming up ~ NEXT +D7. Sore all over ~ ACHY +D8. Hit the slopes ~ SKI +D9. In a gloomy way ~ MOROSELY +D10. Cognizant ~ AWARE +D11. Reseal, as a flat roof ~ RETAR +D12. Long journeys ~ TREKS +D15. Get by ~ MANAGE +D18. "___ Land" ~ LALA +D20. Brontë's Jane ~ EYRE +D25. High school math subj. ~ ALG +D26. Spiritual mentor ~ GURU +D27. Red-rinded Dutch cheeses ~ EDAMS +D31. Truly awesome, in slang ~ EPIC +D33. Longtime "Live!" co-host ~ KELLYRIPA +D34. Added sugar to ~ SWEETENED +D36. Casually mention celebrity pals ~ NAMEDROP +D38. "Gotcha!" ~ HAH +D40. Strained peepers ~ SOREEYES +D42. More blood-soaked ~ GORIER +D44. Pottery oven ~ KILN +D47. Cozy B&B alternatives ~ INNS +D49. Envelope's contents ~ LETTER +D50. Light fogs ~ MISTS +D51. Group of eight ~ OCTET +D52. Irish novelist Seamus ~ DEANE +D55. Cereal holder ~ BOWL +D56. Flock females ~ EWES +D57. Faulkner's Bundren patriarch ~ ANSE +D59. Bambi's mother, notably ~ DOE diff --git a/Puzzles/Crossmate Starter/cm-starter-0003.xd b/Puzzles/Crossmate Starter/cm-starter-0003.xd @@ -0,0 +1,103 @@ +Title: Crossmate Starter #3 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 193 +Seed: 1779137562040157 +Fill Score: 10036 + + +AMONG#SHOTS#PEA +BANAL#TIBIA#OAR +BITTERENEMY#TRY +AMOSNANDY##GALA +#####HOUSEORGAN +RUSHES###SLEEPS +ISAAC#EPOPEE### +BOSTONDIDNOTSOB +###PLATTE#LEILA +LILIES###REDSEA +OPENSTANCE##### +YENS##SILENTERA +OCA#THINASARAIL +LAP#AEDES#PASSE +ACE#USERS#EPEES + + +A1. In the company of ~ AMONG +A6. Vaccinations ~ SHOTS +A11. Pod dweller ~ PEA +A14. Trite ~ BANAL +A15. Shinbone ~ TIBIA +A16. Rowboat propeller ~ OAR +A17. Sworn foe ~ BITTERENEMY +A19. Give it a shot ~ TRY +A20. Early radio comedy duo ~ AMOSNANDY +A21. Festive event ~ GALA +A22. Company newsletter ~ HOUSEORGAN +A25. Hurries ~ RUSHES +A30. Catches some Z's ~ SLEEPS +A31. Sci-fi's Asimov ~ ISAAC +A32. Epic poem ~ EPOPEE +A35. Palindrome about an unweeping city ~ BOSTONDIDNOTSOB +A40. Nebraska river ~ PLATTE +A41. Girl's name meaning "night" ~ LEILA +A42. Easter blooms ~ LILIES +A45. Body Moses parted ~ REDSEA +A46. Batter's wide setup ~ OPENSTANCE +A50. Strong cravings ~ YENS +A51. Pre-talkie period ~ SILENTERA +A57. Andean tuber ~ OCA +A58. Very skinny ~ THINASARAIL +A60. Pool length ~ LAP +A61. Disease-spreading mosquito genus ~ AEDES +A62. Out of fashion ~ PASSE +A63. Serve winner ~ ACE +A64. App downloaders ~ USERS +A65. Fencing blades ~ EPEES + +D1. "Dancing Queen" group ~ ABBA +D2. Seriously injure ~ MAIM +D3. Wise to ~ ONTO +D4. Washington nine, informally ~ NATS +D5. Small valley ~ GLEN +D6. Shorthand taker, briefly ~ STENO +D7. Diwali celebrant ~ HINDU +D8. Follows orders ~ OBEYS +D9. Apple CEO Cook ~ TIM +D10. For instance ~ SAY +D11. Thick French soup ~ POTAGE +D12. Cold-weather cap flap ~ EARLAP +D13. Ancient Indo-Iranian peoples ~ ARYANS +D18. Stadium cheers ~ RAHS +D21. Welcomed ~ GREETED +D23. Sports cable channel ~ ESPN +D24. Soccer crowd chant ~ OLEOLE +D25. Tease playfully ~ RIB +D26. Troop-entertainment org. ~ USO +D27. Elite British military unit, in brief ~ SAS +D28. Old millinery fasteners ~ HATPINS +D29. French schools ~ ECOLES +D32. NYC summer clock setting ~ EDT +D33. Olive center ~ PIT +D34. Keats work ~ ODE +D36. Thomas who drew the GOP elephant ~ NAST +D37. Family nickname ~ SIS +D38. Bullring cry ~ OLE +D39. Lamb's bleat ~ BAA +D42. Chicago Jesuit university ~ LOYOLA +D43. Old emetic syrup ~ IPECAC +D44. Delaware Valley native people ~ LENAPE +D45. Roger of "Cheers" ~ REES +D47. Stage whisper ~ ASIDE +D48. Bay Area NFLer, slangily ~ NINER +D49. Sophomores, e.g. ~ CLASS +D52. Back of the neck ~ NAPE +D53. Mousecatcher ~ TRAP +D54. Lessen, as pain ~ EASE +D55. Get up ~ RISE +D56. Pub pours ~ ALES +D58. Greek T ~ TAU +D59. Some pronouns ~ HES diff --git a/Puzzles/Crossmate Starter/cm-starter-0004.xd b/Puzzles/Crossmate Starter/cm-starter-0004.xd @@ -0,0 +1,107 @@ +Title: Crossmate Starter #4 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 1189 +Seed: 1779138316326793 +Fill Score: 11086 + + +ABOMB#SLAV#TELL +TEPEE#PINE#EDIE +BLAME#REARENDED +AIROFFENSIVE### +YET#SUES#TETLEY +###ATM##OAR#ELA +COFFEEBARS#HAYS +INLAW#ERG#PEPSI +REAR#SEEYALATER +CAP#NET##REP### +ALSACE#SEGA#LOA +###NOTUPTOSNUFF +DOPESHEET#EATAT +ARTY#ELLE#DIEGO +BRAE#SETS#OLSEN + + +A1. Hiroshima weapon, informally ~ ABOMB +A6. Pole or Croat ~ SLAV +A10. Spill the beans ~ TELL +A14. Conical Plains dwelling ~ TEPEE +A15. Long, as for home ~ PINE +A16. Warhol muse Sedgwick ~ EDIE +A17. Pin responsibility on ~ BLAME +A18. Hit from behind, as a car ~ REARENDED +A20. Sustained bombing campaign ~ AIROFFENSIVE +A22. Even so ~ YET +A23. Takes to court ~ SUES +A24. British tea brand ~ TETLEY +A28. Bank machine, for short ~ ATM +A29. Rowboat propeller ~ OAR +A30. Old highest musical note ~ ELA +A31. Espresso shops ~ COFFEEBARS +A36. Old Hollywood censor Will ~ HAYS +A37. Relative by marriage ~ INLAW +A38. Work unit ~ ERG +A39. Coke competitor ~ PEPSI +A40. Bring up, as children ~ REAR +A41. Casual goodbye ~ SEEYALATER +A43. Bottle topper ~ CAP +A44. Court divider ~ NET +A45. Sales agent, briefly ~ REP +A46. French wine region near Germany ~ ALSACE +A48. Genesis console maker ~ SEGA +A50. Mauna ___ ~ LOA +A53. Below standard ~ NOTUPTOSNUFF +A56. Racetrack info sheet ~ DOPESHEET +A59. Gnaw at, as guilt ~ EATAT +A60. Affectedly cultured ~ ARTY +A61. Woods of "Legally Blonde" ~ ELLE +A62. Muralist Rivera ~ DIEGO +A63. Scottish hillside ~ BRAE +A64. Hardens, like gelatin ~ SETS +A65. Mary-Kate or Ashley ~ OLSEN + +D1. Cornered, with no escape ~ ATBAY +D2. Misrepresent ~ BELIE +D3. Vasarely's art genre ~ OPART +D4. Office reminder ~ MEMO +D5. Hearty cold-weather dish ~ BEEFSTEW +D6. Shopping binge ~ SPREE +D7. Claims on property ~ LIENS +D8. Collected sayings ~ ANAS +D9. Harvard's motto word ~ VERITAS +D10. Article of faith ~ TENET +D11. Actor Byrnes of old TV ~ EDD +D12. Whopper ~ LIE +D13. Headed up ~ LED +D19. At any point ~ EVER +D21. Show irritation ~ FUME +D25. Bounded suddenly ~ LEAPT +D26. "Family Ties" mom Keaton ~ ELYSE +D27. Arafat of the PLO ~ YASIR +D28. At a distance ~ AFAR +D29. Wild bacchanal ~ ORGY +D31. Roughly, in dates ~ CIRCA +D32. Shaquille of the NBA ~ ONEAL +D33. Wing control surfaces ~ FLAPS +D34. Borscht root ~ BEET +D35. Exist ~ ARE +D36. Mound of laundry ~ HEAP +D39. Go right ahead ~ PLEASEDO +D41. Boils with rage ~ SEETHES +D42. 2012 Best Picture ~ ARGO +D44. Sarges, e.g. ~ NCOS +D47. Keep ___ out ~ ANEYE +D48. Ancient wheat variety ~ SPELT +D49. Diminutive suffixes ~ ETTES +D50. Renaissance string instruments ~ LUTES +D51. Old enough to vote ~ OFAGE +D52. River in a Burns poem ~ AFTON +D54. Congo River tributary ~ UELE +D55. Carpenter's fastener ~ NAIL +D56. Small amount ~ DAB +D57. Bruins great Bobby ~ ORR +D58. School support org. ~ PTA diff --git a/Puzzles/Crossmate Starter/cm-starter-0005.xd b/Puzzles/Crossmate Starter/cm-starter-0005.xd @@ -0,0 +1,105 @@ +Title: Crossmate Starter #5 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 581 +Seed: 1779138454387149 +Fill Score: 10568 + + +ABRI#STEER#GAPE +LOOM#LADLE#RBIS +PUTAHOLDON#ABET +OTERO#CANAANITE +###EOS###MYDEAR +ILETHIMSLEEP### +MAR#ALETA#SABRE +PRIM#TRACK#SLAG +SANAA#CREEK#ORG +###SQUIRRELAWAY +ACTSUP###LED### +FRICASSEE#IDEES +LIMA#HEAVENSENT +AMOR#OGRES#URSA +TEND#TASSE#POET + + +A1. Soldier's dugout shelter ~ ABRI +A5. Guide along ~ STEER +A10. Stare slack-jawed ~ GAPE +A14. Appear ominously ~ LOOM +A15. Soup-serving tool ~ LADLE +A16. Slugger's stats ~ RBIS +A17. Suspend, as an account ~ PUTAHOLDON +A19. Aid in wrongdoing ~ ABET +A20. New Mexico county ~ OTERO +A21. Ancient dweller of the Promised Land ~ CANAANITE +A23. Greek goddess of dawn ~ EOS +A25. Affectionate address ~ MYDEAR +A26. I didn't wake the napper ~ ILETHIMSLEEP +A32. Spoil ~ MAR +A33. Prince Valiant's wife ~ ALETA +A34. Cavalry blade ~ SABRE +A38. Stiffly proper ~ PRIM +A40. Runner's circuit ~ TRACK +A42. Smelting waste ~ SLAG +A43. Yemeni capital ~ SANAA +A45. Babbling brook ~ CREEK +A47. Nonprofit's URL ending ~ ORG +A48. Stash for later ~ SQUIRRELAWAY +A51. Misbehaves ~ ACTSUP +A54. Was out in front ~ LED +A55. Stewed chicken dish ~ FRICASSEE +A59. Notions, in Nice ~ IDEES +A63. Bean in succotash ~ LIMA +A64. Exactly what was needed ~ HEAVENSENT +A66. Roman god of love ~ AMOR +A67. Shrek and his kind ~ OGRES +A68. Bear, in Latin ~ URSA +A69. Look after ~ TEND +A70. Cup, in Cannes ~ TASSE +A71. Sonnet writer ~ POET + +D1. Longtime dog food brand ~ ALPO +D2. Boxing match ~ BOUT +D3. Memorization method ~ ROTE +D4. Turkish travelers' inn ~ IMARET +D5. Slow, in brand names ~ SLO +D6. Soft powdery mineral ~ TALC +D7. Norse mythological collection ~ EDDA +D8. Musk who founded SpaceX ~ ELON +D9. Give a new title to ~ RENAME +D10. Doting family elders ~ GRANDPAS +D11. Hoffman of the Chicago Seven ~ ABBIE +D12. Famed Michelangelo sculpture ~ PIETA +D13. Compound from acid and alcohol ~ ESTER +D18. Big to-do ~ HOOHA +D22. Yeses in the Senate ~ AYES +D24. Riverbed deposit ~ SILT +D26. Mischievous sprites ~ IMPS +D27. Croft of game and film ~ LARA +D28. Ireland, poetically ~ ERIN +D29. Word of thanks in Paris ~ MERCI +D30. Ken who investigated Clinton ~ STARR +D31. One threading skates ~ LACER +D35. Squander, as a lead ~ BLOW +D36. Avis preceder ~ RARA +D37. Like a good quiche ~ EGGY +D39. Catholic sympathy keepsake ~ MASSCARD +D41. Boat's backbone ~ KEEL +D44. "Barbie Girl" band ~ AQUA +D46. Calvin of fashion ~ KLEIN +D49. Net result ~ UPSHOT +D50. Makes sense ~ ADDSUP +D51. Key with four flats ~ AFLAT +D52. Felony, e.g. ~ CRIME +D53. "The Lion King" meerkat ~ TIMON +D56. Sonic the Hedgehog's company ~ SEGA +D57. Corn-on-the-cob units ~ EARS +D58. Holiday preludes ~ EVES +D60. Architect Saarinen ~ EERO +D61. Suspense ending ~ ENSE +D62. Pronto, in the ER ~ STAT +D65. Compass heading: Abbr. ~ ESE diff --git a/Puzzles/Crossmate Starter/cm-starter-0006.xd b/Puzzles/Crossmate Starter/cm-starter-0006.xd @@ -0,0 +1,105 @@ +Title: Crossmate Starter #6 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 719 +Seed: 1779138943549478 +Fill Score: 10215 + + +CALLA#APAR#SPCA +AGAIN#MARE#SHIN +SATAN#PLACETOGO +ATHROB##BANANAS +SEE#URSA#SORER# +###DNATEST##BET +ATTIC#ART#WHITE +LOIRE#TOE#HALTS +TAMER#USE#ISLES +ODE##NEOLITH### +#SABRA#LYRE#SAL +ATLEAST##SWIPES +TOOTHSOME#ANITA +KONA#AWOL#SCENT +ALES#UNDO#HALAS + + +A1. Lily variety ~ CALLA +A6. Even, golf-wise ~ APAR +A10. Shelter org. ~ SPCA +A14. Once more ~ AGAIN +A15. Female horse ~ MARE +A16. Lower leg part ~ SHIN +A17. Old Scratch ~ SATAN +A18. Vacation destination ~ PLACETOGO +A20. Pulsing ~ ATHROB +A22. Completely crazy ~ BANANAS +A23. Get it now ~ SEE +A24. Bear, in Latin ~ URSA +A27. More aching ~ SORER +A28. Paternity proof ~ DNATEST +A30. Place a wager ~ BET +A32. Space beneath the roof ~ ATTIC +A35. Museum subject ~ ART +A36. Chess side that moves first ~ WHITE +A38. Longest river in France ~ LOIRE +A39. Sock's tip ~ TOE +A40. Brings to a stop ~ HALTS +A41. More docile ~ TAMER +A42. Put to work ~ USE +A43. Archipelago units ~ ISLES +A44. Keats work ~ ODE +A45. New Stone Age implement ~ NEOLITH +A47. Native-born Israeli ~ SABRA +A50. Orpheus's instrument ~ LYRE +A51. Mule of Erie Canal song ~ SAL +A54. No fewer than ~ ATLEAST +A56. Steals, slangily ~ SWIPES +A58. Delicious ~ TOOTHSOME +A61. Singer Baker ~ ANITA +A62. Hawaiian coffee region ~ KONA +A63. Missing from base, briefly ~ AWOL +A64. Perfume quality ~ SCENT +A65. Pub pints ~ ALES +A66. Ctrl-Z action ~ UNDO +A67. Bears founder George ~ HALAS + +D1. Spanish homes ~ CASAS +D2. Banded gemstone ~ AGATE +D3. Wood-turning machine ~ LATHE +D4. Teller of falsehoods ~ LIAR +D5. Play-by-play voice ~ ANNOUNCER +D6. Guitarist's amplifier, briefly ~ AMP +D7. Close buddy ~ PAL +D8. Saudi, e.g. ~ ARAB +D9. Replace an actor in ~ RECAST +D10. Cool giant's spectral class ~ SSTAR +D11. Monthly carrier charge ~ PHONEBILL +D12. Pack item with a filter ~ CIGARETTE +D13. Spanish years ~ ANOS +D19. Producer Brian ~ ENO +D21. Lingerie piece ~ BRA +D25. Liberty in the harbor, e.g. ~ STATUE +D26. Spray can ~ AEROSOL +D28. Grave, as a warning ~ DIRE +D29. Cold and hard, like a gaze ~ STEELY +D31. Hardy's d'Urberville heroine ~ TESS +D32. Choir voice between soprano and tenor ~ ALTO +D33. Inedible woodland fungus ~ TOADSTOOL +D34. Welcome solitude ~ TIMEALONE +D36. Cover up wrongdoing ~ WHITEWASH +D37. Jumble together ~ HASH +D45. Bahamas capital ~ NASSAU +D46. April collector, in brief ~ IRS +D48. Early test versions ~ BETAS +D49. Cheerleader's syllable ~ RAH +D51. Salesperson's pitch ~ SPIEL +D52. Major health insurer ~ AETNA +D53. Future attorneys' exams ~ LSATS +D54. Aleutian island ~ ATKA +D55. Hamlet, e.g. ~ TOWN +D57. Machu Picchu builder ~ INCA +D59. Game tweak, informally ~ MOD +D60. "Mr. Blue Sky" band, briefly ~ ELO diff --git a/Puzzles/Crossmate Starter/cm-starter-0007.xd b/Puzzles/Crossmate Starter/cm-starter-0007.xd @@ -0,0 +1,105 @@ +Title: Crossmate Starter #7 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 1090 +Seed: 1779139007573129 +Fill Score: 9832 + + +BREAST#AIMS#IRS +EARNER#QTIP#GET +SYDNEYAUSTRALIA +SEES#IDA##IRONY +####ANDSOITGOES +URGING##OREO### +LEARN#ECHO#SLOT +NEUROSCIENTISTS +ALLI#AROD#REATA +###GURU##NESTOR +BANANASEATS#### +EMITS##EWE#APSE +TAKETOONESHEELS +ATE#OARS#TOOTOO +SIS#PREY#SENSES + + +A1. Poultry serving option ~ BREAST +A7. Goals or objectives ~ AIMS +A11. Form 1040 agency ~ IRS +A14. Household breadwinner ~ EARNER +A15. Cotton swab brand ~ QTIP +A16. Manage to obtain ~ GET +A17. Where the 2000 Summer Olympics were held ~ SYDNEYAUSTRALIA +A20. Notices ~ SEES +A21. Oscar-winning 2014 Polish film ~ IDA +A22. Outcome contrary to expectation ~ IRONY +A23. Billy Joel ballad of resignation ~ ANDSOITGOES +A26. Strong prodding ~ URGING +A30. Cookie with a twistable design ~ OREO +A31. Pick up, as a skill ~ LEARN +A32. Smart speaker by Amazon ~ ECHO +A34. Opening in a schedule ~ SLOT +A38. Brain researchers ~ NEUROSCIENTISTS +A41. Over-the-counter diet aid brand ~ ALLI +A42. Slugger Rodriguez's nickname ~ AROD +A43. Cowpoke's rope ~ REATA +A44. Spiritual mentor ~ GURU +A46. Wise elder of the Iliad ~ NESTOR +A47. Long seats on Sting-Ray bikes ~ BANANASEATS +A52. Gives off, as fumes ~ EMITS +A53. Female of the flock ~ EWE +A54. Vaulted church recess ~ APSE +A58. Flee in a hurry ~ TAKETOONESHEELS +A62. Had a meal ~ ATE +A63. Crew team's tools ~ OARS +A64. Overly, repeated for emphasis ~ TOOTOO +A65. Informal sibling ~ SIS +A66. Predator's target ~ PREY +A67. Sight, smell, and three others ~ SENSES + +D1. Truman's first lady ~ BESS +D2. Comic actress Martha ~ RAYE +D3. Earth, in Essen ~ ERDE +D4. Columnist Landers and others ~ ANNS +D5. Get the picture ~ SEE +D6. Difficult, as times ~ TRYING +D7. Blue-green shades ~ AQUAS +D8. Possessive pronoun ~ ITS +D9. Cambridge tech sch. ~ MIT +D10. Lemon-lime soft drink ~ SPRITE +D11. Dome of packed snow ~ IGLOO +D12. Queen, in Quebec ~ REINE +D13. Doesn't budge ~ STAYS +D18. Tack on ~ ADD +D19. Fleets of merchant vessels ~ ARGOSIES +D23. ___ Domini ~ ANNO +D24. Reacted to the fireworks ~ OOHED +D25. Nine-iron, e.g. ~ IRON +D26. Forearm bone ~ ULNA +D27. Stagger about ~ REEL +D28. Asterix's homeland ~ GAUL +D29. Supply water to fields ~ IRRIGATE +D32. Off-white tones ~ ECRUS +D33. AFL's longtime partner ~ CIO +D35. Future attorney's exam ~ LSAT +D36. Bus driver on The Simpsons ~ OTTO +D37. Old Russian autocrat ~ TSAR +D39. Novelist Gruen ~ SARA +D40. Very, in Versailles ~ TRES +D45. Clear, as a clogged drain ~ UNSTOP +D46. Atomic experiments, for short ~ NTESTS +D47. Pre-release software versions ~ BETAS +D48. Cremona violin-making family ~ AMATI +D49. Swoosh-branded sneakers ~ NIKES +D50. Itsy-bitsy ~ EENSY +D51. Jaw-dropping feeling ~ AWE +D54. Eternity, poetically ~ AEON +D55. Household companion animals ~ PETS +D56. Gin-flavoring berry ~ SLOE +D57. Those, in Spanish ~ ESOS +D59. Galley propeller ~ OAR +D60. Mined raw material ~ ORE +D61. Tool for weeding ~ HOE diff --git a/Puzzles/Crossmate Starter/cm-starter-0008.xd b/Puzzles/Crossmate Starter/cm-starter-0008.xd @@ -0,0 +1,103 @@ +Title: Crossmate Starter #8 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 1093 +Seed: 1779139050607596 +Fill Score: 12113 + + +SHOO#WORM#OSCAR +LANE#APES#NEATO +ORES#LEAD#EATEN +SPITANDPOLISH## +HOLEDUP#SYD#ERA +####OTIS#SANDAL +NASAL#ELMO#ERMA +ARTIFICIALBRAIN +FRED#SEEN#ROLES +TAVERN#RICO#### +AYE#EOS#FLOTSAM +##DONTTREADONME +MOOLA#ROSS#TOOL +ADREM#AITS#ARCO +REESE#PLOY#LEON + + +A1. Beat it! ~ SHOO +A5. Early bird's prize ~ WORM +A9. Award for a Best Picture winner ~ OSCAR +A14. Bowling alley division ~ LANE +A15. Zoo primates ~ APES +A16. Bygone slang for "cool" ~ NEATO +A17. Mined rocks ~ ORES +A18. Front-page story's place ~ LEAD +A19. All gone, as dinner ~ EATEN +A20. Military neatness drill ~ SPITANDPOLISH +A23. Hiding out ~ HOLEDUP +A24. Pink Floyd's Barrett ~ SYD +A25. Pitcher's stat ~ ERA +A28. Big name in elevators ~ OTIS +A30. Open-toed footwear ~ SANDAL +A32. Like a congested voice ~ NASAL +A36. Tickle Me toy of the '90s ~ ELMO +A38. Humorist Bombeck ~ ERMA +A39. Sci-fi computer's mind ~ ARTIFICIALBRAIN +A42. Mr. Flintstone ~ FRED +A43. Witnessed ~ SEEN +A44. Acting parts ~ ROLES +A45. Neighborhood watering hole ~ TAVERN +A47. Mob-fighting law, briefly ~ RICO +A49. Sailor's "yes" ~ AYE +A50. Dawn goddess of myth ~ EOS +A52. Wreckage adrift ~ FLOTSAM +A57. Gadsden flag motto ~ DONTTREADONME +A60. Slangy cash ~ MOOLA +A62. "Friends" paleontologist ~ ROSS +A63. Wrench or pliers ~ TOOL +A64. To the point, in Latin ~ ADREM +A65. Small river islands ~ AITS +A66. With the bow, in music ~ ARCO +A67. Witherspoon of "Wild" ~ REESE +A68. Sly tactic ~ PLOY +A69. Natalie Portman's "The Professional" mentor ~ LEON + +D1. Wade noisily ~ SLOSH +D2. The silent Marx brother ~ HARPO +D3. Negro Leagues great Buck ~ ONEIL +D4. West, to Juan ~ OESTE +D5. Wood prized for furniture ~ WALNUT +D6. Newspaper opinion column ~ OPEDPIECE +D7. Harvest, as wheat ~ REAP +D8. Pre-Windows operating system ~ MSDOS +D9. Upstate New York native nation ~ ONEIDA +D10. Bodies between continents ~ SEAS +D11. Notre-Dame, for one ~ CATHEDRAL +D12. Had lunch ~ ATE +D13. Hermione's pal Weasley ~ RON +D21. Dictator Hitler ~ ADOLF +D22. Disinfectant brand ~ LYSOL +D26. Plant fiber like flax ~ RAMIE +D27. Alda and Rickman ~ ALANS +D29. More cunning ~ SLIER +D31. Emperor who fiddled, supposedly ~ NERO +D32. '94 trade pact, for short ~ NAFTA +D33. Dazzling assortment ~ ARRAY +D34. Dock laborer ~ STEVEDORE +D35. Senator's helper ~ AIDE +D37. Revolutionary's declaration ~ MANIFESTO +D40. Playground comeback ~ ISNOT +D41. Sulk moodily ~ BROOD +D46. Give a new title to ~ RENAME +D48. Sophisticated and stylish ~ CLASSY +D51. Watchband ~ STRAP +D53. Add up ~ TOTAL +D54. Sound from a deep sleeper ~ SNORE +D55. Old gas brand now under BP ~ AMOCO +D56. Honeydew, for one ~ MELON +D58. Bullring shouts ~ OLES +D59. Stir up, as waters ~ ROIL +D60. Spoil ~ MAR +D61. Keats verse ~ ODE diff --git a/Puzzles/Crossmate Starter/cm-starter-0009.xd b/Puzzles/Crossmate Starter/cm-starter-0009.xd @@ -0,0 +1,107 @@ +Title: Crossmate Starter #9 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 1030 +Seed: 1779139092619754 +Fill Score: 10528 + + +ATIP#POLAR#LISA +SASH#ELUDE#IAMB +ACNE#SALON#EMUS +MOONSOFURANUS## +ISTOO###ELO#ODE +###LIVID##NADIA +BOA#REMORSELESS +ALLY#SANAA#PACT +SILENTMOVIE#DOS +IVANA##TELAR### +CAB#SON###COAST +##OUTSIDECHANCE +IMAC#MOOLA#REAM +CARL#ABOMB#AARP +YODA#NEROS#TREE + + +A1. Listing, as a hat ~ ATIP +A5. Diametrically opposed ~ POLAR +A10. Bart's brainy sister ~ LISA +A14. Pageant winner's wear ~ SASH +A15. Slip away from ~ ELUDE +A16. Sonnet's basic foot ~ IAMB +A17. Teen skin woe ~ ACNE +A18. Hair styling spot ~ SALON +A19. Flightless Aussie birds ~ EMUS +A20. Titania and Oberon, e.g. ~ MOONSOFURANUS +A23. Playground retort ~ ISTOO +A24. Chess rating system ~ ELO +A25. Poem of praise ~ ODE +A28. Absolutely furious ~ LIVID +A32. Gymnast Comaneci ~ NADIA +A34. Constrictor snake ~ BOA +A37. Showing no regret ~ REMORSELESS +A40. NATO partner ~ ALLY +A42. Yemen's capital ~ SANAA +A43. Formal agreement ~ PACT +A44. "The Artist," notably ~ SILENTMOVIE +A47. Hairstyles, casually ~ DOS +A48. First Mrs. Trump ~ IVANA +A49. Weblike, in anatomy ~ TELAR +A51. Hailed ride ~ CAB +A52. Junior, to Dad ~ SON +A55. Ride without pedaling ~ COAST +A59. Long shot ~ OUTSIDECHANCE +A64. Apple desktop ~ IMAC +A66. Cash, slangily ~ MOOLA +A67. 500 sheets of paper ~ REAM +A68. "Up" hero Fredricksen ~ CARL +A69. Hiroshima weapon, informally ~ ABOMB +A70. Org. for seniors ~ AARP +A71. Jedi master of "Star Wars" ~ YODA +A72. Ancient Roman tyrants ~ NEROS +A73. Oak or elm ~ TREE + +D1. Words of agreement ~ ASAMI +D2. Tuesday specials? ~ TACOS +D3. Childish denial ~ ISNOT +D4. Carbolic acid ~ PHENOL +D5. Mexican money ~ PESO +D6. "Frozen" snowman ~ OLAF +D7. Real doozy ~ LULU +D8. Worship ~ ADORE +D9. Kidney-related ~ RENAL +D10. Stead ~ LIEU +D11. My parents will kill me! ~ IAMSODEAD +D12. Dallas school, in brief ~ SMU +D13. Six-pack muscles ~ ABS +D21. Paris evening ~ SOIR +D22. Zero ~ NONE +D26. Studio 54 genre ~ DISCO +D27. Bridge seats opposite Wests ~ EASTS +D29. Three-piece suit piece ~ VEST +D30. Mosque leader ~ IMAM +D31. Words of prohibition ~ DONOT +D33. Matterhorn, for one ~ ALP +D34. Plain and simple ~ BASIC +D35. Twins great Tony ~ OLIVA +D36. Conductor's cry ~ ALLABOARD +D38. All-night dance party ~ RAVE +D39. Catch the wind ~ SAIL +D41. Strong craving ~ YEN +D45. Caricaturist Thomas ~ NAST +D46. Apiece ~ EACH +D50. Bellow at ~ ROARAT +D53. Ottoman Empire founder ~ OSMAN +D54. Grieving figure of Greek myth ~ NIOBE +D56. Close, in verse ~ ANEAR +D57. Spook ~ SCARE +D58. Arizona State's city ~ TEMPE +D60. Bruins' school ~ UCLA +D61. Knock spot ~ DOOR +D62. Sesame Street giggler ~ ELMO +D63. Cabernets, casually ~ CABS +D64. Like winter roads ~ ICY +D65. Zedong of China ~ MAO diff --git a/Puzzles/Crossmate Starter/cm-starter-0010.xd b/Puzzles/Crossmate Starter/cm-starter-0010.xd @@ -0,0 +1,107 @@ +Title: Crossmate Starter #10 +CmVer: 3 +Revision: 1 +Bundle: cm-starter +Publisher: Michael Camilleri +Date: 2026-05-18 +Grid Index: 14 +Seed: 1779139252673327 +Fill Score: 10454 + + +RAFT#ARABY#AGOG +ADES#SETAE#ROSE +VERA#HAVANAGILA +ELM#CAL###HONOR +NEILARMSTRONG## +###ESP#TROY#ADA +ISAAC#LOEB#SWIT +SUNDAEONABANANA +ARCS#COED#RAYON +WEE#NOIR#ARI### +##SCENESTEALING +SITES###INN#MAR +PROATHLETE#LAVA +CARS#AIOLI#AGED +ANSE#MUSED#PELE + + +A1. Whitewater vessel ~ RAFT +A5. Joyce story in "Dubliners" ~ ARABY +A10. All worked up ~ AGOG +A14. Lemonade and limeade ~ ADES +A15. Caterpillar bristles ~ SETAE +A16. Bouquet centerpiece ~ ROSE +A17. Actress Farmiga ~ VERA +A18. Joyous hora standard ~ HAVANAGILA +A20. Shade tree on Main Street ~ ELM +A21. Berkeley school, casually ~ CAL +A22. Code word at a military academy ~ HONOR +A23. First human on the moon ~ NEILARMSTRONG +A28. Mind-reading gift, briefly ~ ESP +A29. Site of a famous wooden horse ~ TROY +A30. Accessibility law, in brief ~ ADA +A33. 2012 Gulf hurricane ~ ISAAC +A36. Lisa with the hit "Stay" ~ LOEB +A37. Loretta of "M*A*S*H" ~ SWIT +A38. What a split is, basically ~ SUNDAEONABANANA +A41. Curved paths ~ ARCS +A42. Like most universities now ~ COED +A43. Viscose fabric ~ RAYON +A44. Tiny bit smaller ~ WEE +A45. Genre of shadowy films ~ NOIR +A46. Gold of "Entourage" ~ ARI +A47. Upstaging the rest of the cast ~ SCENESTEALING +A53. Web destinations ~ SITES +A55. Roadside lodging ~ INN +A56. Put a blemish on ~ MAR +A57. Salaried competitor ~ PROATHLETE +A61. Molten volcanic flow ~ LAVA +A62. Pixar movie with Lightning McQueen ~ CARS +A63. Garlic-laced mayonnaise ~ AIOLI +A64. Like a vintage Cabernet ~ AGED +A65. Bundren patriarch in Faulkner ~ ANSE +A66. Reflected aloud ~ MUSED +A67. Soccer great with three World Cups ~ PELE + +D1. Poe's "nevermore" bird ~ RAVEN +D2. "Hello" singer, 2015 ~ ADELE +D3. Physicist with a Chicago lab named for him ~ FERMI +D4. Airport screening org. ~ TSA +D5. Note enharmonic with B-flat ~ ASHARP +D6. Monarch's domain ~ REALM +D7. Off-road four-wheeler, briefly ~ ATV +D8. Pasture bleat ~ BAA +D9. Strong craving ~ YEN +D10. Noble gas, element 18 ~ ARGON +D11. Like a farewell party ~ GOINGAWAY +D12. Norway's capital ~ OSLO +D13. Camping equipment ~ GEAR +D19. Greeting from the deck ~ AHOY +D21. First conspirator to stab Caesar ~ CASCA +D24. Sleuth's clues ~ LEADS +D25. Habitual potheads ~ STONERS +D26. Tire's gripping pattern ~ TREAD +D27. Stark heir in "Game of Thrones" ~ ROBB +D31. The Flintstones' pet ~ DINO +D32. Inverse tangent, briefly ~ ATAN +D33. ___ it coming ~ ISAW +D34. Why not! ~ SURE +D35. Forebears ~ ANCESTORS +D36. Army lieutenant, slangily ~ LOOIE +D37. Slow garden mollusk ~ SNAIL +D39. Macro or micro subject, for short ~ ECON +D40. Isle in the Firth of Clyde ~ ARRAN +D45. Eagle's lofty home ~ NEST +D46. Virgil's epic ~ AENEID +D48. Knock it off ~ CEASE +D49. Heavyweight championship, say ~ TITLE +D50. Carefully cultivated persona ~ IMAGE +D51. Orange variety ~ NAVEL +D52. Report card mark ~ GRADE +D53. Animal welfare org. ~ SPCA +D54. Tehran's nation ~ IRAN +D58. Shameless overactor ~ HAM +D59. Lucy of "Kill Bill" ~ LIU +D60. Greek goddess of dawn ~ EOS +D61. One circuit of the track ~ LAP diff --git a/Scripts/bundle-puzzles.sh b/Scripts/bundle-puzzles.sh @@ -4,8 +4,16 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" -SOURCE_DIR="${1:-${REPO_DIR}/Crossmake/Picked}" -DEST_DIR="${2:-${REPO_DIR}/Puzzles/Bundled}" +if (($# < 2)) || [[ -z "$1" || -z "$2" ]]; then + echo "Usage: $0 <bundle-id> <title-prefix> [output-dir]" >&2 + exit 1 +fi + +BUNDLE_ID="$1" +TITLE_PREFIX="$2" +DEST_DIR="${3:-./Puzzles}/${TITLE_PREFIX}" + +SOURCE_DIR="${REPO_DIR}/Crossmake/Picked" if [[ ! -d "$SOURCE_DIR" ]]; then echo "Source directory not found: $SOURCE_DIR" >&2 @@ -20,27 +28,25 @@ fi mkdir -p "$DEST_DIR" -highest=0 -for path in "$DEST_DIR"/Crossmate-*.xd; do - [[ -e "$path" ]] || continue - filename="${path##*/}" - [[ "$filename" =~ ^Crossmate-([0-9]+)\.xd$ ]] || continue - number=$((10#${BASH_REMATCH[1]})) - if ((number > highest)); then - highest="$number" - fi -done - -next=$((highest + 1)) +next=1 first="$next" for src in "${source_files[@]}"; do - printf -v dest_name "Crossmate-%04d.xd" "$next" + printf -v dest_name "%s-%04d.xd" "$BUNDLE_ID" "$next" dest="${DEST_DIR}/${dest_name}" - awk -v title="Title: Crossmate #${next}" \ - '!retitled && /^Title:/ { print title; retitled = 1; next } { print }' \ - "$src" >"$dest" - echo "Bundled ${src##*/} -> ${dest_name} (Title: Crossmate #${next})" + # Rewrite the XD frontmatter block (everything before the first blank line), + # leaving the grid and clue text untouched. + awk -v title="Title: ${TITLE_PREFIX} #${next}" -v bundle="Bundle: ${BUNDLE_ID}" ' + BEGIN { frontmatter = 1 } + frontmatter && /^[[:space:]]*$/ { frontmatter = 0 } + frontmatter && /^Title:/ { print title; next } + frontmatter && /^Bundle:/ { print bundle; next } + frontmatter && /^Author:/ { next } + frontmatter && /^Copyright:/ { next } + frontmatter && /^Publisher:/ { print "Publisher: Michael Camilleri"; next } + { print } + ' "$src" >"$dest" + echo "Bundled ${src##*/} -> ${dest_name} (Title: ${TITLE_PREFIX} #${next})" next=$((next + 1)) done diff --git a/Tests/Unit/PuzzleCatalogTests.swift b/Tests/Unit/PuzzleCatalogTests.swift @@ -4,28 +4,40 @@ import Testing @Suite("PuzzleCatalog") struct PuzzleCatalogTests { - @Test("Bundled puzzle resources are discoverable") - func bundledPuzzleResourcesAreDiscoverable() { - let puzzles = PuzzleCatalog.bundledPuzzles() + @Test("Puzzle bundles are discoverable") + func puzzleBundlesAreDiscoverable() { + let bundles = PuzzleCatalog.bundles() + #expect(bundles.count == 1) + + let starter = bundles.first { $0.name == "Crossmate Starter" } + #expect(starter != nil) + + let puzzles = starter?.puzzles ?? [] #expect(puzzles.count == 10) - #expect(puzzles.map(\.title).contains("Crossmake #1")) - #expect(puzzles.map(\.title).contains("Crossmake #10")) + #expect(puzzles.map(\.title).contains("Crossmate Starter #1")) + #expect(puzzles.map(\.title).contains("Crossmate Starter #10")) #expect(puzzles.allSatisfy { $0.cmVersion == XD.currentCmVersion }) + #expect(puzzles.allSatisfy { $0.publisher == "Michael Camilleri" }) #expect(puzzles.map(\.id) == [ - "Crossmate-0001", - "Crossmate-0002", - "Crossmate-0003", - "Crossmate-0004", - "Crossmate-0005", - "Crossmate-0006", - "Crossmate-0007", - "Crossmate-0008", - "Crossmate-0009", - "Crossmate-0010" + "cm-starter-0001", + "cm-starter-0002", + "cm-starter-0003", + "cm-starter-0004", + "cm-starter-0005", + "cm-starter-0006", + "cm-starter-0007", + "cm-starter-0008", + "cm-starter-0009", + "cm-starter-0010" ]) } + @Test("The Debug directory is excluded from the bundles") + func debugDirectoryIsExcludedFromBundles() { + #expect(PuzzleCatalog.bundles().allSatisfy { $0.name != "Debug" }) + } + @Test("Debug puzzle resources are discoverable") func debugPuzzleResourcesAreDiscoverable() { let puzzles = PuzzleCatalog.debugPuzzles()