// Generates a line of the puzzle based on the number of digits of the right / left side LineOfNumbers CreateNumbers (Operation operation, int digits) { LineOfNumbers line = new LineOfNumbers (); line.right = new int [digits]; line.left = new int [digits]; int max_number, added; switch (operation) { case Operation.AddHalf: max_number = 32; break; case Operation.Add: max_number = 10; break; case Operation.AddDouble: max_number = 16; break; default: throw new InvalidOperationException ("Invalid value"); } while (true) { int right, left; right = left = 0; // Generate random numbers for (int i = 0; i < digits; i++) { line.right[i] = 1 + random.Next (max_number); line.left[i] = 1 + random.Next (max_number); right += line.right [i]; left += line.left [i]; } added = right + left; if (operation == Operation.Add) { if (added > 31 || added < 3) continue; } if (operation == Operation.AddHalf) { if (added % 2 != 0) continue; added = added / 2; if (added > 64) continue; } if (operation == Operation.AddDouble) { added = added * 2; if (added > 99 || added < 3) continue; } line.middle = added; bool found = false; // Check if the middle has been already repeated foreach (LineOfNumbers prev in lines) { if (prev.Middle == line.Middle) { found = true; break; } } if (found == false) break; } return line; }
// Generates a line of the puzzle based on the number of digits of the right / left side LineOfNumbers CreateNumbers(Operation operation, int digits) { LineOfNumbers line = new LineOfNumbers (); line.right = new int [digits]; line.left = new int [digits]; int max_number, added; switch (operation) { case Operation.AddHalf: max_number = 32; break; case Operation.Add: max_number = 10; break; case Operation.AddDouble: max_number = 16; break; default: throw new InvalidOperationException ("Invalid value"); } while (true) { int right, left; right = left = 0; // Generate random numbers for (int i = 0; i < digits; i++) { line.right[i] = 1 + random.Next (max_number); line.left[i] = 1 + random.Next (max_number); right += line.right [i]; left += line.left [i]; } added = right + left; if (operation == Operation.Add) { if (added > 31 || added < 3) continue; } if (operation == Operation.AddHalf) { if (added % 2 != 0) continue; added = added / 2; if (added > 64) continue; } if (operation == Operation.AddDouble) { added = added * 2; if (added > 99 || added < 3) continue; } line.middle = added; bool found = false; // Check if the middle has been already repeated foreach (LineOfNumbers prev in lines) { if (prev.Middle == line.Middle) { found = true; break; } } if (found == false) break; } return line; }