Compare commits

..

1 Commits

Author SHA1 Message Date
comp1110-2023-s1-marker
5d13e69e99 add marks & feedback 2023-05-02 14:33:10 +10:00
74 changed files with 512 additions and 3540 deletions

View File

@ -1,183 +0,0 @@
image: paulwarfie/comp1110-2023-s1-gitlab-ci:0.1.0
stages:
- checksum
- compliance
- build
- test
before_script:
- export PATH_TO_FX=/usr/share/openjfx/lib
- export JAVAFX_OPTIONS="--module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml,javafx.media"
- export CP=src:src-dev:/ass2/*:/shared/junit-platform-console-standalone-1.7.0.jar:$PATH_TO_FX/*
- export JUNIT="java $JAVAFX_OPTIONS -jar /shared/junit-platform-console-standalone-1.7.0.jar --class-path src:src-dev:/ass2/comp1110-ass2.jar --disable-banner --reports-dir=junit-reports"
- export SRC_FILES=$(find src/ -type f -name '*.java')
- export SRC_DEV_FILES=$(if [ -d "src-dev/" ]; then find src-dev/ -type f -name '*.java'; fi)
checksum:
tags:
- comp1110
stage: checksum
script:
- python3 /validate.py --integrity comp1110-ass2
except:
variables:
- $CI_PROJECT_NAME =~ /.*-dev$/
compliance:
tags:
- comp1110
stage: compliance
script:
- python3 /validate.py --gitlablogin ${GITLAB_USER_LOGIN} --gitlabuser "${GITLAB_USER_NAME}" --gitlabprojectname "${CI_PROJECT_NAME}" --assignment /ass2/compliance-ass2.yml
except:
variables:
- $CI_PROJECT_NAME =~ /.*-dev$/
allow_failure: true
build:
tags:
- comp1110
stage: build
script:
- javac -encoding utf-8 $JAVAFX_OPTIONS -cp $CP $SRC_FILES $SRC_DEV_FILES
artifacts:
paths:
- src/
- src-dev/
task3:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.IsStateStringWellFormedTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task4:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.IsMoveStringWellFormedTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task6:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.DistributeResourcesTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task7:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.IsMoveValidTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task8:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.GenerateAllValidMovesTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task9:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.IsPhaseOverTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task10:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.PlacePieceTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task11:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.CalculateIslandLinksScoreTest -c=comp1110.ass2.CalculateIslandMajoritiesScoreTest -c=comp1110.ass2.CalculateResourcesAndStatuettesScoreTest -c=comp1110.ass2.CalculateTotalIslandsScoreTest -c=comp1110.ass2.CalculateScoresTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task12:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.EndPhaseTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task13:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.ApplyMoveTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task16:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.GenerateAIMoveTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
task17:
tags:
- comp1110
stage: test
script:
- $JUNIT -c=comp1110.ass2.VariableBoardSizeTest -c=comp1110.ass2.ThreeFourPlayerTest -c=comp1110.ass2.VariableSizeThreeFourPlayerTest
allow_failure: true
artifacts:
reports:
junit: junit-reports/TEST-junit-jupiter.xml
## Local Variables:
## mode: yaml
## End:

View File

@ -1,16 +0,0 @@
<component name="ArtifactManager">
<artifact type="jar" build-on-make="true" name="game">
<output-path>$PROJECT_DIR$/out/artifacts/game</output-path>
<root id="archive" name="game.jar">
<element id="module-output" name="comp1110-ass2" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx-swt.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.web.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.base.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.fxml.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.media.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.swing.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.controls.jar" path-in-jar="/" />
<element id="extracted-dir" path="$PATH_TO_FX$/javafx.graphics.jar" path-in-jar="/" />
</root>
</artifact>
</component>

View File

@ -7,15 +7,7 @@
<NATIVE>
<root url="file://$PATH_TO_FX$" />
</NATIVE>
<SOURCES>
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.base" />
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.controls" />
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.fxml" />
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.graphics" />
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.media" />
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.swing" />
<root url="jar://$PATH_TO_FX$/../src.zip!/javafx.web" />
</SOURCES>
<SOURCES />
<jarDirectory url="file://$PATH_TO_FX$" recursive="false" />
</library>
</component>

View File

@ -19,9 +19,9 @@ declaration: >-
#
# Add as many "name+comment" entries as necessary
# (or remove it altogether if you haven't collaborated with anyone)
# collaboration:
# - name:
# comment: >-
collaboration:
- name:
comment: >-
# Use this to list any code that you used that you did not write,
# aside from code provided by the lecturer. Provide a comment
@ -30,10 +30,10 @@ declaration: >-
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external code)
# code:
# - comment:
# url:
# licence:
code:
- comment:
url:
licence:
# Use this to list any assets (artwork, sound, etc) that you used.
# Provide a comment explaining your use of that asset and the URL
@ -41,12 +41,12 @@ declaration: >-
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external assets)
# assets:
# - comment:
# url:
# licence:
assets:
- comment:
url:
licence:
# sign *your* name and uid here
name: Justin Ryu
uid: u7492895
name:
uid:

View File

@ -1,52 +0,0 @@
# IMPORTANT: It is very important that you correctly complete this originality
# statement.
#
# This is your statement of your submitted work being your own.
# Incorrectly filling out this statement could lead to charges
# of academic misconduct.
#
# For information on how to fill this out correctly, see
# https://cs.anu.edu.au/courses/comp1110/help/faq/09-originality/
#
declaration: >-
I declare that everything I have submitted for stage D of this assignment
and all stages before it is entirely my own work, with the following
exceptions:
# Use this to list names of people who you collaborated with, and a
# comment about what you collaborated on.
#
# Add as many "name+comment" entries as necessary
# (or remove it altogether if you haven't collaborated with anyone)
# collaboration:
# - name:
# comment: >-
# Use this to list any code that you used that you did not write,
# aside from code provided by the lecturer. Provide a comment
# explaining your use and the URL to that code and the licence for
# that code
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external code)
# code:
# - comment:
# url:
# licence:
# Use this to list any assets (artwork, sound, etc) that you used.
# Provide a comment explaining your use of that asset and the URL
# and license for the asset
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external assets)
# assets:
# - comment:
# url:
# licence:
# sign *your* name and uid here
name: Nathan Woodburn
uid: u7156831

View File

@ -1,52 +0,0 @@
# IMPORTANT: It is very important that you correctly complete this originality
# statement.
#
# This is your statement of your submitted work being your own.
# Incorrectly filling out this statement could lead to charges
# of academic misconduct.
#
# For information on how to fill this out correctly, see
# https://cs.anu.edu.au/courses/comp1110/help/faq/09-originality/
#
declaration: >-
I declare that everything I have submitted for stage D of this assignment
and all stages before it is entirely my own work, with the following
exceptions:
# Use this to list names of people who you collaborated with, and a
# comment about what you collaborated on.
#
# Add as many "name+comment" entries as necessary
# (or remove it altogether if you haven't collaborated with anyone)
#collaboration:
# - name:
# comment: >-
# Use this to list any code that you used that you did not write,
# aside from code provided by the lecturer. Provide a comment
# explaining your use and the URL to that code and the licence for
# that code
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external code)
#code:
# - comment:
# url:
# licence:
# Use this to list any assets (artwork, sound, etc) that you used.
# Provide a comment explaining your use of that asset and the URL
# and license for the asset
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external assets)
#assets:
# - comment:
# url:
# licence:
# sign *your* name and uid here
name: Immanuel Alvaro Bhirawa
uid: u7280427

View File

@ -8,19 +8,19 @@ declaration: >-
# be 100 or 99 (33/33/33 is fine). (Remove entries if you have fewer than three
# members).
contributions:
- uid: u7156831
contribution: 33
- uid: u7492895
contribution: 33
- uid: u7280427
contribution: 33
- uid:
contribution:
- uid:
contribution:
- uid:
contribution:
# Sign *your* name and uids here. (Remove entries if you have fewer
# than three members)
signatures:
- name: Nathan Woodburn
uid: u7156831
- name: Justin Ryu
uid: u7492895
- name: Immanuel Alvaro Bhirawa
uid: u7280427
- name:
uid:
- name:
uid:
- name:
uid:

View File

@ -19,9 +19,9 @@ declaration: >-
#
# Add as many "name+comment" entries as necessary
# (or remove it altogether if you haven't collaborated with anyone)
# collaboration:
# - name:
# comment: >-
collaboration:
- name:
comment: >-
# Use this to list any code that you used that you did not write,
# aside from code provided by the lecturer. Provide a comment
@ -30,10 +30,10 @@ declaration: >-
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external code)
# code:
# - comment:
# url:
# licence:
code:
- comment:
url:
licence:
# Use this to list any assets (artwork, sound, etc) that you used.
# Provide a comment explaining your use of that asset and the URL
@ -41,18 +41,18 @@ declaration: >-
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external assets)
# assets:
# - comment:
# url:
# licence:
assets:
- comment:
url:
licence:
# Sign *your* name and uids here. (Remove entries if you have fewer
# than three members.)
signatures:
- name: Nathan Woodburn
uid: u7156831
- name: Immanuel Alvaro Bhirawa
uid: u7280427
- name: Justin Ryu
uid: u7492895
- name:
uid:
- name:
uid:
- name:
uid:

View File

@ -0,0 +1,13 @@
## Code Review
Reviewed by: <your full name>, <your uid>
Reviewing code written by: <the other person's full name> <other uid>
Component: <the component being reviewed>
### Comments
<write your comments here>

View File

@ -1,40 +0,0 @@
## Code Review
Reviewed by: Nathan Woodburn, u7156831
Reviewing code written by: Immanuel Alvaro Bhirawa, u7280427
Component: `isMoveValid` from [BlueLagoon.java L145-L311](https://gitlab.cecs.anu.edu.au/u7156831/comp1110-ass2/-/blob/b8487c3c0826bef4e676a13f8ea05c578c73d2de/src/comp1110/ass2/BlueLagoon.java#L145-L311)
### Comments
- Good practices used:
- Using other functions to help with the main function, such as `isStateStringWellFormed` and `isMoveStringWellFormed`.
- Using good variable names such as `currentPhase` and `boardHeight`
- Using a `switch case` statement instead of multiple `if` statements.
- Using `.addAll()` to add multiple elements to an arraylist instead of iterating through each element and adding them
- Good use of `for` loops to iterate through arrays
- Places to improve:
- Some comments are not needed, such as commenting about well named variables.
```java
int numberOfPlayer = 0; // Number of player
String playerId = ""; // Player ID
```
- Duplicate code could be avoided. For example [this switch](https://gitlab.cecs.anu.edu.au/u7156831/comp1110-ass2/-/blob/b8487c3c0826bef4e676a13f8ea05c578c73d2de/src/comp1110/ass2/BlueLagoon.java#L231-L256) could be shortened to the below to avoid duplicate code.
```java
switch (numberOfPlayer) {
case 4 -> numberOfSettlersPerPlayer = 20;
case 3 -> numberOfSettlersPerPlayer = 25;
case 2 -> numberOfSettlersPerPlayer = 30;
}
if (pieceType.equals("S")) {
if (settlerCounter + 1 > numberOfSettlersPerPlayer) return false;
} else if (pieceType.equals("T")) {
if (villageCounter + 1 > numberOfVillagesPerPlayer) return false;
}
```
- A few parts of code could be moved outside of the loop to improve efficiency and speed. For example the above snippet could be moved to the part of the code where numberOfPlayer is set.
- Possible errors
- `numberOfSettlersPerPlayer -= 10;` (and the `-5` version) could create the incorrect number as this is inside a loop. This could be avoided by setting the variable to a constant value instead of subtracting 10 each time.

View File

@ -1,33 +0,0 @@
## Code Review
Reviewed by: Immanuel Alvaro Bhirawa, u7280427
Reviewing code written by: Nathan Woodburn, u7156831
Component: `isStateStringWellFormed` from BlueLagoon.java starting from line 32 to line 68
### Comments
- Best features of the code :
`isStateStringWellFormed` uses a great implementation of Regex and everything is very short, concised, and detailed.
10/10 for the regex implementation.
- Documentation of the code :
The documentation used throughout the code is short but detailed, only describing what the parts of code do in a concise
and informative manner that is both readable and useful for the reader.
10/10 for Documentation.
- The program decomposition ( class and method structure ) :
The structure for the method `isStateStringWellFormed` is very organized given the spaces between each functions/parts
of the code. Thus, making the method readable and easy to understand without overloading the user too much.
10/10 for method structure.
- Java Code Convention ( Methods, variables, Style ) :
All the variables such as `matchArray`, `matchString` and `numPlayers` are all approriately named according to the
respective functions of the variables. Additionally, the style of code throughout the style remain consistent,
especially the parts that involve Regex.
10/10 for variables and style consistency.
- Any errors on the code? :
As far as what I have reviewed, I do not see any errors in the code both from the syntax nor semantics.
Everything run as expected.

View File

@ -1,53 +0,0 @@
# IMPORTANT: It is very important that you correctly complete this originality
# statement.
#
# This is your statement of your submitted work being your own.
# Incorrectly filling out this statement could lead to charges
# of academic misconduct.
#
# For information on how to fill this out correctly, see
# https://cs.anu.edu.au/courses/comp1110/help/faq/09-originality/
#
declaration: >-
I submit the work below for assessment as my best work. I declare that this
is entirely my own work, with the following documented exceptions:
# Use this to list names of people who you collaborated with, and a
# comment about what you collaborated on.
#
# Add as many "name+comment" entries as necessary
# (or remove it altogether if you haven't collaborated with anyone)
# collaboration:
# - name:
# comment: >-
# Use this to list any code that you used that you did not write,
# aside from code provided by the lecturer. Provide a comment
# explaining your use and the URL to that code and the licence for
# that code
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external code)
# code:
# - comment:
# url:
# licence:
# I wish to submit the following classes as entirely my own (remove this if
# you want to just submit methods):
class:
- Island
- Coord
- Player
- Resource
# I wish to submit the following methods as entirely my own (remove this if
# you want to just submit classes):
method:
- Everything in class state except for scoreLinks(), findLongestLinkScore(),
DFSRecursionLink(), findScoreForLink()
# sign *your* name and uid here
name: Nathan Woodburn
uid: u7156831

View File

@ -9,5 +9,5 @@ of our project implements the following features:
- Playable against a computer opponent / AI (Task 16)
- Generalised GUI to more than two players (Task 17)
- Generalised GUI to different sized boards (Task 17)
- Allow more than one AI player (up to 4)
- Toggleable Dark mode
additional features...

View File

@ -19,9 +19,9 @@ declaration: >-
#
# Add as many "name+comment" entries as necessary
# (or remove it altogether if you haven't collaborated with anyone)
# collaboration:
# - name:
# comment: >-
collaboration:
- name:
comment: >-
# Use this to list any code that you used that you did not write,
# aside from code provided by the lecturer. Provide a comment
@ -30,10 +30,10 @@ declaration: >-
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external code)
# code:
# - comment: CSS styling for buttons + comboboxes
# url: http://fxexperience.com/2011/12/styling-fx-buttons-with-css/
# licence: Public Domain
code:
- comment:
url:
licence:
# Use this to list any assets (artwork, sound, etc) that you used.
# Provide a comment explaining your use of that asset and the URL
@ -41,18 +41,18 @@ declaration: >-
#
# Add as many "url+licence+comment" entries as necessary
# (or remove it altogether if you haven't used any external assets)
# assets:
# - comment:
# url:
# licence:
assets:
- comment:
url:
licence:
# Sign *your* name and uids here. (Remove entries if you have fewer
# than three members.)
signatures:
- name: Nathan Woodburn
uid: u7156831
- name:
uid:
- name: Justin Ryu
uid: u7492895
- name:
uid:
- name:
uid:

42
feedback.md Normal file
View File

@ -0,0 +1,42 @@
---
mark: 4.6
section_marks:
c1-compliance: 0.25
c2-git: 0.25
c3-task-3-4-6-7-8: 2.5
c4-task-5-viewer: 0.8
c5-exceptional: 0.8
---
## General comments
Well done on completing all the tasks for D2C, your submission is quite impressive! Here are a few general comments:
- It would be good to use your classes (outside of BlueLagoon, Viewer and eventually Game) and object-oriented programming to pass the tasks and set up the framework for your game, as strings are inefficient and will be hard to use when making your game.
- You should try to ensure that your code does not go past the vertical line in IntelliJ, by putting in line breaks if possible.
- Your Git usage as a group are excellent - your commits are frequent and have detailed messages!
- In some parts IntelliJ has highlighted your code (such as lines 243 and 335 of BlueLagoon.java) - in these parts you can hover over these for suggestions which may improve the readability or style of your code.
- Your commenting throughout your code is excellent!
- In your final game (and viewer to a lesser extent), it would be good to make the islands different colours based on how many points they award.
## Task 5 (Viewer)
Your viewer is quite intuitive, though it doesn't seem to differentiate between the settlers/villagers of different players. I'm also not able to click the Refresh button more than once, though I'm not sure what's causing this.
# Mark breakdown
| Task | Requirement | Result |
|:----------:|--------------------------|:-----------:|
| - | All files correct | 0.25 / 0.25 |
| - | Appropriate usage of Git | 0.25 / 0.25 |
| 3 | isStateStringWellFormed | 0.5 / 0.5 |
| 4 | isMoveStringWellFormed | 0.5 / 0.5 |
| 5 | Viewer | 0.8 / 1 |
| 6 | distributeResources | 0.5 / 0.5 |
| 7 | isMoveValid | 0.5 / 0.5 |
| 8 | generateAllValidMoves | 0.5 / 0.5 |
| - | Code quality and design | 0.5 / 1 |
| **Total** | - | **4.3 / 5** |

View File

@ -1,3 +0,0 @@
Manifest-Version: 1.0
Main-Class: comp1110.ass2.gui.Game

View File

@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/comp1110.iml" filepath="$PROJECT_DIR$/comp1110.iml" />
</modules>
</component>
</project>

View File

@ -1,16 +1,24 @@
package comp1110.ass2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import gittest.A;
import javafx.scene.paint.Color;
import java.sql.Time;
import java.text.NumberFormat;
import java.util.*;
import java.lang.*;
import java.util.stream.Stream;
public class BlueLagoon {
// The Game Strings for five maps have been created for you.
// They have only been encoded for two players. However, they are
// easily extendable to more by adding additional player statements.
public static final String DEFAULT_GAME = "a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String WHEELS_GAME = "a 13 2; c 0 E; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String FACE_GAME = "a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String SIDES_GAME = "a 7 2; c 0 E; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String SPACE_INVADERS_GAME = "a 23 2; c 0 E; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
// region Checks on strings
/**
* Check if the string encoding of the game state is well-formed.
* Note that this does not mean checking that the state is valid
@ -38,28 +46,18 @@ public class BlueLagoon {
// For the stonesStatement use the following regex string
matchArray[3] = "(s (\\d{1,2},\\d{1,2} )+\\d{1,2},\\d{1,2}; )";
// For the resources and statuettes use the following regex string
matchArray[4] = "r C (\\d{1,2},\\d{1,2} )*B (\\d{1,2},\\d{1,2} )*W (\\d{1,2},\\d{1,2} )*P (\\d{1,2},\\d{1,2} " +
")*S( \\d{1,2},\\d{1,2})*;";
matchArray[4] = "r C (\\d{1,2},\\d{1,2} )*B (\\d{1,2},\\d{1,2} )*W (\\d{1,2},\\d{1,2} )*P (\\d{1,2},\\d{1,2} )*S( \\d{1,2},\\d{1,2})*;";
// For the playersStatement use the following regex string
matchArray[5] = "( p \\d \\d{1,3} \\d{1,2} \\d{1,2} \\d{1,2} \\d{1,2} \\d{1,2} S (\\d{1,2},\\d{1,2} )*T( " +
"(\\d{1,2},\\d{1,2} ?)*)?;)*";
matchArray[5] = "( p \\d \\d{1,3} \\d{1,2} \\d{1,2} \\d{1,2} \\d{1,2} \\d{1,2} S (\\d{1,2},\\d{1,2} )*T( (\\d{1,2},\\d{1,2} ?)*)?;)*";
// Combine the regex strings into one string to match the state string
StringBuilder matchString = new StringBuilder();
String matchString = "";
for (String match:matchArray) {
matchString.append(match);
matchString += match;
}
// Check if the state string matches the regex string
if (!stateString.matches(matchString.toString())) return false;
// Check that there is one and only one of each player id
// This fixed test 2-3 of D2DTests.testIsStateStringWellFormed
int numPlayers = Character.getNumericValue(stateString.charAt(stateString.indexOf(";")-1));
for (int i = 0; i < numPlayers; i++) {
if (stateString.length() - stateString.replaceAll("p "+i,"").length() != 3) return false;
}
return true;
return stateString.matches(matchString);
}
/**
@ -83,9 +81,6 @@ public class BlueLagoon {
// return false
}
// endregion
// region Distribute resources
/**
* Given a state string which is yet to have resources distributed amongst the stone circles,
* randomly distribute the resources and statuettes between all the stone circles.
@ -104,16 +99,87 @@ public class BlueLagoon {
* @param stateString a string representing a game state without resources distributed
* @return a string of the game state with resources randomly distributed
*/
public static String distributeResources(String stateString){
// Check if the stateString is well-formed
if (!isStateStringWellFormed(stateString)) return stateString;
public static String distributeResources(String stateString) {
State state = new State(stateString);
state.distributeResources();
return state.toString();
// Grab the stone circles from the stateString
String stoneCircles = stateString.substring(stateString.indexOf("s") + 2, stateString.indexOf("r") - 2);
// Split the stone circles into an array of cords
String[] stoneCircleCords = stoneCircles.split(" ");
// Check if there are 32 stone circles
if (stoneCircleCords.length != 32) return stateString;
// Create a random object and an arrays and list to shuffle the stone circles
Random rand = new Random();
// Number of times to shuffle the stone circles (can be changed)
int shuffle_number = 3;
// Create a copy of the stone circle array to shuffle
String[] stoneCircleRandom = stoneCircleCords;
// Shuffle the stone circles the specified number of times
for (int i = 0; i < shuffle_number; i++) {
// Create a temporary array to store the shuffled stone circles
String[] tempStoneCircleRandom = new String[32];
// Create a list to store the used cords (to avoid duplicates)
List<String> usedCords = new ArrayList<String>();
// Shuffle the array
for (int j = 0; j < 32; j++) {
// For 0-31 generate a random cord from the stone circle array and check if it has been used
int randomIndex = rand.nextInt(31);
while (usedCords.contains(stoneCircleCords[randomIndex])) {
// If it has been used, try the next in line
if (randomIndex == 31) {
randomIndex = 0;
}
else randomIndex++;
}
// If it hasn't been used, add it to the new array
tempStoneCircleRandom[j] = stoneCircleRandom[randomIndex];
usedCords.add(stoneCircleCords[randomIndex]);
}
// Replace the old array with the new one
stoneCircleRandom = tempStoneCircleRandom;
}
// Create a string to store the new resources state
String newResourcesState = "r";
// Create an array for each resource type
char[] resources = {'C', 'B', 'W', 'P'};
// Create a variable to keep track of how many resources have been sorted
int numSorted = 0;
// For each resource type
for (char r:resources){
newResourcesState += " " + r;
// Assign 6 to a stone circle
for (int i = 0; i < 6; i++){
newResourcesState += " " + stoneCircleRandom[numSorted];
numSorted++;
}
}
// Assign 8 statuettes to a stone circle
newResourcesState += " S";
for (int i = 0; i < 8; i++){
newResourcesState += " " + stoneCircleRandom[numSorted];
numSorted++;
}
// Replace the old resources state with the new one
stateString = stateString.replace("r C B W P S", newResourcesState);
return stateString;
}
// endregion
// region Check and generate moves
/**
* Given a state string and a move string, determine if the move is
* valid for the current player.
@ -133,8 +199,8 @@ public class BlueLagoon {
* Importantly, players can now only play on the sea if it is
* adjacent to a piece they already own.
*
* @param stateString a string representing a game state
* @param moveString a string representing the current player's move
// * @param stateString a string representing a game state
// * @param moveString a string representing the current player's move
* @return true if the current player can make the move and false otherwise
*/
public static boolean isMoveValid(String stateString, String moveString) {
@ -150,9 +216,9 @@ public class BlueLagoon {
// Coords of the island tiles
ArrayList<String> coordsContainer = new ArrayList<>();
int numberOfPlayer; // Number of player
int numberOfPlayer = 0; // Number of player
String playerId = ""; // Player ID
String pStatePlayerId; // the current Player's move ID
String pStatePlayerId = ""; // the current Player's move ID
ArrayList<String> settlerCoords = new ArrayList<>(); // Placed Settler Coordinates
ArrayList<String> villageCoords = new ArrayList<>(); // Placed villages coordinates
ArrayList<String> playerSettlerCoords = new ArrayList<>(); // The current Player's settler coords
@ -177,60 +243,82 @@ public class BlueLagoon {
switch (stateCases) {
// Get the number of player from here
case "a" -> {
case "a":
boardHeight = Integer.parseInt(parseSplit[1]);
String playerAmount = parseSplit[2];
numberOfPlayer = Integer.parseInt(playerAmount);
switch (numberOfPlayer) {
case 4 -> numberOfSettlersPerPlayer = 20;
case 3 -> numberOfSettlersPerPlayer = 25;
case 2 -> numberOfSettlersPerPlayer = 30;
}
}
break;
// Get the player ID and Current Phase from here
// Get the player ID and Current Phase from here
// Phase Exploration or Settlement
case "c" -> {
case "c":
playerId = parseSplit[1];
currentPhase = parseSplit[2];
}
break;
// Get the Land coords (Island Coords)
case "i" -> coordsContainer.addAll(Arrays.asList(parseSplit).subList(2, parseSplit.length));
case "p" -> {
// Get the Land coords (Island Coords)
case "i":
coordsContainer.addAll(Arrays.asList(parseSplit).subList(2, parseSplit.length));
break;
case "p":
// Check if there's enough pieces left for that player that is moving
pStatePlayerId = parseSplit[1];
// Collecting the settler Coords that has been placed
for (int i = 9; i < parseSplit.length; i++) {
while (!parseSplit[i].equals("T")) {
settlerCoords.add(parseSplit[i]); // Store all the settler coords
// Collecting the settler Coords that has been placed
for (int i = 9; i < parseSplit.length; i++) {
while (!parseSplit[i].equals("T")) {
settlerCoords.add(parseSplit[i]); // Store all the settler coords
// If the current player ID is the same as the placed settler's player ID
// Store it into array
if (pStatePlayerId.equals(playerId)) playerSettlerCoords.add(parseSplit[i]);
i++;
}
// If the current player ID is the same as the placed settler's player ID
// Store it into array
if(pStatePlayerId.equals(playerId)) playerSettlerCoords.add(parseSplit[i]);
i++;
}
// If the current player ID is the same as the placed settler's player ID
// iterate the settlerCounter
if (pStatePlayerId.equals(playerId)) settlerCounter = playerSettlerCoords.size();
i++;
// If the current player ID is the same as the placed settler's player ID
// iterate the settlerCounter
if(pStatePlayerId.equals(playerId)) settlerCounter = playerSettlerCoords.size();
i++;
// Collecting the village coords that has been placed
while (i < parseSplit.length) {
if (pStatePlayerId.equals(playerId)) villageCounter = i - 9 - settlerCounter;
villageCoords.add(parseSplit[i]); // Store all the village Coords
// Collecting the village coords that has been placed
while (i < parseSplit.length) {
if(pStatePlayerId.equals(playerId)) villageCounter = i - 9 - settlerCounter;
villageCoords.add(parseSplit[i]); // Store all the village Coords
// If the current player ID is the same as the placed Village's player ID
// Store it into array
if (pStatePlayerId.equals(playerId)) playerVillageCoords.add(parseSplit[i]);
i++;
}
if (pieceType.equals("S") && settlerCounter + 1 > numberOfSettlersPerPlayer) return false;
else if (pieceType.equals("T") && villageCounter + 1 > numberOfVillagesPerPlayer) return false;
}
}
// If the current player ID is the same as the placed Village's player ID
// Store it into array
if(pStatePlayerId.equals(playerId)) playerVillageCoords.add(parseSplit[i]);
i++;
}
// Checking the requirement of how many pieces are left //
switch (numberOfPlayer) {
case 4:
numberOfSettlersPerPlayer -= 10;
if (pieceType.equals("S")) {
if (settlerCounter + 1 > numberOfSettlersPerPlayer) return false;
} else if (pieceType.equals("T")) {
if (villageCounter + 1 > numberOfVillagesPerPlayer) return false;
}
break;
case 3:
numberOfSettlersPerPlayer -= 5;
if (pieceType.equals("S")) {
if (settlerCounter + 1 > numberOfSettlersPerPlayer) return false;
} else if (pieceType.equals("T")) {
if (villageCounter + 1 > numberOfVillagesPerPlayer) return false;
}
break;
case 2:
if (pieceType.equals("S")) {
if (settlerCounter + 1 > numberOfSettlersPerPlayer) return false;
} else if (pieceType.equals("T")) {
if (villageCounter + 1 > numberOfVillagesPerPlayer) return false;
}
}
}
break;
}
}
@ -238,52 +326,53 @@ public class BlueLagoon {
if(yMoveCoords > boardHeight - 1) return false;
// if it's even rows, check the number of cols for out of bound (i.e. the width)
if(yMoveCoords % 2 == 0 && xMoveCoords > boardHeight - 2) return false;
if(yMoveCoords % 2 == 0) {
if(xMoveCoords > boardHeight - 2) return false;
}
else if(xMoveCoords > boardHeight - 1) return false;
// For Exploration Phase and or Settlement Phase
switch (currentPhase) {
// Exploration Phase
case "E" -> {
// If the move Coords is an occupied space, return false;
if (settlerCoords.contains(moveCoords) || villageCoords.contains(moveCoords)) return false;
switch(currentPhase){
// Exploration Phase
case "E":
// If the move Coords is an occupied space, return false;
if(settlerCoords.contains(moveCoords) || villageCoords.contains(moveCoords)) return false;
// If the Village is being placed on the sea return false
if (pieceType.equals("T") && !coordsContainer.contains(moveCoords)) return false;
// If the Village is being placed on the sea return false
if(pieceType.equals("T") && !coordsContainer.contains(moveCoords)) return false;
// if the village is placed on Land and it's not adjacent to any
// of the pieces return false
if (pieceType.equals("T") && (!isAdjacent(moveCoords, playerVillageCoords) &&
!isAdjacent(moveCoords, playerSettlerCoords))) return false;
// if the village is placed on Land and it's not adjacent to any
// of the pieces return false
if(pieceType.equals("T") && (!isAdjacent(moveCoords, playerVillageCoords) &&
!isAdjacent(moveCoords, playerSettlerCoords))) return false;
// If settler is on land and it's not adjacent to any of the pieces
// return false
if (pieceType.equals("S") && coordsContainer.contains(moveCoords)) {
if (!isAdjacent(moveCoords, playerSettlerCoords) &&
!isAdjacent(moveCoords, playerVillageCoords)) return false;
}
}
// If settler is on land and it's not adjacent to any of the pieces
// return false
if(pieceType.equals("S") && coordsContainer.contains(moveCoords)){
if(!isAdjacent(moveCoords, playerSettlerCoords) &&
!isAdjacent(moveCoords, playerVillageCoords)) return false;
}
break;
// Settlement Phase
case "S" -> {
// If the move coord is an occupied space, return false;
if (settlerCoords.contains(moveCoords)) return false;
if (villageCoords.contains(moveCoords)) return false;
// Settlement Phase
case "S":
// If the move coord is an occupied space, return false;
if(settlerCoords.contains(moveCoords)) return false;
if(villageCoords.contains(moveCoords)) return false;
// As the only move is for the settler, the village is false
if (pieceType.equals("T")) return false;
// As the only move is for the settler, the village is false
if(pieceType.equals("T")) return false;
// if the settler is not adjacent with any of the pieces return false
if (!isAdjacent(moveCoords, playerSettlerCoords) &&
!isAdjacent(moveCoords, playerVillageCoords)) return false;
}
}
return true;
// if the settler is not adjacent with any of the pieces return false
if(!isAdjacent(moveCoords, playerSettlerCoords) &&
!isAdjacent(moveCoords, playerVillageCoords)) return false;
}
return true;
}
public static boolean isAdjacent(String centerCoords, ArrayList<String> coordsContainer) {
private static boolean isAdjacent(String centerCoords, ArrayList<String> coordsContainer) {
String[] coordsSplit = centerCoords.split(",");
int mainX = Integer.parseInt(coordsSplit[1]); // xCoord for center Coords
int mainY = Integer.parseInt(coordsSplit[0]); // yCoord for center Coords
@ -304,7 +393,59 @@ public class BlueLagoon {
return false;
}
/**
/**
* This method is to check if the move is valid for the current player
* This is a very trimmed down version of the isMoveValid method
*
* @param pieceType Type of piece being placed (S = Settler, T = Village)
* @param moveCoords The coords of the piece being placed (i.e. 1,2)
* @param currentPhase The current phase of the game (E = Exploration, S = Settlement)
* @param coordsContainer The coords of the land in a ArrayList of Strings
* @param settlerCoords The coords of the Settlers in a ArrayList of Strings
* @param villageCoords The coords of the Villages in a ArrayList of Strings
* @param playerSettlerCoords The coords of the Settlers of the current player in a ArrayList of Strings
* @param playerVillageCoords The coords of the Villages of the current player in a ArrayList of Strings
* @return boolean True if the move is valid, false if the move is invalid
*/
public static boolean isMoveValidTrim(String pieceType, String moveCoords,
String currentPhase, ArrayList<String> coordsContainer,
ArrayList<String> settlerCoords,
ArrayList<String> villageCoords, ArrayList<String> playerSettlerCoords,
ArrayList<String> playerVillageCoords) {
// For Exploration Phase and or Settlement Phase
switch(currentPhase){
// Exploration Phase
case "E":
// If the move Coords is an occupied space, return false;
if(settlerCoords.contains(moveCoords) || villageCoords.contains(moveCoords)) return false;
// If the Village is being placed on the sea return false
if(pieceType.equals("T") && !coordsContainer.contains(moveCoords)) return false;
// if the village is placed on Land and it's not adjacent to any
// of the pieces return false
if(pieceType.equals("T") && (!isAdjacent(moveCoords, playerVillageCoords) &&
!isAdjacent(moveCoords, playerSettlerCoords))) return false;
// If settler is on land and it's not adjacent to any of the pieces
// return false
if(pieceType.equals("S") && coordsContainer.contains(moveCoords)){
if(!isAdjacent(moveCoords, playerSettlerCoords) &&
!isAdjacent(moveCoords, playerVillageCoords)) return false;
}
break;
// Settlement Phase
case "S":
// If the move coord is an occupied space, return false;
if(settlerCoords.contains(moveCoords)) return false;
if(villageCoords.contains(moveCoords)) return false;
// if the settler is not adjacent with any of the pieces return false
if(!isAdjacent(moveCoords, playerSettlerCoords) &&
!isAdjacent(moveCoords, playerVillageCoords)) return false;
}
return true;
}
/**
* Given a state string, generate a set containing all move strings playable
* by the current player.
* <p>
@ -315,65 +456,99 @@ public class BlueLagoon {
*/
public static Set<String> generateAllValidMoves(String stateString) {
// Create a state object
State state = new State(stateString);
// Get information from the state string
int numPlayers = state.getNumPlayers();
char gamePhase = state.getCurrentPhase();
// Get number of players
int numPlayers = Character.getNumericValue(stateString.charAt(stateString.indexOf(";") - 1));
// Store the current game phase
String gamePhase = "E";
// If the game is not in the exploration phase use state 1
if (!stateString.contains("E")) gamePhase = "S";
// Get the current player
String currentPlayer = stateString.substring(stateString.indexOf("c ") + 2,stateString.indexOf("c ") + 3);
// Get the board size
int boardHeight = state.boardHeight;
int boardHeight = Integer.parseInt(stateString.substring(stateString.indexOf("a ") + 2, stateString.indexOf(";") - 2));
// Get player data
String allPlayerData = stateString.substring(stateString.indexOf("p " + currentPlayer));
String playerData = allPlayerData.substring(0, allPlayerData.indexOf(";"));
String[] pStates = stateString.substring(stateString.indexOf("p ")).split("; ?");
// Create a set to store all possible moves
Set<String> allMoves = new HashSet<>();
// Calculate number of pieces each player starts with
int startNumSettlers = switch (numPlayers) {
case 2 -> 30;
case 3 -> 25;
case 4 -> 20;
default -> 0;
};
// Check if the player has placed all their settlers or villages
boolean hasSettler = (state.getCurrentPlayer().getSettlers().length < startNumSettlers);
boolean hasVillage = (state.getCurrentPlayer().getVillages().length < 5);
if (!hasSettler && !(hasVillage && gamePhase == 'E')) return allMoves;
// Add used coords
ArrayList<String> settlerCoords = new ArrayList<>(); // Placed Settler Coordinates
ArrayList<String> villageCoords = new ArrayList<>(); // Placed villages coordinates
ArrayList<String> playerSettlerCoords = new ArrayList<>(); // The current Player's settler coords
ArrayList<String> playerVillageCoords = new ArrayList<>(); // The current Player's Village coords
for (int i = 0; i < numPlayers; i++){
for (Coord c: state.getPlayer(i).getSettlers()){
settlerCoords.add(c.toString());
}
for (Coord c: state.getPlayer(i).getVillages()){
villageCoords.add(c.toString());
}
for (String pState:pStates) {
String[] parseSplit = pState.split(" ");
// Check if there's enough pieces left for that player that is moving
String pStatePlayerId = parseSplit[1];
// Collecting the settler Coords that has been placed
for (int i = 9; i < parseSplit.length; i++) {
while (!parseSplit[i].equals("T")) {
settlerCoords.add(parseSplit[i]); // Store all the settler coords
// If the current player ID is the same as the placed settler's player ID
// Store it into array
if (pStatePlayerId.equals(currentPlayer)) playerSettlerCoords.add(parseSplit[i]);
i++;
}
i++;
// Collecting the village coords that has been placed
while (i < parseSplit.length) {
villageCoords.add(parseSplit[i]); // Store all the village Coords
// If the current player ID is the same as the placed Village's player ID
// Store it into array
if (pStatePlayerId.equals(currentPlayer)) playerVillageCoords.add(parseSplit[i]);
i++;
}
}
}
for (Coord c: state.getCurrentPlayer().getSettlers()){
playerSettlerCoords.add(c.toString());
// Get placed pieces
String settlersPlaced = playerData.substring(playerData.indexOf("S") + 2, playerData.indexOf("T"));
int numSettlersPlaced = settlersPlaced.split(" ").length;
if (!settlersPlaced.contains(" ")){
numSettlersPlaced = 0;
}
for (Coord c: state.getCurrentPlayer().getVillages()){
playerVillageCoords.add(c.toString());
String villagesPlaced = playerData.substring(playerData.indexOf("T")+1);
int numVillagesPlaced = villagesPlaced.split(" ").length;
if (!villagesPlaced.contains(" ")){
numVillagesPlaced = 0;
}
// Get island data
String[] islands = stateString.substring(stateString.indexOf("i ")).split("; ");
// Get the coordinates of the islands
ArrayList<String> coordsContainer = new ArrayList<>();
for (Island island : state.getIslands()) {
for (Coord c:island.getCoords()){
coordsContainer.add(c.toString());
}
for (String island : islands) {
if (!island.substring(0, 2).equals("i ")) continue;
coordsContainer.addAll(Arrays.asList(island.substring(4).split(" ")));
}
// Calculate number of pieces each player starts with
int startNumSettlers = 0;
switch (numPlayers) {
case 2:
startNumSettlers = 30;
break;
case 3:
startNumSettlers = 25;
break;
case 4:
startNumSettlers = 20;
break;
}
// Check if the player has placed all their settlers or villages
boolean hasSettler = (numSettlersPlaced < startNumSettlers);
boolean hasVillage = (numVillagesPlaced <= 5);
// Create a set to store all possible moves
Set<String> allMoves = new HashSet<>();
// Generate all possible coordinates in an array
String[] coordinates = new String[boardHeight * boardHeight];
int index = 0;
@ -383,46 +558,33 @@ public class BlueLagoon {
index++;
}
}
// For each coordinate
for (String cord:coordinates) {
// Make sure the coordinate is not already used
if(settlerCoords.contains(cord)) continue;
if(villageCoords.contains(cord)) continue;
// Make sure the coordinate is in bounds
int y = Integer.parseInt(cord.split(",")[1]);
if(Integer.parseInt(cord.substring(0,cord.indexOf(','))) % 2 == 0) {
if(y > boardHeight - 2) continue;
}
else if(y > boardHeight - 1) continue;
switch (gamePhase) {
case 'E' -> {
if (!coordsContainer.contains(cord)) {
if (hasSettler) allMoves.add("S " + cord);
break;
}
// If the Village is being placed on the sea return false
if ((isAdjacent(cord, playerVillageCoords) || isAdjacent(cord, playerSettlerCoords))) {
// Add the move to the set
if (hasVillage) allMoves.add("T " + cord);
if (hasSettler) allMoves.add("S " + cord);
}
}
// Settlement Phase
case 'S' -> {
// if the settler is not adjacent with any of the pieces return false
if ((isAdjacent(cord, playerVillageCoords) || isAdjacent(cord, playerSettlerCoords))) {
// Add the move to the set
allMoves.add("S " + cord);
}
// If the player has not placed all their settlers
if (hasSettler){
if (isMoveValidTrim("S", cord,gamePhase,
coordsContainer,settlerCoords,villageCoords,playerSettlerCoords,playerVillageCoords)) {
allMoves.add("S " + cord);
}
}
if (hasVillage && gamePhase == "E") {
if (isMoveValidTrim("T", cord,gamePhase,
coordsContainer,settlerCoords,villageCoords,playerSettlerCoords,playerVillageCoords)) {
allMoves.add("T " + cord);
}
}
}
return allMoves;
}
// endregion
/**
* Given a state string, determine whether it represents an end of phase state.
* <p>
@ -434,8 +596,7 @@ public class BlueLagoon {
* @return true if the state is at the end of either phase and false otherwise
*/
public static boolean isPhaseOver(String stateString){
State state = new State(stateString);
return state.isPhaseOver();
return false; // FIXME Task 9
}
/**
@ -450,17 +611,9 @@ public class BlueLagoon {
* @return a new state string achieved by placing the move on the board
*/
public static String placePiece(String stateString, String moveString){
State state = new State(stateString);
char pieceType = moveString.charAt(0);
String coordStr = moveString.substring(2);
int y = Integer.parseInt(coordStr.split(",")[0]);
int x = Integer.parseInt(coordStr.split(",")[1]);
Coord coord = new Coord(y, x);
state.placePiece(coord, pieceType);
return state.toString();
return ""; // FIXME Task 10
}
/**
* Given a state string, calculate the "Islands" portion of the score for
* each player as if it were the end of a phase. The return value is an
@ -476,18 +629,10 @@ public class BlueLagoon {
* @return an integer array containing the calculated "Islands" portion of
* the score for each player
*/
public static int[] calculateTotalIslandsScore(String stateString) {
State state = new State(stateString);
int[] scores = new int[state.getNumPlayers()];
for (int i = 0; i < state.getNumPlayers(); i++) {
scores[i] = state.scoreTotalIslands(i);
}
return scores;
public static int[] calculateTotalIslandsScore(String stateString){
return new int[]{0, 0}; // FIXME Task 11
}
/**
* Given a state string, calculate the "Links" portion of the score for
* each player as if it were the end of a phase. The return value is an
@ -506,14 +651,7 @@ public class BlueLagoon {
* the score for each player
*/
public static int[] calculateIslandLinksScore(String stateString){
State state = new State(stateString);
int[] scores = new int[state.getNumPlayers()];
for (int i = 0; i < state.getNumPlayers(); i++) {
scores[i] = state.scoreLinks(i);
}
return scores;
return new int[]{0, 0}; // FIXME Task 11
}
/**
@ -536,12 +674,7 @@ public class BlueLagoon {
* of the score for each player
*/
public static int[] calculateIslandMajoritiesScore(String stateString){
State state = new State(stateString);
int[] scores = new int[state.getNumPlayers()];
for (int i = 0; i < state.getNumPlayers(); i++) {
scores[i] = state.scoreMajorities(i);
}
return scores;
return new int[]{0, 0}; // FIXME Task 11
}
/**
@ -568,12 +701,7 @@ public class BlueLagoon {
* portions of the score for each player
*/
public static int[] calculateResourcesAndStatuettesScore(String stateString){
State state = new State(stateString);
int[] scores = new int[state.getNumPlayers()];
for (int i = 0; i < state.getNumPlayers(); i++) {
scores[i] = state.scoreResources(i)+state.scoreStatuettes(i);
}
return scores;
return new int[]{0, 0}; // FIXME Task 11
}
/**
@ -588,14 +716,8 @@ public class BlueLagoon {
* @return an integer array containing the calculated scores for each player
*/
public static int[] calculateScores(String stateString){
State state = new State(stateString);
int[] scores = new int[state.getNumPlayers()];
for (int i = 0; i < state.getNumPlayers(); i++) {
scores[i] = state.createScore(i);
}
return scores;
return new int[]{0, 0}; // FIXME Task 11
}
// endregion
/**
* Given a state string representing an end of phase state, return a new state
@ -615,17 +737,9 @@ public class BlueLagoon {
* @return a string representing the new state achieved by following the end of phase rules
*/
public static String endPhase(String stateString){
State state = new State(stateString);
state.scorePhase();
if (state.getCurrentPhase() == 'E') {
state.cleanBoard();
state.distributeResources();
state.nextPhase();
}
return state.toString();
return ""; // FIXME Task 12
}
// 2 phases, exploration and settlement
/**
* Given a state string and a move string, apply the move to the board.
* <p>
@ -639,51 +753,7 @@ public class BlueLagoon {
* @return a string representing the new state after the move is applied to the board
*/
public static String applyMove(String stateString, String moveString){
State state = new State(stateString);
char pieceType = moveString.charAt(0);
String coordStr = moveString.substring(2);
int y = Integer.parseInt(coordStr.split(",")[0]);
int x = Integer.parseInt(coordStr.split(",")[1]);
Coord coord = new Coord(y, x);
// if the move is valid, place it
if ( isMoveValid(stateString, moveString)) state.placePiece(coord, pieceType);
// if the move ends the phase
if (state.isPhaseOver()){
// Applying end of Phase rules
// For Exploration Phase
// Tally up the score, clean the board, distribute resources, change to next Phase
if (state.getCurrentPhase() == 'E') {
state.scorePhase();
state.cleanBoard();
state.distributeResources();
state.nextPhase();
}
// For Settlement Phase
// Tally up the score
else if (state.getCurrentPhase() == 'S') {
state.scorePhase();
}
}
// After the endPhase is over, move to the next player
state.nextPlayer();
// if the current player cannot play, go to the next player
int players = state.getNumPlayers();
// the case where there are multiple players, while the current player cannot play the move,
// move to the next player and skip each player once if that player cannot play a move.
while (!state.getCurrentPlayer().canPlay(state)) {
if (players == 1) break;
state.nextPlayer();
players--;
}
return state.toString();
return ""; // FIXME Task 13
}
/**
@ -700,7 +770,6 @@ public class BlueLagoon {
* @return a move string generated by an AI
*/
public static String generateAIMove(String stateString){
State state = new State(stateString);
return state.getCurrentPlayer().createAIMove(state);
return ""; // FIXME Task 16
}
}

View File

@ -1,132 +0,0 @@
package comp1110.ass2;
/**
* Object to store coordinates
* This stores the x and y coordinates of a point
*/
public record Coord(int y, int x) {
/**
* Constructor for the Coord object
*
* @param x x coordinate
* @param y y coordinate
*/
public Coord {
}
// region Getters and Setters
/**
* Get the x coordinate
*
* @return int x coordinate
*/
@Override
public int x() {
return x;
}
/**
* Get the y coordinate
*
* @return int y coordinate
*/
@Override
public int y() {
return y;
}
// endregion
/**
* Check if two coordinates are equal
*
* @param coord Coord object to compare to
* @return boolean true if equal, false otherwise
*/
public boolean equals(Coord coord) {
return (this.x == coord.x && this.y == coord.y);
}
/**
* Check if two coordinates are adjacent (does not include diagonals)
*
* @param coord Coord object to compare to
*/
public boolean isAdjacent(Coord coord) {
if (this.y == coord.y) {
return (this.x == coord.x - 1 || this.x == coord.x + 1);
}
if (this.x == coord.x) {
return (this.y == coord.y - 1 || this.y == coord.y + 1);
}
return false;
}
/**
* Check if two coordinates are adjacent (includes diagonals)
*
* @param coord Coord object to compare to
*/
public boolean isAdjacentDiagonal(Coord coord) {
if (isAdjacent(coord)) return true;
// Consider hex offsets
if (y%2 == 0){
if (this.x == coord.x && this.y == coord.y + 1) return true;
if (this.x == coord.x && this.y == coord.y - 1) return true;
if (this.x == coord.x - 1 && this.y == coord.y + 1) return true;
return (this.x == coord.x - 1 && this.y == coord.y - 1);
}
else {
if (this.x == coord.x && this.y == coord.y + 1) return true;
if (this.x == coord.x && this.y == coord.y - 1) return true;
if (this.x == coord.x + 1 && this.y == coord.y + 1) return true;
return (this.x == coord.x + 1 && this.y == coord.y - 1);
}
}
/**
* @param player Player to check owned by
* @return ArrayList of adjacent coordinates
*/
public Coord[] getClaimedAdjacent(Player player) {
Coord[] adjacent = new Coord[8];
adjacent[0] = new Coord(this.y, this.x + 1);
adjacent[1] = new Coord(this.y, this.x - 1);
adjacent[2] = new Coord(this.y + 1, this.x);
adjacent[3] = new Coord(this.y - 1, this.x);
adjacent[4] = new Coord(this.y + 1, this.x + 1);
adjacent[5] = new Coord(this.y + 1, this.x - 1);
adjacent[6] = new Coord(this.y - 1, this.x + 1);
adjacent[7] = new Coord(this.y - 1, this.x - 1);
Coord[] adjacentOwned = new Coord[8];
int ownedCount = 0;
for (Coord c : player.getPieces()) {
for (int i = 0; i < adjacent.length; i++) {
if (c.equals(adjacent[i])) {
adjacentOwned[i] = c;
ownedCount++;
}
}
}
Coord[] owned = new Coord[ownedCount];
for (int i = 0; i < ownedCount; i++) {
owned[i] = adjacentOwned[i];
}
return adjacentOwned;
}
/**
* Get a string representation of the coordinate (y,x)
*
* @return String representation of the coordinate
*/
@Override
public String toString() {
return y + "," + x;
}
}

View File

@ -1,45 +0,0 @@
package comp1110.ass2;
public class GameData {
public static final String DEFAULT_GAME = "a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; " +
"i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; " +
"i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; " +
"i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; " +
"i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; " +
"i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; " +
"i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; " +
"i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; " +
"s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 " +
"10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String WHEELS_GAME = "a 13 2; c 0 E; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 " +
"5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 " +
"9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 " +
"12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 " +
"8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 " +
"8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C B W P S; " +
"p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String FACE_GAME = "a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 " +
"1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 " +
"12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; " +
"i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 " +
"6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 " +
"2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 " +
"12,4 12,7; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String SIDES_GAME = "a 7 2; c 0 E; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 " +
"3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 " +
"5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 " +
"4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String SPACE_INVADERS_GAME = "a 23 2; c 0 E; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 " +
"3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 " +
"6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 " +
"3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 " +
"6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 " +
"20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 " +
"22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 " +
"16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 " +
"16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 " +
"11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 " +
"15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 " +
"6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 " +
"21,6 21,9 21,12; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
}

View File

@ -1,91 +0,0 @@
package comp1110.ass2;
/**
* Island class
* This class is used to store the information of an island
*/
public class Island {
final int bonus;
private Coord[] coords;
/**
* Constructor for Island class
* This creates an island with a bonus and an empty array of coordinates
* @param bonus the bonus of the island
*/
public Island(int bonus) {
this.bonus = bonus;
this.coords = new Coord[0];
}
/**
* Get the bonus of the island
* @return int bonus of the island
*/
public int getBonus() {
return bonus;
}
/**
* Get the coordinates of the island
* @return Coord[] coordinates of the island
*/
public Coord[] getCoords() {
return coords;
}
/**
* Check if the island contains a coordinate
* @param coord the coordinate to be checked
* @return boolean true if the island contains the coordinate
*/
public boolean containsCoord(Coord coord) {
for (Coord c : this.coords) {
if (c.equals(coord)) {
return true;
}
}
return false;
}
/**
* Add a coordinate to the island
* @param coord the coordinate to be added
*/
public void addCoord(Coord coord) {
if (this.containsCoord(coord)) {
return;
}
Coord[] newCoords = new Coord[this.coords.length + 1];
for (int i = 0; i < this.coords.length; i++) {
newCoords[i] = this.coords[i];
}
newCoords[this.coords.length] = coord;
this.coords = newCoords;
}
/**
* Check if island is equal to another island
* @param island the island to be compared to
* @return boolean true if the island is equal to the other island
*/
public boolean equals(Island island) {
if (this.bonus != island.bonus) return false;
if (this.coords.length != island.coords.length) return false;
for (int i = 0; i < this.coords.length; i++) {
if (!this.containsCoord(island.coords[i])) return false;
}
return true;
}
@Override
public String toString() {
String str = "i " + this.bonus;
for (Coord c : this.coords) {
str += " " + c.toString();
}
return str + ";";
}
}

View File

@ -1,596 +0,0 @@
package comp1110.ass2;
import java.util.ArrayList;
import java.util.Random;
import java.util.Set;
import static comp1110.ass2.BlueLagoon.isAdjacent;
/**
* Player class
* This class is used to store the information of a player
* This includes the player's ID, score, resources, settlers and villages
*/
public class Player {
// region Setup
final int playerID;
private int score;
private int numCoconuts;
private int numBamboo;
private int numWater;
private int numPreciousStones;
private int numStatuette;
private Coord[] settlers;
private Coord[] villages;
private Coord lastMove;
private Boolean isAI;
/**
* Constructor for Player class
* This creates a player with a player ID and initialises the player's score, resources, settlers and villages
* @param playerID int player ID
*/
public Player(int playerID) {
this.playerID = playerID;
this.score = 0;
this.numCoconuts = 0;
this.numBamboo = 0;
this.numWater = 0;
this.numPreciousStones = 0;
this.numStatuette = 0;
this.settlers = new Coord[0];
this.villages = new Coord[0];
this.isAI = false;
lastMove = new Coord(-1, -1);
}
// endregion
// region Getters and Setters
/**
* Get the player's ID
* @return int player ID
*/
public int getPlayerID() {
return playerID;
}
/**
* Get the player's score
* @return int player score
*/
public int getScore() {
return score;
}
/**
* Add a score to the player's score
* @param score int score to be added
*/
public void addScore(int score) {
this.score += score;
}
/**
* Get the number of a resource the player has of a type
* @param resourceType char resource type
* @return int number of the resource the player has
*/
public int getNumResource(char resourceType) {
return switch (resourceType) {
case 'C' -> numCoconuts;
case 'B' -> numBamboo;
case 'W' -> numWater;
case 'P' -> numPreciousStones;
case 'S' -> numStatuette;
default -> 0;
};
}
/**
* Add a resource to the player's resources
* @param numResource int number of the resource to be added
* @param resourceType char resource type
*/
public void addResource(int numResource, char resourceType) {
switch (resourceType) {
case 'C' -> numCoconuts += numResource;
case 'B' -> numBamboo += numResource;
case 'W' -> numWater += numResource;
case 'P' -> numPreciousStones += numResource;
case 'S' -> numStatuette += numResource;
}
}
/**
* Remove all resources from the player's resources
*/
public void removeResources() {
numCoconuts = 0;
numBamboo = 0;
numWater = 0;
numPreciousStones = 0;
numStatuette = 0;
}
/**
* Get the player's settlers
* @return Coord[] list of the player's settlers coords
*/
public Coord[] getSettlers() {
return settlers;
}
/**
* Get the player's villages
* @return Coord[] list of the player's villages coords
*/
public Coord[] getVillages() {
return villages;
}
/**
* Add settlers to the player's settlers
* @param coord Coord coord of the settler to be added
*/
public void addSettler(Coord coord) {
Coord[] newSettlers = new Coord[settlers.length + 1];
System.arraycopy(settlers, 0, newSettlers, 0, settlers.length);
newSettlers[settlers.length] = coord;
settlers = newSettlers;
lastMove = coord;
}
/**
* Add a village to the player's villages
* @param coord Coord coord of the village to be added
*/
public void addVillage(Coord coord) {
// Check if the player already has the maximum number of villages
if (villages.length >= 5) {
return;
}
Coord[] newVillages = new Coord[villages.length + 1];
System.arraycopy(villages, 0, newVillages, 0, villages.length);
newVillages[villages.length] = coord;
villages = newVillages;
lastMove = coord;
}
/**
* Delete all settlers
*/
public void clearSettlers() {
settlers = new Coord[0];
}
/**
* Delete village
*/
public void removeVillage(Coord coord) {
Coord[] newVillages = new Coord[villages.length - 1];
int j = 0;
for (Coord village : villages) {
if (village != coord) {
newVillages[j] = village;
j++;
}
}
villages = newVillages;
}
/**
* Get all the player's piece's coords
* @return coord[] list of all the player's piece's coords
*/
public Coord[] getPieces() {
Coord[] pieces = new Coord[settlers.length + villages.length];
System.arraycopy(settlers, 0, pieces, 0, settlers.length);
System.arraycopy(villages, 0, pieces, settlers.length, villages.length);
return pieces;
}
/**
* Get number of pieces on island
* @param island Island to check
* @return int number of pieces on island
*/
public int getNumPiecesOnIsland(Island island) {
int numPieces = 0;
for (Coord piece : getPieces()) {
if (island.containsCoord(piece)) {
numPieces++;
}
}
return numPieces;
}
/**
* Get the player's last move coord
* @return Coord last move coord
*/
public Coord getLastMove() {
return lastMove;
}
/**
* Set if the player is an AI
* @param ai boolean true if player is an AI, false otherwise
*/
public void setAI(boolean ai) {
this.isAI = ai;
}
/**
* Check if the player is an AI
* @return boolean true if player is an AI, false otherwise
*/
public boolean isAI() {
return isAI;
}
/**
* Check if player is able to do any moves
* @return true if player can do any moves, false otherwise
*/
public boolean canPlay(State state) {
// Check if the player has placed all their settlers or villages
int numSettlers = 30 - ((state.getNumPlayers() - 2) * 5);
boolean hasSettler = (settlers.length < numSettlers);
boolean hasVillage = (villages.length < 5);
if (!hasSettler && !hasVillage) return false;
// if (state.getCurrentPhase() != 'E'){
// if (!hasSettler && !hasVillage) return false;
// }
// Add used coords
ArrayList<String> settlerCoords = new ArrayList<>(); // Placed Settler Coordinates
ArrayList<String> villageCoords = new ArrayList<>(); // Placed villages coordinates
ArrayList<String> playerSettlerCoords = new ArrayList<>(); // The current Player's settler coords
ArrayList<String> playerVillageCoords = new ArrayList<>(); // The current Player's Village coords
for (int i = 0; i < state.getNumPlayers(); i++){
for (Coord c: state.getPlayer(i).getSettlers()){
settlerCoords.add(c.toString());
}
for (Coord c: state.getPlayer(i).getVillages()){
villageCoords.add(c.toString());
}
}
for (Coord c: settlers){
playerSettlerCoords.add(c.toString());
}
for (Coord c: villages){
playerVillageCoords.add(c.toString());
}
// Get the coordinates of the islands
ArrayList<String> islandCoords = new ArrayList<>();
for (Island island : state.getIslands()) {
for (Coord c:island.getCoords()){
islandCoords.add(c.toString());
}
}
// Generate all possible coordinates in an array
String[] coordinates = new String[state.boardHeight * state.boardHeight];
int index = 0;
for (int i = 0; i < state.boardHeight; i++){
for (int j = 0; j < state.boardHeight; j++){
coordinates[index] = j + "," + i;
index++;
}
}
// For each coordinate
for (String cord:coordinates) {
// Make sure the coordinate is not already used
if(settlerCoords.contains(cord)) continue;
if(villageCoords.contains(cord)) continue;
// Make sure the coordinate is in bounds
int y = Integer.parseInt(cord.split(",")[1]);
if(Integer.parseInt(cord.substring(0,cord.indexOf(','))) % 2 == 0) {
if(y > state.boardHeight - 2) continue;
}
else if(y > state.boardHeight - 1) continue;
switch (state.getCurrentPhase()) {
case 'E' -> {
if (!islandCoords.contains(cord) && hasSettler) return true;
if ((isAdjacent(cord, playerVillageCoords) || isAdjacent(cord, playerSettlerCoords))) return true;
}
// Settlement Phase
case 'S' -> {
// if the settler is adjacent with any of the pieces return true
if ((isAdjacent(cord, playerVillageCoords) || isAdjacent(cord, playerSettlerCoords)) && hasSettler) return true;
}
}
}
return false;
}
// endregion
// region Auto Player
/**
* Do a Random Move
* @param state State to do the move on
*/
public void doRandomMove(State state) {
if (state.getCurrentPlayer() != this) {
System.out.println("Not this player's turn");
return;
}
Set<String> validMoves = BlueLagoon.generateAllValidMoves(state.toString());
if (validMoves.size() == 0) {
return;
}
Random rand = new Random();
int randomMove = rand.nextInt(0, validMoves.size());
int i = 0;
for (String move : validMoves) {
if (i == randomMove) {
char pieceType = move.charAt(0);
String coordStr = move.substring(2);
int y = Integer.parseInt(coordStr.split(",")[0]);
int x = Integer.parseInt(coordStr.split(",")[1]);
Coord coord = new Coord(y, x);
lastMove = coord;
state.placePiece(coord, pieceType);
state.nextPlayer();
return;
}
i++;
}
}
/**
* Do a calculated move
* @param state State to do the move on
*/
public String createAIMove(State state){
if (state.getCurrentPlayer() != this){
System.out.println("Not this player's turn");
return "";
}
Set<String> validMoves = BlueLagoon.generateAllValidMoves(state.toString());
if (validMoves.size() == 0){
System.out.println("No valid moves");
return "";
}
int islandCount = 0;
for (Island island : state.getIslands()) {
if (this.getNumPiecesOnIsland(island)>0) islandCount++;
}
String bestMove = "";
int bestScore = -1;
for (String move : validMoves){
int score = calculateMoveScore(state, move,islandCount);
if (score > bestScore){
bestScore = score;
bestMove = move;
}
}
return bestMove;
}
/**
* Do a calculated move
*/
public Boolean doAIMove(State state){
String bestMove = createAIMove(state);
if (bestMove.equals("")){
System.out.println("No AI moves");
return false;
}
char pieceType = bestMove.charAt(0);
String coordStr = bestMove.substring(2);
int y = Integer.parseInt(coordStr.split(",")[0]);
int x = Integer.parseInt(coordStr.split(",")[1]);
Coord coord = new Coord(y, x);
lastMove = coord;
state.placePiece(coord, pieceType);
state.nextPlayer();
return true;
}
/**
* Calculate the score of a move
* The score is calculated only with public information
* The score is calculated by:
* 1. If the move gives the player some resources (10 points)
* 2. If the move gives the player a new island (1 point) or if below rules are met don't give a point
* 3. If this move makes the player have the pieces on 7-8 islands (10-20 points)
* 4. If this move makes the player have the most pieces on an island (island bonus points)
*
* @param state State to do the move on
* @param move String move to calculate the score of
* @return int score of the move
*/
public int calculateMoveScore(State state, String move, int currentIslandCount){
int score = 0;
String coordStr = move.substring(2);
int y = Integer.parseInt(coordStr.split(",")[0]);
int x = Integer.parseInt(coordStr.split(",")[1]);
Coord coord = new Coord(y, x);
// Check if this will give player some resources
if (state.isStone(coord)){
score += 10;
}
// Check if this is a new island or will make player have the most pieces on the island
for (Island island:state.getIslands()) {
if (!island.containsCoord(coord)) continue;
if (this.getNumPiecesOnIsland(island) == 0) {
if (currentIslandCount == 7) score += 20;
else if (currentIslandCount == 6) score += 10;
else score += 1;
}
// Check if adding this piece will make player have the most pieces on the island
int ties = 0;
int loses = 0;
int myPieces = this.getNumPiecesOnIsland(island);
for (int i = 0; i < state.getNumPlayers(); i++) {
if (i == this.getPlayerID()) {
continue;
}
int otherPlayerPieces = state.getPlayer(i).getNumPiecesOnIsland(island);
if (otherPlayerPieces > myPieces+1) {
loses++;
} else if (otherPlayerPieces == myPieces + 1) {
ties++;
}
}
if (loses == 0){
if (ties > 0){
score += island.getBonus()/(ties+1);
}
else{
score += island.getBonus();
}
}
}
// Check if player needs more islands
if (score == 0) {
if (currentIslandCount < 8 ){
// Check if there is an island adjacent to this move
for (Island island : state.getIslands()) {
if (island.containsCoord(new Coord(coord.x() + 1, coord.y()))
|| island.containsCoord(new Coord(coord.x() - 1, coord.y()))
|| island.containsCoord(new Coord(coord.x(), coord.y() + 1))
|| island.containsCoord(new Coord(coord.x(), coord.y() - 1))) {
score += 1;
if (state.getCurrentPhase() == 'E'){
score += 4;
}
}
}
}
}
return score;
}
// endregion
/**
* Get the largest column of the player's pieces
* @param coords Coord[] list of the player's pieces
* @return int largest column
*/
private int maxCol(Coord[] coords){
int maxCol = 0;
for (Coord coord : coords) {
if (coord.x() > maxCol) {
maxCol = coord.x();
}
}
return maxCol;
}
/**
* Check if player is equal to another player
* @param player Player player to be compared to
* @return true if the players are equal, false otherwise
*/
public boolean equals(Player player) {
if (player.getPlayerID() != playerID) return false;
if (player.getScore() != score) return false;
if (player.getNumResource('C') != numCoconuts) return false;
if (player.getNumResource('B') != numBamboo) return false;
if (player.getNumResource('W') != numWater) return false;
if (player.getNumResource('P') != numPreciousStones) return false;
if (player.getNumResource('S') != numStatuette) return false;
if (player.getSettlers().length != settlers.length) return false;
if (player.getVillages().length != villages.length) return false;
for (int i = 0; i < settlers.length; i++) {
if (!player.getSettlers()[i].equals(settlers[i])) return false;
}
for (int i = 0; i < villages.length; i++) {
if (!player.getVillages()[i].equals(villages[i])) return false;
}
return true;
}
/**
* Get the string representation of the player
* @return String representation of the player in playerString format
*/
@Override
public String toString() {
StringBuilder str = new StringBuilder("p " + playerID + " " + score + " " + numCoconuts + " " + numBamboo + " " + numWater + " " + numPreciousStones + " " + numStatuette + " S");
// Get the coords of the player's pieces in row major order
Coord[] settlersCoords = new Coord[settlers.length];
if (settlers.length != 0) {
int row = 0;
int col = 0;
int i = 0;
int maxcol = maxCol(settlers);
while (settlersCoords[settlers.length - 1] == null) {
for (Coord coord : settlers) {
if (coord.x() == col && coord.y() == row) {
settlersCoords[i] = coord;
i++;
}
}
col++;
if (col > maxcol) {
col = 0;
row++;
}
}
}
Coord[] villagesCoords = new Coord[villages.length];
if (villages.length != 0) {
int row = 0;
int col = 0;
int i = 0;
int maxcol = maxCol(villages);
while (villagesCoords[villages.length-1] == null){
for (Coord coord : villages) {
if (coord.x() == col && coord.y() == row) {
villagesCoords[i] = coord;
i++;
}
}
col++;
if (col > maxcol) {
col = 0;
row++;
}
}
}
for (Coord coord : settlersCoords) {
str.append(" ").append(coord.toString());
}
str.append(" T");
for (Coord coord : villagesCoords) {
str.append(" ").append(coord.toString());
}
return str.toString();
}
}

View File

@ -1,97 +0,0 @@
package comp1110.ass2;
/**
* Resource class
* This class is used to store the information of a resource
* This stores the type and the coordinate of the resource
*/
public class Resource {
private char type;
private final Coord coord;
private boolean claimed;
/**
* Constructor for Resource class
* This creates a resource with a type and a coordinate
* @param type the type of the resource
* @param coord the coordinate of the resource
*/
public Resource(char type, Coord coord) {
this.type = type;
this.coord = coord;
this.claimed = false;
}
/**
* Get the type of the resource
* @return char type of the resource
*/
public char getType() {
return type;
}
/**
* Get the type of the resource
* @return String type of the resource
*/
public String getTypeString() {
return switch (type) {
case 'C' -> "Coconut";
case 'B' -> "Bamboo";
case 'W' -> "Water";
case 'P' -> "Precious Stone";
case 'S' -> "Statuette";
default -> "Invalid";
};
}
/**
* Get the coordinate of the resource
* @return Coord coordinate of the resource
*/
public Coord getCoord() {
return coord;
}
/**
* Set the type of the resource
* @param type char type of the resource
*/
public void setType(char type) {
this.type = type;
}
/**
* Check if the resource is equal to another resource
* @param resource resource to be compared
* @return boolean true if the resources are equal
*/
public boolean equals(Resource resource) {
return (this.type == resource.type && this.coord.equals(resource.coord));
}
/**
* Set the resource to be claimed
* This is used to check if the resource has been claimed
*/
public void setClaimed() {
this.claimed = true;
}
/**
* Check if the resource has been claimed
* @return boolean true if the resource has been claimed
*/
public boolean isAvailable() {
return !this.claimed;
}
@Override
public String toString() {
return "Resource{" +
"type=" + type +
", coord=" + coord +
", claimed=" + claimed +
'}';
}
}

View File

@ -1,720 +0,0 @@
package comp1110.ass2;
import java.util.*;
/**
* Object to store the game state
* This stores the state of the game in a way that is easy to access and modify
* It stores the board height, number of players, current player, current phase, islands, stones,
* unclaimed resources and players (with their data)
*
*/
public class State {
// region Constants
// Constants for the game. Changing these could create errors
final int maxPlayers = 4;
// endregion
// region Variables
final int boardHeight;
private int numPlayers;
private int currentPlayer;
private int currentPhase; // 0 for exploration, 1 for settlement
private Island[] islands;
final private Coord[] stonesCoords;
private Resource[] resources;
private Player[] players;
// endregion
// region Setup methods/constructors
/**
* Constructor for the state object
* This takes a string containing the state of the game and initialises the object
* @param stateString String containing the state of the game
*/
public State(String stateString) {
// Split the state string into its components
String[] components = stateString.split(";");
// For the game initialisation part
String[] gameInitComponents = components[0].trim().split(" ");
boardHeight = Integer.parseInt(gameInitComponents[1]);
numPlayers = Integer.parseInt(gameInitComponents[2]);
// Current state part
String[] currentStateComponents = components[1].trim().split(" ");
currentPlayer = Integer.parseInt(currentStateComponents[1]);
if (currentStateComponents[2].equals("E")) currentPhase = 0;
else currentPhase = 1;
// Islands part
int islandcount = 0;
for (int i=2; i< components.length; i++)
{
// Split island part
String[] islandComponents = components[i].trim().split(" ");
// Check if the component is still an island
if (!islandComponents[0].equals("i")) break;
Island tmpIsland = new Island(Integer.parseInt(islandComponents[1]));
// Add each coord
for (int j=2; j<islandComponents.length; j++)
{
String[] coordComponents = islandComponents[j].split(",");
tmpIsland.addCoord(new Coord(Integer.parseInt(coordComponents[0]), Integer.parseInt(coordComponents[1])));
}
islandcount++;
// Add the island to the array
Island[] tmpislands = new Island[islandcount];
if (islands != null) {
System.arraycopy(islands, 0, tmpislands, 0, tmpislands.length - 1);
}
tmpislands[islandcount-1] = tmpIsland;
islands = tmpislands;
}
// Stones part
String[] stonesComponents = components[2+islandcount].trim().split(" ");
stonesCoords = new Coord[stonesComponents.length-1];
for (int i=1; i<stonesComponents.length; i++)
{
String[] coordComponents = stonesComponents[i].split(",");
stonesCoords[i-1] = new Coord(Integer.parseInt(coordComponents[0]), Integer.parseInt(coordComponents[1]));
}
// Unclaimed resources part
String[] resourcesComponents = components[3+islandcount].trim().split(" ");
resources = new Resource[resourcesComponents.length-6];
int currentResource = 0;
char type = 'C';
for (int i=1; i<resourcesComponents.length; i++)
{
if (resourcesComponents[i].matches("[CBWPS]")){
currentResource++;
type = resourcesComponents[i].charAt(0);
continue;
}
String[] coordComponents = resourcesComponents[i].split(",");
Coord tmpCoord = new Coord(Integer.parseInt(coordComponents[0]), Integer.parseInt(coordComponents[1]));
resources[i-1-currentResource] = new Resource(type, tmpCoord);
}
// Players part
players = new Player[numPlayers];
for (int i=0; i<numPlayers; i++)
{
String[] playerComponents = components[4+islandcount+i].trim().split(" ");
players[i] = new Player(Integer.parseInt(playerComponents[1]));
players[i].addScore(Integer.parseInt(playerComponents[2]));
players[i].addResource(Integer.parseInt(playerComponents[3]),'C');
players[i].addResource(Integer.parseInt(playerComponents[4]),'B');
players[i].addResource(Integer.parseInt(playerComponents[5]),'W');
players[i].addResource(Integer.parseInt(playerComponents[6]),'P');
players[i].addResource(Integer.parseInt(playerComponents[7]),'S');
int pieceType = 0;
for (int j=8; j<playerComponents.length; j++)
{
if (playerComponents[j].matches("[ST]")){
pieceType++;
continue;
}
if (pieceType == 1) {
String[] coordComponents = playerComponents[j].split(",");
players[i].addSettler(new Coord(Integer.parseInt(coordComponents[0]), Integer.parseInt(coordComponents[1])));
}
else if (pieceType == 2) {
String[] coordComponents = playerComponents[j].split(",");
players[i].addVillage(new Coord(Integer.parseInt(coordComponents[0]), Integer.parseInt(coordComponents[1])));
}
}
}
}
/**
* Add a player to the game
* This will add a player to the game if there is less than the maximum number of players
*/
public void addPlayer(){
if (numPlayers >= maxPlayers) return; // There are already the maximum number of players
Player[] oldPlayers = players;
players = new Player[numPlayers+1];
if (numPlayers >= 0) System.arraycopy(oldPlayers, 0, players, 0, numPlayers);
players[numPlayers] = new Player(numPlayers);
numPlayers++;
}
/**
* Distribute the resources to the stone circles randomly
*/
public void distributeResources() {
if (stonesCoords.length != 32) return; // There are not enough stones to distribute resources
// Create a random object and an arrays and list to shuffle the stone circles
Random rand = new Random();
// Number of times to shuffle the stone circles (can be changed)
int shuffle_number = 3;
// Create a copy of the stone circle array to shuffle
Coord[] stoneCircleRandom = stonesCoords;
// Shuffle the stone circles the specified number of times
for (int i = 0; i < shuffle_number; i++) {
// Create a temporary array to store the shuffled stone circles
Coord[] tempStoneCircleRandom = new Coord[32];
// Create a list to store the used cords (to avoid duplicates)
List<Coord> usedCords = new ArrayList<>();
// Shuffle the array
for (int j = 0; j < 32; j++) {
// For 0-31 generate a random cord from the stone circle array and check if it has been used
int randomIndex = rand.nextInt(31);
while (usedCords.contains(stonesCoords[randomIndex])) {
// If it has been used, try the next in line
if (randomIndex == 31) {
randomIndex = 0;
}
else randomIndex++;
}
// If it hasn't been used, add it to the new array
tempStoneCircleRandom[j] = stoneCircleRandom[randomIndex];
usedCords.add(stonesCoords[randomIndex]);
}
// Replace the old array with the new one
stoneCircleRandom = tempStoneCircleRandom;
}
// Initialise unclaimed resources
resources = new Resource[32];
// Create an array for each resource type
char[] toDistribute = {'C', 'B', 'W', 'P'};
// Create a variable to keep track of how many resources have been sorted
int numSorted = 0;
// For each resource type
for (char r:toDistribute){
// Assign 6 to a stone circle
for (int i = 0; i < 6; i++){
resources[numSorted] = new Resource(r, stoneCircleRandom[numSorted]);
numSorted++;
}
}
// Assign 8 statuettes to a stone circle
for (int i = 0; i < 8; i++){
resources[numSorted] = new Resource('S', stoneCircleRandom[numSorted]);
numSorted++;
}
}
// endregion
// region Getters/Setters
/**
* Get the board height
* @return int board height
*/
public int getBoardHeight() {
return boardHeight;
}
/**
* Get the number of players
* @return int number of players
*/
public int getNumPlayers() {
return numPlayers;
}
/**
* Get the current player ID
* @return int current player
*/
public int getCurrentPlayerID() {
return currentPlayer;
}
/**
* Get the current player
* @return Player current player
*/
public Player getCurrentPlayer() {
return players[currentPlayer];
}
/**
* Get the current phase
* Returns 'E' for exploration, 'S' for settlement, 'O' for game over
* @return char current phase
*/
public char getCurrentPhase() {
if (currentPhase == 0) return 'E';
else if (currentPhase == 1) return 'S';
else return 'O'; // Return 'O' for game over
}
/**
* Get the islands
* @return Island[] islands
*/
public Island[] getIslands() {
return islands;
}
/**
* Get one island (by 0 index)
* @return Island island
*/
public Island getIsland(int i) {
return islands[i];
}
/**
* Get the stones
* @return Coord[] stones
*/
public Coord[] getStones() {
return stonesCoords;
}
/**
* Check if a stone is at a given coordinate
* @param coord Coord coordinate to check
* @return boolean true if stone is at coordinate
*/
public boolean isStone(Coord coord) {
for (Coord stone : stonesCoords) {
if (stone.equals(coord)) return true;
}
return false;
}
/**
* Get the player with a given index
* @param i int index of player
* @return Player player
*/
public Player getPlayer(int i) {
return players[i];
}
/**
* Get the unclaimed resources
* @return Resource[] unclaimed resources
*/
public Resource[] getResources() {
return resources;
}
/**
* Get the unclaimed resources of a given type
* @param type char type of resource
* @return Resource[] unclaimed resources of type
*/
public Resource[] getResources(char type) {
Resource[] tmpResources = new Resource[resources.length];
int i = 0;
for (Resource resource : resources) {
if (resource.getType() == type){
tmpResources[i] = resource;
i++;
}
}
Resource[] resources = new Resource[i];
System.arraycopy(tmpResources, 0, resources, 0, i);
return resources;
}
/**
* Get the unclaimed resource at a given coordinate
* @param coord Coord coordinate to check
* @return Resource unclaimed resource at coordinate
*/
public Resource getUnclaimedResource(Coord coord) {
for (Resource resource : resources) {
if (resource.getCoord().equals(coord)) return resource;
}
return null;
}
// endregion
// region Game play functions
/**
* Start next player's turn
*/
public void nextPlayer() {
currentPlayer++;
if (currentPlayer >= numPlayers) currentPlayer = 0;
}
/**
* Start next phase
*/
public void nextPhase() {
currentPhase++;
}
/**
* Place a piece on the board. Uses current turn's player
* This does not check if the move is valid (Use isValidMove() first)
* @param coord Coord coordinate to place piece
* @param type char type of piece
*/
public void placePiece(Coord coord, char type) {
if (type == 'S') {
players[currentPlayer].addSettler(coord);
}
else if (type == 'V' || type == 'T') {
players[currentPlayer].addVillage(coord);
}
// Claim resource if it is a stone circle
if (isStone(coord)) {
for (Resource resource : resources) {
if (resource.getCoord().equals(coord) && resource.isAvailable()) {
players[currentPlayer].addResource(1, resource.getType());
resource.setClaimed();
}
}
}
}
/**
* Is move valid?
* @param coord Coord coordinate to place piece
* @param type char type of piece
* @return boolean true if move is valid
*/
public boolean isMoveValid(Coord coord, char type){
// Create moveString
String moveString = type + " " + coord.toString();
return BlueLagoon.isMoveValid(this.toString(), moveString);
}
/**
* is the phase over?
*/
public boolean isPhaseOver() {
boolean resourcesLeft = false;
for (Resource r : resources) {
if (r.isAvailable() && r.getType() != 'S') resourcesLeft = true;
}
boolean moveLeft = false;
int numSettlers = 30 - ((numPlayers - 2) * 5);
for (Player p: players) {
boolean canPlay = p.getVillages().length < 5;
if (p.getSettlers().length < numSettlers) canPlay = true;
if (canPlay) {
if (p.canPlay(this)) moveLeft = true;
}
}
return !resourcesLeft || !moveLeft;
}
/**
* Clean board for next phase
*/
public void cleanBoard(){
for (Player player : players) {
player.clearSettlers();
player.removeResources();
for (Coord coord : player.getVillages()) {
if (isStone(coord)) {
player.removeVillage(coord);
}
}
}
}
// endregion
// region Scoring
/**
* Score for that phase
* This does not automatically move to the next phase
*/
public void scorePhase() {
for (Player p: players) {
p.addScore(createScore(p.getPlayerID()));
}
}
/**
* Get score of player ID based on current phase and game state
* @param playerID int player ID base 0
* @return int score
*/
public int createScore(int playerID) {
int score = 0;
score += scoreTotalIslands(playerID);
score += scoreLinks(playerID);
score += scoreMajorities(playerID);
score += scoreResources(playerID);
score += scoreStatuettes(playerID);
return score;
}
/**
* Get score from total islands
* @param playerID int player to score
* @return int score
*/
public int scoreTotalIslands(int playerID) {
int score = 0;
int islandCount = 0;
for (Island island : islands) {
// Get island coords
Coord[] islandCoords = island.getCoords();
// Get player's coords
Coord[] playerCoords = players[playerID].getPieces();
// Check if player has a piece on the island
boolean hasPiece = false;
for (Coord playerCoord : playerCoords) {
for (Coord islandCoord : islandCoords) {
if (playerCoord.equals(islandCoord)) {
hasPiece = true;
break;
}
}
if (hasPiece) break;
}
if (hasPiece) islandCount++;
}
if (islandCount >= 8) score = 20;
else if (islandCount == 7) score = 10;
return score;
}
/**
* Score majorities
* @param playerID int player to score
* @return int score
*/
public int scoreMajorities(int playerID){
int score = 0;
for (Island island:islands){
int[] playerPieces = new int[getNumPlayers()];
for (int i = 0; i < getNumPlayers(); i++){
playerPieces[i] = players[i].getNumPiecesOnIsland(island);
}
boolean ishighest = true;
int ties = 0;
for (int i = 0; i < getNumPlayers(); i++){
if (i == playerID) continue;
if (playerPieces[i] > playerPieces[playerID]) {
ishighest = false;
break;
}
if (playerPieces[i] == playerPieces[playerID]) ties++;
}
if (ishighest && playerPieces[playerID] > 0) {
if (ties > 0){
score += island.getBonus()/(ties + 1);
}
else {
score += island.getBonus();
}
}
}
return score;
}
/**
* Score Links
* A (potentially) branching path of neighbouring settlers and villages
* belonging to a player forms a chain. Players earn points from the chain
* of their pieces which links the most islands. Players earn 5 points
* per linked island in this chain.
* @param playerID int player to score
* @return int score
*/
public int scoreLinks(int playerID) {
Coord[] playerCoords = players[playerID].getPieces();
Set<Coord> playerCoordsSet = new HashSet<>(Arrays.asList(playerCoords));
return findLongestLinkScore(playerCoordsSet, islands);
}
/**
* Combines both the helper methods `DFSRecurssionLink` and `findScoreForLink` to find the link set that has the
* highest score from a set all Player's pieces coordinates
* @param allCoords all coordinates of a Player's pieces
* @param islands the set of islands from the generated world
* @return the highest score from a player's linked pieces
*/
public static int findLongestLinkScore ( Set<Coord> allCoords, Island[] islands) {
Set<Coord> longestPath = new HashSet<>(); // Container for Longest Path
Set<Coord> currentPath = new HashSet<>(); // Container for Current Path
Coord startingPoint; // Starting point of the DFS Algo
int maxScore = findScoreForLink(longestPath,islands);
for(Island i : islands) {
for ( Coord c : allCoords) {
if(i.containsCoord(c)) {
startingPoint = c; // set starting Point with the current Coords in the Player's all pieces coords
// DFS Algo starts
currentPath.add(startingPoint);
DFSRecursionLink(allCoords, currentPath, longestPath, startingPoint);
// if the score is bigger, update the Set
if(findScoreForLink(currentPath, islands) > maxScore) {
longestPath.clear();
longestPath.addAll(currentPath);
maxScore = findScoreForLink(longestPath, islands);
}
// clear the currentPath as well
currentPath = new HashSet<>();
}
}
}
return maxScore;
}
/**
* a DFS (Depth-First-Search) Recursion algorithm that traverses all the coordinates of a player's pieces, with
* each step of the DFS algorithm determined if the current coordinate is adjacent with other coordinates
* within the allCoords set and wether or not the currentPath is contained inside the allCoords.
* @param allCoords all coordinates of a Player's pieces
* @param currentPath a set to store the path that the algorithm has gone through
* @param longestPath a set to store the longest path
* @param startingPoint the starting point of each step of DFS
*/
public static void DFSRecursionLink(Set<Coord> allCoords, Set<Coord> currentPath, Set<Coord> longestPath, Coord startingPoint) {
// Add the staring point to the `history` of the path that has been taken by the algorithm
currentPath.add(startingPoint);
for(Coord c : allCoords) {
// if the startingPoint of the step is adjacent with the coords from allCoords and currentPath
// i.e. the `history tracker` of the path so far does not have `c` coords from allCoords
if( startingPoint.isAdjacentDiagonal(c) && !currentPath.contains(c) ) {
// if the currentPath is bigger than the longestPath, update the longest Path
if (currentPath.size() > longestPath.size() ) longestPath = currentPath;
DFSRecursionLink(allCoords, currentPath, longestPath, c); // Repeat the step for all coords
}
}
}
/**
* Helper method for finding the scores for a link set. This helper method is purely to help the
* `findLongestLink` method.
* @param longestLink the link that wants to be searched the score for
* @param islands the islands within the world
* @return the score of the link set
*/
public static int findScoreForLink(Set<Coord> longestLink, Island[] islands) {
Set<Island> connectedIslands = new HashSet<>(); // Container for connected Islands within the longest Link set
for (Coord c : longestLink) {
for (Island i : islands) {
if (i.containsCoord(c)) {
connectedIslands.add(i);
break;
}
}
}
return connectedIslands.size() * 5;
}
/**
* Score resources
* @param playerID int player to score
* @return int score
*/
public int scoreResources(int playerID) {
int score = 0;
char[] resourceTypes = {'C', 'B', 'W', 'P'};
for (char type : resourceTypes) {
int numResources = players[playerID].getNumResource(type);
if (numResources >= 4) {
score += 20;
} else if (numResources == 3) {
score += 10;
} else if (numResources == 2) {
score += 5;
}
}
int numCoconuts = players[playerID].getNumResource('C');
int numBananas = players[playerID].getNumResource('B');
int numWater = players[playerID].getNumResource('W');
int numPreciousStones = players[playerID].getNumResource('P');
if (numCoconuts >= 1 && numBananas >= 1 && numWater >= 1 && numPreciousStones >= 1) {
score += 10;
}
return score;
}
/**
* Score statuettes
* @param playerID int player to score
* @return int score
*/
public int scoreStatuettes(int playerID) {
return players[playerID].getNumResource('S') * 4;
}
// endregion
// region String conversion
/**
* Convert board to stateString format string
* @return String stateString
*/
@Override
public String toString() {
StringBuilder str = new StringBuilder("a " + boardHeight + " " + getNumPlayers() + "; c " + getCurrentPlayerID() + " " + getCurrentPhase() + "; ");
for (Island island : islands) {
str.append(island.toString()).append(" ");
}
str.append("s");
for (Coord s: stonesCoords) {
str.append(" ").append(s.toString());
}
str.append("; r");
char[] types = {'C', 'B', 'W', 'P', 'S'};
for (char type : types) {
str.append(" ").append(type);
for (Resource resource : resources) {
if (resource.getType() == type && resource.isAvailable()) str.append(" ").append(resource.getCoord().toString());
}
}
str.append(";");
for (Player player : players) {
str.append(" ").append(player.toString()).append(";");
}
return str.toString();
}
// endregion
}

View File

@ -1,774 +1,25 @@
package comp1110.ass2.gui;
import comp1110.ass2.*;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
import java.util.Objects;
// FIXME Task 14
// FIXME Task 15
public class Game extends Application {
// region Variables
private final Group root = new Group();
private static final int WINDOW_WIDTH = 1200;
private static final int WINDOW_HEIGHT = 700;
private final Group controls = new Group();
State currentGame;
String message;
Boolean messageError;
Coord selectedTile;
int AI;
Boolean darkMode = false;
// Store the selected map 0 = default, 1 = wheels, 2 = face, 3 = sides, 4 = space invaders
private int game_selected = 0;
Boolean game_over;
// endregion
// region Setup
/**
* This runs when the program is started. It should initialize the GUI and start the game.
*
* @param stage the primary stage for this application, onto which
* the application scene can be set.
* @throws Exception if there is an error
*/
@Override
public void start(Stage stage) throws Exception {
// Set some variables and create the scene
AI = 0;
selectedTile = new Coord(-1,-1);
message = "";
messageError = false;
Scene scene = new Scene(this.root, WINDOW_WIDTH, WINDOW_HEIGHT);
// Create the control section
root.getChildren().add(controls);
makeControls();
// Set some app properties
stage.setScene(scene);
stage.setTitle("Blue Lagoon");
stage.getIcons().add(new javafx.scene.image.Image(Objects.requireNonNull(
Game.class.getResourceAsStream("favicon.png"))));
stage.getIcons().add(new javafx.scene.image.Image(Game.class.getResourceAsStream("favicon.png")));
stage.setResizable(false);
stage.show();
// Create a new game
newGame(2);
scene.setFill(Color.valueOf("#38AEF2"));
}
/**
* Start a new game with the given number of players
* @param numPlayers the number of players
*/
private void newGame(int numPlayers) {
game_over = false;
// Get selected map
String DEFAULT_GAME = GameData.DEFAULT_GAME;
switch (game_selected) {
case 1 -> currentGame = new State(GameData.WHEELS_GAME);
case 2 -> currentGame = new State(GameData.FACE_GAME);
case 3 -> currentGame = new State(GameData.SIDES_GAME);
case 4 -> currentGame = new State(GameData.SPACE_INVADERS_GAME);
default -> currentGame = new State(DEFAULT_GAME);
}
// Add additional players as needed
switch (numPlayers) {
case 3 -> currentGame.addPlayer();
case 4 -> {
currentGame.addPlayer();
currentGame.addPlayer();
}
default -> {
}
}
if (AI >= numPlayers){
for (int i = 0; i < numPlayers; i++){
currentGame.getPlayer(i).setAI(true);
}
} else if (AI > 0) {
for (int i = 0; i < AI; i++){
currentGame.getPlayer(i+1).setAI(true);
}
}
// Distribute resources
currentGame.distributeResources();
// Send intro message
message = "Welcome to Blue Lagoon\nYou have started a new game for " + numPlayers + " players.";
switch (AI){
case 0 -> message += "\nAll players are human";
case 1 -> message += "\nThere is 1 AI";
default -> message += "\nThere are " + AI + " AIs";
}
message += """
To place a settler, left click on a tile
To place a village, right click on a tile""";
sendMessage(message);
// Refresh the GUI (render the game)
refresh();
// Play the game if all players are AI
if (AI >= numPlayers){
AIGame();
}
}
// endregion
// region Game Play
/**
* Do a move of the given type. Using the selected tile as the location
* @param type the type of move 0 = place settler, 1 = place village
*/
void doMove(int type){
// Make sure the game is not over and a tile is selected
if (game_over) return;
if (selectedTile.equals(new Coord(-1,-1))){
sendMessage("No tile selected");
refresh();
return;
}
// If the phase is not over, do the move
if (!currentGame.isPhaseOver()){
// Get the type of move
char typeC = 'S';
if (type == 1){
typeC = 'T';
if (currentGame.getCurrentPlayer().getVillages().length >= 5){
sendMessage("You have placed all your villages");
return;
}
} else if (currentGame.getCurrentPlayer().getSettlers().length >= (40-(currentGame.getNumPlayers()*5))){
sendMessage("You have placed all your settlers");
return;
}
// If the move is valid, do it
if (currentGame.isMoveValid(selectedTile,typeC)){
// Place the piece
currentGame.placePiece(selectedTile,typeC);
// If the move was a stone, send a message about it
Coord lastMove = selectedTile;
StringBuilder message = new StringBuilder();
if (currentGame.isStone(lastMove)){
for (Resource resource : currentGame.getResources()) {
if (resource.getCoord().equals(lastMove) ) {
message = new StringBuilder("Player " + currentGame.getCurrentPlayerID() + " picked up a " + resource.getTypeString().toLowerCase());
}
}
}
// Go to the next player and if it is an AI, do a move for it
currentGame.nextPlayer();
selectedTile = new Coord(-1,-1);
while (currentGame.getCurrentPlayer().isAI()) {
message.append("\n").append(doAIMove());
}
// Send the message to the user
sendMessage(message.toString());
}
else {
sendMessage("Invalid move",true);
}
}
if (currentGame.isPhaseOver()){
sendMessage("Starting next phase");
currentGame.scorePhase();
if (currentGame.getCurrentPhase() == 'E') {
currentGame.cleanBoard();
currentGame.distributeResources();
StringBuilder AI = new StringBuilder();
while (currentGame.getCurrentPlayer().isAI()) {
AI.append("\n").append(doAIMove());
}
sendMessage("Next phase!\n" + AI);
}
else {
sendMessage("Game over!",true);
game_over = true;
}
}
refresh();
}
/**
* Do an AI move for the current player
* @return the message to be displayed
*/
String doAIMove(){
if (game_over) return "GAME OVER";
String message = "";
if (!currentGame.isPhaseOver()){
Player player = currentGame.getCurrentPlayer();
if (player.doAIMove(currentGame)) {
if (currentGame.isPhaseOver()) {
message = "Starting next phase";
}
if (!player.getLastMove().equals(new Coord(-1, -1))) {
Coord lastMove = player.getLastMove();
if (currentGame.isStone(lastMove)) {
for (Resource resource : currentGame.getResources()) {
if (resource.getCoord().equals(lastMove)) {
message = "AI " + player.getPlayerID() + " picked up " + resource.getTypeString().toLowerCase();
}
}
} else {
message = "AI " + player.getPlayerID() + " placed at " + lastMove.toString();
}
}
} else {
message += "AI " + player.getPlayerID() + " passed";
currentGame.nextPlayer();
}
}
if (currentGame.isPhaseOver()){
currentGame.scorePhase();
if (currentGame.getCurrentPhase() == 'E') {
currentGame.cleanBoard();
currentGame.distributeResources();
currentGame.nextPhase();
StringBuilder AI = new StringBuilder("Next phase!\n");
while (currentGame.getCurrentPlayer().isAI()) {
AI.append("\n").append(doAIMove());
}
message = AI.toString();
}
else {
message = "Game over!";
game_over = true;
}
}
refresh();
return message;
}
/**
* Do a full AI game. This is good to visualize the AI
*/
void AIGame(){
while (!game_over){
if (!currentGame.getCurrentPlayer().doAIMove(currentGame)){
currentGame.nextPlayer();
}
if (currentGame.isPhaseOver()){
if (currentGame.getCurrentPhase() == 'E') {
currentGame.scorePhase();
currentGame.cleanBoard();
currentGame.distributeResources();
currentGame.nextPhase();
}
else {
game_over = true;
}
}
}
sendMessage("Game over!",true);
refresh();
}
// endregion
// region Display
/**
* Send a message to the user without error
* @param message the message to send
*/
private void sendMessage(String message){
sendMessage(message, false);
}
/**
* Send a message to the user.
* If the message is an error it will display as red
* @param message the message to send
* @param error if the message is an error
*/
private void sendMessage(String message, boolean error){
this.message = message;
messageError = error;
refresh();
}
/**
* When a tile is clicked, it will be selected
* @param coordString the coordinate of the tile
* @param button the button that was clicked
*/
private void tileClick(String coordString, MouseButton button){
int y = Integer.parseInt(coordString.split(",")[0]);
int x = Integer.parseInt(coordString.split(",")[1]);
selectedTile = new Coord(y,x);
if (button == MouseButton.PRIMARY) doMove(0);
else if (button == MouseButton.SECONDARY) doMove(1);
selectedTile = new Coord(-1,-1);
refresh();
}
/**
* Refresh the display
* It will clear the whole thing and then render it again
*/
private void refresh() {
if (darkMode){
// Make the background black of the scene
Scene scene = root.getScene();
scene.setFill(Color.BLACK);
} else {
Scene scene = root.getScene();
scene.setFill(Color.valueOf("#38AEF2"));
}
// When refreshing, it clears the whole thing and update it
root.getChildren().clear();
root.getChildren().add(controls);
// Add the message
Label messageLabel = new Label(message);
messageLabel.setLayoutX(35);
messageLabel.setLayoutY(250);
messageLabel.setFont(Font.font("Sans Serif",FontWeight.BOLD, 20));
if (messageError){
messageLabel.setTextFill(Color.RED);
}
else {
if (darkMode) messageLabel.setTextFill(Color.WHITE);
else messageLabel.setTextFill(Color.BLACK);
}
root.getChildren().add(messageLabel);
// Initialization of the grid
GridPane viewerGrid = new GridPane();
int boardHeight = 0;
int boardHeightPx = 0;
int tileSize = 0;
// Set up the board height value and the tile size
boardHeight = currentGame.getBoardHeight();
boardHeightPx = 650;
tileSize = boardHeightPx / boardHeight;
viewerGrid.setPrefWidth(boardHeightPx);
viewerGrid.setPrefHeight(boardHeightPx);
// Generating the water tiles ( the background water map )
for(int i = 0; i < boardHeight; i++){
for(int j = 0; j < boardHeight - (-1 * i % 2 + 1); j++){
addBoardTile(viewerGrid, boardHeightPx/boardHeight,
String.format("%s,%s", i, j), Color.valueOf("#387CFF"));
}
}
// Get current stage
int playerId = currentGame.getCurrentPlayerID();
// Getting the two mode of current state either Exploration
// or settler
char currentPhaseChar = currentGame.getCurrentPhase();
String currentPhase = switch (currentPhaseChar) {
case 'E' -> "Exploration";
case 'S' -> "Settlement";
default -> "";
};
// Making the Current State Statement text on the window
Text currentStateText = new Text();
currentStateText.setText("The current player to move is player " +
playerId + "\nCurrent Phase: " + currentPhase);
currentStateText.setFont(Font.font("Sans Serif", FontWeight.BOLD, 20));
currentStateText.setX((double) WINDOW_WIDTH / 2 + ((double) WINDOW_WIDTH /5) - 175);
currentStateText.setY(30);
currentStateText.setTextAlignment(TextAlignment.CENTER);
root.getChildren().add(currentStateText);
currentStateText.setFill(Color.GREEN);
// For each island render the island
for (Island island: currentGame.getIslands()){
for (Coord c: island.getCoords()){
addBoardTile(viewerGrid, tileSize, c.toString(), Color.valueOf("#64CA00"));
}
}
// Render stone circles
for (Coord stoneCircle: currentGame.getStones()){
addStoneTileToBoard(viewerGrid, tileSize, stoneCircle.toString(), Color.GRAY);
}
StringBuilder playerData = new StringBuilder("Scores:");
// For each player add their settlements and roads
for (int i = 0; i < currentGame.getNumPlayers(); i++){
Player currentPlayer = currentGame.getPlayer(i);
// Add the player's score to the playerData string
if (currentPlayer.isAI()) playerData.append("\nAI ").append(i).append(": ").append(currentPlayer.getScore());
else playerData.append("\nPlayer ").append(i).append(": ").append(currentPlayer.getScore());
// Settler tile generator
for (Coord c: currentPlayer.getSettlers()){
// Tile generator
addStoneTileToBoard(viewerGrid, tileSize, c.toString(), Color.PINK);
// Label generator
if (currentPlayer.isAI())
addLabelToTile(viewerGrid, tileSize, c.toString(), Color.GREEN, "AI "+i);
else
addLabelToTile(viewerGrid, tileSize, c.toString(), Color.BLACK, "P "+i);
}
// Village tile generator
for (Coord c: currentPlayer.getVillages()){
// Tile generator
addStoneTileToBoard(viewerGrid, tileSize, c.toString(), Color. LIGHTGOLDENRODYELLOW);
// Label generator
if (currentPlayer.isAI())
addLabelToTile(viewerGrid, tileSize, c.toString(), Color.BLACK, "AI "+i);
else
addLabelToTile(viewerGrid, tileSize, c.toString(), Color.BLACK, "P "+i);
}
}
// Adding the player Statement Text to the window
Text playerStateText = new Text();
playerStateText.setText(playerData.toString());
playerStateText.setFont(Font.font("Sans Serif", FontWeight.BOLD, 25));
playerStateText.setX(35);
playerStateText.setY(100);
if (darkMode) playerStateText.setFill(Color.WHITE);
else playerStateText.setFill(Color.BLACK);
root.getChildren().add(playerStateText);
// Add the grid to the root
viewerGrid.relocate(((double) WINDOW_WIDTH /2-viewerGrid.getPrefWidth()/2) + ((double) WINDOW_WIDTH /5),
((double) (WINDOW_HEIGHT + 100) /2-viewerGrid.getPrefHeight()/2));
root.getChildren().add(viewerGrid);
// Add selected tile
if (!selectedTile.equals(new Coord(-1,-1))){
addTileSelector(viewerGrid, tileSize, selectedTile.toString());
}
// Move buttons to front, so they are on top of the grid and can be clicked
controls.toFront();
}
/**
* Add a control panel to the window
* It will create the controls variable
*/
private void makeControls() {
Label newLabel = new Label("Start New Game:");
Button twoPlayer = new Button("2 Player");
Button threePlayer = new Button("3 Player");
Button fourPlayer = new Button("4 Player");
Label mapLabel = new Label("Select Map:");
Label aiLabel = new Label("How many AI players:");
Label stuckLabel = new Label("Stuck?");
Button stuckButton = new Button("Skip my turn");
// Button styling
twoPlayer.setStyle("-fx-padding: 3 10 10 10; -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0; -fx-background-radius: 8; -fx-background-color: linear-gradient(from 0% 93% to 0% 100%, #69CC00 0%, #83CA00 100%), #69CC00, #83CA00, radial-gradient(center 50% 50%, radius 100%, #83CA00, #A1DF00); -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 ); -fx-font-weight: bold; -fx-font-size: 1.0em;");
threePlayer.setStyle("-fx-padding: 3 10 10 10; -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0; -fx-background-radius: 8; -fx-background-color: linear-gradient(from 0% 93% to 0% 100%, #69CC00 0%, #83CA00 100%), #69CC00, #83CA00, radial-gradient(center 50% 50%, radius 100%, #83CA00, #A1DF00); -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 ); -fx-font-weight: bold; -fx-font-size: 1.0em;");
fourPlayer.setStyle("-fx-padding: 3 10 10 10; -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0; -fx-background-radius: 8; -fx-background-color: linear-gradient(from 0% 93% to 0% 100%, #69CC00 0%, #83CA00 100%), #69CC00, #83CA00, radial-gradient(center 50% 50%, radius 100%, #83CA00, #A1DF00); -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 ); -fx-font-weight: bold; -fx-font-size: 1.0em;");
stuckButton.setStyle("-fx-padding: 3 10 10 10; -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0; -fx-background-radius: 8; -fx-background-color: linear-gradient(from 0% 93% to 0% 100%, #a34313 0%, #903b12 100%), #9d4024, #d86e3a, radial-gradient(center 50% 50%, radius 100%, #d86e3a, #c54e2c); -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 ); -fx-font-weight: bold; -fx-font-size: 1.0em;");
CheckBox darkToggle = new CheckBox("Dark Mode");
darkToggle.setSelected(darkMode);
darkToggle.setOnAction(e -> {
darkMode = !darkMode;
makeControls();
refresh();
});
// Make everything white if dark mode is on
if (darkMode) {
newLabel.setTextFill(Color.WHITE);
mapLabel.setTextFill(Color.WHITE);
aiLabel.setTextFill(Color.WHITE);
stuckLabel.setTextFill(Color.WHITE);
stuckButton.setTextFill(Color.BLACK);
twoPlayer.setTextFill(Color.BLACK);
threePlayer.setTextFill(Color.BLACK);
fourPlayer.setTextFill(Color.BLACK);
darkToggle.setTextFill(Color.WHITE);
}
// Numeric select for AI
ComboBox aiSelector = new ComboBox();
aiSelector.getItems().add("0");
aiSelector.getItems().add("1");
aiSelector.getItems().add("2");
aiSelector.getItems().add("3");
aiSelector.getItems().add("4");
aiSelector.setValue("0");
// Store the selected map 0 = default, 1 = wheels, 2 = face, 3 = sides, 4 = space invaders
ComboBox mapSelector = new ComboBox();
mapSelector.getItems().add("Default");
mapSelector.getItems().add("Wheels");
mapSelector.getItems().add("Face");
mapSelector.getItems().add("Sides");
mapSelector.getItems().add("Space Invaders");
mapSelector.setPromptText("Default");
// Combobox styling
aiSelector.setStyle("-fx-padding: -1 5 5 5; -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0; -fx-background-radius: 8; -fx-background-color: linear-gradient(from 0% 93% to 0% 100%, #69CC00 0%, #83CA00 100%), #69CC00, #83CA00, radial-gradient(center 50% 50%, radius 100%, #83CA00, #A1DF00); -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 ); -fx-font-weight: bold; -fx-font-size: 1.0em;");
mapSelector.setStyle("-fx-padding: -1 5 5 5; -fx-background-insets: 0,0 0 5 0, 0 0 6 0, 0 0 7 0; -fx-background-radius: 8; -fx-background-color: linear-gradient(from 0% 93% to 0% 100%, #69CC00 0%, #83CA00 100%), #69CC00, #83CA00, radial-gradient(center 50% 50%, radius 100%, #83CA00, #A1DF00); -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.75) , 4,0,0,1 ); -fx-font-weight: bold; -fx-font-size: 1.0em;");
// Set the map when the map is selected
mapSelector.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
switch (mapSelector.getValue().toString()) {
case "Default" -> game_selected = 0;
case "Wheels" -> game_selected = 1;
case "Face" -> game_selected = 2;
case "Sides" -> game_selected = 3;
case "Space Invaders" -> game_selected = 4;
default -> game_selected = 0;
}
}
});
twoPlayer.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
AI = Integer.parseInt(aiSelector.getValue().toString());
newGame(2);
}
});
threePlayer.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
AI = Integer.parseInt(aiSelector.getValue().toString());
newGame(3);
}
});
fourPlayer.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
AI = Integer.parseInt(aiSelector.getValue().toString());
newGame(4);
}
});
stuckButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
currentGame.nextPlayer();
StringBuilder message = new StringBuilder("You skipped your turn");
while (currentGame.getCurrentPlayer().isAI() && !game_over) {
message.append("\n").append(doAIMove());
}
sendMessage(message.toString());
refresh();
}
});
HBox hb = new HBox();
hb.getChildren().addAll(mapLabel,mapSelector,aiLabel,aiSelector,newLabel, twoPlayer,threePlayer,fourPlayer,
stuckLabel,stuckButton,darkToggle);
hb.setSpacing(10);
hb.setLayoutX(50);
hb.setLayoutY(WINDOW_HEIGHT - 50);
controls.getChildren().clear();
controls.getChildren().add(hb);
}
/**
* Add a tile to the board
* @param board The board to add the tile to
* @param tileSize The size of the tile
* @param coordString The coordinates of the tile
* @param color The color of the tile
*/
private void addBoardTile(GridPane board, int tileSize, String coordString, Color color) {
// If the string empty, stop the function
if (coordString.equals("")) return;
String[] coords = coordString.split(",");
Hexagon hex = new Hexagon(tileSize, color);
// if the row is even, translate the tile to the right by tileSize/2
if (Integer.parseInt(coords[0]) % 2 == 0) hex.setTranslateX((double) tileSize /2);
// Translate the whole tile's Y axis downwards so they connect and there's no gap
hex.setTranslateY(Integer.parseInt(coords[0]) * -0.25 * tileSize);
board.add(hex, Integer.parseInt(coords[1]), Integer.parseInt(coords[0]));
// Add a mouse click event to the tile
hex.setOnMouseClicked(event -> {
tileClick(coordString,event.getButton());
});
}
/**
* Add a tile to the board
* @param board The board to add the tile to
* @param tileSize The size of the tile
* @param coordString The coordinates of the tile
* @param color The color of the tile
*/
private void addStoneTileToBoard(GridPane board, int tileSize, String coordString, Color color) {
int tileSize2 = tileSize;
tileSize2 -= 15;
// If the string empty, stop the function
if (coordString.equals("")) return;
String[] coords = coordString.split(",");
Hexagon hex = new Hexagon(tileSize2, color);
// if the row is even, translate the tile to the right by tileSize/2
if (Integer.parseInt(coords[0]) % 2 == 0) hex.setTranslateX((double) tileSize /2);
// Translate the whole tile's Y axis downwards so they connect and there's no gap
hex.setTranslateY(Integer.parseInt(coords[0]) * -0.25 * tileSize);
// Translate the tile so they look center
hex.setTranslateX(7 + hex.getTranslateX());
board.add(hex, Integer.parseInt(coords[1]), Integer.parseInt(coords[0]));
// Add a mouse click event to the tile
hex.setOnMouseClicked(event -> {
tileClick(coordString,event.getButton());
});
}
/**
* Add a label to the board
* @param board The board to add the label to
* @param tileSize The size of the tile
* @param coordString The coordinates of the tile to add the label to
* @param color The color of the tile
* @param labelName The name of the label
*/
private void addLabelToTile(GridPane board, int tileSize, String coordString, Color color, String labelName){
// If the string empty, stop the function
if (coordString.equals("")) return;
String[] coords = coordString.split(",");
Label newLabel = new Label(labelName);
newLabel.setTextFill(color);
newLabel.setFont(Font.font("Sans Serif", 12));
// Following the tile's pos format
if (Integer.parseInt(coords[0]) % 2 == 0) newLabel.setTranslateX((double) tileSize /2);
newLabel.setTranslateY(Integer.parseInt(coords[0]) * -0.25 * tileSize);
// Making the label center
newLabel.setTranslateX(18.5 + newLabel.getTranslateX());
board.add(newLabel, Integer.parseInt(coords[1]), Integer.parseInt(coords[0]));
// Add a mouse click event to the tile
newLabel.setOnMouseClicked(event -> {
tileClick(coordString,event.getButton());
});
}
/**
* Add a X to mark the tile as selected
* @param board The board to add the label to
* @param tileSize The size of the tile
* @param coordString The coordinates of the tile to add the label to
*/
private void addTileSelector(GridPane board, int tileSize, String coordString){
// If the string empty, stop the function
if (coordString.equals("")) return;
String[] coords = coordString.split(",");
Label newLabel = new Label("X");
int width = 0;
if (game_selected == 3){
// Increase the font
newLabel.setFont(Font.font("Sans Serif", 40));
width = 30;
} else if (game_selected == 4){
// Decrease the font
newLabel.setFont(Font.font("Sans Serif", 15));
width = 10;
} else {
newLabel.setFont(Font.font("Sans Serif", 25));
width = 15;
}
// Adjust the label's position
if (Integer.parseInt(coords[0]) % 2 == 0){
newLabel.setTranslateX((double) tileSize /2 + width);
} else
{
newLabel.setTranslateX(width);
}
newLabel.setTranslateY(Integer.parseInt(coords[0]) * -0.25 * tileSize);
// Set the color to red and add it to the board
newLabel.setTextFill(Color.RED);
board.add(newLabel, Integer.parseInt(coords[1]), Integer.parseInt(coords[0]));
// Add a mouse click event to the tile
newLabel.setOnMouseClicked(event -> {
tileClick(coordString,event.getButton());
});
}
/**
* A hexagon shape with a given side length and fill.
* Used to create the tiles on the board.
*/
static class Hexagon extends Polygon {
/**
* Create a hexagon with a given side length and fill.
* @param side double The length of a side of the hexagon.
* @param fill Paint The fill of the hexagon.
*/
public Hexagon(double side, Paint fill) {
super(
0.0, side / 2.0,
side / 2.0, side / 4.0,
side / 2.0, -side / 4.0,
0.0, -side / 2.0,
-side / 2.0, -side / 4.0,
-side / 2.0, side / 4.0
);
this.setFill(fill);
}
}
// endregion
}

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" packagePrefix="comp1110" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -30,7 +30,7 @@ public class ApplyMoveTest implements TestMapNamePlayerCount {
String result = BlueLagoon.applyMove(game.get(i-2), game.get(i-1));
List<String> errors = sc.compare(game.get(i), result);
if(errors.size() > 0){
Assertions.fail("\nError on input game: " + game.get(i-2) + "\nMove: " + game.get(i-1) + "\nexpected: " + game.get(i) + "\nactual: " + result + "\nerrors:\n" + String.join("\n", errors));
Assertions.fail("\n"+"expected: " + game.get(i) + "\nactual: " + result + "\nerrors:\n" + String.join("\n", errors));
}
}
}

