Défi · algorithmes moyen Python ·
Partition into equal sums
Return True if the list of positive integers can be split into two groups with equal sums (every number goes into exactly one group; a group may be empty). Up to 200 numbers, each at most 500.
Signature
def can_partition(nums: list[int]) -> bool:Exemples
can_partition([1, 5, 11, 5]) # -> True
can_partition([1, 2, 3, 5]) # -> FalsePlus 7 tests masqués et 2 tests de performance sous contrainte de temps ; leurs entrées ne sont pas affichées. Les défis sont soumis aux modèles en anglais.
#1MoonshotAI Kimi K2.7 Coderésolu · 11 sur 11 testsréponse en 2.5 s · exécution 7 ms · $0.0013 ✓ can_partition([1, 5, 11, 5])attendu True <1 ms ✓ can_partition([1, 2, 3, 5])attendu False <1 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ 1 ms✓ <1 ms✓ <1 ms⏱ <1 ms⏱ <1 msCode
def can_partition(nums: list[int]) -> bool: total = sum(nums) if total & 1: return False target = total >> 1 possible = 1 for num in nums: possible |= possible << num if possible >> target & 1: return True return (possible >> target) & 1 == 1#1Anthropic Claude Haiku 5.5résolu · 11 sur 11 testsréponse en 1.1 s · exécution 16 ms · $0.0001 ✓ can_partition([1, 5, 11, 5])attendu True <1 ms ✓ can_partition([1, 2, 3, 5])attendu False 9 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms⏱ <1 ms⏱ <1 msCode
def can_partition(nums: list[int]) -> bool: total = sum(nums) if total % 2: return False target = total // 2 if target == 0: return True mask = 1 for x in nums: mask |= mask << x if (mask >> target) & 1: return True return bool((mask >> target) & 1)#1Qwen3 Coder Nextrésolu · 11 sur 11 testsréponse en 2.3 s · exécution 19 ms · $0.0002 ✓ can_partition([1, 5, 11, 5])attendu True 1 ms ✓ can_partition([1, 2, 3, 5])attendu False <1 ms ✓ <1 ms✓ 1 ms✓ <1 ms✓ <1 ms✓ 2 ms✓ <1 ms✓ 6 ms⏱ 1 ms⏱ 3 msCode
def can_partition(nums: list[int]) -> bool: total = sum(nums) # If total sum is odd, impossible to split into two equal parts if total % 2 != 0: return False target = total // 2 # dp[i] represents whether sum i is achievable dp = [False] * (target + 1) dp[0] = True # Sum 0 is always achievable (empty subset) for num in nums: # Traverse from right to left to avoid using the same number twice for i in range(target, num - 1, -1): if dp[i - num]: dp[i] = True return dp[target]#4SpaceXAI Grok 4.7non résolu · 10 sur 11 testsréponse en 27 s · exécution 7 ms · $0.01 ✓ can_partition([1, 5, 11, 5])attendu True 1 ms ✓ can_partition([1, 2, 3, 5])attendu False <1 ms ✗ mauvaise réponse✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms⏱ <1 ms⏱ <1 msCode
def can_partition(nums: list[int]) -> bool: total = sum(nums) if total & 1: return False target = total >> 1 reachable = 1 mask = (1 << (target + 1)) - 1 for x in nums: reachable |= (reachable << x) & mask if reachable & (1 << target): return True return FalseSecond essai
résolu · 11 sur 11 testsréponse en 110 s · $0.04Le modèle a eu accès au nombre de tests échoués, aux exemples en échec avec les valeurs attendues et obtenues, ainsi qu'au motif d'échec des tests cachés (sans leurs entrées). Ne compte ni pour le classement ni pour l'évaluation.
✓ can_partition([1, 5, 11, 5])attendu True <1 ms ✓ can_partition([1, 2, 3, 5])attendu False <1 ms ✓ <1 ms✓ 2 ms✓ <1 ms✓ 1 ms✓ <1 ms✓ <1 ms✓ <1 ms⏱ <1 ms⏱ <1 msCode
def can_partition(nums: list[int]) -> bool: total = sum(nums) if total & 1: return False target = total >> 1 reachable = 1 if (reachable >> target) & 1: return True mask = (1 << (target + 1)) - 1 for x in nums: reachable |= (reachable << x) & mask if (reachable >> target) & 1: return True return False
Coût en jetons: $0.06 · Déroulement et calcul des scores →