@@ -30,10 +30,13 @@ pub enum AchievementType {
3030 UncontestedFirstPlace ,
3131 FirstPlace ,
3232 OnlySolution ,
33+ UncontestedFirstPlacePostMortem ,
3334 // FiveLanguages,
3435 // ImproveFirstPlace,
3536 FirstDaySolve ,
3637 LastDaySolve ,
38+ SolveBeta ,
39+ SolvePostMortem ,
3740 // Change Suggestion Related
3841 ImproveDescription ,
3942 ImproveJudge ,
@@ -105,6 +108,9 @@ impl AchievementType {
105108 AchievementType :: FirstPlace => "A winner is you" ,
106109 AchievementType :: UncontestedFirstPlace => "The winner you are" ,
107110 AchievementType :: OnlySolution => "A player be thee" ,
111+ AchievementType :: SolveBeta => "Lab Rat" ,
112+ AchievementType :: UncontestedFirstPlacePostMortem => "It's not over till it's over" ,
113+ AchievementType :: SolvePostMortem => "Coroner" ,
108114 AchievementType :: ImproveDescription => "Pedant" ,
109115 AchievementType :: ImproveExample => "[Insert Name Here]" ,
110116 AchievementType :: ImproveJudge => "[Insert Name Here]" ,
@@ -129,7 +135,10 @@ impl AchievementType {
129135 | AchievementType :: LastDaySolve
130136 | AchievementType :: FirstPlace
131137 | AchievementType :: OnlySolution
132- | AchievementType :: UncontestedFirstPlace => AchievementCategory :: SolveRelated ,
138+ | AchievementType :: UncontestedFirstPlace
139+ | AchievementType :: SolveBeta
140+ | AchievementType :: SolvePostMortem
141+ | AchievementType :: UncontestedFirstPlacePostMortem => AchievementCategory :: SolveRelated ,
133142 AchievementType :: ImproveExample
134143 | AchievementType :: ImproveJudge
135144 | AchievementType :: ImproveDescription
@@ -185,6 +194,11 @@ impl AchievementType {
185194 "Solve a challenge within 24 hours of when it goes live"
186195 }
187196 AchievementType :: LastDaySolve => "Solve a challenge less than 24 hours before it ends" ,
197+ AchievementType :: SolveBeta => "Solve a beta challenge" ,
198+ AchievementType :: SolvePostMortem => "Solve a challenge after it ends" ,
199+ AchievementType :: UncontestedFirstPlacePostMortem => {
200+ "Beat the best score after the challenge has ended"
201+ }
188202 AchievementType :: Contribute => "Contribute to Byte Heist" ,
189203 AchievementType :: FirstPlace => {
190204 "Get first place on a challenge, even if just for a moment"
@@ -205,6 +219,39 @@ impl AchievementType {
205219 }
206220 }
207221
222+ pub fn get_associated_language ( & self ) -> Option < & ' static Lang > {
223+ match self {
224+ AchievementType :: Apl1000Point => Some ( "tinyapl" ) ,
225+ AchievementType :: Python1000Point => Some ( "python" ) ,
226+ AchievementType :: C1000Point => Some ( "tcc" ) ,
227+ AchievementType :: Rust1000Point => Some ( "rust" ) ,
228+ AchievementType :: Vyxal1000Point => Some ( "vyxal3" ) ,
229+ AchievementType :: JavaScript1000Point | Self :: JavaScript3500Point => Some ( "nodejs" ) ,
230+ _ => None ,
231+ }
232+ . and_then ( |i| LANGS . get ( i) )
233+ }
234+
235+ pub fn get_associated_category ( & self ) -> Option < ChallengeCategory > {
236+ match self {
237+ AchievementType :: CodeGolf1000Point
238+ | AchievementType :: CodeGolf1Point
239+ | AchievementType :: CodeGolf250Point
240+ | AchievementType :: CodeGolf2000Point
241+ | AchievementType :: CodeGolf500Point => Some ( ChallengeCategory :: CodeGolf ) ,
242+
243+ AchievementType :: RestrictedSource1000Point
244+ | AchievementType :: RestrictedSource1Point
245+ | AchievementType :: RestrictedSource250Point
246+ | AchievementType :: RestrictedSource2000Point
247+ | AchievementType :: RestrictedSource500Point => {
248+ Some ( ChallengeCategory :: RestrictedSource )
249+ }
250+
251+ _ => None ,
252+ }
253+ }
254+
208255 pub fn get_icon ( self ) -> String {
209256 format ! ( "<img src=\" /static/achievement-icons/{self:?}.svg\" >" )
210257 }
@@ -333,37 +380,4 @@ impl AchievementType {
333380 }
334381 )
335382 }
336-
337- pub fn get_associated_language ( & self ) -> Option < & ' static Lang > {
338- match self {
339- AchievementType :: Apl1000Point => Some ( "tinyapl" ) ,
340- AchievementType :: Python1000Point => Some ( "python" ) ,
341- AchievementType :: C1000Point => Some ( "tcc" ) ,
342- AchievementType :: Rust1000Point => Some ( "rust" ) ,
343- AchievementType :: Vyxal1000Point => Some ( "vyxal3" ) ,
344- AchievementType :: JavaScript1000Point | Self :: JavaScript3500Point => Some ( "nodejs" ) ,
345- _ => None ,
346- }
347- . and_then ( |i| LANGS . get ( i) )
348- }
349-
350- pub fn get_associated_category ( & self ) -> Option < ChallengeCategory > {
351- match self {
352- AchievementType :: CodeGolf1000Point
353- | AchievementType :: CodeGolf1Point
354- | AchievementType :: CodeGolf250Point
355- | AchievementType :: CodeGolf2000Point
356- | AchievementType :: CodeGolf500Point => Some ( ChallengeCategory :: CodeGolf ) ,
357-
358- AchievementType :: RestrictedSource1000Point
359- | AchievementType :: RestrictedSource1Point
360- | AchievementType :: RestrictedSource250Point
361- | AchievementType :: RestrictedSource2000Point
362- | AchievementType :: RestrictedSource500Point => {
363- Some ( ChallengeCategory :: RestrictedSource )
364- }
365-
366- _ => None ,
367- }
368- }
369383}
0 commit comments