Created
November 11, 2023 06:16
-
-
Save Pagwin2/07042faaa3e5ae275652874b47cb969f to your computer and use it in GitHub Desktop.
electron subshell program
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- First Int is the Layer, second is the Fill of that layer | |
| data SubShell = S Integer Integer | P Integer Integer | D Integer Integer | F Integer Integer deriving (Show, Eq) | |
| instance Ord SubShell where | |
| S l1 _ <= P l2 _ | l1==l2 = True | |
| S l1 _ <= D l2 _ | l1==l2 = True | |
| S l1 _ <= F l2 _ | l1==l2 = True | |
| P l1 _ <= D l2 _ | l1==l2 = True | |
| P l1 _ <= F l2 _ | l1==l2 = True | |
| D l1 _ <= F l2 _ | l1==l2 = True | |
| S l1 _ <= S l2 _ = l1 <= l2 | |
| S l1 _ <= P l2 _ = l1 <= l2 | |
| S l1 _ <= D l2 _ = l1 <= l2 | |
| S l1 _ <= F l2 _ = l1 <= l2 | |
| P l1 _ <= S l2 _ = l1 <= l2 | |
| P l1 _ <= P l2 _ = l1 <= l2 | |
| P l1 _ <= D l2 _ = l1 <= l2 | |
| P l1 _ <= F l2 _ = l1 <= l2 | |
| D l1 _ <= S l2 _ = l1 <= l2 | |
| D l1 _ <= P l2 _ = l1 <= l2 | |
| D l1 _ <= D l2 _ = l1 <= l2 | |
| D l1 _ <= F l2 _ = l1 <= l2 | |
| F l1 _ <= S l2 _ = l1 <= l2 | |
| F l1 _ <= P l2 _ = l1 <= l2 | |
| F l1 _ <= D l2 _ = l1 <= l2 | |
| F l1 _ <= F l2 _ = l1 <= l2 | |
| shellConstruct :: Integer -> [SubShell] | |
| shellConstruct n = if n < 1 then [] else (reverse . emptyYeet) $ shellConstructHelper [] n | |
| emptyYeet :: [SubShell] -> [SubShell] | |
| emptyYeet (S layer 0:rem) = rem | |
| emptyYeet (P layer 0:rem) = rem | |
| emptyYeet (D layer 0:rem) = rem | |
| emptyYeet (F layer 0:rem) = rem | |
| emptyYeet list = list | |
| shellConstructHelper :: [SubShell] -> Integer -> [SubShell] | |
| -- initial starting spot for recursion | |
| shellConstructHelper [] 0 = [] | |
| shellConstructHelper [] 1 = [S 1 1] | |
| shellConstructHelper [] 2 = [S 1 2] | |
| shellConstructHelper [] n = shellConstructHelper [S 1 2] $ n-2 | |
| -- shuttling up through the layers | |
| shellConstructHelper (S layer 2: rem) n | layer >= 6 = shellConstructHelper ([F (layer-1) 0, S layer 2] ++ rem) n | |
| shellConstructHelper (S layer 2: rem) n | layer >= 4 = shellConstructHelper ([D (layer-1) 0, S layer 2] ++ rem) n | |
| shellConstructHelper (S layer 2: rem) n | layer >= 2 = shellConstructHelper ([P layer 0, S layer 2] ++ rem) n | |
| shellConstructHelper (S layer 2: rem) n | layer < 2 = shellConstructHelper ([S (layer+1) 0, S layer 2] ++ rem) n | |
| shellConstructHelper (P layer 6: rem) n = shellConstructHelper ([S (layer+1) 0, P layer 6] ++ rem) n | |
| shellConstructHelper (D layer 10: rem) n = shellConstructHelper ([P (layer+1) 0, D layer 10] ++ rem) n | |
| shellConstructHelper (F layer 14: rem) n = shellConstructHelper ([D (layer+1) 0, F layer 14] ++ rem) n | |
| -- recursion base case | |
| shellConstructHelper list 0 = list | |
| -- shuttling electrons into each layer | |
| shellConstructHelper (S layer electrons: rem) n = shellConstructHelper (S layer (electrons+1) : rem) $ n-1 | |
| shellConstructHelper (P layer electrons: rem) n = shellConstructHelper (P layer (electrons+1) : rem) $ n-1 | |
| shellConstructHelper (D layer electrons: rem) n = shellConstructHelper (D layer (electrons+1) : rem) $ n-1 | |
| shellConstructHelper (F layer electrons: rem) n = shellConstructHelper (F layer (electrons+1) : rem) $ n-1 | |
| electronsInShell :: SubShell -> Integer | |
| electronsInShell (S _ n) = n | |
| electronsInShell (P _ n) = n | |
| electronsInShell (D _ n) = n | |
| electronsInShell (F _ n) = n | |
| shellInversion :: [SubShell] -> Integer | |
| shellInversion = sum . map electronsInShell | |
| fullDisplay :: [SubShell] -> String | |
| fullDisplay = foldMap display | |
| display :: SubShell -> String | |
| display (S layer electrons) = l ++ "s^{" ++ e ++ "}" | |
| where | |
| l = show layer | |
| e = show electrons | |
| display (P layer electrons) = l ++ "p^{" ++ e ++ "}" | |
| where | |
| l = show layer | |
| e = show electrons | |
| display (D layer electrons) = l ++ "d^{" ++ e ++ "}" | |
| where | |
| l = show layer | |
| e = show electrons | |
| display (F layer electrons) = l ++ "f^{" ++ e ++ "}" | |
| where | |
| l = show layer | |
| e = show electrons |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment