yajatyadav / intellijs

Team repository of m22p1-intellijs
0 stars 2 forks source link

CZ Collegeboard Review Ticket #27

Open 1855387 opened 2 years ago

1855387 commented 2 years ago
HexaDrakon commented 2 years ago

FRQs under management: 9/9 Comments: I mean, they're under management. I don't know what else to say for feedback. All 9 of them are there and they seem to all be accessible. The Wiki exists and is pretty well documented. Key learnings all exist and code snippets are included where relevant. Well done.

At least 2 FRQs with input and output: 1/1 Comments: FRQ 3 and FRQ 5 are both entirely implemented. At least half of FRQ 4 seems to work. I think. FRQ 10 works great, except for the following typo: "The greatest common fator..." (emphasis mine). I would recommend more proofreading and testing of code in the future. Otherwise, well done.

Additional comments: I cannot access the video, which is private. However, the FRQs are very intuitive, so a video was not needed.

UPDATE: I can now access the video. The music is very nice. Thank you for the experience you have given my headphones.

Final grade: 10/10.

HexaDrakon commented 2 years ago

Reflection and comparison or whatever I have selected the following FRQs for comparison: FRQ 3, FRQ 5, and FRQ 10.

FRQ 3 Bryant: FRQ 3 implements two portions: A menu generator and a square drawing tool. The menu generator is very standard, and simply accepts the relevant parameters and produces a formatted greeting. The square drawing tool implements a dual server/client side logic system that performs geometric calculations on the server side and performs canvas operations on the client side. Input validation is performed, so that if the drawn square goes off the canvas at any point, the relevant dimensions will instead be reduced in order to comply with logical expectations. "Negative" side lengths are also supported, and simply invert the square along the y=x axis.

Charlie: FRQ 3 implements one portion: the menu generator. It accepts the relevant parameters and produces a formatted greeting.

Comparison: We both did a good job on the menu generation aspect. I can't really think of anything we did wrong, or anything better we could do. I mean, it's literally just menu generation. Charlie didn't implement the square drawing tool, so I'm unable to make a comparison on that aspect. I guess you could count this as a plus on my side, since I implemented it.

FRQ 5 Bryant: FRQ 5 implements two portions: An invite generator and a password generator. The invite generator is again very standard, and accepts the relevant parameters and produces an invite. The password generator takes a prefix and a length and generates a random password based off of these aspects.

Charlie: FRQ 5 implements two portions: the invite generator and the password generator. As with before, the menu generator is very standard, accepting the relevant parameters and producing the desired output. The password generator actually goes above and beyond, generating two different passwords based off of specified lengths.

Comparison: Again, our invite generators are basically the same. There's really not much room for variation or improvement here, unless you're a massive nerd and want to mess with NLP or something. A plus on Charlie's side (and therefore a negative for me) would definitely be that he implements multiple password generation -- this is pretty clever and does mirror a real world usecase. A negative for Charlie is that he doesn't actually allow the user to specify a prefix for the second generated password, so the user has less latitude when it comes to password generation options. A negative for both of us would be that neither of us used secure random number generation. The built-in Java random package is not cryptographically secure and should never be used for password generation. A proper CSPRNG should have been used.

FRQ 10 Bryant: FRQ 10 implements one portion: A fraction reducer. The tool takes in a numerator and denominator input and reduces it to the simplest form, which is defined as any fraction a/b such that a and b are coprime integers. Reducing a fraction refers to computing a simplest form fraction which is equivalent in value to the original fraction.

Charlie: FRQ 10 implements two portions: a greatest common divisor portion and the fraction reducers. The great common divisor tool takes two numbers as input and determines their greatest common divisor, which for two integers a and b is defines as the largest integer n that is a factor of both a and b. The fraction reducer tool also reduces the supplied fraction to the simplest form, with the same definitions as specified above.

Comparison: I did not implement a greatest common divisor tool, which is a plus for Charlie (and a minus for me). I also really liked Charlie's implementation of the extended Euclidean algorithm, since it gets called recursively. It's a wonderfully clean implementation of the algorithm, and very readable. That's another plus for Charlie, and a minus for me. However, I would like to point out that Charlie's algorithm does not implement the certifying aspect of the extended Euclidean algorithm, which involves computing the coefficients necessary to satisfy Bezout's identity. Of course, this is likely complicated by how he chose to recurse the algorithm. However, I still think it's worth noting.