From 4dd7b76df744145a8f0515610a5194b4546d6737 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 19:15:51 +0900 Subject: [PATCH 01/20] =?UTF-8?q?docs:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/intellij-java-wooteco-style.xml | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/main/resources/intellij-java-wooteco-style.xml diff --git a/src/main/resources/intellij-java-wooteco-style.xml b/src/main/resources/intellij-java-wooteco-style.xml new file mode 100644 index 00000000..7b74c164 --- /dev/null +++ b/src/main/resources/intellij-java-wooteco-style.xml @@ -0,0 +1,95 @@ + + + + + + From 2ef72289a213418d6cfb550999045524bb855758 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 19:17:15 +0900 Subject: [PATCH 02/20] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B8=ED=92=8B=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/design/UserInput.java | 7 +++++ src/main/java/wordle/impl/UserInputImpl.java | 33 ++++++++++++++++++++ src/main/java/wordle/vo/UserWord.java | 20 ++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 src/main/java/wordle/design/UserInput.java create mode 100644 src/main/java/wordle/impl/UserInputImpl.java create mode 100644 src/main/java/wordle/vo/UserWord.java diff --git a/src/main/java/wordle/design/UserInput.java b/src/main/java/wordle/design/UserInput.java new file mode 100644 index 00000000..d9ae610b --- /dev/null +++ b/src/main/java/wordle/design/UserInput.java @@ -0,0 +1,7 @@ +package wordle.design; + +import wordle.vo.UserWord; + +public interface UserInput { + public UserWord execute(); // 유저의 인풋을 입력받는다. +} diff --git a/src/main/java/wordle/impl/UserInputImpl.java b/src/main/java/wordle/impl/UserInputImpl.java new file mode 100644 index 00000000..851fed5d --- /dev/null +++ b/src/main/java/wordle/impl/UserInputImpl.java @@ -0,0 +1,33 @@ +package wordle.impl; + +import java.util.Scanner; +import wordle.design.UserInput; +import wordle.vo.UserWord; + +public class UserInputImpl implements UserInput { + + private static final String INSTRUCTION = "정답을 입력해주세요."; + + @Override + public UserWord execute() { + instructor(); + UserWord result = input(); + return result; + } + + private void instructor() { + System.out.println(INSTRUCTION); + } + + private UserWord input() { + try { + Scanner sc = new Scanner(System.in); + String userInput = sc.next(); + sc.close(); + return new UserWord(userInput); + } catch(Exception e) { + e.printStackTrace(); + throw e; + } + } +} diff --git a/src/main/java/wordle/vo/UserWord.java b/src/main/java/wordle/vo/UserWord.java new file mode 100644 index 00000000..d6582c8f --- /dev/null +++ b/src/main/java/wordle/vo/UserWord.java @@ -0,0 +1,20 @@ +package wordle.vo; + +public class UserWord { + private String value; + + public UserWord(String value) { + validate(value); + this.value = value; + } + + private void validate(String value) throws IllegalArgumentException { + if(value.length()!=5) { + throw new IllegalArgumentException(); + } + } + + public String getValue() { + return value; + } +} From 1f15cd56e6977f6be5e926d9a17c3d4246852c0b Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 19:52:32 +0900 Subject: [PATCH 03/20] =?UTF-8?q?wip:=20=EA=B2=8C=EC=9E=84=20=EB=A7=A4?= =?UTF-8?q?=EB=8B=88=EC=A0=80=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/design/GameManager.java | 6 ++++ src/main/java/wordle/design/Judgement.java | 5 +++ src/main/java/wordle/design/Printer.java | 5 +++ .../java/wordle/design/WordGenerator.java | 5 +++ .../java/wordle/impl/GameManagerImpl.java | 36 +++++++++++++++++++ src/main/java/wordle/impl/JudgementImpl.java | 10 ++++++ src/main/java/wordle/impl/PrinterImpl.java | 10 ++++++ .../java/wordle/impl/WordGeneratorImpl.java | 11 ++++++ .../java/wordle/design/UserInputTest.java | 8 +++++ 9 files changed, 96 insertions(+) create mode 100644 src/main/java/wordle/design/GameManager.java create mode 100644 src/main/java/wordle/design/Judgement.java create mode 100644 src/main/java/wordle/design/Printer.java create mode 100644 src/main/java/wordle/design/WordGenerator.java create mode 100644 src/main/java/wordle/impl/GameManagerImpl.java create mode 100644 src/main/java/wordle/impl/JudgementImpl.java create mode 100644 src/main/java/wordle/impl/PrinterImpl.java create mode 100644 src/main/java/wordle/impl/WordGeneratorImpl.java create mode 100644 src/test/java/wordle/design/UserInputTest.java diff --git a/src/main/java/wordle/design/GameManager.java b/src/main/java/wordle/design/GameManager.java new file mode 100644 index 00000000..c50f668d --- /dev/null +++ b/src/main/java/wordle/design/GameManager.java @@ -0,0 +1,6 @@ +package wordle.design; + +public interface GameManager { + public void start(); //WORDLE을 6번 만에 맞춰 보세요. 시도의 결과는 타일의 색 변화로 나타납니다. + public void end(); // 임 게결과 출력 +} diff --git a/src/main/java/wordle/design/Judgement.java b/src/main/java/wordle/design/Judgement.java new file mode 100644 index 00000000..890e5f11 --- /dev/null +++ b/src/main/java/wordle/design/Judgement.java @@ -0,0 +1,5 @@ +package wordle.design; + +public interface Judgement { + public boolean execute(String answer, String input); // 유저 인풋을 판단 +} diff --git a/src/main/java/wordle/design/Printer.java b/src/main/java/wordle/design/Printer.java new file mode 100644 index 00000000..91292804 --- /dev/null +++ b/src/main/java/wordle/design/Printer.java @@ -0,0 +1,5 @@ +package wordle.design; + +public interface Printer { + public void execute(); +} diff --git a/src/main/java/wordle/design/WordGenerator.java b/src/main/java/wordle/design/WordGenerator.java new file mode 100644 index 00000000..69ba6ccd --- /dev/null +++ b/src/main/java/wordle/design/WordGenerator.java @@ -0,0 +1,5 @@ +package wordle.design; + +public interface WordGenerator { + public String execute(); +} diff --git a/src/main/java/wordle/impl/GameManagerImpl.java b/src/main/java/wordle/impl/GameManagerImpl.java new file mode 100644 index 00000000..dc734f71 --- /dev/null +++ b/src/main/java/wordle/impl/GameManagerImpl.java @@ -0,0 +1,36 @@ +package wordle.impl; + +import wordle.design.GameManager; +import wordle.design.Judgement; +import wordle.design.UserInput; +import wordle.design.WordGenerator; +import wordle.vo.UserWord; + +public class GameManagerImpl implements GameManager { + + private static final String OPENING_PHRASE = "WORDLE을 6번 만에 맞춰 보세요.\n시도의 결과는 타일의 색 변화로 나타납니다."; + + private UserInput userInput; + private WordGenerator wordGenerator; + private Judgement judgement; + + public GameManagerImpl() { + this.userInput = new UserInputImpl(); + this.wordGenerator = new WordGeneratorImpl(); + this.judgement = new JudgementImpl(); + } + + @Override + public void start() { + final String answer = wordGenerator.execute(); + System.out.println(OPENING_PHRASE); + for (int i = 0; i < 6; i++) { + UserWord userWord = userInput.execute(); + } + } + + @Override + public void end() { + + } +} diff --git a/src/main/java/wordle/impl/JudgementImpl.java b/src/main/java/wordle/impl/JudgementImpl.java new file mode 100644 index 00000000..6d6380fc --- /dev/null +++ b/src/main/java/wordle/impl/JudgementImpl.java @@ -0,0 +1,10 @@ +package wordle.impl; + +import wordle.design.Judgement; + +public class JudgementImpl implements Judgement { + @Override + public boolean execute(String answer, String input) { + return false; + } +} diff --git a/src/main/java/wordle/impl/PrinterImpl.java b/src/main/java/wordle/impl/PrinterImpl.java new file mode 100644 index 00000000..37c9bc85 --- /dev/null +++ b/src/main/java/wordle/impl/PrinterImpl.java @@ -0,0 +1,10 @@ +package wordle.impl; + +import wordle.design.Printer; + +public class PrinterImpl implements Printer { + @Override + public void execute() { + + } +} diff --git a/src/main/java/wordle/impl/WordGeneratorImpl.java b/src/main/java/wordle/impl/WordGeneratorImpl.java new file mode 100644 index 00000000..1179838a --- /dev/null +++ b/src/main/java/wordle/impl/WordGeneratorImpl.java @@ -0,0 +1,11 @@ +package wordle.impl; + +import wordle.design.WordGenerator; + +public class WordGeneratorImpl implements WordGenerator { + + @Override + public String execute() { + return "maven"; + } +} diff --git a/src/test/java/wordle/design/UserInputTest.java b/src/test/java/wordle/design/UserInputTest.java new file mode 100644 index 00000000..b499bda4 --- /dev/null +++ b/src/test/java/wordle/design/UserInputTest.java @@ -0,0 +1,8 @@ +package wordle.design; + +import static org.junit.jupiter.api.Assertions.*; + +class UserInputTest { + + +} \ No newline at end of file From d9acdb35c3c2567f3828dd69bcafc1414808480e Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 20:00:49 +0900 Subject: [PATCH 04/20] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84?= =?UTF-8?q?=EC=84=9D=20=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\270\260\353\212\245\353\266\204\354\204\235.md" | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 "\352\270\260\353\212\245\353\266\204\354\204\235.md" diff --git "a/\352\270\260\353\212\245\353\266\204\354\204\235.md" "b/\352\270\260\353\212\245\353\266\204\354\204\235.md" new file mode 100644 index 00000000..7bd299e2 --- /dev/null +++ "b/\352\270\260\353\212\245\353\266\204\354\204\235.md" @@ -0,0 +1,10 @@ +## 기능분석 + +- 사용자 입력을 받는 기능 +- 정답을 생성하는 기능 + - 생성 규칙 : `word.txt` 에 존재하는 단어 + - 정답은 ((현재 날짜 - 2021년 6월 19일) % 배열의 크기) 번째의 단어 +- 정답을 판별하는 기능 + - 사용자 입력을 판별하여 타일의 색을 표현 + +- 판별 결과를 바탕으로 색상 결정 (입력마다 수행) \ No newline at end of file From ce89938c3a318ae9c16fb3c06db2ae9d7198c0ae Mon Sep 17 00:00:00 2001 From: tongnamuu Date: Sun, 24 Apr 2022 20:01:19 +0900 Subject: [PATCH 05/20] =?UTF-8?q?refactor:=20UserWord=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/impl/UserInputImpl.java | 2 +- src/main/java/wordle/vo/UserWord.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/wordle/impl/UserInputImpl.java b/src/main/java/wordle/impl/UserInputImpl.java index 851fed5d..80c3a5b9 100644 --- a/src/main/java/wordle/impl/UserInputImpl.java +++ b/src/main/java/wordle/impl/UserInputImpl.java @@ -24,7 +24,7 @@ private UserWord input() { Scanner sc = new Scanner(System.in); String userInput = sc.next(); sc.close(); - return new UserWord(userInput); + return UserWord.of(userInput); } catch(Exception e) { e.printStackTrace(); throw e; diff --git a/src/main/java/wordle/vo/UserWord.java b/src/main/java/wordle/vo/UserWord.java index d6582c8f..2ef23fdc 100644 --- a/src/main/java/wordle/vo/UserWord.java +++ b/src/main/java/wordle/vo/UserWord.java @@ -3,12 +3,16 @@ public class UserWord { private String value; - public UserWord(String value) { - validate(value); + private UserWord(String value) { this.value = value; } - private void validate(String value) throws IllegalArgumentException { + public static UserWord of(String value) { + validate(value); + return new UserWord(value); + } + + private static void validate(String value) throws IllegalArgumentException { if(value.length()!=5) { throw new IllegalArgumentException(); } From faf7b92d1c92feb1c415597cb187b8037427559a Mon Sep 17 00:00:00 2001 From: tongnamuu Date: Sun, 24 Apr 2022 20:03:31 +0900 Subject: [PATCH 06/20] =?UTF-8?q?docs:=20=EB=B9=84=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\352\270\260\353\212\245\353\266\204\354\204\235.md" | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git "a/\352\270\260\353\212\245\353\266\204\354\204\235.md" "b/\352\270\260\353\212\245\353\266\204\354\204\235.md" index 7bd299e2..b5b8783e 100644 --- "a/\352\270\260\353\212\245\353\266\204\354\204\235.md" +++ "b/\352\270\260\353\212\245\353\266\204\354\204\235.md" @@ -7,4 +7,10 @@ - 정답을 판별하는 기능 - 사용자 입력을 판별하여 타일의 색을 표현 -- 판별 결과를 바탕으로 색상 결정 (입력마다 수행) \ No newline at end of file +- 판별 결과를 바탕으로 색상 결정 (입력마다 수행) + + +## 비기능 요구사항 + +- 유저가 길이가 4인 문자열을 입력했을 때 +- \ No newline at end of file From d38868f60a9dd65a37df5954b88d582f3a7c2af5 Mon Sep 17 00:00:00 2001 From: tongnamuu Date: Sun, 24 Apr 2022 20:34:08 +0900 Subject: [PATCH 07/20] wip: GameManager --- src/main/java/wordle/design/Judgement.java | 4 +++- src/main/java/wordle/design/Printer.java | 4 +++- .../java/wordle/impl/GameManagerImpl.java | 22 ++++++++++++++++--- src/main/java/wordle/impl/JudgementImpl.java | 5 +++-- src/main/java/wordle/impl/PrinterImpl.java | 5 +++-- src/main/java/wordle/vo/Color.java | 8 +++++++ src/main/java/wordle/vo/JudgeResult.java | 16 ++++++++++++++ 7 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 src/main/java/wordle/vo/Color.java create mode 100644 src/main/java/wordle/vo/JudgeResult.java diff --git a/src/main/java/wordle/design/Judgement.java b/src/main/java/wordle/design/Judgement.java index 890e5f11..e627be86 100644 --- a/src/main/java/wordle/design/Judgement.java +++ b/src/main/java/wordle/design/Judgement.java @@ -1,5 +1,7 @@ package wordle.design; +import wordle.vo.JudgeResult; + public interface Judgement { - public boolean execute(String answer, String input); // 유저 인풋을 판단 + public JudgeResult execute(String answer, String input); // 유저 인풋을 판단 } diff --git a/src/main/java/wordle/design/Printer.java b/src/main/java/wordle/design/Printer.java index 91292804..4f17ac03 100644 --- a/src/main/java/wordle/design/Printer.java +++ b/src/main/java/wordle/design/Printer.java @@ -1,5 +1,7 @@ package wordle.design; +import wordle.vo.JudgeResult; + public interface Printer { - public void execute(); + public void execute(JudgeResult result); } diff --git a/src/main/java/wordle/impl/GameManagerImpl.java b/src/main/java/wordle/impl/GameManagerImpl.java index dc734f71..47a8b724 100644 --- a/src/main/java/wordle/impl/GameManagerImpl.java +++ b/src/main/java/wordle/impl/GameManagerImpl.java @@ -2,30 +2,46 @@ import wordle.design.GameManager; import wordle.design.Judgement; +import wordle.design.Printer; import wordle.design.UserInput; import wordle.design.WordGenerator; +import wordle.vo.JudgeResult; import wordle.vo.UserWord; public class GameManagerImpl implements GameManager { private static final String OPENING_PHRASE = "WORDLE을 6번 만에 맞춰 보세요.\n시도의 결과는 타일의 색 변화로 나타납니다."; + private static final int PROGRESS_COUNT = 6; private UserInput userInput; private WordGenerator wordGenerator; private Judgement judgement; + private Printer printer; + + private String answer; public GameManagerImpl() { this.userInput = new UserInputImpl(); this.wordGenerator = new WordGeneratorImpl(); this.judgement = new JudgementImpl(); + this.printer = new PrinterImpl(); + } + + private void init() { + this.answer = wordGenerator.execute(); + System.out.println(OPENING_PHRASE); } @Override public void start() { - final String answer = wordGenerator.execute(); - System.out.println(OPENING_PHRASE); - for (int i = 0; i < 6; i++) { + init(); + for (int i = 0; i < PROGRESS_COUNT; i++) { UserWord userWord = userInput.execute(); + JudgeResult judgeResult = judgement.execute(answer, userWord.getValue()); + printer.execute(judgeResult); + if(judgeResult.isEndAble()) { // Todo indent 2 맞추기 + end(); + } } } diff --git a/src/main/java/wordle/impl/JudgementImpl.java b/src/main/java/wordle/impl/JudgementImpl.java index 6d6380fc..75889334 100644 --- a/src/main/java/wordle/impl/JudgementImpl.java +++ b/src/main/java/wordle/impl/JudgementImpl.java @@ -1,10 +1,11 @@ package wordle.impl; import wordle.design.Judgement; +import wordle.vo.JudgeResult; public class JudgementImpl implements Judgement { @Override - public boolean execute(String answer, String input) { - return false; + public JudgeResult execute(String answer, String input) { + return JudgeResult.BAD; } } diff --git a/src/main/java/wordle/impl/PrinterImpl.java b/src/main/java/wordle/impl/PrinterImpl.java index 37c9bc85..12298492 100644 --- a/src/main/java/wordle/impl/PrinterImpl.java +++ b/src/main/java/wordle/impl/PrinterImpl.java @@ -1,10 +1,11 @@ package wordle.impl; import wordle.design.Printer; +import wordle.vo.JudgeResult; public class PrinterImpl implements Printer { @Override - public void execute() { - + public void execute(JudgeResult result) { + } } diff --git a/src/main/java/wordle/vo/Color.java b/src/main/java/wordle/vo/Color.java new file mode 100644 index 00000000..e7cddbaa --- /dev/null +++ b/src/main/java/wordle/vo/Color.java @@ -0,0 +1,8 @@ +package wordle.vo; + +public enum Color { + GREEN, + YELLOW, + WHITE, + GRAY; +} diff --git a/src/main/java/wordle/vo/JudgeResult.java b/src/main/java/wordle/vo/JudgeResult.java new file mode 100644 index 00000000..e3705bd1 --- /dev/null +++ b/src/main/java/wordle/vo/JudgeResult.java @@ -0,0 +1,16 @@ +package wordle.vo; + +public enum JudgeResult { + GOOD(true), + BAD(false); + + private final boolean endAble; + + JudgeResult(boolean endAble) { + this.endAble = endAble; + } + + public boolean isEndAble() { + return endAble; + } +} From b6645a15412fbdfab3b64b77700fc97dde5ca1df Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 21:16:48 +0900 Subject: [PATCH 08/20] =?UTF-8?q?feat:=20words.txt=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=9D=84=20=EC=9D=BD=EC=96=B4=20=EB=8B=A8=EC=96=B4=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/wordle/impl/WordGeneratorImpl.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/wordle/impl/WordGeneratorImpl.java b/src/main/java/wordle/impl/WordGeneratorImpl.java index 1179838a..672a2023 100644 --- a/src/main/java/wordle/impl/WordGeneratorImpl.java +++ b/src/main/java/wordle/impl/WordGeneratorImpl.java @@ -1,11 +1,33 @@ package wordle.impl; +import java.time.Duration; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; import wordle.design.WordGenerator; public class WordGeneratorImpl implements WordGenerator { + // words.txt 파일을 배열로 만들어서 ((현재 날짜 - 2021년 6월 19일) % 배열의 크기) 번째의 단어를 반환한다 + + private static final List WORDS = readFile(); + private static final String REFERENCE_DATE = "2021-06-19"; + @Override public String execute() { - return "maven"; + return WORDS.get(findIndex()); + } + + private static List readFile() { + return List.of("apple", "adult", "judge", "rower", "artsy", "rural", "shave"); + } + + private int findIndex() { + LocalDate now = LocalDate.now(); + LocalDate referenceDay = LocalDate.parse(REFERENCE_DATE, DateTimeFormatter.ISO_LOCAL_DATE); + Duration diff = Duration.between(now.atStartOfDay(), referenceDay.atStartOfDay()); + long diffDays = diff.toDays(); + + return (int) (diffDays % WORDS.size()); } } From 9e7d23aaf13755e51dd2c4afa5680dc65e88369a Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 21:17:59 +0900 Subject: [PATCH 09/20] =?UTF-8?q?refactor:=20=EC=A0=95=EB=8B=B5=EC=9D=84?= =?UTF-8?q?=20=EC=83=81=EC=88=98=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/impl/GameManagerImpl.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/wordle/impl/GameManagerImpl.java b/src/main/java/wordle/impl/GameManagerImpl.java index 47a8b724..70e66f50 100644 --- a/src/main/java/wordle/impl/GameManagerImpl.java +++ b/src/main/java/wordle/impl/GameManagerImpl.java @@ -18,8 +18,6 @@ public class GameManagerImpl implements GameManager { private Judgement judgement; private Printer printer; - private String answer; - public GameManagerImpl() { this.userInput = new UserInputImpl(); this.wordGenerator = new WordGeneratorImpl(); @@ -27,14 +25,10 @@ public GameManagerImpl() { this.printer = new PrinterImpl(); } - private void init() { - this.answer = wordGenerator.execute(); - System.out.println(OPENING_PHRASE); - } - @Override public void start() { - init(); + final String answer = wordGenerator.execute(); + System.out.println(OPENING_PHRASE); for (int i = 0; i < PROGRESS_COUNT; i++) { UserWord userWord = userInput.execute(); JudgeResult judgeResult = judgement.execute(answer, userWord.getValue()); From ce3154d92a09b6b8cbf742c6cb141986efe4a410 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sun, 24 Apr 2022 21:18:34 +0900 Subject: [PATCH 10/20] =?UTF-8?q?feat:=20Application=20main()=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/WordleApplication.java | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/wordle/WordleApplication.java diff --git a/src/main/java/wordle/WordleApplication.java b/src/main/java/wordle/WordleApplication.java new file mode 100644 index 00000000..db23139a --- /dev/null +++ b/src/main/java/wordle/WordleApplication.java @@ -0,0 +1,22 @@ +package wordle; + +public class WordleApplication { + + public static void main(String[] args) { +// GameManager gameManager; +// Input input; +// Output output; +// Judgement judgement; +// CreateAnswer createAnswer; + + /* + gameManager.start(); + createAnswer.execute(); + for(int i=0;i<6;++i) { + input(); + Result result = judgement.execute(); + output(result) + } + */ + } +} From 9457b4c48a61869a45c7f8316a5a090b474d640a Mon Sep 17 00:00:00 2001 From: tongnamuu Date: Sun, 1 May 2022 22:10:42 +0900 Subject: [PATCH 11/20] =?UTF-8?q?feat:=20Judgement=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/design/Judgement.java | 2 +- src/main/java/wordle/impl/JudgementImpl.java | 56 +++++++++++- src/main/java/wordle/vo/Color.java | 1 - src/main/java/wordle/vo/JudgeResult.java | 24 +++-- .../java/wordle/design/JudgementTest.java | 89 +++++++++++++++++++ 5 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 src/test/java/wordle/design/JudgementTest.java diff --git a/src/main/java/wordle/design/Judgement.java b/src/main/java/wordle/design/Judgement.java index e627be86..9847f0b5 100644 --- a/src/main/java/wordle/design/Judgement.java +++ b/src/main/java/wordle/design/Judgement.java @@ -3,5 +3,5 @@ import wordle.vo.JudgeResult; public interface Judgement { - public JudgeResult execute(String answer, String input); // 유저 인풋을 판단 + JudgeResult execute(String answer, String input); // 유저 인풋을 판단 } diff --git a/src/main/java/wordle/impl/JudgementImpl.java b/src/main/java/wordle/impl/JudgementImpl.java index 75889334..0ae3e43b 100644 --- a/src/main/java/wordle/impl/JudgementImpl.java +++ b/src/main/java/wordle/impl/JudgementImpl.java @@ -1,11 +1,65 @@ package wordle.impl; import wordle.design.Judgement; +import wordle.vo.Color; import wordle.vo.JudgeResult; +/** + * 판별 결과는 흰색의 타일이 세 가지 색(초록색/노란색/회색) 중 하나로 바뀌면서 표현된다. 맞는 글자는 초록색, 위치가 틀리면 노란색, 없으면 회색 두 개의 동일한 문자를 입력하고 그중 하나가 회색으로 표시되면 + * 해당 문자 중 하나만 최종 단어에 나타난다. + */ public class JudgementImpl implements Judgement { @Override public JudgeResult execute(String answer, String input) { - return JudgeResult.BAD; + boolean[] check = new boolean[input.length()]; + JudgeResult result = new JudgeResult(); + + getGreenResult(answer, input, check, result); + getYellowResult(answer, input, check, result); + getGrayResult(check, result); + return result; + } + + private void getGreenResult(String ans, String input, boolean[] check, JudgeResult judgeResult) { + for (int i = 0; i < input.length(); ++i) { + checkGreen(ans.charAt(i), input.charAt(i), check, judgeResult, i); + } } + + private void checkGreen(char input, char ans, boolean[] check, JudgeResult result, int idx) { + if (ans == input) { + check[idx] = true; + result.setColor(idx, Color.GREEN); + } + } + + private void getYellowResult(String ans, String input, boolean[] check, JudgeResult judgeResult) { + for (int i = 0; i < input.length(); ++i) { + for (int j = 0; j < ans.length(); ++j) { + if (!check[j] && input.charAt(i) == ans.charAt(j)) { + check[j] = true; + judgeResult.setColor(i, Color.YELLOW); + break; + } + } + } + } + + private void getGrayResult(boolean[] check, JudgeResult judgeResult) { + for(int i=0;i index, color 모두 맞아야함 + 2. Yellow 인 것을 찾는다. -> index 는 틀려야되고 color 는 같아야함 + 3. 나머진 Gray 로 처리한다. + 단 답에는 존재하지만 유저 인풋에 두 개인 문자가 있을 수 있으므로 + check 배열을 사용해야 할 것 같다. + 결과는 Green Gray or Yellow Gray 가 되야한다. + */ } diff --git a/src/main/java/wordle/vo/Color.java b/src/main/java/wordle/vo/Color.java index e7cddbaa..d62f66d5 100644 --- a/src/main/java/wordle/vo/Color.java +++ b/src/main/java/wordle/vo/Color.java @@ -3,6 +3,5 @@ public enum Color { GREEN, YELLOW, - WHITE, GRAY; } diff --git a/src/main/java/wordle/vo/JudgeResult.java b/src/main/java/wordle/vo/JudgeResult.java index e3705bd1..c55057ee 100644 --- a/src/main/java/wordle/vo/JudgeResult.java +++ b/src/main/java/wordle/vo/JudgeResult.java @@ -1,16 +1,26 @@ package wordle.vo; -public enum JudgeResult { - GOOD(true), - BAD(false); +public class JudgeResult { + Color[] result; - private final boolean endAble; + public JudgeResult() { + this.result = new Color[5]; + } + + public Color[] getResult() { + return result; + } - JudgeResult(boolean endAble) { - this.endAble = endAble; + public void setColor(int idx, Color color) { + this.result[idx] = color; } public boolean isEndAble() { - return endAble; + for (int i = 0; i < result.length; ++i) { + if (!result[i].equals(Color.GREEN)) { + return false; + } + } + return true; } } diff --git a/src/test/java/wordle/design/JudgementTest.java b/src/test/java/wordle/design/JudgementTest.java new file mode 100644 index 00000000..6880c8a9 --- /dev/null +++ b/src/test/java/wordle/design/JudgementTest.java @@ -0,0 +1,89 @@ +package wordle.design; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import wordle.impl.JudgementImpl; +import wordle.vo.Color; +import wordle.vo.JudgeResult; + +class JudgementTest { + private Judgement judgement = new JudgementImpl(); + + @Test + @DisplayName("정답이 맞은 경우 [Green,Green,Green,Green,Green]를 반환한다") + public void test1() { + // given + String ans = "apple"; + String input = "apple"; + + // when + JudgeResult result = judgement.execute(ans, input); + + // then + Color[] colors = result.getResult(); + assertThat(colors[0]).isEqualTo(Color.GREEN); + assertThat(colors[1]).isEqualTo(Color.GREEN); + assertThat(colors[2]).isEqualTo(Color.GREEN); + assertThat(colors[3]).isEqualTo(Color.GREEN); + assertThat(colors[4]).isEqualTo(Color.GREEN); + } + + @Test + @DisplayName("정답이 1개만 맞은 경우 [Green,Gray,Gray,Gray,Gray]를 반환한다") + public void test2() { + // given + String ans = "apple"; + String input = "affxk"; + + // when + JudgeResult result = judgement.execute(ans, input); + + // then + Color[] colors = result.getResult(); + assertThat(colors[0]).isEqualTo(Color.GREEN); + assertThat(colors[1]).isEqualTo(Color.GRAY); + assertThat(colors[2]).isEqualTo(Color.GRAY); + assertThat(colors[3]).isEqualTo(Color.GRAY); + assertThat(colors[4]).isEqualTo(Color.GRAY); + } + + @Test + @DisplayName("정답이 모두 존재하지 않는 경우 [Gray,Gray,Gray,Gray,Gray]를 반환한다") + public void test3() { + // given + String ans = "apple"; + String input = "bcckf"; + + // when + JudgeResult result = judgement.execute(ans, input); + + // then + Color[] colors = result.getResult(); + assertThat(colors[0]).isEqualTo(Color.GRAY); + assertThat(colors[1]).isEqualTo(Color.GRAY); + assertThat(colors[2]).isEqualTo(Color.GRAY); + assertThat(colors[3]).isEqualTo(Color.GRAY); + assertThat(colors[4]).isEqualTo(Color.GRAY); + } + + @Test + @DisplayName("순서가 모두 바뀐 경우 [Yellow,Yellow,Yellow,Yellow,Yellow]를 반환한다") + public void test4() { + // given + String ans = "apple"; + String input = "palep"; + + // when + JudgeResult result = judgement.execute(ans, input); + + // then + Color[] colors = result.getResult(); + assertThat(colors[0]).isEqualTo(Color.YELLOW); + assertThat(colors[1]).isEqualTo(Color.YELLOW); + assertThat(colors[2]).isEqualTo(Color.YELLOW); + assertThat(colors[3]).isEqualTo(Color.YELLOW); + assertThat(colors[4]).isEqualTo(Color.YELLOW); + } +} From cdeb7d70c36c2d0fd6a34c9bd4eb7aa3e37096f8 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:43:16 +0900 Subject: [PATCH 12/20] =?UTF-8?q?feat:=20Color=20code=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/vo/Color.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/wordle/vo/Color.java b/src/main/java/wordle/vo/Color.java index d62f66d5..d988921c 100644 --- a/src/main/java/wordle/vo/Color.java +++ b/src/main/java/wordle/vo/Color.java @@ -1,7 +1,17 @@ package wordle.vo; public enum Color { - GREEN, - YELLOW, - GRAY; + GREEN("\uD83D\uDFE9"), + YELLOW("\uD83D\uDFE8"), + GRAY("\u2B1C"); + + Color(String code) { + this.code = code; + } + + private final String code; + + public String getCode() { + return code; + } } From 1e94fc3b88b4e2326e727c20497561c3c27ca54d Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:44:18 +0900 Subject: [PATCH 13/20] =?UTF-8?q?fix:=20GameManager=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/design/GameManager.java | 6 +- .../java/wordle/impl/GameManagerImpl.java | 64 ++++++++++--------- .../java/wordle/impl/GameManagerImplTest.java | 21 ++++++ 3 files changed, 58 insertions(+), 33 deletions(-) create mode 100644 src/test/java/wordle/impl/GameManagerImplTest.java diff --git a/src/main/java/wordle/design/GameManager.java b/src/main/java/wordle/design/GameManager.java index c50f668d..5b575d28 100644 --- a/src/main/java/wordle/design/GameManager.java +++ b/src/main/java/wordle/design/GameManager.java @@ -1,6 +1,8 @@ package wordle.design; public interface GameManager { - public void start(); //WORDLE을 6번 만에 맞춰 보세요. 시도의 결과는 타일의 색 변화로 나타납니다. - public void end(); // 임 게결과 출력 + + void start(); + + void end(); } diff --git a/src/main/java/wordle/impl/GameManagerImpl.java b/src/main/java/wordle/impl/GameManagerImpl.java index 70e66f50..8a92f399 100644 --- a/src/main/java/wordle/impl/GameManagerImpl.java +++ b/src/main/java/wordle/impl/GameManagerImpl.java @@ -10,37 +10,39 @@ public class GameManagerImpl implements GameManager { - private static final String OPENING_PHRASE = "WORDLE을 6번 만에 맞춰 보세요.\n시도의 결과는 타일의 색 변화로 나타납니다."; - private static final int PROGRESS_COUNT = 6; - - private UserInput userInput; - private WordGenerator wordGenerator; - private Judgement judgement; - private Printer printer; - - public GameManagerImpl() { - this.userInput = new UserInputImpl(); - this.wordGenerator = new WordGeneratorImpl(); - this.judgement = new JudgementImpl(); - this.printer = new PrinterImpl(); - } - - @Override - public void start() { - final String answer = wordGenerator.execute(); - System.out.println(OPENING_PHRASE); - for (int i = 0; i < PROGRESS_COUNT; i++) { - UserWord userWord = userInput.execute(); - JudgeResult judgeResult = judgement.execute(answer, userWord.getValue()); - printer.execute(judgeResult); - if(judgeResult.isEndAble()) { // Todo indent 2 맞추기 - end(); - } - } + private static final String OPENING_PHRASE = "WORDLE을 6번 만에 맞춰 보세요.\n시도의 결과는 타일의 색 변화로 나타납니다."; + private static final String CLOSING_PHRASE = "정답입니다 짝짝짝"; + private static final int PROGRESS_COUNT = 6; + + private UserInput userInput; + private WordGenerator wordGenerator; + private Judgement judgement; + private Printer printer; + + public GameManagerImpl() { + this.userInput = new UserInputImpl(); + this.wordGenerator = new WordGeneratorImpl(); + this.judgement = new JudgementImpl(); + this.printer = new PrinterImpl(); + } + + @Override + public void start() { + final String answer = wordGenerator.execute(); + System.out.println(OPENING_PHRASE); + for (int i = 0; i < PROGRESS_COUNT; i++) { + UserWord userWord = userInput.execute(); + JudgeResult judgeResult = judgement.execute(answer, userWord.getValue()); + printer.execute(judgeResult); + if (judgeResult.isEndAble()) { + end(); + return; + } } + } - @Override - public void end() { - - } + @Override + public void end() { + System.out.println(CLOSING_PHRASE); + } } diff --git a/src/test/java/wordle/impl/GameManagerImplTest.java b/src/test/java/wordle/impl/GameManagerImplTest.java new file mode 100644 index 00000000..48db1a3c --- /dev/null +++ b/src/test/java/wordle/impl/GameManagerImplTest.java @@ -0,0 +1,21 @@ +package wordle.impl; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import wordle.design.GameManager; + +class GameManagerImplTest { + + GameManager gameManager = new GameManagerImpl(); + + + @BeforeEach + void setUp(){ + + } + + @Test + void test1(){ + gameManager.start(); + } +} \ No newline at end of file From f13a2fd25d53b9d8caaa091384108851006f061e Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:44:27 +0900 Subject: [PATCH 14/20] =?UTF-8?q?fix:=20Printer=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/design/Printer.java | 2 +- src/main/java/wordle/impl/PrinterImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/wordle/design/Printer.java b/src/main/java/wordle/design/Printer.java index 4f17ac03..2c5e33cb 100644 --- a/src/main/java/wordle/design/Printer.java +++ b/src/main/java/wordle/design/Printer.java @@ -3,5 +3,5 @@ import wordle.vo.JudgeResult; public interface Printer { - public void execute(JudgeResult result); + void execute(JudgeResult result); } diff --git a/src/main/java/wordle/impl/PrinterImpl.java b/src/main/java/wordle/impl/PrinterImpl.java index 12298492..40b9df44 100644 --- a/src/main/java/wordle/impl/PrinterImpl.java +++ b/src/main/java/wordle/impl/PrinterImpl.java @@ -6,6 +6,6 @@ public class PrinterImpl implements Printer { @Override public void execute(JudgeResult result) { - + System.out.println(result); } } From 105d4416f1ce1854503c40f5701af6829a0caf5e Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:44:44 +0900 Subject: [PATCH 15/20] =?UTF-8?q?fix:=20WordGenerator=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/wordle/design/WordGenerator.java | 3 +- .../java/wordle/impl/WordGeneratorImpl.java | 50 +++++++++++++------ .../wordle/impl/WordGeneratorImplTest.java | 30 +++++++++++ 3 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 src/test/java/wordle/impl/WordGeneratorImplTest.java diff --git a/src/main/java/wordle/design/WordGenerator.java b/src/main/java/wordle/design/WordGenerator.java index 69ba6ccd..840ad95a 100644 --- a/src/main/java/wordle/design/WordGenerator.java +++ b/src/main/java/wordle/design/WordGenerator.java @@ -1,5 +1,6 @@ package wordle.design; public interface WordGenerator { - public String execute(); + + String execute(); } diff --git a/src/main/java/wordle/impl/WordGeneratorImpl.java b/src/main/java/wordle/impl/WordGeneratorImpl.java index 672a2023..8df9825e 100644 --- a/src/main/java/wordle/impl/WordGeneratorImpl.java +++ b/src/main/java/wordle/impl/WordGeneratorImpl.java @@ -1,33 +1,51 @@ package wordle.impl; +import java.io.BufferedReader; +import java.io.FileReader; import java.time.Duration; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; import wordle.design.WordGenerator; public class WordGeneratorImpl implements WordGenerator { - // words.txt 파일을 배열로 만들어서 ((현재 날짜 - 2021년 6월 19일) % 배열의 크기) 번째의 단어를 반환한다 + private static final List WORDS = readFile(); + private static final String REFERENCE_DATE = "2021-06-19"; - private static final List WORDS = readFile(); - private static final String REFERENCE_DATE = "2021-06-19"; + @Override + public String execute() { + return WORDS.get(findIndex()); + } - @Override - public String execute() { - return WORDS.get(findIndex()); - } + private static List readFile() { - private static List readFile() { - return List.of("apple", "adult", "judge", "rower", "artsy", "rural", "shave"); - } + BufferedReader bufferedReader = null; + List listOfLines = new ArrayList<>(); + + try { + bufferedReader = new BufferedReader(new FileReader("src/main/resources/words.txt")); - private int findIndex() { - LocalDate now = LocalDate.now(); - LocalDate referenceDay = LocalDate.parse(REFERENCE_DATE, DateTimeFormatter.ISO_LOCAL_DATE); - Duration diff = Duration.between(now.atStartOfDay(), referenceDay.atStartOfDay()); - long diffDays = diff.toDays(); + String line = bufferedReader.readLine(); - return (int) (diffDays % WORDS.size()); + while (line != null) { + listOfLines.add(line); + line = bufferedReader.readLine(); + } + + } catch (Exception e) { + e.printStackTrace(); } + return listOfLines; + } + + private int findIndex() { + LocalDate now = LocalDate.now(); + LocalDate referenceDay = LocalDate.parse(REFERENCE_DATE, DateTimeFormatter.ISO_LOCAL_DATE); + Duration diff = Duration.between(referenceDay.atStartOfDay(), now.atStartOfDay()); + long diffDays = diff.toDays(); + + return (int) (diffDays % WORDS.size()); + } } diff --git a/src/test/java/wordle/impl/WordGeneratorImplTest.java b/src/test/java/wordle/impl/WordGeneratorImplTest.java new file mode 100644 index 00000000..5d4b583b --- /dev/null +++ b/src/test/java/wordle/impl/WordGeneratorImplTest.java @@ -0,0 +1,30 @@ +package wordle.impl; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import wordle.design.WordGenerator; + +class WordGeneratorImplTest { + + WordGenerator wordGenerator = new WordGeneratorImpl(); + + @Test + @DisplayName("파일을 배열로 잘라서 만든다") + void test1() throws IOException { + BufferedReader bufferedReader = new BufferedReader(new FileReader("src/main/resources/words.txt")); + List listOfLines = new ArrayList<>(); + String line = bufferedReader.readLine(); + + while (line != null) { + listOfLines.add(line); + line = bufferedReader.readLine(); + } + Assertions.assertThat((long) listOfLines.size()).isEqualTo(2309); + } +} \ No newline at end of file From 215cb1c57db30a1331e8facc3dd6fd1080ae000d Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:44:53 +0900 Subject: [PATCH 16/20] =?UTF-8?q?fix:=20UserInput=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/design/UserInput.java | 3 +- src/main/java/wordle/impl/UserInputImpl.java | 43 ++++++++++--------- .../java/wordle/design/UserInputTest.java | 2 - 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/main/java/wordle/design/UserInput.java b/src/main/java/wordle/design/UserInput.java index d9ae610b..aa6d9341 100644 --- a/src/main/java/wordle/design/UserInput.java +++ b/src/main/java/wordle/design/UserInput.java @@ -3,5 +3,6 @@ import wordle.vo.UserWord; public interface UserInput { - public UserWord execute(); // 유저의 인풋을 입력받는다. + + UserWord execute(); } diff --git a/src/main/java/wordle/impl/UserInputImpl.java b/src/main/java/wordle/impl/UserInputImpl.java index 80c3a5b9..ec3f0685 100644 --- a/src/main/java/wordle/impl/UserInputImpl.java +++ b/src/main/java/wordle/impl/UserInputImpl.java @@ -6,28 +6,31 @@ public class UserInputImpl implements UserInput { - private static final String INSTRUCTION = "정답을 입력해주세요."; + private static final String INSTRUCTION = "정답을 입력해주세요."; + private Scanner sc; - @Override - public UserWord execute() { - instructor(); - UserWord result = input(); - return result; - } + public UserInputImpl() { + this.sc = new Scanner(System.in); + } - private void instructor() { - System.out.println(INSTRUCTION); - } + @Override + public UserWord execute() { + instructor(); + UserWord result = input(); + return result; + } + + private void instructor() { + System.out.println(INSTRUCTION); + } - private UserWord input() { - try { - Scanner sc = new Scanner(System.in); - String userInput = sc.next(); - sc.close(); - return UserWord.of(userInput); - } catch(Exception e) { - e.printStackTrace(); - throw e; - } + private UserWord input() { + try { + String userInput = sc.next(); + return UserWord.of(userInput); + } catch (Exception e) { + e.printStackTrace(); + throw e; } + } } diff --git a/src/test/java/wordle/design/UserInputTest.java b/src/test/java/wordle/design/UserInputTest.java index b499bda4..0518283f 100644 --- a/src/test/java/wordle/design/UserInputTest.java +++ b/src/test/java/wordle/design/UserInputTest.java @@ -1,7 +1,5 @@ package wordle.design; -import static org.junit.jupiter.api.Assertions.*; - class UserInputTest { From 837f053b03b662587f52734cd07e360879cdfa33 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:45:12 +0900 Subject: [PATCH 17/20] =?UTF-8?q?feat:=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/vo/JudgeResult.java | 44 +++++++++++++++--------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/main/java/wordle/vo/JudgeResult.java b/src/main/java/wordle/vo/JudgeResult.java index c55057ee..69edd595 100644 --- a/src/main/java/wordle/vo/JudgeResult.java +++ b/src/main/java/wordle/vo/JudgeResult.java @@ -1,26 +1,36 @@ package wordle.vo; +import java.util.Arrays; + public class JudgeResult { - Color[] result; - public JudgeResult() { - this.result = new Color[5]; - } + Color[] result; - public Color[] getResult() { - return result; - } + public JudgeResult() { + this.result = new Color[5]; + } - public void setColor(int idx, Color color) { - this.result[idx] = color; - } + public Color[] getResult() { + return result; + } + + public void setColor(int idx, Color color) { + this.result[idx] = color; + } - public boolean isEndAble() { - for (int i = 0; i < result.length; ++i) { - if (!result[i].equals(Color.GREEN)) { - return false; - } - } - return true; + public boolean isEndAble() { + for (int i = 0; i < result.length; ++i) { + if (!result[i].equals(Color.GREEN)) { + return false; + } } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + Arrays.stream(result).forEach(color -> sb.append(color.getCode())); + return sb.toString(); + } } From 5824ac5b48dec5060edfe84764cd344c825f94ce Mon Sep 17 00:00:00 2001 From: minsoozz Date: Mon, 9 May 2022 23:45:31 +0900 Subject: [PATCH 18/20] =?UTF-8?q?fix:=20main=20application=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/WordleApplication.java | 24 ++++++--------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/main/java/wordle/WordleApplication.java b/src/main/java/wordle/WordleApplication.java index db23139a..6e5763e0 100644 --- a/src/main/java/wordle/WordleApplication.java +++ b/src/main/java/wordle/WordleApplication.java @@ -1,22 +1,12 @@ package wordle; -public class WordleApplication { +import wordle.design.GameManager; +import wordle.impl.GameManagerImpl; - public static void main(String[] args) { -// GameManager gameManager; -// Input input; -// Output output; -// Judgement judgement; -// CreateAnswer createAnswer; +public class WordleApplication { - /* - gameManager.start(); - createAnswer.execute(); - for(int i=0;i<6;++i) { - input(); - Result result = judgement.execute(); - output(result) - } - */ - } + public static void main(String[] args) { + GameManager gameManager = new GameManagerImpl(); + gameManager.start(); + } } From 4d15ea9e69f7254094a6216de01a0896505b3218 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sat, 14 May 2022 19:26:48 +0900 Subject: [PATCH 19/20] =?UTF-8?q?refactor:=20txt=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9D=BD=EB=8A=94=20=EB=B0=A9=EB=B2=95=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/wordle/impl/WordGeneratorImpl.java | 57 ++++++++----------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/src/main/java/wordle/impl/WordGeneratorImpl.java b/src/main/java/wordle/impl/WordGeneratorImpl.java index 8df9825e..1c952b9c 100644 --- a/src/main/java/wordle/impl/WordGeneratorImpl.java +++ b/src/main/java/wordle/impl/WordGeneratorImpl.java @@ -1,51 +1,44 @@ package wordle.impl; -import java.io.BufferedReader; -import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.Duration; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import wordle.design.WordGenerator; public class WordGeneratorImpl implements WordGenerator { - private static final List WORDS = readFile(); - private static final String REFERENCE_DATE = "2021-06-19"; + private static final List WORDS = readFile(); + private static final String REFERENCE_DATE = "2021-06-19"; - @Override - public String execute() { - return WORDS.get(findIndex()); - } - - private static List readFile() { - - BufferedReader bufferedReader = null; - List listOfLines = new ArrayList<>(); + @Override + public String execute() { + return WORDS.get(findIndex()); + } - try { - bufferedReader = new BufferedReader(new FileReader("src/main/resources/words.txt")); + private static List readFile() { - String line = bufferedReader.readLine(); + List lines = null; - while (line != null) { - listOfLines.add(line); - line = bufferedReader.readLine(); - } + try { + lines = Files.lines(Path.of("src/main/resources/words.txt")).collect(Collectors.toList()); - } catch (Exception e) { - e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return lines; } - return listOfLines; - } - private int findIndex() { - LocalDate now = LocalDate.now(); - LocalDate referenceDay = LocalDate.parse(REFERENCE_DATE, DateTimeFormatter.ISO_LOCAL_DATE); - Duration diff = Duration.between(referenceDay.atStartOfDay(), now.atStartOfDay()); - long diffDays = diff.toDays(); + private int findIndex() { + LocalDate now = LocalDate.now(); + LocalDate referenceDay = LocalDate.parse(REFERENCE_DATE, DateTimeFormatter.ISO_LOCAL_DATE); + Duration diff = Duration.between(referenceDay.atStartOfDay(), now.atStartOfDay()); + long diffDays = diff.toDays(); - return (int) (diffDays % WORDS.size()); - } + return (int) (diffDays % WORDS.size()); + } } From 1d8c3beca2cf9f1835498129db3155b9bb253460 Mon Sep 17 00:00:00 2001 From: minsoozz Date: Sat, 14 May 2022 19:27:48 +0900 Subject: [PATCH 20/20] =?UTF-8?q?refactor:=20=EC=9D=B4=EC=A0=84=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EB=82=98=ED=83=80=EB=82=B4?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/wordle/impl/GameManagerImpl.java | 2 ++ src/main/java/wordle/impl/PrinterImpl.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/wordle/impl/GameManagerImpl.java b/src/main/java/wordle/impl/GameManagerImpl.java index 8a92f399..e854c52d 100644 --- a/src/main/java/wordle/impl/GameManagerImpl.java +++ b/src/main/java/wordle/impl/GameManagerImpl.java @@ -1,5 +1,7 @@ package wordle.impl; +import java.util.ArrayList; +import java.util.List; import wordle.design.GameManager; import wordle.design.Judgement; import wordle.design.Printer; diff --git a/src/main/java/wordle/impl/PrinterImpl.java b/src/main/java/wordle/impl/PrinterImpl.java index 40b9df44..65dbd83e 100644 --- a/src/main/java/wordle/impl/PrinterImpl.java +++ b/src/main/java/wordle/impl/PrinterImpl.java @@ -1,11 +1,17 @@ package wordle.impl; +import java.util.ArrayList; +import java.util.List; import wordle.design.Printer; import wordle.vo.JudgeResult; public class PrinterImpl implements Printer { + + private static final List HISTORY = new ArrayList<>(); + @Override - public void execute(JudgeResult result) { - System.out.println(result); + public void execute(JudgeResult judgeResult) { + HISTORY.add(judgeResult.toString()); + HISTORY.forEach(System.out::println); } }