From 727b3165301482772970974083a6db384b56c695 Mon Sep 17 00:00:00 2001 From: Filip Date: Thu, 23 Jan 2025 21:49:37 +0100 Subject: [PATCH] Correctly parse negative numbers and calculate temperatures. --- src/main/kotlin/Main.kt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 072b7d4..40ea960 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -7,12 +7,18 @@ fun Double.round(): String{ return String.format("%.2f", this) } +fun cleanNumberString(input: String): String{ + return input + .replace(",",".") + .replace(" ", "") +} + fun extractNumbers(pattern: String, text: String?): List { val matches = Regex(pattern).findAll(text ?: "") return matches .map { it.groups[1]?.value?.lowercase() } .filter { it != null } - .map { it!!.replace(",", ".").toDouble() } + .map { cleanNumberString(it!!).toDouble() } .toList() } @@ -47,16 +53,16 @@ fun convertKmh(event: MessageCreateEvent) { } fun convertF(event: MessageCreateEvent){ - for (fahrenheit in extractNumbers("(\\d+[,.]*\\d*)\\s*f", event.message.content)) { - val celsius = (5/9) * (fahrenheit - 32) + for (fahrenheit in extractNumbers("(-*\\d+[,.]*\\d*)\\s*f", event.message.content)) { + val celsius = (5.0/9.0) * (fahrenheit - 32) val kelvin = celsius + 273.15 event.channel.sendMessage("${fahrenheit.round()} °F = ${celsius.round()} °C = ${kelvin.round()} K") } } fun convertC(event: MessageCreateEvent){ - for (celsius in extractNumbers("(\\d+[,.]*\\d*)\\s*c", event.message.content)) { - val fahrenheit = ((9/5) * celsius) + 32 + for (celsius in extractNumbers("(-*\\d+[,.]*\\d*)\\s*c", event.message.content)) { + val fahrenheit = ((9.0/5.0) * celsius) + 32 val kelvin = celsius + 273.15 event.channel.sendMessage("${celsius.round()} °C = ${fahrenheit.round()} °F = ${kelvin.round()} K") }