Non-metals typically* have a fixed number of covalent bonds in every chemical they are part of. Given the number of bonds every element requires, output whether it's possible to construct a single molecule from the given chemicals, such that every atom has it's desired number of bonds.
In other words, output if it's possible to construct a connected undirected multigraph without self-loops so that each node has the number of edges equal to the corresponding number listed in the input.
Test Cases
Falsey:
[1] A single element has nothing to bond with
[4] Atoms can not bond with themselves
[1, 1, 1, 1] Each atom is saturated after single bond, so it's impossible to connect all 4 of them together. It can form 2 pairs but not a single molecule.
[0, 0] Two separate helium "molecules"
[1, 3]
[2, 3]
[1, 1, 1, 1, 1, 3]
Truthy:
[1, 1] (Hydrogen Gas: H-H → 1-1)
[4, 2, 2] (Carbon Dioxide: O=C=O → 2=4=2)
[3, 3] (Nitrogen Gas: N≡N → 3≡3)
[2, 2, 2] (Ozone*: \$\newcommand{\tripow}[3]{ _{#1}{\stackrel{#2}{\triangle}}_{#3}} \tripow{O}{O}{O}\$ → \$\tripow{2}{2}{2}\$)
[0] (Helium: He → 0)
[3, 2, 1] (Nitroxyl: O=N-H → 2=3-1)
[3, 3, 3, 3] (Tetrazete: \$\begin{array}{ccccccc}N&-&N& &3&-&3\\\
||& &||& → &||& &||\\\
N&-&N& &3&-&3\end{array}\$)
[4, 1, 1, 1, 1, 2, 2, 2]
[4, 2, 2, 1, 1]
[3, 3, 2, 1, 1]
Here are the Falsey/Truthy test cases as two lists of lists:
[[1], [4], [1, 1, 1, 1], [0, 0], [1, 3], [2, 3], [1, 1, 1, 1, 1, 3]]
[[1, 1], [4, 2, 2], [3, 3], [2, 2, 2], [0], [3, 2, 1], [3, 3, 3, 3], [4, 1, 1, 1, 1, 2, 2, 2], [4, 2, 2, 1, 1], [3, 3, 2, 1, 1]]
Clarifications
- You may assume the input is non-empty and all values are positive or zero.
- You may choose any 2 distinct values for truthy or falsy, or output truthy/falsy using your language's convention (swapping is allowed). See the tag wiki decision-problem
*I've been told real chemistry is a lot more complex than this, but you can ignore the complexities in this challenge.