View File

@ -63,6 +63,5 @@ public class CalculateTotalIslandsScoreTest implements TestMapNamePlayerCount {
for(int game = 0; game < games.size(); game++){
testGame(games.get(game), solutions.get(game));
}
test(new int[]{20, 20}, "a 13 2; c 1 E; i 6 0,0 0,2 1,1 1,2; i 6 0,4 0,6 1,5 1,6; i 6 0,8 0,10 1,9 1,10; i 6 1,12 2,11 3,12 4,11; i 6 3,0 3,2 4,0 4,1; i 6 3,4 3,6 4,4 4,5; i 6 3,8 3,10 4,8 4,9; i 6 8,0 8,1 9,0 9,2; i 6 8,4 8,5 9,4 9,6; i 6 8,8 8,9 9,8 9,10; i 6 8,11 9,12 10,11 11,12; i 6 11,0 11,2 12,0 12,1; i 6 11,4 11,6 12,4 12,5; i 6 11,8 11,10 12,8 12,9; i 10 6,0 6,1 6,2; i 10 6,4 6,5 6,6; i 10 6,8 6,9 6,10 6,11; s 0,0 0,2 0,4 0,6 0,8 0,10 1,12 3,0 3,4 3,10 4,1 4,5 4,8 4,11 6,1 6,5 6,8 6,11 8,1 8,5 8,8 8,11 9,0 9,4 9,10 11,0 11,2 11,4 11,6 11,8 11,10 11,12; r C 9,4 B 0,0 1,12 11,4 W 8,8 P 3,0 9,10 11,12 S 0,4 9,0 11,6 11,8; p 0 0 2 2 4 2 1 S 0,2 0,3 0,5 0,6 0,7 0,8 0,9 0,10 2,7 2,9 4,1 4,8 4,10 5,1 5,5 5,9 5,10 7,4 7,6 7,12 8,1 8,2 8,11 9,3 10,0 10,9 11,0 11,9 11,10 12,8 T 1,10 3,10 6,0 6,4 9,2; p 1 0 3 1 1 1 3 S 1,7 3,2 3,4 3,5 4,2 4,3 4,5 4,11 5,2 5,4 5,6 5,11 6,1 6,2 6,5 6,8 6,10 6,11 7,0 7,1 7,5 7,10 8,4 8,5 8,6 8,9 10,1 10,6 10,8 11,2 T 6,6 6,9 8,0 12,1;");
}
}

