little-elementor 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []