little-elementor 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/little-elementor/helpers.rb +157 -0
- data/lib/little-elementor/orbital.rb +37 -0
- data/lib/little_elementor.rb +27 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -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: []
|