View File

@ -1,109 +0,0 @@
package comp1110.ass2;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.sql.SQLOutput;
import java.util.Arrays;
/**
* This class is used to test BlueLagoon methods/functions.
* This was completed for Task D2D.
*
*/
public class D2DTests {
/**
* This method is to show how to write a test.
* It is not a real test as it does not test anything.
*/
@Test
public void exampleTest() {
// Here are variables used in this example test.
// Change them to see how the test behaves.
boolean alwaysTrue = true;
boolean alwaysFalse = false;
int alwaysOne = 1;
int alwaysTwo = 2;
String alwaysHello = "Hello";
String alwaysWorld = "World";
int[] alwaysOneTwoThree = {1,2,3};
// To run a test to see if two values are equal, use the following:
Assertions.assertTrue(alwaysTrue,"The test failed because alwaysTrue was not true");
Assertions.assertFalse(alwaysFalse,"The test failed because alwaysFalse was not false");
Assertions.assertEquals(alwaysOne*2, alwaysTwo, "The test failed because alwaysOne*2 was not equal to alwaysTwo");
Assertions.assertEquals(alwaysHello + " " + alwaysWorld, "Hello World", "The test failed because alwaysHello + \" \" + alwaysWorld was not equal to \"Hello World\"");
Assertions.assertArrayEquals(new int[]{1,2,3}, alwaysOneTwoThree, "The test failed because new int[]{1,2,3} was not equal to alwaysOneTwoThree");
}
/**
* This method is to test the isStateStringWellFormed method.
*
*/
@Test
public void testIsStateStringWellFormed() {
String DEFAULT_GAME = "a 13 2; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
Assertions.assertTrue(BlueLagoon.isStateStringWellFormed(DEFAULT_GAME), "The test failed because DEFAULT_GAME was marked as an invalid state string");
System.out.println("Test 1 passed");
// Test adding multiple player with the same id (Caused Error 1)
String DEFAULT_WITH_ADDED = DEFAULT_GAME + " p 1 0 0 0 0 0 0 S T;";
Assertions.assertFalse(BlueLagoon.isStateStringWellFormed(DEFAULT_WITH_ADDED), "The test failed because DEFAULT with double Player 1 was marked as a valid state string");
System.out.println("Test 2 passed");
DEFAULT_WITH_ADDED = DEFAULT_GAME + " p 0 0 0 0 0 0 0 S T;";
Assertions.assertFalse(BlueLagoon.isStateStringWellFormed(DEFAULT_WITH_ADDED), "The test failed because DEFAULT with double Player 0 was marked as a valid state string");
System.out.println("Test 3 passed");
// Test adding `a 13 2; `
DEFAULT_WITH_ADDED = "a 13 2; "+ DEFAULT_GAME;
Assertions.assertFalse(BlueLagoon.isStateStringWellFormed(DEFAULT_WITH_ADDED), "The test failed because DEFAULT with double init was marked as a valid state string");
System.out.println("Test 4 passed");
/* This test found Errors as below
Errors found by this test are:
1. The method did not check if the player was included twice.
*/
}
@Test
public void testIsMoveStringWellFormed(){
String moveString = "S 10,11";
Assertions.assertTrue(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed because \"S 10,11\" is DEEMED an invalid move String even though it should be valid");
System.out.println("Test moveString is valid");
// updating the move string to a new one
moveString = "T 4,5";
Assertions.assertTrue(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed because \"T 4,5\" is DEEMED an invalid move String even though it should be valid");
System.out.println("Test 2 passed");
moveString = "A 1,2";
Assertions.assertFalse(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed \"A 1,2\" is DEEMED a valid move string even though it should be invalid because the first element is supposed to be only either `S` or `T`");
System.out.println("Test 3 passed");
moveString = "S 12";
Assertions.assertFalse(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed because \"S 12\" is DEEMED a valid move string even though it should be invalid because there should be a `,` between the numbers `1` and `2` to differentiate between rows and cols");
System.out.println("Test 4 passed");
moveString = "S 1, 2";
Assertions.assertFalse(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed because \"S 1, 2\" is DEEMED a valid move string even though it should be invalid because there should not be any whitespace after `,`");
System.out.println("Test 5 passed");
moveString = "T 1,2";
Assertions.assertFalse(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed because \"T 1,2\" is DEEMED a valid move string even though it should be invalid because there should not be 2 whitespaces after the first element (i.e. after `T`)");
System.out.println("Test 6 passed");
moveString = "S 3 ,4";
Assertions.assertFalse(BlueLagoon.isMoveStringWellFormed(moveString), "The test failed because \"S 3,4\" is DEEMED a valid move string even though it should be invalid because there should not be a whitespace after the first number");
System.out.println("Test 7 passed");
System.out.println("All Tests passed");
}
}

