+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/bracket-push/.gradle/4.2/fileChanges/last-build.bin b/kotlin/bracket-push/.gradle/4.2/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/kotlin/bracket-push/.gradle/4.2/fileChanges/last-build.bin differ
diff --git a/kotlin/bracket-push/.gradle/4.2/fileHashes/fileHashes.bin b/kotlin/bracket-push/.gradle/4.2/fileHashes/fileHashes.bin
new file mode 100644
index 0000000..8a45acb
Binary files /dev/null and b/kotlin/bracket-push/.gradle/4.2/fileHashes/fileHashes.bin differ
diff --git a/kotlin/bracket-push/.gradle/4.2/fileHashes/fileHashes.lock b/kotlin/bracket-push/.gradle/4.2/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..3bbe978
Binary files /dev/null and b/kotlin/bracket-push/.gradle/4.2/fileHashes/fileHashes.lock differ
diff --git a/kotlin/bracket-push/.idea/compiler.xml b/kotlin/bracket-push/.idea/compiler.xml
new file mode 100644
index 0000000..871c0b0
--- /dev/null
+++ b/kotlin/bracket-push/.idea/compiler.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/bracket-push/.idea/misc.xml b/kotlin/bracket-push/.idea/misc.xml
new file mode 100644
index 0000000..9da8de7
--- /dev/null
+++ b/kotlin/bracket-push/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/bracket-push/.idea/modules.xml b/kotlin/bracket-push/.idea/modules.xml
new file mode 100644
index 0000000..6bf50d9
--- /dev/null
+++ b/kotlin/bracket-push/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/bracket-push/.idea/modules/bracket-push_main.iml b/kotlin/bracket-push/.idea/modules/bracket-push_main.iml
new file mode 100644
index 0000000..35425da
--- /dev/null
+++ b/kotlin/bracket-push/.idea/modules/bracket-push_main.iml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/bracket-push/.idea/modules/bracket-push_test.iml b/kotlin/bracket-push/.idea/modules/bracket-push_test.iml
new file mode 100644
index 0000000..6504ec6
--- /dev/null
+++ b/kotlin/bracket-push/.idea/modules/bracket-push_test.iml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/bracket-push/bracket-push.iml b/kotlin/bracket-push/bracket-push.iml
new file mode 100644
index 0000000..b336cb7
--- /dev/null
+++ b/kotlin/bracket-push/bracket-push.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/dnd-character/.exercism/metadata.json b/kotlin/dnd-character/.exercism/metadata.json
new file mode 100644
index 0000000..103e83d
--- /dev/null
+++ b/kotlin/dnd-character/.exercism/metadata.json
@@ -0,0 +1 @@
+{"track":"kotlin","exercise":"dnd-character","id":"bf49049dd95f4df2b3b9e01a0e911ddb","url":"https://exercism.io/my/solutions/bf49049dd95f4df2b3b9e01a0e911ddb","handle":"anthonycicc","is_requester":true,"auto_approve":false}
\ No newline at end of file
diff --git a/kotlin/dnd-character/.gradle/6.0.1/executionHistory/executionHistory.bin b/kotlin/dnd-character/.gradle/6.0.1/executionHistory/executionHistory.bin
new file mode 100644
index 0000000..2e6fdd3
Binary files /dev/null and b/kotlin/dnd-character/.gradle/6.0.1/executionHistory/executionHistory.bin differ
diff --git a/kotlin/dnd-character/.gradle/6.0.1/executionHistory/executionHistory.lock b/kotlin/dnd-character/.gradle/6.0.1/executionHistory/executionHistory.lock
new file mode 100644
index 0000000..2a76dd3
Binary files /dev/null and b/kotlin/dnd-character/.gradle/6.0.1/executionHistory/executionHistory.lock differ
diff --git a/kotlin/dnd-character/.gradle/6.0.1/fileChanges/last-build.bin b/kotlin/dnd-character/.gradle/6.0.1/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/kotlin/dnd-character/.gradle/6.0.1/fileChanges/last-build.bin differ
diff --git a/kotlin/dnd-character/.gradle/6.0.1/fileContent/fileContent.lock b/kotlin/dnd-character/.gradle/6.0.1/fileContent/fileContent.lock
new file mode 100644
index 0000000..58ae643
Binary files /dev/null and b/kotlin/dnd-character/.gradle/6.0.1/fileContent/fileContent.lock differ
diff --git a/kotlin/dnd-character/.gradle/6.0.1/fileHashes/fileHashes.bin b/kotlin/dnd-character/.gradle/6.0.1/fileHashes/fileHashes.bin
new file mode 100644
index 0000000..f0157c1
Binary files /dev/null and b/kotlin/dnd-character/.gradle/6.0.1/fileHashes/fileHashes.bin differ
diff --git a/kotlin/dnd-character/.gradle/6.0.1/fileHashes/fileHashes.lock b/kotlin/dnd-character/.gradle/6.0.1/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..67ee313
Binary files /dev/null and b/kotlin/dnd-character/.gradle/6.0.1/fileHashes/fileHashes.lock differ
diff --git a/kotlin/dnd-character/.gradle/6.0.1/gc.properties b/kotlin/dnd-character/.gradle/6.0.1/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/dnd-character/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/kotlin/dnd-character/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000..4f9ced0
Binary files /dev/null and b/kotlin/dnd-character/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/kotlin/dnd-character/.gradle/buildOutputCleanup/cache.properties b/kotlin/dnd-character/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000..d4c9b61
--- /dev/null
+++ b/kotlin/dnd-character/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Thu Mar 05 17:08:35 EST 2020
+gradle.version=6.0.1
diff --git a/kotlin/dnd-character/.gradle/buildOutputCleanup/outputFiles.bin b/kotlin/dnd-character/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000..4f49b82
Binary files /dev/null and b/kotlin/dnd-character/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/kotlin/dnd-character/.gradle/vcs-1/gc.properties b/kotlin/dnd-character/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/dnd-character/.idea/.gitignore b/kotlin/dnd-character/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/kotlin/dnd-character/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/kotlin/dnd-character/.idea/compiler.xml b/kotlin/dnd-character/.idea/compiler.xml
new file mode 100644
index 0000000..7e7ee62
--- /dev/null
+++ b/kotlin/dnd-character/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/dnd-character/.idea/jarRepositories.xml b/kotlin/dnd-character/.idea/jarRepositories.xml
new file mode 100644
index 0000000..efa4625
--- /dev/null
+++ b/kotlin/dnd-character/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/dnd-character/.idea/misc.xml b/kotlin/dnd-character/.idea/misc.xml
new file mode 100644
index 0000000..b9d0e72
--- /dev/null
+++ b/kotlin/dnd-character/.idea/misc.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/dnd-character/.idea/vcs.xml b/kotlin/dnd-character/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/kotlin/dnd-character/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/dnd-character/README.md b/kotlin/dnd-character/README.md
new file mode 100644
index 0000000..768965a
--- /dev/null
+++ b/kotlin/dnd-character/README.md
@@ -0,0 +1,64 @@
+# D&D Character
+
+For a game of [Dungeons & Dragons][DND], each player starts by generating a
+character they can play with. This character has, among other things, six
+abilities; strength, dexterity, constitution, intelligence, wisdom and
+charisma. These six abilities have scores that are determined randomly. You
+do this by rolling four 6-sided dice and record the sum of the largest three
+dice. You do this six times, once for each ability.
+
+Your character's initial hitpoints are 10 + your character's constitution
+modifier. You find your character's constitution modifier by subtracting 10
+from your character's constitution, divide by 2 and round down.
+
+Write a random character generator that follows the rules above.
+
+For example, the six throws of four dice may look like:
+
+* 5, 3, 1, 6: You discard the 1 and sum 5 + 3 + 6 = 14, which you assign to strength.
+* 3, 2, 5, 3: You discard the 2 and sum 3 + 5 + 3 = 11, which you assign to dexterity.
+* 1, 1, 1, 1: You discard the 1 and sum 1 + 1 + 1 = 3, which you assign to constitution.
+* 2, 1, 6, 6: You discard the 1 and sum 2 + 6 + 6 = 14, which you assign to intelligence.
+* 3, 5, 3, 4: You discard the 3 and sum 5 + 3 + 4 = 12, which you assign to wisdom.
+* 6, 6, 6, 6: You discard the 6 and sum 6 + 6 + 6 = 18, which you assign to charisma.
+
+Because constitution is 3, the constitution modifier is -4 and the hitpoints are 6.
+
+## Notes
+
+Most programming languages feature (pseudo-)random generators, but few
+programming languages are designed to roll dice. One such language is [Troll].
+
+[DND]: https://en.wikipedia.org/wiki/Dungeons_%26_Dragons
+[Troll]: http://hjemmesider.diku.dk/~torbenm/Troll/
+
+## Setup
+
+Go through the setup instructions for Kotlin to install the necessary
+dependencies:
+
+[https://exercism.io/tracks/kotlin/installation](https://exercism.io/tracks/kotlin/installation)
+
+## Making the test suite pass
+
+Execute the tests with:
+
+```bash
+$ ./gradlew test
+```
+
+> Use `gradlew.bat` if you're on Windows
+
+In the test suites all tests but the first have been skipped.
+
+Once you get a test passing, you can enable the next one by removing the
+`@Ignore` annotation.
+
+## Source
+
+Simon Shine, Erik Schierboom [https://github.com/exercism/problem-specifications/issues/616#issuecomment-437358945](https://github.com/exercism/problem-specifications/issues/616#issuecomment-437358945)
+
+## Submitting Incomplete Solutions
+
+It's possible to submit an incomplete solution so you can see how others have
+completed the exercise.
diff --git a/kotlin/dnd-character/build.gradle.kts b/kotlin/dnd-character/build.gradle.kts
new file mode 100644
index 0000000..1793ac4
--- /dev/null
+++ b/kotlin/dnd-character/build.gradle.kts
@@ -0,0 +1,23 @@
+import org.gradle.api.tasks.testing.logging.TestExceptionFormat
+
+plugins {
+ kotlin("jvm") version "1.3.60"
+}
+
+repositories {
+ jcenter()
+}
+
+dependencies {
+ compile(kotlin("stdlib"))
+
+ testImplementation("junit:junit:4.12")
+ testImplementation(kotlin("test-junit"))
+}
+
+tasks.withType {
+ testLogging {
+ exceptionFormat = TestExceptionFormat.FULL
+ events("passed", "failed", "skipped")
+ }
+}
diff --git a/kotlin/dnd-character/gradle/wrapper/gradle-wrapper.properties b/kotlin/dnd-character/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9492014
--- /dev/null
+++ b/kotlin/dnd-character/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/kotlin/dnd-character/gradlew b/kotlin/dnd-character/gradlew
new file mode 100644
index 0000000..83f2acf
--- /dev/null
+++ b/kotlin/dnd-character/gradlew
@@ -0,0 +1,188 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or 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 UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$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 "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# 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
+ ;;
+ 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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/kotlin/dnd-character/gradlew.bat b/kotlin/dnd-character/gradlew.bat
new file mode 100644
index 0000000..9618d8d
--- /dev/null
+++ b/kotlin/dnd-character/gradlew.bat
@@ -0,0 +1,100 @@
+@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 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 init
+
+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 init
+
+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
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+: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 %CMD_LINE_ARGS%
+
+: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/kotlin/dnd-character/src/main/kotlin/DndCharacter.kt b/kotlin/dnd-character/src/main/kotlin/DndCharacter.kt
new file mode 100644
index 0000000..312d39e
--- /dev/null
+++ b/kotlin/dnd-character/src/main/kotlin/DndCharacter.kt
@@ -0,0 +1,24 @@
+import kotlin.math.floor
+import kotlin.random.Random
+
+class DndCharacter {
+
+ val strength: Int by lazy { ability() }
+ val dexterity: Int by lazy { ability() }
+ val constitution: Int by lazy { ability() }
+ val intelligence: Int by lazy { ability() }
+ val wisdom: Int by lazy { ability() }
+ val charisma: Int by lazy { ability() }
+ val hitpoints: Int by lazy { 10 + modifier(constitution) }
+
+ companion object {
+
+ fun ability(): Int {
+ return Random.nextInt(3, 19)
+ }
+
+ fun modifier(score: Int): Int {
+ return floor((score - 10) / 2.0).toInt()
+ }
+ }
+}
diff --git a/kotlin/dnd-character/src/test/kotlin/DndCharacterTest.kt b/kotlin/dnd-character/src/test/kotlin/DndCharacterTest.kt
new file mode 100644
index 0000000..6e8e1b4
--- /dev/null
+++ b/kotlin/dnd-character/src/test/kotlin/DndCharacterTest.kt
@@ -0,0 +1,79 @@
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
+
+class DndCharacterTest {
+
+ @Test
+ fun `ability modifier for score 3 is n4`() = assertEquals(-4, DndCharacter.modifier(3))
+
+ @Test
+ fun `ability modifier for score 4 is n3`() = assertEquals(-3, DndCharacter.modifier(4))
+
+ @Test
+ fun `ability modifier for score 5 is n3`() = assertEquals(-3, DndCharacter.modifier(5))
+
+ @Test
+ fun `ability modifier for score 6 is n2`() = assertEquals(-2, DndCharacter.modifier(6))
+
+ @Test
+ fun `ability modifier for score 7 is n2`() = assertEquals(-2, DndCharacter.modifier(7))
+
+ @Test
+ fun `ability modifier for score 8 is n1`() = assertEquals(-1, DndCharacter.modifier(8))
+
+ @Test
+ fun `ability modifier for score 9 is n1`() = assertEquals(-1, DndCharacter.modifier(9))
+
+ @Test
+ fun `ability modifier for score 10 is 0`() = assertEquals(0, DndCharacter.modifier(10))
+
+ @Test
+ fun `ability modifier for score 11 is 0`() = assertEquals(0, DndCharacter.modifier(11))
+
+ @Test
+ fun `ability modifier for score 12 is 1`() = assertEquals(1, DndCharacter.modifier(12))
+
+ @Test
+ fun `ability modifier for score 13 is 1`() = assertEquals(1, DndCharacter.modifier(13))
+
+ @Test
+ fun `ability modifier for score 14 is 2`() = assertEquals(2, DndCharacter.modifier(14))
+
+ @Test
+ fun `ability modifier for score 15 is 2`() = assertEquals(2, DndCharacter.modifier(15))
+
+ @Test
+ fun `ability modifier for score 16 is 3`() = assertEquals(3, DndCharacter.modifier(16))
+
+ @Test
+ fun `ability modifier for score 17 is 3`() = assertEquals(3, DndCharacter.modifier(17))
+
+ @Test
+ fun `ability modifier for score 18 is 4`() = assertEquals(4, DndCharacter.modifier(18))
+
+ @Test
+ fun `random ability is within range`() {
+ val score = DndCharacter.ability()
+ assertTrue(score in (3..18))
+ }
+
+ @Test
+ fun `random character is valid`() {
+ with (DndCharacter()) {
+ assertTrue(strength in (3..18))
+ assertTrue(dexterity in (3..18))
+ assertTrue(constitution in (3..18))
+ assertTrue(intelligence in (3..18))
+ assertTrue(wisdom in (3..18))
+ assertTrue(charisma in (3..18))
+ assertEquals(10 + DndCharacter.modifier(constitution), hitpoints)
+ }
+ }
+
+ @Test
+ fun `each ability is only calculated once`() {
+ val char = DndCharacter()
+ assertTrue(char.strength == char.strength)
+ }
+}
diff --git a/kotlin/isbn-verifier/.exercism/metadata.json b/kotlin/isbn-verifier/.exercism/metadata.json
new file mode 100644
index 0000000..6cdedfb
--- /dev/null
+++ b/kotlin/isbn-verifier/.exercism/metadata.json
@@ -0,0 +1 @@
+{"track":"kotlin","exercise":"isbn-verifier","id":"23533596089046dcaaf5eb99c4ab0355","url":"https://exercism.io/my/solutions/23533596089046dcaaf5eb99c4ab0355","handle":"anthonycicc","is_requester":true,"auto_approve":false}
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.gradle/4.10/fileChanges/last-build.bin b/kotlin/isbn-verifier/.gradle/4.10/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/4.10/fileChanges/last-build.bin differ
diff --git a/kotlin/isbn-verifier/.gradle/4.10/fileContent/fileContent.lock b/kotlin/isbn-verifier/.gradle/4.10/fileContent/fileContent.lock
new file mode 100644
index 0000000..12cd26c
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/4.10/fileContent/fileContent.lock differ
diff --git a/kotlin/isbn-verifier/.gradle/4.10/fileHashes/fileHashes.bin b/kotlin/isbn-verifier/.gradle/4.10/fileHashes/fileHashes.bin
new file mode 100644
index 0000000..49ee26f
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/4.10/fileHashes/fileHashes.bin differ
diff --git a/kotlin/isbn-verifier/.gradle/4.10/fileHashes/fileHashes.lock b/kotlin/isbn-verifier/.gradle/4.10/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..dcd5e1f
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/4.10/fileHashes/fileHashes.lock differ
diff --git a/kotlin/isbn-verifier/.gradle/4.10/gc.properties b/kotlin/isbn-verifier/.gradle/4.10/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/isbn-verifier/.gradle/4.10/taskHistory/taskHistory.bin b/kotlin/isbn-verifier/.gradle/4.10/taskHistory/taskHistory.bin
new file mode 100644
index 0000000..c6d535e
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/4.10/taskHistory/taskHistory.bin differ
diff --git a/kotlin/isbn-verifier/.gradle/4.10/taskHistory/taskHistory.lock b/kotlin/isbn-verifier/.gradle/4.10/taskHistory/taskHistory.lock
new file mode 100644
index 0000000..6d59a32
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/4.10/taskHistory/taskHistory.lock differ
diff --git a/kotlin/isbn-verifier/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/kotlin/isbn-verifier/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000..15b4e65
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/kotlin/isbn-verifier/.gradle/buildOutputCleanup/cache.properties b/kotlin/isbn-verifier/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000..799e887
--- /dev/null
+++ b/kotlin/isbn-verifier/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Fri Nov 30 19:52:59 EST 2018
+gradle.version=4.10
diff --git a/kotlin/isbn-verifier/.gradle/buildOutputCleanup/outputFiles.bin b/kotlin/isbn-verifier/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000..6dea91e
Binary files /dev/null and b/kotlin/isbn-verifier/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/kotlin/isbn-verifier/.gradle/vcs-1/gc.properties b/kotlin/isbn-verifier/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/isbn-verifier/.idea/compiler.xml b/kotlin/isbn-verifier/.idea/compiler.xml
new file mode 100644
index 0000000..6bd7198
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/compiler.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.idea/encodings.xml b/kotlin/isbn-verifier/.idea/encodings.xml
new file mode 100644
index 0000000..15a15b2
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.idea/misc.xml b/kotlin/isbn-verifier/.idea/misc.xml
new file mode 100644
index 0000000..ba93b15
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.idea/modules.xml b/kotlin/isbn-verifier/.idea/modules.xml
new file mode 100644
index 0000000..25c0d5b
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.idea/modules/isbn-verifier.main.iml b/kotlin/isbn-verifier/.idea/modules/isbn-verifier.main.iml
new file mode 100644
index 0000000..fc536cc
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/modules/isbn-verifier.main.iml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.idea/modules/isbn-verifier.test.iml b/kotlin/isbn-verifier/.idea/modules/isbn-verifier.test.iml
new file mode 100644
index 0000000..b939fe9
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/modules/isbn-verifier.test.iml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/.idea/vcs.xml b/kotlin/isbn-verifier/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/kotlin/isbn-verifier/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/isbn-verifier/src/main/kotlin/.keep b/kotlin/isbn-verifier/src/main/kotlin/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/rail-fence-cipher/.exercism/metadata.json b/kotlin/rail-fence-cipher/.exercism/metadata.json
new file mode 100644
index 0000000..dbfa8bb
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.exercism/metadata.json
@@ -0,0 +1 @@
+{"track":"kotlin","exercise":"rail-fence-cipher","id":"c7f1bd69444b4b92ab22bb0216712dcf","url":"https://exercism.io/my/solutions/c7f1bd69444b4b92ab22bb0216712dcf","handle":"anthonycicc","is_requester":true,"auto_approve":false}
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.gradle/4.10/fileChanges/last-build.bin b/kotlin/rail-fence-cipher/.gradle/4.10/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/4.10/fileChanges/last-build.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/4.10/fileHashes/fileHashes.bin b/kotlin/rail-fence-cipher/.gradle/4.10/fileHashes/fileHashes.bin
new file mode 100644
index 0000000..c9ddc57
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/4.10/fileHashes/fileHashes.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/4.10/fileHashes/fileHashes.lock b/kotlin/rail-fence-cipher/.gradle/4.10/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..6759798
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/4.10/fileHashes/fileHashes.lock differ
diff --git a/kotlin/rail-fence-cipher/.gradle/4.10/gc.properties b/kotlin/rail-fence-cipher/.gradle/4.10/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/rail-fence-cipher/.gradle/4.10/taskHistory/taskHistory.bin b/kotlin/rail-fence-cipher/.gradle/4.10/taskHistory/taskHistory.bin
new file mode 100644
index 0000000..907be0a
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/4.10/taskHistory/taskHistory.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/4.10/taskHistory/taskHistory.lock b/kotlin/rail-fence-cipher/.gradle/4.10/taskHistory/taskHistory.lock
new file mode 100644
index 0000000..d4ccedf
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/4.10/taskHistory/taskHistory.lock differ
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/fileChanges/last-build.bin b/kotlin/rail-fence-cipher/.gradle/5.0/fileChanges/last-build.bin
new file mode 100644
index 0000000..f76dd23
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/5.0/fileChanges/last-build.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/fileContent/fileContent.lock b/kotlin/rail-fence-cipher/.gradle/5.0/fileContent/fileContent.lock
new file mode 100644
index 0000000..4a00a7d
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/5.0/fileContent/fileContent.lock differ
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/fileHashes/fileHashes.bin b/kotlin/rail-fence-cipher/.gradle/5.0/fileHashes/fileHashes.bin
new file mode 100644
index 0000000..8b6816b
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/5.0/fileHashes/fileHashes.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/fileHashes/fileHashes.lock b/kotlin/rail-fence-cipher/.gradle/5.0/fileHashes/fileHashes.lock
new file mode 100644
index 0000000..deafad5
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/5.0/fileHashes/fileHashes.lock differ
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/gc.properties b/kotlin/rail-fence-cipher/.gradle/5.0/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/taskHistory/taskHistory.bin b/kotlin/rail-fence-cipher/.gradle/5.0/taskHistory/taskHistory.bin
new file mode 100644
index 0000000..f02d4ff
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/5.0/taskHistory/taskHistory.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/5.0/taskHistory/taskHistory.lock b/kotlin/rail-fence-cipher/.gradle/5.0/taskHistory/taskHistory.lock
new file mode 100644
index 0000000..c569953
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/5.0/taskHistory/taskHistory.lock differ
diff --git a/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000..7032d51
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/cache.properties b/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000..c08a1b9
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Fri Nov 30 19:47:09 EST 2018
+gradle.version=4.10
diff --git a/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/outputFiles.bin b/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000..b63e31d
Binary files /dev/null and b/kotlin/rail-fence-cipher/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/kotlin/rail-fence-cipher/.gradle/vcs-1/gc.properties b/kotlin/rail-fence-cipher/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/kotlin/rail-fence-cipher/.idea/compiler.xml b/kotlin/rail-fence-cipher/.idea/compiler.xml
new file mode 100644
index 0000000..68541e2
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/compiler.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/encodings.xml b/kotlin/rail-fence-cipher/.idea/encodings.xml
new file mode 100644
index 0000000..15a15b2
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/kotlinc.xml b/kotlin/rail-fence-cipher/.idea/kotlinc.xml
new file mode 100644
index 0000000..8b7f4af
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/misc.xml b/kotlin/rail-fence-cipher/.idea/misc.xml
new file mode 100644
index 0000000..ba93b15
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/modules.xml b/kotlin/rail-fence-cipher/.idea/modules.xml
new file mode 100644
index 0000000..56478c6
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/modules/rail-fence-cipher.main.iml b/kotlin/rail-fence-cipher/.idea/modules/rail-fence-cipher.main.iml
new file mode 100644
index 0000000..ad53663
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/modules/rail-fence-cipher.main.iml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/modules/rail-fence-cipher.test.iml b/kotlin/rail-fence-cipher/.idea/modules/rail-fence-cipher.test.iml
new file mode 100644
index 0000000..527c109
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/modules/rail-fence-cipher.test.iml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/.idea/vcs.xml b/kotlin/rail-fence-cipher/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/kotlin/rail-fence-cipher/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/README.md b/kotlin/rail-fence-cipher/README.md
new file mode 100644
index 0000000..6f64218
--- /dev/null
+++ b/kotlin/rail-fence-cipher/README.md
@@ -0,0 +1,67 @@
+# Rail Fence Cipher
+
+Implement encoding and decoding for the rail fence cipher.
+
+The Rail Fence cipher is a form of transposition cipher that gets its name from
+the way in which it's encoded. It was already used by the ancient Greeks.
+
+In the Rail Fence cipher, the message is written downwards on successive "rails"
+of an imaginary fence, then moving up when we get to the bottom (like a zig-zag).
+Finally the message is then read off in rows.
+
+For example, using three "rails" and the message "WE ARE DISCOVERED FLEE AT ONCE",
+the cipherer writes out:
+
+```text
+W . . . E . . . C . . . R . . . L . . . T . . . E
+. E . R . D . S . O . E . E . F . E . A . O . C .
+. . A . . . I . . . V . . . D . . . E . . . N . .
+```
+
+Then reads off:
+
+```text
+WECRLTEERDSOEEFEAOCAIVDEN
+```
+
+To decrypt a message you take the zig-zag shape and fill the ciphertext along the rows.
+
+```text
+? . . . ? . . . ? . . . ? . . . ? . . . ? . . . ?
+. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
+. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
+```
+
+The first row has seven spots that can be filled with "WECRLTE".
+
+```text
+W . . . E . . . C . . . R . . . L . . . T . . . E
+. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
+. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
+```
+
+Now the 2nd row takes "ERDSOEEFEAOC".
+
+```text
+W . . . E . . . C . . . R . . . L . . . T . . . E
+. E . R . D . S . O . E . E . F . E . A . O . C .
+. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
+```
+
+Leaving "AIVDEN" for the last row.
+
+```text
+W . . . E . . . C . . . R . . . L . . . T . . . E
+. E . R . D . S . O . E . E . F . E . A . O . C .
+. . A . . . I . . . V . . . D . . . E . . . N . .
+```
+
+If you now read along the zig-zag shape you can read the original message.
+
+## Source
+
+Wikipedia [https://en.wikipedia.org/wiki/Transposition_cipher#Rail_Fence_cipher](https://en.wikipedia.org/wiki/Transposition_cipher#Rail_Fence_cipher)
+
+## Submitting Incomplete Solutions
+
+It's possible to submit an incomplete solution so you can see how others have completed the exercise.
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/build.gradle b/kotlin/rail-fence-cipher/build.gradle
new file mode 100644
index 0000000..e528a7b
--- /dev/null
+++ b/kotlin/rail-fence-cipher/build.gradle
@@ -0,0 +1,28 @@
+buildscript {
+ ext.kotlin_version = '1.2.40'
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+apply plugin: 'kotlin'
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+
+ testCompile 'junit:junit:4.12'
+ testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
+}
+test {
+ testLogging {
+ exceptionFormat = 'full'
+ events = ["passed", "failed", "skipped"]
+ }
+}
diff --git a/kotlin/rail-fence-cipher/gradle/wrapper/gradle-wrapper.properties b/kotlin/rail-fence-cipher/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..115e6ac
--- /dev/null
+++ b/kotlin/rail-fence-cipher/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/kotlin/rail-fence-cipher/gradlew b/kotlin/rail-fence-cipher/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/kotlin/rail-fence-cipher/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$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=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# 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
+ ;;
+ 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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/kotlin/rail-fence-cipher/gradlew.bat b/kotlin/rail-fence-cipher/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/kotlin/rail-fence-cipher/gradlew.bat
@@ -0,0 +1,84 @@
+@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 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=
+
+@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 init
+
+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 init
+
+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
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+: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 %CMD_LINE_ARGS%
+
+: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/kotlin/rail-fence-cipher/rail-fence-cipher.iml b/kotlin/rail-fence-cipher/rail-fence-cipher.iml
new file mode 100644
index 0000000..26a8d16
--- /dev/null
+++ b/kotlin/rail-fence-cipher/rail-fence-cipher.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/rail-fence-cipher/src/test/kotlin/RailFenceCipherTest.kt b/kotlin/rail-fence-cipher/src/test/kotlin/RailFenceCipherTest.kt
new file mode 100644
index 0000000..f8c103a
--- /dev/null
+++ b/kotlin/rail-fence-cipher/src/test/kotlin/RailFenceCipherTest.kt
@@ -0,0 +1,65 @@
+import org.junit.Ignore
+import org.junit.Test
+import kotlin.test.assertEquals
+
+class RailFenceCipherTest {
+
+ @Test
+ fun encodeWithTwoRails() {
+ val railFenceCipher = RailFenceCipher(2);
+ assertEquals(
+ "XXXXXXXXXOOOOOOOOO",
+ railFenceCipher.getEncryptedData("XOXOXOXOXOXOXOXOXO")
+ )
+ }
+
+ @Ignore
+ @Test
+ fun encodeWithThreeRails() {
+ val railFenceCipher = RailFenceCipher(3);
+ assertEquals(
+ "WECRLTEERDSOEEFEAOCAIVDEN",
+ railFenceCipher.getEncryptedData("WEAREDISCOVEREDFLEEATONCE")
+ )
+ }
+
+ @Ignore
+ @Test
+ fun encodeWithEndingInTheMiddle() {
+ val railFenceCipher = RailFenceCipher(4);
+ assertEquals(
+ "ESXIEECSR",
+ railFenceCipher.getEncryptedData("EXERCISES")
+ )
+ }
+
+ @Ignore
+ @Test
+ fun decodeWithThreeRails() {
+ val railFenceCipher = RailFenceCipher(3);
+ assertEquals(
+ "THEDEVILISINTHEDETAILS",
+ railFenceCipher.getDecryptedData("TEITELHDVLSNHDTISEIIEA")
+ )
+ }
+
+ @Ignore
+ @Test
+ fun decodeWithFiveRails() {
+ val railFenceCipher = RailFenceCipher(5);
+ assertEquals(
+ "EXERCISMISAWESOME",
+ railFenceCipher.getDecryptedData("EIEXMSMESAORIWSCE")
+ );
+ }
+
+ @Ignore
+ @Test
+ fun decodeWithSixRails() {
+ val railFenceCipher = RailFenceCipher(6);
+ assertEquals(
+ "112358132134558914423337761098715972584418167651094617711286",
+ railFenceCipher.getDecryptedData("133714114238148966225439541018335470986172518171757571896261")
+ )
+ }
+}
\ No newline at end of file
diff --git a/kotlin/resistor-color/.exercism/metadata.json b/kotlin/resistor-color/.exercism/metadata.json
new file mode 100644
index 0000000..c080578
--- /dev/null
+++ b/kotlin/resistor-color/.exercism/metadata.json
@@ -0,0 +1 @@
+{"track":"kotlin","exercise":"resistor-color","id":"c7f3cf6caef8472ea80cd5e123c01c99","url":"https://exercism.io/my/solutions/c7f3cf6caef8472ea80cd5e123c01c99","handle":"anthonycicc","is_requester":true,"auto_approve":false}
\ No newline at end of file
diff --git a/kotlin/resistor-color/README.md b/kotlin/resistor-color/README.md
new file mode 100644
index 0000000..181a30b
--- /dev/null
+++ b/kotlin/resistor-color/README.md
@@ -0,0 +1,51 @@
+# Resistor Color
+
+Resistors have color coded bands, where each color maps to a number. The first 2 bands of a resistor have a simple encoding scheme: each color maps to a single number.
+
+These colors are encoded as follows:
+
+- Black: 0
+- Brown: 1
+- Red: 2
+- Orange: 3
+- Yellow: 4
+- Green: 5
+- Blue: 6
+- Violet: 7
+- Grey: 8
+- White: 9
+
+Mnemonics map the colors to the numbers, that, when stored as an array, happen to map to their index in the array: Better Be Right Or Your Great Big Values Go Wrong.
+
+More information on the color encoding of resistors can be found in the [Electronic color code Wikipedia article](https://en.wikipedia.org/wiki/Electronic_color_code)
+
+## Setup
+
+Go through the setup instructions for Kotlin to install the necessary
+dependencies:
+
+[https://exercism.io/tracks/kotlin/installation](https://exercism.io/tracks/kotlin/installation)
+
+## Making the test suite pass
+
+Execute the tests with:
+
+```bash
+$ ./gradlew test
+```
+
+> Use `gradlew.bat` if you're on Windows
+
+In the test suites all tests but the first have been skipped.
+
+Once you get a test passing, you can enable the next one by removing the
+`@Ignore` annotation.
+
+## Source
+
+Maud de Vries, Erik Schierboom [https://github.com/exercism/problem-specifications/issues/1458](https://github.com/exercism/problem-specifications/issues/1458)
+
+## Submitting Incomplete Solutions
+
+It's possible to submit an incomplete solution so you can see how others have
+completed the exercise.
diff --git a/kotlin/resistor-color/build.gradle.kts b/kotlin/resistor-color/build.gradle.kts
new file mode 100644
index 0000000..1793ac4
--- /dev/null
+++ b/kotlin/resistor-color/build.gradle.kts
@@ -0,0 +1,23 @@
+import org.gradle.api.tasks.testing.logging.TestExceptionFormat
+
+plugins {
+ kotlin("jvm") version "1.3.60"
+}
+
+repositories {
+ jcenter()
+}
+
+dependencies {
+ compile(kotlin("stdlib"))
+
+ testImplementation("junit:junit:4.12")
+ testImplementation(kotlin("test-junit"))
+}
+
+tasks.withType {
+ testLogging {
+ exceptionFormat = TestExceptionFormat.FULL
+ events("passed", "failed", "skipped")
+ }
+}
diff --git a/kotlin/resistor-color/gradle/wrapper/gradle-wrapper.properties b/kotlin/resistor-color/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9492014
--- /dev/null
+++ b/kotlin/resistor-color/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/kotlin/resistor-color/gradlew b/kotlin/resistor-color/gradlew
new file mode 100644
index 0000000..83f2acf
--- /dev/null
+++ b/kotlin/resistor-color/gradlew
@@ -0,0 +1,188 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or 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 UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$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 "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# 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
+ ;;
+ 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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/kotlin/resistor-color/gradlew.bat b/kotlin/resistor-color/gradlew.bat
new file mode 100644
index 0000000..9618d8d
--- /dev/null
+++ b/kotlin/resistor-color/gradlew.bat
@@ -0,0 +1,100 @@
+@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 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 init
+
+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 init
+
+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
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+: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 %CMD_LINE_ARGS%
+
+: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/kotlin/resistor-color/src/main/kotlin/ResistorColor.kt b/kotlin/resistor-color/src/main/kotlin/ResistorColor.kt
new file mode 100644
index 0000000..bf94e13
--- /dev/null
+++ b/kotlin/resistor-color/src/main/kotlin/ResistorColor.kt
@@ -0,0 +1,11 @@
+object ResistorColor {
+
+ fun colorCode(input: String): Int {
+ TODO("Implement this to complete the task")
+ }
+
+ fun colors(): List {
+ TODO("Implement this to complete the task")
+ }
+
+}
diff --git a/kotlin/resistor-color/src/test/kotlin/ResistorColorTest.kt b/kotlin/resistor-color/src/test/kotlin/ResistorColorTest.kt
new file mode 100644
index 0000000..0b63e24
--- /dev/null
+++ b/kotlin/resistor-color/src/test/kotlin/ResistorColorTest.kt
@@ -0,0 +1,20 @@
+import kotlin.test.assertEquals
+import kotlin.test.Test
+
+class ResistorColorTest {
+
+ @Test
+ fun testBlackColorCode() = assertEquals(0, ResistorColor.colorCode("black"))
+
+ @Test
+ fun testWhiteColorCode() = assertEquals(9, ResistorColor.colorCode("white"))
+
+ @Test
+ fun testOrangeColorCode() = assertEquals(3, ResistorColor.colorCode("orange"))
+
+ @Test
+ fun testColors() {
+ val expected = listOf("black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white")
+ assertEquals(expected, ResistorColor.colors())
+ }
+}
diff --git a/rust/say/.idea/misc.xml b/rust/say/.idea/misc.xml
new file mode 100644
index 0000000..0fb3e99
--- /dev/null
+++ b/rust/say/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rust/say/.idea/modules.xml b/rust/say/.idea/modules.xml
new file mode 100644
index 0000000..83696ae
--- /dev/null
+++ b/rust/say/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rust/say/.idea/say.iml b/rust/say/.idea/say.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/rust/say/.idea/say.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rust/say/Cargo.toml b/rust/say/Cargo.toml
new file mode 100644
index 0000000..362dfcd
--- /dev/null
+++ b/rust/say/Cargo.toml
@@ -0,0 +1,4 @@
+[package]
+name = "say"
+version = "1.0.0"
+authors = ["sacherjj "]
diff --git a/rust/say/README.md b/rust/say/README.md
new file mode 100644
index 0000000..9e0d48e
--- /dev/null
+++ b/rust/say/README.md
@@ -0,0 +1,122 @@
+# Say
+
+Given a number from 0 to 999,999,999,999, spell out that number in English.
+
+## Step 1
+
+Handle the basic case of 0 through 99.
+
+If the input to the program is `22`, then the output should be
+`'twenty-two'`.
+
+Your program should complain loudly if given a number outside the
+blessed range.
+
+Some good test cases for this program are:
+
+- 0
+- 14
+- 50
+- 98
+- -1
+- 100
+
+### Extension
+
+If you're on a Mac, shell out to Mac OS X's `say` program to talk out
+loud.
+
+## Step 2
+
+Implement breaking a number up into chunks of thousands.
+
+So `1234567890` should yield a list like 1, 234, 567, and 890, while the
+far simpler `1000` should yield just 1 and 0.
+
+The program must also report any values that are out of range.
+
+## Step 3
+
+Now handle inserting the appropriate scale word between those chunks.
+
+So `1234567890` should yield `'1 billion 234 million 567 thousand 890'`
+
+The program must also report any values that are out of range. It's
+fine to stop at "trillion".
+
+## Step 4
+
+Put it all together to get nothing but plain English.
+
+`12345` should give `twelve thousand three hundred forty-five`.
+
+The program must also report any values that are out of range.
+
+### Extensions
+
+Use _and_ (correctly) when spelling out the number in English:
+
+- 14 becomes "fourteen".
+- 100 becomes "one hundred".
+- 120 becomes "one hundred and twenty".
+- 1002 becomes "one thousand and two".
+- 1323 becomes "one thousand three hundred and twenty-three".
+
+
+## Rust Specific Exercise Notes
+
+This is slightly changed in the Rust version, compared to other
+language versions of this exercise. Instead of requiring you to return
+errors for out of range, we are using Rust's strong type system to limit
+input. It is much easier to make a function deal with all valid inputs,
+rather than requiring the user of your module to handle errors.
+
+There is a -1 version of a test case, but it is commented out.
+If your function is implemented properly, the -1 test case should not compile.
+
+Adding 'and' into number text has not been implemented in test cases.
+
+### Extension
+
+Add capability of converting up to the max value for u64: 9,223,372,036,854,775,807.
+
+For hints at the output this should have, look at the last test case.
+
+
+## Rust Installation
+
+Refer to the [exercism help page][help-page] for Rust installation and learning
+resources.
+
+## Writing the Code
+
+Execute the tests with:
+
+```bash
+$ cargo test
+```
+
+All but the first test have been ignored. After you get the first test to
+pass, remove the ignore flag (`#[ignore]`) from the next test and get the tests
+to pass again. The test file is located in the `tests` directory. You can
+also remove the ignore flag from all the tests to get them to run all at once
+if you wish.
+
+Make sure to read the [Crates and Modules](https://doc.rust-lang.org/stable/book/crates-and-modules.html) chapter if you
+haven't already, it will help you with organizing your files.
+
+## Feedback, Issues, Pull Requests
+
+The [exercism/rust](https://github.com/exercism/rust) repository on GitHub is the home for all of the Rust exercises. If you have feedback about an exercise, or want to help implement new exercises, head over there and create an issue. Members of the [rust track team](https://github.com/orgs/exercism/teams/rust) are happy to help!
+
+If you want to know more about Exercism, take a look at the [contribution guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md).
+
+[help-page]: http://exercism.io/languages/rust
+[crates-and-modules]: http://doc.rust-lang.org/stable/book/crates-and-modules.html
+
+## Source
+
+A variation on JavaRanch CattleDrive, exercise 4a [http://www.javaranch.com/say.jsp](http://www.javaranch.com/say.jsp)
+
+## Submitting Incomplete Solutions
+It's possible to submit an incomplete solution so you can see how others have completed the exercise.
diff --git a/rust/say/src/lib.rs b/rust/say/src/lib.rs
new file mode 100644
index 0000000..ed0ed1f
--- /dev/null
+++ b/rust/say/src/lib.rs
@@ -0,0 +1,4 @@
+//
+// See Rust Language Specific Instructions
+// below normal exercise description.
+//
diff --git a/rust/say/tests/say.rs b/rust/say/tests/say.rs
new file mode 100644
index 0000000..06a08f9
--- /dev/null
+++ b/rust/say/tests/say.rs
@@ -0,0 +1,130 @@
+extern crate say;
+
+// Note: No tests created using 'and' with numbers.
+// Aparently Most American English does not use the 'and' with numbers,
+// where it is common in British English to use the 'and'.
+
+#[test]
+fn test_zero() {
+ assert_eq!(say::encode(0), String::from("zero"));
+}
+
+//
+// If the below test is uncommented, it should not compile.
+//
+/*
+#[test]
+fn test_negative() {
+ assert_eq!(say::encode(-1), String::from("won't compile"));
+}
+*/
+
+#[test]
+fn test_one() {
+ assert_eq!(say::encode(1), String::from("one"));
+}
+
+#[test]
+#[ignore]
+fn test_fourteen() {
+ assert_eq!(say::encode(14), String::from("fourteen"));
+}
+
+#[test]
+#[ignore]
+fn test_twenty() {
+ assert_eq!(say::encode(20), String::from("twenty"));
+}
+
+#[test]
+#[ignore]
+fn test_twenty_two() {
+ assert_eq!(say::encode(22), String::from("twenty-two"));
+}
+
+#[test]
+#[ignore]
+fn test_one_hundred() {
+ assert_eq!(say::encode(100), String::from("one hundred"));
+}
+
+// note, using American style with no and
+#[test]
+#[ignore]
+fn test_one_hundred_twenty() {
+ assert_eq!(say::encode(120), String::from("one hundred twenty"));
+}
+
+#[test]
+#[ignore]
+fn test_one_hundred_twenty_three() {
+ assert_eq!(say::encode(123), String::from("one hundred twenty-three"));
+}
+
+#[test]
+#[ignore]
+fn test_one_thousand() {
+ assert_eq!(say::encode(1000), String::from("one thousand"));
+}
+
+#[test]
+#[ignore]
+fn test_one_thousand_two_hundred_thirty_four() {
+ assert_eq!(say::encode(1234), String::from("one thousand two hundred thirty-four"));
+}
+
+// note, using American style with no and
+#[test]
+#[ignore]
+fn test_eight_hundred_and_ten_thousand() {
+ assert_eq!(say::encode(810_000), String::from("eight hundred ten thousand"));
+}
+
+#[test]
+#[ignore]
+fn test_one_million() {
+ assert_eq!(say::encode(1_000_000), String::from("one million"));
+}
+
+// note, using American style with no and
+#[test]
+#[ignore]
+fn test_one_million_two() {
+ assert_eq!(say::encode(1_000_002), String::from("one million two"));
+}
+
+#[test]
+#[ignore]
+fn test_1002345() {
+ assert_eq!(say::encode(1_002_345),
+ String::from("one million two thousand three hundred forty-five"));
+}
+
+#[test]
+#[ignore]
+fn test_one_billion() {
+ assert_eq!(say::encode(1_000_000_000), String::from("one billion"));
+}
+
+#[test]
+#[ignore]
+fn test_987654321123() {
+ assert_eq!(say::encode(987_654_321_123),
+ String::from("nine hundred eighty-seven billion \
+ six hundred fifty-four million \
+ three hundred twenty-one thousand \
+ one hundred twenty-three"));
+}
+
+/*
+ This test is only if you implemented full parsing for u64 type.
+*/
+#[test]
+#[ignore]
+fn test_max_u64() {
+ assert_eq!(say::encode(9_223_372_036_854_775_807),
+ String::from("nine quintillion two hundred twenty-three \
+ quadrillion three hundred seventy-two trillion \
+ thirty-six billion eight hundred fifty-four million \
+ seven hundred seventy-five thousand eight hundred seven"));
+}
diff --git a/shell/README.md b/shell/README.md
new file mode 100644
index 0000000..e8a258d
--- /dev/null
+++ b/shell/README.md
@@ -0,0 +1,33 @@
+## Executable
+Unpack the archive relevant to your machine and place in $PATH
+
+## Shell Completion Scripts
+
+### Bash
+
+ mkdir -p ~/.config/exercism
+ mv ../shell/exercism_completion.bash ~/.config/exercism/exercism_completion.bash
+
+Load the completion in your `.bashrc`, `.bash_profile` or `.profile` by
+adding the following snippet:
+
+ if [ -f ~/.config/exercism/exercism_completion.bash ]; then
+ source ~/.config/exercism/exercism_completion.bash
+ fi
+
+### Zsh
+
+ mkdir -p ~/.config/exercism
+ mv ../shell/exercism_completion.zsh ~/.config/exercism/exercism_completion.zsh
+
+Load up the completion in your `.zshrc`, `.zsh_profile` or `.profile` by adding
+the following snippet
+
+ if [ -f ~/.config/exercism/exercism_completion.zsh ]; then
+ source ~/.config/exercism/exercism_completion.zsh
+ fi
+
+
+#### Oh my Zsh
+
+If you are using the popular [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) framework to manage your zsh plugins, move the file `exercism_completion.zsh` into `~/.oh-my-zsh/custom`.
diff --git a/shell/exercism_completion.bash b/shell/exercism_completion.bash
new file mode 100644
index 0000000..f5f4e90
--- /dev/null
+++ b/shell/exercism_completion.bash
@@ -0,0 +1,51 @@
+_exercism () {
+ local cur prev
+
+ COMPREPLY=() # Array variable storing the possible completions.
+ cur=${COMP_WORDS[COMP_CWORD]}
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ opts="--verbose --timeout"
+
+ commands="configure download open
+ submit troubleshoot upgrade version workspace help"
+ config_opts="--show"
+ version_opts="--latest"
+
+ if [ "${#COMP_WORDS[@]}" -eq 2 ]; then
+ case "${cur}" in
+ -*)
+ COMPREPLY=( $( compgen -W "${opts}" -- "${cur}" ) )
+ return 0
+ ;;
+ *)
+ COMPREPLY=( $( compgen -W "${commands}" "${cur}" ) )
+ return 0
+ ;;
+ esac
+ fi
+
+ if [ "${#COMP_WORDS[@]}" -eq 3 ]; then
+ case "${prev}" in
+ configure)
+ COMPREPLY=( $( compgen -W "${config_opts}" -- "${cur}" ) )
+ return 0
+ ;;
+ version)
+ COMPREPLY=( $( compgen -W "${version_opts}" -- "${cur}" ) )
+ return 0
+ ;;
+ help)
+ COMPREPLY=( $( compgen -W "${commands}" "${cur}" ) )
+ return 0
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ fi
+
+ return 0
+}
+
+complete -o bashdefault -o default -o nospace -F _exercism exercism 2>/dev/null \
+ || complete -o default -o nospace -F _exercism exercism
diff --git a/shell/exercism_completion.zsh b/shell/exercism_completion.zsh
new file mode 100644
index 0000000..f215530
--- /dev/null
+++ b/shell/exercism_completion.zsh
@@ -0,0 +1,36 @@
+_exercism() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ local -a options
+ options=(configure:"Writes config values to a JSON file."
+ download:"Downloads and saves a specified submission into the local system"
+ open:"Opens a browser to exercism.io for the specified submission."
+ submit:"Submits a new iteration to a problem on exercism.io."
+ troubleshoot:"Outputs useful debug information."
+ upgrade:"Upgrades to the latest available version."
+ version:"Outputs version information."
+ workspace:"Outputs the root directory for Exercism exercises."
+ help:"Shows a list of commands or help for one command")
+
+ _arguments -s -S \
+ {-h,--help}"[show help]" \
+ {-t,--timeout}"[override default HTTP timeout]" \
+ {-v,--verbose}"[turn on verbose logging]" \
+ '(-): :->command' \
+ '(-)*:: :->option-or-argument' \
+ && return 0;
+
+ case $state in
+ (command)
+ _describe 'commands' options ;;
+ (option-or-argument)
+ case $words[1] in
+ s*)
+ _files
+ ;;
+ esac
+ esac
+}
+
+compdef '_exercism' exercism