Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
fd3780d
Add User class
Woomin-Jeon Jul 1, 2020
35ab865
Add Users class
Woomin-Jeon Jul 1, 2020
b3cadf4
Add Input.getPlayersName() method
Woomin-Jeon Jul 1, 2020
25d2618
Add PlayersName class to wrap primitive types
Woomin-Jeon Jul 1, 2020
da6e6a4
Add getUsers() to PlayersName class
Woomin-Jeon Jul 1, 2020
194b24e
Modify PlayersName class name to UsersNameReader
Woomin-Jeon Jul 1, 2020
e7ba28b
Modify getPlayersName method name to getUsersName
Woomin-Jeon Jul 1, 2020
8c6eb20
Modifiy getUsers method name to convertNamesToUser
Woomin-Jeon Jul 1, 2020
213fa98
Modify from() factory method name to newInstance
Woomin-Jeon Jul 1, 2020
a1017f9
Modify the name of constant
Woomin-Jeon Jul 3, 2020
0d79d03
Add getNumberOfUsers() method to Users class
Woomin-Jeon Jul 3, 2020
bc04bfe
Add Line class
Woomin-Jeon Jul 3, 2020
6ebb729
Add getHeigthOfLadder() in Input class
Woomin-Jeon Jul 3, 2020
c8e297c
Modify Line constructor parameter
Woomin-Jeon Jul 3, 2020
a9e2f36
Add BridgeGenerator class
Woomin-Jeon Jul 3, 2020
ce18bd7
Finish step2
Woomin-Jeon Jul 3, 2020
097f9b7
Add create() to create random bridges
Woomin-Jeon Jul 3, 2020
7b3d92d
Add getExecutionResult() method in Input class
Woomin-Jeon Jul 6, 2020
6113e7d
Add ExpectingResultReader class
Woomin-Jeon Jul 6, 2020
e1c33da
Add WinningChecker class
Woomin-Jeon Jul 6, 2020
7c2eb30
Add checkWinners() in WinningChecker class
Woomin-Jeon Jul 6, 2020
67f68f2
Add PartsOfLadder class for DTO
Woomin-Jeon Jul 6, 2020
8bc0f12
Modify showWinners() method
Woomin-Jeon Jul 6, 2020
c2c69ca
Change a few lints in LadderGame-main
Woomin-Jeon Jul 6, 2020
ea6ea05
Add WinnerDTO class
Woomin-Jeon Jul 6, 2020
6bd06e3
Add Winners as first class collection
Woomin-Jeon Jul 6, 2020
0bd78b7
Separate checkWinners() by interests
Woomin-Jeon Jul 6, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/main/java/ladder/controller/LadderGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ladder.controller;

import ladder.domain.*;
import ladder.view.Input;
import ladder.view.Output;