View File

@ -28,7 +28,7 @@ public class EndPhaseTest implements TestMapNamePlayerCount {
String result = BlueLagoon.endPhase(pre.get(i));
List<String> errors = sc.compare(post.get(i), result);
if(errors.size() > 0){
Assertions.fail("\nError ending phase on input: " + pre.get(i) + "\nexpected: " + post.get(i) + "\nactual: " + result + "\nerrors:\n" + String.join("\n", errors));
Assertions.fail("\n"+"expected: " + post.get(i) + "\nactual: " + result + "\nerrors:\n" + String.join("\n", errors));
}
}
}

View File

@ -77,6 +77,5 @@ public class IsPhaseOverTest implements TestMapNamePlayerCount {
for(int game = 0; game < games.size(); game++){
testGame(games.get(game), preEndPhase.get(game), solutions.get(game));
}
testFalse("a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,5 1,12 10,6 B 0,0 1,4 2,1 6,6 11,5 W 3,7 3,10 4,2 7,12 8,5 P 1,8 3,12 5,9 7,8 9,9 10,10 S 0,9 3,5 4,0 5,11 6,3 7,0 12,8 12,11; p 0 38 2 0 1 0 0 S 7,3 7,4 8,2 8,4 9,0 9,3 9,4 9,5 10,3 T 9,1 9,2 11,4 12,4; p 1 79 1 1 0 0 0 S 10,0 10,1 10,2 11,0 11,1 11,2 11,3 12,2 12,3 T 12,0 12,1;");
}
}

