style(simulation): cargo fmt for generate_corporations
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -477,8 +477,7 @@ fn assign_brands(
|
||||
.iter()
|
||||
.filter(|com| {
|
||||
// Fuzzy match: commodity words appear in specialization
|
||||
com.split('_')
|
||||
.any(|word| spec.contains(word))
|
||||
com.split('_').any(|word| spec.contains(word))
|
||||
})
|
||||
.count() as f64;
|
||||
(*c, 1.0 + relevance)
|
||||
@@ -733,11 +732,7 @@ fn fill_coverage_gaps(
|
||||
let corp_id = make_corp_id(&name);
|
||||
|
||||
// Generate enough to reach the 3-corp minimum
|
||||
let current_count = report
|
||||
.commodity_coverage
|
||||
.get(com_id)
|
||||
.copied()
|
||||
.unwrap_or(0);
|
||||
let current_count = report.commodity_coverage.get(com_id).copied().unwrap_or(0);
|
||||
for _ in current_count..3 {
|
||||
let n = names::generate_name(rng, sector, &lore.category);
|
||||
let cid = make_corp_id(&n);
|
||||
@@ -793,7 +788,10 @@ fn write_output(path: &PathBuf, generated: &BTreeMap<String, GeneratedCorp>) {
|
||||
out.push_str(&format!("location_id = {:?}\n", corp.location_id));
|
||||
out.push_str(&format!("location_type = {:?}\n", corp.location_type));
|
||||
out.push_str(&format!("system_id = {:?}\n", corp.system_id));
|
||||
out.push_str(&format!("geographic_sector = {:?}\n", corp.geographic_sector));
|
||||
out.push_str(&format!(
|
||||
"geographic_sector = {:?}\n",
|
||||
corp.geographic_sector
|
||||
));
|
||||
let brands_str: Vec<String> = corp.brands.iter().map(|b| format!("{:?}", b)).collect();
|
||||
out.push_str(&format!("brands = [{}]\n", brands_str.join(", ")));
|
||||
out.push('\n');
|
||||
@@ -952,10 +950,7 @@ fn main() {
|
||||
// Print coverage summary
|
||||
println!("\n Coverage Report:");
|
||||
println!(" Total generated: {}", report.total_generated);
|
||||
println!(
|
||||
" Systems with presence: {}",
|
||||
report.system_coverage.len()
|
||||
);
|
||||
println!(" Systems with presence: {}", report.system_coverage.len());
|
||||
|
||||
let mut by_sector: BTreeMap<String, usize> = BTreeMap::new();
|
||||
for corp in generated.values() {
|
||||
@@ -984,10 +979,7 @@ fn main() {
|
||||
|
||||
// Write output
|
||||
write_output(&cli.output, &generated);
|
||||
println!(
|
||||
"\n Output written to: {}",
|
||||
cli.output.display()
|
||||
);
|
||||
println!("\n Output written to: {}", cli.output.display());
|
||||
println!(" Done.\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -16,79 +16,326 @@ use rand_chacha::ChaCha8Rng;
|
||||
|
||||
/// Core systems: cosmopolitan mix — the Reach's center of gravity.
|
||||
const CORE_NAMES: &[&str] = &[
|
||||
"Alvarez", "Benoit", "Carvalho", "Durand", "Eriksen", "Fournier", "Gao",
|
||||
"Hartmann", "Ishida", "Johansson", "Kirchner", "Lemaire", "Moreau",
|
||||
"Nakamura", "Olsson", "Pelletier", "Richter", "Saito", "Torres",
|
||||
"Ueda", "Vasquez", "Werner", "Xu", "Yamada", "Zhou", "Andersen",
|
||||
"Beaumont", "Costa", "Delacroix", "Engel", "Fujita", "Gutierrez",
|
||||
"Hayashi", "Ibarra", "Jensen", "Klein", "Laurent", "Mercier",
|
||||
"Novak", "Ortiz", "Park", "Reuter", "Suzuki", "Takahashi",
|
||||
"Ulrich", "Valentin", "Wagner", "Xie", "Yilmaz", "Zhang",
|
||||
"Alvarez",
|
||||
"Benoit",
|
||||
"Carvalho",
|
||||
"Durand",
|
||||
"Eriksen",
|
||||
"Fournier",
|
||||
"Gao",
|
||||
"Hartmann",
|
||||
"Ishida",
|
||||
"Johansson",
|
||||
"Kirchner",
|
||||
"Lemaire",
|
||||
"Moreau",
|
||||
"Nakamura",
|
||||
"Olsson",
|
||||
"Pelletier",
|
||||
"Richter",
|
||||
"Saito",
|
||||
"Torres",
|
||||
"Ueda",
|
||||
"Vasquez",
|
||||
"Werner",
|
||||
"Xu",
|
||||
"Yamada",
|
||||
"Zhou",
|
||||
"Andersen",
|
||||
"Beaumont",
|
||||
"Costa",
|
||||
"Delacroix",
|
||||
"Engel",
|
||||
"Fujita",
|
||||
"Gutierrez",
|
||||
"Hayashi",
|
||||
"Ibarra",
|
||||
"Jensen",
|
||||
"Klein",
|
||||
"Laurent",
|
||||
"Mercier",
|
||||
"Novak",
|
||||
"Ortiz",
|
||||
"Park",
|
||||
"Reuter",
|
||||
"Suzuki",
|
||||
"Takahashi",
|
||||
"Ulrich",
|
||||
"Valentin",
|
||||
"Wagner",
|
||||
"Xie",
|
||||
"Yilmaz",
|
||||
"Zhang",
|
||||
];
|
||||
|
||||
/// North reach: Nordic, Scottish, northern European — Calloway heritage.
|
||||
const NORTH_REACH_NAMES: &[&str] = &[
|
||||
"Andersson", "Bjornsson", "Calloway", "Dalsgaard", "Eklund", "Falk",
|
||||
"Grimstad", "Hedlund", "Ivarsson", "Jonasson", "Kirkpatrick", "Lindqvist",
|
||||
"MacLeod", "Nordstrom", "Olafsson", "Pettersson", "Rehn", "Strandberg",
|
||||
"Thorsen", "Ulvskog", "Vikstrom", "Wahlberg", "Aberg", "Berglund",
|
||||
"Carlsen", "Dalgaard", "Engstrom", "Forsell", "Gustafsson", "Halvorsen",
|
||||
"Ingvarsson", "Jansson", "Knudsen", "Lundin", "MacPherson", "Nylund",
|
||||
"Ostergaard", "Palsson", "Rasmussen", "Sjoberg", "Toft", "Ulfsson",
|
||||
"Vestergaard", "Wiklund", "Aasen", "Brannstrom", "Dahl", "Eide",
|
||||
"Friberg", "Gren",
|
||||
"Andersson",
|
||||
"Bjornsson",
|
||||
"Calloway",
|
||||
"Dalsgaard",
|
||||
"Eklund",
|
||||
"Falk",
|
||||
"Grimstad",
|
||||
"Hedlund",
|
||||
"Ivarsson",
|
||||
"Jonasson",
|
||||
"Kirkpatrick",
|
||||
"Lindqvist",
|
||||
"MacLeod",
|
||||
"Nordstrom",
|
||||
"Olafsson",
|
||||
"Pettersson",
|
||||
"Rehn",
|
||||
"Strandberg",
|
||||
"Thorsen",
|
||||
"Ulvskog",
|
||||
"Vikstrom",
|
||||
"Wahlberg",
|
||||
"Aberg",
|
||||
"Berglund",
|
||||
"Carlsen",
|
||||
"Dalgaard",
|
||||
"Engstrom",
|
||||
"Forsell",
|
||||
"Gustafsson",
|
||||
"Halvorsen",
|
||||
"Ingvarsson",
|
||||
"Jansson",
|
||||
"Knudsen",
|
||||
"Lundin",
|
||||
"MacPherson",
|
||||
"Nylund",
|
||||
"Ostergaard",
|
||||
"Palsson",
|
||||
"Rasmussen",
|
||||
"Sjoberg",
|
||||
"Toft",
|
||||
"Ulfsson",
|
||||
"Vestergaard",
|
||||
"Wiklund",
|
||||
"Aasen",
|
||||
"Brannstrom",
|
||||
"Dahl",
|
||||
"Eide",
|
||||
"Friberg",
|
||||
"Gren",
|
||||
];
|
||||
|
||||
/// South reach: Eastern European, East Asian industrial — Stalownia corridor.
|
||||
const SOUTH_REACH_NAMES: &[&str] = &[
|
||||
"Adamski", "Baranov", "Chernov", "Dubois", "Egorov", "Filipov",
|
||||
"Gromov", "Horvat", "Ivanova", "Jankovic", "Kowalski", "Lazarev",
|
||||
"Morozov", "Novikov", "Ostrowski", "Petrov", "Reznik", "Sokolov",
|
||||
"Tkachenko", "Uvarov", "Volkov", "Wojcik", "Yakimov", "Zheng",
|
||||
"Babic", "Chernyshev", "Dragunov", "Fedorov", "Grushevsky", "Havel",
|
||||
"Ito", "Jovanovic", "Katsaros", "Lebedev", "Mazur", "Nemec",
|
||||
"Ochoa", "Popov", "Radic", "Smirnov", "Tanaka", "Urasawa",
|
||||
"Vasiliev", "Watanabe", "Xiang", "Yegorov", "Zaytsev", "Borysko",
|
||||
"Chen", "Dimitrov",
|
||||
"Adamski",
|
||||
"Baranov",
|
||||
"Chernov",
|
||||
"Dubois",
|
||||
"Egorov",
|
||||
"Filipov",
|
||||
"Gromov",
|
||||
"Horvat",
|
||||
"Ivanova",
|
||||
"Jankovic",
|
||||
"Kowalski",
|
||||
"Lazarev",
|
||||
"Morozov",
|
||||
"Novikov",
|
||||
"Ostrowski",
|
||||
"Petrov",
|
||||
"Reznik",
|
||||
"Sokolov",
|
||||
"Tkachenko",
|
||||
"Uvarov",
|
||||
"Volkov",
|
||||
"Wojcik",
|
||||
"Yakimov",
|
||||
"Zheng",
|
||||
"Babic",
|
||||
"Chernyshev",
|
||||
"Dragunov",
|
||||
"Fedorov",
|
||||
"Grushevsky",
|
||||
"Havel",
|
||||
"Ito",
|
||||
"Jovanovic",
|
||||
"Katsaros",
|
||||
"Lebedev",
|
||||
"Mazur",
|
||||
"Nemec",
|
||||
"Ochoa",
|
||||
"Popov",
|
||||
"Radic",
|
||||
"Smirnov",
|
||||
"Tanaka",
|
||||
"Urasawa",
|
||||
"Vasiliev",
|
||||
"Watanabe",
|
||||
"Xiang",
|
||||
"Yegorov",
|
||||
"Zaytsev",
|
||||
"Borysko",
|
||||
"Chen",
|
||||
"Dimitrov",
|
||||
];
|
||||
|
||||
/// West reach: German, Central European — Compact territory, Westphalian influence.
|
||||
const WEST_REACH_NAMES: &[&str] = &[
|
||||
"Albrecht", "Baumann", "Christensen", "Dietrich", "Eisenberg", "Fischer",
|
||||
"Gruber", "Hoffmann", "Ingolstadt", "Jaeger", "Kessler", "Lehmann",
|
||||
"Mueller", "Neumann", "Obermann", "Pfeiffer", "Quandt", "Roth",
|
||||
"Schaefer", "Thiel", "Urban", "Vogt", "Weidenfeld", "Ziegler",
|
||||
"Becker", "Claussen", "Dorfmann", "Eberhardt", "Fleischer", "Gerstner",
|
||||
"Haber", "Imhof", "Jung", "Kraemer", "Linden", "Metzger",
|
||||
"Niedermann", "Opitz", "Preuss", "Raabe", "Steinbach", "Trautmann",
|
||||
"Unger", "Vollmer", "Winterberg", "Zahn", "Auerbach", "Bruckner",
|
||||
"Dahlem", "Eckhardt",
|
||||
"Albrecht",
|
||||
"Baumann",
|
||||
"Christensen",
|
||||
"Dietrich",
|
||||
"Eisenberg",
|
||||
"Fischer",
|
||||
"Gruber",
|
||||
"Hoffmann",
|
||||
"Ingolstadt",
|
||||
"Jaeger",
|
||||
"Kessler",
|
||||
"Lehmann",
|
||||
"Mueller",
|
||||
"Neumann",
|
||||
"Obermann",
|
||||
"Pfeiffer",
|
||||
"Quandt",
|
||||
"Roth",
|
||||
"Schaefer",
|
||||
"Thiel",
|
||||
"Urban",
|
||||
"Vogt",
|
||||
"Weidenfeld",
|
||||
"Ziegler",
|
||||
"Becker",
|
||||
"Claussen",
|
||||
"Dorfmann",
|
||||
"Eberhardt",
|
||||
"Fleischer",
|
||||
"Gerstner",
|
||||
"Haber",
|
||||
"Imhof",
|
||||
"Jung",
|
||||
"Kraemer",
|
||||
"Linden",
|
||||
"Metzger",
|
||||
"Niedermann",
|
||||
"Opitz",
|
||||
"Preuss",
|
||||
"Raabe",
|
||||
"Steinbach",
|
||||
"Trautmann",
|
||||
"Unger",
|
||||
"Vollmer",
|
||||
"Winterberg",
|
||||
"Zahn",
|
||||
"Auerbach",
|
||||
"Bruckner",
|
||||
"Dahlem",
|
||||
"Eckhardt",
|
||||
];
|
||||
|
||||
/// East reach: Filipino, Korean, maritime Asian — distinctive identity.
|
||||
const EAST_REACH_NAMES: &[&str] = &[
|
||||
"Aquino", "Bautista", "Cruz", "Dalisay", "Espiritu", "Flores",
|
||||
"Garcia", "Hernandez", "Ilagan", "Jeon", "Kim", "Lim",
|
||||
"Magalang", "Navarro", "Ocampo", "Park", "Quijano", "Reyes",
|
||||
"Santos", "Tan", "Uy", "Villanueva", "Wong", "Yoo",
|
||||
"Aguilar", "Buenaventura", "Castillo", "Dizon", "Enriquez", "Fernandez",
|
||||
"Gonzales", "Hwang", "Ignacio", "Jeong", "Kwon", "Lee",
|
||||
"Marasigan", "Nakamura", "Oh", "Perez", "Ramos", "Son",
|
||||
"Tolentino", "Umali", "Valdez", "Yun", "Zamora", "Baek",
|
||||
"Choi", "Dela Cruz",
|
||||
"Aquino",
|
||||
"Bautista",
|
||||
"Cruz",
|
||||
"Dalisay",
|
||||
"Espiritu",
|
||||
"Flores",
|
||||
"Garcia",
|
||||
"Hernandez",
|
||||
"Ilagan",
|
||||
"Jeon",
|
||||
"Kim",
|
||||
"Lim",
|
||||
"Magalang",
|
||||
"Navarro",
|
||||
"Ocampo",
|
||||
"Park",
|
||||
"Quijano",
|
||||
"Reyes",
|
||||
"Santos",
|
||||
"Tan",
|
||||
"Uy",
|
||||
"Villanueva",
|
||||
"Wong",
|
||||
"Yoo",
|
||||
"Aguilar",
|
||||
"Buenaventura",
|
||||
"Castillo",
|
||||
"Dizon",
|
||||
"Enriquez",
|
||||
"Fernandez",
|
||||
"Gonzales",
|
||||
"Hwang",
|
||||
"Ignacio",
|
||||
"Jeong",
|
||||
"Kwon",
|
||||
"Lee",
|
||||
"Marasigan",
|
||||
"Nakamura",
|
||||
"Oh",
|
||||
"Perez",
|
||||
"Ramos",
|
||||
"Son",
|
||||
"Tolentino",
|
||||
"Umali",
|
||||
"Valdez",
|
||||
"Yun",
|
||||
"Zamora",
|
||||
"Baek",
|
||||
"Choi",
|
||||
"Dela Cruz",
|
||||
];
|
||||
|
||||
/// Deep frontier: mixed backgrounds from all settler waves — no dominant culture.
|
||||
const FRONTIER_NAMES: &[&str] = &[
|
||||
"Adeyemi", "Bergstrom", "Chandra", "Duval", "Emeka", "Fonseca",
|
||||
"Gupta", "Hassan", "Ibrahim", "Jansson", "Kovac", "Liu",
|
||||
"Martinez", "Nkosi", "Okafor", "Patel", "Quinn", "Rodriguez",
|
||||
"Sousa", "Thorne", "Uddin", "Varga", "Wu", "Xiong",
|
||||
"Yoshida", "Zhao", "Abara", "Beaumont", "Cardenas", "Doyle",
|
||||
"Ekwueme", "Ferreira", "Gomes", "Henriksen", "Idris", "Juma",
|
||||
"Kato", "Larsen", "Morales", "Ndlovu", "Osei", "Petrov",
|
||||
"Ruiz", "Singh", "Tavares", "Uchida", "Volkov", "Wang",
|
||||
"Yang", "Zaman",
|
||||
"Adeyemi",
|
||||
"Bergstrom",
|
||||
"Chandra",
|
||||
"Duval",
|
||||
"Emeka",
|
||||
"Fonseca",
|
||||
"Gupta",
|
||||
"Hassan",
|
||||
"Ibrahim",
|
||||
"Jansson",
|
||||
"Kovac",
|
||||
"Liu",
|
||||
"Martinez",
|
||||
"Nkosi",
|
||||
"Okafor",
|
||||
"Patel",
|
||||
"Quinn",
|
||||
"Rodriguez",
|
||||
"Sousa",
|
||||
"Thorne",
|
||||
"Uddin",
|
||||
"Varga",
|
||||
"Wu",
|
||||
"Xiong",
|
||||
"Yoshida",
|
||||
"Zhao",
|
||||
"Abara",
|
||||
"Beaumont",
|
||||
"Cardenas",
|
||||
"Doyle",
|
||||
"Ekwueme",
|
||||
"Ferreira",
|
||||
"Gomes",
|
||||
"Henriksen",
|
||||
"Idris",
|
||||
"Juma",
|
||||
"Kato",
|
||||
"Larsen",
|
||||
"Morales",
|
||||
"Ndlovu",
|
||||
"Osei",
|
||||
"Petrov",
|
||||
"Ruiz",
|
||||
"Singh",
|
||||
"Tavares",
|
||||
"Uchida",
|
||||
"Volkov",
|
||||
"Wang",
|
||||
"Yang",
|
||||
"Zaman",
|
||||
];
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -96,38 +343,106 @@ const FRONTIER_NAMES: &[&str] = &[
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
const EXTRACTION_SUFFIXES: &[&str] = &[
|
||||
"Mining Co.", "Extraction", "Resources", "Minerals", "Mining",
|
||||
"Quarry Works", "Deep Drill", "Ore Works", "Claims", "Mining & Salvage",
|
||||
"Prospecting", "Dig Co.", "Rock Works", "Shaft Mining", "Surface Mining",
|
||||
"Mining Co.",
|
||||
"Extraction",
|
||||
"Resources",
|
||||
"Minerals",
|
||||
"Mining",
|
||||
"Quarry Works",
|
||||
"Deep Drill",
|
||||
"Ore Works",
|
||||
"Claims",
|
||||
"Mining & Salvage",
|
||||
"Prospecting",
|
||||
"Dig Co.",
|
||||
"Rock Works",
|
||||
"Shaft Mining",
|
||||
"Surface Mining",
|
||||
];
|
||||
|
||||
const AGRICULTURE_SUFFIXES: &[&str] = &[
|
||||
"Farms", "Agricultural Co.", "Growers", "Harvest", "Provisions",
|
||||
"Ranchers", "Fisheries", "Food Co.", "Plantations", "Cultivators",
|
||||
"Produce", "Orchard", "Dairy", "Stockfeed", "Processing",
|
||||
"Farms",
|
||||
"Agricultural Co.",
|
||||
"Growers",
|
||||
"Harvest",
|
||||
"Provisions",
|
||||
"Ranchers",
|
||||
"Fisheries",
|
||||
"Food Co.",
|
||||
"Plantations",
|
||||
"Cultivators",
|
||||
"Produce",
|
||||
"Orchard",
|
||||
"Dairy",
|
||||
"Stockfeed",
|
||||
"Processing",
|
||||
];
|
||||
|
||||
const MANUFACTURING_SUFFIXES: &[&str] = &[
|
||||
"Manufacturing", "Works", "Industries", "Fabrication", "Engineering",
|
||||
"Precision", "Assembly", "Components", "Foundry", "Machine Works",
|
||||
"Systems", "Technical", "Metalworks", "Forging", "Production",
|
||||
"Manufacturing",
|
||||
"Works",
|
||||
"Industries",
|
||||
"Fabrication",
|
||||
"Engineering",
|
||||
"Precision",
|
||||
"Assembly",
|
||||
"Components",
|
||||
"Foundry",
|
||||
"Machine Works",
|
||||
"Systems",
|
||||
"Technical",
|
||||
"Metalworks",
|
||||
"Forging",
|
||||
"Production",
|
||||
];
|
||||
|
||||
const TRADE_LOGISTICS_SUFFIXES: &[&str] = &[
|
||||
"Freight", "Logistics", "Shipping", "Transport", "Haulage",
|
||||
"Cargo", "Transit", "Distribution", "Forwarding", "Express",
|
||||
"Lines", "Carriers", "Fleet", "Couriers", "Supply Co.",
|
||||
"Freight",
|
||||
"Logistics",
|
||||
"Shipping",
|
||||
"Transport",
|
||||
"Haulage",
|
||||
"Cargo",
|
||||
"Transit",
|
||||
"Distribution",
|
||||
"Forwarding",
|
||||
"Express",
|
||||
"Lines",
|
||||
"Carriers",
|
||||
"Fleet",
|
||||
"Couriers",
|
||||
"Supply Co.",
|
||||
];
|
||||
|
||||
const SERVICES_SUFFIXES: &[&str] = &[
|
||||
"Services", "Associates", "Consulting", "Partners", "Group",
|
||||
"Holdings", "Clinic", "Bureau", "Agency", "Office",
|
||||
"Practice", "Solutions", "Advisors", "Trust", "Institute",
|
||||
"Services",
|
||||
"Associates",
|
||||
"Consulting",
|
||||
"Partners",
|
||||
"Group",
|
||||
"Holdings",
|
||||
"Clinic",
|
||||
"Bureau",
|
||||
"Agency",
|
||||
"Office",
|
||||
"Practice",
|
||||
"Solutions",
|
||||
"Advisors",
|
||||
"Trust",
|
||||
"Institute",
|
||||
];
|
||||
|
||||
const INTELLIGENCE_SUFFIXES: &[&str] = &[
|
||||
"Analytics", "Intelligence", "Data Services", "Information", "Research",
|
||||
"Advisory", "Insights", "Consulting", "Networks", "Analysis",
|
||||
"Analytics",
|
||||
"Intelligence",
|
||||
"Data Services",
|
||||
"Information",
|
||||
"Research",
|
||||
"Advisory",
|
||||
"Insights",
|
||||
"Consulting",
|
||||
"Networks",
|
||||
"Analysis",
|
||||
];
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -203,8 +518,22 @@ mod tests {
|
||||
#[test]
|
||||
fn names_not_empty() {
|
||||
let mut rng = ChaCha8Rng::seed_from_u64(1);
|
||||
for sector in &["core", "north_reach", "south_reach", "west_reach", "east_reach", "deep_frontier"] {
|
||||
for cat in &["extraction", "agriculture", "manufacturing", "trade_logistics", "services", "intelligence"] {
|
||||
for sector in &[
|
||||
"core",
|
||||
"north_reach",
|
||||
"south_reach",
|
||||
"west_reach",
|
||||
"east_reach",
|
||||
"deep_frontier",
|
||||
] {
|
||||
for cat in &[
|
||||
"extraction",
|
||||
"agriculture",
|
||||
"manufacturing",
|
||||
"trade_logistics",
|
||||
"services",
|
||||
"intelligence",
|
||||
] {
|
||||
let name = generate_name(&mut rng, sector, cat);
|
||||
assert!(!name.is_empty(), "Empty name for {}/{}", sector, cat);
|
||||
assert!(name.contains(' '), "No space in name: {}", name);
|
||||
|
||||
Reference in New Issue
Block a user