Compare commits
1 Commits
master
...
master-d2c
Author | SHA1 | Date | |
---|---|---|---|
|
5d13e69e99 |
183
.gitlab-ci.yml
183
.gitlab-ci.yml
@ -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:
|
@ -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>
|
@ -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>
|
@ -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:
|
@ -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
|
@ -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
|
@ -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:
|
@ -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:
|
||||
|
13
admin/E-review-u1234567.md
Normal file
13
admin/E-review-u1234567.md
Normal 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>
|
||||
|
||||
|
@ -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.
|
@ -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.
|
@ -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
|
@ -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...
|
||||
|
@ -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
42
feedback.md
Normal 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** |
|
||||
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: comp1110.ass2.gui.Game
|
||||
|
3
src/comp1110/.idea/.gitignore
vendored
3
src/comp1110/.idea/.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
@ -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>
|
@ -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>
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;";
|
||||
}
|
@ -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 + ";";
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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 +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
}
|
@ -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
|
||||
}
|
||||
|
@ -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>
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;");
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;");
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
@ -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()
|
||||
|
15
tests/comp1110/ass2/testdata/GameDataLoader.java
vendored
15
tests/comp1110/ass2/testdata/GameDataLoader.java
vendored
@ -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();
|
||||
}
|
||||
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
Loading…
Reference in New Issue
Block a user