View File

@ -29,7 +29,7 @@ public class PlacePieceTest implements TestMapNamePlayerCount {
String result = BlueLagoon.placePiece(game.get(i-2), game.get(i-1));
List<String> errors = sc.compare(solutions.get(i / 2 - 1), result);
if(errors.size() > 0){
Assertions.fail("\nError on input game: " + game.get(i-2) + "\nMove: " + game.get(i-1) + "\nexpected: " + solutions.get(i / 2 - 1) + "\nactual: " + result + "\nerrors:\n" + String.join("\n", errors));
Assertions.fail("\n"+"expected: " + solutions.get(i / 2 - 1) + "\nactual: " + result + "\nerrors:\n" + String.join("\n", errors));
}
}
}

View File

@ -1,128 +0,0 @@
package comp1110.ass2;
import comp1110.ass2.testdata.GameDataLoader;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
/**
* This class is used to test the state Class.
*
*/
public class StateTest {
@Test
public void testStateDEFAULTGAME() {
State state = new State(GameDataLoader.DEFAULT_GAME);
Assertions.assertEquals(13, state.getBoardHeight(), "The test failed because the board length is not 13");
Assertions.assertEquals(2, state.getNumPlayers(), "The test failed because the number of players is not 2");
Assertions.assertEquals(0, state.getCurrentPlayerID(), "The test failed because the current player is not 0");
Assertions.assertEquals('E', state.getCurrentPhase(), "The test failed because the current phase is not E");
Assertions.assertEquals(GameDataLoader.DEFAULT_GAME, state.toString(), "The test failed because the state created from the string is not the same as the state created from the string");
// Creating test island for the string
// i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1;
Island island = new Island(6);
island.addCoord(new Coord(0, 0));
island.addCoord(new Coord(0, 1));
island.addCoord(new Coord(0, 2));
island.addCoord(new Coord(0, 3));
island.addCoord(new Coord(1, 0));
island.addCoord(new Coord(1, 1));
island.addCoord(new Coord(1, 2));
island.addCoord(new Coord(1, 3));
island.addCoord(new Coord(1, 4));
island.addCoord(new Coord(2, 0));
island.addCoord(new Coord(2, 1));
Assertions.assertTrue(island.equals(state.getIsland(0)), "The test failed because the island at index 0 is not the same as the island created above");
island.addCoord(new Coord(2, 2));
Assertions.assertFalse(island.equals(state.getIsland(0)), "The test failed because the island at index 0 is the same as the island created above even though it should not be because the island created above has 11 coords while the island at index 0 has 12 coords");
Assertions.assertTrue(state.isStone(new Coord(0, 0)), "The test failed because the stone at (0,0) is not a stone");
Assertions.assertFalse(state.isStone(new Coord(0, 1)), "The test failed because the stone at (0,5) is a stone even though it should not be because there is no stone at that location");
// Creating a test player for the string
// p 0 0 0 0 0 0 0 S T;
Player player = new Player(0);
Assertions.assertTrue(player.equals(state.getPlayer(0)), "The test failed because the player at index 0 is not the same as the player created above");
player.addScore(1);
Assertions.assertFalse(player.equals(state.getPlayer(0)), "The test failed because the player at index 0 is the same as the player created above even though it should not be because the player created above has a score of 1 while the player at index 0 has a score of 0");
player = new Player(0);
player.addVillage(new Coord(0, 0));
Assertions.assertFalse(player.equals(state.getPlayer(0)), "The test failed because the player at index 0 is the same as the player created above even though it should not be because the player created above has a village at (0,0) while the player at index 0 has no villages");
player = new Player(0);
player.addResource(1, 'C');
Assertions.assertFalse(player.equals(state.getPlayer(0)), "The test failed because the player at index 0 is the same as the player created above even though it should not be because the player created above has a resource of 1 for C while the player at index 0 has a resource of 0 for C");
// Distribute resources
state.distributeResources();
Resource toClaim = state.getUnclaimedResource(new Coord(0, 0));
// Place a settler at (0,0)
state.placePiece(new Coord(0, 0), 'S');
// Get the island score
Assertions.assertEquals(6, state.scoreMajorities(0), "The test failed because the score of the islands for player 0 is not 34");
Assertions.assertEquals(0, state.scoreMajorities(1), "The test failed because the score of the islands for player 1 is not 28");
Assertions.assertEquals(0, state.scoreTotalIslands(0), "The test failed because the score of the islands for player 0 is not 0");
Assertions.assertEquals(1, state.getPlayer(0).getNumResource(toClaim.getType()), "The test failed because the number of resources for player 0 is not 1");
}
/**
* Run Sim on AI vs Random
*
* @return true if AI wins, false if Random wins
*/
public boolean simulateGame(State state) {
while (!state.isPhaseOver()) {
if (!state.getCurrentPlayer().canPlay(state)) {
System.out.println("Player " + state.getCurrentPlayerID() + " can't play");
state.nextPlayer();
}
if (state.getCurrentPlayerID() == 0) {
state.getCurrentPlayer().doAIMove(state);
} else {
state.getCurrentPlayer().doRandomMove(state);
}
}
state.scorePhase();
int P0 = state.getPlayer(0).getScore();
int P1 = state.getPlayer(1).getScore();
if (P0 > P1) {
return true;
} else {
return false;
}
}
@Test
public void testAIDominance() {
State Startstate;
for (String map : GameDataLoader.MAP_NAMES) {
Startstate = new State(GameDataLoader.readMap(map));
Startstate.distributeResources();
int numGames = 5;
int numWins = 0;
for (int i = 0; i < numGames; i++) {
State state = new State(Startstate.toString());
if (simulateGame(state)) {
numWins++;
}
}
System.out.println("AI won " + numWins + " out of " + numGames + " games on the " + map + " map");
}
}
@Test
public void testMorePlayers() {
State state = new State(GameDataLoader.DEFAULT_GAME);
state.addPlayer();
Assertions.assertEquals("a 13 3; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T; p 2 0 0 0 0 0 0 S T;", state.toString(), "The test failed because the state is not the same as the state created above");
state.addPlayer();
Assertions.assertEquals("a 13 4; c 0 E; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T; p 2 0 0 0 0 0 0 S T; p 3 0 0 0 0 0 0 S T;", state.toString(), "The test failed because the state is not the same as the state created above");
}
}

View File

