/// String Calculator - Buggy Implementation /// This code has intentional bugs for the Bug Hunt Kata exercise /// /// Requirements: /// 1. Empty string returns 0 /// 2. Single number returns that number /// 3. Two numbers comma-delimited returns sum /// 4. Handle newlines as delimiters /// 5. Support custom delimiters: "//[delimiter]\n[numbers]" class StringCalculator { int add(String numbers) { // Bug 1: Empty string handling if (numbers.isEmpty) { return 0; // Fixed: Return 0 for empty string } // Bug 2: Single number parsing if (!numbers.contains(',') && !numbers.contains('\n') && !numbers.startsWith('//')) { return int.parse(numbers); // Fixed: Removed off-by-one error } String delimiter = ','; String numbersToProcess = numbers; // Custom delimiter support if (numbers.startsWith('//')) { // Bug 4: Custom delimiter not actually used final parts = numbers.split('\n'); delimiter = parts[0].substring(2); // Fixed: Extract custom delimiter numbersToProcess = parts.skip(1).join('\n'); } // Bug 3 & 4: Delimiter handling issues final numList = numbersToProcess .replaceAll('\n', delimiter) .split(delimiter) .where((s) => s.isNotEmpty) .map((s) => int.parse(s)) .where((n) => n <= 1000) // Filter out numbers > 1000 .toList(); // Bug 3: Off-by-one in summation int sum = 0; for (int i = 0; i < numList.length; i++) { // Fixed: Include last element sum += numList[i]; } return sum; } }