diff --git a/2020/01/balancear.c b/2020/01/balancear.c index 3838a02..03e1112 100644 --- a/2020/01/balancear.c +++ b/2020/01/balancear.c @@ -7,61 +7,48 @@ typedef struct { float juice, alcohool; } Barrel; -bool readInput(Barrel * line[2], Barrel * reservoir) { - int i; - float f; +int balancear() { + int i, result; + float f, capacity; + Barrel line[2], sortedLine[2], * finalLine, reservoir; + /* Read Input */ for (i = 0; i < 4; i++) { if (!scanf(" %f", &f) || f <= 0) - return false; + return EOF; if (i % 2 == 0) { - line[i / 2]->no = i / 2 + 1; - line[i / 2]->juice = f; + line[i / 2].no = i / 2 + 1; + line[i / 2].juice = f; } else { if (f > 1) - return false; - line[i / 2]->alcohool = f * line[i / 2]->juice; - line[i / 2]->juice -= line[i / 2]->alcohool; + return EOF; + line[i / 2].alcohool = f * line[i / 2].juice; + line[i / 2].juice -= line[i / 2].alcohool; } - reservoir->juice = line[0]->juice + line[1]->juice; - reservoir->alcohool = line[0]->alcohool + line[1]->alcohool; + reservoir.juice = line[0].juice + line[1].juice; + reservoir.alcohool = line[0].alcohool + line[1].alcohool; } - return true; -} -Barrel * sortLine(Barrel * line) { - if (line[0].juice + line[0].alcohool > line[1].juice + line[1].alcohool) - return line; - - Barrel * sortedLine[2]; - *sortedLine[0] = *line[1]; - *sortedLine[1] = *line[0]; - return sortedLine; -} - -int loadBarrel (Barrel * reservoir, Barrel barrel) { - float capacity = barrel.juice + barrel.alcohool; - if (reservoir->juice - capacity * 0.86 >= 0 && - reservoir->alcohool - capacity * 0.14 >= 0) { - reservoir->juice -= capacity * 0.86; - reservoir->alcohool -= capacity * 0.14; - return barrel.no; + /* Sort Line */ + if (line[0].juice + line[0].alcohool < line[1].juice + line[1].alcohool) { + sortedLine[0] = line[1]; + sortedLine[1] = line[0]; + finalLine = sortedLine; } - return 0; -} + else + finalLine = line; -int balancear() { - int i, result; - Barrel line[2], reservoir; - - if (!readInput(&line, &reservoir)) - return EOF; - - line = sortLine(line); - - for (i = 0; i < 2; i++) - result += loadBarrel(&reservoir, line[i]); + /* Load Barrels */ + for (i = 0; i < 2; i++) { + capacity = finalLine[i].juice + finalLine[i].alcohool; + if (reservoir.juice - capacity * 0.86 >= 0 && + reservoir.alcohool - capacity * 0.14 >= 0) { + reservoir.juice -= capacity * 0.86; + reservoir.alcohool -= capacity * 0.14; + result += finalLine[i].no; + } + } return result; }