@ -133,14 +133,14 @@ public class StringComparator {
private void checkGeneralString(List<String> statementsA, List<String> statementsB, List<String> errors) {
// Check for the number of statements
if (checks.get(ResultType.General).contains("numStatements") &&
if (checks.get(ResultType.General).contains("num_statements") &&
statementsA.size() != statementsB.size())
{
errors.add("Strings contain different numbers of statements");
}
// Check if there are any unrecognised statement IDs
if (checks.get(ResultType.General).contains("unrecognisedStatements"))
if (checks.get(ResultType.General).contains("unrecognised_statements"))
{
List<String> unrecognised = statementsB
.stream()

View File

@ -7,21 +7,6 @@ public class GameDataLoader extends DataLoader<String>{
public static final String SIDES_GAME = "a 7 2; c 0 E; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static final String SPACE_INVADERS_GAME = "a 23 2; c 0 E; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C B W P S; p 0 0 0 0 0 0 0 S T; p 1 0 0 0 0 0 0 S T;";
public static String readMap(String mapName){
switch (mapName){
case "WHEELS_GAME":
return WHEELS_GAME;
case "FACE_GAME":
return FACE_GAME;
case "SIDES_GAME":
return SIDES_GAME;
case "SPACE_INVADERS_GAME":
return SPACE_INVADERS_GAME;
default:
return DEFAULT_GAME;
}
}
public GameDataLoader(){
super();
}

View File

@ -1,2 +1,2 @@
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 2,1 3,10 5,9 7,8 10,3 10,10 B 1,4 5,11 7,12 8,5 12,2 12,11 W 0,9 3,7 4,2 6,6 9,0 11,5 P 1,8 1,12 3,5 4,0 8,2 9,9 S 0,0 0,5 3,12 6,3 7,0 10,6 11,0 12,8; p 0 100 0 0 0 0 0 S T 7,6 8,4 9,2 10,4 12,5; p 1 133 0 0 0 0 0 S T 11,1 11,2 12,0 12,1;
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,0 3,10 10,6 10,10 11,0 12,2 B 2,1 3,5 7,12 8,5 9,0 12,8 W 1,4 1,8 1,12 5,9 6,6 10,3 P 3,7 3,12 4,0 4,2 5,11 6,3 S 0,5 0,9 7,0 7,8 8,2 9,9 11,5 12,11; p 0 100 0 0 0 0 0 S T 7,6 8,4 9,2 10,4 12,5; p 1 133 0 0 0 0 0 S T 11,1 11,2 12,0 12,1;
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 12,8 B 1,8 5,9 W 0,0 0,5 3,12 P 2,1 5,11 6,3 12,11 S 0,9 1,12 3,10 4,0 4,2 7,12; p 0 259 4 4 3 1 2 S 1,4 2,4 3,5 3,6 3,7 4,4 4,6 5,7 6,5 6,6 7,0 7,7 7,8 7,9 8,0 8,2 8,5 8,9 9,0 9,1 9,3 9,5 9,9 9,10 10,3 10,5 10,6 10,10 11,3 11,5 T 7,6 8,4 9,2 10,4 12,5; p 1 146 1 0 0 1 0 S 10,0 10,1 10,2 11,0 11,4 12,2 12,3 12,4 T 11,1 11,2 12,0 12,1;

View File

@ -1,2 +1,2 @@
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,0 0,9 1,12 3,5 3,10 3,12 B 0,5 1,8 7,12 8,5 10,10 12,2 W 4,0 7,8 8,2 9,0 10,6 12,11 P 4,2 6,6 7,0 10,3 11,0 12,8 S 1,4 2,1 3,7 5,9 5,11 6,3 9,9 11,5; p 0 119 0 0 0 0 0 S T 5,3 8,8; p 1 86 0 0 0 0 0 S T 11,4;
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,4 3,5 3,10 7,12 10,6 12,2 B 0,9 1,8 3,7 4,0 9,9 10,3 W 0,5 6,6 7,0 8,5 11,5 12,11 P 1,12 2,1 6,3 7,8 10,10 11,0 S 0,0 3,12 4,2 5,9 5,11 8,2 9,0 12,8; p 0 119 0 0 0 0 0 S T 5,3 8,8; p 1 86 0 0 0 0 0 S T 11,4;
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 3,5 3,10 5,11 7,12 B 0,0 1,4 1,12 8,5 W 0,9 P 0,5 3,12 5,9 11,0 S 1,8 3,7; p 0 212 2 2 1 1 3 S 2,1 3,1 4,0 4,2 5,0 5,1 5,2 5,4 5,5 5,6 6,0 6,1 6,2 6,3 6,6 6,8 7,0 7,1 7,7 7,8 7,9 8,7 9,9 9,11 9,12 10,7 10,8 10,9 10,10 11,10 T 5,3 8,8; p 1 155 0 0 4 1 3 S 7,2 8,0 8,1 8,2 8,3 8,4 9,0 9,1 9,2 9,7 9,8 10,2 10,3 10,4 10,5 10,6 11,3 11,5 11,7 11,8 11,11 12,1 12,2 12,4 12,5 12,7 12,8 12,9 12,10 12,11 T 11,4;

View File

@ -1,2 +1,2 @@
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,3 4,5 5,0 10,6 11,0 11,12 B 0,8 1,0 4,6 6,2 6,6 9,10 W 1,12 2,2 8,5 10,5 10,8 12,7 P 2,7 5,12 6,5 8,6 9,2 10,3 S 2,4 2,9 4,2 4,9 6,9 8,0 8,11 12,4; p 0 120 0 0 0 0 0 S T 3,9 4,7 7,10; p 1 117 0 0 0 0 0 S T;
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 2,9 4,6 6,9 8,6 10,6 12,7 B 0,8 2,2 4,2 4,9 6,5 8,0 W 1,12 6,2 6,6 8,5 10,3 11,0 P 0,3 2,7 4,5 10,5 10,8 12,4 S 1,0 2,4 5,0 5,12 8,11 9,2 9,10 11,12; p 0 120 0 0 0 0 0 S T 3,9 4,7 7,10; p 1 117 0 0 0 0 0 S T;
a 13 2; c 0 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,8 10,5 11,12 B 8,0 9,2 W 0,3 1,12 12,4 P 1,0 2,2 10,6 12,7 S 5,0 10,3 11,0; p 0 306 3 4 3 2 5 S 2,4 2,7 2,9 3,5 3,7 4,2 4,5 4,6 4,8 4,9 5,3 5,4 5,5 5,7 5,9 5,12 6,2 6,5 6,6 6,9 6,11 7,6 7,11 8,5 8,6 8,9 8,11 9,9 9,10 10,8 T 3,9 4,7 7,10; p 1 117 0 0 0 0 0 S T;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 6,2 6,5 10,3 11,0 12,4 12,7 B 1,12 2,2 2,9 4,6 4,9 6,9 W 0,3 2,4 8,5 8,11 9,2 11,12 P 0,8 1,0 5,0 8,0 8,6 10,5 S 2,7 4,2 4,5 5,12 6,6 9,10 10,6 10,8; p 0 108 0 0 0 0 0 S T 5,9 6,0 7,7; p 1 143 0 0 0 0 0 S T 3,2 3,10 7,5 10,2 10,9;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,8 2,4 4,9 6,2 8,11 10,8 B 0,3 2,7 5,0 6,9 10,6 12,7 W 1,12 2,2 5,12 6,6 9,2 11,0 P 1,0 4,5 8,0 8,5 8,6 12,4 S 2,9 4,2 4,6 6,5 9,10 10,3 10,5 11,12; p 0 108 0 0 0 0 0 S T 5,9 6,0 7,7; p 1 143 0 0 0 0 0 S T 3,2 3,10 7,5 10,2 10,9;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C B W P 0,8 1,0 2,4 5,12 11,0 S; p 0 229 1 4 3 0 5 S 2,0 2,7 3,0 3,7 4,0 4,5 4,6 4,9 5,0 5,7 5,8 5,10 6,6 6,9 7,1 7,2 7,9 8,0 8,6 9,0 9,6 10,5 10,6 11,5 11,7 12,3 12,4 12,7 12,8 12,9 T 5,9 6,0 7,7; p 1 249 5 2 3 1 3 S 0,1 0,2 0,3 0,4 1,3 1,12 2,2 2,9 2,10 2,11 3,9 3,12 4,2 5,2 6,2 6,5 7,10 7,12 8,5 8,9 8,11 9,2 9,10 9,11 10,3 10,8 10,11 11,12 12,10 12,11 T 3,2 3,10 7,5 10,2 10,9;

View File

@ -1 +1 @@
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 2,11 3,0 3,6 4,3 6,4 10,0 B 3,2 3,4 6,11 8,5 10,5 12,10 W 0,4 2,2 2,3 4,2 8,0 10,7 P 0,1 2,9 6,1 8,8 8,10 12,4 S 0,10 4,10 6,6 10,9 10,11 11,3 12,1 12,8; p 0 137 0 0 0 0 0 S T; p 1 81 0 0 0 0 0 S T;
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,1 2,2 4,3 4,10 8,8 12,10 B 2,3 3,4 6,11 8,10 10,9 12,4 W 0,4 0,10 3,2 8,5 10,0 10,7 P 3,0 6,4 6,6 11,3 12,1 12,8 S 2,9 2,11 3,6 4,2 6,1 8,0 10,5 10,11; p 0 137 0 0 0 0 0 S T; p 1 81 0 0 0 0 0 S T;

View File

@ -1,2 +1,2 @@
a 13 2; c 0 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,4 2,9 8,0 8,8 10,9 10,11 B 0,10 2,11 6,6 12,1 12,4 12,8 W 2,3 3,6 4,10 6,1 6,11 10,5 P 2,2 3,0 3,2 3,4 8,10 11,3 S 0,1 4,2 4,3 6,4 8,5 10,0 10,7 12,10; p 0 108 0 0 0 0 0 S T 10,1 11,0 11,2 11,4 12,0; p 1 116 0 0 0 0 0 S T 8,1 8,2 8,4 8,9 11,6;
a 13 2; c 0 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,4 6,1 6,6 10,5 10,7 10,11 B 2,2 2,3 3,0 4,10 6,4 11,3 W 2,9 2,11 3,6 8,8 10,9 12,1 P 3,2 3,4 6,11 8,0 8,5 8,10 S 0,1 0,10 4,2 4,3 10,0 12,4 12,8 12,10; p 0 108 0 0 0 0 0 S T 10,1 11,0 11,2 11,4 12,0; p 1 116 0 0 0 0 0 S T 8,1 8,2 8,4 8,9 11,6;
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 2,11 B 4,10 12,10 W 2,9 6,11 P 0,10 3,6 6,1 10,11 S 0,4; p 0 134 1 2 0 1 1 S 8,5 9,0 9,1 9,2 9,3 9,4 9,5 9,6 10,0 10,2 10,3 10,4 10,6 11,1 11,3 11,5 12,1 12,2 12,3 12,4 12,5 12,6 T 10,1 11,0 11,2 11,4 12,0; p 1 264 4 2 4 1 6 S 0,1 1,2 2,2 2,3 3,0 3,1 3,2 3,4 4,2 4,3 5,4 6,4 6,6 7,5 7,6 8,0 8,3 8,6 8,8 8,10 9,7 9,8 9,9 10,5 10,7 10,9 10,10 11,7 12,7 12,8 T 8,1 8,2 8,4 8,9 11,6;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,9 1,12 3,5 6,6 8,2 8,5 B 3,7 4,2 7,0 9,0 10,10 12,11 W 0,5 1,4 2,1 5,9 6,3 11,5 P 1,8 3,12 4,0 5,11 7,12 12,8 S 0,0 3,10 7,8 9,9 10,3 10,6 11,0 12,2; p 0 74 0 0 0 0 0 S T 0,6 0,7 1,6 4,5 8,1; p 1 66 0 0 0 0 0 S T 5,6 6,1 11,1 12,5;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,8 1,12 2,1 9,0 10,6 12,11 B 0,0 3,7 7,8 8,5 11,0 12,8 W 1,4 3,12 5,11 7,0 8,2 9,9 P 0,5 0,9 3,10 4,2 6,6 10,10 S 3,5 4,0 5,9 6,3 7,12 10,3 11,5 12,2; p 0 74 0 0 0 0 0 S T 0,6 0,7 1,6 4,5 8,1; p 1 66 0 0 0 0 0 S T 5,6 6,1 11,1 12,5;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,4 3,10 5,9 9,9 B 0,0 2,1 7,12 W 1,12 3,12 7,8 9,0 P 0,9 6,3 7,0 10,10 12,2 S 0,5 4,0 5,11 8,5 10,3; p 0 121 0 1 1 0 2 S 1,7 1,8 2,4 2,5 2,6 2,7 3,3 3,4 3,5 3,6 3,7 4,4 4,6 4,7 5,5 5,7 5,8 6,5 7,1 7,2 7,3 7,5 7,6 8,0 8,2 8,6 9,1 9,2 10,0 10,1 T 0,6 0,7 1,6 4,5 8,1; p 1 134 2 2 1 1 1 S 4,1 4,2 5,0 5,1 5,2 6,2 6,6 7,7 8,7 8,8 9,7 10,2 10,6 10,7 10,11 11,0 11,2 11,4 11,5 11,6 11,7 11,8 11,12 12,0 12,3 12,4 12,8 12,9 12,10 12,11 T 5,6 6,1 11,1 12,5;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,9 2,1 4,2 6,6 7,0 8,5 B 3,10 5,11 8,2 10,6 10,10 12,8 W 1,4 1,8 3,5 3,7 3,12 10,3 P 0,5 4,0 6,3 7,12 9,9 11,5 S 0,0 1,12 5,9 7,8 9,0 11,0 12,2 12,11; p 0 105 0 0 0 0 0 S T 2,11 3,11; p 1 84 0 0 0 0 0 S T 2,7 7,2 11,7;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,4 4,2 10,6 10,10 11,0 11,5 B 3,5 3,10 7,12 8,5 9,9 10,3 W 1,8 5,9 7,8 9,0 12,2 12,8 P 0,0 0,5 1,12 3,12 5,11 12,11 S 0,9 2,1 3,7 4,0 6,3 6,6 7,0 8,2; p 0 105 0 0 0 0 0 S T 2,11 3,11; p 1 84 0 0 0 0 0 S T 2,7 7,2 11,7;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,0 10,3 12,2 B 4,0 W 2,1 9,0 11,0 P 4,2 12,11 S 7,0 8,5; p 0 162 1 2 1 1 2 S 0,10 1,10 1,11 1,12 2,8 2,9 2,10 3,10 3,12 4,8 4,10 4,11 5,8 5,9 5,10 5,11 5,12 6,9 6,10 6,11 7,9 7,10 7,11 7,12 8,8 8,10 8,11 9,11 9,12 10,10 T 2,11 3,11; p 1 218 2 3 2 3 4 S 0,5 0,6 0,8 0,9 1,4 1,5 1,7 1,8 2,4 2,6 3,5 3,6 3,7 4,4 6,3 6,6 7,3 7,7 7,8 8,2 8,7 9,8 9,9 10,6 10,7 10,8 11,5 11,6 12,7 12,8 T 2,7 7,2 11,7;

View File

@ -1,2 +1,2 @@
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,4 3,10 3,12 5,9 7,0 12,2 B 4,2 5,11 7,8 10,3 10,10 11,0 W 0,5 0,9 1,8 6,6 7,12 8,5 P 0,0 1,12 3,5 3,7 4,0 9,9 S 2,1 6,3 8,2 9,0 10,6 11,5 12,8 12,11; p 0 62 0 0 0 0 0 S T 7,1 7,2 9,1; p 1 30 0 0 0 0 0 S T 1,0 3,8 9,7; p 2 58 0 0 0 0 0 S T 4,5 7,6 10,4 11,4;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,8 3,10 5,11 10,6 11,0 11,5 B 0,5 2,1 3,5 6,3 7,12 12,2 W 3,7 4,0 9,0 10,10 12,8 12,11 P 0,0 3,12 5,9 8,2 8,5 9,9 S 0,9 1,4 1,12 4,2 6,6 7,0 7,8 10,3; p 0 62 0 0 0 0 0 S T 7,1 7,2 9,1; p 1 30 0 0 0 0 0 S T 1,0 3,8 9,7; p 2 58 0 0 0 0 0 S T 4,5 7,6 10,4 11,4;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,9 B 0,5 W 3,7 7,8 7,12 9,9 10,10 P 5,11 9,0 11,5 12,8 S 1,12 3,12 5,9 12,2 12,11; p 0 100 1 3 0 1 0 S 1,2 1,3 2,2 3,2 3,3 4,1 4,2 4,3 5,0 5,1 5,2 5,3 5,4 6,0 6,1 6,2 6,3 7,0 7,3 8,0 8,1 8,2 9,2 10,0 11,0 T 7,1 7,2 9,1; p 1 88 3 0 0 1 2 S 0,0 0,7 0,8 1,1 1,8 2,0 2,1 2,8 2,9 3,0 3,1 3,9 3,10 4,0 4,7 4,9 4,10 5,10 7,9 8,8 9,6 9,8 10,5 10,6 11,7 T 1,0 3,8 9,7; p 2 100 1 2 1 0 1 S 1,4 1,5 2,3 2,4 2,5 3,4 3,5 3,6 4,4 4,6 5,5 5,6 6,4 6,5 6,6 7,4 8,3 8,5 9,3 9,4 9,5 10,2 10,3 11,3 12,4 T 4,5 7,6 10,4 11,4;

View File

@ -1,2 +1,2 @@
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 3,5 3,10 6,6 8,5 9,0 12,2 B 0,0 4,2 7,0 7,8 7,12 10,6 W 0,9 1,8 2,1 4,0 12,8 12,11 P 1,12 3,7 3,12 8,2 10,10 11,5 S 0,5 1,4 5,9 5,11 6,3 9,9 10,3 11,0; p 0 80 0 0 0 0 0 S T 3,8 3,11 9,2; p 1 70 0 0 0 0 0 S T 2,10 5,3 11,7 12,5; p 2 72 0 0 0 0 0 S T 5,0 7,10 8,11;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,0 2,1 3,7 4,0 10,6 12,2 B 3,12 4,2 5,9 7,0 9,9 11,0 W 3,5 5,11 7,8 7,12 10,3 12,8 P 0,9 1,8 1,12 3,10 6,3 10,10 S 0,5 1,4 6,6 8,2 8,5 9,0 11,5 12,11; p 0 80 0 0 0 0 0 S T 3,8 3,11 9,2; p 1 70 0 0 0 0 0 S T 2,10 5,3 11,7 12,5; p 2 72 0 0 0 0 0 S T 5,0 7,10 8,11;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C B W 1,4 10,3 11,0 P 0,5 S 1,8 12,2 12,11; p 0 170 4 4 1 2 0 S 2,11 3,5 3,7 3,10 3,12 4,4 4,5 4,6 4,7 4,10 5,8 5,9 5,11 6,3 6,4 6,5 6,6 6,7 7,3 7,4 7,5 7,8 8,2 9,0 9,1 T 3,8 3,11 9,2; p 1 134 1 0 0 3 3 S 0,9 0,11 1,10 1,11 1,12 2,9 3,4 4,2 4,3 5,4 5,5 5,6 8,4 8,5 9,6 9,7 9,8 10,6 10,7 10,8 11,5 11,8 12,6 12,7 12,8 T 2,10 5,3 11,7 12,5; p 2 125 1 2 2 0 2 S 0,0 1,1 2,0 2,1 3,1 4,0 4,9 5,10 5,12 6,0 6,1 6,8 6,9 6,11 7,0 7,9 7,11 7,12 8,7 8,8 8,9 9,9 9,11 9,12 10,10 T 5,0 7,10 8,11;

View File

@ -1,2 +1,2 @@
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 1,4 3,12 5,9 8,2 8,5 11,0 B 0,5 3,5 3,7 7,8 7,12 11,5 W 4,0 4,2 6,6 9,9 10,6 10,10 P 1,12 2,1 3,10 6,3 10,3 12,2 S 0,0 0,9 1,8 5,11 7,0 9,0 12,8 12,11; p 0 45 0 0 0 0 0 S T 6,8 7,10 8,11; p 1 31 0 0 0 0 0 S T 2,6 5,5 9,8 12,7; p 2 28 0 0 0 0 0 S T 0,7 8,4; p 3 38 0 0 0 0 0 S T 10,4 11,1 12,1;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,0 1,8 3,7 4,0 5,9 11,5 B 0,5 6,3 7,0 8,5 10,3 10,10 W 0,9 3,12 9,9 10,6 11,0 12,11 P 2,1 3,10 6,6 7,12 8,2 12,8 S 1,4 1,12 3,5 4,2 5,11 7,8 9,0 12,2; p 0 45 0 0 0 0 0 S T 6,8 7,10 8,11; p 1 31 0 0 0 0 0 S T 2,6 5,5 9,8 12,7; p 2 28 0 0 0 0 0 S T 0,7 8,4; p 3 38 0 0 0 0 0 S T 10,4 11,1 12,1;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 7,0 12,2 B 1,4 2,1 3,5 5,9 12,8 W 4,2 P 3,7 3,12 10,6 12,11 S 0,0 1,12 4,0 11,0; p 0 87 1 0 1 1 2 S 3,8 3,9 3,10 3,11 4,9 4,10 5,11 5,12 6,7 6,10 6,11 7,8 7,9 7,11 7,12 8,10 9,11 10,10 11,11 11,12 T 6,8 7,10 8,11; p 1 70 1 0 1 0 1 S 2,5 3,4 4,4 4,6 5,3 5,4 5,6 6,4 6,6 8,7 9,9 10,8 10,9 11,5 11,6 11,7 11,8 11,10 12,5 12,6 T 2,6 5,5 9,8 12,7; p 2 49 0 1 2 1 0 S 0,4 0,5 0,8 0,9 0,10 1,6 1,7 1,8 1,9 1,10 2,7 2,8 2,9 2,10 6,5 7,5 7,6 7,7 8,5 8,6 T 0,7 8,4; p 3 78 2 0 1 0 1 S 6,2 6,3 7,2 7,4 8,0 8,2 8,3 9,0 9,2 9,4 9,5 10,0 10,1 10,2 10,3 11,2 11,3 11,4 12,3 12,4 T 10,4 11,1 12,1;

View File

@ -1,2 +1,2 @@
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 2,1 5,9 7,0 7,12 12,8 12,11 B 0,5 0,9 3,10 4,2 7,8 11,5 W 0,0 3,7 4,0 5,11 6,6 10,3 P 3,5 3,12 6,3 8,2 8,5 12,2 S 1,4 1,8 1,12 9,0 9,9 10,6 10,10 11,0; p 0 63 0 0 0 0 0 S T 2,0 2,8 8,0 8,1; p 1 42 0 0 0 0 0 S T 3,8 5,8 9,2 11,3; p 2 67 0 0 0 0 0 S T 10,4 10,8 11,7 12,5; p 3 48 0 0 0 0 0 S T 1,7 1,10 3,4 4,3;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 0,0 0,5 3,12 4,0 6,3 8,5 B 0,9 1,12 2,1 3,10 7,0 9,0 W 3,5 5,9 7,8 10,6 11,5 12,11 P 3,7 4,2 7,12 9,9 10,3 11,0 S 1,4 1,8 5,11 6,6 8,2 10,10 12,2 12,8; p 0 63 0 0 0 0 0 S T 2,0 2,8 8,0 8,1; p 1 42 0 0 0 0 0 S T 3,8 5,8 9,2 11,3; p 2 67 0 0 0 0 0 S T 10,4 10,8 11,7 12,5; p 3 48 0 0 0 0 0 S T 1,7 1,10 3,4 4,3;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 1,4 2,0 2,1; i 6 0,5 0,6 0,7 1,6 1,7 1,8 2,6 2,7 2,8 3,7 3,8; i 6 7,12 8,11 9,11 9,12 10,10 10,11 11,10 11,11 11,12 12,10 12,11; i 8 0,9 0,10 0,11 1,10 1,11 1,12 2,10 2,11 3,10 3,11 3,12 4,10 4,11 5,11 5,12; i 8 4,0 5,0 5,1 6,0 6,1 7,0 7,1 7,2 8,0 8,1 8,2 9,0 9,1 9,2; i 8 10,3 10,4 11,0 11,1 11,2 11,3 11,4 11,5 12,0 12,1 12,2 12,3 12,4 12,5; i 10 3,3 3,4 3,5 4,2 4,3 4,4 4,5 5,3 5,4 5,5 5,6 6,3 6,4 6,5 6,6 7,4 7,5 7,6 8,4 8,5; i 10 5,8 5,9 6,8 6,9 7,8 7,9 7,10 8,7 8,8 8,9 9,7 9,8 9,9 10,6 10,7 10,8 11,7 11,8 12,7 12,8; s 0,0 0,5 0,9 1,4 1,8 1,12 2,1 3,5 3,7 3,10 3,12 4,0 4,2 5,9 5,11 6,3 6,6 7,0 7,8 7,12 8,2 8,5 9,0 9,9 10,3 10,6 10,10 11,0 11,5 12,2 12,8 12,11; r C 2,1 7,12 12,11 B 11,0 11,5 W 3,12 P S; p 0 116 0 1 0 1 4 S 0,0 1,0 1,1 2,10 2,11 3,0 3,1 3,9 3,10 3,11 4,0 4,7 4,8 4,11 5,7 6,6 6,7 7,0 7,1 9,0 T 2,0 2,8 8,0 8,1; p 1 99 1 1 2 3 1 S 3,7 4,6 5,9 5,10 5,11 6,8 6,9 7,2 7,8 7,9 8,2 8,4 8,8 9,4 9,9 10,1 10,2 10,3 12,1 12,2 T 3,8 5,8 9,2 11,3; p 2 125 0 0 2 0 3 S 4,4 5,5 6,3 6,4 6,5 7,4 7,5 8,5 8,6 9,5 9,7 10,6 10,7 10,9 10,10 11,4 11,6 11,8 12,7 12,8 T 10,4 10,8 11,7 12,5; p 3 104 2 2 1 2 0 S 0,4 0,5 0,7 0,8 0,9 1,4 1,8 1,9 1,11 1,12 2,4 2,5 2,6 2,7 3,3 3,5 4,2 5,1 5,2 5,4 T 1,7 1,10 3,4 4,3;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 2,2 2,7 6,6 8,0 8,5 8,11 B 1,0 2,9 4,2 4,6 4,9 10,5 W 2,4 4,5 8,6 10,3 10,6 10,8 P 0,3 5,12 6,5 9,10 11,0 11,12 S 0,8 1,12 5,0 6,2 6,9 9,2 12,4 12,7; p 0 64 0 0 0 0 0 S T 3,3 5,3; p 1 58 0 0 0 0 0 S T 0,2 2,0 6,11;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,3 2,2 5,0 6,6 8,5 10,6 B 1,0 2,9 4,5 5,12 8,11 11,12 W 0,8 1,12 6,2 6,9 8,6 10,8 P 2,4 2,7 8,0 9,10 10,3 12,4 S 4,2 4,6 4,9 6,5 9,2 10,5 11,0 12,7; p 0 64 0 0 0 0 0 S T 3,3 5,3; p 1 58 0 0 0 0 0 S T 0,2 2,0 6,11;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 4,9 6,5 8,0 B 4,6 10,6 11,12 12,4 W 0,8 4,5 9,2 P 1,12 2,7 5,12 8,6 10,8 S 2,9 6,6 10,3 11,0 12,7; p 0 144 0 2 2 0 1 S 0,4 0,5 0,6 1,3 1,5 2,3 2,4 3,2 3,4 3,5 4,1 4,2 4,3 4,4 5,4 6,2 6,3 7,3 7,4 7,5 8,3 8,4 8,5 9,4 9,5 10,5 11,5 11,6 11,7 12,6 T 3,3 5,3; p 1 121 3 0 1 1 2 S 0,0 0,1 0,3 1,0 1,1 1,2 1,4 2,1 2,2 3,0 3,1 4,0 5,0 5,1 5,8 5,9 5,10 6,9 6,10 7,9 7,10 7,11 7,12 8,8 8,11 9,10 9,11 10,9 10,10 11,9 T 0,2 2,0 6,11;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,3 2,7 6,6 8,5 8,6 10,5 B 4,6 6,2 6,9 8,11 12,4 12,7 W 2,9 4,9 9,10 10,6 10,8 11,0 P 0,8 1,12 2,2 4,2 5,0 5,12 S 1,0 2,4 4,5 6,5 8,0 9,2 10,3 11,12; p 0 100 0 0 0 0 0 S T 4,7 5,2 7,7 12,8; p 1 120 0 0 0 0 0 S T 3,3 4,0 4,4 5,3;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,8 2,2 4,6 8,0 9,10 10,5 B 1,0 5,12 9,2 10,3 10,8 11,12 W 2,9 4,2 5,0 6,5 8,6 12,4 P 2,7 6,2 6,6 8,5 11,0 12,7 S 0,3 1,12 2,4 4,5 4,9 6,9 8,11 10,6; p 0 100 0 0 0 0 0 S T 4,7 5,2 7,7 12,8; p 1 120 0 0 0 0 0 S T 3,3 4,0 4,4 5,3;
a 13 2; c 1 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 9,10 11,0 B W 1,12 5,12 P 4,9 8,11 10,3 S 0,8 2,9 11,12 12,4; p 0 242 1 3 3 2 3 S 2,5 2,6 2,7 3,2 3,7 4,1 4,6 5,6 5,7 5,8 6,2 6,5 6,6 6,8 6,9 7,2 7,3 7,5 7,9 8,5 8,6 8,7 9,7 10,5 10,6 10,7 10,8 11,8 11,9 12,7 T 4,7 5,2 7,7 12,8; p 1 189 3 3 1 1 1 S 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,2 2,3 2,4 3,0 3,1 3,4 3,5 3,6 4,2 4,5 5,0 5,1 5,4 5,5 6,0 6,3 6,4 7,0 7,4 8,0 8,1 8,4 9,2 T 3,3 4,0 4,4 5,3;

View File

@ -1,2 +1,2 @@
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,8 5,0 8,5 9,2 9,10 10,5 B 5,12 6,5 6,9 8,6 10,3 10,8 W 2,2 2,4 2,9 4,2 10,6 11,0 P 1,12 4,9 8,11 11,12 12,4 12,7 S 0,3 1,0 2,7 4,5 4,6 6,2 6,6 8,0; p 0 47 0 0 0 0 0 S T 0,11 2,11 3,10 6,0; p 1 46 0 0 0 0 0 S T 2,6 4,4 5,3 10,7; p 2 35 0 0 0 0 0 S T 0,2 4,0 5,2 7,5 10,0;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 1,0 2,2 4,6 10,5 12,4 12,7 B 0,3 4,5 6,5 6,9 9,2 10,6 W 4,2 5,0 8,0 8,5 8,11 10,3 P 1,12 2,7 4,9 6,2 6,6 11,0 S 0,8 2,4 2,9 5,12 8,6 9,10 10,8 11,12; p 0 47 0 0 0 0 0 S T 0,11 2,11 3,10 6,0; p 1 46 0 0 0 0 0 S T 2,6 4,4 5,3 10,7; p 2 35 0 0 0 0 0 S T 0,2 4,0 5,2 7,5 10,0;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 2,2 8,11 9,2 10,8 B 2,9 6,6 10,3 10,6 12,7 W 0,8 P 10,5 12,4 S 1,0 4,5 11,12; p 0 107 0 0 3 2 1 S 0,10 1,8 1,10 1,11 1,12 2,7 2,8 3,7 3,8 3,11 3,12 4,8 4,9 5,1 5,9 5,10 5,12 6,9 6,10 6,11 7,10 7,12 8,9 9,10 10,10 T 0,11 2,11 3,10 6,0; p 1 115 1 0 2 0 1 S 0,5 1,6 1,7 2,4 3,5 3,6 4,6 4,7 5,4 5,6 5,7 6,3 6,4 6,5 7,4 7,8 7,9 8,6 8,8 9,7 9,8 9,9 11,7 11,8 12,8 T 2,6 4,4 5,3 10,7; p 2 81 1 1 0 2 3 S 0,3 1,2 1,3 1,4 2,1 3,2 3,3 3,4 4,1 4,2 5,0 6,1 6,2 7,0 7,1 7,2 7,3 8,0 8,1 8,2 8,5 9,0 9,1 9,3 11,0 T 0,2 4,0 5,2 7,5 10,0;

View File

@ -1,2 +1,2 @@
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,3 4,2 6,9 8,0 9,2 12,7 B 1,0 1,12 2,4 4,9 8,6 11,0 W 2,2 5,12 8,5 10,3 10,6 11,12 P 0,8 2,7 2,9 5,0 10,5 10,8 S 4,5 4,6 6,2 6,5 6,6 8,11 9,10 12,4; p 0 78 0 0 0 0 0 S T 0,6 2,5; p 1 74 0 0 0 0 0 S T 3,10 4,7 7,7; p 2 53 0 0 0 0 0 S T 4,11 7,5 10,4;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,8 1,0 2,2 6,2 6,9 8,0 B 1,12 4,6 8,11 9,2 10,3 12,7 W 4,9 6,5 8,5 8,6 10,6 11,12 P 2,4 4,2 4,5 10,8 11,0 12,4 S 0,3 2,7 2,9 5,0 5,12 6,6 9,10 10,5; p 0 78 0 0 0 0 0 S T 0,6 2,5; p 1 74 0 0 0 0 0 S T 3,10 4,7 7,7; p 2 53 0 0 0 0 0 S T 4,11 7,5 10,4;
a 13 3; c 2 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C B 10,8 W 12,4 P 11,0 11,12 S 9,10 12,7; p 0 133 2 1 1 1 2 S 0,3 0,4 0,5 0,7 0,8 0,9 0,10 1,0 1,1 1,4 1,5 1,6 1,7 1,8 2,1 2,2 2,3 2,4 2,6 2,7 3,3 3,4 3,6 3,7 4,6 T 0,6 2,5; p 1 149 4 1 2 0 1 S 1,12 2,9 2,11 3,0 3,8 3,9 3,11 4,0 4,1 4,2 4,3 4,4 4,5 4,9 5,0 5,2 5,4 5,6 5,7 5,9 6,1 6,6 6,9 7,1 7,6 T 3,10 4,7 7,7; p 2 143 0 3 2 3 3 S 3,12 5,3 5,5 5,12 6,2 6,3 6,4 6,5 6,11 7,2 7,3 7,11 7,12 8,0 8,1 8,5 8,6 8,11 9,2 9,4 9,5 9,6 10,3 10,5 10,6 T 4,11 7,5 10,4;

View File

@ -1,2 +1,2 @@
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 1,0 2,4 2,9 8,0 8,11 10,8 B 2,7 4,2 6,5 8,5 10,6 11,12 W 2,2 6,2 6,6 8,6 10,3 11,0 P 0,8 4,5 4,6 5,0 5,12 9,2 S 0,3 1,12 4,9 6,9 9,10 10,5 12,4 12,7; p 0 26 0 0 0 0 0 S T 4,7 7,2 12,0; p 1 39 0 0 0 0 0 S T 2,5 4,4 10,7; p 2 28 0 0 0 0 0 S T 0,9 3,10 9,12 12,2; p 3 63 0 0 0 0 0 S T 3,3 3,9 12,5;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 1,0 1,12 6,5 9,2 9,10 10,3 B 2,4 5,12 6,2 6,9 11,12 12,4 W 0,8 2,2 4,2 6,6 8,0 12,7 P 0,3 2,9 4,5 8,11 10,5 10,6 S 2,7 4,6 4,9 5,0 8,5 8,6 10,8 11,0; p 0 26 0 0 0 0 0 S T 4,7 7,2 12,0; p 1 39 0 0 0 0 0 S T 2,5 4,4 10,7; p 2 28 0 0 0 0 0 S T 0,9 3,10 9,12 12,2; p 3 63 0 0 0 0 0 S T 3,3 3,9 12,5;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 9,2 10,5 11,12 12,4 12,7 B 8,0 W 10,8 P 0,3 1,0 2,7 5,0 11,0 S 1,12 5,12 8,5 9,10; p 0 54 0 1 2 0 1 S 4,6 4,8 5,7 5,9 6,1 6,2 6,5 6,8 6,9 7,3 7,4 7,5 8,1 8,2 9,1 10,0 10,1 11,1 11,2 12,1 T 4,7 7,2 12,0; p 1 103 0 2 2 0 1 S 2,4 3,6 3,7 4,5 5,4 5,5 5,6 6,3 6,4 6,6 7,6 7,7 8,6 8,7 8,8 9,6 10,6 11,6 11,8 12,8 T 2,5 4,4 10,7; p 2 50 1 1 0 0 0 S 0,5 0,6 0,7 0,8 1,5 1,9 1,10 1,11 2,10 3,11 4,10 5,10 5,11 6,11 7,10 7,11 7,12 8,9 8,10 8,11 T 0,9 3,10 9,12 12,2; p 3 105 0 1 1 1 2 S 0,1 1,2 1,3 1,8 2,0 2,1 2,2 2,8 2,9 3,1 3,2 4,2 4,3 4,9 5,3 10,3 10,4 11,4 11,5 12,3 T 3,3 3,9 12,5;

View File

@ -1,2 +1,2 @@
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 0,8 1,0 4,5 8,11 10,5 11,12 B 2,4 6,2 8,0 8,6 10,8 11,0 W 1,12 4,2 4,6 6,5 8,5 9,2 P 0,3 2,2 4,9 6,6 9,10 10,3 S 2,7 2,9 5,0 5,12 6,9 10,6 12,4 12,7; p 0 32 0 0 0 0 0 S T 5,2 7,0 7,2 9,0; p 1 27 0 0 0 0 0 S T 0,9 2,5 2,11; p 2 56 0 0 0 0 0 S T 3,3 7,5; p 3 94 0 0 0 0 0 S T 5,9 10,4;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 4,5 5,12 6,2 9,2 10,5 10,8 B 0,3 1,12 2,9 5,0 8,0 8,6 W 1,0 2,2 4,6 6,5 10,3 12,7 P 2,7 4,2 4,9 8,11 9,10 11,0 S 0,8 2,4 6,6 6,9 8,5 10,6 11,12 12,4; p 0 32 0 0 0 0 0 S T 5,2 7,0 7,2 9,0; p 1 27 0 0 0 0 0 S T 0,9 2,5 2,11; p 2 56 0 0 0 0 0 S T 3,3 7,5; p 3 94 0 0 0 0 0 S T 5,9 10,4;
a 13 4; c 3 S; i 6 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 1,0 1,12 2,0 2,11 3,0 3,12 4,0 4,11 5,0 5,12 6,0 6,11 7,0 7,12 8,0 8,11 9,0 9,12 10,0 10,11 11,0 11,12 12,0 12,1 12,2 12,3 12,4 12,5 12,6 12,7 12,8 12,9 12,10 12,11; i 6 2,4 2,5 2,6 2,7; i 9 4,4 4,5 4,6 4,7; i 9 6,5 6,6 7,5 7,7 8,5 8,6; i 12 2,2 3,2 3,3 4,2 5,2 5,3 6,2 7,2 7,3; i 12 2,9 3,9 3,10 4,9 5,9 5,10 6,9 7,9 7,10; i 12 9,2 9,10 10,2 10,3 10,4 10,5 10,6 10,7 10,8 10,9; s 0,3 0,8 1,0 1,12 2,2 2,4 2,7 2,9 4,2 4,5 4,6 4,9 5,0 5,12 6,2 6,5 6,6 6,9 8,0 8,5 8,6 8,11 9,2 9,10 10,3 10,5 10,6 10,8 11,0 11,12 12,4 12,7; r C 11,12 B W 0,3 P S 1,0 12,7; p 0 73 0 2 2 1 1 S 5,0 5,1 5,3 6,1 6,2 7,1 7,3 8,0 8,1 8,3 8,4 9,2 9,3 9,4 10,2 10,3 11,0 11,1 11,2 12,2 T 5,2 7,0 7,2 9,0; p 1 72 2 0 0 2 2 S 0,7 0,8 1,6 1,8 1,9 1,11 1,12 2,6 2,7 2,9 3,5 3,8 3,11 3,12 4,11 5,12 6,11 7,11 7,12 8,11 T 0,9 2,5 2,11; p 2 127 2 2 1 1 2 S 0,5 1,5 2,2 2,4 3,1 3,2 3,4 4,0 4,2 4,4 4,5 4,6 5,6 6,5 6,6 7,6 8,6 8,7 9,6 9,7 T 3,3 7,5; p 3 172 1 2 2 2 1 S 3,7 4,7 4,8 4,9 5,7 6,8 6,9 6,10 7,9 8,5 8,9 9,5 9,10 10,5 10,6 10,7 10,8 10,9 11,5 12,4 T 5,9 10,4;

View File

@ -1,2 +1,2 @@
a 7 2; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,1 1,5 4,0 4,3 5,5 6,3 B 1,2 3,3 3,6 5,3 6,0 6,1 W 0,2 1,6 2,1 4,2 5,2 6,2 P 0,0 1,3 2,2 2,3 3,5 4,1 S 0,3 1,1 2,0 3,0 3,1 3,2 5,1 5,6; p 0 91 0 0 0 0 0 S T; p 1 86 0 0 0 0 0 S T 0,5 4,5;
a 7 2; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,2 2,0 2,2 4,2 5,6 6,3 B 0,3 3,0 3,3 4,1 5,1 6,1 W 0,1 1,2 2,3 4,0 5,2 6,0 P 1,5 1,6 2,1 3,1 3,5 5,5 S 0,0 1,1 1,3 3,2 3,6 4,3 5,3 6,2; p 0 91 0 0 0 0 0 S T; p 1 86 0 0 0 0 0 S T 0,5 4,5;
a 7 2; c 1 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 4,0 5,2 B 3,2 5,3 6,1 W 0,0 2,2 5,1 P 4,3 S 1,1 6,0; p 0 91 0 0 0 0 0 S T; p 1 214 4 3 3 5 6 S 0,1 0,2 0,3 0,4 1,2 1,3 1,4 1,5 1,6 2,0 2,1 2,3 2,4 2,5 3,0 3,1 3,3 3,4 3,5 3,6 4,1 4,2 4,4 5,4 5,5 5,6 6,2 6,3 6,4 6,5 T 0,5 4,5;

View File

@ -1,2 +1,2 @@
a 7 2; c 1 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 1,5 1,6 3,0 4,1 4,3 5,6 B 1,1 1,3 3,3 3,6 5,3 6,1 W 0,1 0,2 1,2 3,1 3,2 5,1 P 0,0 0,3 2,0 2,2 5,2 6,3 S 2,1 2,3 3,5 4,0 4,2 5,5 6,0 6,2; p 0 53 0 0 0 0 0 S T 0,5 4,5; p 1 128 0 0 0 0 0 S T 1,0;
a 7 2; c 1 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 120 1 1 2 3 3 S 0,4 1,5 1,6 2,2 2,3 2,5 3,3 3,4 3,6 4,3 4,4 5,4 5,5 5,6 6,3 6,4 6,5 T 0,5 4,5; p 1 242 5 5 4 3 5 S 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,4 2,0 2,1 2,4 3,0 3,1 3,2 3,5 4,0 4,1 4,2 5,0 5,1 5,2 5,3 6,0 6,1 6,2 T 1,0;
a 7 2; c 1 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,3 1,3 2,0 2,2 3,6 5,3 B 0,0 0,1 1,6 3,3 5,6 6,1 W 0,2 1,5 3,2 4,2 5,1 6,2 P 3,0 3,5 4,0 4,1 5,2 5,5 S 1,1 1,2 2,1 2,3 3,1 4,3 6,0 6,3; p 0 53 0 0 0 0 0 S T 0,5 4,5; p 1 128 0 0 0 0 0 S T 1,0;
a 7 2; c 1 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,2 1,3 2,1 3,0 3,3 6,2 B 0,1 1,1 2,2 5,2 5,3 5,6 W 0,0 3,1 3,5 5,1 5,5 6,3 P 0,3 1,2 1,5 2,0 2,3 3,6 S 1,6 3,2 4,0 4,1 4,2 4,3 6,0 6,1; p 0 120 1 1 2 3 3 S 0,4 1,5 1,6 2,2 2,3 2,5 3,3 3,4 3,6 4,3 4,4 5,4 5,5 5,6 6,3 6,4 6,5 T 0,5 4,5; p 1 242 5 5 4 3 5 S 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,4 2,0 2,1 2,4 3,0 3,1 3,2 3,5 4,0 4,1 4,2 5,0 5,1 5,2 5,3 6,0 6,1 6,2 T 1,0;

View File

@ -1,2 +1,2 @@
a 7 3; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,3 1,2 2,0 4,1 5,1 6,2 B 0,0 1,3 4,0 4,2 5,2 5,6 W 2,2 2,3 3,0 3,3 3,5 6,1 P 1,1 1,5 2,1 5,3 5,5 6,3 S 0,1 0,2 1,6 3,1 3,2 3,6 4,3 6,0; p 0 60 0 0 0 0 0 S T; p 1 37 0 0 0 0 0 S T 6,5; p 2 74 0 0 0 0 0 S T 0,5 4,5;
a 7 3; c 2 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 60 0 0 0 0 0 S T; p 1 136 4 2 3 4 5 S 0,0 0,1 0,2 1,0 1,1 1,3 2,0 3,0 3,1 4,0 4,1 5,0 5,1 5,2 5,3 5,6 6,0 6,1 6,2 6,3 6,4 T 6,5; p 2 166 2 4 3 2 3 S 0,3 0,4 1,2 1,4 1,5 1,6 2,1 2,2 2,3 2,4 2,5 3,2 3,3 3,4 3,5 3,6 4,2 4,3 4,4 5,4 5,5 T 0,5 4,5;
a 7 3; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,1 0,3 1,5 2,2 3,6 5,5 B 1,6 2,0 3,1 4,0 6,0 6,1 W 0,2 1,2 1,3 3,2 3,5 4,2 P 3,0 3,3 4,1 4,3 5,1 6,2 S 0,0 1,1 2,1 2,3 5,2 5,3 5,6 6,3; p 0 60 0 0 0 0 0 S T; p 1 37 0 0 0 0 0 S T 6,5; p 2 74 0 0 0 0 0 S T 0,5 4,5;
a 7 3; c 2 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,3 1,2 1,5 2,0 4,0 4,1 B 2,1 2,2 2,3 3,3 4,3 6,3 W 1,3 3,0 3,1 3,2 5,2 5,5 P 0,1 3,5 3,6 4,2 5,6 6,0 S 0,0 0,2 1,1 1,6 5,1 5,3 6,1 6,2; p 0 60 0 0 0 0 0 S T; p 1 136 4 2 3 4 5 S 0,0 0,1 0,2 1,0 1,1 1,3 2,0 3,0 3,1 4,0 4,1 5,0 5,1 5,2 5,3 5,6 6,0 6,1 6,2 6,3 6,4 T 6,5; p 2 166 2 4 3 2 3 S 0,3 0,4 1,2 1,4 1,5 1,6 2,1 2,2 2,3 2,4 2,5 3,2 3,3 3,4 3,5 3,6 4,2 4,3 4,4 5,4 5,5 T 0,5 4,5;

View File

@ -1,2 +1,2 @@
a 7 3; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,2 2,0 3,6 4,1 4,2 6,0 B 0,0 3,0 3,1 3,2 3,5 6,3 W 1,5 1,6 2,1 5,3 6,1 6,2 P 1,1 1,3 4,0 4,3 5,1 5,5 S 0,1 0,3 1,2 2,2 2,3 3,3 5,2 5,6; p 0 108 0 0 0 0 0 S T 0,5 5,0; p 1 39 0 0 0 0 0 S T 4,5; p 2 39 0 0 0 0 0 S T 6,5;
a 7 3; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 202 4 2 2 4 5 S 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,6 2,0 2,1 2,2 3,0 3,1 3,2 4,0 4,1 6,0 T 0,5 5,0; p 1 83 0 1 3 1 1 S 1,4 1,5 2,3 2,4 2,5 3,4 3,5 3,6 4,4 5,5 5,6 T 4,5; p 2 82 2 3 1 1 2 S 3,3 4,2 4,3 5,1 5,2 5,3 5,4 6,1 6,2 6,3 6,4 T 6,5;
a 7 3; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 1,2 2,0 2,1 2,3 3,5 5,3 B 0,0 0,1 1,6 4,0 4,1 6,2 W 1,1 1,3 1,5 3,2 3,3 5,1 P 0,3 3,6 4,2 6,0 6,1 6,3 S 0,2 2,2 3,0 3,1 4,3 5,2 5,5 5,6; p 0 108 0 0 0 0 0 S T 0,5 5,0; p 1 39 0 0 0 0 0 S T 4,5; p 2 39 0 0 0 0 0 S T 6,5;
a 7 3; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,2 2,0 2,1 3,1 3,2 5,6 B 2,2 4,3 5,1 5,5 6,0 6,1 W 1,5 3,0 3,3 3,6 4,0 6,3 P 0,3 1,3 2,3 4,2 5,2 6,2 S 0,0 0,1 1,1 1,2 1,6 3,5 4,1 5,3; p 0 202 4 2 2 4 5 S 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,6 2,0 2,1 2,2 3,0 3,1 3,2 4,0 4,1 6,0 T 0,5 5,0; p 1 83 0 1 3 1 1 S 1,4 1,5 2,3 2,4 2,5 3,4 3,5 3,6 4,4 5,5 5,6 T 4,5; p 2 82 2 3 1 1 2 S 3,3 4,2 4,3 5,1 5,2 5,3 5,4 6,1 6,2 6,3 6,4 T 6,5;

View File

@ -1,2 +1,2 @@
a 7 4; c 3 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 1,2 1,3 5,1 5,6 6,0 6,1 B 0,1 1,6 2,3 3,6 4,2 4,3 W 1,5 2,2 4,0 5,2 5,5 6,2 P 0,2 0,3 3,1 3,5 4,1 6,3 S 0,0 1,1 2,0 2,1 3,0 3,2 3,3 5,3; p 0 30 0 0 0 0 0 S T; p 1 42 0 0 0 0 0 S T 5,0; p 2 41 0 0 0 0 0 S T; p 3 40 0 0 0 0 0 S T 1,0;
a 7 4; c 3 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,0 2,2 4,0 4,2 4,3 5,2 B 0,2 1,2 1,3 3,6 5,1 5,5 W 1,6 3,1 3,3 4,1 5,6 6,1 P 0,1 0,3 2,0 3,2 5,3 6,3 S 1,1 1,5 2,1 2,3 3,0 3,5 6,0 6,2; p 0 30 0 0 0 0 0 S T; p 1 42 0 0 0 0 0 S T 5,0; p 2 41 0 0 0 0 0 S T; p 3 40 0 0 0 0 0 S T 1,0;
a 7 4; c 3 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 5,6 B W P S; p 0 30 0 0 0 0 0 S T; p 1 123 1 2 4 5 3 S 2,4 3,0 3,1 3,2 3,4 4,0 4,1 4,2 4,3 4,5 5,1 5,2 5,3 5,4 5,5 6,0 6,1 6,2 6,3 6,4 T 5,0; p 2 41 0 0 0 0 0 S T; p 3 145 4 4 2 1 5 S 0,0 0,1 0,2 0,3 0,4 0,5 1,1 1,2 1,3 1,4 1,5 1,6 2,0 2,1 2,2 2,3 2,5 3,3 3,5 3,6 T 1,0;

View File

@ -1,2 +1,2 @@
a 7 4; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,2 1,2 2,3 3,6 4,2 5,2 B 3,1 3,2 3,3 5,1 6,2 6,3 W 0,0 0,3 1,3 2,1 3,5 4,0 P 0,1 2,0 3,0 4,1 6,0 6,1 S 1,1 1,5 1,6 2,2 4,3 5,3 5,5 5,6; p 0 85 0 0 0 0 0 S T 0,5; p 1 29 0 0 0 0 0 S T 4,5; p 2 19 0 0 0 0 0 S T 6,5; p 3 43 0 0 0 0 0 S T 2,5;
a 7 4; c 2 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C B W P S; p 0 112 1 0 1 2 3 S 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 T 0,5; p 1 59 1 1 2 0 0 S 3,4 3,5 3,6 4,4 5,5 5,6 T 4,5; p 2 104 3 4 2 3 4 S 2,0 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 5,4 6,0 6,1 6,2 6,3 6,4 T 6,5; p 3 67 1 1 1 1 1 S 1,4 1,5 1,6 2,1 2,2 2,3 2,4 T 2,5;
a 7 4; c 0 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,1 0,2 1,3 1,5 3,6 6,1 B 2,1 2,2 3,1 4,2 5,5 5,6 W 0,0 1,1 3,0 3,2 3,3 6,0 P 0,3 1,6 3,5 4,3 5,1 5,2 S 1,2 2,0 2,3 4,0 4,1 5,3 6,2 6,3; p 0 85 0 0 0 0 0 S T 0,5; p 1 29 0 0 0 0 0 S T 4,5; p 2 19 0 0 0 0 0 S T 6,5; p 3 43 0 0 0 0 0 S T 2,5;
a 7 4; c 2 S; i 4 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 6,0 6,1 6,2 6,3; i 20 0,5 1,5 1,6 2,5 3,5 3,6 4,5 5,5 5,6 6,5; s 0,0 0,1 0,2 0,3 1,1 1,2 1,3 1,5 1,6 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 3,5 3,6 4,0 4,1 4,2 4,3 5,1 5,2 5,3 5,5 5,6 6,0 6,1 6,2 6,3; r C 0,1 1,2 2,2 3,6 4,3 5,6 B 1,5 3,1 3,2 5,5 6,0 6,1 W 1,1 2,0 2,1 3,0 3,3 4,1 P 0,2 0,3 1,3 4,0 5,1 5,3 S 0,0 1,6 2,3 3,5 4,2 5,2 6,2 6,3; p 0 112 1 0 1 2 3 S 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 T 0,5; p 1 59 1 1 2 0 0 S 3,4 3,5 3,6 4,4 5,5 5,6 T 4,5; p 2 104 3 4 2 3 4 S 2,0 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,3 5,4 6,0 6,1 6,2 6,3 6,4 T 6,5; p 3 67 1 1 1 1 1 S 1,4 1,5 1,6 2,1 2,2 2,3 2,4 T 2,5;

View File

@ -1,2 +1,2 @@
a 23 2; c 1 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,7 3,17 6,0 6,12 11,9 12,1 B 0,19 7,18 12,21 13,10 21,6 21,9 W 7,4 15,8 15,20 18,9 20,0 20,16 P 0,14 3,5 7,16 11,13 12,19 15,14 S 0,2 6,9 6,21 7,6 15,2 17,9 18,8 21,12; p 0 30 0 0 0 0 0 S T 2,17 6,19 9,9; p 1 30 0 0 0 0 0 S T 4,9 5,19 6,2 14,5 19,16;
a 23 2; c 1 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 6,9 11,13 15,2 15,8 15,14 18,8 B 0,2 0,14 0,19 12,21 21,6 21,12 W 3,5 3,17 6,12 12,1 15,20 20,16 P 6,0 6,21 7,4 7,18 18,9 21,9 S 0,7 7,6 7,16 11,9 12,19 13,10 17,9 20,0; p 0 30 0 0 0 0 0 S T 2,17 6,19 9,9; p 1 30 0 0 0 0 0 S T 4,9 5,19 6,2 14,5 19,16;
a 23 2; c 1 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,2 0,14 6,0 6,9 18,8 18,9 B 7,16 11,13 12,19 15,14 21,6 W 3,5 6,12 7,4 13,10 15,8 15,20 P 0,7 0,19 12,1 12,21 20,0 21,9 S 7,18 11,9 15,2 17,9 21,12; p 0 78 0 0 0 0 3 S 0,16 0,17 1,16 1,17 1,18 2,16 3,17 3,18 3,19 4,17 5,16 5,17 5,20 5,21 5,22 6,18 6,20 6,21 7,6 7,19 7,20 8,6 8,7 8,19 9,6 9,7 9,8 9,20 10,20 10,21 T 2,17 6,19 9,9; p 1 72 0 1 0 0 0 S 2,10 3,11 3,12 4,0 4,1 4,4 4,6 4,7 4,8 4,10 4,11 4,18 5,1 5,2 5,4 5,5 5,7 5,8 5,11 6,3 7,2 8,0 8,1 14,7 15,6 15,7 16,7 19,17 20,15 20,16 T 4,9 5,19 6,2 14,5 19,16;

View File

@ -1,2 +1,2 @@
a 23 2; c 1 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 3,17 11,9 15,8 17,9 18,8 18,9 B 6,21 7,18 15,14 15,20 20,0 20,16 W 3,5 6,0 11,13 12,19 12,21 21,9 P 0,2 6,9 7,6 7,16 13,10 15,2 S 0,7 0,14 0,19 6,12 7,4 12,1 21,6 21,12; p 0 108 0 0 0 0 0 S T 12,18 15,1 16,7; p 1 84 0 0 0 0 0 S T 6,2 9,13 14,7 14,17 16,14;
a 23 2; c 1 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,14 3,17 6,0 6,12 12,21 15,2 B 0,19 7,4 7,16 12,1 17,9 18,9 W 3,5 6,21 11,9 15,14 20,0 21,12 P 0,2 6,9 11,13 15,8 15,20 21,6 S 0,7 7,6 7,18 12,19 13,10 18,8 20,16 21,9; p 0 108 0 0 0 0 0 S T 12,18 15,1 16,7; p 1 84 0 0 0 0 0 S T 6,2 9,13 14,7 14,17 16,14;
a 23 2; c 1 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,2 3,17 6,12 7,16 21,9 B 3,5 6,9 11,13 20,16 W 6,21 21,12 P 0,14 0,19 7,18 18,8 21,6 S 0,7 6,0 7,6 20,0; p 0 206 0 1 2 0 4 S 12,1 12,15 12,16 12,17 12,19 12,20 12,21 13,1 13,17 13,19 13,20 13,21 14,1 14,3 14,4 14,5 14,20 15,0 15,2 15,3 15,6 15,7 15,8 15,9 15,10 16,3 16,6 16,8 17,9 18,9 T 12,18 15,1 16,7; p 1 221 1 1 2 1 0 S 7,3 7,4 9,10 9,11 9,12 10,9 11,9 11,10 12,9 13,6 13,10 13,18 14,6 14,8 14,9 14,10 14,11 14,12 14,13 14,18 14,19 15,14 15,17 15,19 15,20 15,21 16,15 16,16 16,19 17,16 T 6,2 9,13 14,7 14,17 16,14;

View File

@ -1,2 +1,2 @@
a 23 3; c 2 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,7 6,0 6,21 7,16 20,16 21,12 B 0,2 6,12 7,6 12,19 15,2 21,6 W 0,14 3,17 7,4 7,18 12,21 20,0 P 11,9 11,13 13,10 15,20 17,9 18,9 S 0,19 3,5 6,9 12,1 15,8 15,14 18,8 21,9; p 0 25 0 0 0 0 0 S T 5,4 9,1 19,8 19,9; p 1 29 0 0 0 0 0 S T 5,12 13,14 19,16 20,7 21,8; p 2 15 0 0 0 0 0 S T 2,17 3,2 4,13 5,21;
a 23 3; c 2 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,14 0,19 15,14 17,9 21,6 21,9 B 0,7 3,5 6,21 7,4 7,6 18,9 W 0,2 12,1 12,19 15,2 15,8 18,8 P 6,0 6,12 7,18 12,21 15,20 20,0 S 3,17 6,9 7,16 11,9 11,13 13,10 20,16 21,12; p 0 25 0 0 0 0 0 S T 5,4 9,1 19,8 19,9; p 1 29 0 0 0 0 0 S T 5,12 13,14 19,16 20,7 21,8; p 2 15 0 0 0 0 0 S T 2,17 3,2 4,13 5,21;
a 23 3; c 2 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 6,21 11,13 21,6 B 0,7 7,6 12,21 13,10 20,0 21,12 W 0,14 6,12 7,18 12,1 15,8 15,20 P 0,19 6,0 6,9 7,4 15,2 S 0,2 7,16 11,9 12,19 15,14 17,9 18,8; p 0 61 1 0 0 0 0 S 3,6 4,3 4,4 4,5 4,6 5,5 5,6 7,0 8,0 9,0 15,10 16,10 16,11 17,10 18,9 18,10 19,7 19,11 20,8 20,11 20,12 20,13 20,14 21,11 21,13 T 5,4 9,1 19,8 19,9; p 1 56 1 0 0 0 1 S 3,11 3,13 4,11 4,12 5,11 12,14 14,13 17,16 18,15 18,16 19,13 19,14 19,15 20,6 20,9 20,15 20,16 21,7 21,9 21,10 21,15 21,16 22,6 22,7 22,14 T 5,12 13,14 19,16 20,7 21,8; p 2 32 1 0 0 1 0 S 0,5 1,5 1,6 1,19 2,2 2,4 2,5 2,6 2,15 2,16 2,18 3,3 3,4 3,5 3,14 3,17 3,18 3,22 4,2 4,21 5,3 5,13 5,14 5,15 6,15 T 2,17 3,2 4,13 5,21;

View File

@ -1,2 +1,2 @@
a 23 3; c 2 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,7 0,14 6,9 15,2 15,8 21,6 B 0,2 3,17 12,19 12,21 18,8 21,12 W 6,12 11,9 11,13 12,1 13,10 15,14 P 3,5 6,0 6,21 7,4 15,20 18,9 S 0,19 7,6 7,16 7,18 17,9 20,0 20,16 21,9; p 0 82 0 0 0 0 0 S T 10,1 10,21 11,1 19,0 19,16; p 1 75 0 0 0 0 0 S T 9,9 11,22 14,5 14,10 15,7; p 2 39 0 0 0 0 0 S T 4,8 5,13 6,7 13,14;
a 23 3; c 2 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,19 6,9 6,12 7,16 13,10 18,9 B 6,21 7,6 7,18 12,1 12,19 20,16 W 0,2 0,14 6,0 11,13 15,14 15,20 P 0,7 7,4 12,21 15,2 15,8 21,9 S 3,5 3,17 11,9 17,9 18,8 20,0 21,6 21,12; p 0 82 0 0 0 0 0 S T 10,1 10,21 11,1 19,0 19,16; p 1 75 0 0 0 0 0 S T 9,9 11,22 14,5 14,10 15,7; p 2 39 0 0 0 0 0 S T 4,8 5,13 6,7 13,14;
a 23 3; c 2 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,2 7,18 15,20 21,6 B 6,21 11,9 W 0,14 0,19 20,16 P 0,7 3,17 7,16 S 3,5 6,0 21,9; p 0 173 0 3 0 2 1 S 9,22 10,2 11,21 12,0 12,1 12,19 12,20 12,21 13,2 13,3 13,20 13,21 14,1 14,2 15,1 15,2 15,3 16,1 16,2 20,0 20,12 20,13 20,14 20,15 21,12 T 10,1 10,21 11,1 19,0 19,16; p 1 179 0 0 2 0 4 S 6,9 7,9 8,8 12,3 12,5 12,9 13,4 13,5 13,6 13,7 13,8 13,9 13,10 14,3 14,4 14,7 14,11 15,8 15,12 15,13 16,8 17,9 18,8 18,9 19,9 T 9,9 11,22 14,5 14,10 15,7; p 2 99 2 1 1 1 0 S 3,9 4,9 5,8 5,12 6,5 6,6 6,12 7,4 7,5 7,6 7,13 11,13 12,11 12,12 12,13 12,14 12,15 12,16 13,13 13,15 13,17 14,12 14,13 14,14 15,14 T 4,8 5,13 6,7 13,14;

View File

@ -1,2 +1,2 @@
a 23 4; c 3 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,14 0,19 7,6 15,2 17,9 21,6 B 0,7 12,1 13,10 15,20 18,8 20,0 W 6,9 6,21 11,13 12,21 18,9 21,12 P 0,2 3,5 7,4 7,16 12,19 15,14 S 3,17 6,0 6,12 7,18 11,9 15,8 20,16 21,9; p 0 23 0 0 0 0 0 S T 2,2 4,12 13,3 19,6; p 1 29 0 0 0 0 0 S T 4,19 5,19 6,19 15,13; p 2 35 0 0 0 0 0 S T 7,3 9,9 14,7 15,1 19,16; p 3 33 0 0 0 0 0 S T 4,4 4,5 15,3;
a 23 4; c 3 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 3,5 6,9 6,21 7,18 15,8 15,20 B 0,2 6,12 7,4 11,9 11,13 17,9 W 0,19 7,16 12,1 12,19 12,21 21,9 P 0,7 13,10 15,2 20,0 21,6 21,12 S 0,14 3,17 6,0 7,6 15,14 18,8 18,9 20,16; p 0 23 0 0 0 0 0 S T 2,2 4,12 13,3 19,6; p 1 29 0 0 0 0 0 S T 4,19 5,19 6,19 15,13; p 2 35 0 0 0 0 0 S T 7,3 9,9 14,7 15,1 19,16; p 3 33 0 0 0 0 0 S T 4,4 4,5 15,3;
a 23 4; c 3 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,14 6,0 11,9 12,21 15,14 18,8 B 3,17 12,1 13,10 15,2 15,8 18,9 W 0,7 6,12 6,21 15,20 20,0 P 0,19 7,16 11,13 S 0,2 6,9 7,6 12,19 17,9 21,6 21,9 21,12; p 0 34 0 0 0 0 0 S 3,1 3,2 3,3 3,13 3,15 4,1 4,13 4,14 5,13 5,14 11,3 11,4 12,3 13,4 17,5 18,4 18,5 18,6 19,7 20,5 T 2,2 4,12 13,3 19,6; p 1 48 0 0 1 0 0 S 2,18 2,21 3,19 3,20 3,21 4,18 4,20 7,18 7,19 14,12 14,13 15,11 15,12 16,10 16,11 16,13 17,11 17,14 18,13 18,14 T 4,19 5,19 6,19 15,13; p 2 91 0 0 0 1 0 S 8,3 8,4 8,10 9,10 13,0 13,8 14,0 14,4 14,5 14,6 14,8 15,0 15,5 16,0 16,1 17,0 18,15 18,16 19,15 20,16 T 7,3 9,9 14,7 15,1 19,16; p 3 49 0 0 0 2 0 S 1,6 2,4 2,5 3,5 3,6 3,7 4,2 4,3 4,7 5,1 5,2 5,4 6,3 7,4 14,3 15,4 16,2 16,4 17,2 17,3 T 4,4 4,5 15,3;

View File

@ -1,2 +1,2 @@
a 23 4; c 3 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 3,5 7,4 7,6 12,19 15,20 21,9 B 6,0 11,9 12,21 13,10 15,14 18,8 W 0,2 3,17 6,21 7,16 20,0 21,6 P 0,14 6,12 7,18 12,1 15,2 21,12 S 0,7 0,19 6,9 11,13 15,8 17,9 18,9 20,16; p 0 34 0 0 0 0 0 S T 1,3 10,9 10,12 15,7 18,16; p 1 64 0 0 0 0 0 S T 9,1 9,22 10,1 16,1 19,16; p 2 69 0 0 0 0 0 S T 5,19 11,22 13,20 15,3; p 3 49 0 0 0 0 0 S T 5,1 15,10 16,14 17,16 18,0;
a 23 4; c 3 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 0,14 12,21 17,9 18,9 20,0 21,9 B 6,12 6,21 11,13 12,19 15,2 20,16 W 3,5 3,17 11,9 12,1 13,10 15,20 P 0,2 0,7 0,19 6,9 7,4 15,14 S 6,0 7,6 7,16 7,18 15,8 18,8 21,6 21,12; p 0 34 0 0 0 0 0 S T 1,3 10,9 10,12 15,7 18,16; p 1 64 0 0 0 0 0 S T 9,1 9,22 10,1 16,1 19,16; p 2 69 0 0 0 0 0 S T 5,19 11,22 13,20 15,3; p 3 49 0 0 0 0 0 S T 5,1 15,10 16,14 17,16 18,0;
a 23 4; c 3 S; i 6 0,2 0,7 1,3 1,7 2,2 2,3 2,4 2,5 2,6 2,7 3,2 3,4 3,5 3,6 3,8 4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9 5,0 5,1 5,3 5,4 5,5 5,6 5,7 5,9 5,10 6,0 6,2 6,7 6,9 7,3 7,4 7,6 7,7; i 6 0,14 0,19 1,15 1,19 2,14 2,15 2,16 2,17 2,18 2,19 3,14 3,16 3,17 3,18 3,20 4,12 4,13 4,14 4,15 4,16 4,17 4,18 4,19 4,20 4,21 5,12 5,13 5,15 5,16 5,17 5,18 5,19 5,21 5,22 6,12 6,14 6,19 6,21 7,15 7,16 7,18 7,19; i 6 17,9 18,8 18,9 19,6 19,7 19,8 19,9 19,10 19,11 19,12 20,5 20,6 20,7 20,8 20,9 20,10 20,11 20,12 21,5 21,6 21,7 21,8 21,9 21,10 21,11 21,12 21,13 22,5 22,6 22,7 22,8 22,9 22,10 22,11 22,12; i 8 12,3 12,5 13,3 13,4 13,5 13,6 14,1 14,2 14,3 14,4 14,5 15,1 15,2 15,3 16,1 16,2; i 8 12,17 12,18 12,19 13,17 13,18 13,19 13,20 14,17 14,18 14,19 14,20 15,19 15,20 15,21 16,19 16,20; i 8 13,14 14,13 14,14 15,13 15,14 15,15 16,13 16,14; i 8 14,7 15,7 15,8 16,7; i 10 8,9 9,9 10,9 11,9; i 10 8,12 9,13 10,12 11,13; i 10 9,1 10,1 11,1 12,1; i 10 9,22 10,21 11,22 12,21; i 10 13,10 14,10 15,10; i 10 17,0 18,0 19,0 20,0; i 10 17,16 18,16 19,16 20,16; s 0,2 0,7 0,14 0,19 3,5 3,17 6,0 6,9 6,12 6,21 7,4 7,6 7,16 7,18 11,9 11,13 12,1 12,19 12,21 13,10 15,2 15,8 15,14 15,20 17,9 18,8 18,9 20,0 20,16 21,6 21,9 21,12; r C 13,10 B 0,19 3,5 3,17 6,21 11,13 21,9 W 0,7 21,12 P 0,14 S 6,9 6,12 7,6 21,6; p 0 80 0 0 2 0 0 S 0,2 0,3 2,1 2,2 3,2 4,0 4,1 4,2 9,9 9,12 10,10 11,9 11,11 11,12 14,7 16,7 17,7 18,15 19,15 19,17 T 1,3 10,9 10,12 15,7 18,16; p 1 118 2 0 2 0 1 S 7,15 7,16 7,17 7,18 7,19 7,20 8,19 9,20 10,19 10,20 10,21 11,2 11,20 12,1 12,19 14,1 15,0 15,1 16,2 20,16 T 9,1 9,22 10,1 16,1 19,16; p 2 115 0 0 0 2 1 S 4,19 5,16 5,17 5,18 6,18 11,21 12,20 12,21 13,21 13,22 14,2 14,3 14,4 14,17 14,18 14,19 14,20 15,2 15,20 16,3 T 5,19 11,22 13,20 15,3; p 3 139 3 0 0 3 2 S 5,0 5,3 6,0 6,1 6,2 6,3 7,3 7,4 15,8 15,14 15,15 16,8 16,9 17,9 17,10 17,17 18,8 18,9 19,0 20,0 T 5,1 15,10 16,14 17,16 18,0;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 3,6 6,1 6,11 8,10 10,5 12,8 B 0,4 2,9 4,2 8,0 8,5 8,8 W 3,0 4,3 6,6 10,7 10,9 12,10 P 2,2 2,3 4,10 6,4 10,0 12,4 S 0,1 0,10 2,11 3,2 3,4 10,11 11,3 12,1; p 0 34 0 0 0 0 0 S T 2,5 4,5 7,6 9,8; p 1 42 0 0 0 0 0 S T 3,11 6,10;
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,10 3,6 6,11 8,0 10,0 12,10 B 2,2 3,0 3,2 8,8 11,3 12,4 W 0,4 2,11 4,3 4,10 6,4 8,10 P 4,2 6,1 6,6 8,5 10,5 12,8 S 0,1 2,3 2,9 3,4 10,7 10,9 10,11 12,1; p 0 34 0 0 0 0 0 S T 2,5 4,5 7,6 9,8; p 1 42 0 0 0 0 0 S T 3,11 6,10;
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,1 0,10 4,2 11,3 B 2,2 6,6 8,5 12,10 W 3,0 3,4 P 2,3 3,2 8,0 12,1 12,4 S 6,1 10,0 10,11 12,8; p 0 114 1 2 1 1 2 S 0,4 0,6 1,5 1,6 2,4 2,6 3,5 4,3 4,6 5,3 5,4 5,5 5,6 6,3 6,4 7,7 7,8 8,6 8,7 8,10 9,5 9,6 9,7 9,9 9,10 10,5 10,6 10,7 10,8 10,9 T 2,5 4,5 7,6 9,8; p 1 108 1 0 3 0 2 S 0,7 0,8 1,8 1,9 1,11 2,7 2,8 2,9 2,11 3,6 3,7 3,10 3,12 4,7 4,8 4,9 4,10 4,11 5,8 5,9 5,10 5,11 6,8 6,9 6,11 7,9 7,10 7,11 8,8 8,9 T 3,11 6,10;

View File

@ -1,2 +1,2 @@
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,4 3,2 8,0 10,9 12,1 12,8 B 2,3 2,9 4,10 6,4 6,11 12,10 W 2,11 3,6 4,2 6,1 8,8 8,10 P 0,10 2,2 8,5 10,0 10,5 10,7 S 0,1 3,0 3,4 4,3 6,6 10,11 11,3 12,4; p 0 90 0 0 0 0 0 S T 6,3; p 1 113 0 0 0 0 0 S T 9,8;
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 3,4 3,6 4,2 6,4 10,7 10,11 B 2,2 2,3 2,9 3,2 10,0 11,3 W 0,1 4,3 4,10 6,1 6,6 8,0 P 0,4 0,10 8,8 8,10 10,5 12,1 S 2,11 3,0 6,11 8,5 10,9 12,4 12,8 12,10; p 0 90 0 0 0 0 0 S T 6,3; p 1 113 0 0 0 0 0 S T 9,8;
a 13 2; c 1 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 4,10 B 0,10 10,11 W 10,0 P 2,11 S 0,1 0,4 2,9 3,0 8,10 11,3 12,1; p 0 195 4 2 2 4 1 S 2,2 2,3 3,1 3,2 3,3 3,4 3,6 4,2 4,3 4,4 4,5 4,6 5,2 5,4 6,1 6,2 6,4 6,5 6,6 7,5 8,0 8,1 8,2 8,3 8,5 9,4 9,5 10,4 10,5 11,4 T 6,3; p 1 191 1 2 3 1 0 S 4,8 5,9 6,7 6,8 6,9 6,10 6,11 7,6 7,7 8,6 8,8 9,6 9,7 9,9 10,6 10,7 10,8 10,9 10,10 11,6 11,7 11,8 11,10 12,4 12,5 12,6 12,7 12,8 12,9 12,10 T 9,8;

View File

@ -1,2 +1,2 @@
a 13 3; c 2 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 2,3 3,2 4,3 6,1 8,8 12,8 B 0,1 2,9 3,6 6,11 10,7 10,9 W 0,10 4,2 4,10 10,11 11,3 12,10 P 3,0 3,4 8,0 8,10 12,1 12,4 S 0,4 2,2 2,11 6,4 6,6 8,5 10,0 10,5; p 0 32 0 0 0 0 0 S T 6,3 9,11 11,8; p 1 36 0 0 0 0 0 S T 4,5 6,9 6,10 11,2; p 2 51 0 0 0 0 0 S T 6,2 10,1;
a 13 3; c 2 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 2,11 3,2 4,10 6,11 10,5 12,1 B 2,9 4,2 6,4 8,10 10,9 10,11 W 0,1 0,10 3,4 4,3 8,8 10,0 P 3,6 8,0 8,5 10,7 12,4 12,10 S 0,4 2,2 2,3 3,0 6,1 6,6 11,3 12,8; p 0 32 0 0 0 0 0 S T 6,3 9,11 11,8; p 1 36 0 0 0 0 0 S T 4,5 6,9 6,10 11,2; p 2 51 0 0 0 0 0 S T 6,2 10,1;
a 13 3; c 2 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 2,11 B 0,10 3,2 8,10 W 3,4 6,6 12,4 P 6,4 11,3 12,1 S 0,1 2,9 8,5 12,10; p 0 90 1 1 1 1 3 S 5,4 6,7 6,11 7,3 7,8 7,12 8,8 8,11 9,6 9,7 9,8 9,10 9,12 10,5 10,6 10,7 10,8 10,9 10,10 10,11 11,6 11,7 11,11 12,5 12,8 T 6,3 9,11 11,8; p 1 62 1 1 1 0 0 S 0,4 0,5 1,5 2,4 2,6 3,5 3,6 3,7 3,8 3,9 4,4 4,10 4,11 5,9 5,10 5,11 6,8 7,9 7,10 7,11 8,9 10,2 11,1 12,2 12,3 T 4,5 6,9 6,10 11,2; p 2 122 3 1 1 2 1 S 2,2 2,3 3,0 3,1 3,3 4,1 4,2 4,3 5,1 5,2 5,3 6,1 7,0 7,2 8,0 8,1 8,2 9,0 9,1 9,2 9,3 10,0 10,3 10,4 11,0 T 6,2 10,1;

View File

@ -1,2 +1,2 @@
a 13 3; c 2 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,1 2,9 4,3 10,0 10,5 12,4 B 3,0 4,2 8,5 8,10 10,7 12,10 W 2,2 2,3 2,11 6,1 8,8 12,1 P 3,2 3,4 3,6 4,10 6,11 12,8 S 0,4 0,10 6,4 6,6 8,0 10,9 10,11 11,3; p 0 78 0 0 0 0 0 S T 0,3 9,11; p 1 53 0 0 0 0 0 S T 4,0 6,2 7,6; p 2 71 0 0 0 0 0 S T 8,1 8,2 11,6;
a 13 3; c 2 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,10 4,2 6,4 10,5 11,3 12,8 B 0,1 2,11 3,0 3,6 10,9 12,4 W 0,4 6,6 8,8 8,10 10,0 12,10 P 2,2 3,4 6,1 8,5 10,7 12,1 S 2,3 2,9 3,2 4,3 4,10 6,11 8,0 10,11; p 0 78 0 0 0 0 0 S T 0,3 9,11; p 1 53 0 0 0 0 0 S T 4,0 6,2 7,6; p 2 71 0 0 0 0 0 S T 8,1 8,2 11,6;
a 13 3; c 2 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 3,6 6,11 B 0,10 W 2,11 6,4 P 2,9 4,10 S; p 0 158 2 1 2 1 5 S 0,1 0,2 0,4 1,2 1,3 1,4 2,1 2,2 2,3 3,2 3,3 3,4 4,2 4,4 6,10 7,11 8,10 9,10 9,12 10,8 10,9 10,11 11,9 12,9 12,10 T 0,3 9,11; p 1 110 0 2 0 1 2 S 2,0 3,0 4,1 4,8 5,0 5,7 5,8 6,3 6,5 6,6 6,7 7,2 7,4 7,5 7,7 8,4 8,5 8,7 8,8 9,5 9,6 10,4 10,5 10,6 11,4 T 4,0 6,2 7,6; p 2 137 2 2 2 2 1 S 4,3 5,2 5,3 6,1 7,0 7,1 8,0 8,3 9,0 9,2 9,8 10,0 10,2 10,7 11,3 11,5 11,7 11,8 12,1 12,2 12,3 12,4 12,6 12,7 12,8 T 8,1 8,2 11,6;

View File

@ -1,2 +1,2 @@
a 13 4; c 3 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,1 4,3 6,11 8,10 10,9 12,4 B 2,3 3,0 4,2 6,4 10,0 10,7 W 2,2 2,11 3,4 3,6 10,5 10,11 P 2,9 6,1 6,6 8,0 8,5 11,3 S 0,4 0,10 3,2 4,10 8,8 12,1 12,8 12,10; p 0 51 0 0 0 0 0 S T 1,1; p 1 34 0 0 0 0 0 S T 6,10 7,6 8,3 10,4; p 2 25 0 0 0 0 0 S T 0,2 6,3 8,1 11,11 12,5; p 3 9 0 0 0 0 0 S T 0,3 1,5 1,8 2,5;
a 13 4; c 3 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 3,2 6,6 6,11 8,5 8,8 11,3 B 0,1 2,3 3,0 3,4 3,6 4,3 W 0,4 0,10 6,4 10,9 10,11 12,10 P 2,11 4,2 6,1 8,0 8,10 12,1 S 2,2 2,9 4,10 10,0 10,5 10,7 12,4 12,8; p 0 51 0 0 0 0 0 S T 1,1; p 1 34 0 0 0 0 0 S T 6,10 7,6 8,3 10,4; p 2 25 0 0 0 0 0 S T 0,2 6,3 8,1 11,11 12,5; p 3 9 0 0 0 0 0 S T 0,3 1,5 1,8 2,5;
a 13 4; c 3 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 4,10 8,5 12,4 B 0,4 3,4 6,6 6,11 W 10,11 P 2,11 8,8 S 10,0 11,3 12,1; p 0 98 2 1 1 1 2 S 0,0 0,1 1,0 1,2 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 4,0 4,1 4,2 4,3 5,0 5,1 5,2 5,4 T 1,1; p 1 74 1 0 1 0 2 S 5,5 5,10 5,11 6,4 6,5 7,5 7,11 7,12 8,2 8,6 8,10 9,2 9,4 9,5 9,6 9,10 10,3 10,5 10,6 10,7 T 6,10 7,6 8,3 10,4; p 2 64 0 1 2 2 0 S 5,3 6,1 7,0 7,2 7,3 8,0 9,0 9,11 10,8 10,9 10,10 11,5 11,6 11,9 11,12 12,7 12,8 12,9 12,10 12,11 T 0,2 6,3 8,1 11,11 12,5; p 3 42 0 0 1 1 1 S 0,6 0,7 0,8 0,10 1,3 1,6 1,7 1,9 1,10 1,11 2,4 2,7 2,9 3,5 3,6 3,7 3,10 4,4 4,6 4,9 T 0,3 1,5 1,8 2,5;

View File

@ -1,2 +1,2 @@
a 13 4; c 3 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 2,3 6,4 8,0 8,10 10,5 12,1 B 0,4 0,10 2,11 3,2 10,11 11,3 W 3,4 3,6 4,3 6,6 10,0 12,4 P 4,2 4,10 8,5 10,7 12,8 12,10 S 0,1 2,2 2,9 3,0 6,1 6,11 8,8 10,9; p 0 63 0 0 0 0 0 S T 9,8 11,4 11,8; p 1 32 0 0 0 0 0 S T 0,9 1,5 5,1; p 2 57 0 0 0 0 0 S T 9,11; p 3 76 0 0 0 0 0 S T 0,8 2,7 5,5 7,6;
a 13 4; c 3 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C 0,1 3,2 4,3 6,1 8,0 12,4 B 0,10 3,4 10,0 10,7 12,8 12,10 W 2,3 3,0 6,11 10,5 10,9 12,1 P 2,9 4,2 4,10 6,4 8,10 11,3 S 0,4 2,2 2,11 3,6 6,6 8,5 8,8 10,11; p 0 63 0 0 0 0 0 S T 9,8 11,4 11,8; p 1 32 0 0 0 0 0 S T 0,9 1,5 5,1; p 2 57 0 0 0 0 0 S T 9,11; p 3 76 0 0 0 0 0 S T 0,8 2,7 5,5 7,6;
a 13 4; c 3 S; i 5 0,1 0,2 0,3 0,4 1,1 1,5 2,0 2,5 3,0 3,6 4,0 4,5 5,1 5,5 6,1 6,2 6,3 6,4; i 5 0,8 0,9 0,10 1,8 1,11 2,7 2,11 3,8 3,11 4,8 4,9 4,10; i 7 8,8 8,9 8,10 9,8 9,11 10,7 10,11 11,8 11,11 12,8 12,9 12,10; i 7 10,0 10,1 10,4 10,5 11,0 11,2 11,3 11,4 11,6 12,0 12,1 12,4 12,5; i 9 2,2 2,3 3,2 3,4 4,2 4,3; i 9 2,9; i 9 6,6 6,7 6,8 6,9 6,10 6,11 7,6 8,0 8,1 8,2 8,3 8,4 8,5; i 9 10,9; s 0,1 0,4 0,10 2,2 2,3 2,9 2,11 3,0 3,2 3,4 3,6 4,2 4,3 4,10 6,1 6,4 6,6 6,11 8,0 8,5 8,8 8,10 10,0 10,5 10,7 10,9 10,11 11,3 12,1 12,4 12,8 12,10; r C B W 0,1 P 4,10 10,0 S 2,11 8,0 12,1; p 0 116 2 3 0 1 1 S 9,4 9,6 9,7 10,2 10,4 10,5 10,6 10,7 10,8 10,9 11,3 11,6 11,9 11,10 12,3 12,4 12,7 12,8 12,9 12,10 T 9,8 11,4 11,8; p 1 106 2 1 3 3 1 S 0,4 0,10 0,11 1,8 1,9 1,10 2,2 2,3 2,4 2,5 2,9 3,0 3,2 3,4 3,5 4,0 4,1 4,2 5,0 6,1 T 0,9 1,5 5,1; p 2 79 2 0 1 0 1 S 5,12 6,7 6,8 6,9 6,10 6,11 7,8 7,9 7,12 8,8 8,9 8,10 8,11 9,9 9,10 9,12 10,11 11,11 11,12 12,11 T 9,11; p 3 120 0 2 1 0 2 S 2,8 3,6 3,7 3,8 4,3 4,4 4,5 4,7 5,6 6,4 6,5 6,6 7,4 7,7 8,2 8,3 8,4 8,5 8,6 9,5 T 0,8 2,7 5,5 7,6;