diff --git a/README.md b/README.md index 35cc595d362698ae42edc223df635ea3a0237448..6eebdb9d1c5e119c33bdd0ff47ed0de00bc630d3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,34 @@ codeseries ========== +Lock Combination Generator +A lock combination manufacturer needs to maintain a database of all +possible combinations for their locks. You are tasked with writing a +program that generates all possible legal combinations within the rules +set by the manufacturer. + +Rules +- Values for a position: A,B,C,D,E +- Number of positions: 6 +- Adjacent positions cannot differ by more than 2 (AC and BD are +valid adjacent positions; AD is not) +- No more than 3 contiguous positions can have the same value (AAA is +OK, AAAA is not) +- No more than 4 of the same value can be in a combination (AABBAA is +OK, AAABAA is not) + +The manufacturer wants to allow for future expansion, so the number and +values of positions must be configurable. (So, your program should be +able to handle values up to A-Z, and it should be able to handle 8 +positions, or 10, or even more.) The manufacturer will assign a lookup +code (starting with 1 and incrementing) to each combination. However, +the collection of combinations needs to be randomly shuffled before +assigning the lookup codes to them. The output should look something +like this: + +1: ABABAC +2: CDCDCA +3: ABCDEA +... + +When writing your code, be sure to utilize proper object-oriented +techniques and design. Show appropriate use of class construction.