public class LadderGame {
public static void main(String[] args) {
UsersNameReader usersNameReader = Input.getUsersName();
Users users = usersNameReader.convertNamesToUsers();

ExpectingResultReader expectingResultReader =
ExpectingResultReader.newInstance(Input.getExectingResult());

LadderMaterial ladderMaterial = LadderMaterial.newInstance(users.getNumberOfUsers(), Input.getHeightOfLadder());
BridgeGenerator bridgeGenerator = BridgeGenerator.newInstance(ladderMaterial);
bridgeGenerator.create();

WinnerDTO winnerDto = WinnerDTO.newInstance();
winnerDto.add(users, expectingResultReader.convertToResultData(), bridgeGenerator.getBridgeStates());

WinningChecker winningChecker = WinningChecker.newInstance();
Winners winners = Winners.newInstance(winningChecker.checkWinners(winnerDto));

Output.showUserNames(users);
Output.showResult(bridgeGenerator.getBridgeStates());
Output.showExpecting(expectingResultReader.toString());
Output.showWinners(winners);
}
}
55 changes: 55 additions & 0 deletions src/main/java/ladder/domain/BridgeGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package ladder.domain;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class BridgeGenerator {
private final LadderMaterial ladderParts;
private final List<Line> bridgeStates = new ArrayList<>();

public BridgeGenerator(LadderMaterial ladderParts) {
this.ladderParts = ladderParts;
}

public static BridgeGenerator newInstance(LadderMaterial ladderParts) {
return new BridgeGenerator(ladderParts);
}

public void create() {
for (int i = 0; i < ladderParts.getHeigthOfLadder(); i += 1) {
Line line = Line.newInstance(makeRandomStates());
bridgeStates.add(line);
}
}

private List<Boolean> makeRandomStates() {
Random random = new Random();

List<Boolean> states = new ArrayList<>();
for (int i = 0; i < ladderParts.getNumberOfUsers() - 1; i += 1) {
addState(random, states, i);
}

return states;
}

private void addState(Random random, List<Boolean> states, int index) {
if (states.size() == 0) {
states.add(random.nextInt() % 2 == 0);
return;
}

if (!states.get(index - 1)) {
states.add(random.nextInt() % 2 == 0);
return;
}

states.add(false);
}

public List<Line> getBridgeStates() {
return Collections.unmodifiableList(this.bridgeStates);
}
}
28 changes: 28 additions & 0 deletions src/main/java/ladder/domain/ExpectingResultReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ladder.domain;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class ExpectingResultReader {
private final String result;

public ExpectingResultReader(String result) {
this.result = result;
}

public static ExpectingResultReader newInstance(String result) {
return new ExpectingResultReader(result);
}

public List<Integer> convertToResultData() {
return Arrays.stream(this.result.replaceAll("꽝", "0").split(",")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
}

@Override
public String toString() {
String[] results = this.result.split(",");

return String.join(" ", results);
}
}
23 changes: 23 additions & 0 deletions src/main/java/ladder/domain/LadderMaterial.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ladder.domain;

public class LadderMaterial {
private final int numberOfUsers;
private final int heigthOfLadder;

public LadderMaterial(int numberOfUsers, int heigthOfLadder) {
this.numberOfUsers = numberOfUsers;
this.heigthOfLadder = heigthOfLadder;
}

public static LadderMaterial newInstance(int numberOfUsers, int heigthOfLadder) {
return new LadderMaterial(numberOfUsers, heigthOfLadder);
}

public int getNumberOfUsers() {
return this.numberOfUsers;
}

public int getHeigthOfLadder() {
return this.heigthOfLadder;
}
}
50 changes: 50 additions & 0 deletions src/main/java/ladder/domain/Line.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package ladder.domain;

import java.util.List;

public class Line {
private final List<Boolean> bridgeStates;

public static Line newInstance(List<Boolean> bridgeStates) {
return new Line(bridgeStates);
}

public Line(List<Boolean> bridgeStates) {
this.bridgeStates = bridgeStates;
}

public Boolean get(int index) {
return bridgeStates.get(index);
}

public int size() {
return bridgeStates.size();
}

@Override
public String toString() {
StringBuilder result = new StringBuilder();

for (Boolean state : bridgeStates) {
appendColumn(result);
appendBridge(result, state);
}
appendColumn(result);

return " " + String.valueOf(result);
}

private void appendColumn(StringBuilder result) {
result.append("|");
}

private void appendBridge(StringBuilder result, Boolean state) {
if (state) {
result.append("------");
}

if (!state) {
result.append(" ");
}
}
}
25 changes: 25 additions & 0 deletions src/main/java/ladder/domain/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ladder.domain;

public class User {
private final String name;
private final int MAX_NUMBER_OF_CHARACTERS = 5;

private User(String name) {
this.name = name;
}

public static User newInstance(String name) {
return new User(name);
}

public String getName() {
return this.name;
}

@Override
public String toString() {
int blankCount = MAX_NUMBER_OF_CHARACTERS - name.length();

return " ".repeat(Math.max(0, blankCount)) + name;
}
}
33 changes: 33 additions & 0 deletions src/main/java/ladder/domain/Users.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ladder.domain;

import java.util.List;

public class Users {
private final List<User> users;

private Users(List<User> users) {
this.users = users;
}

public static Users newInstance(List<User> users) {
return new Users(users);
}

public User get(int index) {
return this.users.get(index);
}

@Override
public String toString() {
StringBuilder result = new StringBuilder();
for (User user : this.users) {
result.append(user.toString()).append(" ");
}

return result.toString();
}

public int getNumberOfUsers() {
return users.size();
}
}
44 changes: 44 additions & 0 deletions src/main/java/ladder/domain/UsersNameReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package ladder.domain;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class UsersNameReader {
private final String names;

private UsersNameReader(String names) {
this.validator(names);
this.names = names;
}

public static UsersNameReader newInstace(String names) {
return new UsersNameReader(names);
}

private void validator(String names) {
Optional<String> optNames = Optional.ofNullable(names);
if (optNames.isEmpty()) {
throw new IllegalArgumentException();
}

for (String name : names.split(",")) {
checkNameLength(name);
};
}

private void checkNameLength(String name) {
if (name.length() > 5 || name.length() < 1) {
throw new IllegalArgumentException();
}
}

public Users convertNamesToUsers() {
List<User> userNames = Arrays.stream(this.names.split(","))
.map(User::newInstance)
.collect(Collectors.toList());

return Users.newInstance(userNames);
}
}
31 changes: 31 additions & 0 deletions src/main/java/ladder/domain/WinnerDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ladder.domain;

import java.util.List;

public class WinnerDTO {
private Users users;
private List<Integer> resultData;
private List<Line> bridgeStates;

public static WinnerDTO newInstance() {
return new WinnerDTO();
}

public void add(Users users, List<Integer> resultData, List<Line> bridgeStates) {
this.users = users;
this.resultData = resultData;
this.bridgeStates = bridgeStates;
}

public Users getUsers() {
return this.users;
}

public List<Integer> getResultData() {
return this.resultData;
}

public List<Line> getBridgeStates() {
return this.bridgeStates;
}
}
19 changes: 19 additions & 0 deletions src/main/java/ladder/domain/Winners.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ladder.domain;

import java.util.Map;

public class Winners {
private final Map<String, Integer> winners;

public Winners(Map<String, Integer> winners) {
this.winners = winners;
}

public static Winners newInstance(Map<String, Integer> winners) {
return new Winners(winners);
}

public Map<String, Integer> getWinners() {
return this.winners;
}
}
Loading