diff options
author | AlisaLinUwU <alisalinuwu@gmail.com> | 2025-01-26 11:47:38 +0500 |
---|---|---|
committer | AlisaLinUwU <alisalinuwu@gmail.com> | 2025-01-26 11:47:38 +0500 |
commit | 4154d33fcdfbe8eefc66149e4a13d41a814a5abd (patch) | |
tree | 1d7474bc7dc04b90fd1d705d607e8bb76341e50a /Phone Book/Instant search/task-info.yaml |
Initializemain
Diffstat (limited to 'Phone Book/Instant search/task-info.yaml')
-rw-r--r-- | Phone Book/Instant search/task-info.yaml | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Phone Book/Instant search/task-info.yaml b/Phone Book/Instant search/task-info.yaml new file mode 100644 index 0000000..6fd9cf2 --- /dev/null +++ b/Phone Book/Instant search/task-info.yaml @@ -0,0 +1,85 @@ +type: edu +custom_name: stage4 +files: +- name: src/phonebook/Main.java + visible: true + text: | + package phonebook; + + public class Main { + public static void main(String[] args) { + System.out.println("Hello World!"); + } + } + learner_created: false +- name: test/PhoneBookTest.java + visible: false + text: "import org.hyperskill.hstest.stage.StageTest;\nimport org.hyperskill.hstest.testcase.CheckResult;\n\ + import org.hyperskill.hstest.testcase.TestCase;\n\nimport java.util.ArrayList;\n\ + import java.util.Arrays;\nimport java.util.List;\nimport java.util.regex.Matcher;\n\ + import java.util.regex.Pattern;\n\npublic class PhoneBookTest extends StageTest\ + \ {\n\n private long timeOnTestStart;\n \n @Override\n public List<TestCase>\ + \ generate() {\n timeOnTestStart = System.currentTimeMillis();\n \ + \ return Arrays.asList(\n new TestCase().setTimeLimit(30 * 60 * 1000)\n\ + \ );\n }\n \n \n private CheckResult checkPhrases(String reply,\ + \ String... phrases) {\n reply = reply.toLowerCase();\n for (String\ + \ phrase : phrases) {\n if (!reply.contains(phrase.toLowerCase()))\ + \ {\n return CheckResult.wrong(\"Not found the part `\" + phrase\ + \ + \"` in your output.\");\n }\n }\n return CheckResult.correct();\n\ + \ }\n \n private List<String> findAll(String reply, String regex) {\n\ + \ Matcher matcher = Pattern.compile(regex).matcher(reply);\n List<String>\ + \ groups = new ArrayList<>();\n while (matcher.find()) {\n groups.add(matcher.group());\n\ + \ }\n return groups;\n }\n \n private String timeRegex\ + \ = \"(\\\\d+)\\\\s*min.*?(\\\\d+)\\\\s*sec.*?(\\\\d+)\\\\s*ms\";\n private\ + \ Pattern timeRegexPattern = Pattern.compile(timeRegex);\n \n private long\ + \ parseTimestamp(String timestamp) {\n Matcher matcher = timeRegexPattern.matcher(timestamp);\n\ + \ if (!matcher.matches() || matcher.groupCount() < 3) {\n throw\ + \ new IllegalStateException(\"???Not matches the line \" + timestamp);\n \ + \ }\n int min = Integer.parseInt(matcher.group(1));\n int sec\ + \ = Integer.parseInt(matcher.group(2));\n int ms = Integer.parseInt(matcher.group(3));\n\ + \ return ms + sec * 1000 + min * 1000 * 60;\n }\n \n \n \n\ + \ @Override\n public CheckResult check(String reply, Object clue) {\n \ + \ long realTime = System.currentTimeMillis() - timeOnTestStart;\n \ + \ reply = reply.toLowerCase();\n CheckResult res = checkPhrases(reply,\n\ + \ \"found\",\n \"min.\",\n \"sec.\"\ + ,\n \"ms.\",\n \"sorting time\",\n \ + \ \"searching time\",\n \"linear search\",\n \"\ + bubble sort\",\n \"jump search\",\n \"quick sort\"\ + ,\n \"binary search\",\n \"hash table\",\n \ + \ \"creating time\"\n );\n if (!res.isCorrect()) {\n \ + \ return res;\n }\n \n List<String> stat1 = findAll(reply,\ + \ \"500 / 500\");\n List<String> stat2 = findAll(reply, \"500/500\");\n\ + \ \n if (stat1.size() + stat2.size() < 4) {\n return CheckResult.wrong(\"\ + Your output should contain 4 times the phrase `500 / 500`\");\n }\n \ + \ \n List<String> timestamps = findAll(reply, timeRegex);\n if (timestamps.size()\ + \ != 10) {\n return CheckResult.wrong(\"Your output should contain\ + \ 10 timer outputs, but found \"\n + timestamps.size());\n\ + \ }\n // should not fail..\n long t1 = parseTimestamp(timestamps.get(0));\n\ + \ long t2 = parseTimestamp(timestamps.get(1));\n long t3 = parseTimestamp(timestamps.get(2));\n\ + \ long t4 = parseTimestamp(timestamps.get(3));\n // qsort\n \ + \ long t5 = parseTimestamp(timestamps.get(4));\n long t6 = parseTimestamp(timestamps.get(5));\n\ + \ long t7 = parseTimestamp(timestamps.get(6));\n // hash table\n\ + \ long t8 = parseTimestamp(timestamps.get(7));\n long t9 = parseTimestamp(timestamps.get(8));\n\ + \ long t10 = parseTimestamp(timestamps.get(9));\n \n if (Math.abs(t3\ + \ + t4 - t2) > 100) {\n return CheckResult.wrong(\"Your third and fourth\ + \ timer outputs in total (bubble sorting and searching) \" +\n \ + \ \"should be equal to the second (total search time).\");\n }\n \ + \ if (Math.abs(t6 + t7 - t5) > 100) {\n return CheckResult.wrong(\"\ + Your 6-th and 7-th timer outputs in total (qsort and searching) \" +\n \ + \ \"should be equal to the 5-th (total search time).\");\n \ + \ }\n if (Math.abs(t9 + t10 - t8) > 100) {\n return CheckResult.wrong(\"\ + Your 9-th and 10-th timer outputs in total (creating hashtable and searching)\ + \ \" +\n \"should be equal to the 8-th (total search time).\"\ + );\n }\n \n long estimatedTime = t1 + t2 + t5 + t8;\n \ + \ if (realTime < 1000) {\n return CheckResult.wrong(\"Your program\ + \ completes too fast. Faster than a second!\");\n }\n\n if (Math.abs(estimatedTime\ + \ - realTime) > estimatedTime * 0.3) {\n return CheckResult.wrong(\"\ + Your estimated time is not similar to real time the program works. \" +\n \ + \ \"Real time: \" + realTime + \"ms, estimated time: \" + estimatedTime\ + \ + \"ms\");\n }\n \n if (t8 >= t5) {\n return\ + \ CheckResult.wrong(\"Your hashtable works slower, than quick sort + binary search.\"\ + );\n }\n return CheckResult.correct();\n }\n}\n" + learner_created: false +feedback_link: https://hyperskill.org/projects/63/stages/475/implement#comment +status: Unchecked +record: -1 |