commit 6c38eefcbe173456c279da2ba417687453001093 Author: schrom01 Date: Tue Oct 18 12:17:51 2022 +0200 initial commit diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..2430006 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'application' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.junit.jupiter:junit-jupiter:5.9.0' + implementation 'org.junit.platform:junit-platform-engine:1.9.0' + implementation 'org.junit.platform:junit-platform-launcher:1.9.0' +} + +application { + mainClass = 'ch.zhaw.ads.ExBox' +} + +sourceSets { + main.java.srcDirs = ['src'] + test.java.srcDirs = ['src'] +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..aa991fc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..81ac7b3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.4.2/userguide/multi_project_builds.html + */ + +rootProject.name = 'ADS Praktikum 5' diff --git a/src/ch/zhaw/ads/ADS5_2_test.java b/src/ch/zhaw/ads/ADS5_2_test.java new file mode 100644 index 0000000..1485e08 --- /dev/null +++ b/src/ch/zhaw/ads/ADS5_2_test.java @@ -0,0 +1,84 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @(#)TreeTest.java + * + * + * @author K Rege + * @version 1.00 2018/3/17 + * @version 1.01 2021/8/1 + */ +public class ADS5_2_test { + Tree tree; + + @BeforeEach + public void setUp() { + tree = new SortedBinaryTree<>(); + tree.add("B"); + tree.add("A"); + tree.add("C"); + tree.add("D"); + } + + @Test + public void testInorder() { + Visitor v = new MyVisitor<>(); + tree.traversal().inorder(v); + assertEquals("ABCD", v.toString(), "inorder"); + } + + @Test + public void testPreorder() { + Visitor v = new MyVisitor<>(); + tree.traversal().preorder(v); + assertEquals("BACD", v.toString(), "preorder"); + } + + @Test + public void testPostorder() { + Visitor v = new MyVisitor<>(); + tree.traversal().postorder(v); + assertEquals("ADCB", v.toString(), "postorder"); + } + + @Test + public void testLevelorder() { + Visitor v = new MyVisitor<>(); + tree.traversal().levelorder(v); + assertEquals("BACD", v.toString(), "levelorder"); + } + + @Test + public void testMixed() { + Tree tree = new SortedBinaryTree<>(); + List list = new LinkedList<>(); + for (int i = 0; i < 1000; i++) { + char c = (char) ('A' + (Math.random() * 26)); + int op = (int) (Math.random() * 2); + switch (op) { + case 0: + list.add(Character.toString(c)); + tree.add(Character.toString(c)); + break; + case 1: + list.remove(Character.toString(c)); + tree.remove(Character.toString(c)); + break; + } + } + Collections.sort(list); + String expected = String.join("", list); + Visitor v = new MyVisitor<>(); + tree.traversal().inorder(v); + assertEquals(expected, v.toString(), "mixed"); + } +} diff --git a/src/ch/zhaw/ads/ADS5_3_test.java b/src/ch/zhaw/ads/ADS5_3_test.java new file mode 100644 index 0000000..11a8dcc --- /dev/null +++ b/src/ch/zhaw/ads/ADS5_3_test.java @@ -0,0 +1,61 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.concurrent.atomic.AtomicInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ADS5_3_test { + Tree rankGood; + Tree rankTest; + String textGood; + String textTest; + + public Tree createTree(String rankingText) { + Tree competitorTree = new SortedBinaryTree<>(); + String[] lines = rankingText.split("\n"); + for (String line : lines) { + String name = line.split(";")[0]; + String time = line.split(";")[1]; + competitorTree.add(new Competitor(0, name, time)); + } + return competitorTree; + } + + public String createSortedText(Tree competitorTree) { + AtomicInteger rank = new AtomicInteger(1); + StringBuilder sb = new StringBuilder(); + competitorTree.traversal().inorder(c -> {c.setRank(rank.getAndIncrement()); sb.append(c).append("\n");}); + return sb.toString(); + } + + @BeforeEach + public void setUp() { + String rangliste = "Mueller Stefan;02:31:14\n" + + "Marti Adrian;02:30:09\n" + + "Kiptum Daniel;02:11:31\n" + + "Ancay Tarcis;02:20:02\n" + + "Kreibuhl Christian;02:21:47\n" + + "Ott Michael;02:33:48\n" + + "Menzi Christoph;02:27:26\n" + + "Oliver Ruben;02:32:12\n" + + "Elmer Beat;02:33:53\n" + + "Kuehni Martin;02:33:36\n"; + rankGood = createTree(rangliste); + textGood = createSortedText(rankGood); + rankTest = new RankingTreeServer().createTree(rangliste); + textTest = new RankingTreeServer().createSortedText(rankTest); + } + + @Test + public void testCreateText() { + String[] good = textGood.split("\n"); + String[] test = textTest.split("\n"); + assertEquals(good.length, test.length, "length"); + for (int i = 0; i < good.length;i++) { + assertEquals(good[i], test[i], "rangliste["+i+"]"); + } + } +} diff --git a/src/ch/zhaw/ads/ADS5_4_test.java b/src/ch/zhaw/ads/ADS5_4_test.java new file mode 100644 index 0000000..99dc44d --- /dev/null +++ b/src/ch/zhaw/ads/ADS5_4_test.java @@ -0,0 +1,61 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.LinkedList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @(#)TreeTest.java + * + * + * @author K Rege + * @version 1.00 2018/3/17 + * @version 1.01 2021/8/1 + */ +public class ADS5_4_test { + Tree tree; + + @BeforeEach + public void setUp() { + tree = new SortedBinaryTree<>(); + tree.add("B"); + tree.add("A"); + tree.add("C"); + tree.add("D"); + } + + @Test + public void testHeight() { + assertEquals(3, tree.height(), "height"); + } + + @Test + public void testSize() { + assertEquals(4, tree.size(), "size"); + } + + @Test + public void testSizeMixed() { + Tree tree = new SortedBinaryTree<>(); + List list = new LinkedList<>(); + for (int i = 0; i < 1000; i++) { + char c = (char) ('A' + (Math.random() * 26)); + int op = (int) (Math.random() * 2); + switch (op) { + case 0: + list.add(Character.toString(c)); + tree.add(Character.toString(c)); + break; + case 1: + list.remove(Character.toString(c)); + tree.remove(Character.toString(c)); + break; + } + } + assertEquals(list.size(), tree.size()); + } +} diff --git a/src/ch/zhaw/ads/ADS5_5_test.java b/src/ch/zhaw/ads/ADS5_5_test.java new file mode 100644 index 0000000..a3b95ce --- /dev/null +++ b/src/ch/zhaw/ads/ADS5_5_test.java @@ -0,0 +1,56 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * @(#)TreeTest.java + * + * + * @author K Rege + * @version 1.00 2018/3/17 + * @version 1.01 2021/8/1 + */ +public class ADS5_5_test { + Tree tree; + + @BeforeEach + public void setUp() { + tree = new SortedBinaryTree<>(); + tree.add("B"); + tree.add("A"); + tree.add("C"); + tree.add("D"); + } + + @Test + public void testInterval() { + char left = 'K'; + char right = 'O'; + + for (int i = 0; i < 200; i++) { + char c = (char) ('A' + (Math.random() * 26)); + tree.add(Character.toString(c)); + } + // get all elements with inorder + Visitor v = new MyVisitor<>(); + tree.traversal().inorder(v); + int count = 0; + String s = v.toString(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) >= left && s.charAt(i) <= right) count++; + } + // now interval + v = new MyVisitor<>(); + tree.traversal().interval(Character.toString(left), Character.toString(right), v); + s = v.toString(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + assertTrue(c >= left && c <= right, c + " in interval "+left+" "+right); + } + assertEquals(count, s.length(), "size"); + } +} diff --git a/src/ch/zhaw/ads/AnyServer.java b/src/ch/zhaw/ads/AnyServer.java new file mode 100644 index 0000000..cf89f5f --- /dev/null +++ b/src/ch/zhaw/ads/AnyServer.java @@ -0,0 +1,15 @@ +package ch.zhaw.ads; + +/** + * AnyServer -- Praktikum Experimentierkasten -- ADS + * + * @author E. Mumprecht + * @version 1.0 -- Geruest fuer irgendeinen Server + */ +public class AnyServer implements CommandExecutor { + //----- Dies implementiert das CommandExecutor Interface. + @Override + public String execute(String command) { + return "Die Eingabe ist \"" + command + "\"\n"; + } +} diff --git a/src/ch/zhaw/ads/CommandExecutor.java b/src/ch/zhaw/ads/CommandExecutor.java new file mode 100644 index 0000000..bb2a018 --- /dev/null +++ b/src/ch/zhaw/ads/CommandExecutor.java @@ -0,0 +1,20 @@ +package ch.zhaw.ads; + +/** + * CommandExecutor -- Praktikum Experimentierkasten -- SW3 Dieses Interface muss + * von jedem Server implementiert werden. + * + * @author E. Mumprecht + * @version 1.0 -- Geruest fuer irgendeinen Server + * @version 1.1 -- K. Rege Fehlerueckgabe hinzugefuegt + */ +public interface CommandExecutor { + /** + * execute -- nimmt eine Kommandozeile, tut irgendetwas gescheites, und + * berichtet das Resultat. + * + * @param command Kommandozeile + * @return Resultat, ueblicherweise eine oder mehrere Zeilen. + */ + String execute(String command) throws Exception; +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/Competitor.java b/src/ch/zhaw/ads/Competitor.java new file mode 100644 index 0000000..ca9e93e --- /dev/null +++ b/src/ch/zhaw/ads/Competitor.java @@ -0,0 +1,67 @@ +package ch.zhaw.ads; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class Competitor implements Comparable { + private final String name; + private final String time; + private int rank; + + public Competitor(int rank, String name, String time) { + this.rank = rank; + this.name = name; + this.time = time; + } + + public void setRank(int rank) { + this.rank = rank; + } + + public String getTime() { + return time; + } + + public String getName() { + return name; + } + + private static long parseTime(String s) { + try { + DateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + Date date = sdf.parse(s); + return date.getTime(); + } catch (Exception e) {System.err.println(e);} + return 0; + } + + private static String timeToString(int time) { + SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); + return df.format(new Date(time)); + } + + public String toString() { + return ""+ rank + " "+name+" "+time; + } + + @Override + public int compareTo(Competitor o) { + if (o == this) return 0; + return (int) (parseTime(this.getTime()) - parseTime(o.getTime())); + } + + @Override + public boolean equals (Object o) { + if (!(o instanceof Competitor)) return false; + return compareTo((Competitor)o) == 0; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 31 * hash + (name == null ? 0 : name.hashCode()); + hash = 31 * hash + (time == null ? 0 : time.hashCode()); + return hash; + } +} diff --git a/src/ch/zhaw/ads/ExBox.java b/src/ch/zhaw/ads/ExBox.java new file mode 100644 index 0000000..81a6992 --- /dev/null +++ b/src/ch/zhaw/ads/ExBox.java @@ -0,0 +1,13 @@ +package ch.zhaw.ads; + +/** + * @author K. Rege + * @version 1.0 -- Experimentierkasten + */ +public class ExBox { + public static void main(String[] args) { + ExBoxFrame f = new ExBoxFrame(); + f.setLocationRelativeTo(null); + f.setVisible(true); + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/ExBoxFrame.java b/src/ch/zhaw/ads/ExBoxFrame.java new file mode 100644 index 0000000..7eb69cf --- /dev/null +++ b/src/ch/zhaw/ads/ExBoxFrame.java @@ -0,0 +1,294 @@ +package ch.zhaw.ads; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Set; + +/** + * @(#)ExBoxFrame.java + * + * JFC ExBox application + * + * @author K.Rege + * @version 1.00 2014/2/3 + * @version 1.01 2016/8/2 + * @version 2.00 2017/8/30 Test + * @version 2.01 2018/2/5 AutoscaleFaktor + * @version 2.02 2018/3/12 Reconnect (inspired by S. Kunz) + * @version 2.03 2021/7/24 Test (repeat) + * @version 2.04 2021/9/11 Test as plugin + */ +public class ExBoxFrame extends JFrame implements ActionListener, ItemListener { + private final int UHDTHRESHOLD = 1920; + private final String STANDARDENCODING = "ISO-8859-1"; + + private JMenuItem connect, exit, open, test, retest, textView, graphicView, clear; + private JMenu menuServer; + private JButton enter; + private JTextField arguments; + private JComboBox history; + private JTextArea output; + private JScrollPane scrollPane; + private CommandExecutor command; + private CommandExecutor unitTest; + private boolean graphicOn; + private GraphicPanel graphic; + private String lastServer; + private String lastTestFile; + + public void setFontSize(int size) { + Set keySet = UIManager.getLookAndFeelDefaults().keySet(); + for (Object key : keySet) { + if (key != null && key.toString().toLowerCase().contains("font")) { + Font font = UIManager.getDefaults().getFont(key); + if (font != null) { + font = font.deriveFont((float) size); + UIManager.put(key, font); + } + } + } + } + + private void initMenu() { + JMenuBar menuBar = new JMenuBar(); + setJMenuBar(menuBar); + + JMenu menuFile = new JMenu("File"); + menuBar.add(menuFile); + open = new JMenuItem("Open..."); + open.addActionListener(this); + menuFile.add(open); + exit = new JMenuItem(); + exit.setText("Exit"); + exit.addActionListener(this); + menuFile.add(exit); + + menuServer = new JMenu("Server"); + menuBar.add(menuServer); + connect = new JMenuItem("Connect ..."); + connect.addActionListener(this); + menuServer.add(connect); + + JMenu menuView = new JMenu("View"); + menuBar.add(menuView); + clear = new JMenuItem("Clear"); + clear.addActionListener(this); + menuView.add(clear); + textView = new JMenuItem("Text"); + textView.addActionListener(this); + menuView.add(textView); + graphicView = new JMenuItem("Graphic"); + graphicView.addActionListener(this); + menuView.add(graphicView); + } + + private void initJUnit() { + try { + unitTest = ServerFactory.createServer(getPathCompiled().resolve("ExBoxJUnit.class").toString()); + test = new JMenuItem("Test ..."); + test.addActionListener(this); + menuServer.add(test); + retest = new JMenuItem("Test"); + retest.addActionListener(this); + menuServer.add(retest); + } catch (Exception e) { + warning("Test Plugin not found\n"); + } + } + + private void initComponents() { + setLayout(new BorderLayout()); + output = new JTextArea(); + scrollPane = new JScrollPane(output); + add(BorderLayout.CENTER, scrollPane); + + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + arguments = new JTextField(); + arguments.addActionListener(this); + panel.add(BorderLayout.CENTER, arguments); + enter = new JButton("enter"); + enter.addActionListener(this); + panel.add(BorderLayout.EAST, enter); + history = new JComboBox<>(); + history.addItemListener(this); + panel.add(BorderLayout.SOUTH, history); + add(BorderLayout.SOUTH, panel); + } + + /** + * get default path for file open dialog + */ + private Path getPathCompiled() { + try { + Path path = Paths.get(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()); + for (String part : getClass().getPackage().getName().split("\\.")) { + path = path.resolve(part); + } + return path; + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + /** + * The constructor + */ + public ExBoxFrame() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception ex) { + ex.printStackTrace(); + } + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + double scaleFaktor = (screenSize.getWidth() <= UHDTHRESHOLD) ? 1 : 2; + setFontSize((int) (11 * scaleFaktor)); + setSize( + new Dimension((int) (400 * scaleFaktor), (int) (400 * scaleFaktor))); + setTitle("ExBox"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + initComponents(); + initMenu(); + initJUnit(); + } + + private void warning(String s) { + System.err.println("\nWARNING: " + s + "\n"); + } + + private void error(String s) { + output.append("\nERROR: " + s + "\n"); + } + + private void execute(String args) throws Exception { + if (lastServer != null) { + command = ServerFactory.createServer(lastServer); + } + if (!arguments.getText().equals(history.getItemAt(0)) + && !arguments.getText().equals(history.getSelectedItem())) { + history.insertItemAt(arguments.getText(), 0); + } + if (command == null) { + error("no Server connected"); + } else { + String res = command.execute(args); + if (graphicOn) { + graphic.setFigure(res); + } else { + output.append(res); + } + } + } + + private void setGraphicView() { + if (!graphicOn) { + remove(scrollPane); + graphic = new GraphicPanel(); + output.removeNotify(); + add(BorderLayout.CENTER, graphic); + graphicOn = true; + validate(); + repaint(); + } + } + + private void setTextView() { + if (graphicOn) { + remove(graphic); + add(BorderLayout.CENTER, scrollPane); + graphicOn = false; + validate(); + repaint(); + } + } + + private String openFileDialog(Path startDirectory, String pattern) { + FileDialog fd = new FileDialog(this, "Open"); + if (pattern != null) fd.setFile(pattern); + if (startDirectory != null) fd.setDirectory(startDirectory.toString()); + fd.setVisible(true); + return fd.getDirectory() + fd.getFile(); + } + + private void testCommand(boolean retest) throws Exception { + if (!retest) { + lastTestFile = openFileDialog(getPathCompiled(), "*test.class"); + } + if (lastTestFile == null) { + output.append("ERROR no Test spezified\n"); + } else if (unitTest != null) { + output.append(unitTest.execute(lastTestFile)); + } + } + + private void connectCommand() throws Exception { + String name = openFileDialog(getPathCompiled(), "*Server.class"); + command = ServerFactory.createServer(name); + lastServer = name; + String fullClassName = command.getClass().getName(); + String simpleClassName = fullClassName.substring( + fullClassName.lastIndexOf('.') + 1); + setTitle("ExBox connected to " + simpleClassName); + + } + + private void openFile() throws Exception { + String name = openFileDialog(null, null); + + BufferedReader br = new BufferedReader( + new InputStreamReader(new FileInputStream(name), STANDARDENCODING)); + StringBuilder b = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + b.append(line); + b.append('\n'); + } + execute(b.toString()); + } + + public void itemStateChanged(ItemEvent e) { + try { + arguments.setText((String) e.getItem()); + execute(arguments.getText()); + } catch (Throwable ex) { + error(ex.toString()); + } + } + + public void actionPerformed(ActionEvent e) { + try { + if ((e.getSource() == arguments) || (e.getSource() == enter)) { + execute(arguments.getText()); + } else if (e.getSource() == connect) { + connectCommand(); + } else if (e.getSource() == test) { + testCommand(false); + } else if (e.getSource() == retest) { + testCommand(true); + } else if (e.getSource() == open) { + openFile(); + } else if (e.getSource() == textView) { + setTextView(); + } else if (e.getSource() == graphicView) { + setGraphicView(); + } else if (e.getSource() == clear) { + output.setText(""); + } else if (e.getSource() == exit) { + System.exit(0); + } + } catch (Throwable ex) { + ex.printStackTrace(); + error(ex.toString()); + } + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/ExBoxJUnit.java b/src/ch/zhaw/ads/ExBoxJUnit.java new file mode 100644 index 0000000..b382669 --- /dev/null +++ b/src/ch/zhaw/ads/ExBoxJUnit.java @@ -0,0 +1,92 @@ +package ch.zhaw.ads; + +import org.junit.platform.engine.TestDescriptor; +import org.junit.platform.engine.TestExecutionResult; +import org.junit.platform.engine.discovery.DiscoverySelectors; +import org.junit.platform.launcher.Launcher; +import org.junit.platform.launcher.LauncherDiscoveryRequest; +import org.junit.platform.launcher.TestExecutionListener; +import org.junit.platform.launcher.TestIdentifier; +import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; +import org.junit.platform.launcher.core.LauncherFactory; + +import java.io.*; +import java.util.LinkedList; +import java.util.List; + +public class ExBoxJUnit implements CommandExecutor { + @Override + public String execute(String testFile) throws Exception { + final List successfulTests = new LinkedList<>(); + final List failedResults = new LinkedList<>(); + + StringBuilder output = new StringBuilder(); + + output.append("\nRUN TESTS ").append(new File(testFile).getName().split("\\.")[0]).append("\n"); + + LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .selectors(DiscoverySelectors.selectClass(ServerFactory.loadClass(testFile))) + .build(); + + Launcher launcher = LauncherFactory.create(); + launcher.discover(request); + launcher.registerTestExecutionListeners(new TestExecutionListener() { + @Override + public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { + if (testIdentifier.getType() != TestDescriptor.Type.TEST) { + return; + } + + if (testExecutionResult.getStatus() == TestExecutionResult.Status.SUCCESSFUL) { + successfulTests.add(testIdentifier.getDisplayName()); + } else { + failedResults.add(new TestFailure(testIdentifier.getDisplayName(), + testExecutionResult.getThrowable().orElse(null))); + } + } + }); + launcher.execute(request); + + for (String testName : successfulTests) { + output.append(testName).append(": OK\n"); + } + for (TestFailure result : failedResults) { + output.append(result.getName()).append(": ERROR\n"); + String error = result.errorString(); + if (!error.isEmpty()) { + output.append(error).append("\n"); + } + } + boolean wasSuccessful = failedResults.isEmpty(); + output.append("TESTS ").append(wasSuccessful ? "PASSED" : "FAILED").append(": ") + .append(wasSuccessful ? "OK \u263a" : failedResults.size() + " ERRORS").append("\n"); + return output.toString(); + } + + private static class TestFailure { + private final String name; + private final Throwable throwable; + + TestFailure(String name, Throwable throwable) { + this.name = name; + this.throwable = throwable; + } + + public String getName() { + return name; + } + + public String errorString() { + if (throwable == null) { + return ""; + } + try (StringWriter stringWriter = new StringWriter(); + PrintWriter printWriter = new PrintWriter(stringWriter)) { + throwable.printStackTrace(printWriter); + return stringWriter.toString(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/GraphicPanel.java b/src/ch/zhaw/ads/GraphicPanel.java new file mode 100644 index 0000000..ae0b1f0 --- /dev/null +++ b/src/ch/zhaw/ads/GraphicPanel.java @@ -0,0 +1,84 @@ +package ch.zhaw.ads; + +import javax.swing.*; +import java.awt.*; +import java.util.StringTokenizer; + +public class GraphicPanel extends JPanel { + String figure; + + public void setFigure(String figure) { + this.figure = figure; + paint(getGraphics()); + } + + private void drawRect(Graphics g, double x, double y, double width, double height, String style) { + int w = getWidth(); + int h = getHeight(); + int ix0 = (int) (w * x); + int iy0 = (int) (h * y); + int ix1 = (int) (w * (x + width)); + int iy1 = (int) (h * (y + height)); + if (style.equals("draw")) { + g.drawRect(ix0, h - iy1, ix1 - ix0, iy1 - iy0); + } else { + g.fillRect(ix0, h - iy1, ix1 - ix0, iy1 - iy0); + } + } + + private void drawFigure(Graphics g) { + if (figure != null) { + int w = getWidth(); + int h = getHeight(); + g.setColor(Color.black); + StringTokenizer tok = new StringTokenizer(figure, " <>=/,\"\n"); + while (tok.hasMoreTokens()) { + String fig = tok.nextToken(); + if (fig.equals("line")) { + tok.nextToken(); + double x1 = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double y1 = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double x2 = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double y2 = Double.parseDouble(tok.nextToken()); + g.drawLine((int) (x1 * w), h - (int) (y1 * h), + (int) (x2 * w), h - (int) (y2 * h)); + } else if (fig.equals("rect")) { + tok.nextToken(); + double x = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double y = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double width = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double height = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + String style = tok.nextToken(); + drawRect(g, x, y, width, height, style); + } else if (fig.equals("color")) { + tok.nextToken(); + int red = Integer.parseInt(tok.nextToken()); + tok.nextToken(); + int green = Integer.parseInt(tok.nextToken()); + tok.nextToken(); + int blue = Integer.parseInt(tok.nextToken()); + g.setColor(new Color(red, green, blue)); + } + } + } + } + + private void clear(Graphics g) { + int w = getWidth(); + int h = getHeight(); + g.setColor(new Color(240, 240, 240)); + g.fillRect(0, 0, w, h); + } + + public void paint(Graphics g) { + clear(g); + drawFigure(g); + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/MyVisitor.java b/src/ch/zhaw/ads/MyVisitor.java new file mode 100644 index 0000000..4457dcf --- /dev/null +++ b/src/ch/zhaw/ads/MyVisitor.java @@ -0,0 +1,20 @@ +package ch.zhaw.ads; + +/** + * MyVisitor -- Diese Klasse wird für die Tests verwendet + */ +class MyVisitor implements Visitor { + StringBuilder output; + + MyVisitor() { + output = new StringBuilder(); + } + + public void visit(T s) { + output.append(s); + } + + public String toString() { + return output.toString(); + } +} diff --git a/src/ch/zhaw/ads/RangZuerich.csv b/src/ch/zhaw/ads/RangZuerich.csv new file mode 100644 index 0000000..4146e43 --- /dev/null +++ b/src/ch/zhaw/ads/RangZuerich.csv @@ -0,0 +1,3166 @@ +Kiptum Daniel;02:11:31 +Ançay Tarcis;02:20:02 +Kreienbühl Christian;02:21:47 +Ott Michael;02:33:48 +Menzi Christoph;02:27:26 +Oliver Ruben;02:32:12 +Elmer Beat;02:33:53 +Kühni Martin;02:33:36 +Müller Stefan;02:31:14 +Marti Adrian;02:30:09 +Zwicky Christian;02:36:28 +Gehrig Roman;02:33:50 +Körner Lutz;02:32:47 +Nunige Guy;02:34:11 +Marti Fredi;02:44:48 +Dufaux Laurent;02:43:48 +Hamd Mohamednur;02:19:45 +Simpson Guy;02:30:50 +Morceli Patricia;02:37:28 +Berchtold Rachel;02:53:42 +Di Marco Magali;02:42:56 +Wyss Sandra;02:54:06 +Amiet Tanja;02:53:08 +Meneghin-Pliska Maja;02:46:07 +Zimmermann Denise;02:56:54 +Beffa Heidi;03:09:43 +Haller Natasha;03:01:07 +Lohri Nicole;02:52:31 +Serafini Susanna;03:29:00 +Annen Lamard Sandra;02:57:20 +Mayer-Hofmann Lucia;02:59:35 +Allard David;04:26:57 +Andres Robert;03:33:42 +Angehrn Otto;04:20:16 +Bader Philipp;03:40:53 +Baer Willi;03:28:12 +Baumann Simon;03:03:47 +Baumann Simon;03:12:09 +Baumann Werner;03:45:49 +Baur Hansruedi;04:04:04 +Bellerjeau James;03:42:08 +Benz Felix;02:58:13 +Bergamin Mario;03:26:30 +Bernhard Stefan;04:46:01 +Berweger Peter;02:53:15 +Bischof Thomas;03:26:40 +Blatter Eveline;02:56:49 +Bolliger Armin;03:00:08 +Brem Daniel;03:49:53 +Meier Zgraggen Stefani;04:33:30 +Brunold Andrea;03:34:27 +Brüschweiler Mathias;03:29:48 +Bucher René;04:06:20 +Buchmann Isabel;03:26:18 +Bühler Sigi;03:41:30 +Bühler Willi;03:30:40 +Buzzi Andreas;03:46:55 +Cavelti Roland;03:17:16 +Cremon René;03:39:32 +Denker Catrina;03:13:34 +Egli Ariane;04:06:18 +Ehrismann Martin;03:31:04 +Eichholzer Hans;03:57:46 +Estermann Thomas;03:48:47 +Fahrni Kurt;03:32:56 +Fesli Mehmet;04:46:31 +Flück Heinz;04:41:57 +Flühmann Katrin;03:31:29 +Fuchs Stefan;03:02:36 +Füglistaller Jörg;03:32:35 +Fürst Roger;03:24:10 +Fürst Willi;04:39:57 +Galati Francesco;03:29:38 +Gasser Matthias;03:29:03 +Gäumann Coni;03:59:14 +Gautschi Martin;03:02:27 +Gerber Bernhard;04:06:33 +Gianini Franz;04:01:52 +Giger Claudio;03:06:06 +Giger Stephan;03:56:50 +Good Erich;03:30:46 +Merkt Jürg;02:59:49 +Streit Markus;02:59:49 +Goudsmit Gerrit;02:56:51 +Gut Viktor;03:22:35 +Haag Elisabeth;04:10:05 +Häberli Roland;04:36:11 +Hächler Roland;04:00:18 +Haefeli Angela;03:48:09 +Häfliger Jürg;03:42:23 +Hafner Jürg;04:25:44 +Hager Armin;03:22:35 +Händle Heinz;04:13:38 +Herren Kurt;04:49:31 +Brüniger Markus;03:56:54 +Hirschi Peter;04:32:42 +Höck Stefan;03:34:37 +Hofmann Martin;04:21:51 +Hofstetter Corinne;03:30:35 +Holzinger Adrian;03:15:05 +Huber Edi;03:10:04 +Huber Mac;03:46:59 +Huggenberger Kurt;04:20:30 +Jaccard Marc Pierre;04:41:07 +Jakopic Klemen;03:17:07 +Jarjour Kamel;03:47:02 +Jordi Markus;03:51:01 +Jost Hansueli;03:49:31 +Jucker Andreas H.;03:22:44 +Jud Ueli;02:52:15 +Jutzi Victor;03:40:25 +Kälin Léon;04:04:11 +Kaufmann Patrick;04:03:16 +Keller Peter;03:23:54 +Keller Stephan;03:26:12 +Kilchherr Virginia;03:44:11 +Kloter Georg;03:38:02 +Koch Stephan;03:28:39 +Kopp Martin;03:17:15 +Kreienbühl Anna;04:04:25 +Kreienbühl Fridolin;03:51:50 +Kuendig Christoph;04:18:39 +Kulik Karsten;03:07:13 +Kunz Thomas;03:47:52 +Kunz Tommy;04:00:43 +Kuonen Kurt;03:16:10 +Kurz Daniel;03:42:28 +Kuster Verena;04:46:49 +Laffer Urs;03:48:15 +Landolt Andreas;03:19:46 +Ledermann Martin;04:51:42 +Nüssli Dave;03:14:49 +Graf Peter;03:14:47 +Lilley Darrel;04:16:09 +Manning John;03:38:25 +Maslarevic Dragan;04:45:37 +Meier Pascal;03:53:51 +Meier Pius;05:24:48 +Meier Robert;03:58:11 +Meyer Arthur;04:36:21 +Meyer Christoph;03:49:14 +Meyer Dirk;03:13:32 +Meyer Stephan;03:26:31 +Milivojevic Ljubomir;03:04:44 +Miller Barbara;03:17:17 +Mona Sergio;03:19:03 +Monn Matilda;03:59:34 +Müller Adrian;03:54:32 +Müller Doris;03:40:25 +Müller Thomas;03:23:52 +Ochsner René;04:01:31 +Patcas Michel;03:53:53 +Peric Frank;03:27:59 +Pfister Matthias;03:22:09 +Prosdocimi Ivan;03:46:41 +Pürro Beat;03:44:25 +Rau Dani;03:24:19 +Renggli Thomas;02:53:46 +Helfenstein Alain;03:44:44 +Anderhalden Donnino;03:44:01 +Rezan Robert;03:34:37 +Rickli Jörg;03:29:51 +Rothen Franz;03:25:01 +Röthlisberger Alain P.;03:34:40 +Rüegg Beat;03:26:53 +Rüegg Herbert;03:23:31 +Ruoss Sven;03:06:32 +Sandmeier Ueli;03:13:54 +Saxer Peter;03:45:15 +Schaffer Bernard;03:37:55 +Schaub Werner;03:36:45 +Schilling Hans;03:55:00 +Appenzeller Ulrich;03:59:30 +Fischer Reto;03:59:33 +Schlatter Sonya;04:18:26 +Schmid Christian;03:00:53 +Schmid Richard;02:58:46 +Schuster Mathias;03:11:42 +Seiler Hans;03:37:28 +Späni Urs;04:22:38 +Spiess Paul;03:42:34 +Stalder Martin;03:57:32 +Steimann Ernst;04:41:02 +Stöckli Urs;03:03:26 +Straumann Urs;03:01:40 +Studer Franz;04:17:49 +Sturzenegger Daniel;03:28:01 +Süssli Philipp;03:08:02 +Suter Kurt;03:46:46 +Tanner Christian;03:34:34 +Taschi Sander;03:36:13 +Thalmann Martin;03:49:11 +Theiler Alois;03:47:54 +Tischer Georg;04:44:08 +Tramacere Enrico;04:00:20 +Veraguth Christian;05:29:08 +Vetterli Thomas;04:16:32 +Vogel Marco;03:25:36 +Vögeli Thomas;03:49:27 +Vogt Urs;03:19:15 +Voser Therese;03:29:13 +Vosseler Beat;02:56:34 +Waller Max;04:15:17 +Walther Rita;04:23:45 +Wäschle Stefan;03:15:35 +Wenger Beat;03:34:52 +Wettstein Walter;04:53:57 +Wild Ruedi;03:27:44 +Wyser Norbert;03:26:23 +Zahler Markus;03:56:47 +Zgraggen Walter;03:33:11 +Zimmermann Herbert;04:26:40 +Zingg Marcel;03:45:33 +Zollinger Thomas;03:17:47 +Zingg Matthias;03:28:26 +Züger Fritz;04:20:41 +Zurbuchen Röbi;03:26:40 +Alpiger Karl Jun.;03:26:11 +Amacher Tom;03:54:37 +Ammann Anton;04:54:02 +Ammann Hansruedi;03:49:23 +Anneler James;04:59:47 +Bailey Richard;03:24:29 +Baumberger Rolf;03:05:38 +Uhler Remo;04:13:30 +Jaussi Lars;04:13:31 +Baumgartner Peter;04:43:47 +Bebie Bruno;03:23:03 +Beck René;04:21:30 +Bergamin Roland;03:24:28 +Berger Beat;02:42:27 +Bertschinger Erwin;03:24:17 +Binder Peter;03:49:11 +Bischofberger Lukas;03:17:26 +Böhler Thomas;03:43:48 +Borner Daniel;04:51:53 +Bosshard Roland;03:18:10 +Breitenmoser Stefan;02:56:21 +Brem Gabriella;03:56:23 +Huber Yvonne;04:27:59 +Malischke Jacqueline;04:27:59 +Brem Ruedi;03:32:12 +Bruhin Marino;03:32:43 +Bryner Adrian;04:06:52 +Bürgi Matthias;04:11:55 +Christen David;05:02:03 +Ciprian Peter;04:12:24 +Conrad Otto;04:34:00 +Conti Antonio;03:14:49 +Della Rossa Hanspeter;04:04:20 +Deseö Katja;04:32:53 +Deseö Thomas;03:52:05 +Reichmuth Ruedi;04:40:20 +Mettler Martin;04:39:44 +Ehrhard Andre;03:29:17 +Eigenmann Markus;03:40:47 +Engeli Benjamin;02:57:53 +Etzold Liz;04:33:10 +Flury Alois;04:51:02 +Frei Martin;02:46:47 +Geerdsema Jan;04:32:20 +Gloor Ruedi;04:20:10 +Grimm Schädel Christia;03:49:06 +Hauck Rene;03:28:20 +Haupt Hanspeter;04:20:51 +Josty Adrian;04:59:25 +Wieser Andreas;04:59:26 +Heer Andreas;03:50:32 +Hegner Connie;03:51:46 +Huerlimann Markus;03:33:33 +Jordi Christine;03:56:35 +Juhasz Bruno;03:45:55 +Kämpf Kurt;03:57:28 +Keller Andreas;03:53:52 +Keller Markus;03:14:12 +Kern Jean-Pierre;03:55:37 +Läderach Peter;03:35:32 +Landolt Fredi;03:57:25 +Lörtscher Robin;03:29:19 +Lutz Peter;04:39:56 +Mächler Anton;03:47:14 +Manz Thomas;03:33:38 +Meier Kurt;04:04:48 +Meier Philipp;03:32:31 +Meile Urs;04:10:32 +Melchior Ursula;03:46:13 +Münzenmaier Samuel;02:58:03 +Nägeli Oliver;03:45:17 +Niederberger Martin;03:55:45 +Pfenniger Peter;03:55:37 +Rhyn Andy;03:28:54 +Rieder Marcos;03:08:11 +Rüeger Urs;03:19:30 +Schreiber Christian;03:27:36 +Sobaszkiewicz Markus;04:06:39 +Sonderer Marcel;03:11:32 +Spielmann Hans-Peter;03:44:30 +Steiner Ueli;03:56:34 +Stöckli Silvia;05:10:36 +Straube Wolfgang;03:42:04 +Zielmann Sarah;03:59:32 +Suter Thomas;03:21:52 +Sutter Fritz;04:23:39 +Tschopp André;03:25:06 +Utzinger Reto;03:24:43 +Waltl Günther;03:28:29 +Wartmann Matthias;03:42:03 +Wegmueller Marc Simon;03:15:37 +Wegmüller Rolf;03:15:38 +Widmer Lucas;02:46:06 +Bugmann Daniel;03:15:19 +Dos Reis Romeo;03:34:55 +Meier-Pfosi Marlies;05:11:40 +Schmid Beat;04:19:03 +Sicurelli Ernesto;03:26:25 +Ulrich Beat;03:25:27 +Bossi Daniel;04:04:24 +Coradi Reto;03:38:27 +Kaufmann Reto;05:10:43 +Margreth Pascal;04:24:04 +Schaffner Lukas;03:35:23 +Schatt Hansjörg;04:09:32 +Schmid Ernst;02:51:07 +Soland Benjamin;03:31:59 +Meier Stefan;03:33:03 +Herzog Margrit;03:57:45 +Bartholdi Roger;04:01:38 +Lauber Gerold;03:48:01 +Abegg Monica;03:56:33 +Abeguile Juliette;03:33:44 +Aerne Rusterholz Susan;04:05:15 +Allemann Olivia;04:12:36 +Altmann Béatrice;03:31:22 +Altwegg Fehr Susanne;03:44:40 +Angst Nicole;03:58:32 +Antener Doris;03:47:33 +Arena Michaela;04:12:27 +Arlitt Nicole;04:10:56 +Arnold Corinne;03:28:30 +Arnold Ruth;03:24:42 +Bächle Karin;03:47:12 +Bachmann Nicole;03:47:13 +Ballamann Gudrun;04:10:45 +Bannier Elsbeth;03:54:42 +Bättig Ruth;03:45:44 +Bebi Mirjam;02:58:12 +Béguin Sandrine;04:21:05 +Belk Brigitte;04:04:51 +Bellgardt Sabine;04:21:17 +Bennett Nicole;04:53:22 +Benz Regula;03:30:19 +Berchtold Marion;03:45:48 +Berchtold Silvia;05:00:58 +Bienz Sabrina;03:54:02 +Bissig Katharina;03:57:07 +Blaeser Manelle;04:05:37 +Blatter Priska;04:16:43 +Boehm Martina;03:58:38 +Bolfing Petra;03:09:24 +Boos-Hautmann Andrea;04:16:17 +Borsatti Luciana;04:39:50 +Bosshard Erika;04:21:35 +Bottesi Elisabeth;04:11:56 +Brandenberg Monika;03:41:55 +Brändle Cindy;04:07:53 +Brülisauer Marianne;03:09:16 +Brunner Jeannette;03:38:03 +Bucher Yvonne;04:04:11 +Buchser Marie-Louise;04:27:44 +Buehler Luzia;03:37:34 +Bugmann Franziska;04:04:06 +Buholzer Marlis;04:14:25 +Burgardt Sonja;03:53:53 +Bürge-Stahel Ursula;04:21:06 +Busque Stephanie;04:16:09 +Calic Manda;04:01:57 +Camathias Heidi;04:25:21 +Casagrande Ruth;03:47:47 +Cathomas Yvonne;04:33:50 +Cavelti Gaby;03:32:08 +Claivaz Patricia;04:57:11 +Clark Joan;04:09:41 +Clematide Renate;03:12:23 +Cotroneo Laura;04:40:20 +De Cristofaro Teresa;04:31:18 +Debély-Escher Raphaela;03:56:36 +Deck-Meier Rosie;04:00:35 +Diethelm Melanie;04:43:21 +Dober Karin;03:41:48 +Dollerup Brit;03:34:36 +Dossenbach Laura;03:48:51 +Ducrey Marie-Claire;03:37:40 +Ecoffey Liliane;04:26:32 +Emmenegger Sandra;03:52:23 +Emmenegger Tanja;03:42:35 +Engeler-Zöllig Monika;04:01:55 +Erismann Liliane;04:09:57 +Eyerman Jennifer;03:27:32 +Addea Jasmin;03:43:23 +Fikarova Olga;04:14:49 +Fischer Marion;04:05:54 +Fischknecht Sibylle;03:30:21 +Föller Fiona;04:27:12 +Forrer Brigitte;03:43:13 +Forster Kundert Helen;05:02:18 +Frankiny Denise;03:13:41 +Franz-Pfetzer Ursula;05:14:57 +Fratila Ana-Maria;04:06:41 +Frei Melanie;03:54:41 +Frei Miriam;04:43:31 +Frey Gaby;03:41:35 +Frey Viola;04:03:08 +Frey-Martins Eli;03:58:10 +Friederich-Baur Marian;04:37:22 +Friedli Gertrud;04:33:34 +Fritzsche Sandra;04:01:35 +Fuchs Katharina;04:16:29 +Fuchser Karin;04:01:53 +Furrer-Theiler Imelda;03:49:14 +Gagliardi Ulla;04:09:39 +Gahlinger Chantal;03:58:12 +Gähwiler Anita;05:13:12 +Gähwiler Liselotte;03:16:54 +Gass Regina;04:01:53 +Gattiker Irene;04:11:34 +Gautschi Caroline;04:13:10 +Gerth-Zellweger Trudi;04:12:03 +Glaus Barbara;03:11:55 +Gleises Alice;04:11:29 +Gloor Isabelle;03:57:49 +Goeree Michelle;04:57:30 +Gomringer Nicole;03:12:56 +Graf-Ganz Ursula;04:26:49 +Graule Karin;03:56:29 +Grosswiler Katrin;04:01:13 +Guenat Raquel;03:45:58 +Häcki Florence;03:22:38 +Hägle Monika;04:49:05 +Hannay Jackie;03:48:34 +Hartmann Hanne;04:05:53 +Haudenschild Barbara;04:11:32 +Häusermann Anya;03:41:17 +Häusler Eva;03:39:02 +Hayoz Catherine;03:40:32 +Hefti Eliane;04:23:02 +Heim Tina;03:33:22 +Heiniger Daniela;03:44:44 +Heiniger Elsbeth;04:06:59 +Hersberger-Gsell Vera;03:58:03 +Herwig Marie-Therese;04:11:08 +Hoffmann Dorothee;04:08:14 +Hofmann Judith;03:39:20 +Höglund Mikaela;02:59:13 +Hotz Sigrist Gabriela;04:03:19 +Huber Alice;03:45:15 +Huber-Muhl Prisca;03:27:03 +Hübscher Sara;04:06:30 +Huclova Sonja;03:28:29 +Hunn Erika;03:47:11 +Huwyler Renate;04:56:46 +In-Albon Wampfler Tina;02:54:59 +Inglin Heidi;04:08:25 +Insley-Darling Janet;04:01:18 +Issakainen Vilma;03:59:57 +Jeker Sabine;03:40:53 +Jenny Esther;03:26:56 +Jenzer Nina;04:33:15 +Jokl Franziska;05:15:39 +Jud Daniela;04:10:28 +Käch Silvia;04:03:47 +Kaderli Iris;04:15:39 +Kaetzke Philomela;03:48:35 +Kaltenrieder Margrit;03:25:23 +Kamm Heidy;04:56:29 +Käppeli Helena;03:59:34 +Karremans Jeannette;03:33:33 +Keller Jacqueline;03:09:10 +Keller-Noser Nicole;04:21:59 +Kellerhals Luzia;03:30:14 +Kern Beatrice;04:32:41 +Keup Verena;04:34:54 +Kirchhof Frizzi;03:57:05 +Kleinlaut Karin;03:56:20 +Knuchel Patrizia;03:13:21 +Koch Tamara;04:00:47 +Kramer Jutta;03:57:31 +Krebs-Stickel Sandra;04:03:03 +Krummenacher Brigitte;04:00:52 +Kubli Rebekka;04:07:21 +Küffner Marianne;03:36:19 +Kuhn Patricia;04:05:17 +Kunz Sibylle;03:50:46 +Lacher Priska;03:22:38 +Landolt Bernadette;03:54:31 +Lanner Regina;04:20:58 +Lehner Christa;04:44:59 +Leitmann Petra;04:13:02 +Lewis Anne;05:07:56 +Litzius Denise;04:16:19 +Long Lisbeth;05:28:42 +Loretz Manuela;03:27:22 +Lüthi Lisa;03:52:40 +Maag-Hegetschweiler Ch;03:32:15 +Maggini Esther;04:35:40 +Marti Rosmarie;04:46:36 +Matz Brigitte;03:27:20 +Mazzolini Mbenda Betti;04:02:53 +Meier Gisela;04:20:56 +Meier Isabel;03:54:29 +Meier Jessica;03:47:11 +Allemann Isabelle;03:20:13 +Meister Franziska;03:43:43 +Messmer Monika;04:43:05 +Metzger Hübi;03:56:50 +Michel Irène;04:40:33 +Mlekusch Sabine;04:57:10 +Möckli Ruth;04:55:14 +Modoux Liliane;04:33:28 +Mühldorfer Annette;03:58:49 +Morf Doris;04:46:54 +Mosetti Michelle;04:21:30 +Muggleton Belinda;04:18:22 +Bärtsch Edith;03:40:14 +Müller Jennifer;03:29:58 +Müller Sandra;03:31:42 +Näf Esther;04:04:42 +Nakanishi Yoshiko;04:26:51 +Nardiello Selina;03:43:57 +Neidhart Jana;03:36:45 +Nelson Christen;03:24:28 +Baumann Flavia;03:50:36 +Neri Claudia;03:52:57 +Neustadt Rita;03:35:23 +Niederberger Fränzi;03:54:18 +Niederberger Trudi;04:39:30 +Niederhauser Dami;04:14:27 +Nielsen Birgitte;03:44:22 +O'Neill Annemarie;04:10:48 +Odenbach Mary;03:50:44 +Oneta Cristina;04:07:10 +Ossowska Maria;03:57:34 +Padberg Barbara;03:46:42 +Paganini Chiara;04:16:43 +Praz Maria;04:26:42 +Pulver Barbara;03:21:09 +Purtschert Amanda;04:07:03 +Rada Marianne;03:51:41 +Rakic Silvia;04:25:10 +Rechsteiner Sandra;03:23:42 +Recine Lisa;04:33:10 +Reinhold Irene;03:57:05 +Renggli Conny;04:23:09 +Reusser Christine;04:08:57 +Rhomberg Birgitta;03:29:49 +Richards Shola;05:05:02 +Riga Petra;03:30:53 +Ringger Christa;04:14:44 +Rippstein Hilde;04:02:11 +Riva Anita;04:57:03 +Rosenast Andrea;03:33:20 +Rosenberger Thekla;04:03:36 +Rossi Marianne;03:43:50 +Roth Barbara;04:38:53 +Rüeger Riikka;04:10:10 +Rüegg Kim;04:11:34 +Ruesch Caroline;04:28:02 +Russenberger Doris;03:13:34 +Russo Andrea;04:41:49 +Rutishauser Cornelia;04:28:46 +Saly Katrin;03:31:23 +Schaub Andrea;04:08:39 +Scheiwiller Margrit;05:03:02 +Schenkel Gabriela;03:34:02 +Schenkel Karin;04:13:08 +Scherer Cornelia;04:27:02 +Schild-Leuthold Juliet;02:57:44 +Schneider Anne;04:01:13 +Schneider Monica;03:59:27 +Schölly Deborah;04:39:56 +Schudel Jacqueline;04:27:00 +Schülin Sabina;03:47:19 +Schwander Gabriela;04:14:55 +Schwarzentruber Cornel;03:45:09 +Schwegler Nicole;03:42:48 +Schwerzmann Michèle;03:17:01 +Seiler Sonja;03:09:36 +Seitz Judith;04:00:13 +Senn Claudia;03:45:32 +Siegenthaler Brigitte;03:48:24 +Siegfried Anita;04:14:01 +Sigrist Jeannette;03:36:39 +Simmen Sabine;03:24:12 +Skreckova Denisa;03:51:43 +Smith Sarah;03:52:56 +Sobrino Karen;03:26:49 +Stadler Eufemia;04:16:10 +Stäger Marianne;03:46:56 +Stampfer Brigitte;04:19:50 +Steiger Birgit;04:31:36 +Steimann Dana;04:48:23 +Steiner Marianne;03:12:17 +Stettler-Brotschi Clau;04:13:17 +Stich Isabelle;04:11:38 +Stöckli Jolanda;04:04:16 +Stöckli Mara;03:46:21 +Streule Eliane;04:28:34 +Strub Kunz Jrène;03:56:17 +Studer Cornelia;03:29:55 +Surber Tanja;03:33:44 +Symonds Rebecca;03:54:16 +Szlavik Vanda;03:52:35 +Tan Siew;04:40:39 +Tellefsen Tina;03:28:51 +Theiler Nadia;04:04:38 +Tholen Anna;03:54:26 +Thoma Erika;03:53:09 +Tiebout Isabelle;03:53:32 +Tietz Julia;03:16:22 +Toledano Marisol;04:12:36 +Toumani Jenna;03:41:53 +Tricarico Gabi;03:07:35 +Trovato Carmela;03:48:41 +Ulrich Katharina;03:47:35 +Urbach Deborah;04:27:53 +van Rijs Ursula;04:57:03 +Vasilache Cristina;03:49:57 +Vermeulen Helene;04:37:14 +Villiger Sonja;04:04:59 +Vocke Daniela;04:27:03 +Voegeli Nico;03:55:29 +Voigt Cornelia;04:29:36 +Volfschütz Simona;03:43:40 +von Mandach Annette;03:40:33 +von Niederhäusern Cris;04:39:56 +Vopat Johanna;04:08:22 +Wachter Karin D.;03:38:58 +Wackernagel Britta;04:23:01 +Walder Darja;03:57:22 +Wartenberg Alexandra;04:39:44 +Washington Caroline;04:36:48 +Weber Tosca;04:33:11 +Weiersmüller Jacquelin;04:10:53 +Weiler Katja;04:42:27 +Welbergen Louisa;03:08:03 +Werner Stephanie;03:40:08 +Werthmüller Gabriele;03:09:45 +Wettstein Edith;04:19:31 +Wey Mirjam;04:16:23 +Widmer Monika;03:22:33 +Wiedmer Christine;04:09:04 +Wild Irene;04:40:20 +Winklehner Anna;03:50:53 +Wittwer Gertrud;04:08:44 +Wyler Karin;03:35:51 +Wyss Ingrid;04:44:13 +Wyss Sonja;04:07:25 +Zaugg Sibil;03:51:58 +Zeller Seline;03:47:18 +Zenger Daniela;04:26:55 +Ziegler Isabella;03:41:15 +Zingg Karin;03:16:04 +Zuber Helen;03:36:41 +Zuber Sabrina;04:35:32 +Zwicker Selinda;03:26:18 +Brazerol Carmen;03:37:38 +Bucher Sylvie;03:51:22 +Freiburghaus Rahel;03:53:47 +Götsch Helen;03:51:34 +Güntzel Sara;03:25:25 +Gurtner Susanne;03:52:40 +Hauser-Ruckli Cornelia;03:39:46 +Heimbs Anette;04:36:24 +Inauen Fränzi;03:14:21 +Jaggi Theres;04:55:33 +Janser Susanne;04:13:22 +Jörg Regina;03:43:22 +Kern Alexandra;04:41:12 +Kolhaupt Tanja;04:26:48 +Landolt Christina;04:12:17 +Lienhard Sonja;03:30:23 +Müntener Brigitte;03:55:51 +Ochieng Pernet Awilo;04:17:59 +Peer Sandy;03:31:59 +Polinelli Christina;03:34:40 +Queralto Cristina;03:50:26 +Ramsay Julie;04:54:41 +Röthisberger Céline;04:21:20 +Rüegger Andrea;04:31:24 +Rütimann Gabriela;03:51:33 +Scheitlin Julie;04:11:09 +Schiess Gabriela;03:23:41 +Schillig-Planzer Stefa;03:04:46 +Schlegel Alexandra;03:24:22 +Schmid Catherine;03:56:28 +Schmid Conny;03:08:27 +Schrott Andrea;03:53:30 +Schumacher Sandra;03:53:25 +Senn Brigitte;04:09:12 +Sommer Daniela;03:04:31 +Sonderegger Tanja;03:20:13 +Stalder Caroline;03:44:15 +Steiner Denise;04:48:42 +Stoppiello Banu;04:27:05 +Stucki Sonja;03:27:03 +Tambini Irma;03:50:24 +Tangorra Sabrina;04:21:32 +Tschannen Nathalie;04:27:15 +Wiederkehr Denise;04:41:12 +Zähnler Bircher Silvia;04:27:22 +Zanetti Windegger Lara;03:26:56 +Zehnder Corinne;04:42:04 +Antila Heidi;05:04:33 +Flockerzi Martina;04:03:55 +Kieran Rose;04:05:28 +Merz Beatrix;03:40:06 +Minard Delphine;04:14:28 +Schoch Katharina;04:12:52 +Steiger Susanne;04:12:15 +von Rotz Madeleine;03:58:13 +Fischer Muriel;04:33:00 +Köpfli Stephanie;03:49:57 +Walser Hans;03:56:38 +Abderhalden Claude;03:41:42 +Abdo Osman;02:58:00 +Abegglen Timon;03:58:34 +Abgottspon Benjamin;04:50:43 +Achermann Alois;03:58:12 +Ackermann Michael;03:18:34 +Adler Ruedi;03:31:56 +Adler Sandro;04:27:06 +Aebersold Thomas;04:14:11 +Aebi Hansjörg;04:12:29 +Aeby Pascal;03:48:08 +Aegerter Michael;04:45:55 +Aeschlimann Martin;03:49:39 +Affentranger Fernando;03:58:24 +Agostini Bernardo;03:51:52 +Ait Bahassou Mohamed;03:05:18 +Akeret Martin;02:59:54 +Akermann Elmar;04:13:06 +Albers Vincent;03:14:20 +Albin Basil;04:10:33 +Albin Norbert;03:56:43 +Albin Silvan;04:10:34 +Alder Daniel;04:41:19 +Alder Ernesto;03:59:27 +Alfassi Sami;03:48:59 +Allemann Patrick;04:18:55 +Alpiger Patrick Michae;03:55:21 +Amacker Hugo;03:42:20 +Ambühl Dany;04:33:00 +Amstalden Guido;03:50:47 +Amstutz Jean-Luc;03:19:09 +Andenmatten Cyril;03:43:33 +Anderegg Kurt;03:54:38 +Andres Peter Thomas;03:20:56 +Andrews John;03:33:53 +Anneler Albert;04:59:47 +Antweiler Ralf;03:13:22 +Arbenz Beat;03:42:12 +Aretano Aldo;04:30:15 +Arm Ueli;03:32:38 +Arnold Philipp;02:41:46 +Artan Ayhan;03:16:46 +Aurag Daniel;03:45:18 +Azzato Remo;04:20:56 +Bäbler Ruedi;04:32:46 +Bachmann Markus;03:01:39 +Bachmann Markus;03:56:19 +Bachmann Rolf;03:49:30 +Bächthold Jj;04:20:38 +Baco Uwe;03:27:34 +Bader Sandro;03:45:03 +Badertscher Christian;03:40:18 +Badorff Cornel;03:27:32 +Baer Tobias;03:16:28 +Baeriswyl René;04:07:47 +Bahl Alexander;04:26:05 +Bahner Bertram;03:20:11 +Bako Barnabas;04:34:08 +Bamert Rafael;03:32:01 +Bangerter Adrian;03:08:16 +Bannier Marcel;03:39:04 +Bänninger Andy;03:17:49 +Bärtsch Jonas;04:26:32 +Baschera Matteo;03:39:47 +Basler Michael;03:45:33 +Bauer Jürgen;04:17:56 +Bauer Mathias;03:35:49 +Bauert Stephan;03:20:28 +Baumann David;03:13:50 +Baumann Reto;03:23:53 +Baumgartner Benjamin;03:11:34 +Baumgartner Christoph;03:02:43 +Colombani Jonathan;03:02:45 +Baumgartner Philipp;03:14:08 +Bäumler Werner;03:59:00 +Baumstark Achim;03:24:55 +Baur Sigrist Dieter;04:00:33 +Bayer Claudio;04:13:54 +Bebi Michael;04:30:52 +Beeler Karl;02:48:41 +Beeli Gian;04:27:39 +Beer Patrick;04:22:37 +Beglinger Michael;04:27:45 +Beglinger Urs;03:18:09 +Belk Thomas;04:26:06 +Benfatto Alessandro;03:42:59 +Benz Andy;02:48:55 +Berg Christian;03:27:36 +Berger Gedeon;04:12:06 +Berger Olivier;03:44:03 +Berger Walo;04:08:34 +Bernet Heiri;03:03:49 +Bernet Rolf;03:51:10 +Bernhard Daniel;03:37:57 +Bernhardsgrütter Pitsc;03:27:47 +Bernotto Stefano;03:55:01 +Bertozzi Silvio;04:25:58 +Berz Fabian;03:26:17 +Betschon Stefan;03:45:15 +Bettini Enrico;03:49:03 +Biber Alex;03:40:45 +Bichler Christoph;03:31:24 +Biedermann Daniel;03:03:17 +Bieler Walter;03:23:17 +Bieri Walter;03:20:22 +Neiger Lukas;03:24:45 +Bigler Gilles;03:45:09 +Billeter Jürg;03:33:56 +Binder Walter;03:55:38 +Binggeli Hansjörg;04:26:21 +Birbaum Patrice;03:35:36 +Birrer Hanspeter;04:38:21 +Bischofberger Guido;02:54:27 +Bissig Hans;03:34:42 +Bissoli Benno;03:44:17 +Bitterlin Stephan;04:22:11 +Blaser Hanspeter;04:18:12 +Blaser Sascha;03:14:32 +Blattmann Heiner;02:59:53 +Bleiker Harry;04:01:36 +Blöchlinger Fabian;02:58:56 +Blumer Philipp;03:28:15 +Blumer Renato;04:36:55 +Blumer Sascha;03:43:56 +Bodenmann Andreas;02:55:28 +Bodenmann Hanspeter;03:40:22 +Bodmer David;04:25:48 +Bohnet Christophe;03:04:42 +Bohnet Nicolas;03:04:07 +Boller Simon;03:45:47 +Bolli Kilian;03:30:05 +Bolliger Bruno;04:28:09 +Bollinger Beat;03:39:58 +Bolt Thomas;02:55:14 +Bommer Hans;04:15:28 +Böniger-Prüfer Michael;03:47:21 +Bonner John;04:16:28 +Bonvin Jean-Charles;03:04:59 +Bonvin John;03:59:43 +Born Leo;03:29:51 +Bortolin Sergio;04:21:40 +Bosshard Stefan;03:23:59 +Bottecchi Diego;03:32:12 +Boulter Robert;02:59:49 +Boutellier René;02:41:54 +Bozi Imre;03:20:05 +Braathen Einar H;04:57:19 +Bracher Ueli;03:28:21 +Brachetto Pascal;03:45:04 +Brändli Jakob;04:08:40 +Brändli Urs-Beat;03:09:05 +Brandt Maximilian;03:58:13 +Brandt Simppa;03:15:55 +Brecht Jens;03:37:16 +Breimer Mans;03:40:50 +Bressa Massimo;03:46:41 +Brotz Sandro;03:42:38 +Bruderer Daniel;04:27:11 +Brühwiler Rolf;02:59:26 +Brüllmann David;03:57:33 +Brunhart Jakob;03:16:31 +Brunner Alfred;03:29:59 +Brunner André;03:21:22 +Brunner Jan;03:36:53 +Brunner Johannes;02:56:57 +Brunner Reinhard;04:23:31 +Bruno Emanuele;04:12:47 +Bruns Wolfgang;03:33:18 +Brunschweiler Marco;03:18:51 +Bucher Johannes;03:10:20 +Büchler Fredi;05:21:01 +Buchli Urs;04:52:55 +Buchser Thomas;03:41:24 +Buck Andreas;04:32:20 +Büeler Gerry;03:36:59 +Bügükkaya Abuzer;03:14:12 +Bühler D.J Wale;03:59:32 +Bühler Raphael;03:20:21 +Bührer John;03:43:03 +Bünter Jean Pierre;04:15:52 +Burger Willi;03:51:02 +Bürgi Simon;03:09:10 +Bürgis Stefan;03:28:37 +Burkhard Beat;02:39:47 +Burkhard Roger;03:45:58 +Burkhardt Ralf;03:46:35 +Burns Kevin;03:51:19 +Burri Christian;03:24:58 +Buser Thomas;04:05:20 +Buslau Michael;04:33:12 +Bussinger Manuel;04:32:51 +Bussmann Oliver;02:58:43 +Butty Stéphane;02:59:31 +Caflisch Amedeo;03:14:34 +Caillet Cédric;03:21:40 +Calame Louis;03:35:20 +Calcagni Carlo;03:52:42 +Calendo Ciro;04:32:47 +Camathias Ulrich;05:21:11 +Camenisch Glauco;03:25:24 +Camenzind Markus;03:00:07 +Caprez Andrea;02:54:43 +Carbonara Toni;04:16:44 +Carbotti Franco;03:35:47 +Caretta Claudio;04:12:04 +Carminati Walter;03:51:24 +Caruso Renato;04:29:06 +Casanovas Ramon;03:24:06 +Castella Vincent;03:13:41 +Castiglioni Luca;03:47:45 +Casto Salvatore;05:25:47 +Caudwell David;04:36:27 +Cavegn Werner;03:45:44 +Caviezel Andrin;03:41:56 +Ceccarini Massimo;03:26:18 +Ceriani Angelo;04:25:25 +Cester Marc;03:03:44 +Chapman Brian;04:14:02 +Chassot Pierre-André;03:43:24 +Chatila Rico;03:26:02 +Chatzichrisafis Nikos;03:33:49 +Chevalley Raymond;04:22:45 +Chiller-Glaus Michael;03:53:35 +Choffat Yves;03:17:39 +Choukroun Daniel;02:45:27 +Christ Tobias;03:30:40 +Christiner Mario;02:48:10 +Clavadetscher Georg;04:23:21 +Clesle Hanspeter;04:32:43 +Cloetta Andri;03:41:44 +Collenberg Reto;03:39:01 +Colvin Graham;03:20:35 +Conrad Alex;04:29:04 +Cooke Sam;03:28:23 +Corbisiero Salvatore;03:34:25 +Cortelezzi Paolo;03:40:05 +Cottet Laurent;03:23:56 +Crespo Ricardo;04:49:35 +Crettenand Olivier;04:25:31 +Crisafulli Sebastiano;03:26:57 +Curda Josef;04:37:56 +Curda Tobias;03:40:33 +Cusack John-Paul;03:38:38 +D'Amato Gionni;03:52:25 +Da Col Claudio;03:31:27 +Da Costa Fernando;03:05:47 +Daly Paul;04:21:31 +Dambach René;03:22:06 +Danz Martin;03:52:38 +Däpp Willi;04:17:14 +Dariz Michele;03:51:17 +Daschmann Volker;04:49:31 +De Faria Patrick;04:43:32 +De Martin Marco;02:49:12 +De Murga John;04:58:21 +De Plinval Pierre-Loui;03:41:55 +De Toffol Simon;04:14:18 +De Wit Guido;03:52:16 +Degen Lukas;02:58:50 +Della Badia Antonio;03:24:35 +Delley Alain;03:20:38 +Dentskevich Andrew;03:27:49 +Dessimoz Philippe;03:09:13 +Desteffani Jörg;03:09:27 +Dhom Michael;03:03:48 +Di Giorgio Benedetto;04:04:34 +Di Mauro Philipp;04:01:57 +Diallo Ousmane;03:23:35 +Dick Markus;03:21:35 +Diener Erwin;02:55:16 +Diethelm Karl;03:53:47 +Dietrich Rainer;03:00:12 +Dillner Tomas;03:03:47 +Diviney Craig;03:20:23 +Döbeli Philipp;03:05:55 +Dober Meinrad;03:38:30 +Dooney Barry;04:44:52 +Doubman Jay;02:57:42 +Downey Denis;03:53:09 +Drayton Jeffrey;03:43:02 +Dreier Daniel;03:51:25 +Dreier Matthias;03:18:07 +Dübi Roland;04:05:24 +Dubugnon Christian;03:27:29 +Dudle Cornel;03:35:12 +Duerr Hampi;03:36:35 +Dummermuth Jürg;03:09:28 +Düringer Michael;03:39:12 +Durrer Daniel;04:27:31 +Dürst Michael;03:12:56 +Duschl Martin;04:25:17 +Dütschler Joel;03:06:38 +Eberhard Thomas;04:05:07 +Eberle Paul;03:44:00 +Eckard Christophe;03:47:58 +Eckert Clemens;03:24:09 +Eckhardt Jürg;03:42:48 +Eggenschwiler Bernhard;02:44:49 +Eggenschwiler Christop;02:59:47 +Eggenschwiler Denis;03:04:59 +Egidio Arturo;03:29:56 +Egli Martin;03:47:10 +Egli Peter;04:21:32 +Egli Sven;03:27:58 +Eiche Francis;04:06:02 +Eichelberger Pascal;04:01:48 +Eichhorn Beat;03:16:51 +Eisenlohr Frank;03:21:41 +Eisner Hannes;03:28:45 +Ellinger Thomas;04:11:31 +Elmer Markus;03:07:08 +Emert Frank;04:29:08 +Eppler Beat;03:09:38 +Erb Peter;03:10:21 +Erb Thomas;03:57:37 +Erian Tom;02:57:11 +Ernst Andreas;03:38:39 +Ernst Andreas;03:47:40 +Ettlinger Claudius;03:49:48 +Eugster Marcel;02:59:33 +Eugster Tobias;03:44:23 +Faccoli Gabriele;03:37:58 +Faerber Philipp;02:50:59 +Fahrni Andreas;03:22:49 +Falconer John;03:49:34 +Falcy Yves-Alain;04:23:41 +Falter Harald;03:19:52 +Fanger Adrian;04:11:25 +Fankhauser Martin;03:36:21 +Farner Kurt;04:41:50 +Farner Martin;03:51:54 +Farner René;03:29:55 +Farner Roger;03:51:55 +Fasel Samuel;03:49:40 +Fasnacht Markus;03:17:36 +Fässler Christoph;03:57:08 +Fässler Lukas;04:01:23 +Fatio Didier;03:16:59 +Fattorini Leonardo;02:54:53 +Fausch Jörg;03:42:54 +Fehr Adrian;03:32:24 +Fehr Harry;03:09:24 +Fehr Kurt;04:25:06 +Fehr Matthias;03:34:08 +Feigl Christopher;03:29:22 +Fejes Stefan;03:20:33 +Fejry Khalil;03:31:07 +Felchlin Walter;04:18:13 +Felder Oliver;03:57:32 +Felder Willhelm;04:27:39 +Fernandes Casimiro;03:04:51 +Fernandez Antonio;03:22:54 +Ferraiuolo Salvatore;03:40:18 +Ferrini Mattia;04:13:05 +Fetzer Roland;03:00:23 +Fior Guglielmo;02:59:38 +Fischer Cosy;04:26:53 +Fischer Felix;03:34:08 +Fischer Kai;02:43:15 +Fischer Oliver;03:10:50 +Flach Roland;03:28:52 +Fleischer Thomas;03:19:07 +Fleischhacker Cris;04:22:00 +Fleischmann Rene;03:37:43 +Fleischmann Sascha;03:28:45 +Flueckiger Joerg;03:55:45 +Flum Michael;03:29:34 +Föllmi Daniel;02:47:15 +Folly Olivier;03:08:24 +Fontana Patrick;04:49:09 +Forlesi Maurice;04:00:31 +Forney Jean-Francois;03:50:11 +Forrer Andi;03:57:35 +Forrer Markus;03:43:13 +Forrer Thomas;03:26:44 +Forster Urs;03:56:10 +Fort Pierre-Andre;03:43:23 +Fortgens Erik;03:12:57 +Foster Cheran;04:09:16 +Foster Kevin;03:39:59 +Fraefel Beat;03:39:42 +Fraefel Mario;03:42:55 +Franck Andreas;03:19:31 +Francois Herve;03:56:16 +Frehner Jakob;05:29:09 +Frei Christoph;03:34:04 +Frei Marc;03:37:59 +Frei Martin;02:44:02 +Frei Othmar;03:59:15 +Frei Pascal;03:34:47 +Frei Thomas;03:28:06 +Freisler Peter;04:06:40 +Fretz Willi;04:35:35 +Frey Dominik;04:00:28 +Frey Heini;03:56:30 +Frey Stefan;03:51:14 +Frieden Thomas;02:32:25 +Friederich Mathias;03:26:38 +Friedli Jürg;03:39:09 +Frischknecht Fritz;03:27:40 +Fritsche Lukas;03:29:27 +Fritschi Michael;03:19:32 +Fuchs Christian;02:58:20 +Fuchs Heinz;04:23:57 +Fuchs Markus;04:28:36 +Fuchs Peter;04:31:50 +Fürer Karl;03:30:37 +Furrer Felix;03:38:12 +Fürst René;03:25:04 +Fusco Carlo;03:20:24 +Gabathuler Tobias;03:35:08 +Gabriel Daniel;03:54:27 +Gächter Roland;03:22:01 +Gadient Hans;03:53:31 +Gähwiler Hanspeter;03:03:34 +Galliker Philipp;03:28:25 +Gambino Dario;04:12:56 +Gameiro Antonio;02:56:40 +Gantenbein Silvan;04:45:52 +Gartmann Urs;03:34:59 +Gasser Marc;03:44:28 +Gast Fritz;03:36:32 +Gattiker Roger;04:12:59 +Gaussmann Andreas;02:49:19 +Geiger Christian;03:30:05 +Geissbühler Andreas;03:12:39 +Geissmann Walter;03:27:55 +Genné Daniel;03:44:54 +Gerber Bernhard;04:11:50 +Gerber Roger;02:49:17 +Gerber Thomas;03:14:33 +Gerlof Wolfram;04:36:04 +Germain Jean-Pierre;05:05:54 +Germann Pascal;03:24:18 +Gerster Richard;03:57:09 +Gertsch Marcel;02:52:23 +Gertsch Ralph;04:04:17 +Gertsch Silvan;04:09:01 +Gertschen Mike;04:14:45 +Gex-Collet Pierre-Jose;03:01:05 +Geyer Marc;04:48:45 +Gibel Richard;03:47:26 +Gigandet Sylvain;03:01:43 +Giordano Lorenz;03:33:03 +Girsberger Martin;03:49:07 +Gisler Beat;02:57:43 +Gisler Jan;03:05:52 +Gisler Karl;02:46:40 +Glässner Marcel;03:58:25 +Gleitz Robert;03:29:13 +Gloden Alain;03:42:54 +Gnos Renato;03:51:49 +Gomez David;04:38:57 +Gorgerat Jean-Philippe;03:10:36 +Gosteli Hansjörg;02:56:59 +Gosteli Oliver José;03:07:01 +Goto Fumihiko;03:28:24 +Gottwald Martin;03:53:30 +Götz Markus;03:59:00 +Grab Manfred;03:25:34 +Graber Marcel;03:10:08 +Graf Daniel;03:48:08 +Graf Klaus;03:29:26 +Granges Thierry;03:08:17 +Grausgruber Johannes;04:21:27 +Greil Maeck;03:13:35 +Greter Arno;04:19:22 +Grisoni Gérald;03:50:38 +Gröbli Adrian;02:42:11 +Grossmann Frank;03:06:51 +Grubenmann Hens;03:42:41 +Gruber Bernhard;03:48:54 +Grüebler Thomas;04:28:45 +Grujcic Dejan;03:59:53 +Grundmann Oliver;03:56:49 +Grüter André;02:58:56 +Grütter Matthias;03:04:15 +Gubler Daniel;03:23:50 +Gubler Peter;05:00:05 +Gückel Christian;03:18:41 +Gudehus Kim;03:34:02 +Guex Stéphane;03:07:06 +Gugelmann René;03:23:28 +Guidon Andri;03:58:33 +Guignard Philippe;03:48:33 +Guillet Marc-Antoine;03:42:50 +Günthard Huldrych;03:44:06 +Gunti Markus;03:14:02 +Gut Daniel;03:24:08 +Gutjahr Rolf;02:58:02 +Gutzwiller Mark;03:48:16 +Gyger Peter;03:05:00 +Gygli Walter;03:03:59 +Gysin Ernst;05:07:37 +Ha Thomas;03:41:22 +Haas Ingo;03:05:20 +Hablützel Roman;02:55:57 +Hadorn Jonas;04:49:10 +Haefeli Stephan;03:48:07 +Häfliger Peter;03:28:20 +Häfliger Rolf;03:44:11 +Hähni Marcel;04:10:06 +Haider Martin;03:35:02 +Halvorsroed Jan;04:30:52 +Hänggi Gerold;04:26:09 +Häni Stephan;03:13:50 +Hannah Jeremy;03:14:27 +Hannay Mark;03:46:52 +Hansen Kjetil Hoie;03:53:12 +Hansmann Daniel;03:26:44 +Härri Markus;02:56:18 +Haselbach Stefan;03:15:22 +Häsler Daniel;03:40:47 +Hässig Ralph;03:45:53 +Hassler Daniel;03:06:09 +Haubensack André;03:54:47 +Haukaas Magnus Solli;04:02:41 +Hausammann Urs;03:35:21 +Hauser Daniel;03:01:58 +Hauser Olivier;04:01:12 +Hauser Thomas;03:00:12 +Hauser Thomas;03:05:45 +Häusermann Christian;03:10:43 +Haussner Enrico;03:10:05 +Heckendorn Felix;04:54:02 +Heer Dominik;03:49:37 +Hefti Gian-Franco;02:59:32 +Hegglin Marco;03:52:19 +Hegglin Markus;03:30:57 +Hegner Norbert;02:38:11 +Heide Uwe;04:15:06 +Heiniger Peter;03:46:31 +Heiniger Stefan;03:52:21 +Heinz Max;03:33:11 +Helbling Daniel;03:21:41 +Helbling Felix;03:48:07 +Held Michel;03:20:14 +Henle Lukas;03:49:53 +Herger Anton;04:11:29 +Herrmann Daniel;03:07:48 +Hersche Marcel;04:48:12 +Herz Daniel;03:49:14 +Hess Dieter;03:24:08 +Hess Florian;04:13:36 +Hess Michael;03:33:11 +Heyer Serge;04:13:31 +Hilpertshauser Urs;04:18:49 +Hiltbrand Martin;03:19:24 +Hirschi Alexandre;03:56:11 +Hischier Aldo;03:43:51 +Hochuli Reto;03:18:25 +Hodel Roger;03:11:15 +Hofer Cédric;05:20:20 +Hofer Erich;03:44:20 +Hofer Urs;03:57:42 +Hofmann Edy;03:54:47 +Hofmann Raymond;03:00:32 +Hofstetter Martin;03:53:26 +Hofstetter Roman;03:39:15 +Hohl Andreas;03:26:04 +Holenweger Mirko;03:28:22 +Holenweger Thomas;04:16:36 +Hölling Matthias;04:11:46 +Holub Marc;04:20:54 +Holzhüter Dirk;02:56:32 +Hommann Edgar;03:33:34 +Hookey Mark;05:08:11 +Höppli Marcel;04:18:59 +Horat Karl;03:43:51 +Hosner Markus;04:22:08 +Huber Andreas;03:55:22 +Huber Daniel;04:06:24 +Huber Erwin;04:14:35 +Huber Michael;02:59:15 +Huber Michael;04:34:43 +Huber Rolf;03:31:34 +Huber-Meier Hans;04:09:42 +Hug Jean-Pierre;03:34:08 +Hugener Thomas;04:39:42 +Hugentobler Martin;03:07:55 +Hügli Heinz;03:53:16 +Humbel Markus;04:10:57 +Hungerbühler Andreas;03:51:39 +Hürlimann Fabrizio;03:55:19 +Hurni Beat;04:33:18 +Huser Josef;04:06:01 +Huser Roland;03:21:57 +Huwiler Denis;03:23:18 +Ijland Marcel;04:06:59 +Illi Ruedi;03:28:01 +Immer Marcel;03:34:15 +Inglin Roger;04:28:05 +Ingold Marc;03:54:20 +Ingold Markus;03:25:36 +Ingold-Martinez Lukas;03:43:56 +Inzirillo Maurice;03:03:34 +Ippel Rene;03:35:14 +Iseli Ernst;04:32:16 +Isenring Martin;03:39:07 +Aeschlimann Ulrich;03:13:16 +Ismajli Alban;03:42:49 +Iten Ralph;04:28:17 +Iten Roman;03:48:06 +Jacky Florian;03:57:40 +Jacobs Reto;03:21:41 +Jäger Fabian;04:16:02 +Jäggi Andreas;03:40:32 +Jähde Oliver;03:28:19 +Janes Paul;03:29:51 +Janssen Volker;03:50:45 +Jegerlehner Andreas;05:07:38 +Jenny Florian;03:58:43 +Jimenez José Manuel;03:30:23 +Jöchle Werner;04:28:05 +Johnson Mike;03:29:50 +Joos Markus;02:40:24 +Jörgensen Martin;04:05:49 +Jöri Sandro;02:45:27 +Jornot-Schmitt Michael;04:23:37 +Joss Marc;02:57:44 +Jost Urs;03:39:56 +Jud Toni;02:52:57 +Juengling Stephan;03:43:04 +Jung Urs;03:21:31 +Jutz Josef Sepp;04:48:17 +Jutz Otto;03:14:52 +Jutz Stephan;04:16:13 +Jutzi Urs;04:54:10 +Kaderli Oliver;04:03:21 +Kägi Benjamin;04:15:08 +Kägi Christian;04:35:32 +Kägi Rolf;03:54:31 +Kaiser Walter;05:10:37 +Kälin Christian;03:28:06 +Stampfli Marc;04:23:41 +Kälin Stefan;03:07:00 +Kalt Markus;02:57:56 +Kameni Gaétan;03:28:13 +Kamer Stefan;03:08:06 +Känzig Jürg;03:57:34 +Karlen Werner;04:23:48 +Käser Hans;03:56:16 +Kastrati Albert;05:21:39 +Kathriner Reto;03:01:41 +Kätsch Hans-Martin;04:24:59 +Kaufmann Corrado;04:19:27 +Kaufmann Ferdi;03:43:39 +Kaufmann Hubert;03:04:03 +Kaufmann Michael;02:53:19 +Kehl Arthur;03:41:36 +Keller Christian;02:53:05 +Keller Michael;03:14:50 +Kellerhals Martin;02:59:54 +Kempter Christoph;03:47:44 +Kerenyi Alexander;03:24:44 +Kern Andreas;04:27:23 +Kern Daniel;03:34:17 +Kersten Udo;03:58:34 +Kessler Beat;03:22:49 +Kessler Marcel;04:36:38 +Kessler Nicolas;02:54:36 +Kessler Thomas;04:17:33 +Key Matthew;03:41:19 +Kimati Celso;04:34:19 +Kirchmayr Wolfgang;03:36:00 +Kirst Christian;03:06:06 +Kiser Felix;04:31:01 +Kistler Roger;03:26:48 +Klaus Oliver;03:04:59 +Kläusler Stefan;03:02:23 +Klingelfuss Marc;03:52:57 +Klingenberg Björn;03:11:35 +Klopfenstein Marco;03:41:02 +Klotz Matthias;02:53:23 +Klotzsch Thomas;02:57:37 +Knapp Christian;03:11:29 +Knobel Albert;03:13:01 +Koch Dominik;02:45:03 +Kock Carsten;02:59:08 +Kodlinsky Christian;04:37:31 +Kohler Marcel;05:10:40 +Kohler Pirmin;04:00:18 +Koller Gerold;02:59:33 +Kölliker Thomas;03:14:11 +Kolly Jean-Bernard;03:13:14 +Königbauer Stefan;03:43:36 +Koskela Ari;03:09:54 +Kostic Milan;03:57:18 +Koutny Zdenek;03:23:51 +Krähemann Thomas;03:40:47 +Kral Philipp;04:19:30 +Krause Rainer;03:14:44 +Krebs Marcel;03:38:13 +Krebs Markus;03:33:16 +Krebs Sandro;03:47:07 +Krebs Thomas;03:41:12 +Kreis Pablo;04:03:57 +Kreis Simon;03:19:31 +Krieger Urs;02:59:44 +Kron Marius;03:18:23 +Krucher Daniel;03:13:52 +Kubli Jürg;03:45:40 +Kuczynski Roman;03:25:29 +Kuhn Bruno;04:09:49 +Kühne Raphael;03:23:39 +Kuipers Dennis;02:42:30 +Kulendik Martin;04:29:19 +Kümin Michael;05:05:16 +Kündig Walter;03:24:59 +Küng Martin;03:56:01 +Küng Ralf;04:11:58 +Kunkel Maximilian;03:07:48 +Kunz Dieter;04:22:50 +Kunz Gerhard;03:09:07 +Kunz Markus;04:40:40 +Künzle Peter;03:16:12 +Kupny Wojciech;05:23:35 +Kushwaha Imran;03:12:23 +Küttel Lars;03:45:04 +Küttel Peter;02:58:08 +Küttel Ruedi;03:23:20 +Kyburz Reto;03:23:32 +Lagotzki Andreas;04:21:42 +Lamard David;03:36:50 +Lambert Gerard;04:02:37 +Lampart Remo;03:26:15 +Landi Marco;03:23:33 +Landtwing Martin;04:54:11 +Langenegger Christian;03:25:43 +Langridge James;03:43:34 +Lanter Guido;03:39:57 +Lanz Peter;04:07:17 +Larsson David;03:56:14 +Lasser Philippe;03:51:09 +Laticevschi Dumitru;03:35:32 +Lay Daniel;03:42:40 +Le Quang Duc;03:59:50 +Ledergerber Ruedi;04:32:10 +Ledergerber Stefan;04:32:10 +Leek Peter;02:59:20 +Lehner Jürg;03:57:37 +Leimgruber Jörg;03:15:32 +Lennon Mark Antony;04:03:01 +Lerose Luigi;03:54:21 +Leserf Gottlieb;04:38:43 +Letta Marco;03:24:07 +Leuenberger Frank;03:36:30 +Leuenberger Hans;03:54:21 +Leuenberger Michael;03:41:23 +Leuthold Bernhard;03:26:03 +Liard Gilles;03:21:25 +Lichtin Jürg;03:34:19 +Lichtsteiner Klemens;03:51:32 +Liechti Alexander;04:10:06 +Lienhard Cédric;03:06:33 +Lienhard Tobias;04:27:54 +Lindner Jack Olav;03:26:11 +Lindsay Luke;03:42:14 +Lippuner Christoph;03:49:09 +Liver Richard;03:50:15 +Lloyd William;03:35:22 +Locantore Paolo;04:27:21 +Lockyer Mark;04:01:55 +Lockyer Paul;04:30:44 +Loher Martin;03:26:47 +Lohri Philipp;02:52:34 +Loiudice Giulio;04:01:09 +Loosli Peter;03:21:24 +Lorenz Roman;03:43:56 +Lorenz Tino;03:50:20 +Louis Jvan;03:39:52 +Loye Eric;03:27:17 +Luder Beat;02:44:46 +Luginbühl Guy;03:36:20 +Lüönd Urs;03:42:14 +Lupp Bjoern;04:04:57 +Lüscher Urs;03:00:51 +Lustenberger Silvan;03:46:35 +Lusti André;03:41:12 +Lutz Hansjörg;03:47:12 +Luzzani Roger;02:57:26 +Maccioni Sandro;04:04:04 +Machowetz Alex;03:49:38 +Macquarrie Hugh;04:08:57 +Stadler Christian;02:51:48 +Magnenat David;03:26:51 +Maier Jürgen;03:47:16 +Maier Robert;03:57:45 +Maier Thomas;05:04:51 +Maier-Thurn Marcus;05:25:28 +Maillard Joel;04:23:55 +Maillefer Joël;02:45:44 +Maio Giuseppe;03:55:33 +Mani Simon;02:50:34 +Mann Felix;03:38:33 +Marchand Antoine;02:46:45 +Marchand Tony;02:52:58 +Mariuzzo Christian;03:27:13 +Marrel David;03:21:55 +Marro Alain;03:20:56 +Marta Massimo;03:24:48 +Martel Sylvain;03:34:24 +Marti Michael;03:59:00 +Martin Javier;04:33:40 +Martin Sergio;03:37:34 +Martino Giuseppe;03:32:26 +Marty Patrick;03:12:04 +Marty Philipp;04:27:48 +Matos Gilberto;04:06:32 +Matter Chrigi;04:41:38 +Mattheis Hartmut;05:12:34 +Mattle Paul;03:46:07 +Mattmüller Martin;03:45:00 +Maurer Heinz;03:15:31 +Maurer Oliver;03:25:13 +Maurer Urs;03:17:04 +Maury Laribiere Martia;03:37:06 +Mayer Jens;03:53:36 +Mccreadie Murray;02:57:57 +Mecchia Francesco;03:59:13 +Meier Andreas;03:37:11 +Meier Daniel;03:51:59 +Meier Elias;03:23:41 +Meier Franz;03:35:51 +Meier Heinz;03:35:11 +Meier Kusi;04:36:10 +Meier Marcel;03:57:58 +Meier Marcel;03:56:53 +Meier Michael;03:24:24 +Meier Patrick;03:45:18 +Meier Peter;04:17:58 +Meier Roland;03:57:37 +Meier Simon;03:09:02 +Meier Stefan;05:18:06 +Meierhans Roman;03:49:47 +Felix Manuela;04:27:31 +Meisser Reto;03:43:24 +Meister Roger;04:08:36 +Mele Piero;04:17:55 +Melzer Tino;03:01:31 +Menghini Daniel;03:40:05 +Menzi Micha;03:07:26 +Merkle Othmar;03:18:39 +Merkt Peter;02:46:41 +Merup Christian;03:11:09 +Mesaros Thomas;03:31:36 +Metger Georg;04:11:15 +Metzler Hans;03:28:18 +Meuris Richard;03:56:30 +Meyer Daniel;03:54:19 +Meyer Stephan;03:39:00 +Michel Dominique;02:53:22 +Michel Walter;03:28:38 +Michnac Ivan;03:17:43 +Milesi Luca;03:29:29 +Milic Mladen;03:50:36 +Millius Beat;03:05:01 +Misic Andrija;03:45:35 +Misiek Wiktor;04:39:59 +Mistretta Antinoo;03:22:25 +Mittelholcz Béla;02:59:34 +Moehlecke Thomas;03:38:22 +Moggi Christoph;03:07:46 +Mohring Stephan;04:14:29 +Mollitt Andrew;03:43:01 +Monachon Jean-Claude;03:48:13 +Monney Roland;03:55:16 +Montanari Matteo;03:58:59 +Monterosso Germano;04:11:41 +Monterosso Vincenzo;03:31:29 +Mordasini Niccolo;03:50:29 +Moret Eloi;04:20:10 +Morley Tim;05:01:53 +Moscetti Christian;04:23:30 +Moser Felix;03:25:57 +Moser Rudolf;03:36:15 +Mosetti Nicolas;03:07:06 +Mourtada Samir Paul;04:04:00 +Mozzi Guido;04:58:45 +Muehlethaler Adrian;03:05:54 +Muff Christian;03:17:48 +Muff René;02:59:55 +Muff Roland;03:44:48 +Müller Andreas;04:19:43 +Müller Bruno;02:59:29 +Müller Daniel;02:41:27 +Müller Hans-Jörg;03:39:32 +Müller Hansruedi;04:54:25 +Müller Heinrich;04:50:24 +Müller Lukas;02:58:48 +Müller Michael;03:27:18 +Müller Michael;04:47:25 +Müller Patrick;03:20:42 +Müller Rolf;03:24:52 +Müller Ronnie;03:37:55 +Müller Thomas;03:18:13 +Mumenthaler Stephan;03:18:08 +Munz Thomas;04:44:53 +Murer Werner;04:12:53 +Muriqi Agron;03:51:22 +Murray Mark;03:12:56 +Nachbaur Gerd;03:42:44 +Nater Remo;03:15:12 +Naylor Charles;03:55:34 +Nazabal Alexis;03:27:10 +Neff Armin;03:23:51 +Neff Yanick;03:35:05 +Neuländner Martin;03:45:52 +Neumüller Peter;02:59:15 +Nicolet Samuel;02:57:24 +Niederberger Guido;05:01:39 +Niederberger Philippe;03:11:47 +Niederer Christian;03:44:10 +Niedermair Uli;03:13:04 +Niethammer Thomas;03:22:03 +Niklaus Michael;03:26:55 +Nobis Markus;03:30:49 +Noli Lorenz;03:57:45 +Notter René;04:10:33 +Notter Stefan;03:13:32 +Notz Ruedi;04:12:35 +Nussbaum Walter;02:51:47 +Nutt Reto;03:31:59 +Nyikos Thomas;02:58:29 +Oberkalmsteiner Karl;03:25:11 +Oberle Adrian;03:32:21 +Obermeit Volker;03:48:01 +Obrecht Walter;03:41:35 +Ochsner Daniel;03:50:44 +Ochsner Harry;03:57:42 +Odermatt Fredi;03:14:26 +Odermatt Michael;02:56:50 +Odermatt Urs;03:18:56 +Oehninger Ernst;04:44:48 +Oester Patrick;04:29:57 +Omollo Omondi;03:39:25 +Oppitz Lothar;03:30:46 +Oppitz Ulrich;03:33:17 +Oppliger Christophe;02:58:07 +Oreilly David;03:22:25 +Ortega Ilias;04:50:08 +Ortkemper Frank;04:00:41 +Ott Manuel;04:19:27 +Otter Ueli;04:05:48 +Overbeck Gernot;04:04:16 +Overeem Joost;04:00:38 +Paccaud Christophe;03:23:05 +Pacozzi Romeo;03:54:08 +Page Basile;03:24:58 +Pagy Eilam;04:17:56 +Palmiere Cristian;03:36:36 +Panatti Erik;02:55:22 +Passera Giacomo;03:58:51 +Pauchard Patrick;03:42:45 +Pedrini Claudio;04:34:43 +Peinsold Martin;03:23:16 +Pellegrini Flavio;03:19:52 +Pellet Laurent;03:30:38 +Peng Pierre;05:29:00 +Pepe Pasquale;03:55:45 +Perisset Laurent;03:27:54 +Perseghini Mauro;03:06:10 +Pescheta Donato;02:47:34 +Peter Guido;04:13:58 +Peterhans Urs;04:45:28 +Petrig Markus;03:42:58 +Peyer Thomas;03:43:03 +Pfäffli Roger;04:23:41 +Pfändler Jonas;03:23:40 +Pfenninger Roland;04:25:03 +Pfister Felix;03:49:12 +Pfister Heinz;04:49:13 +Pfister Jeremias;03:57:51 +Pfister Samuel;04:19:00 +Pfyffer Roland;03:18:30 +Pfyffer Urs;03:20:18 +Pianaro Claudio;03:17:17 +Piguet Florian;02:44:03 +Pillard Luc;05:12:05 +Piras Davide;03:58:44 +Pirrello Antonino;03:54:18 +Pirscher Andreas;03:20:13 +Pittet Laurent;02:48:33 +Place Raymond;03:57:29 +Ploetz Armin;03:36:55 +Plum Carsten;03:28:52 +Plüss Fabian;03:42:49 +Porfido Franco;03:25:53 +Portmann Hansjörg;03:18:53 +Portmann Marco;03:53:52 +Németh Aniko;03:38:23 +Portmann Thomas;03:04:13 +Praz Max;03:46:00 +Procacci Fabio;05:27:44 +Protze Sören;03:32:31 +Pulizzi Antonino;04:30:16 +Putallaz Jean-Yves;03:46:42 +Quauka Daniel;03:24:49 +Quirici Giulio;03:13:54 +Raca Mirko;03:56:05 +Raccuglia Armando;03:50:52 +Ramer Stefan;03:47:44 +Randegger Erwin;04:35:57 +Ranta Tommy;03:13:32 +Raschle Adrian;03:53:25 +Rasquinet Patrick;05:33:14 +Raymann Patrick;03:32:12 +Rechsteiner Helmut;03:28:02 +Rechsteiner Kuno;02:54:25 +Rehm Martin;03:36:33 +Rehmet Joachim;03:58:16 +Reichmuth Thomas;03:43:29 +Reinhard-Miltz Gerhard;03:39:41 +Reinhardt Stephan;04:24:27 +Reitbauer Stefan;03:26:39 +Rentsch Peter;04:22:15 +Reutemann Patrick;04:39:43 +Rentsch Max;03:21:56 +Rezzonico Andrea;03:27:57 +Richter Carsten;03:15:23 +Richter Manfred;04:25:00 +Richterich Lukas;03:21:29 +Riedi Mattias;04:03:12 +Riekert Patrick;04:10:28 +Rigoni Bruno;03:45:09 +Rinderknecht Christoph;03:39:20 +Rindlisbacher Martin;02:45:30 +Rippstein Guido;03:45:54 +Risby Lee Alexander;04:13:36 +Risi Christoph;04:03:02 +Ritler Roger;03:25:15 +Ritschard Mario;03:59:14 +Ritter Daniel;03:21:43 +Ritz Daniel;03:19:33 +Rizzello Roberto;04:23:05 +Rodelli Leo;03:59:53 +Roduit Pascal;03:38:15 +Roduner Christoph;04:00:27 +Roffler Markus;03:32:14 +Rohner Marius;04:09:52 +Rohr Stephan;02:46:41 +Rohrer Hansruedi;03:07:34 +Röllin Martin;04:13:18 +Roman Emilio;03:18:19 +Rosen Oliver;03:43:32 +Rosic Renato;04:39:25 +Rosset Gilles;03:43:26 +Rossi Lorenzo;03:23:54 +Roth Heiner;04:15:00 +Roth Nick;03:36:42 +Röthlisberger Andres;04:37:29 +Röthlisberger Sergio;04:25:03 +Röthlisberger Urs;04:16:25 +Roulet Vincent;03:54:01 +Rückstein Bruno;04:34:57 +Rudaz Gérald;04:23:41 +Rudolf Hanspeter;03:27:18 +Rüede Christian;03:53:44 +Rüede Nico;03:59:46 +Rueegg Patrick Stefan;03:44:51 +Rüegg Armin;04:53:59 +Rüegg Walter;03:27:05 +Rüesch Peter;03:42:38 +Ruf Andreas;04:11:30 +Rupper Patrick;03:56:31 +Rusch Stefan;03:39:31 +Safi Kamran;03:52:32 +Sägesser Simon;03:10:45 +Salamin Michel;03:14:35 +Salmi Janne;02:40:56 +Salzmann Urs;02:58:48 +Sanchez Walter;05:02:44 +Sano Shogo;04:07:36 +Sara Benedé Enrique;03:49:28 +Sauder Patrick;02:46:46 +Saurer Werner;03:51:01 +Sauter Markus;03:05:55 +Savill Ian;04:04:16 +Savola Juha;02:59:23 +Schaad Marco;02:59:09 +Schaad Thomas;03:31:23 +Schaerer Bruno;04:37:21 +Schaermeli Claudio;03:32:27 +Schäfer Andreas;04:44:07 +Schäfer Roger;03:54:43 +Schäffer Beat;03:30:50 +Schär Markus;03:25:26 +Schärer Kurt;03:38:13 +Schärli Christoph;04:27:06 +Schaub Rolf;03:40:58 +Schegg Stefan;03:53:05 +Scheidegger René;03:34:04 +Schelbert Armin;03:17:03 +Schenk Felix;02:40:59 +Schenkel Patrick;03:54:05 +Scherer Kurt;02:48:44 +Scherzinger Fredy;03:47:12 +Schibig Viktor;04:14:23 +Schilling Martin;03:26:17 +Schläfli Matthias;03:27:33 +Schläpfer Marco;03:41:13 +Schlatter Adrian;02:47:58 +Schlatter David;03:56:07 +Schlicht Michael;03:56:54 +Schlub Jarbas;03:32:39 +Schlüchter Roland;04:08:56 +Schmid Philipp;04:35:30 +Schmid Tobias;04:24:42 +Schmid Tom;03:50:12 +Schmid-Erni Reto;03:54:33 +Schmidt Roberto;03:28:11 +Schmidt Urs;04:11:40 +Schmidt Urs-Peter;03:24:14 +Schmied Bruno;04:15:44 +Schmutz Dominik;03:10:12 +Schneckenburger Julian;03:20:55 +Schneider Hans-Peter;03:43:26 +Schneider Jochen;03:59:45 +Schneider Martin;03:49:35 +Schneider Martin;03:14:47 +Schneider Reto;03:31:42 +Schnüriger Erwin;03:21:49 +Schnyder Roger;02:39:40 +Schoch Christoph;03:45:11 +Scholian Heinz;03:18:56 +Scholl Hans;03:09:32 +Schönenberger Bruno;03:44:13 +Schönenberger Felix;04:12:40 +Schönenberger Samuel;03:48:07 +Schönenberger Tim;03:22:48 +Schönenberger Urs;02:59:20 +Schönherr Andreas;03:27:28 +Schöni Beat;03:37:03 +Schöni Martin;03:14:32 +Schoppe Mathias;03:20:08 +Schorno Enrico;03:27:34 +Schranz Fred;03:13:16 +Schreiber Mark;03:30:52 +Schreiber Simon;03:24:29 +Schröder Jan;03:45:37 +Schüepp Daniel;03:58:33 +Schuler Paul;03:16:16 +Schuler Werner;04:56:45 +Schulte Christian;03:47:49 +Schultheiss Tobias;03:45:27 +Schulze Elko;03:49:49 +Schüpbach Fabian;04:19:23 +Schütz Patrick;02:54:51 +Schütz Reinhart;03:06:23 +Schweitzer Pascal;04:03:43 +Schweizer Marcel;04:37:07 +Schwery Rolf;04:49:04 +Scotece Gerardo;03:11:52 +Seeger Andreas;04:15:25 +Seiler Rico;03:19:04 +Seipel Oliver;04:28:28 +Seki Tomoo;04:30:38 +Semadeni Gian Andrea;03:48:33 +Senn Lucien;03:58:23 +Senteler Roger;03:26:22 +Serrano Camilo;04:25:15 +Sgier Giusep;03:17:08 +Sibilia Enrico;03:56:19 +Sieber Oliver;03:44:20 +Siegenthaler Fredy;03:38:44 +Siegrist Thomas;03:16:43 +Signer Martin;03:06:23 +Signer Ueli;03:42:23 +Sigrist Daniel;03:40:57 +Sigrist Felix;03:07:04 +Silberschmidt Rico;03:26:22 +Simon Robert;04:53:49 +Siragusa Pietro Giovan;04:03:53 +Sitruk Yves;04:32:17 +Smith Craig;03:27:00 +Somerville Trevor;04:03:32 +Soto Josetxo;03:20:56 +Spaargaren Marco;03:06:49 +Spaggiari Giuseppe;03:54:22 +Späh Martin;04:06:19 +Specht Dominique;04:03:52 +Al-Godari Hamid;03:41:40 +Spielhofer Hans;03:59:34 +Spielhofer Reto;03:54:43 +Spiess Thomas;03:10:09 +Spilker Max;04:03:58 +Spitteler Peter;03:18:07 +Spitznagel Kurt;04:10:00 +Spörndli Daniel;03:19:23 +Sprenger Raphael;02:58:37 +Spring Daniel;02:44:39 +Stadelmann Marc;04:22:33 +Maeder Walter;03:24:38 +Stadler Marcel;03:16:27 +Stadler Reto;03:44:02 +Staeheli Oliver;03:57:53 +Staffelbach Thomas;03:08:56 +Stähli Sandro;03:45:28 +Stamm Dominik;03:52:10 +Stamm Franz;03:21:11 +Stamm Urs;04:25:34 +Stämpfli Bernhard;02:54:25 +Kälin Kurt;03:43:37 +Stangl Dominik;03:00:46 +Stangl Stefan;03:04:52 +Stäuble Roland;03:04:43 +Staudenmann Beat;03:15:38 +Stauffacher Ruedi;03:11:28 +Stauffer Alexandre;04:06:21 +Stauffer Mario;05:15:15 +Stauffer Markus;03:42:13 +Stebler Markus;03:02:06 +Steffen Peter;03:10:42 +Steigmeier Linus;04:08:41 +Stein Martin;03:22:45 +Steiner Armin;02:50:52 +Steiner Daniel;03:43:36 +Steiner Markus;03:05:14 +Steiner Patrick;03:24:12 +Steiner Peter;04:09:50 +Steiner Rolf;03:09:05 +Steiner Thomas;04:10:46 +Steinhof Co Rosen Arne;03:47:55 +Stern Pascal Nicolas;03:19:11 +Stettler Roman;03:40:48 +Stifel Peter;04:15:30 +Stillman David;02:38:27 +Stirnemann Paul;03:40:07 +Stirnimann Daniel;02:41:11 +Stocker Ueli;03:49:26 +Stockmann Hubertus;03:25:34 +Stoll Oliver;04:02:48 +Storchenegger Daniel;03:42:10 +Strähl Stefan;02:51:29 +Strebel Philipp;02:59:26 +Strehler Erich;03:13:55 +Streich Daniel;04:41:40 +Streiff Christoph;03:43:42 +Streule Ralf;04:01:55 +Strickler Werner;04:03:01 +Strimer Simon;03:34:57 +Stucker Jürg;03:46:43 +Studer Adrian;03:15:06 +Studer Jürg;03:44:32 +Studer Peter;03:36:35 +Stupp Oliver;03:26:35 +Sturzenegger Hans-Rudo;03:28:40 +Sturzenegger Michael;03:33:10 +Sturzenegger Thomas;03:32:38 +Stütz Andy;03:11:15 +Stutz Bruno;04:20:28 +Stutz Michael;03:26:25 +Stutz Toni;03:46:37 +Sulser Silvio;03:09:20 +Sumi Arthur;04:36:55 +Süssli Eric;03:16:24 +Suter Jürg;03:50:56 +Sutter Jürg;04:32:57 +Swars Erik;03:53:42 +Szegvary Thomas;02:51:21 +Szentgyörgyi Istvan;04:12:33 +Tabakovic Velid;03:48:12 +Tacca Gianni;03:48:33 +Tanner Marcel;03:02:51 +Tauber Albert;03:52:15 +Tellefsen Anders;03:49:52 +Teshima Ryo;05:12:50 +Thalmann Rolf;03:25:29 +Theis Manuel;03:26:20 +Theules Olivier;03:43:07 +Thiel Dieter;04:13:20 +Thoma Remo;03:23:37 +Thoma Turi;03:17:57 +Thür Raphaél;03:39:33 +Thurre Jean-Daniel;04:37:23 +Tighnavard Babak;04:11:49 +Tobler Urs;04:26:49 +Tourolle Bruno;05:09:51 +Traber Fabio;04:23:21 +Trajkovic Ivo;03:18:32 +Tremp Christof;03:32:14 +Tresch Reto;03:27:44 +Triantafillou Christos;04:52:37 +Tripolt Fabio;04:50:44 +Troller Rolf;03:16:04 +Trolp Frank;03:47:42 +Troxler Andreas;03:05:43 +Trümpler Michael;03:59:59 +Truninger Joey;04:21:42 +Trüssel Stefan;03:32:50 +Tschamon Martin;04:26:02 +Tschanz Lukas;03:50:40 +Tschopp Silvan;03:11:38 +Tschumper Markus;03:23:05 +Turberg Yves;03:11:45 +Uebbing Jürgen;03:25:51 +Ueltschi Thomas;03:03:16 +Ulber Wolfgang;02:56:59 +Ullmann Rolf;04:23:43 +Ulrich Daniel;02:47:17 +Umbricht Niklaus;03:28:21 +Vacheron Thierry;03:56:01 +Vagt Toni;03:05:22 +van Zyl Charl;03:17:57 +Veronesi Silvio;04:04:59 +Vetsch Matthias;03:20:04 +Vieux Florian;02:44:19 +Vilchez Martin;03:32:58 +Voegeli Matthias;03:46:10 +Vögeli Pierre;04:20:39 +Voegeli Ueli;03:36:28 +Vogel Hanspeter;04:59:03 +Vogel Markus;03:42:53 +Vogel Roland;03:59:22 +Vögeli Bernhard;04:15:08 +Völlmin Manuel;03:19:55 +von Dahlen Steffen;03:47:50 +von Holzen Christoph;03:01:28 +von Kaenel Dominik;04:54:14 +von Mandach Conrad;03:15:07 +Vonarburg Christian;03:43:28 +Vonbach Lukas;03:27:53 +Vonplon Raymond;03:46:02 +Votteler Michael;04:08:24 +Vournelis Ellin;03:19:49 +Vuillemez Samuel;03:08:05 +Vuilleumier Cédric;04:14:26 +Waeber Pascal;03:03:57 +Wahl Kurt;03:53:47 +Waldburger Hans;03:57:57 +Walder Vitus;03:13:37 +Waldis Stefan;02:55:28 +Waldner Peter;03:19:31 +Allemann Urs;03:34:53 +Wälti Jean Pierre;03:28:59 +Wälti Thomas;03:30:38 +Wangler Timothy;03:43:31 +Wanner Florian;03:27:05 +Wanner Laurent;03:44:52 +Weber Heinrich;04:07:24 +Weber Jakob;03:15:35 +Weber Peter;03:13:56 +Weber Stefan;03:28:52 +Wegmann Marco;02:53:05 +Wegmann-Wittlin Andrea;03:08:13 +Wegscheider Beat;03:13:23 +Wehrli Fabian;03:53:27 +Weibel Patrick;03:45:57 +Weibel Xaver;03:20:43 +Weiersmüller J-C;05:01:02 +Weilenmann Pascal;04:21:39 +Weiler Andreas;02:49:59 +Weiler Christoph;03:53:47 +Weiser Thomas;04:26:18 +Weisheimer Thomas;03:21:52 +Weisser Klaus;03:47:57 +Welbergen Anthony;03:18:37 +Welten Ernst;04:24:38 +Wenger Urban;03:33:01 +Werder Daniel;03:44:31 +Wernli Oliver;03:27:50 +Wernli Raphael;03:39:33 +Wespi Marcel;03:13:52 +Westphalen Stephan;05:24:41 +Wettstein Erich;03:48:10 +Wettstein Markus;03:27:17 +Wicki Roger;03:14:34 +Widmer Erhard;03:49:04 +Wildhaber Walter;03:49:04 +Wilkening Jan;03:08:18 +Willisegger Christoph;03:25:32 +Wilson Antony;03:48:14 +Windmüller Stefan;03:56:11 +Winistörfer Georges;04:20:29 +Winkler Michael;02:44:19 +Wirz Daniel;03:27:50 +Wittlin Marc;03:42:46 +Wittwer David;05:10:20 +Wohlers Florian;03:42:07 +Wolf Etienne;02:32:49 +Wollnow Jörg;04:10:28 +Wörner Mike;03:23:40 +Wullimann Markus;02:51:35 +Würzebesser Christian;04:26:22 +Wüthrich Jürg;03:47:43 +Wyler Karl;03:47:18 +Wymann Fredi;04:30:06 +Wymann Markus;04:43:36 +Wyniger Lukas;03:21:22 +Wyss Eric;02:54:59 +Wyss Roman;02:55:54 +Wyss Stefan;03:26:00 +Yamashita Masato;03:43:53 +Zabe-Kühn Martin;03:41:01 +Zampiccoli Manuel;04:05:48 +Zanella Bruno;04:49:35 +Zangl Christian;03:41:31 +Zaouia Mehdi;04:14:01 +Zbinden Manfred;03:40:48 +Zbinden René;03:25:40 +Zbinden Thomas;02:54:31 +Zeder Markus;03:11:35 +Zeder Patrick;03:06:35 +Zehnder Marcel;03:10:08 +Zekhnini Ahmed;04:49:37 +Zemp Marco;03:23:55 +Zemp Markus;03:07:50 +Zengaffinen Erwin;03:54:57 +Zgraggen Franz;03:20:19 +Ziegler Marc;04:19:45 +Ziegler Robert;03:44:31 +Zimmerli Thomas;03:32:23 +Zimmermann Patrick;03:29:36 +Zimmermann Robert;03:38:54 +Zingg Christoph;03:02:52 +Zink Fritz;04:07:32 +Zoder Roland;02:53:55 +Zoller Stefan;03:23:42 +Zollinger Marcel;03:17:44 +Zuber Benno;03:40:35 +Zuber Ralf;04:35:44 +Zubler Martin;03:22:58 +Zulauf Stefan;04:04:22 +Zumer Robert;03:36:37 +Zumsteg Rene;03:45:16 +Zurbuchen Christian;03:51:40 +Zurflüh-Begré Daniel;03:13:49 +Zutter Jerome;04:04:45 +Zwahlen Beat;03:57:51 +Zwick Jürg;03:17:10 +Zwygart Stephan;04:01:59 +Alvarez Fernando;03:51:14 +Ambrosini Stefan;04:55:45 +Ayeah Ebenezer;03:17:16 +Bachsteffel Niklaus;03:30:01 +Bagnoud Gérard;02:39:30 +Bartel Marco;03:44:18 +Barz Andreas;04:09:47 +Baumann Rainer;03:15:53 +Baumann Walter;02:57:59 +Baumgartner Andreas;03:51:00 +Beck Jan;03:03:19 +Beer Sebastian;03:17:11 +Beerli Urs-Peter;03:20:06 +Beermann Stefan;03:09:44 +Bekcic Vladimir;03:37:21 +Benkert Fritz;03:38:32 +Birkenmaier Claude;03:38:56 +Blum Edgar;03:52:36 +Bogner Walter;03:03:47 +Bonfanti Stefan;03:17:04 +Bronner Reto;03:52:08 +Brönnimann Ruedi;03:24:43 +Bucher Martin;03:07:06 +Buehler Andreas;03:34:03 +Buerki Fritz;04:35:05 +Bühlmann Daniel;04:12:59 +Burgener Hubert;03:35:04 +Bürgi Thomas;03:06:51 +Businger Urs;03:20:45 +Camenzind Peter;02:54:41 +Carisch Emanuel;03:55:06 +Carrasco Ernesto;04:38:15 +Casanova Lukas;03:37:50 +Castella Jean-Marc;05:11:31 +Caviezel Marzel;03:39:40 +Coradi Thomas;03:57:57 +Coray Roger;03:59:48 +Crosara Michel;03:09:28 +Derron Simon;04:07:34 +Dobler Christoph;03:32:07 +Dos Santos Nelson;04:33:45 +Duschen Patrick;03:07:44 +Dütschler Reto;03:57:58 +Eckert Marc;04:24:13 +Egger Daniel;03:12:08 +Ehrbar Martin;03:13:13 +Eigenmann Raffael;03:26:14 +Enemrke Simon;03:34:52 +Fallegger Hans-Jörg;03:26:03 +Fessler Andreas;05:33:39 +Forster Martin;03:57:47 +Frei Nicola;03:18:16 +Fritz Romeo;04:21:34 +Geissmann Willy;04:04:51 +Gisi Daniel;02:58:06 +Gomez Carlos;03:09:16 +Gossauer Andreas;04:23:59 +Graham Colin;03:25:39 +Grau Patrick;04:38:55 +Grüninger Thomas;03:56:50 +Gujer Hanspeter;04:21:31 +Gyger Franz;03:06:10 +Haider Thomas;02:53:41 +Haller Heinrich;03:14:40 +Hartmann Thomas;04:21:26 +Haueter Max;04:12:49 +Hauser Wolfgang;02:55:57 +Häusler Philippe;03:26:49 +Herren Lars;04:11:27 +Hertach Alain;03:46:24 +Hess Ivan;03:43:57 +Hess Oliver;04:05:34 +Hohler Patrick;03:56:55 +Holenweger Michael;04:16:36 +Hollenstein Alex;03:44:11 +Hösli Hans;03:28:24 +Hubacher Thomas;03:13:08 +Huber René;04:36:47 +Hug Rene;03:14:54 +Humbel Jürg;03:30:52 +Hungerbuehler Pius;03:53:02 +Inniger Hans-Christoph;04:41:42 +Janser Alfred;04:13:22 +Jegen Thomas;03:57:29 +Joller Thomas;03:23:38 +Jutzi Stephan;04:09:25 +Kaufmann Hanspeter;03:50:16 +Kellenberger Stephan;03:15:43 +Keller Daniel;03:58:39 +Keller Ernst;02:58:15 +Kelling Udo;03:04:50 +Kimmerlin Thierry;03:16:52 +Kindlimann Heinz;03:43:31 +Kobi Peider;04:43:57 +Kopalek Peter;03:20:33 +Küchler Thorsten;03:22:32 +Kuster Marcel;03:17:29 +Kuster Matthias;03:53:57 +Lanz Peter;02:51:38 +Laubscher Daniel;03:35:14 +Leach Steven;04:22:52 +Leder Manfred;03:38:05 +Lehmann Nik;03:08:46 +Lehni Markus;03:51:10 +Leiggener Christoph;04:24:27 +Leuener Felix;03:56:31 +Loosli Adrian;03:07:31 +Lopes Oliveira Leonel;03:05:47 +Lorencez Isaac;03:48:08 +Lucas François;03:44:05 +Lüthi Jean-Pierre;03:36:16 +Lüthi Marc;04:06:42 +Lüthi Markus;03:55:50 +Maag Reto;03:30:04 +Maegli Rolf;04:07:31 +Maier Bernhard;03:49:12 +Malacarne Sergio;03:57:34 +Martel Jan;04:12:25 +Maurer Dani;03:06:14 +Meichtry Urs;03:14:13 +Meier Bruno;03:03:26 +Meier Daniel;03:28:25 +Meier Martin;04:39:50 +Merian Paul;03:27:56 +Messer Markus;03:18:13 +Metzger Bernhard;04:24:15 +Minuscoli Patrik;03:17:11 +Miralhos Paulo;02:42:54 +Moncaro Andrea;04:00:17 +Montagut Vidal Jorge;03:27:46 +Moser Ives Jan;03:13:18 +Moser Mario;04:25:43 +Motavalli Masoud;04:39:41 +Mühle Housi;03:44:56 +Mullaney Chris;04:00:35 +Murbach Umberto;04:44:47 +Nehmer Raphael;04:12:31 +Neuenschwander Hanspet;04:31:36 +Notter Thomy;04:11:43 +Nünlist Nüni;04:26:57 +Nusseck Peter;03:20:19 +Nyfeler Thomas;03:29:17 +Oberhänsli Fabian;03:20:58 +Obrist Beat;04:26:57 +Obrist Fabio;04:11:19 +Odden Lee;03:26:42 +Odermatt Karlheinz;04:23:05 +Oetiker Beat;04:43:15 +Omlin Niklaus;03:39:26 +Ommerborn Stephan;03:57:30 +Ort Fred;03:42:06 +Pagan Olivier;03:56:16 +Pauli Marc;03:18:53 +Perez De La Sota Gabri;04:08:57 +Perren Patrick;02:42:52 +Pfäffli Andreas;03:12:35 +Pfister Andreas;03:11:43 +Pfister Christian;03:51:55 +Plattner Daniel;04:14:34 +Poenaru Daniel;03:58:25 +Portmann Philipp;03:33:19 +Pravato David;03:18:04 +Provinzano Ignazio;03:14:06 +Racine Gabriel;04:12:19 +Raiser Thomas;03:30:12 +Rando Andrés;03:36:42 +Reber Rolf;03:30:37 +Renz Thomas;03:17:41 +Rickenbacher Leo;03:03:42 +Risler Martin;03:31:03 +Romer Paul;03:16:56 +Rüegg Roman;03:23:46 +Russenberger Thomas;03:30:07 +Rütimann Willy;04:06:31 +Sadriu Kreshnik;05:17:51 +Salisbury David;03:40:37 +Schädeli Ernst;03:44:00 +Schäfer Kai;03:05:08 +Scheller Gerd;03:15:32 +Schiavarelli Nicola;03:31:43 +Schlepfer Roland;04:07:21 +Schmidl Martin;03:21:19 +Schmitt Marius Gerhard;03:43:19 +Schuler Othmar;03:10:19 +Schwegler Klaus;04:12:49 +Siegenthaler Thomas;03:43:26 +Signer Peter;03:36:24 +Spiegel Patrick;03:11:15 +Städler Oliver;03:32:53 +Steiner Daniel;04:36:39 +Steinhauser Jürg;03:55:45 +Stephani Reto;04:14:32 +Stoppiello Frank;04:27:04 +Strebel Paddy;03:33:53 +Suter Daniel;04:04:30 +Taucher Joshua;04:22:37 +Thode Andreas;03:34:42 +Isler Bruno;03:33:38 +Thomschke Till;03:33:50 +Tobler Daniel;03:12:40 +Tomic Slobodan Bob;04:29:48 +Tonak Torsten;02:52:15 +Tonolli Alberto;05:04:59 +Tuta Niko;04:18:53 +Vogt Roland;03:42:03 +von Känel Hans;03:40:14 +Vonchristen Martin;04:08:13 +Walder Christoph;04:27:39 +Walker Steven;03:10:20 +Walter Martin;03:02:43 +Wang Lei;05:21:55 +Wehren Marcel;03:31:01 +Wey Franz;04:08:53 +Wey Herbert;04:01:43 +Wey Simon;03:22:42 +Wick Bernhard;03:50:22 +Wille David;04:46:13 +Wirth Thomas;04:30:41 +Wüest Simon;03:59:02 +Wunderli Andreas;03:38:17 +Wyler Marco;04:21:15 +Zähnler Bruno;04:27:22 +Zehnder Rolf;03:58:45 +Zehntner Daniel;03:23:23 +Zimmermann Niklaus;03:36:50 +Zimmermann Werner;04:37:54 +Zumbach Charles;03:33:26 +Ackermann Martin;03:28:06 +Berndt Matthias;04:05:43 +Bertucci Dario;03:51:29 +Buchmann Remo;04:12:44 +Flückiger Hans;03:46:16 +Germann Peter;03:32:20 +Hagemann Peter;03:31:09 +Halme Tero;02:59:02 +Huber Daniel;03:25:29 +Jeannet Olivier;03:26:00 +Jorge Humberto;03:38:11 +Kälin Sepp;03:27:46 +Kellenberger Daniel;04:33:31 +Knupfer Stefan;02:58:32 +Knüsel Markus;03:26:26 +Kovar Thomas;02:59:45 +Kuhn Matthias;03:02:55 +Lustenberger Kurt;02:39:45 +Mantel Rico;05:11:09 +Martin Ludwig;03:26:31 +Mazzotta Cosimo;03:21:14 +Moret Raoul;03:55:48 +Nebbe Harry;03:13:15 +Neuenschwander Andre;04:13:30 +Pellegrini Fausto;03:08:09 +Pellkofer Martin;03:32:45 +Peterli Ralph;04:26:53 +Phan Quang Biu;03:38:30 +Ruoss Patrick;03:17:49 +Ryser Martin;03:22:53 +Schmid Andreas;02:45:39 +Schmidt Yvan;04:03:33 +Schwarzkopf Dominik;04:57:38 +Stoob Max;04:29:24 +Tomczak Krzysztof;03:13:04 +Wellington Daniel;03:57:55 +Zgraggen Lorenzo;04:01:05 +Häuptli Daniel;03:34:36 +Babounakis Antonios;03:20:54 +Di Giovanni Bruno;03:54:13 +Böni André;04:21:43 +Keller Christian;04:40:52 +Briner-Weber Markus;03:43:34 +Brenner Patrick;02:38:58 +Oyetan Seun;04:24:23 +Manivanan Vijay Sudhak;04:08:11 +Lehner Markus;04:23:29 +Stadel Joachim;03:14:49 +Sudan Philippe;03:11:11 +Holzapfel Helmut;04:10:32 +Lanz Martin;02:37:54 +Gorrie Luke;04:44:13 +Sutter Markus;03:05:39 +Meier Werner;03:51:16 +Mvongo Jean-Paul;03:20:08 +Czaykowsky Marco;03:25:26 +Czaykowsky Yves;03:14:06 +Kümin Otto;05:09:42 +Thalmann Daniel;03:15:41 +Wespi Bernhard;03:41:54 +Geiger Christoph;04:18:19 +Oswald Flurin;05:01:23 +Mader Kevin;03:20:24 +Gentile Daniele;03:26:43 +Ahler Markus;03:58:28 +Zuzolo Vincenzo;04:32:45 +Lochmann Guido;04:03:18 +Bartosch Lukas;03:54:56 +Pfyffer Stefan;03:37:36 +Unternährer René;03:24:40 +Habisreutinger Thomas;03:35:27 +Pokora Daniel;03:13:45 +Steinbach Simon;03:44:59 +Bischof Harald;04:06:47 +Kohli Bernhard;03:40:30 +Bigger Reto;03:25:21 +Lopez Oswaldo;04:38:07 +Ortiz Claviso Luis Alb;04:28:03 +Richner Peter;03:29:21 +Beinhoff Martin;03:51:58 +Bucherer Thomas;04:07:49 +Cupples Richard;03:34:25 +Dorn Alexander;03:47:21 +Frou Benoit;03:31:11 +Gerull John-Phillip;03:23:42 +Hertig Andi;03:59:01 +Joss Myriam;03:33:17 +Lichtenberger Alexande;04:10:32 +Mimouni Didier;03:13:49 +Moeckli Simon;03:55:15 +Nashid Ibrahim;04:13:34 +Ochsner Thomy;04:52:15 +Schmid Alex;04:20:38 +van Ulzen Manuela;03:56:48 +Vogeli Bernhard;03:23:07 +Waldburger Claudio;03:43:51 +Walser Alexander;04:15:57 +Witzel Christian;03:17:20 +Rupp Thomas H.;03:29:09 +Affolter Darius;03:24:44 +Graham Angus;04:31:29 +Lee Jon;03:55:54 +Luessi Andreas;03:19:44 +Melas Theocharis;05:24:59 +Rentsch Beat;03:41:14 +Rezk Markus;03:56:55 +Schumacher Martin;03:44:43 +Sieger Pascal;03:17:43 +Sutter Andy;04:12:08 +van Buul Peter;03:26:02 +Wieland Lucio;04:56:57 +Zuzak Miro;04:30:29 +De-Vizzi Evelyn;04:52:55 +De-Vizzi Fiona;04:26:54 +Kläger Roland;03:15:58 +Allard Darren;04:26:56 +Greco Luigi;04:01:57 +Huber Sibylle;03:52:02 +Ostertag Andreas;03:02:03 +Piekarz Iwona;04:05:35 +Rodriguez José Manuel;04:26:30 +Waelti Philippe;03:43:39 +Ziegler Philippe;03:26:06 +Baumgartner Rico;03:57:39 +Cestonato Antonella;04:01:16 +Eggenberger Kurt;03:40:38 +Enderlin Michèle;04:41:47 +Hauser Claudia;03:53:32 +Litscher Daniel;04:06:55 +Regenscheit Fabian;03:43:11 +Sommer Martin;04:23:44 +Mathis Stefan;03:36:46 +Merkli Stephan;03:06:32 +Türler Thomas;03:08:12 +Baumann Matthias;03:31:08 +Baumgartner Philip;03:42:46 +Biefer Christian;03:34:56 +Faller Sascha;04:17:10 +Ganz Jeannette;03:52:36 +Hari Daniel;03:01:44 +Hüsser Zoe;04:10:43 +Lacy David;03:26:32 +Maag Felix;03:38:30 +Rehal Jaspal;03:53:54 +Sax Fredi;04:31:08 +Schmitt Martin;03:54:46 +Schraven Jan-Christian;05:28:19 +Stoller Fabienne;04:38:16 +Winkler Hansjörg;03:25:01 +Zanotelli Reto;03:47:17 +Hug Pascal;03:13:19 +Pavlovic Marko;03:06:25 +Seebach Nicole;04:18:42 +Wegmann Joachim;04:22:49 +Leupi Daniel;03:38:01 +Ziegler Roger;03:16:34 +Fässler Hildegard;03:38:29 +Egger Urs;03:17:35 +Egger Urs;03:35:12 +Abele Martin;03:17:01 +Schmidig Urs;03:25:06 +Mayenzet Didier;03:24:19 +Rüdisüli Pius;03:09:17 +Lauener Nicole;03:55:59 +Wettstein Peter;03:58:32 +Wettstein Peter;03:33:56 +Wettstein Peter;03:48:10 +Welti Martin;03:21:19 +Smits Léon;03:31:41 +Diethelm Theri;04:17:34 +Achermann Annemarie;04:04:04 +Thomys Heike;03:55:56 +Thomys Heike;04:04:24 +Dettwiler Daniel;03:35:12 +Zehr Bruno;03:20:21 +Spycher Hunziker Susan;03:29:11 +Grieder Sandra;04:03:23 +Schumpf Nicole;04:33:36 +Gantner Felicitas;03:39:29 +Vaucher Pascale;03:37:56 +Frost Elke;03:15:55 +Vorbrodt Dominique;03:41:23 +Koch Pascal;03:21:34 +Ferrari-Fidel Frederic;03:21:19 +Cloos Lis;03:42:50 +Urosevic Aleksandra;03:36:55 +Knaus Michèle;04:24:04 +Flückiger Miriam;03:48:12 +Stutz Markus;03:29:55 +Niffenegger Viktor;03:15:01 +Wehleit Kolja;03:37:34 +Wehleit Kolja;03:53:06 +Wehleit Kolja;03:38:34 +Knecht Anina;03:28:39 +Pfister René;04:04:57 +Fröhlich Valérie;03:35:20 +Blomberg Per-Inge;04:02:01 +Lhommel Laurence;03:13:06 +Bollinger-Könz Dieter;03:08:41 +Brutschi Daniela;03:38:47 +Platzer Martina;03:46:53 +Ammann Barbara;02:58:56 +Aubry Luzia;03:29:33 +Stössel Daniel;03:26:15 +Gschwend Christian;03:41:46 +Leiser Kolja;03:37:04 +Grütter Urs;03:05:29 +Coester Franz;03:53:05 +Wirz Markus;03:25:52 +Wirz Markus;03:22:32 +Albisser Beat;03:36:49 +Endres Julia;03:56:24 +Ummel Beat;03:14:20 +Fischer Hurter Daniel;03:12:31 +Senn Rolf;03:04:12 +Tobler Raphael;03:17:22 +Tobler Raphael;03:16:41 +Tobler Raphael;03:15:21 +Eggimann Thomas;03:25:22 +Bartholdi Andre;03:26:19 +Merk Gaby;03:49:16 +Limacher Esther;03:20:57 +Badertscher Sara;03:45:10 +Francotte Benedicte;03:55:30 +Boschung Bernard;04:01:42 +Oswald Manfred;03:27:07 +Steiner Markus;03:28:41 +von Euw Martin;03:40:19 +Buergi Taboada Carole;03:09:43 +Cordey Olivier;03:44:06 +Richinger David;03:29:20 +Caminada Rafael;03:47:59 +Schuermann Balz;03:14:12 +Charrière Thomas;03:49:45 +Vaterlaus Peter;03:34:58 +Eggimann Andreas;03:21:26 +Gemperle Patrik;03:40:13 +Point Laetitia;03:24:53 +Preisig Ueli;03:25:43 +Huber Nadine;04:15:00 +Friedli Corinne;03:30:37 +Knechtli Thomas;03:26:56 +Hasler Catherine;03:32:33 +Böllenrücher Melanie;03:09:13 +Oung Raymond;03:57:14 +Hassler Daniel;03:33:44 +Bachmann Maria;03:43:11 +Petersen Claus Gregers;04:00:18 +Petersen Claus Gregers;03:52:08 +Koch Roman;03:56:38 +Thalmann Hans-Peter;03:44:32 +Beck Lea;03:30:28 +Beck Lea;03:10:59 +Beck Lea;03:27:46 +Inderbitzin Kevin;03:30:31 +Ledergerber Isabelle;03:26:53 +Carnevale Vito;03:54:49 +Nguyen Raphael;03:38:06 +Huwyler Reto;03:49:32 +Trappitsch Stefan;03:49:28 +Meier David;03:55:16 +Weisstanner Andreas;03:39:43 +Donath Marc;03:33:25 +Klein Tobias;03:51:55 +Keller Claudia;03:33:02 +Gabriel Reto;03:35:04 +Holzinger Thomas;03:35:01 +Frischknecht Christine;03:52:07 +Roth Jeannine;04:01:38 +Delahaye Benjamin;03:22:30 +Trifari Patricia;03:34:45 +Mühlberg Martin;03:28:10 +Leuenberger Susanne;04:09:14 +Lurati Laura;03:41:38 +Cackett Joanne;03:35:02 +Baumgartner Philipp;03:31:11 +Altmann Andreas;03:38:29 +Marti Gabriel;03:20:21 +Steiger-Glocker Gaby;03:59:20 +Ruprecht Balz;03:04:17 +Stoessel Laura;03:39:06 +Lauffenburger Roman;03:56:36 +Williamson Libby;03:54:41 +Koch Gisela;04:21:23 +Gubelmann Patrick;03:49:50 +Majoleth Stefan;03:16:44 +Parro Paolo;03:23:59 +Zollinger Reto;03:23:12 +Gundermann Julia;04:19:35 +Tross-Müller Marianne;04:02:29 +Müller Anna-Katharina;03:32:55 +Suter Lorena;03:46:31 +Grindley Peter;03:49:28 +Leutwiler Sara;03:40:08 +Bachmann Beatrice;04:23:48 +Streuli Gabriela;03:18:41 +Stefka Daniel;03:49:46 +Kofel Felix;03:34:29 +Burkhard Patrick;03:06:38 +Hess Corina;03:56:24 +Lehmann Beat;04:18:47 +Patkovic Slavica;04:14:22 +Rudat Jörg;04:03:15 +Price Robert;03:48:57 +Imhof Nathalie;04:10:43 +Sommer Ernesto;04:23:31 +von Gunten Erich;03:36:42 +Niederberger Katja;04:31:56 +Püchel Johannes;03:43:53 +Studer Lukas;03:20:55 +Graf Bettina;03:32:31 +Burckhardt Straub Caro;04:10:05 +Camenzind Sepp;03:36:18 +Rech Marielle;03:25:46 +Gut Michael;03:31:07 +Sigg Arnold;03:25:00 +Honegger Silja;03:45:55 +Heiz Patrick;04:12:02 +Rais Jeanne;04:01:39 +Beyeler Erika;03:53:31 +Zürcher Thomas;03:33:57 +Sutter Matthias;03:46:55 +Sutter Matthias;03:24:44 +Sutter Matthias;03:54:50 +Jud Maria;03:49:48 +Bonfranchi Riccardo;04:33:12 +Rigamonti Alessandro;03:31:34 +Kaufmann Patrick;03:26:30 +Ortega Lydia;04:20:15 +De Faveri Marisa;03:50:29 +Ortega Lydia;03:41:42 +Hruba Gabriela;03:35:52 +Hruba Gabriela;03:53:28 +Kilbert Gert;02:58:12 +Aniol Wars;02:51:31 +Kraus Bret;03:31:50 +Wenger Esther;03:58:17 +Schneeberger Ivonne;03:33:36 +Luginbühl Carolin;03:41:17 +Furrer Roman;03:24:42 +Nesme Salome;03:41:42 +Pirlet Xavier;02:51:29 +Schneeberger Ivonne;03:55:03 +Schneeberger Ivonne;03:30:43 +Schneeberger Ivonne;04:34:24 +Schneeberger Ivonne;03:40:37 +Schneeberger Ivonne;03:13:40 +Schneeberger Ivonne;03:50:16 +Schneeberger Ivonne;03:54:05 +Schneeberger Ivonne;03:14:16 +Schneeberger Ivonne;04:05:02 +Montanari Dani;03:01:41 +Dolfing Henrico;02:52:39 +Maag Ana;02:50:57 +Hafner Markus;03:48:44 +Schilliger Rolf;03:41:56 +Fontanive Christian;04:39:49 +Fontanive Christian;03:32:31 +Fontanive Christian;03:50:43 +Mäder Petra;04:12:24 +Schneeberger Ivonne;04:13:15 +Ritter Christine;03:53:54 +Hancock Julia;04:06:52 +Hildebrand Carmen;03:30:30 +Reiser Evelyne;03:23:32 +Schaller Oscar;02:58:40 +Fäh Marco;03:03:43 +Grogg Diana;03:08:03 +Holdener Laura;03:57:17 +Jud Janine;03:28:37 +Ebnöther Reto;03:18:10 +Thomas Astrid;04:08:52 +Schawalder Peter;03:51:06 +Lassmann Fredi;03:09:56 +Hansmann Nicole;03:52:12 +Fuhrer Susanna;03:36:22 +Güttinger Daniel;03:34:01 +Eugster Olivier;02:53:58 +Fitoussi Cecile;04:32:55 +Holzberg Nina;03:38:14 +Zahno Andi;03:54:03 +Gyomlay Katinka;03:40:30 +Leitner Fabian;03:19:16 +Reber Samuel;03:13:08 +Marti Georg;03:33:04 +Ruggaber Michel;03:18:31 +Theiler Helen;04:11:34 +Theiler Helen;03:44:07 +Hormann Christian;03:28:45 +Hempen Roland;03:55:05 +Koch Gisela;03:50:52 +Kollbrunner Rebekka;03:53:14 +Schmid Daria;03:35:02 +Wigger Marcel;03:32:08 +Hirt Christian;04:11:43 +Mühlethaler Armando;03:37:55 +Weiss Ruth;03:45:49 +Weisstanner Andreas;03:30:56 +Roberts Tania;03:52:05 +Fischer Marcel;03:21:50 +Fischer Marcel;03:37:54 +Blunschi Selina;04:04:23 +Säuberli Franziska;03:50:01 +Hürlimann Janine;04:30:01 +Favre Guy;02:38:31 +Wehrli Edith;03:40:23 +Bonfils Jacqueline;03:40:51 +Schneider Sven;03:37:03 +Annaheim Simon;02:29:43 +Mohenski Brigitte;04:06:01 +Fischer Marc Pascal;03:17:03 +Stettler Stefan;03:49:30 +Stettler Christa;03:20:45 +Hocher Ursula;04:09:44 +Hager Michel;03:29:40 +Kreppke Jan-Niklas;02:37:53 +Grassi Grazia;04:03:01 +Cerjak-Frei Cornelia;03:52:05 +Suter Peter A.;03:32:10 +Föllmi Carolyn;04:15:45 +Bischof Simone;03:08:49 +Ruile Stefan;02:46:27 +Schneider Roland;03:46:04 +Scott Steven;03:04:03 +Hohl Isabelle;03:33:15 +Stirnimann Ruedi;03:47:04 +Stirnimann Ruedi;03:44:25 +Weiss Martin;03:07:33 +Fuccaro Alexandra;03:31:42 +Ratjen Christian;03:33:12 +Walter Susanna;04:09:57 +Lucas Elise;03:29:58 +Abbenseth Ben;03:13:55 +Skalik Vojtech;03:25:57 +Meier Michael;03:08:48 +Bieler Sarah;03:57:19 +Vetter Beat;03:02:15 +Klinkmann Thomas;03:22:48 +Frey Marcel;04:07:28 +Frey Marcel;03:33:33 +Scholz Urte;04:03:08 +Maltry Karin;03:50:28 +Gloor Marco;03:47:16 +Ströbele René;04:01:34 +Calörtscher Denise;03:37:54 +Magee Karina;03:21:43 +Rabenbauer Karin;03:48:48 +Rauber-Lüthy Christine;03:58:37 +Ballabio-Höhne Sabrina;03:52:51 +Mächler Emil;03:36:50 +Hausmann Nicole;04:00:49 +Kälin Robin;04:24:31 +Maier Sandy;04:04:36 +Werer Karin;03:41:33 +Schilling Stephanie;04:22:31 +Ineichen Gerhard;03:16:54 +Gilgen Sascha;03:27:09 +Salinas Antoinette;03:52:57 +Rüthemann Helen;03:25:42 +Bracko Oliver;03:09:00 +Schaelin Marcel;03:47:54 +Lüllau Claus;04:07:23 +Späni Andrea;03:41:38 +Donner Georg;03:26:31 +Rutz Eric;03:49:55 +Stampfli Reto;03:10:50 +Wloka Martin;03:32:23 +Belguendouz Abdelmalek;03:51:14 +Wüthrich Thomas;03:21:20 +Schmiedler Ursula;03:25:43 +Güldenapfel Erhard;03:41:31 +Schönbächler Ralph;03:41:31 +Hofmann Daniel;03:20:55 +Traxler Sabrina;03:23:26 +Traxler Sabrina;03:24:52 +Schneble Max Charles;03:11:57 +Wichmann Fabienne;03:47:39 +Frei Stefan;03:41:43 +Biedermann Urs;03:27:19 +Guindo Dominique;04:17:47 +Niehus Swaantje;03:43:50 +Chèvre Frédéric;04:07:45 +Mose Soren;03:43:22 +Shtufi Lara;03:59:00 +Müller Wenzel;03:51:13 +Schoenholzer Beat;03:46:45 +Schultz Tilman;04:07:14 +Kölsky Carsten;03:40:21 +Schieler Katrin;04:27:28 +Schmidt Marc Andre;04:13:16 +Kadlec Sven;03:35:45 +Hörler Rhea;03:59:12 +Gehri Friederike;04:01:45 +Kaufmann Christian;03:51:07 +Tschurr Flavian;03:20:50 +Dörgeloh Martin;03:13:13 +Elmer Heiri;03:23:34 +Elmer Heiri;03:31:30 +Elmer Heiri;03:26:55 +Stauch Vanessa;03:11:35 +Sieber Eva;03:57:18 +Suter Franziska;02:59:01 +Scattolin Pascal;03:11:31 +Walter Thomas;03:29:40 +Seger Holger;03:29:57 +Ruest Erich;03:29:54 +Sigrist Yvonne;03:28:37 +Landolt Fridolin;03:15:18 +Meier Anita;04:12:26 +Bleiker Rolf;03:21:31 +Fontolliet Daniel;03:55:58 +Foletti Anita;03:51:07 +Denier Claudia;04:05:17 +Fuchs Ruth;04:28:01 +Studer Larissa;04:07:31 +Flückiger Reto;03:42:29 +Egli Susanne;03:54:19 +Bachmann Roger;03:51:44 +Brunner Heiko;03:46:08 +Zemp Peter;03:51:09 +Bachmann Ruedi;03:22:08 +Camenzind André;02:54:12 +Steiner Sarah;03:34:59 +Walter Urs;03:28:45 +Curiger Andreas;03:08:36 +Romaniuc Marcelo Rober;04:07:36 +Fehr Jessica;03:30:09 +Jakob Barbara;03:42:04 +Jakob Barbara;04:00:14 +Casali Daniela;03:54:45 +Casali Fulvio;03:46:58 +Felger Martin;03:38:26 +Zürcher Toni;03:32:47 +Flachsmann Stefan;03:03:28 +Weiersmüller Jacquelin;04:07:45 +Weiersmüller Jacquelin;04:06:21 +Weiersmüller Jacquelin;04:02:38 +Weiersmüller Jacquelin;04:27:12 +Willi Barbara;03:20:14 +Auf der Mauer Raphael;02:43:58 +Kutej Stefan;03:27:40 +Cappiello Mauro;03:28:20 +Tatalias Melina;03:41:37 +Sherlock Cushla;03:41:14 +Benhauresch Abdel;03:27:43 +Pircher Daniel;03:54:15 +Sasso Angela;03:46:20 +Meyer Bernhard;03:13:50 +Olson Garrett;03:36:52 +Künzle Doris;03:39:37 +Knauer Anne-Juliane;03:25:26 +Schleifer Judith;03:57:50 +Goessler Franziska;03:43:50 +Beeler Etienne;03:27:16 +Wagner Mario;03:27:13 +Niklaus Christin;03:41:38 +Birkeland Ina;03:55:35 +Adelmann Horst;03:41:01 +Sommer Martin;03:55:51 +Eltgen Johannes;03:19:10 +Jörg Silvana;03:42:14 +Baumann Thomas;03:47:21 +Ulrich Barbara;03:41:15 +Volz Andreas;03:34:37 +Britschgi Dani;03:51:54 +Fleetwood Rahel;03:40:22 +Goulbourne Jane;04:06:30 +Plüss Samuel;03:22:32 +Fotheringham Jilly;04:39:27 +Wirz Peter;03:05:58 +Hall Terry;03:25:45 +Wintsch Hanna;03:52:58 +Götz Thomas;03:14:35 +Götz Thomas;03:10:48 +Krampf Eckhard;04:18:50 +Akpinar Hakan;03:04:17 +Bourquin Philippe;03:41:35 +Bley Petra;03:44:29 +Landolt Thomas;03:18:15 +Thoma Rolf;03:11:29 +Dickenmann Stefan;03:09:23 +Lehner Christoph;03:37:26 +Marxer Ruth;04:12:30 +Koch Gisela;04:00:22 +Hiestand Steve;04:09:43 +Maggiulli Ivan;04:22:05 +Wu Daye;03:43:45 +Wantz Nadine;03:37:12 +Müller Rolf;03:34:40 +Locher Beatrice;03:25:04 +Cevik Selim;03:40:55 +Schulz Bianca;03:30:38 +von Aesch Christoph;03:07:51 +Borner Laura;03:19:52 +Koch Gustav;03:21:28 +Lendenmann Tobias;03:37:11 +Berger Verena;03:36:21 +Berger Verena;03:31:16 +Berger Verena;03:35:27 +Betschart Markus;03:27:50 +Feroce Adrian;02:59:01 +Meier Thomas;03:02:31 +Müller Lothar;03:19:58 +Böni Ralf;03:20:43 +Koller Urs;03:23:11 +Bründl Michael;03:46:03 +Wicki Robin;03:10:14 +Fisler Guido;04:16:11 +Bonato Dario;04:00:03 +Müller Matthias;03:49:18 +Balz Rene;03:18:02 +Geiger Dominik;04:10:40 +Werder Roland;03:35:59 +Haldemann Peter;03:47:50 +Peterhans Renato;03:50:15 +Heusser Daniel;03:32:16 +Meuli Barbara;04:15:41 +Abplanalp Beat;02:56:18 +Hoogerwerf Erik;03:20:51 +Feurer Olivia;03:32:15 +Lange Otto;03:37:58 +De Lemos Antonio;04:10:09 +Seematter Marc;03:02:33 +Bühlmann Sandra;04:00:50 +Benz Fabienne;04:00:49 +Huber Paul;03:40:27 +Pilz Michelle M.;03:56:20 +Walser Thomas;03:40:42 +Senn Monika;03:40:59 +Denneberg Jürg;03:55:59 +Lutz Stephan;03:12:00 +Steiner Melvin;03:59:26 +Jetter Patrick;03:39:07 +Isler Dominik;03:33:58 +Kaufmann Ursula;04:14:10 +Reimann Olivia;03:41:57 +Ziesack Myriam;03:44:39 +Moser-Hausammann Brigi;03:56:57 +Moser-Hausammann Brigi;03:56:57 +Manz Hansruedi;03:40:15 +Manz Hansruedi;03:41:44 +Berli Beatrice;04:01:07 +Weiler Walter;03:05:54 +Bos Heleen;04:43:34 +Hoidn Anuschka;03:55:28 +Schroeder Bernd;03:26:23 +Barlow Mike;03:17:44 +Müller Philippe;03:17:20 +Grob Gabriela;03:34:51 +Bosshardt Felix;03:33:12 +Bührer Roger;03:55:46 +Pletscher Thomas;03:29:04 +Rüttimann Erhard;03:13:11 +Janik Evelyn;03:09:22 +Huber Peter;03:35:41 +Federspiel Heike;03:44:35 +Müller Patrick;03:06:35 +Karrer Dominique;03:38:35 +Bührer Roger;03:47:50 +Schönbächler Pascal;04:12:22 +Kögel Harald;03:26:37 +Huber Nicolas;03:53:55 +Utz Patrick;03:29:23 +Ricardoch Ag;03:54:22 +Ricardoch Ag;03:39:43 +Luise Ivo;03:24:29 +Enz Daniel;03:38:51 +Wiederkehr Mirjam;03:33:14 +Ricardoch Ag;03:42:17 +Ricardoch Ag;04:04:55 +Jäggi Jean-Pierre;04:09:59 +Habermacher Claudia;03:21:07 +Rey Bruno;04:04:48 +Krismer Saskia;03:44:54 +Greuel Wanja;03:17:44 +Weibel Martina;04:02:34 +Hofmann Markus;03:20:40 +Cathrein Rene;03:39:27 +Cathrein Rene;03:28:22 +Badertscher Jörg;03:12:07 +Hassler Brigitte;04:09:54 +Gisler Sybille;03:24:08 +Bräm Corina;03:24:43 +Hinder Christine;03:52:37 +Buner Sacha;03:23:47 +Illi Liselotte;03:28:04 +Gasser Ronny;03:03:53 +Schefer Stefan;02:59:20 +Carl Anna Barbla;03:43:24 +Hottinger Nicole;03:21:51 +Rechsteiner Simone;03:28:45 +Rutz Miriam;03:14:39 +Umbricht Sarah;03:15:55 +Gonzalez Arza Jose;04:28:07 +Tedeschi Alfonso;03:28:39 +Krebs Michaela;03:31:25 +Willborn Alexander;03:30:52 +Niederbacher Martin;04:10:14 +Langhard Markus;03:34:16 +Blatter Samuel;03:20:59 +Kwak Grace;03:47:04 +Müri Michaela;03:35:15 +Seuring Carolin;03:45:02 +Bär Eva;03:48:23 +Meyer Nina;04:32:29 +Zellweger Monique;03:25:58 +Sutter Samuel;03:30:12 +Saar Rachel-Lee;03:52:13 +Morf Celine;03:29:13 +Naito Shinichi;03:24:00 +De Boni Oliver;03:30:53 +Keller Max;03:29:53 +Pinchiroli Ettore;03:14:14 +Peter Peter;02:30:28 +Ziegler Paul;02:29:58 +Schärer Sandra;03:36:52 +Kessler Hannes;03:22:18 +Fraczak Marcin;03:43:49 +Rüegg Roger;03:32:10 +Tschudi Michèle;03:12:09 +Bächer Rico;03:34:27 +Hottarek Tatjana;03:58:52 +Blatter Samuel;03:16:14 +Bingesser Barbara;03:24:11 +Vaia Karin;03:53:39 +Gellert Alexandre;03:35:09 +Sagolla Markus;03:41:17 +Bisgaard Jane;04:00:09 +Beurret Hermes;03:08:37 +Harder Daniel;03:29:57 +Harder Daniel;03:30:32 +Kugler Raphael;03:13:30 +Ploskonka Elmar;03:39:46 +Kammerer Dorothee;03:26:09 +Kammerer Dorothee;03:02:54 +Koch Rachelle;03:44:11 +Bolliger Aino;03:02:42 +Bolliger Aino;03:55:59 +Guggisberg Michael;03:03:11 +Winter Beatrix;04:39:01 +Vincenz Claudia;03:30:31 +Györvari Lars;03:50:30 +Künzle Stefan;03:25:50 +Dütting André;03:42:42 +Mondini Michèle;04:09:20 +Rohner Catherine;03:29:21 +Ammann Beat;02:37:36 +Kummrow Valerie;03:36:06 +Graf Peter;03:44:18 +Graf Peter;02:42:09 +Winiger Benjamin;03:50:28 +Lüthi Markus;03:24:57 +Blatter Samuel;03:33:51 +Gaillard Stephane;03:33:35 +Rüegg Marco;03:23:19 +Rüttimann Urs;03:07:43 +Koller Markus;03:04:41 +Flury Ernesto;03:16:30 +Specker Marco;03:09:45 +Niklaus Tina;03:37:33 +Widmer Nathalie;03:49:31 +Gröbli Susanne;03:34:44 +Rütimann Thomas;03:26:25 +Graf Beatrice;03:31:13 +Steiner Elisabeth;03:45:54 +Croset Marcel;03:25:34 +Scherrer Rainer;03:00:26 +Kuhn Gabriela;03:36:44 +Bernold Roman;03:25:29 +Insley Anne;04:01:04 +Wirth Jessy;03:17:09 +Soldo Lovro;03:56:04 +Mazziotta Raffaele;03:52:18 +Lacharite Claudie;03:51:29 +Manz Alexander;04:14:01 +Staub Jürg;04:12:48 +Petrakis Stefanos;03:37:33 +Gerber Mark;03:15:01 +Gerber Mark;03:17:27 +Franzi Roger;03:27:52 +Schmid Stefanie;03:36:29 +Mehta Sunil;04:00:20 +Spillmann Roger;04:05:07 +Bolli Andreas;04:02:04 +Suter Sabrina;03:52:01 +Meier Helen;03:57:12 diff --git a/src/ch/zhaw/ads/RankingTreeServer.java b/src/ch/zhaw/ads/RankingTreeServer.java new file mode 100644 index 0000000..7406eb5 --- /dev/null +++ b/src/ch/zhaw/ads/RankingTreeServer.java @@ -0,0 +1,37 @@ +package ch.zhaw.ads; + +import java.util.concurrent.atomic.AtomicInteger; + +public class RankingTreeServer implements CommandExecutor { + + public Tree createTree(String rankingText) { + // TODO Implement + } + + public String createSortedText(Tree competitorTree) { + AtomicInteger rank = new AtomicInteger(1); + StringBuilder sb = new StringBuilder(); + competitorTree.traversal() // TODO Implement + return sb.toString(); + } + + public String execute(String rankingList) { + Tree competitorTree = createTree(rankingList); + return "Rangliste (Tree)\n" + createSortedText(competitorTree); + } + + public static void main(String[] args) { + String rangliste = "Mueller Stefan;02:31:14\n" + + "Marti Adrian;02:30:09\n" + + "Kiptum Daniel;02:11:31\n" + + "Ancay Tarcis;02:20:02\n" + + "Kreibuhl Christian;02:21:47\n" + + "Ott Michael;02:33:48\n" + + "Menzi Christoph;02:27:26\n" + + "Oliver Ruben;02:32:12\n" + + "Elmer Beat;02:33:53\n" + + "Kuehni Martin;02:33:36\n"; + RankingTreeServer server = new RankingTreeServer(); + System.out.println(server.execute(rangliste)); + } +} diff --git a/src/ch/zhaw/ads/ServerFactory.java b/src/ch/zhaw/ads/ServerFactory.java new file mode 100644 index 0000000..16805ae --- /dev/null +++ b/src/ch/zhaw/ads/ServerFactory.java @@ -0,0 +1,76 @@ +package ch.zhaw.ads; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * Classloader that handles file path of class + */ +class MyClassLoader extends ClassLoader { + private String path; + + MyClassLoader(ClassLoader parent) { + super(parent); + } + + /** + * @param name filename of class + * return content of file as array of bytes; if file does not exist return null + */ + private byte[] getBytes(String name) { + try { + System.out.println(name); + RandomAccessFile file = new RandomAccessFile(name, "r"); + byte[] data = new byte[(int) file.length()]; + file.readFully(data); + file.close(); + return data; + } catch (IOException e) { + } + return null; + } + + /** + * @param name filename of class + */ + public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + System.out.println("load:" + name + " " + resolve); + Class clazz; + byte[] classData = getBytes(name); + if (classData != null) { + clazz = defineClass(null, classData, 0, classData.length); + path = name.substring(0, + name.length() - clazz.getName().length() - ".class".length()); + return clazz; + } + if (!resolve) { + classData = getBytes( + path + name.replace(".", File.separator) + ".class"); + if (classData != null) { + return defineClass(null, classData, 0, classData.length); + } + } + return findSystemClass(name); + } +} + +/** + * ServerFactory -- Praktikum Experimentierkasten -- + * + * @author K. Rege + * @version 1.0 -- Factory zur Erstellung von Server Objekten + * @version 2.0 -- Dynamisches Nachladen + * @version 2.01 -- Fix deprecated Functions + */ +public class ServerFactory { + public static Class loadClass(String name) throws Exception { + MyClassLoader myClassLoader = new MyClassLoader( + MyClassLoader.class.getClassLoader()); + return myClassLoader.loadClass(name, true); + } + + public static CommandExecutor createServer(String name) throws Exception { + return (CommandExecutor) loadClass(name).getConstructor(new Class[]{}).newInstance(); + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/SortedBinaryTree.java b/src/ch/zhaw/ads/SortedBinaryTree.java new file mode 100644 index 0000000..bcc146d --- /dev/null +++ b/src/ch/zhaw/ads/SortedBinaryTree.java @@ -0,0 +1,125 @@ +package ch.zhaw.ads; + +public class SortedBinaryTree> implements Tree { + protected TreeNode root; + + private TreeNode insertAt(TreeNode node, T x) { + if (node == null) { + return new TreeNode(x); + } else { + if (x.compareTo(node.getValue()) <= 0) { + node.left = insertAt(node.left, x); + } else { + node.right = insertAt(node.right, x); + } + return node; + } + } + + public void add(T x) { + root = insertAt(root, x); + } + + // find node to replace + private TreeNode findRepAt(TreeNode node, TreeNode rep) { + if (node.right != null) { + node.right = findRepAt(node.right, rep); + } else { + rep.values = node.values; + node = node.left; + } + return node; + } + + // remove node + private TreeNode removeAt(TreeNode node, T x, TreeNode removed) { + if (node == null) { + return null; + } else { + if (x.compareTo(node.getValue()) == 0) { + // found + removed.values = node.values; + if (node.left == null) { + node = node.right; + } else if (node.right == null) { + node = node.left; + } else { + node.left = findRepAt(node.left, node); + } + } else if (x.compareTo(node.getValue()) < 0) { + // search left + node.left = removeAt(node.left, x, removed); + } else { + // search right + node.right = removeAt(node.right, x, removed); + } + return node; + } + } + + public T remove(T x) { + TreeNode removed = new TreeNode(null); + root = removeAt(root, x, removed); + return removed.getValue(); + } + + public boolean isEmpty() { + return root == null; + } + + public Traversal traversal() { + // TODO Implement + } + + protected int calcHeight(TreeNode node) { + // TODO Implement + } + + public int height() { + return calcHeight(root); + } + + protected int calcSize(TreeNode p) { + // TODO Implement + } + + public int size() { + return calcSize(root); + } + + public boolean balanced() { + return false; + } + + // only for testing and debugging: show the structure of the tree + public String printTree() { + StringBuilder out = new StringBuilder(); + if (root.right != null) { + printTree(root.right, out, true, ""); + } + out.append(root.values).append("\n"); + if (root.left != null) { + printTree(root.left, out, false, ""); + } + return out.toString(); + } + + private void printTree(TreeNode node, StringBuilder out, boolean isRight, String indent) { + if (node.right != null) { + printTree(node.right, out, true, + indent + (isRight ? " " : " | ")); + } + out.append(indent); + if (isRight) { + out.append(" /"); + } else { + out.append(" \\"); + } + out.append("----- "); + out.append(node.values).append("\n"); + if (node.left != null) { + printTree(node.left, out, false, + indent + (isRight ? " | " : " ")); + } + } +} diff --git a/src/ch/zhaw/ads/Traversal.java b/src/ch/zhaw/ads/Traversal.java new file mode 100644 index 0000000..d6d2125 --- /dev/null +++ b/src/ch/zhaw/ads/Traversal.java @@ -0,0 +1,15 @@ +package ch.zhaw.ads; + +/** interface of Traversal ADT */ +public interface Traversal { + /** traverse elements of tree in preorder */ + void preorder(Visitor vistor); + /** traverse elements of tree in inorder */ + void inorder(Visitor vistor); + /** traverse elements of tree in postorder */ + void postorder(Visitor vistor); + /** traverse elements of tree in levelorder */ + void levelorder(Visitor vistor); + /** traverse elements of tree interval */ + void interval(T min, T max, Visitor vistor); +} diff --git a/src/ch/zhaw/ads/Tree.java b/src/ch/zhaw/ads/Tree.java new file mode 100644 index 0000000..6fd05cd --- /dev/null +++ b/src/ch/zhaw/ads/Tree.java @@ -0,0 +1,25 @@ +package ch.zhaw.ads; + +/** interface of Tree ADT */ +public interface Tree> { + /** add an element to the tree */ + void add(T o); + + /** remove an element; returns the element if found else return null */ + T remove(T o); + + /** test if tree is empty */ + boolean isEmpty(); + + /** returns instance of class that implements traversal interface */ + Traversal traversal(); + + /** number of elements */ + int size(); + + /** height of the tree */ + int height(); + + /** is the tree balanced */ + boolean balanced(); +} diff --git a/src/ch/zhaw/ads/TreeNode.java b/src/ch/zhaw/ads/TreeNode.java new file mode 100644 index 0000000..fc85700 --- /dev/null +++ b/src/ch/zhaw/ads/TreeNode.java @@ -0,0 +1,22 @@ +package ch.zhaw.ads; + +import java.util.LinkedList; +import java.util.List; + +class TreeNode> { + List values; // implemented as list because of doublette handling in AVL + TreeNode left, right; + int height; // for AVL + + TreeNode(T value){ + this.values = new LinkedList<>(); + this.values.add(value); + this.height = 1; + } + + TreeNode(T value, TreeNode left, TreeNode right){ + this(value); this.left = left; this.right = right; + } + + T getValue(){return values.get(0);} +} diff --git a/src/ch/zhaw/ads/TreeTraversal.java b/src/ch/zhaw/ads/TreeTraversal.java new file mode 100644 index 0000000..4b9b681 --- /dev/null +++ b/src/ch/zhaw/ads/TreeTraversal.java @@ -0,0 +1,21 @@ +package ch.zhaw.ads; + +public class TreeTraversal> implements Traversal { + private final TreeNode root; + + public TreeTraversal(TreeNode root) { + this.root = root; + } + + public void inorder(Visitor vis) { + // TODO Implement + } + + public void preorder(Visitor vis) { + // TODO Implement + } + + public void postorder(Visitor vis) { + // TODO Implement + } +} diff --git a/src/ch/zhaw/ads/Visitor.java b/src/ch/zhaw/ads/Visitor.java new file mode 100644 index 0000000..a634242 --- /dev/null +++ b/src/ch/zhaw/ads/Visitor.java @@ -0,0 +1,7 @@ +package ch.zhaw.ads; + +/** interface of visitor ADT */ +public interface Visitor { + /** called for each element in the tree */ + void visit(T obj); +}