little-elementor 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2a62029b9780fd72d2023ea87dde8392f41e6cd6f16edecc605b23c8f4fc1ce8
4
+ data.tar.gz: 8c504f98f876945a2d683d8e0b3dcfae5edfe2f39f7cc563b2f6e449de6afd22
5
+ SHA512:
6
+ metadata.gz: 2cfbbb4a3017353228049284a14efb518d97fd8244ee11a5820893da42e14db474b28d70fe4f9a34f368dbd7e758f0d17f387ae027236c2bb78c0fa726b01830
7
+ data.tar.gz: 22ec9ad679fd427d0fbc60f560589cf876f32cb037fe24fd1045a5e102e09a93fee5c002a2f8df47c05edfe29f47b015f4e3f7b693ca1cbf348467cf57627d34
@@ -0,0 +1,157 @@
1
+ module LittleElementor
2
+ module Helpers
3
+
4
+ L = ["S", "P", "D", "F", "G", "H", "I", "J"]
5
+ ELEMENTS = [
6
+ {name: "hydrogen", sym: "H"},
7
+ {name: "helium", sym: "He"},
8
+ {name: "lithium", sym: "Li"},
9
+ {name: "beryllium", sym: "Be"},
10
+ {name: "boron", sym: "B"},
11
+ {name: "carbon", sym: "C"},
12
+ {name: "nitrogen", sym: "N"},
13
+ {name: "oxygen", sym: "O"},
14
+ {name: "fluorine", sym: "F"},
15
+ {name: "neon", sym: "Ne"},
16
+ {name: "sodium", sym: "Na"},
17
+ {name: "magnesium", sym: "Mg"},
18
+ {name: "aluminium", sym: "Al"},
19
+ {name: "silicon", sym: "Si"},
20
+ {name: "phosphorus", sym: "P"},
21
+ {name: "sulfur", sym: "S"},
22
+ {name: "chlorine", sym: "Cl"},
23
+ {name: "argon", sym: "Ar"},
24
+ {name: "potassium", sym: "K"},
25
+ {name: "calcium", sym: "Ca"},
26
+ {name: "scandium", sym: "Cs"},
27
+ {name: "titanium", sym: "Ti"},
28
+ {name: "vanadium", sym: "Va"},
29
+ {name: "chromium", sym: "Cr"},
30
+ {name: "manganese", sym: "Mn"},
31
+ {name: "iron", sym: "Fe"},
32
+ {name: "cobalt", sym: "Co"},
33
+ {name: "nickel", sym: "Ni"},
34
+ {name: "copper", sym: "Cu"},
35
+ {name: "zinc", sym: "Zn"},
36
+ {name: "gallium", sym: "Ga"},
37
+ {name: "germanium", sym: "Ge"},
38
+ {name: "arsenic", sym: "As"},
39
+ {name: "selenium", sym: "Se"},
40
+ {name: "bromine", sym: "Br"},
41
+ {name: "krypton", sym: "Kr"},
42
+ {name: "rubidium", sym: "Rb"},
43
+ {name: "strontium", sym: "Sr"},
44
+ {name: "yttrium", sym: "Y"},
45
+ {name: "zirconium", sym: "Zr"},
46
+ {name: "niobium", sym: "Nb"},
47
+ {name: "molybdenum", sym: "Mo"},
48
+ {name: "technetium", sym: "Tc"},
49
+ {name: "ruthenium", sym: "Ru"},
50
+ {name: "rhodium", sym: "Rh"},
51
+ {name: "palladium", sym: "Pd"},
52
+ {name: "silver", sym: "Ag"},
53
+ {name: "cadmium", sym: "Cd"},
54
+ {name: "indium", sym: "In"},
55
+ {name: "tin", sym: "Sn"},
56
+ {name: "antimony", sym: "Sb"},
57
+ {name: "tellurium", sym: "Te"},
58
+ {name: "iodine", sym: "I"},
59
+ {name: "xenon", sym: "Xe"},
60
+ {name: "cesium", sym: "Cs"},
61
+ {name: "barium", sym: "Ba"},
62
+ {name: "lanthanum", sym: "La"},
63
+ {name: "cerium", sym: "Ce"},
64
+ {name: "praseodymium", sym: "Pr"},
65
+ {name: "neodymium", sym: "Nd"},
66
+ {name: "promethium", sym: "Pm"},
67
+ {name: "samarium", sym: "Sm"},
68
+ {name: "europium", sym: "Eu"},
69
+ {name: "gadolinium", sym: "Gd"},
70
+ {name: "terbium", sym: "Tb"},
71
+ {name: "dysprosium", sym: "Dy"},
72
+ {name: "holmium", sym: "Ho"},
73
+ {name: "erbium", sym: "Er"},
74
+ {name: "thulium", sym: "Tm"},
75
+ {name: "ytterbium", sym: "Yb"},
76
+ {name: "lutetium", sym: "Lu"},
77
+ {name: "hafnium", sym: "Hf"},
78
+ {name: "tantalum", sym: "Ta"},
79
+ {name: "tungsten", sym: "W"},
80
+ {name: "rhenium", sym: "Re"},
81
+ {name: "osmium", sym: "Os"},
82
+ {name: "iridium", sym: "Ir"},
83
+ {name: "platinum", sym: "Pt"},
84
+ {name: "gold", sym: "Au"},
85
+ {name: "mercury", sym: "Hg"},
86
+ {name: "thallium", sym: "Tl"},
87
+ {name: "lead", sym: "Pb"},
88
+ {name: "bismuth", sym: "Bi"},
89
+ {name: "polonium", sym: "Po"},
90
+ {name: "astatine", sym: "At"},
91
+ {name: "radon", sym: "Rn"},
92
+ {name: "francium", sym: "Fr"},
93
+ {name: "radium", sym: "Ra"},
94
+ {name: "actinium", sym: "Ac"},
95
+ {name: "thorium", sym: "Th"},
96
+ {name: "protactinium", sym: "Pa"},
97
+ {name: "uranium", sym: "U"},
98
+ {name: "neptunium", sym: "Np"},
99
+ {name: "plutonium", sym: "Pu"},
100
+ {name: "americium", sym: "Am"},
101
+ {name: "curium", sym: "Cm"},
102
+ {name: "berkelium", sym: "Bk"},
103
+ {name: "californium", sym: "Cf"},
104
+ {name: "einsteinium", sym: "Es"},
105
+ {name: "fermium", sym: "Fm"},
106
+ {name: "mendelevium", sym: "Md"},
107
+ {name: "nobelium", sym: "No"},
108
+ {name: "lawrencium", sym: "Lr"},
109
+ {name: "rutherfordium", sym: "Rf"},
110
+ {name: "dubnium", sym: "Db"},
111
+ {name: "seaborgium", sym: "Sg"},
112
+ {name: "bohrium", sym: "Bh"},
113
+ {name: "hassium", sym: "Hs"},
114
+ {name: "meitnerium", sym: "Mt"},
115
+ {name: "darmstadtium", sym: "Ds"},
116
+ {name: "roentgenium", sym: "Rg"},
117
+ {name: "copernicium", sym: "Cn"},
118
+ {name: "nihonium", sym: "Nh"},
119
+ {name: "flerovium", sym: "Fl"},
120
+ {name: "moscovium", sym: "Mc"},
121
+ {name: "livermorium", sym: "Lv"},
122
+ {name: "tennessine", sym: "Ts"},
123
+ {name: "oganesson", sym: "Og"}
124
+ ]
125
+
126
+ def get_group()
127
+ case electron_configuration.last.l
128
+ when 1
129
+ electron_configuration.last.electrons_count + 12
130
+ when 0
131
+ if electron_configuration.any?{|o| o.l == 2}
132
+ electron_configuration.last.electrons_count + electron_configuration.select{|o| o.l==2}.max{|o| o.electrons_count}.electrons_count
133
+ else
134
+ electron_configuration.last.electrons_count
135
+ end
136
+ end
137
+ end
138
+
139
+ def get_e_c(sorted)
140
+ i = 0
141
+ arr = []
142
+ LittleElementor::Orbital.gen_orbitals.each do |orbital|
143
+ break if i >= @atomic_number
144
+ if (i == 18) and (@atomic_number == 29 or @atomic_number == 24)
145
+ els = 1
146
+ elsif (@atomic_number == 24 or @atomic_number == 29) and (i == 19)
147
+ els = @atomic_number - 19
148
+ else
149
+ els = orbital.electrons_count > @atomic_number - i ? @atomic_number - i : orbital.electrons_count
150
+ end
151
+ arr << LittleElementor::Orbital.new(orbital.n, orbital.l, els)
152
+ i+=els
153
+ end
154
+ return sorted ? arr.sort_by{|o| o.n} : arr
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,37 @@
1
+ require_relative "helpers"
2
+
3
+ module LittleElementor
4
+
5
+ class Orbital
6
+
7
+ attr_reader :n, :l, :electrons_count
8
+ def initialize(n, l, electrons_count)
9
+ @n = n
10
+ @l = l
11
+ @electrons_count = electrons_count
12
+ end
13
+
14
+ def to_s
15
+ "#{@n}#{Helpers::L[@l]}#{@electrons_count}"
16
+ end
17
+
18
+ def self.gen_orbitals
19
+ i = 0
20
+ n = 1
21
+ al_lay = []
22
+ while n < 9
23
+ break if n > 7
24
+ l = 0
25
+ while l < n
26
+ max = l*4 + 2
27
+ break if n > 7 or l >= n
28
+ al_lay << Orbital.new(n, l, max)
29
+ i += max
30
+ l+=1
31
+ end
32
+ n+=1
33
+ end
34
+ al_lay.sort_by{|o| [o.n + o.l, o.n]}
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,27 @@
1
+ require_relative "little-elementor/orbital"
2
+
3
+ module LittleElementor
4
+
5
+ class Element
6
+ include LittleElementor::Helpers
7
+
8
+ attr_reader :period, :atomic_number, :group, :charge, :is_nobel_gas, :symbol, :name
9
+ def initialize(atomic_number, charge = 0)
10
+ @atomic_number = atomic_number + charge
11
+ @is_nobel_gas = [2, 10, 18, 36, 54, 86, 118].include?(@atomic_number)
12
+ @name = LittleElementor::Helpers::ELEMENTS[@atomic_number-1][:name]
13
+ @period = electron_configuration.map(&:n).max
14
+ @charge = charge
15
+ @group = get_group()
16
+ @symbol = LittleElementor::Helpers::ELEMENTS[@atomic_number-1][:sym]
17
+ end
18
+
19
+ def electron_configuration(sorted: true)
20
+ get_e_c(sorted)
21
+ end
22
+
23
+ def to_s
24
+ "Symbol: #{@symbol}\nis a noble gas?: #{@is_nobel_gas}\ncharge: #{@charge}\nname: #{@name}\natomic_number #{@atomic_number}\nsorted electron configuration: #{electron_configuration.map(&:to_s)}\nelectron configuration: #{electron_configuration(sorted: false).map(&:to_s)}\nperiod: #{@period}\ngroup: #{@group}"
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: little-elementor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Kourosh Alinaghi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A little library that gives you minimal information about an element.
14
+ email: kouroshalinaghi@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/little-elementor/helpers.rb
20
+ - lib/little-elementor/orbital.rb
21
+ - lib/little_elementor.rb
22
+ homepage: https://github.com/kouroshalinaghi/little-elementor
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.1.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: A Little Elementor!
45
+ test_files: []