This repository contains Rust solutions of some CodeChef and UVa problems. These problems were homeworks for the Algorithms Project course of University of São Paulo (USP).
When I code these solutions there was no option to send Rust code to VJudge (the official code judge of our class) or another code judging system (Are we judged yet?). I also did not find any Rust solution for these problems. I solved the course homeworks by using C++, however I wanted to improve my Rust skills and develop Rust solutions could be not trivial (and were not) for some problems. Therefore, I decided to recode these homeworks by using Rust to learn the Rust way to solve problems. I have made a lot of code refactoring as you can see on the commits list. My first implementations did not have a clean code and there were a lot of improvements to make. I just did these improvements after the end of my course and I maybe do improve a little more sometime later.
- Rust code, in some situations, can be very verbose due the use of
Option
,Result
andHashMap
; - Rust code can be very clean, we can do a lot of things with little code;
- Reverse sort could be simpler (something like
rev_sort()
) not all of this:sort_by_key(|&num| Reverse(num))
- C++ HashMap is very different of Rust HashMap. The first one is really flexible, but can lead to unpredictable behaviors because an element can be created just by calling for a not added key (
hmap[i]
). Rust HashMap is more strict because the borrowing rules.
- Tuple assignment for already defined variables, something like:
Maybe there is a reason for Rust do not allow this, but it would make the code cleaner.
let (mut a, mut b) = (0, 0); (a, b) = (4, 2);
- The
do...while
syntax sugar. I prefer use this:Instead of this:do { a += 1; } while a > b;
Maybe we also could have aloop { a += 1; if a > b { break } }
do...while let
, but I cannot think in an example of usage of this. - A function to read char by char from an input (
read_char(&mut char)
):Use this function is better to use for some problems, like the last one of this repository.let mut input = char::new(); io::stdin().read_char(&mut input);
Problem | Online Judge | Code |
---|---|---|
00-stable-marriage-problem | CodeChef | STABLEMP |
01-coin-collector | UVa | 11264 |
02-scarecrow | UVa | 12405 |
03-match-making-problem | UVa | 12210 |
04-backt-to-the-8-queens | UVa | 11085 |
05-sum-it-up | UVa | 574 |
06-rat-in-a-maze | CodeChef | MM1803 |
07-knuths-permutation | UVa | 10063 |
08-9puzzle | UVa | 11513 |
09-15puzzle | UVa | 10181 |
10-inversions | -- | -- |
11-solve-it | UVa | 10341 |
12-problemk | UVa | 11935 |
13-winterim-backpacking-trip | UVa | 907 |
14-luggage | UVa | 10664 |
15-supersale | UVa | 10130 |
16-is-bigger-smarter | UVa | 10131 |
17-let-me-count-the-ways | UVa | 357 |
18-rare-order | UVa | 200 |
19-counting-stars | UVa | 11244 |
20-bicoloring | UVa | 10004 |
21-maze-traversal | UVa | 10377 |
22-racing | UVa | 1234 |
23-sending-email | UVa | 10986 |
24-wormholes | UVa | 558 |
25-page-hopping | UVa | 821 |
26-sabotage | UVa | 10480 |
27-factors-and-factorials | UVa | 160 |
28-ocean-deep-make-it-shallow | UVa | 10176 |
This project is licensed under the MIT License - see the LICENSE file for details.