Skip to content

Commit ae89633

Browse files
authored
Merge pull request #2251 from alwaysprince05/fix/issue-2105-sudoku-assert
fix(examples): replace switch statement with std::popcount in sudoku example
2 parents 2c56ffe + e25bbd7 commit ae89633

1 file changed

Lines changed: 6 additions & 59 deletions

File tree

examples/sudoku.cpp

Lines changed: 6 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <cstdlib>
2525

2626
#include <atomic>
27+
#include <bit>
2728
#include <cassert>
2829
#include <chrono>
2930
#include <string_view>
@@ -221,67 +222,13 @@ bool examine_potentials(board_element *b, bool *progress)
221222
{
222223
if (b[i].solved_element == 0 && b[i].potential_set == 0) // empty set
223224
return false;
224-
switch (b[i].potential_set)
225+
// Check if potential_set is a power of 2 (only one bit set)
226+
if (std::popcount(b[i].potential_set) == 1)
225227
{
226-
case 1:
227-
{
228-
b[i].solved_element = 1;
229-
singletons = true;
230-
break;
231-
}
232-
case 2:
233-
{
234-
b[i].solved_element = 2;
235-
singletons = true;
236-
break;
237-
}
238-
case 4:
239-
{
240-
b[i].solved_element = 3;
241-
singletons = true;
242-
break;
243-
}
244-
case 8:
245-
{
246-
b[i].solved_element = 4;
247-
singletons = true;
248-
break;
249-
}
250-
case 16:
251-
{
252-
b[i].solved_element = 5;
253-
singletons = true;
254-
break;
255-
}
256-
case 32:
257-
{
258-
b[i].solved_element = 6;
259-
singletons = true;
260-
break;
261-
}
262-
case 64:
263-
{
264-
b[i].solved_element = 7;
265-
singletons = true;
266-
break;
267-
}
268-
case 128:
269-
{
270-
b[i].solved_element = 8;
271-
singletons = true;
272-
break;
273-
}
274-
case 256:
275-
{
276-
b[i].solved_element = 9;
228+
// It's a singleton - solve it
229+
// countr_zero gives the bit position (0-indexed), add 1 to get the element value
230+
b[i].solved_element = std::countr_zero(b[i].potential_set) + 1;
277231
singletons = true;
278-
break;
279-
}
280-
default:
281-
{
282-
assert(!"potential set is not a power of 2");
283-
break;
284-
}
285232
}
286233
}
287234
*progress = singletons;

0 commit comments

Comments
 (0)