From 2ba5d91a68691c25c366baca2d0babf07b6f4ddf Mon Sep 17 00:00:00 2001 From: jiri studnicka Date: Sat, 8 Dec 2018 01:15:31 +0100 Subject: [PATCH 1/3] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9c07d4a..812e1c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.idea/ *.class *.log From 5d77b25d69965b79f4fad5defcb0460722697dd0 Mon Sep 17 00:00:00 2001 From: jiri studnicka Date: Sat, 8 Dec 2018 02:12:08 +0100 Subject: [PATCH 2/3] cleanup --- scripts/timesheet.sc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/timesheet.sc b/scripts/timesheet.sc index 5f8e63c..d8d4c4f 100644 --- a/scripts/timesheet.sc +++ b/scripts/timesheet.sc @@ -12,6 +12,7 @@ import scala.annotation.tailrec import scala.io.StdIn +import scala.util.Random val Version = 1 @@ -57,7 +58,7 @@ def generateNumbers(count: Int, lowerBound: Double, } } - scala.util.Random.shuffle(impl(Seq.empty, lowerBound, upperBound, sum)) + Random.shuffle(impl(Seq.empty, lowerBound, upperBound, sum)) } log(s"Welcome to the Timesheet generator v$Version") From 9a7431ad48223435f10bff059b3b3e5e6cd99d5a Mon Sep 17 00:00:00 2001 From: jiri studnicka Date: Sat, 8 Dec 2018 13:08:22 +0100 Subject: [PATCH 3/3] optionaly rounded to hours --- scripts/timesheet.sc | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/scripts/timesheet.sc b/scripts/timesheet.sc index d8d4c4f..324d2e9 100644 --- a/scripts/timesheet.sc +++ b/scripts/timesheet.sc @@ -24,12 +24,19 @@ object Defaults { val Precision = 1 } +class asInt(b: Boolean) { + def toInt = if(b) 1 else 0 +} + +implicit def convertBooleanToInt(b: Boolean): asInt = new asInt(b) + def random(lowerBound: Double, upperBound: Double): Double = lowerBound + Math.random() * (upperBound - lowerBound) -def round(number: Double): Double = - BigDecimal(number).setScale(Defaults.Precision, BigDecimal.RoundingMode.HALF_UP).toDouble +def round(number: Double, precision: Int): Double = + BigDecimal(number).setScale(precision, BigDecimal.RoundingMode.HALF_UP).toDouble + def log(text: String): Unit = println(text) @@ -40,7 +47,7 @@ def input(prompt: String, default: Option[String] = None): String = { } def generateNumbers(count: Int, lowerBound: Double, - upperBound: Double, sum: Double): Seq[Double] = { + upperBound: Double, sum: Double, precision: Int): Seq[Double] = { @tailrec def impl(aggr: Seq[Double], nLowerBound: Double, nUpperBound: Double, nSum: Double): Seq[Double] = { @@ -49,7 +56,7 @@ def generateNumbers(count: Int, lowerBound: Double, val restUpperBound = nUpperBound * rest val nextLowerBound = Math.max(nLowerBound, nSum - restUpperBound) val nextUpperBound = Math.min(nUpperBound, nSum - restLowerBound) - val next = round(random(nextLowerBound, nextUpperBound)) + val next = round(random(nextLowerBound, nextUpperBound), precision) if (aggr.size == count) { aggr @@ -66,12 +73,15 @@ val count = input("Please enter total number of working days").toInt val deviation = input( s"Please enter max deviation from default hours per MD (${Defaults.HoursPerMd})", Some(Defaults.MaxDeviation.toString)).toDouble +val onlyHours = !input( + s"Do you want rounded to hours? (yes/no)", + Some("no")).contains("yes") val sum = count * Defaults.HoursPerMd val lowerBound = Defaults.HoursPerMd - deviation val upperBound = Defaults.HoursPerMd + deviation -val results = generateNumbers(count, lowerBound, upperBound, sum) -val resultsSum = round(results.sum) +val results = generateNumbers(count, lowerBound, upperBound, sum, onlyHours.toInt) +val resultsSum = round(results.sum, onlyHours.toInt) assert(resultsSum == sum, s"Resulting sum '$resultsSum' did not equal to '$sum'") log("Generated results are below:")