Data update
This commit is contained in:
parent
61b93a2cd1
commit
5af6d93694
858 changed files with 20572 additions and 2082 deletions
62
Task/Periodic-table/C++/periodic-table.cpp
Normal file
62
Task/Periodic-table/C++/periodic-table.cpp
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include <cstdint>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <vector>
|
||||
|
||||
struct Group {
|
||||
int32_t first;
|
||||
int32_t last;
|
||||
};
|
||||
|
||||
struct Position{
|
||||
int32_t period;
|
||||
int32_t group;
|
||||
};
|
||||
|
||||
const std::vector<Group> GROUPS = { Group(3, 10), Group(11, 18),
|
||||
Group(19, 36), Group(37, 54), Group(55, 86), Group(87, 118) };
|
||||
|
||||
Position periodic_table(const int32_t& atomic_number) {
|
||||
if ( atomic_number < 1 || atomic_number > 118 ) {
|
||||
throw std::invalid_argument("Atomic number is out of range:" + atomic_number);
|
||||
}
|
||||
|
||||
if ( atomic_number == 1 ) { // Hydrogen
|
||||
return Position(1, 1);
|
||||
}
|
||||
if ( atomic_number == 2 ) { // Helium
|
||||
return Position(1, 18);
|
||||
}
|
||||
if ( atomic_number >= 57 && atomic_number <= 71 ) { // Lanthanides
|
||||
return Position(8, atomic_number - 53);
|
||||
}
|
||||
if ( atomic_number >= 89 && atomic_number <= 103 ) { // Actinides
|
||||
return Position(9, atomic_number - 85);
|
||||
}
|
||||
|
||||
int32_t period = 0;
|
||||
int32_t periodFirst = 0;
|
||||
int32_t periodLast = 0;
|
||||
for ( uint64_t i = 0; i < GROUPS.size() && period == 0; ++i ) {
|
||||
Group group = GROUPS[i];
|
||||
if ( atomic_number >= group.first && atomic_number <= group.last ) {
|
||||
period = i + 2;
|
||||
periodFirst = group.first;
|
||||
periodLast = group.last;
|
||||
}
|
||||
}
|
||||
|
||||
if ( atomic_number < periodFirst + 2 || period == 4 || period == 5 ) {
|
||||
return Position(period, atomic_number - periodFirst + 1);
|
||||
}
|
||||
return Position(period, atomic_number - periodLast + 18);
|
||||
}
|
||||
|
||||
int main() {
|
||||
for ( int32_t atomic_number : { 1, 2, 29, 42, 57, 58, 59, 71, 72, 89, 90, 103, 113 } ) {
|
||||
Position position = periodic_table(atomic_number);
|
||||
std::cout << "Atomic number " << std::left << std::setw(3) << atomic_number
|
||||
<< " -> " << position.period << ", " << position.group << std::endl;
|
||||
}
|
||||
}
|
||||
55
Task/Periodic-table/Java/periodic-table.java
Normal file
55
Task/Periodic-table/Java/periodic-table.java
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
import java.util.List;
|
||||
|
||||
public final class PeriodicTable {
|
||||
|
||||
public static void main(String[] aArgs) {
|
||||
for ( int atomicNumber : List.of( 1, 2, 29, 42, 57, 58, 59, 71, 72, 89, 90, 103, 113 ) ) {
|
||||
Position position = periodicTable(atomicNumber);
|
||||
System.out.println(String.format("%s%-3d%s%d%s%d",
|
||||
"Atomic number ", atomicNumber, " -> ", position.period, ", ", position.group));
|
||||
}
|
||||
}
|
||||
|
||||
private static Position periodicTable(int aAtomicNumber) {
|
||||
if ( aAtomicNumber < 1 || aAtomicNumber > 118 ) {
|
||||
throw new IllegalArgumentException("Atomic number is out of range:" + aAtomicNumber);
|
||||
}
|
||||
|
||||
if ( aAtomicNumber == 1 ) { // Hydrogen
|
||||
return new Position(1, 1);
|
||||
}
|
||||
if ( aAtomicNumber == 2 ) { // Helium
|
||||
return new Position(1, 18);
|
||||
}
|
||||
if ( aAtomicNumber >= 57 && aAtomicNumber <= 71 ) { // Lanthanides
|
||||
return new Position(8, aAtomicNumber - 53);
|
||||
}
|
||||
if ( aAtomicNumber >= 89 && aAtomicNumber <= 103 ) { // Actinides
|
||||
return new Position(9, aAtomicNumber - 85);
|
||||
}
|
||||
|
||||
int period = 0;
|
||||
int periodFirst = 0;
|
||||
int periodLast = 0;
|
||||
for ( int i = 0; i < GROUPS.size() && period == 0; i++ ) {
|
||||
Group group = GROUPS.get(i);
|
||||
if ( aAtomicNumber >= group.first && aAtomicNumber <= group.last ) {
|
||||
period = i + 2;
|
||||
periodFirst = group.first;
|
||||
periodLast = group.last;
|
||||
}
|
||||
}
|
||||
|
||||
if ( aAtomicNumber < periodFirst + 2 || period == 4 || period == 5 ) {
|
||||
return new Position(period, aAtomicNumber - periodFirst + 1);
|
||||
}
|
||||
return new Position(period, aAtomicNumber - periodLast + 18);
|
||||
}
|
||||
|
||||
private static record Group(int first, int last) {}
|
||||
private static record Position(int period, int group) {}
|
||||
|
||||
private static final List<Group> GROUPS = List.of( new Group(3, 10), new Group(11, 18),
|
||||
new Group(19, 36), new Group(37, 54), new Group(55, 86), new Group(87, 118) );
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue