Statistics

Problem Statement for "DateCorrector2023"

Problem Statement

Like many people, Janka has a small problem: during the first few months of a new year her muscle memory kicks in and so she keeps writing "2022" instead of the correct "2023" in all dates.

Help her (and everyone else who suffers from the same issue)! Write a method that will detect dates and fix the year if necessary.


Your method should recognize dates in the following formats: "YYYY-MM-DD", "DD.MM.YYYY", and "MM/DD/YYYY". In these dates, DD is the day (01-31), MM is the month (01-12) and YYYY is the year. The number of digits in DD and MM is always two and in YYYY it's always four, with leading zeros used if necessary.

You are given the String token. You should do one of two things with it:

  • If token represents a valid date in year 2022 in either of the three formats, change the year to 2023 and return the fixed date (in the same format).
  • In all other cases, return token unchanged.

Definition

Class:
DateCorrector2023
Method:
fix
Parameters:
String
Returns:
String
Method signature:
String fix(String token)
(be sure your method is public)

Notes

  • The constraints imply that all characters in token are non-space printable 7-bit ASCII characters.
  • For your convenience, the numbers of days in months of a regular (non-leap) year are as follows: 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31.

Constraints

  • token will contain between 1 and 15 characters, inclusive.
  • Each character in token will have an ASCII value between 33 and 126, inclusive.

