// generate_measurements.cpp // // Simple standalone generator for 1BRC-style data, no Java/Maven needed. // // Build: // g++ -O2 -o generate_measurements generate_measurements.cpp // // Run: // ./generate_measurements 1000000000 > measurements.txt // (defaults to 1,000,000,000 rows if no argument given) // // Output format matches the original challenge: // ; // // Uses the real 413 station names + mean temperatures from the official // challenge's CreateMeasurements.java. Temperatures are generated as // station_mean + gaussian noise, clamped to [-99.9, 99.9] — the same // approach the official generator uses. // // Note: station names include UTF-8 characters (e.g. "Zürich", "Abéché"), // so save/compile this file as UTF-8. #include #include #include #include #include #include int main(int argc, char **argv) { long long numRows = 1'000'000'000LL; if (argc > 1) { numRows = std::atoll(argv[1]); if (numRows <= 0) { std::fprintf(stderr, "Invalid row count: %s\n", argv[1]); return 1; } } // Station name -> approximate mean annual temperature (Celsius). // A representative subset of real-world locations/climates. // Station name -> average temperature (Celsius), taken directly from // the official 1BRC repo's CreateMeasurements.java (413 real stations). static const std::vector> stations = { {"Abha", 18.0}, {"Abidjan", 26.0}, {"Abéché", 29.4}, {"Accra", 26.4}, {"Addis Ababa", 16.0}, {"Adelaide", 17.3}, {"Aden", 29.1}, {"Ahvaz", 25.4}, {"Albuquerque", 14.0}, {"Alexandra", 11.0}, {"Alexandria", 20.0}, {"Algiers", 18.2}, {"Alice Springs", 21.0}, {"Almaty", 10.0}, {"Amsterdam", 10.2}, {"Anadyr", -6.9}, {"Anchorage", 2.8}, {"Andorra la Vella", 9.8}, {"Ankara", 12.0}, {"Antananarivo", 17.9}, {"Antsiranana", 25.2}, {"Arkhangelsk", 1.3}, {"Ashgabat", 17.1}, {"Asmara", 15.6}, {"Assab", 30.5}, {"Astana", 3.5}, {"Athens", 19.2}, {"Atlanta", 17.0}, {"Auckland", 15.2}, {"Austin", 20.7}, {"Baghdad", 22.77}, {"Baguio", 19.5}, {"Baku", 15.1}, {"Baltimore", 13.1}, {"Bamako", 27.8}, {"Bangkok", 28.6}, {"Bangui", 26.0}, {"Banjul", 26.0}, {"Barcelona", 18.2}, {"Bata", 25.1}, {"Batumi", 14.0}, {"Beijing", 12.9}, {"Beirut", 20.9}, {"Belgrade", 12.5}, {"Belize City", 26.7}, {"Benghazi", 19.9}, {"Bergen", 7.7}, {"Berlin", 10.3}, {"Bilbao", 14.7}, {"Birao", 26.5}, {"Bishkek", 11.3}, {"Bissau", 27.0}, {"Blantyre", 22.2}, {"Bloemfontein", 15.6}, {"Boise", 11.4}, {"Bordeaux", 14.2}, {"Bosaso", 30.0}, {"Boston", 10.9}, {"Bouaké", 26.0}, {"Bratislava", 10.5}, {"Brazzaville", 25.0}, {"Bridgetown", 27.0}, {"Brisbane", 21.4}, {"Brussels", 10.5}, {"Bucharest", 10.8}, {"Budapest", 11.3}, {"Bujumbura", 23.8}, {"Bulawayo", 18.9}, {"Burnie", 13.1}, {"Busan", 15.0}, {"Cabo San Lucas", 23.9}, {"Cairns", 25.0}, {"Cairo", 21.4}, {"Calgary", 4.4}, {"Canberra", 13.1}, {"Cape Town", 16.2}, {"Changsha", 17.4}, {"Charlotte", 16.1}, {"Chiang Mai", 25.8}, {"Chicago", 9.8}, {"Chihuahua", 18.6}, {"Chișinău", 10.2}, {"Chittagong", 25.9}, {"Chongqing", 18.6}, {"Christchurch", 12.2}, {"City of San Marino", 11.8}, {"Colombo", 27.4}, {"Columbus", 11.7}, {"Conakry", 26.4}, {"Copenhagen", 9.1}, {"Cotonou", 27.2}, {"Cracow", 9.3}, {"Da Lat", 17.9}, {"Da Nang", 25.8}, {"Dakar", 24.0}, {"Dallas", 19.0}, {"Damascus", 17.0}, {"Dampier", 26.4}, {"Dar es Salaam", 25.8}, {"Darwin", 27.6}, {"Denpasar", 23.7}, {"Denver", 10.4}, {"Detroit", 10.0}, {"Dhaka", 25.9}, {"Dikson", -11.1}, {"Dili", 26.6}, {"Djibouti", 29.9}, {"Dodoma", 22.7}, {"Dolisie", 24.0}, {"Douala", 26.7}, {"Dubai", 26.9}, {"Dublin", 9.8}, {"Dunedin", 11.1}, {"Durban", 20.6}, {"Dushanbe", 14.7}, {"Edinburgh", 9.3}, {"Edmonton", 4.2}, {"El Paso", 18.1}, {"Entebbe", 21.0}, {"Erbil", 19.5}, {"Erzurum", 5.1}, {"Fairbanks", -2.3}, {"Fianarantsoa", 17.9}, {"Flores, Petén", 26.4}, {"Frankfurt", 10.6}, {"Fresno", 17.9}, {"Fukuoka", 17.0}, {"Gabès", 19.5}, {"Gaborone", 21.0}, {"Gagnoa", 26.0}, {"Gangtok", 15.2}, {"Garissa", 29.3}, {"Garoua", 28.3}, {"George Town", 27.9}, {"Ghanzi", 21.4}, {"Gjoa Haven", -14.4}, {"Guadalajara", 20.9}, {"Guangzhou", 22.4}, {"Guatemala City", 20.4}, {"Halifax", 7.5}, {"Hamburg", 9.7}, {"Hamilton", 13.8}, {"Hanga Roa", 20.5}, {"Hanoi", 23.6}, {"Harare", 18.4}, {"Harbin", 5.0}, {"Hargeisa", 21.7}, {"Hat Yai", 27.0}, {"Havana", 25.2}, {"Helsinki", 5.9}, {"Heraklion", 18.9}, {"Hiroshima", 16.3}, {"Ho Chi Minh City", 27.4}, {"Hobart", 12.7}, {"Hong Kong", 23.3}, {"Honiara", 26.5}, {"Honolulu", 25.4}, {"Houston", 20.8}, {"Ifrane", 11.4}, {"Indianapolis", 11.8}, {"Iqaluit", -9.3}, {"Irkutsk", 1.0}, {"Istanbul", 13.9}, {"İzmir", 17.9}, {"Jacksonville", 20.3}, {"Jakarta", 26.7}, {"Jayapura", 27.0}, {"Jerusalem", 18.3}, {"Johannesburg", 15.5}, {"Jos", 22.8}, {"Juba", 27.8}, {"Kabul", 12.1}, {"Kampala", 20.0}, {"Kandi", 27.7}, {"Kankan", 26.5}, {"Kano", 26.4}, {"Kansas City", 12.5}, {"Karachi", 26.0}, {"Karonga", 24.4}, {"Kathmandu", 18.3}, {"Khartoum", 29.9}, {"Kingston", 27.4}, {"Kinshasa", 25.3}, {"Kolkata", 26.7}, {"Kuala Lumpur", 27.3}, {"Kumasi", 26.0}, {"Kunming", 15.7}, {"Kuopio", 3.4}, {"Kuwait City", 25.7}, {"Kyiv", 8.4}, {"Kyoto", 15.8}, {"La Ceiba", 26.2}, {"La Paz", 23.7}, {"Lagos", 26.8}, {"Lahore", 24.3}, {"Lake Havasu City", 23.7}, {"Lake Tekapo", 8.7}, {"Las Palmas de Gran Canaria", 21.2}, {"Las Vegas", 20.3}, {"Launceston", 13.1}, {"Lhasa", 7.6}, {"Libreville", 25.9}, {"Lisbon", 17.5}, {"Livingstone", 21.8}, {"Ljubljana", 10.9}, {"Lodwar", 29.3}, {"Lomé", 26.9}, {"London", 11.3}, {"Los Angeles", 18.6}, {"Louisville", 13.9}, {"Luanda", 25.8}, {"Lubumbashi", 20.8}, {"Lusaka", 19.9}, {"Luxembourg City", 9.3}, {"Lviv", 7.8}, {"Lyon", 12.5}, {"Madrid", 15.0}, {"Mahajanga", 26.3}, {"Makassar", 26.7}, {"Makurdi", 26.0}, {"Malabo", 26.3}, {"Malé", 28.0}, {"Managua", 27.3}, {"Manama", 26.5}, {"Mandalay", 28.0}, {"Mango", 28.1}, {"Manila", 28.4}, {"Maputo", 22.8}, {"Marrakesh", 19.6}, {"Marseille", 15.8}, {"Maun", 22.4}, {"Medan", 26.5}, {"Mek'ele", 22.7}, {"Melbourne", 15.1}, {"Memphis", 17.2}, {"Mexicali", 23.1}, {"Mexico City", 17.5}, {"Miami", 24.9}, {"Milan", 13.0}, {"Milwaukee", 8.9}, {"Minneapolis", 7.8}, {"Minsk", 6.7}, {"Mogadishu", 27.1}, {"Mombasa", 26.3}, {"Monaco", 16.4}, {"Moncton", 6.1}, {"Monterrey", 22.3}, {"Montreal", 6.8}, {"Moscow", 5.8}, {"Mumbai", 27.1}, {"Murmansk", 0.6}, {"Muscat", 28.0}, {"Mzuzu", 17.7}, {"N'Djamena", 28.3}, {"Naha", 23.1}, {"Nairobi", 17.8}, {"Nakhon Ratchasima", 27.3}, {"Napier", 14.6}, {"Napoli", 15.9}, {"Nashville", 15.4}, {"Nassau", 24.6}, {"Ndola", 20.3}, {"New Delhi", 25.0}, {"New Orleans", 20.7}, {"New York City", 12.9}, {"Ngaoundéré", 22.0}, {"Niamey", 29.3}, {"Nicosia", 19.7}, {"Niigata", 13.9}, {"Nouadhibou", 21.3}, {"Nouakchott", 25.7}, {"Novosibirsk", 1.7}, {"Nuuk", -1.4}, {"Odesa", 10.7}, {"Odienné", 26.0}, {"Oklahoma City", 15.9}, {"Omaha", 10.6}, {"Oranjestad", 28.1}, {"Oslo", 5.7}, {"Ottawa", 6.6}, {"Ouagadougou", 28.3}, {"Ouahigouya", 28.6}, {"Ouarzazate", 18.9}, {"Oulu", 2.7}, {"Palembang", 27.3}, {"Palermo", 18.5}, {"Palm Springs", 24.5}, {"Palmerston North", 13.2}, {"Panama City", 28.0}, {"Parakou", 26.8}, {"Paris", 12.3}, {"Perth", 18.7}, {"Petropavlovsk-Kamchatsky", 1.9}, {"Philadelphia", 13.2}, {"Phnom Penh", 28.3}, {"Phoenix", 23.9}, {"Pittsburgh", 10.8}, {"Podgorica", 15.3}, {"Pointe-Noire", 26.1}, {"Pontianak", 27.7}, {"Port Moresby", 26.9}, {"Port Sudan", 28.4}, {"Port Vila", 24.3}, {"Port-Gentil", 26.0}, {"Portland (OR)", 12.4}, {"Porto", 15.7}, {"Prague", 8.4}, {"Praia", 24.4}, {"Pretoria", 18.2}, {"Pyongyang", 10.8}, {"Rabat", 17.2}, {"Rangpur", 24.4}, {"Reggane", 28.3}, {"Reykjavík", 4.3}, {"Riga", 6.2}, {"Riyadh", 26.0}, {"Rome", 15.2}, {"Roseau", 26.2}, {"Rostov-on-Don", 9.9}, {"Sacramento", 16.3}, {"Saint Petersburg", 5.8}, {"Saint-Pierre", 5.7}, {"Salt Lake City", 11.6}, {"San Antonio", 20.8}, {"San Diego", 17.8}, {"San Francisco", 14.6}, {"San Jose", 16.4}, {"San José", 22.6}, {"San Juan", 27.2}, {"San Salvador", 23.1}, {"Sana'a", 20.0}, {"Santo Domingo", 25.9}, {"Sapporo", 8.9}, {"Sarajevo", 10.1}, {"Saskatoon", 3.3}, {"Seattle", 11.3}, {"Ségou", 28.0}, {"Seoul", 12.5}, {"Seville", 19.2}, {"Shanghai", 16.7}, {"Singapore", 27.0}, {"Skopje", 12.4}, {"Sochi", 14.2}, {"Sofia", 10.6}, {"Sokoto", 28.0}, {"Split", 16.1}, {"St. John's", 5.0}, {"St. Louis", 13.9}, {"Stockholm", 6.6}, {"Surabaya", 27.1}, {"Suva", 25.6}, {"Suwałki", 7.2}, {"Sydney", 17.7}, {"Tabora", 23.0}, {"Tabriz", 12.6}, {"Taipei", 23.0}, {"Tallinn", 6.4}, {"Tamale", 27.9}, {"Tamanrasset", 21.7}, {"Tampa", 22.9}, {"Tashkent", 14.8}, {"Tauranga", 14.8}, {"Tbilisi", 12.9}, {"Tegucigalpa", 21.7}, {"Tehran", 17.0}, {"Tel Aviv", 20.0}, {"Thessaloniki", 16.0}, {"Thiès", 24.0}, {"Tijuana", 17.8}, {"Timbuktu", 28.0}, {"Tirana", 15.2}, {"Toamasina", 23.4}, {"Tokyo", 15.4}, {"Toliara", 24.1}, {"Toluca", 12.4}, {"Toronto", 9.4}, {"Tripoli", 20.0}, {"Tromsø", 2.9}, {"Tucson", 20.9}, {"Tunis", 18.4}, {"Ulaanbaatar", -0.4}, {"Upington", 20.4}, {"Ürümqi", 7.4}, {"Vaduz", 10.1}, {"Valencia", 18.3}, {"Valletta", 18.8}, {"Vancouver", 10.4}, {"Veracruz", 25.4}, {"Vienna", 10.4}, {"Vientiane", 25.9}, {"Villahermosa", 27.1}, {"Vilnius", 6.0}, {"Virginia Beach", 15.8}, {"Vladivostok", 4.9}, {"Warsaw", 8.5}, {"Washington, D.C.", 14.6}, {"Wau", 27.8}, {"Wellington", 12.9}, {"Whitehorse", -0.1}, {"Wichita", 13.9}, {"Willemstad", 28.0}, {"Winnipeg", 3.0}, {"Wrocław", 9.6}, {"Xi'an", 14.1}, {"Yakutsk", -8.8}, {"Yangon", 27.5}, {"Yaoundé", 23.8}, {"Yellowknife", -4.3}, {"Yerevan", 12.4}, {"Yinchuan", 9.0}, {"Zagreb", 10.7}, {"Zanzibar City", 26.0}, {"Zürich", 9.3}}; std::mt19937 rng(std::random_device{}()); std::uniform_int_distribution stationPicker(0, stations.size() - 1); // Use a big stdio buffer + manual formatting for speed, since default // cout/printf per-line for a billion rows would otherwise dominate runtime. constexpr size_t BUF_SIZE = 1 << 20; // 1 MB std::vector buffer(BUF_SIZE); size_t bufPos = 0; auto flushBuffer = [&]() { std::fwrite(buffer.data(), 1, bufPos, stdout); bufPos = 0; }; auto writeStr = [&](const char *s, size_t len) { if (bufPos + len > BUF_SIZE) flushBuffer(); std::memcpy(buffer.data() + bufPos, s, len); bufPos += len; }; for (long long i = 0; i < numRows; ++i) { size_t idx = stationPicker(rng); const char *name = stations[idx].first; double mean = stations[idx].second; std::normal_distribution tempDist(mean, 8.0); double temp = tempDist(rng); if (temp > 99.9) temp = 99.9; if (temp < -99.9) temp = -99.9; char line[160]; // headroom for longer UTF-8 station names int len = std::snprintf(line, sizeof(line), "%s;%.1f\n", name, temp); writeStr(line, static_cast(len)); } flushBuffer(); return 0; }