Difference between revisions of "Achievement statistics"

From Geohashing
(achievement statistics)
 
(update)
 
(4 intermediate revisions by the same user not shown)
Line 3: Line 3:
 
For a thematically sorted list with brief descriptions of the achievements, see '''[[achievements]]''' instead. For detailed descriptions, see the pages for the individual achievements.
 
For a thematically sorted list with brief descriptions of the achievements, see '''[[achievements]]''' instead. For detailed descriptions, see the pages for the individual achievements.
  
Last updated: 2023-07-18
+
Last updated: 2024-07-21
 
==Achievements==
 
==Achievements==
 
{|class="wikitable sortable zebra"
 
{|class="wikitable sortable zebra"
 
!Achievement!!# of Expeditions!!# of Geohashers
 
!Achievement!!# of Expeditions!!# of Geohashers
 
|-
 
|-
|[[Land geohash achievement]]||4269||721
+
|[[Land geohash achievement]]||4819||740
 
|-
 
|-
|[[Bicycle geohash achievement]]||1202||254
+
|[[Bicycle geohash achievement]]||1347||260
 
|-
 
|-
|[[Virgin graticule achievement]]||772||294
+
|[[Public transport geohash achievement]]||841||195
 
|-
 
|-
|[[No trespassing consolation prize]]||719||241
+
|[[Graticule unlocked achievement]]||801||301
 
|-
 
|-
|[[Public transport geohash achievement]]||692||184
+
|[[No trespassing consolation prize]]||766||249
 
|-
 
|-
|[[Consecutive geohash achievement]]||636||144
+
|[[Consecutive geohash achievement]]||744||153
 
|-
 
|-
|[[Drag-along achievement]]||563||289
+
|[[Minesweeper geohash achievement]]||599||211
 
|-
 
|-
|[[Minesweeper geohash achievement]]||557||203
+
|[[Drag-along achievement]]||585||294
 
|-
 
|-
|[[Gratuitous ribbon achievement]]||345||108
+
|[[Multihash achievement]]||378||95
 
|-
 
|-
|[[Multihash achievement]]||339||94
+
|[[Gratuitous ribbon achievement]]||375||113
 
|-
 
|-
|[[Walk geohash achievement]]||330||165
+
|[[Walk geohash achievement]]||354||172
 
|-
 
|-
|[[Frozen geohash achievement]]||299||103
+
|[[Two to the N achievement]]||333||96
 
|-
 
|-
|[[Midnight geohash achievement]]||281||91
+
|[[Frozen geohash achievement]]||317||104
 
|-
 
|-
|[[xkcd centurion achievement]]||278||65
+
|[[xkcd centurion achievement]]||298||67
 
|-
 
|-
|[[Two to the N achievement]]||268||81
+
|[[Midnight geohash achievement]]||285||92
 
|-
 
|-
|[[Last man standing achievement]]||257||74
+
|[[Last man standing achievement]]||284||76
 
|-
 
|-
|[[Speed racer achievement]]||251||162
+
|[[Speed racer achievement]]||259||165
 
|-
 
|-
|[[Tron achievement]]||224||114
+
|[[Tron achievement]]||243||120
 
|-
 
|-
|[[No batteries geohash achievement]]||220||136
+
|[[OpenStreetMap achievement]]||236||29
 +
|-
 +
|[[No batteries geohash achievement]]||223||136
 
|-
 
|-
 
|[[Thumbs up geohash achievement]]||210||9
 
|[[Thumbs up geohash achievement]]||210||9
 
|-
 
|-
|[[OpenStreetMap achievement]]||201||27
+
|[[Ambassador achievement]]||174||86
 +
|-
 +
|[[Meet-up achievement]]||165||133
 
|-
 
|-
|[[Ambassador achievement]]||170||85
+
|[[Easy geohash]]||162||61
 
|-
 
|-
|[[Easy geohash]]||159||59
+
|[[Geotrash achievement]]||162||101
 
|-
 
|-
|[[Meet-up achievement]]||156||130
+
|[[Hash collision achievement]]||154||57
 
|-
 
|-
|[[Geotrash achievement]]||153||97
+
|[[Drowned rat geohash achievement]]||153||55
 
|-
 
|-
|[[Hash collision achievement]]||146||55
+
|[[Déjà vu geohash achievement]]||149||66
 
|-
 
|-
|[[Geohashing Day achievement]]||139||79
+
|[[Border geohash achievement]]||149||63
 
|-
 
|-
|[[Déjà vu geohash achievement]]||137||62
+
|[[Geohashing Day achievement]]||145||81
 
|-
 
|-
|[[Border geohash achievement]]||134||61
+
|[[Radio Yerevan]]||144||43
 
|-
 
|-
|[[Radio Yerevan]]||126||43
+
|[[Regional geohashing achievement]]||137||35
 
|-
 
|-
|[[Picnic achievement]]||108||99
+
|[[xkcd-100 geohash achievement]]||124||38
 
|-
 
|-
|[[Drowned rat geohash achievement]]||103||49
+
|[[Picnic achievement]]||111||102
 
|-
 
|-
|[[Regional geohashing achievement]]||102||32
+
|[[Earliest geohash achievement]]||102||67
 
|-
 
|-
 
|[[Dark Ages achievement]]||99||13
 
|[[Dark Ages achievement]]||99||13
 
|-
 
|-
|[[Earliest geohash achievement]]||96||65
+
|[[Birthday geohash achievement]]||92||50
 
|-
 
|-
|[[xkcd-100 geohash achievement]]||94||34
+
|[[Done with Nature consolation prize]]||89||70
 
|-
 
|-
|[[Birthday geohash achievement]]||87||48
+
|[[Velociraptor geohash achievement]]||79||41
 
|-
 
|-
|[[MNB geohash consolation prize]]||78||66
+
|[[Circus geohash achievement]]||74||54
 
|-
 
|-
|[[Circus geohash achievement]]||72||54
+
|[[Water geohash achievement]]||67||61
 
|-
 
|-
|[[Velociraptor geohash achievement]]||72||41
+
|[[Police geohash achievement]]||67||47
 
|-
 
|-
|[[Police geohash achievement]]||63||45
+
|[[Puppet master geohash achievement]]||63||44
 
|-
 
|-
|[[Water geohash achievement]]||62||59
+
|[[Reverse regional achievement]]||62||38
 
|-
 
|-
|[[Puppet master geohash achievement]]||60||42
+
|[[A Tale of Two Hashes achievement]]||61||41
 
|-
 
|-
|[[Blinded by science consolation prize]]||59||39
+
|[[Blinded by science consolation prize]]||60||40
 
|-
 
|-
|[[A Tale of Two Hashes achievement]]||57||38
+
|[[Hashiversary achievement]]||57||30
 
|-
 
|-
|[[Hashiversary achievement]]||56||30
+
|[[Prize poultry consolation prize]]||56||32
 
|-
 
|-
|[[Reverse regional achievement]]||55||37
+
|[[One with Nature geohash achievement]]||55||45
 
|-
 
|-
|[[Prize poultry consolation prize]]||53||30
+
|[[Holy hash achievement]]||53||40
 
|-
 
|-
|[[Holy hash achievement]]||51||39
+
|[[Formal attire achievement]]||50||46
 
|-
 
|-
 
|[[Snowman geohash achievement]]||49||45
 
|[[Snowman geohash achievement]]||49||45
 
|-
 
|-
|[[Formal attire achievement]]||49||45
+
|[[Sunrise geohash achievement]]||47||30
 
|-
 
|-
|[[MNIMB geohash achievement]]||49||42
+
|[[Geosquishy achievement]]||46||41
 
|-
 
|-
 
|[[Hashcard achievement]]||46||31
 
|[[Hashcard achievement]]||46||31
 
|-
 
|-
|[[Sunrise geohash achievement]]||45||30
+
|[[Admit one achievement]]||43||31
 
|-
 
|-
|[[Geosquishy achievement]]||44||37
+
|[[Air geohash achievement]]||41||16
 
|-
 
|-
|[[Admit one achievement]]||42||30
+
|[[Pub geohash achievement]]||37||43
 
|-
 
|-
|[[Air geohash achievement]]||39||14
+
|[[Globetrotters geohash achievement]]||36||37
 
|-
 
|-
|[[Globetrotters geohash achievement]]||35||36
+
|[[Coffin potato achievement]]||36||17
 
|-
 
|-
|[[Coffin potato achievement]]||34||17
+
|[[My kingdom for a boat consolation prize]]||35||30
 
|-
 
|-
|[[Pub geohash achievement]]||33||42
+
|[[Train wreck consolation prize]]||35||26
 
|-
 
|-
|[[My kingdom for a boat consolation prize]]||32||29
+
|[[Juggernaut achievement]]||35||17
 
|-
 
|-
|[[Juggernaut achievement]]||31||16
+
|[[Leap geohash achievement]]||32||26
 
|-
 
|-
|[[Hashcat achievement]]||29||23
+
|[[Combo achievement]]||32||13
 
|-
 
|-
|[[Leap geohash achievement]]||28||23
+
|[[Subdivision geohash achievement]]||30||7
 
|-
 
|-
|[[Train wreck consolation prize]]||27||24
+
|[[Hashcat achievement]]||29||23
 
|-
 
|-
|[[Combo achievement]]||26||12
+
|[[Cliffs of despair consolation prize]]||25||17
 
|-
 
|-
|[[Cliffs of despair consolation prize]]||24||15
+
|[[Hobbit achievement]]||23||17
 
|-
 
|-
|[[Hobbit achievement]]||23||17
+
|[[There might be alligators! consolation prize]]||22||21
 
|-
 
|-
|[[There might be alligators! consolation prize]]||21||20
+
|[[Towel Day achievement]]||22||10
 
|-
 
|-
|[[Subdivision geohash achievement]]||20||5
+
|[[Globalhash achievement]]||21||23
 
|-
 
|-
|[[Globalhash achievement]]||20||22
+
|[[Origin geohash achievement]]||20||18
 
|-
 
|-
 
|[[Geoflashing achievement]]||20||16
 
|[[Geoflashing achievement]]||20||16
 
|-
 
|-
|[[Towel Day achievement]]||20||10
+
|[[Walking on water geohash achievement]]||20||13
 
|-
 
|-
|[[Walking on water geohash achievement]]||19||13
+
|[[Restricted area achievement]]||16||14
 
|-
 
|-
|[[Origin geohash achievement]]||18||16
+
|[[Golf geohash achievement]]||16||12
 
|-
 
|-
|[[Restricted area achievement]]||16||14
+
|[[Youngest geohasher achievement]]||15||7
 
|-
 
|-
|[[Youngest geohasher achievement]]||15||7
+
|[[Fly a kite achievement]]||15||6
 
|-
 
|-
 
|[[It's a kitty consolation prize]]||15||12
 
|[[It's a kitty consolation prize]]||15||12
|-
 
|[[Golf geohash achievement]]||15||11
 
 
|-
 
|-
 
|[[Camping geohash achievement]]||15||11
 
|[[Camping geohash achievement]]||15||11
 
|-
 
|-
 
|[[Displaced origin geohash achievement]]||14||7
 
|[[Displaced origin geohash achievement]]||14||7
|-
 
|[[Fly a kite achievement]]||13||5
 
 
|-
 
|-
 
|[[Pie geohash achievement]]||13||15
 
|[[Pie geohash achievement]]||13||15
 
|-
 
|-
 
|[[Twister geohash achievement]]||12||26
 
|[[Twister geohash achievement]]||12||26
 +
|-
 +
|[[Speedrun achievement]]||11||3
 
|-
 
|-
 
|[[Musical achievement]]||10||7
 
|[[Musical achievement]]||10||7
 +
|-
 +
|[[N-in-a-row achievement]]||9||9
 +
|-
 +
|[[Handshake achievement]]||9||9
 +
|-
 +
|[[Phonebooth stuffing achievement]]||9||25
 
|-
 
|-
 
|[[Largest geohash achievement]]||9||1
 
|[[Largest geohash achievement]]||9||1
 
|-
 
|-
 
|[[Cold geohash achievement]]||9||14
 
|[[Cold geohash achievement]]||9||14
 +
|-
 +
|[[Going deep geohash achievement]]||8||8
 
|-
 
|-
 
|[[Geohash by proxy achievement]]||8||6
 
|[[Geohash by proxy achievement]]||8||6
 
|-
 
|-
|[[Phonebooth stuffing achievement]]||8||25
+
|[[Namesake achievement]]||8||1
|-
 
|[[Going deep geohash achievement]]||7||7
 
 
|-
 
|-
 
|[[Geohashing in the media]]||7||7
 
|[[Geohashing in the media]]||7||7
Line 200: Line 208:
 
|[[Underwater geohash achievement]]||6||7
 
|[[Underwater geohash achievement]]||6||7
 
|-
 
|-
|[[Handshake achievement]]||5||8
+
|[[Climb achievement]]||6||4
 
|-
 
|-
 
|[[North geohash achievement]]||5||7
 
|[[North geohash achievement]]||5||7
Line 209: Line 217:
 
|-
 
|-
 
|[[Low geohash achievement]]||5||3
 
|[[Low geohash achievement]]||5||3
 +
|-
 +
|[[Hunter gatherer achievement]]||5||2
 
|-
 
|-
 
|[[Calendar girl achievement]]||5||10
 
|[[Calendar girl achievement]]||5||10
Line 215: Line 225:
 
|-
 
|-
 
|[[Sex geohash achievement]]||4||7
 
|[[Sex geohash achievement]]||4||7
 +
|-
 +
|[[Multiple elevations achievement]]||4||4
 +
|-
 +
|[[Democracy achievement]]||4||2
 +
|-
 +
|[[Birds of a Feather achievement]]||4||1
 
|-
 
|-
 
|[[Migration geohash achievement]]||4||10
 
|[[Migration geohash achievement]]||4||10
Line 221: Line 237:
 
|-
 
|-
 
|[[West geohash achievement]]||3||2
 
|[[West geohash achievement]]||3||2
 +
|-
 +
|[[Cubicle geohash achievement]]||3||2
 +
|-
 +
|[[Constant geohasher achievement]]||3||2
 
|-
 
|-
 
|[[Geobrush achievement]]||3||1
 
|[[Geobrush achievement]]||3||1
Line 232: Line 252:
 
|[[Graticule hopper achievement]]||2||2
 
|[[Graticule hopper achievement]]||2||2
 
|-
 
|-
|[[Cubicle geohash achievement]]||2||2
+
|[[White Rabbit consolation prize]]||2||1
 
|-
 
|-
 
|[[South geohash achievement]]||2||1
 
|[[South geohash achievement]]||2||1
 +
|-
 +
|[[Posted achievement]]||2||1
 
|-
 
|-
 
|[[Endurance geohashing achievement]]||2||1
 
|[[Endurance geohashing achievement]]||2||1
 
|-
 
|-
|[[Curse of Unawareness consolation prize]]||2||15
+
|[[Curse of Unawareness consolation prize]]||2||16
 
|-
 
|-
 
|[[Star photographer achievement]]||1||2
 
|[[Star photographer achievement]]||1||2
 
|-
 
|-
 
|[[Maker achievement]]||1||1
 
|[[Maker achievement]]||1||1
 +
|-
 +
|[[Eclipse achievement]]||1||1
 
|-
 
|-
 
|[[Couch potato geohash achievement]]||1||1
 
|[[Couch potato geohash achievement]]||1||1
Line 248: Line 272:
 
|[[Beast of burden geohash achievement]]||1||1
 
|[[Beast of burden geohash achievement]]||1||1
 
|-
 
|-
|[[Posted achievement]]||0||0
+
|[[Skate geohash achievement]]||0||0
 
|-
 
|-
 
|[[MacGyver geohash achievement]]||0||0
 
|[[MacGyver geohash achievement]]||0||0
Line 264: Line 288:
 
dir="/tmp/gh-achievementstats"
 
dir="/tmp/gh-achievementstats"
 
categoryAPI="https://geohashing.site/api.php?format=json&action=query&list=categorymembers&cmprop=title&cmlimit=5000&cmtitle=Category"
 
categoryAPI="https://geohashing.site/api.php?format=json&action=query&list=categorymembers&cmprop=title&cmlimit=5000&cmtitle=Category"
regularAchievements=("Abduction_achievement" "Admit_one_achievement" "Air_geohash_achievement" "Ambassador_achievement" "A_Tale_of_Two_Hashes_achievement" "Beast_of_burden_geohash_achievement" "Bicycle_geohash_achievement" "Bill_Gates_achievement" "Birthday_geohash_achievement" "Blinded_by_science_consolation_prize" "Border_geohash_achievement" "Buccaneer_geohash_achievement" "Calendar_girl_achievement" "Camping_geohash_achievement" "Circus_geohash_achievement" "Cliffs_of_despair_consolation_prize" "Coffin_potato_achievement" "Cold_geohash_achievement" "Combo_achievement" "Consecutive_geohash_achievement" "Couch_potato_geohash_achievement" "Cross_that_bridge_achievement" "Cubicle_geohash_achievement" "Curse_of_Unawareness_consolation_prize" "Dark_Ages_achievement" "Déjà_vu_geohash_achievement" "Drag-along_achievement" "Drowned_rat_geohash_achievement" "Earliest_geohash_achievement" "East_geohash_achievement" "Easy_geohash" "Endurance_geohashing_achievement" "Fly_a_kite_achievement" "Formal_attire_achievement" "Frozen_geohash_achievement" "Geobrush_achievement" "Geoflashing_achievement" "Geohash_by_proxy_achievement" "Geohashing_Day_achievement" "Geohashing_in_the_media" "Geosquishy_achievement" "Geotrash_achievement" "Globalhash_achievement" "Globetrotters_geohash_achievement" "Going_deep_geohash_achievement" "Golf_geohash_achievement" "Graticule_hopper_achievement" "Gratuitous_ribbon_achievement" "Handshake_achievement" "Hashcard_achievement" "Hashcat_achievement" "Hash_collision_achievement" "Hashiversary_achievement" "High_geohash_achievement" "Hobbit_achievement" "Holy_hash_achievement" "Hot_geohash_achievement" "It's_a_kitty_consolation_prize" "Juggernaut_achievement" "Land_geohash_achievement" "Largest_geohash_achievement" "Last_man_standing_achievement" "Leap_geohash_achievement" "Low_geohash_achievement" "MacGyver_geohash_achievement" "Maker_achievement" "Meet-up_achievement" "Midnight_geohash_achievement" "Migration_geohash_achievement" "Minesweeper_geohash_achievement" "MNB_geohash_consolation_prize" "MNIMB_geohash_achievement" "Most_active_graticules_achievement" "Multihash_achievement" "Musical_achievement" "My_kingdom_for_a_boat_consolation_prize" "No_batteries_geohash_achievement" "North_geohash_achievement" "No_trespassing_consolation_prize" "Oldest_geohasher_achievement" "OpenStreetMap_achievement" "Phonebooth_stuffing_achievement" "Picnic_achievement" "Pie_geohash_achievement" "Police_geohash_achievement" "Posted_achievement" "Prize_poultry_consolation_prize" "Pub_geohash_achievement" "Public_transport_geohash_achievement" "Puppet_master_geohash_achievement" "Radio_Yerevan" "Regional_geohashing_achievement" "Restricted_area_achievement" "Reverse_regional_achievement" "Sex_geohash_achievement" "Snowman_geohash_achievement" "South_geohash_achievement" "Speed_racer_achievement" "Star_photographer_achievement" "Subdivision_geohash_achievement" "Sunrise_geohash_achievement" 'There_might_be_alligators!_consolation_prize' "Thumbs_up_geohash_achievement" "Time-traveller_achievement" "Towel_Day_achievement" "Trail_of_blood_consolation_prize" "Train_wreck_consolation_prize" "Tron_achievement" "Twister_geohash_achievement" "Two_to_the_N_achievement" "Underwater_geohash_achievement" "Velociraptor_geohash_achievement" "Virgin_graticule_achievement" "Walk_geohash_achievement" "Walking_on_water_geohash_achievement" "Water_geohash_achievement" "West_geohash_achievement" "xkcd-100_geohash_achievement" "xkcd_centurion_achievement" "Youngest_geohasher_achievement")
+
regularAchievements=("Abduction_achievement" "Admit_one_achievement" "Air_geohash_achievement" "Ambassador_achievement" "A_Tale_of_Two_Hashes_achievement" "Beast_of_burden_geohash_achievement" "Bicycle_geohash_achievement" "Bill_Gates_achievement" "Birds_of_a_Feather_achievement" "Birthday_geohash_achievement" "Blinded_by_science_consolation_prize" "Border_geohash_achievement" "Buccaneer_geohash_achievement" "Calendar_girl_achievement" "Camping_geohash_achievement" "Circus_geohash_achievement" "Cliffs_of_despair_consolation_prize" "Climb_achievement" "Coffin_potato_achievement" "Cold_geohash_achievement" "Combo_achievement" "Consecutive_geohash_achievement" "Constant_geohasher_achievement" "Couch_potato_geohash_achievement" "Cross_that_bridge_achievement" "Cubicle_geohash_achievement" "Curse_of_Unawareness_consolation_prize" "Dark_Ages_achievement" "Déjà_vu_geohash_achievement" "Democracy_achievement" "Done_with_Nature_consolation_prize" "Drag-along_achievement" "Drowned_rat_geohash_achievement" "Earliest_geohash_achievement" "East_geohash_achievement" "Easy_geohash" "Eclipse_achievement" "Endurance_geohashing_achievement" "Fly_a_kite_achievement" "Formal_attire_achievement" "Frozen_geohash_achievement" "Geobrush_achievement" "Geoflashing_achievement" "Geohash_by_proxy_achievement" "Geohashing_Day_achievement" "Geohashing_in_the_media" "Geosquishy_achievement" "Geotrash_achievement" "Globalhash_achievement" "Globetrotters_geohash_achievement" "Going_deep_geohash_achievement" "Golf_geohash_achievement" "Graticule_hopper_achievement" "Graticule_unlocked_achievement" "Gratuitous_ribbon_achievement" "Handshake_achievement" "Hashcard_achievement" "Hashcat_achievement" "Hash_collision_achievement" "Hashiversary_achievement" "High_geohash_achievement" "Hobbit_achievement" "Holy_hash_achievement" "Hot_geohash_achievement" "Hunter_gatherer_achievement" "It's_a_kitty_consolation_prize" "Juggernaut_achievement" "Land_geohash_achievement" "Largest_geohash_achievement" "Last_man_standing_achievement" "Leap_geohash_achievement" "Low_geohash_achievement" "MacGyver_geohash_achievement" "Maker_achievement" "Meet-up_achievement" "Midnight_geohash_achievement" "Migration_geohash_achievement" "Minesweeper_geohash_achievement" "Most_active_graticules_achievement" "Multihash_achievement" "Multiple_elevations_achievement" "Musical_achievement" "My_kingdom_for_a_boat_consolation_prize" "N-in-a-row_achievement" "Namesake_achievement" "No_batteries_geohash_achievement" "North_geohash_achievement" "No_trespassing_consolation_prize" "Oldest_geohasher_achievement" "One_with_Nature_geohash_achievement" "OpenStreetMap_achievement" "Phonebooth_stuffing_achievement" "Picnic_achievement" "Pie_geohash_achievement" "Police_geohash_achievement" "Posted_achievement" "Prize_poultry_consolation_prize" "Pub_geohash_achievement" "Public_transport_geohash_achievement" "Puppet_master_geohash_achievement" "Radio_Yerevan" "Regional_geohashing_achievement" "Restricted_area_achievement" "Reverse_regional_achievement" "Sex_geohash_achievement" "Skate_geohash_achievement" "Snowman_geohash_achievement" "South_geohash_achievement" "Speed_racer_achievement" "Speedrun_achievement" "Star_photographer_achievement" "Subdivision_geohash_achievement" "Sunrise_geohash_achievement" 'There_might_be_alligators!_consolation_prize' "Thumbs_up_geohash_achievement" "Time-traveller_achievement" "Towel_Day_achievement" "Trail_of_blood_consolation_prize" "Train_wreck_consolation_prize" "Tron_achievement" "Twister_geohash_achievement" "Two_to_the_N_achievement" "Underwater_geohash_achievement" "Velociraptor_geohash_achievement" "Walk_geohash_achievement" "Walking_on_water_geohash_achievement" "Water_geohash_achievement" "West_geohash_achievement" "White_Rabbit_consolation_prize" "xkcd-100_geohash_achievement" "xkcd_centurion_achievement" "Youngest_geohasher_achievement")
 
retroAchievements=("Displaced_origin_geohash_achievement" "Origin_geohash_achievement" "Wedding_anniversary_geohash_achievement")
 
retroAchievements=("Displaced_origin_geohash_achievement" "Origin_geohash_achievement" "Wedding_anniversary_geohash_achievement")
  
Line 300: Line 324:
  
 
function toShortNames {
 
function toShortNames {
     tr "\n_" ", " | sed -e "s/ geohash achievement]/]/g" -e "s/ achievement]/]/g" -e "s/ consolation prize]/]/g" | head -c -1
+
     tr "\n_" ", " | sed -e "s/ geohash achievement]/]/g" -e "s/ geohashing achievement]/]/g" -e "s/ geohash]/]/g" -e "s/ geohasher achievement]/]/g" -e "s/ achievement]/]/g" -e "s/ consolation prize]/]/g" | head -c -1
 
}
 
}
  
Line 348: Line 372:
 
date +"Last updated: %F"
 
date +"Last updated: %F"
  
#fetchData
+
fetchData
 
data=$(extractData)
 
data=$(extractData)
 
formatFullTable "$data"
 
formatFullTable "$data"
  
 
echo "==Source code=="     
 
echo "==Source code=="     
echo "The following program generates this page:<pre"">$(cat "$0")</pre"">[[Category:Achievements]]</noinclude>"
+
echo "The following program generates this page:<pre"">$(cat "$0")</pre"">[[Category:Achievements]]</noinclude"">"
 
formatBriefTable "$data"</pre>[[Category:Achievements]]</noinclude>
 
formatBriefTable "$data"</pre>[[Category:Achievements]]</noinclude>
 
<includeonly>{|class="wikitable"
 
<includeonly>{|class="wikitable"
Line 360: Line 384:
 
|1000+|| [[Land geohash achievement|Land]], [[Bicycle geohash achievement|Bicycle]]
 
|1000+|| [[Land geohash achievement|Land]], [[Bicycle geohash achievement|Bicycle]]
 
|-
 
|-
|500&mdash;1000|| [[Virgin graticule achievement|Virgin graticule]], [[No trespassing consolation prize|No trespassing]], [[Public transport geohash achievement|Public transport]], [[Consecutive geohash achievement|Consecutive]], [[Drag-along achievement|Drag-along]], [[Minesweeper geohash achievement|Minesweeper]]
+
|500&mdash;1000|| [[Public transport geohash achievement|Public transport]], [[Graticule unlocked achievement|Graticule unlocked]], [[No trespassing consolation prize|No trespassing]], [[Consecutive geohash achievement|Consecutive]], [[Minesweeper geohash achievement|Minesweeper]], [[Drag-along achievement|Drag-along]]
 
|-
 
|-
|100&mdash;500|| [[Gratuitous ribbon achievement|Gratuitous ribbon]], [[Multihash achievement|Multihash]], [[Walk geohash achievement|Walk]], [[Frozen geohash achievement|Frozen]], [[Midnight geohash achievement|Midnight]], [[xkcd centurion achievement|xkcd centurion]], [[Two to the N achievement|Two to the N]], [[Last man standing achievement|Last man standing]], [[Speed racer achievement|Speed racer]], [[Tron achievement|Tron]], [[No batteries geohash achievement|No batteries]], [[Thumbs up geohash achievement|Thumbs up]], [[OpenStreetMap achievement|OpenStreetMap]], [[Ambassador achievement|Ambassador]], [[Easy geohash|Easy geohash]], [[Meet-up achievement|Meet-up]], [[Geotrash achievement|Geotrash]], [[Hash collision achievement|Hash collision]], [[Geohashing Day achievement|Geohashing Day]], [[Déjà vu geohash achievement|Déjà vu]], [[Border geohash achievement|Border]], [[Radio Yerevan|Radio Yerevan]], [[Picnic achievement|Picnic]], [[Drowned rat geohash achievement|Drowned rat]], [[Regional geohashing achievement|Regional geohashing]]
+
|100&mdash;500|| [[Multihash achievement|Multihash]], [[Gratuitous ribbon achievement|Gratuitous ribbon]], [[Walk geohash achievement|Walk]], [[Two to the N achievement|Two to the N]], [[Frozen geohash achievement|Frozen]], [[xkcd centurion achievement|xkcd centurion]], [[Midnight geohash achievement|Midnight]], [[Last man standing achievement|Last man standing]], [[Speed racer achievement|Speed racer]], [[Tron achievement|Tron]], [[OpenStreetMap achievement|OpenStreetMap]], [[No batteries geohash achievement|No batteries]], [[Thumbs up geohash achievement|Thumbs up]], [[Ambassador achievement|Ambassador]], [[Meet-up achievement|Meet-up]], [[Easy geohash|Easy]], [[Geotrash achievement|Geotrash]], [[Hash collision achievement|Hash collision]], [[Drowned rat geohash achievement|Drowned rat]], [[Déjà vu geohash achievement|Déjà vu]], [[Border geohash achievement|Border]], [[Geohashing Day achievement|Geohashing Day]], [[Radio Yerevan|Radio Yerevan]], [[Regional geohashing achievement|Regional]], [[xkcd-100 geohash achievement|xkcd-100]], [[Picnic achievement|Picnic]], [[Earliest geohash achievement|Earliest]]
 
|-
 
|-
|50&mdash;100|| [[Dark Ages achievement|Dark Ages]], [[Earliest geohash achievement|Earliest]], [[xkcd-100 geohash achievement|xkcd-100]], [[Birthday geohash achievement|Birthday]], [[MNB geohash consolation prize|MNB geohash]], [[Circus geohash achievement|Circus]], [[Velociraptor geohash achievement|Velociraptor]], [[Police geohash achievement|Police]], [[Water geohash achievement|Water]], [[Puppet master geohash achievement|Puppet master]], [[Blinded by science consolation prize|Blinded by science]], [[A Tale of Two Hashes achievement|A Tale of Two Hashes]], [[Hashiversary achievement|Hashiversary]], [[Reverse regional achievement|Reverse regional]], [[Prize poultry consolation prize|Prize poultry]], [[Holy hash achievement|Holy hash]]
+
|50&mdash;100|| [[Dark Ages achievement|Dark Ages]], [[Birthday geohash achievement|Birthday]], [[Done with Nature consolation prize|Done with Nature]], [[Velociraptor geohash achievement|Velociraptor]], [[Circus geohash achievement|Circus]], [[Water geohash achievement|Water]], [[Police geohash achievement|Police]], [[Puppet master geohash achievement|Puppet master]], [[Reverse regional achievement|Reverse regional]], [[A Tale of Two Hashes achievement|A Tale of Two Hashes]], [[Blinded by science consolation prize|Blinded by science]], [[Hashiversary achievement|Hashiversary]], [[Prize poultry consolation prize|Prize poultry]], [[One with Nature geohash achievement|One with Nature]], [[Holy hash achievement|Holy hash]], [[Formal attire achievement|Formal attire]]
 
|-
 
|-
|10&mdash;50|| [[Snowman geohash achievement|Snowman]], [[Formal attire achievement|Formal attire]], [[MNIMB geohash achievement|MNIMB]], [[Hashcard achievement|Hashcard]], [[Sunrise geohash achievement|Sunrise]], [[Geosquishy achievement|Geosquishy]], [[Admit one achievement|Admit one]], [[Air geohash achievement|Air]], [[Globetrotters geohash achievement|Globetrotters]], [[Coffin potato achievement|Coffin potato]], [[Pub geohash achievement|Pub]], [[My kingdom for a boat consolation prize|My kingdom for a boat]], [[Juggernaut achievement|Juggernaut]], [[Hashcat achievement|Hashcat]], [[Leap geohash achievement|Leap]], [[Train wreck consolation prize|Train wreck]], [[Combo achievement|Combo]], [[Cliffs of despair consolation prize|Cliffs of despair]], [[Hobbit achievement|Hobbit]], [[There might be alligators! consolation prize|There might be alligators!]], [[Subdivision geohash achievement|Subdivision]], [[Globalhash achievement|Globalhash]], [[Geoflashing achievement|Geoflashing]], [[Towel Day achievement|Towel Day]], [[Walking on water geohash achievement|Walking on water]], [[Origin geohash achievement|Origin]], [[Restricted area achievement|Restricted area]], [[Youngest geohasher achievement|Youngest geohasher]], [[It's a kitty consolation prize|It's a kitty]], [[Golf geohash achievement|Golf]], [[Camping geohash achievement|Camping]], [[Displaced origin geohash achievement|Displaced origin]], [[Fly a kite achievement|Fly a kite]], [[Pie geohash achievement|Pie]], [[Twister geohash achievement|Twister]], [[Musical achievement|Musical]]
+
|10&mdash;50|| [[Snowman geohash achievement|Snowman]], [[Sunrise geohash achievement|Sunrise]], [[Geosquishy achievement|Geosquishy]], [[Hashcard achievement|Hashcard]], [[Admit one achievement|Admit one]], [[Air geohash achievement|Air]], [[Pub geohash achievement|Pub]], [[Globetrotters geohash achievement|Globetrotters]], [[Coffin potato achievement|Coffin potato]], [[My kingdom for a boat consolation prize|My kingdom for a boat]], [[Train wreck consolation prize|Train wreck]], [[Juggernaut achievement|Juggernaut]], [[Leap geohash achievement|Leap]], [[Combo achievement|Combo]], [[Subdivision geohash achievement|Subdivision]], [[Hashcat achievement|Hashcat]], [[Cliffs of despair consolation prize|Cliffs of despair]], [[Hobbit achievement|Hobbit]], [[There might be alligators! consolation prize|There might be alligators!]], [[Towel Day achievement|Towel Day]], [[Globalhash achievement|Globalhash]], [[Origin geohash achievement|Origin]], [[Geoflashing achievement|Geoflashing]], [[Walking on water geohash achievement|Walking on water]], [[Restricted area achievement|Restricted area]], [[Golf geohash achievement|Golf]], [[Youngest geohasher achievement|Youngest]], [[Fly a kite achievement|Fly a kite]], [[It's a kitty consolation prize|It's a kitty]], [[Camping geohash achievement|Camping]], [[Displaced origin geohash achievement|Displaced origin]], [[Pie geohash achievement|Pie]], [[Twister geohash achievement|Twister]], [[Speedrun achievement|Speedrun]], [[Musical achievement|Musical]]
 
|-
 
|-
|1&mdash;10|| [[Largest geohash achievement|Largest]], [[Cold geohash achievement|Cold]], [[Geohash by proxy achievement|Geohash by proxy]], [[Phonebooth stuffing achievement|Phonebooth stuffing]], [[Going deep geohash achievement|Going deep]], [[Geohashing in the media|Geohashing in the media]], [[Oldest geohasher achievement|Oldest geohasher]], [[Trail of blood consolation prize|Trail of blood]], [[Cross that bridge achievement|Cross that bridge]], [[Buccaneer geohash achievement|Buccaneer]], [[Underwater geohash achievement|Underwater]], [[Handshake achievement|Handshake]], [[North geohash achievement|North]], [[Wedding anniversary geohash achievement|Wedding anniversary]], [[High geohash achievement|High]], [[Low geohash achievement|Low]], [[Calendar girl achievement|Calendar girl]], [[Abduction achievement|Abduction]], [[Sex geohash achievement|Sex]], [[Migration geohash achievement|Migration]], [[Time-traveller achievement|Time-traveller]], [[West geohash achievement|West]], [[Geobrush achievement|Geobrush]], [[Most active graticules achievement|Most active graticules]], [[Hot geohash achievement|Hot]], [[East geohash achievement|East]], [[Graticule hopper achievement|Graticule hopper]], [[Cubicle geohash achievement|Cubicle]], [[South geohash achievement|South]], [[Endurance geohashing achievement|Endurance geohashing]], [[Curse of Unawareness consolation prize|Curse of Unawareness]], [[Star photographer achievement|Star photographer]], [[Maker achievement|Maker]], [[Couch potato geohash achievement|Couch potato]], [[Beast of burden geohash achievement|Beast of burden]]
+
|1&mdash;10|| [[N-in-a-row achievement|N-in-a-row]], [[Handshake achievement|Handshake]], [[Phonebooth stuffing achievement|Phonebooth stuffing]], [[Largest geohash achievement|Largest]], [[Cold geohash achievement|Cold]], [[Going deep geohash achievement|Going deep]], [[Geohash by proxy achievement|Geohash by proxy]], [[Namesake achievement|Namesake]], [[Geohashing in the media|Geohashing in the media]], [[Oldest geohasher achievement|Oldest]], [[Trail of blood consolation prize|Trail of blood]], [[Cross that bridge achievement|Cross that bridge]], [[Buccaneer geohash achievement|Buccaneer]], [[Underwater geohash achievement|Underwater]], [[Climb achievement|Climb]], [[North geohash achievement|North]], [[Wedding anniversary geohash achievement|Wedding anniversary]], [[High geohash achievement|High]], [[Low geohash achievement|Low]], [[Hunter gatherer achievement|Hunter gatherer]], [[Calendar girl achievement|Calendar girl]], [[Abduction achievement|Abduction]], [[Sex geohash achievement|Sex]], [[Multiple elevations achievement|Multiple elevations]], [[Democracy achievement|Democracy]], [[Birds of a Feather achievement|Birds of a Feather]], [[Migration geohash achievement|Migration]], [[Time-traveller achievement|Time-traveller]], [[West geohash achievement|West]], [[Cubicle geohash achievement|Cubicle]], [[Constant geohasher achievement|Constant]], [[Geobrush achievement|Geobrush]], [[Most active graticules achievement|Most active graticules]], [[Hot geohash achievement|Hot]], [[East geohash achievement|East]], [[Graticule hopper achievement|Graticule hopper]], [[White Rabbit consolation prize|White Rabbit]], [[South geohash achievement|South]], [[Posted achievement|Posted]], [[Endurance geohashing achievement|Endurance]], [[Curse of Unawareness consolation prize|Curse of Unawareness]], [[Star photographer achievement|Star photographer]], [[Maker achievement|Maker]], [[Eclipse achievement|Eclipse]], [[Couch potato geohash achievement|Couch potato]], [[Beast of burden geohash achievement|Beast of burden]]
 
|-
 
|-
|Unclaimed|| [[Posted achievement|Posted]], [[MacGyver geohash achievement|MacGyver]], [[Bill Gates achievement|Bill Gates]]
+
|Unclaimed|| [[Skate geohash achievement|Skate]], [[MacGyver geohash achievement|MacGyver]], [[Bill Gates achievement|Bill Gates]]
 
|}</includeonly>
 
|}</includeonly>

Latest revision as of 20:22, 21 July 2024

This page ranks achievements by how common they are, it shows how many geohashers have claimed them and on how many expeditions the achievement was claimed. For some achievements, like the xkcd centurion achievement, this number will not only include geohashers that have the full achievement, but also those who are on their way there.

For a thematically sorted list with brief descriptions of the achievements, see achievements instead. For detailed descriptions, see the pages for the individual achievements.

Last updated: 2024-07-21

Achievements

Achievement # of Expeditions # of Geohashers
Land geohash achievement 4819 740
Bicycle geohash achievement 1347 260
Public transport geohash achievement 841 195
Graticule unlocked achievement 801 301
No trespassing consolation prize 766 249
Consecutive geohash achievement 744 153
Minesweeper geohash achievement 599 211
Drag-along achievement 585 294
Multihash achievement 378 95
Gratuitous ribbon achievement 375 113
Walk geohash achievement 354 172
Two to the N achievement 333 96
Frozen geohash achievement 317 104
xkcd centurion achievement 298 67
Midnight geohash achievement 285 92
Last man standing achievement 284 76
Speed racer achievement 259 165
Tron achievement 243 120
OpenStreetMap achievement 236 29
No batteries geohash achievement 223 136
Thumbs up geohash achievement 210 9
Ambassador achievement 174 86
Meet-up achievement 165 133
Easy geohash 162 61
Geotrash achievement 162 101
Hash collision achievement 154 57
Drowned rat geohash achievement 153 55
Déjà vu geohash achievement 149 66
Border geohash achievement 149 63
Geohashing Day achievement 145 81
Radio Yerevan 144 43
Regional geohashing achievement 137 35
xkcd-100 geohash achievement 124 38
Picnic achievement 111 102
Earliest geohash achievement 102 67
Dark Ages achievement 99 13
Birthday geohash achievement 92 50
Done with Nature consolation prize 89 70
Velociraptor geohash achievement 79 41
Circus geohash achievement 74 54
Water geohash achievement 67 61
Police geohash achievement 67 47
Puppet master geohash achievement 63 44
Reverse regional achievement 62 38
A Tale of Two Hashes achievement 61 41
Blinded by science consolation prize 60 40
Hashiversary achievement 57 30
Prize poultry consolation prize 56 32
One with Nature geohash achievement 55 45
Holy hash achievement 53 40
Formal attire achievement 50 46
Snowman geohash achievement 49 45
Sunrise geohash achievement 47 30
Geosquishy achievement 46 41
Hashcard achievement 46 31
Admit one achievement 43 31
Air geohash achievement 41 16
Pub geohash achievement 37 43
Globetrotters geohash achievement 36 37
Coffin potato achievement 36 17
My kingdom for a boat consolation prize 35 30
Train wreck consolation prize 35 26
Juggernaut achievement 35 17
Leap geohash achievement 32 26
Combo achievement 32 13
Subdivision geohash achievement 30 7
Hashcat achievement 29 23
Cliffs of despair consolation prize 25 17
Hobbit achievement 23 17
There might be alligators! consolation prize 22 21
Towel Day achievement 22 10
Globalhash achievement 21 23
Origin geohash achievement 20 18
Geoflashing achievement 20 16
Walking on water geohash achievement 20 13
Restricted area achievement 16 14
Golf geohash achievement 16 12
Youngest geohasher achievement 15 7
Fly a kite achievement 15 6
It's a kitty consolation prize 15 12
Camping geohash achievement 15 11
Displaced origin geohash achievement 14 7
Pie geohash achievement 13 15
Twister geohash achievement 12 26
Speedrun achievement 11 3
Musical achievement 10 7
N-in-a-row achievement 9 9
Handshake achievement 9 9
Phonebooth stuffing achievement 9 25
Largest geohash achievement 9 1
Cold geohash achievement 9 14
Going deep geohash achievement 8 8
Geohash by proxy achievement 8 6
Namesake achievement 8 1
Geohashing in the media 7 7
Oldest geohasher achievement 7 6
Trail of blood consolation prize 7 4
Cross that bridge achievement 7 4
Buccaneer geohash achievement 7 16
Underwater geohash achievement 6 7
Climb achievement 6 4
North geohash achievement 5 7
Wedding anniversary geohash achievement 5 6
High geohash achievement 5 4
Low geohash achievement 5 3
Hunter gatherer achievement 5 2
Calendar girl achievement 5 10
Abduction achievement 5 10
Sex geohash achievement 4 7
Multiple elevations achievement 4 4
Democracy achievement 4 2
Birds of a Feather achievement 4 1
Migration geohash achievement 4 10
Time-traveller achievement 3 4
West geohash achievement 3 2
Cubicle geohash achievement 3 2
Constant geohasher achievement 3 2
Geobrush achievement 3 1
Most active graticules achievement 2 6
Hot geohash achievement 2 4
East geohash achievement 2 3
Graticule hopper achievement 2 2
White Rabbit consolation prize 2 1
South geohash achievement 2 1
Posted achievement 2 1
Endurance geohashing achievement 2 1
Curse of Unawareness consolation prize 2 16
Star photographer achievement 1 2
Maker achievement 1 1
Eclipse achievement 1 1
Couch potato geohash achievement 1 1
Beast of burden geohash achievement 1 1
Skate geohash achievement 0 0
MacGyver geohash achievement 0 0
Bill Gates achievement 0 0

Source code

The following program generates this page:

#!/bin/bash

# Copyright 2023 Fippe
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

dir="/tmp/gh-achievementstats"
categoryAPI="https://geohashing.site/api.php?format=json&action=query&list=categorymembers&cmprop=title&cmlimit=5000&cmtitle=Category"
regularAchievements=("Abduction_achievement" "Admit_one_achievement" "Air_geohash_achievement" "Ambassador_achievement" "A_Tale_of_Two_Hashes_achievement" "Beast_of_burden_geohash_achievement" "Bicycle_geohash_achievement" "Bill_Gates_achievement" "Birds_of_a_Feather_achievement" "Birthday_geohash_achievement" "Blinded_by_science_consolation_prize" "Border_geohash_achievement" "Buccaneer_geohash_achievement" "Calendar_girl_achievement" "Camping_geohash_achievement" "Circus_geohash_achievement" "Cliffs_of_despair_consolation_prize" "Climb_achievement" "Coffin_potato_achievement" "Cold_geohash_achievement" "Combo_achievement" "Consecutive_geohash_achievement" "Constant_geohasher_achievement" "Couch_potato_geohash_achievement" "Cross_that_bridge_achievement" "Cubicle_geohash_achievement" "Curse_of_Unawareness_consolation_prize" "Dark_Ages_achievement" "Déjà_vu_geohash_achievement" "Democracy_achievement" "Done_with_Nature_consolation_prize" "Drag-along_achievement" "Drowned_rat_geohash_achievement" "Earliest_geohash_achievement" "East_geohash_achievement" "Easy_geohash" "Eclipse_achievement" "Endurance_geohashing_achievement" "Fly_a_kite_achievement" "Formal_attire_achievement" "Frozen_geohash_achievement" "Geobrush_achievement" "Geoflashing_achievement" "Geohash_by_proxy_achievement" "Geohashing_Day_achievement" "Geohashing_in_the_media" "Geosquishy_achievement" "Geotrash_achievement" "Globalhash_achievement" "Globetrotters_geohash_achievement" "Going_deep_geohash_achievement" "Golf_geohash_achievement" "Graticule_hopper_achievement" "Graticule_unlocked_achievement" "Gratuitous_ribbon_achievement" "Handshake_achievement" "Hashcard_achievement" "Hashcat_achievement" "Hash_collision_achievement" "Hashiversary_achievement" "High_geohash_achievement" "Hobbit_achievement" "Holy_hash_achievement" "Hot_geohash_achievement" "Hunter_gatherer_achievement" "It's_a_kitty_consolation_prize" "Juggernaut_achievement" "Land_geohash_achievement" "Largest_geohash_achievement" "Last_man_standing_achievement" "Leap_geohash_achievement" "Low_geohash_achievement" "MacGyver_geohash_achievement" "Maker_achievement" "Meet-up_achievement" "Midnight_geohash_achievement" "Migration_geohash_achievement" "Minesweeper_geohash_achievement" "Most_active_graticules_achievement" "Multihash_achievement" "Multiple_elevations_achievement" "Musical_achievement" "My_kingdom_for_a_boat_consolation_prize" "N-in-a-row_achievement" "Namesake_achievement" "No_batteries_geohash_achievement" "North_geohash_achievement" "No_trespassing_consolation_prize" "Oldest_geohasher_achievement" "One_with_Nature_geohash_achievement" "OpenStreetMap_achievement" "Phonebooth_stuffing_achievement" "Picnic_achievement" "Pie_geohash_achievement" "Police_geohash_achievement" "Posted_achievement" "Prize_poultry_consolation_prize" "Pub_geohash_achievement" "Public_transport_geohash_achievement" "Puppet_master_geohash_achievement" "Radio_Yerevan" "Regional_geohashing_achievement" "Restricted_area_achievement" "Reverse_regional_achievement" "Sex_geohash_achievement" "Skate_geohash_achievement" "Snowman_geohash_achievement" "South_geohash_achievement" "Speed_racer_achievement" "Speedrun_achievement" "Star_photographer_achievement" "Subdivision_geohash_achievement" "Sunrise_geohash_achievement" 'There_might_be_alligators!_consolation_prize' "Thumbs_up_geohash_achievement" "Time-traveller_achievement" "Towel_Day_achievement" "Trail_of_blood_consolation_prize" "Train_wreck_consolation_prize" "Tron_achievement" "Twister_geohash_achievement" "Two_to_the_N_achievement" "Underwater_geohash_achievement" "Velociraptor_geohash_achievement" "Walk_geohash_achievement" "Walking_on_water_geohash_achievement" "Water_geohash_achievement" "West_geohash_achievement" "White_Rabbit_consolation_prize" "xkcd-100_geohash_achievement" "xkcd_centurion_achievement" "Youngest_geohasher_achievement")
retroAchievements=("Displaced_origin_geohash_achievement" "Origin_geohash_achievement" "Wedding_anniversary_geohash_achievement")

mkdir -p "$dir"
regex="^[0-9]{4}-[0-9]{2}-[0-9]{2} -?[0-9]{1,3} -?[0-9]{1,3}$|^[0-9]{4}-[0-9]{2}-[0-9]{2} global$|^User:"

function fetchData {
    for category in ${regularAchievements[@]} ${retroAchievements[@]} "Expeditions" "Retro_meetup"
        do echo -n > "$dir/$category"
        cmcontinue="0"
        while [ "$cmcontinue" != "null" ]
            do curl -so "$dir/tmp" "$categoryAPI:$category&cmcontinue=$cmcontinue"
            cmcontinue=$(cat "$dir/tmp" | jq -r ".continue.cmcontinue")
            cat "$dir/tmp" | jq -r ".query.categorymembers[].title" | grep -E "$regex" >> "$dir/$category"
        done
        rm "$dir/tmp"
    done
}

function extractData {
    for category in ${regularAchievements[@]}
        do numExpeditions=$(grep -cf "$dir/$category" "$dir/Expeditions" | tr "\n" "\t")
        test -z "$numExpeditions" && echo -en "0\t" || echo -n "$numExpeditions"
        grep "^User:" "$dir/$category" | cut -d "/" -f 1 | sort -u | wc -l | tr "\n" "\t"
        echo "$category"
    done

    for category in ${retroAchievements[@]}
        do numExpeditions=$(grep -cf "$dir/$category" "$dir/Retro_meetup" | tr "\n" "\t")
        test -z "$numExpeditions" && echo -en "0\t" || echo -n "$numExpeditions"
        grep "^User:" "$dir/$category" | cut -d "/" -f 1 | sort -u | wc -l | tr "\n" "\t"
        echo "$category"
    done
}

function toShortNames {
    tr "\n_" ", " | sed -e "s/ geohash achievement]/]/g" -e "s/ geohashing achievement]/]/g" -e "s/ geohash]/]/g" -e "s/ geohasher achievement]/]/g" -e "s/ achievement]/]/g" -e "s/ consolation prize]/]/g" | head -c -1
}

function formatBriefTable {
    echo -en '<includeonly>{|class="wikitable"\n!Times claimed!!Achievements'
    
    echo -en "\n|-\n|1000+||"
    echo "$1" | sort -nr | awk '{ if($1>=1000) print " [[" $3 "|" $3 "]]" }' | toShortNames
    
    echo -en "\n|-\n|500—1000||"
    echo "$1" | sort -nr | awk '{ if($1<1000 && $1>=500) print " [[" $3 "|" $3 "]]" }' | toShortNames
    
    echo -en "\n|-\n|100—500||"
    echo "$1" | sort -nr | awk '{ if($1<500 && $1>=100) print " [[" $3 "|" $3 "]]" }' | toShortNames

    echo -en "\n|-\n|50—100||"
    echo "$1" | sort -nr | awk '{ if($1<100 && $1>=50) print " [[" $3 "|" $3 "]]" }' | toShortNames
    
    echo -en "\n|-\n|10—50||"
    echo "$1" | sort -nr | awk '{ if($1<50 && $1>=10) print " [[" $3 "|" $3 "]]" }' | toShortNames
    
    echo -en "\n|-\n|1—10||"
    echo "$1" | sort -nr | awk '{ if($1<10 && $1>=1) print " [[" $3 "|" $3 "]]" }' | toShortNames
    
    echo -en "\n|-\n|Unclaimed||"
    echo "$1" | sort -nr | awk '{ if($1==0) print " [[" $3 "|" $3 "]]" }' | toShortNames
       
    echo -e "\n|}</includeonly>"
}

function formatFullTable {
    echo "==Achievements=="

    echo '{|class="wikitable sortable zebra"'
    echo '!Achievement!!# of Expeditions!!# of Geohashers'

    echo "$1" | sort -gr | while read -r numExpeditions numUsers achievement
        do echo "|-"
        echo "|[[$achievement]]||$numExpeditions||$numUsers" | tr "_" " "
    done
    
    echo "|}"
}

echo -e "<noinclude>This page ranks achievements by how common they are, it shows how many geohashers have claimed them and on how many [[expedition]]s the achievement was claimed. For some achievements, like the [[xkcd centurion achievement]], this number will not only include geohashers that have the full achievement, but also those who are on their way there.\n\nFor a thematically sorted list with brief descriptions of the achievements, see '''[[achievements]]''' instead. For detailed descriptions, see the pages for the individual achievements.\n"

date +"Last updated: %F"

fetchData
data=$(extractData)
formatFullTable "$data"

echo "==Source code=="    
echo "The following program generates this page:<pre"">$(cat "$0")</pre"">[[Category:Achievements]]</noinclude"">"
formatBriefTable "$data"