Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pack1;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.Deque;
- import java.util.LinkedList;
- import java.util.List;
- /**
- * Created by vkondratiev on 06.08.2021
- */
- public class HanoiTowers {
- private static final List<String> STRINGS = Arrays.asList(
- "ALPHA", "BRAVO", "CHARLIE", "DELTA", "ECHO", "FOXTROT", "GOLF", "HOTEL", "INDIA", "JULIET", "KILO", "LIMA",
- "MIKE", "NOVEMBER", "OSCAR", "PAPA", "QUEBEC", "ROMEO", "SIERRA", "TANGO", "UNIFORM", "VICTOR", "WHISKEY",
- "X-RAY", "YANKEE", "ZULU"
- );
- private static final int SIZE = 4;
- private int steps;
- private final HanoiTower[] towers;
- public HanoiTowers() {
- towers = new HanoiTower[]{new HanoiTower("SOURCE"), new HanoiTower("BUFFER"), new HanoiTower("RESULT")};
- steps = 0;
- towers[0].fill(STRINGS.subList(0, SIZE));
- }
- public static void main(String[] args) {
- HanoiTowers hanoiTowers = new HanoiTowers();
- System.out.println("start position:\n" + hanoiTowers);
- hanoiTowers.runTask();
- System.out.println("finish position:\n" + hanoiTowers);
- }
- private void runTask() {
- towers[0].moveAll(towers[1], towers[2], towers[0].size(), this);
- System.out.printf("%nmoving %d elements ................ %d steps%n", SIZE, steps);
- }
- @Override
- public String toString() {
- if (towers.length != 3)
- throw new RuntimeException();
- return String.format("%s%n%s%n%s", towers[0].toString(), towers[1].toString(), towers[2].toString());
- }
- class HanoiTower {
- private final String name;
- private final Deque<String> content = new LinkedList<>();
- HanoiTower(String name) {
- this.name = name;
- }
- void moveElement(HanoiTower fromTower, HanoiTowers hanoiTowers) {
- String element = fromTower.content.pollLast();
- content.addLast(element);
- System.out.printf("%nmoving %s from %s to %s:%n%s%n", element, fromTower.name, this.name, hanoiTowers);
- }
- private void moveAll(HanoiTower buffer, HanoiTower result, int amount, HanoiTowers hanoiTowers) {
- if (amount == 0) {
- return;
- }
- steps++;
- amount--;
- this.moveAll(result, buffer, amount, hanoiTowers);
- result.moveElement(this, hanoiTowers);
- buffer.moveAll(this, result, amount, hanoiTowers);
- }
- void fill(Collection<String> elements) {
- content.clear();
- content.addAll(elements);
- }
- int size() {
- return content.size();
- }
- @Override
- public String toString() {
- return String.format(" %s: %s", name, content);
- }
- }
- }
Add Comment
Please, Sign In to add comment