diff --git a/src/components/BinarySearchTrick.tsx b/src/components/BinarySearchTrick.tsx index 3d872eb..7c2f7eb 100644 --- a/src/components/BinarySearchTrick.tsx +++ b/src/components/BinarySearchTrick.tsx @@ -1,7 +1,6 @@ import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; -import { Checkbox } from '@/components/ui/checkbox'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Switch } from '@/components/ui/switch'; import { Label } from '@/components/ui/label'; @@ -13,7 +12,7 @@ interface BinarySearchTrickProps { } const BinarySearchTrick = ({ showSocialShare = true }: BinarySearchTrickProps) => { - const [selectedCards, setSelectedCards] = useState([]); + const [cardStates, setCardStates] = useState>({}); const [result, setResult] = useState(null); const [showResult, setShowResult] = useState(false); const [isOneByOne, setIsOneByOne] = useState(false); @@ -76,7 +75,7 @@ const BinarySearchTrick = ({ showSocialShare = true }: BinarySearchTrickProps) = const handleModeToggle = (checked: boolean) => { setIsOneByOne(checked); setCurrentCardIndex(0); - setSelectedCards([]); + setCardStates({}); setShowResult(false); }; @@ -89,29 +88,33 @@ const BinarySearchTrick = ({ showSocialShare = true }: BinarySearchTrickProps) = setCurrentCardIndex(prev => Math.min(cards.length - 1, prev + 1)); }; - const handleCardToggle = (cardId: number) => { - setSelectedCards(prev => - prev.includes(cardId) - ? prev.filter(id => id !== cardId) - : [...prev, cardId] - ); + const handleCardSelection = (cardId: number, state: 'present' | 'absent') => { + setCardStates(prev => ({ + ...prev, + [cardId]: state + })); setShowResult(false); }; const calculateResult = () => { - const sum = selectedCards.reduce((acc, cardId) => acc + cardId, 0); + const sum = Object.entries(cardStates) + .filter(([_, state]) => state === 'present') + .reduce((acc, [cardId, _]) => acc + parseInt(cardId), 0); setResult(sum); setShowResult(true); }; const reset = () => { - setSelectedCards([]); + setCardStates({}); setResult(null); setShowResult(false); setCurrentCardIndex(0); setCards(generateCards()); // Regenerate with new randomized order }; + // Check if at least one card has been selected (present or absent) + const hasAnySelection = Object.values(cardStates).some(state => state !== 'unselected'); + // Get cards to display based on mode const getDisplayCards = () => { if (isOneByOne) { @@ -232,48 +235,64 @@ const BinarySearchTrick = ({ showSocialShare = true }: BinarySearchTrickProps) = )}
- {getDisplayCards().map((card) => ( - handleCardToggle(card.id)} - > - -
- - {card.id} - - {}} // Controlled by card click - /> -
-
- -
- {card.numbers.map((num) => ( -
- {num} + {getDisplayCards().map((card) => { + const cardState = cardStates[card.id] || 'unselected'; + return ( + + +
+ + {card.id} + +
+ +
- ))} -
- -
- ))} +
+ + +
+ {card.numbers.map((num) => ( +
+ {num} +
+ ))} +
+
+ + ); + })}