Scala code returns false for 1012 > 977 and a few other values

Question:

I have scala code and python code that are attempting the same task (2021 advent of code day 1 https://adventofcode.com/2021/day/1).

The Python returns the correct solution, the Scala does not. I ran diff on both of the outputs and have determined that my Scala code is incorrectly evaluating the following pairs:

1001 > 992 -> false
996 > 1007 -> true
1012 > 977 -> false

the following is my Python code:

import pandas as pd 

data = pd.read_csv("01_input.csv", header=None)

incr = 0
prevval = 99999

for index, row in data.iterrows():
    if index != 0:
        if row[0] > prevval:
            print(f"{index}-{row[0]}-{prevval}")
            incr += 1
        prevval = row[0]

    prevval = row[0]
    

print(incr)

and here is my Scala code:

import scala.io.Source; // library to read input file in

object advent_of_code_2021_01 {
    def main(args: Array[String]): Unit = {

        val lines = Source.fromFile("01_input.csv").getLines().toList; // file as immutable list
        var increases = 0;

        for (i <- 1 until lines.length) { // iterate over list by index
            if (lines(i) > lines(i-1)) {
                increases += 1;
                println(s"$i-${lines(i)}-${lines(i-1)}")
            }
        }

        println(increases);
    }
}

I do not understand what is causing this issue on these particular values. in the shell, Scala evaluates them correctly, but I do not know where to even begin with this. Is there some behavior I need to know about that I’m not accounting for? Am I just doing something stupid? Any help is appreciated, thank you.

Asked By: Zachary Brasseaux

||

Answers:

As @Edward Peters https://stackoverflow.com/users/6016064/edward-peters correctly identified, my problem was that I was doing string comparisons, and not numerical comparisons, so I needed to convert my values to Int and not String. I did this with the very simple .toInt and it fixed all my issues.

fixed scala code:

import scala.io.Source; // library to read input file in

object advent_of_code_2021_01 {
    def main(args: Array[String]): Unit = {

        val lines = Source.fromFile("01_input.csv").getLines().toList; // file as immutable list
        var increases = 0;

        for (i <- 1 until lines.length) { // iterate over list by index
            if (lines(i).toInt > lines(i-1).toInt) { // evaluate
                increases += 1; // increment when true
                println(s"$i-${lines(i)}-${lines(i-1)}") // debug line
            }
        }

        println(increases); // result
    }
}
Answered By: Zachary Brasseaux
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.