Examples

  1. "2022-01-02"

    Returns: "2023-01-02"

    A valid date in the YYYY-MM-DD format (the second of January, 2022). Fix the year.

  2. "03.04.2022"

    Returns: "03.04.2023"

    A valid date in the DD.MM.YYYY format (the third of April, 2022). Fix the year.

  3. "05/06/2022"

    Returns: "05/06/2023"

    A valid date in the MM/DD/YYYY format (the sixth of May, 2022). Fix the year.

  4. "05/06/2021"

    Returns: "05/06/2021"

    A valid date in the MM/DD/YYYY format (the sixth of May, 2021) but not a date in 2022. Do nothing.

  5. "05/06/2023"

    Returns: "05/06/2023"

    Again, a valid date in the MM/DD/YYYY format (the sixth of May, 2023) but not a date in 2022. Do nothing.

  6. "2022-00-02"

    Returns: "2022-00-02"

    Not a valid date: 00 is not a valid month number.

  7. "2022-02-30"

    Returns: "2022-02-30"

    Not a valid date: there is no 30th of February, 2022.

  8. "0-1-2-3/4.5"

    Returns: "0-1-2-3/4.5"

    Not even close to being a valid date.

  9. "HappyNewYear!"

    Returns: "HappyNewYear!"

  10. "3.4.2022"

    Returns: "3.4.2022"

    Not a valid date: both DD and MM must have exactly two digits, but here they only have one.

  11. "003.004.2022"

    Returns: "003.004.2022"

    Again, not a valid date. This time both the day and the month have too many digits.

  12. "003.04.2022"

    Returns: "003.04.2022"

  13. "03.04.02022"

    Returns: "03.04.02022"

  14. "03.04.20220"

    Returns: "03.04.20220"

  15. "03_04.2022"

    Returns: "03_04.2022"

  16. "01/00/2022"

    Returns: "01/00/2022"

  17. "8/2/2011"

    Returns: "8/2/2011"

  18. "13/30/2022"

    Returns: "13/30/2022"

  19. "00.12.2022"

    Returns: "00.12.2022"

  20. "02.01.2022"

    Returns: "02.01.2023"

  21. "2022-6-28"

    Returns: "2022-6-28"

  22. "8/2/2022"

    Returns: "8/2/2022"

  23. "2022-13-2"

    Returns: "2022-13-2"

  24. "2022-3-30"

    Returns: "2022-3-30"

  25. "11/00/2022"

    Returns: "11/00/2022"

  26. "08/00/2022"

    Returns: "08/00/2022"

  27. "30.13.2022"

    Returns: "30.13.2022"

  28. "7/32/2022"

    Returns: "7/32/2022"

  29. "2022-12-28"

    Returns: "2023-12-28"

  30. "07/29/2022"

    Returns: "07/29/2023"

  31. "06/31/2022"

    Returns: "06/31/2022"

  32. "9/31/2022"

    Returns: "9/31/2022"

  33. "2074-01-02"

    Returns: "2074-01-02"

  34. "2022-09-01"

    Returns: "2023-09-01"

  35. "6/28/2022"

    Returns: "6/28/2022"

  36. "31.7.2022"

    Returns: "31.7.2022"

  37. "07/29/2014"

    Returns: "07/29/2014"

  38. "2022-08-02"

    Returns: "2023-08-02"

  39. "2079-07-31"

    Returns: "2079-07-31"

  40. "2.1.2022"

    Returns: "2.1.2022"

  41. "0.12.2038"

    Returns: "0.12.2038"

  42. "3/31/2022"

    Returns: "3/31/2022"

  43. "2.13.2022"

    Returns: "2.13.2022"

  44. "29.05.2022"

    Returns: "29.05.2023"

  45. "01/02/2022"

    Returns: "01/02/2023"

  46. "28.06.2022"

    Returns: "28.06.2023"

  47. "10/0/2022"

    Returns: "10/0/2022"

  48. "2022-1-0"

    Returns: "2022-1-0"

  49. "2022-9-1"

    Returns: "2022-9-1"

  50. "2022-7-32"

    Returns: "2022-7-32"

  51. "2022-10-0"

    Returns: "2022-10-0"

  52. "30.03.2022"

    Returns: "30.03.2023"

  53. "08/29/2022"

    Returns: "08/29/2023"

  54. "29.13.2022"

    Returns: "29.13.2022"

  55. "2022-1-2"

    Returns: "2022-1-2"

  56. "2022-11-00"

    Returns: "2022-11-00"

  57. "6/31/2022"

    Returns: "6/31/2022"

  58. "2022-6-31"

    Returns: "2022-6-31"

  59. "2022-07-29"

    Returns: "2023-07-29"

  60. "2022-06-31"

    Returns: "2022-06-31"

  61. "00.11.2083"

    Returns: "00.11.2083"

  62. "29.5.2078"

    Returns: "29.5.2078"

  63. "31.09.2022"

    Returns: "31.09.2022"

  64. "2022-08-29"

    Returns: "2023-08-29"

  65. "2071-05-29"

    Returns: "2071-05-29"

  66. "31.07.2022"

    Returns: "31.07.2023"

  67. "00.10.2022"

    Returns: "00.10.2022"

  68. "00.08.2022"

    Returns: "00.08.2022"

  69. "08/02/2053"

    Returns: "08/02/2053"

  70. "32.7.2022"

    Returns: "32.7.2022"

  71. "2022-01-01"

    Returns: "2023-01-01"

  72. "2015-8-0"

    Returns: "2015-8-0"

  73. "2022-7-31"

    Returns: "2022-7-31"

  74. "13/02/2022"

    Returns: "13/02/2022"

  75. "2022-13-32"

    Returns: "2022-13-32"

  76. "1/2/2022"

    Returns: "1/2/2022"

  77. "28.12.2022"

    Returns: "28.12.2023"

  78. "5/29/2022"

    Returns: "5/29/2022"

  79. "01/01/2022"

    Returns: "01/01/2023"

  80. "0.11.2022"

    Returns: "0.11.2022"

  81. "32.11.2022"

    Returns: "32.11.2022"

  82. "03/30/2022"

    Returns: "03/30/2023"

  83. "01.09.2022"

    Returns: "01.09.2023"

  84. "05/29/2022"

    Returns: "05/29/2023"

  85. "2022-6-32"

    Returns: "2022-6-32"

  86. "2022-01-00"

    Returns: "2022-01-00"

  87. "29.5.2022"

    Returns: "29.5.2022"

  88. "31.3.2022"

    Returns: "31.3.2022"

  89. "04/02/2022"

    Returns: "04/02/2023"

  90. "31.06.2022"

    Returns: "31.06.2022"

  91. "07/31/2022"

    Returns: "07/31/2023"

  92. "29.7.2022"

    Returns: "29.7.2022"

  93. "11/32/2022"

    Returns: "11/32/2022"

  94. "0.8.2022"

    Returns: "0.8.2022"

  95. "2022-07-31"

    Returns: "2023-07-31"

  96. "2022-10-00"

    Returns: "2022-10-00"

  97. "2022-07-32"

    Returns: "2022-07-32"

  98. "2022-3-31"

    Returns: "2022-3-31"

  99. "11/31/2022"

    Returns: "11/31/2022"

  100. "2022-11-31"

    Returns: "2022-11-31"

  101. "0.10.2022"

    Returns: "0.10.2022"

  102. "30.3.2022"

    Returns: "30.3.2022"

  103. "29.8.2022"

    Returns: "29.8.2022"

  104. "12/00/2022"

    Returns: "12/00/2022"

  105. "31.6.2022"

    Returns: "31.6.2022"

  106. "8/0/2022"

    Returns: "8/0/2022"

  107. "7/29/2022"

    Returns: "7/29/2022"

  108. "32.6.2022"

    Returns: "32.6.2022"

  109. "01.01.2022"

    Returns: "01.01.2023"

  110. "2022-7-29"

    Returns: "2022-7-29"

  111. "32.07.2022"

    Returns: "32.07.2022"

  112. "2022-06-28"

    Returns: "2023-06-28"

  113. "2022-05-29"

    Returns: "2023-05-29"

  114. "7/31/2022"

    Returns: "7/31/2022"

  115. "6/32/2022"

    Returns: "6/32/2022"

  116. "0.12.2022"

    Returns: "0.12.2022"

  117. "03/31/2022"

    Returns: "03/31/2023"

  118. "09/31/2022"

    Returns: "09/31/2022"

  119. "29.8.2006"

    Returns: "29.8.2006"

  120. "8/29/2022"

    Returns: "8/29/2022"

  121. "2002-13-31"

    Returns: "2002-13-31"

  122. "9/1/2022"

    Returns: "9/1/2022"

  123. "13/29/2022"

    Returns: "13/29/2022"

  124. "2022-8-0"

    Returns: "2022-8-0"

  125. "2022-5-29"

    Returns: "2022-5-29"

  126. "28.6.2022"

    Returns: "28.6.2022"

  127. "1.9.2022"

    Returns: "1.9.2022"

  128. "2022-11-32"

    Returns: "2022-11-32"

  129. "11/0/2022"

    Returns: "11/0/2022"

  130. "02.13.2022"

    Returns: "02.13.2022"

  131. "13/2/2022"

    Returns: "13/2/2022"

  132. "12/28/2022"

    Returns: "12/28/2023"

  133. "2008-11-00"

    Returns: "2008-11-00"

  134. "08/02/2022"

    Returns: "08/02/2023"

  135. "3/30/2022"

    Returns: "3/30/2022"

  136. "07/32/2022"

    Returns: "07/32/2022"

  137. "2022-04-02"

    Returns: "2023-04-02"

  138. "2.8.2022"

    Returns: "2.8.2022"

  139. "2039-01-02"

    Returns: "2039-01-02"

  140. "0.1.2022"

    Returns: "0.1.2022"

  141. "10/00/2022"

    Returns: "10/00/2022"

  142. "2.4.2022"

    Returns: "2.4.2022"

  143. "02.08.2022"

    Returns: "02.08.2023"

  144. "2022-9-31"

    Returns: "2022-9-31"

  145. "13/32/2022"

    Returns: "13/32/2022"

  146. "4/2/2014"

    Returns: "4/2/2014"

  147. "1/1/2062"

    Returns: "1/1/2062"

  148. "1/1/2097"

    Returns: "1/1/2097"

  149. "2022-13-31"

    Returns: "2022-13-31"

  150. "1/0/2022"

    Returns: "1/0/2022"

  151. "00.01.2010"

    Returns: "00.01.2010"

  152. "00.11.2022"

    Returns: "00.11.2022"

  153. "06/32/2076"

    Returns: "06/32/2076"

  154. "2022-11-0"

    Returns: "2022-11-0"

  155. "31.03.2022"

    Returns: "31.03.2023"

  156. "32.13.2022"

    Returns: "32.13.2022"

  157. "2022-08-00"

    Returns: "2022-08-00"

  158. "2022-4-2"

    Returns: "2022-4-2"

  159. "2022-06-32"

    Returns: "2022-06-32"

  160. "06/32/2022"

    Returns: "06/32/2022"

  161. "2022-13-29"

    Returns: "2022-13-29"

  162. "12/0/2022"

    Returns: "12/0/2022"

  163. "2019-03-30"

    Returns: "2019-03-30"

  164. "31.11.2022"

    Returns: "31.11.2022"

  165. "29.08.2022"

    Returns: "29.08.2023"

  166. "4/2/2022"

    Returns: "4/2/2022"

  167. "2022-12-0"

    Returns: "2022-12-0"

  168. "1.1.2022"

    Returns: "1.1.2022"

  169. "13/31/2022"

    Returns: "13/31/2022"

  170. "02.04.2022"

    Returns: "02.04.2023"

  171. "32.06.2022"

    Returns: "32.06.2022"

  172. "2022-03-30"

    Returns: "2023-03-30"

  173. "2022-13-30"

    Returns: "2022-13-30"

  174. "29.07.2022"

    Returns: "29.07.2023"

  175. "2022-13-02"

    Returns: "2022-13-02"

  176. "2022-01-02"

    Returns: "2023-01-02"

  177. "2022-8-2"

    Returns: "2022-8-2"

  178. "06/28/2022"

    Returns: "06/28/2023"

  179. "09/01/2022"

    Returns: "09/01/2023"

  180. "1/1/2022"

    Returns: "1/1/2022"

  181. "2022-1-1"

    Returns: "2022-1-1"

  182. "00.01.2022"

    Returns: "00.01.2022"

  183. "31.13.2022"

    Returns: "31.13.2022"

  184. "2022-12-00"

    Returns: "2022-12-00"

  185. "2022-03-31"

    Returns: "2023-03-31"

  186. "2022-09-31"

    Returns: "2022-09-31"

  187. "2022-8-29"

    Returns: "2022-8-29"

  188. "31.9.2022"

    Returns: "31.9.2022"

  189. "2022-02-29"

    Returns: "2022-02-29"

  190. "2022-04-31"

    Returns: "2022-04-31"

  191. "2022-1/-02"

    Returns: "2022-1/-02"

  192. "30.11.2022"

    Returns: "30.11.2023"

  193. "2022202200"

    Returns: "2022202200"

  194. "aa/bb/2022"

    Returns: "aa/bb/2022"


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: