4: Add solution for Rust track exercise "Leap".

[?]
Aaw9nJhsNmfzFih9mKyNw9mV8CgERXJkRa1kK1Kx3LQH
Aug 16, 2021, 11:51 AM
YSCR6EHO5KRT3IPHOS3YOG3LTHLX46PFHGGXUOKTYOX6AZFP4MFQC

Dependencies

  • [2] XN7GOFDN 3: Add Rust track exercise "Leap".

Change contents

  • replacement in rust/leap/tests/leap.rs at line 2
    [2.122][2.122:174]()
    assert_eq!(leap::is_leap_year(year), expected);
    [2.122]
    [2.174]
    assert_eq!(leap::is_leap_year(year), expected);
  • replacement in rust/leap/tests/leap.rs at line 7
    [2.233][2.233:273]()
    process_leapyear_case(2015, false);
    [2.233]
    [2.273]
    process_leapyear_case(2015, false);
  • replacement in rust/leap/tests/leap.rs at line 13
    [2.360][2.360:400]()
    process_leapyear_case(1970, false);
    [2.360]
    [2.400]
    process_leapyear_case(1970, false);
  • replacement in rust/leap/tests/leap.rs at line 19
    [2.484][2.484:523]()
    process_leapyear_case(1996, true);
    [2.484]
    [2.523]
    process_leapyear_case(1996, true);
  • replacement in rust/leap/tests/leap.rs at line 25
    [2.603][2.603:642]()
    process_leapyear_case(1960, true);
    [2.603]
    [2.642]
    process_leapyear_case(1960, true);
  • replacement in rust/leap/tests/leap.rs at line 31
    [2.730][2.730:770]()
    process_leapyear_case(2100, false);
    [2.730]
    [2.770]
    process_leapyear_case(2100, false);
  • replacement in rust/leap/tests/leap.rs at line 37
    [2.863][2.863:903]()
    process_leapyear_case(1900, false);
    [2.863]
    [2.903]
    process_leapyear_case(1900, false);
  • replacement in rust/leap/tests/leap.rs at line 43
    [2.968][2.968:1007]()
    process_leapyear_case(2000, true);
    [2.968]
    [2.1007]
    process_leapyear_case(2000, true);
  • replacement in rust/leap/tests/leap.rs at line 49
    [2.1098][2.1098:1137]()
    process_leapyear_case(2400, true);
    [2.1098]
    [2.1137]
    process_leapyear_case(2400, true);
  • replacement in rust/leap/tests/leap.rs at line 55
    [2.1225][2.1225:1265]()
    process_leapyear_case(1800, false);
    [2.1225]
    [2.1265]
    process_leapyear_case(1800, false);
  • replacement in rust/leap/tests/leap.rs at line 61
    [2.1311][2.1311:1351]()
    process_leapyear_case(1997, false);
    [2.1311]
    [2.1351]
    process_leapyear_case(1997, false);
  • replacement in rust/leap/tests/leap.rs at line 67
    [2.1396][2.1396:1585]()
    process_leapyear_case(1, false);
    process_leapyear_case(4, true);
    process_leapyear_case(100, false);
    process_leapyear_case(400, true);
    process_leapyear_case(900, false);
    [2.1396]
    [2.1585]
    process_leapyear_case(1, false);
    process_leapyear_case(4, true);
    process_leapyear_case(100, false);
    process_leapyear_case(400, true);
    process_leapyear_case(900, false);
  • replacement in rust/leap/tests/leap.rs at line 77
    [2.1626][2.1626:1746]()
    process_leapyear_case(1700, false);
    process_leapyear_case(1800, false);
    process_leapyear_case(1900, false);
    [2.1626]
    [2.1746]
    process_leapyear_case(1700, false);
    process_leapyear_case(1800, false);
    process_leapyear_case(1900, false);
  • replacement in rust/leap/tests/leap.rs at line 85
    [2.1801][2.1801:1918]()
    process_leapyear_case(1600, true);
    process_leapyear_case(2000, true);
    process_leapyear_case(2400, true);
    [2.1801]
    [2.1918]
    process_leapyear_case(1600, true);
    process_leapyear_case(2000, true);
    process_leapyear_case(2400, true);
  • replacement in rust/leap/tests/leap.rs at line 93
    [2.1970][2.1970:2108]()
    let incorrect_years = (1600..1700)
    .filter(|&year| leap::is_leap_year(year) != (year % 4 == 0))
    .collect::<Vec<_>>();
    [2.1970]
    [2.2108]
    let incorrect_years = (1600..1700)
    .filter(|&year| leap::is_leap_year(year) != (year % 4 == 0))
    .collect::<Vec<_>>();
  • replacement in rust/leap/tests/leap.rs at line 97
    [2.2109][2.2109:2221]()
    if !incorrect_years.is_empty() {
    panic!("incorrect result for years: {:?}", incorrect_years);
    }
    [2.2109]
    [2.2221]
    if !incorrect_years.is_empty() {
    panic!("incorrect result for years: {:?}", incorrect_years);
    }
  • edit in rust/leap/src/lib.rs at line 1
    [2.2271]
    [2.2272]
    /*
    Info about year lengths: https://en.wikipedia.org/wiki/Year#Summary
    Mean tropical year is about 365.24219: http://adsabs.harvard.edu/pdf/1999A%26A...341..318M
    The reason for Gregorian Calendar rules for leap days: https://blog.plover.com/calendar/leapday.html
    */
  • replacement in rust/leap/src/lib.rs at line 7
    [2.2313][2.2313:2367]()
    unimplemented!("true if {} is a leap year", year)
    [2.2313]
    [2.2367]
    // Check divisibility. Panics if `b` is `0`.
    fn a(a: u64, b: u64) -> bool {
    a % b == 0
    }
    a(year, 80000) || !a(year, 3200) && a(year, 400) || !a(year, 100) && a(year, 4)