Pytanie
Given the atomic number of an element
w zakresie [1-118] wyprowadza group and period
, tego elementu, jak podano w poniższym układzie okresowym pierwiastków.
Dla elementów w szeregu lantanowców i aktynowców (zakresy [57-71] i [89-103]), należy zamiast wrócić L
do lantanowców i A
dla aktynowców
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i zapewniania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
Przypadki testowe
Ponieważ istnieje tylko 118 możliwych danych wejściowych, poniżej podano pełną listę oczekiwanych danych wejściowych i wyjściowych.
Stworzone ręcznie, daj mi znać, jeśli wystąpi błąd!
1,1,1 2,18,1 3,1,2 4,2,2 5,13,2 6,14,2 7,15,2 8,16,2 9,17,2 10,18,2 11,1,3 12,2,3 13,13,3 14,14,3 15,15,3 16,16,3 17,17,3 18,18,3 19,1,4 20,2,4 21,3,4 22,4,4 23,5,4 24,6,4 25,7,4 26,8,4 27,9,4 28,10,4 29,11,4 30,12,4 31,13,4 32,14,4 33,15,4 34,16,4 35,17,4 36,18,4 37,1,5 38,2,5 39,3,5 40,4,5 41,5,5 42,6,5 43,7,5 44,8,5 45,9,5 46,10,5 47,11,5 48,12,5 49,13,5 50,14,5 51,15,5 52,16,5 53,17,5 54,18,5 55,1,6 56,2,6 57, L, 58, L, 59, L, 60, L, 61, L, 62, L, 63, L, 64, L, 65, L, 66, L, 67, L, 68, L, 69, L, 70, L, 71, L, 72,4,6 73,5,6 74,6,6 75,7,6 76,8,6 77,9,6 78,10,6 79,11,6 80,12,6 81,13,6 82,14,6 83,15,6 84,16,6 85,17,6 86,18,6 87,1,7 88,2,7 89, A, 90, A, 91, A, 92, A, 93, A, 94, A, 95, A, 96, A, 97, A, 98, A, 99, A, 100, A, 101, A, 102, A, 103, A, 104,4,7 105,5,7 106,6,7 107,7,7 108,8,7 109,9,7 110,10,7 111,11,7 112,12,7 113,13,7 114,14,7 115,15,7 116,16,7 117,17,7 118,18,7
Punktacja
Prosty golf . Najkrótsza liczba bajtów wygrywa
źródło
L
jest w porządku. Właśnie tak zamierzałem. Ale ponieważ CSV wyszedłL,
, zaakceptuję obaOdpowiedzi:
CJam ,
6459585654 bajtówDzięki Dennis za oszczędność 2 bajtów.
Wypróbuj online!
Pozostawia kropkę i grupę lub pojedynczy znak na stosie.
Wyjaśnienie
Istnieją tutaj dwa główne pomysły:
źródło
05AB1E ,
11310299 bajtówWyjaśnienie:
Wypróbuj online!
źródło
1000000000000000000000000000000001 1100000000000000000000000000111111 1100000000000000000000000000111111 1112222222222222221111111111111111 1113333333333333331111111111111111
może zmniejszyć liczbę bajtów, poza tym fajnie!Mathematica, 77 bajtów
Byłoby również dość łatwe w użyciu,
ElementData
aby ustalić, czy wsad jest lantanowcem czy aktynowcem, ale zajmie to około 20 dodatkowych bajtów.źródło
Python 2 ,
205136 bajtów-26 bajtów dzięki @Dead Possum
Wypróbuj online!
źródło
PHP, 144 bajty
Uwaga: używa kodowania IBM-850
Uruchom tak:
Wyjaśnienie
Sprawdź, czy dane wejściowe mieszczą się w zakresie dla
L
lubA
; zakresy „wyjątków”. Następnie zmodyfikuj dane wejściowe, aby wypełnić brakujące komórki w siatce (lub pozbyć się dodatkowych komórek). Na koniec wydrukuj wyjątek (chyba że jest to fałsz0
) lub przekonwertuj pozycję na współrzędne siatki.źródło
18<t7
. Czy to coś, co robię źle? (działa na Mac El Capitan)ceil
) przez „,” dla 1 dodatkowego bajtuGalaretka , 57 bajtów
Pełny program, który drukuje żądane wyjście.
Wypróbuj online! (Nieco zmodyfikowany program, który drukuje wszystko
input : output
można zobaczyć tutaj ).W jaki sposób?
Tworzy listę 118 możliwych wyników, a następnie wybiera wpis na podstawie indeksu wejścia.
Niektóre prep:
Program (skrócony przez podstawienie
A
,B
iC
)źródło
Perl5, 202 bajtów
źródło
Rubinowy, 130 bajtów
Najpierw zdobądź „A” i „L” za pomocą sztuczki z maską bitową, a następnie spróbuj dopasować się do prostokąta 18 * 7 i użyj div / mod.
źródło
Python 2 , 137 bajtów
Wypróbuj online!
źródło
Python 2 , 115 bajtów
Wypróbuj online!
Chodzi o div-mod pozycji siatki, aby uzyskać grupę i kropkę. Pozycja siatki jest wejściem
n
korygowane przez przesunięcie uwzględniające luki i skurcz L / A. Są one wyodrębniane z listy.Obsługa lantanowców i aktynowców jest brzydka. Są one przypisywane dużym przemieszczeniom 200 i 400, które można wykryć za pomocą
/200
. Chciałbym wstawić znakiL
iA
tutaj, ale następnien+=...
doda znak do liczby, dając błąd, nawet jeślin
nie zostanie użyty. Gdyby nie indeksowanie 1,divmod
można by go użyćn
tylko raz, a następnie zastąpić jego wyrażeniem,źródło
JavaScript (ES7),
10098 bajtówObjaśnienie: Serie „L” i „A” są specjalnie zaprojektowane, przy użyciu logiki bitowej, która pozwoliła mi zaoszczędzić 3 bajty w porównaniu z bezpośrednimi porównaniami. W przeciwnym razie funkcja rekurencyjnie znajdzie okres
p
zawierający pożądaną liczbę atomową, liczbę ostatniego elementu w poprzednim okresiex
oraz liczbę ostatniego elementu w okresie,y
który jest obliczany za każdym razem, zwracając uwagę, że różnice wynoszą 2, 2, 8 , 8, 18, 18 tzn. Powtarzane podwójne liczby kwadratowe. Grupę można następnie znaleźć poprzez przesunięcie z lewej lub prawej strony stołu w zależności od tego, czy element leży pod przekątną Beryl-Scandium, czy nie.źródło
JavaScript (ES6), 136 bajtów
Test
Pokaż fragment kodu
źródło
Python 2 ,
264227217 bajtówWypróbuj online!
O wiele za dużo nawiasów. Wygląda bardziej jak Brain-Flak.
źródło
while
poza funkcją? zaoszczędziłby bajt (spację)while
całkowicie pozbyć się pętli :)Excel, 192 bajty
Daleko od ładnego. Pożyczki z istniejących odpowiedzi w języku Python
Walczy, aby poradzić sobie z przypadkiem, w którym
MOD(x,18)=0
dla Grupy wartość wdzięku.źródło
IF(A1<80
?Rubin, 116 bajtów
Skomentowane w programie testowym
źródło
PHP, 120 bajtów
pobiera dane wejściowe ze STDIN, uruchom z
-nR
.niektóre bitowe magia dla lantanowców i aktynowców, część dodaje i odejmuje offsety dla luk i lantanowców / aktynowców,
$n-=
reszta jest prosta mod / div.
Iteracyjny port odpowiedzi Neila zajmuje 108 bajtów :
źródło
Perl, 169 bajtów
Za pomocą:
źródło
Galaretka ,
4943424139 bajtówWypróbuj online!
tło
Z wyjątkiem lantanowców i aktynowców, wynik będzie składał się z liczby całkowitej wyrażonej w zasadzie bijective 18. Na przykład wodór odpowiada 19 10 = 11 b18 , hel - 36 10 = 1 I b18 i eka-radon / ununoctium / oganesson to 114 10 = 7 I b18 .
Zaczynamy od mapowania wszystkich liczb atomowych, jakie możemy, do odpowiednich liczb całkowitych, a mapowania lantanowców i aktynowców na te, które odpowiadają lantanowi ( 111 10 = 63 b18 ) i aktynowi ( 129 10 = 73 b18 ).
Aby to zrobić, rejestrujemy różnice w przód liczb całkowitych reprezentujących atomy. Na przykład pierwszy to 1I b18 - 11 b18 = Hb18 = 17 10 , drugi to 1 (podobnie jak wszystkie różnice między kolejnymi elementami nierozwiniętego układu okresowego), czwarty (od B do Be ) to 2D b18 - 22 b18 = B b18 = 11 10 i tak dalej. Aby zmapować wszystkie lantanowce i wszystkie aktynowce, rozważymy wszystkie różnice między dwoma lantanowcami lub aktynowcami (np. La do Ce ) za 0 .
Aby uzyskać pożądaną liczbę całkowitą dla liczby atomowej n , wystarczy, że dodamy 19 (wodór) do różnic i obliczymy sumę pierwszych n elementów uzyskanego wektora. Dane wyjściowe są następnie wyświetlane po prostu w bazie bijective 18, chyba że wyświetlałoby to 6 3 (lantanowce) lub 7 3 (aktynowce). W tym drugim przypadku po prostu zamieniamy obliczony wynik na L lub A. .
Wektor, który musimy zakodować dla poziomego zdrowia psychicznego, wygląda następująco.
Po kodowaniu długości przebiegu otrzymujemy następujące informacje.
Aby jeszcze bardziej zmniejszyć przestrzeń wymaganą do zakodowania wektora, usuwamy skrajne wartości 1 (długości) i dodajemy 1 do przebiegów.
Teraz możemy odwracalnie przekształcić te tablice cyfr z bazy 45 na liczby całkowite.
Wszystkie są mniejsze niż 250 , więc możemy je reprezentować znakami ze strony kodowej Jelly . Otoczony
“
(literał start) i‘
(interpretowany jako tablica liczb całkowitych), otrzymujemy literał Jellyktóry pojawia się dosłownie w kodzie.
Jak to działa
źródło