code golf – Печать периодической таблицы Ƨu≡ā⁄b⅔►
<≡7⅛±√‽ε¶&⁶7zV¾UΥY○ΝΚq╬#∫⅜āP⁴7‼%Æ«∑+‼Ψ_№QΕ¦→3γ:Ηρ':υy7▒Ξυlσ№UņcΗ‐Oė γjΒ%G≤§┐⌠≈δ{oR{ΘKUƨA▒V⁶ ³'2n '`Δ"²zōdΕ«⅝ ←╝⅔πφ“'³─◄"³υ≥τk┐?№L‚↑γ°“'³─6 «{K;K;A{:I}a}X¹¹Hā;{⁾J6*;J3*;Jl1=@*+l3κ@*ΚΚ"<Ψ:$ō∫ΣO±>⁄’7nž}”‛‽‛ №l№’2n{_”□׀⁵’čž}”O⁶‛±0±‛¤3¤M¤’2n{_”P8’žЭто заняло некоторое время. Чтобы сделать его таким компактным, я реализовал много вещей в SOGL (большинство из которых уже были задокументированы). В частности,
- “ž”, который помещает массив внутри другого массива в определенных координатах, и
- “►” и “◄” – серийное кодирование и декодирование. Я действительно думал, что задокументировал их, но, похоже, это было не так.
Попробуйте здесь! (сжатие (лениво) обновлено для соответствия 0.12)
Итак, слишком длинное объяснение впереди:
Первая часть: настройка
f¤o3,hģ_lμgΣ│Τ┐xC‚¦⁽?%□f⁵↕υ/gκ÷⌠ — →3γ:Ηρ':υy7▒Ξυσ╤ņcΗOī{═─⁷׀Uγlλ№γjΒ%G≤§┐⌠≈δ{oR{ΘKUƨA▒V⁶ ³'2n
...‘ push "h helibeb c n of nenamgalsip s clark casctiv crmnfeconicuzngageassebrkrrbsry zrnbmotcrurhpdagcdinsnsbtei xecsbalaceprndpmsmeugdtbdyhoertmybluhftaw reosirptauhgtlpbbipoatrnfrraacthpau nppuamcmbkcfesclmbdhdnolrrf"fgvcfmsmmdnolrrfdbsgb
2n разбивается на массив с элементами длины 2
Это имена элементов, удобно уже сформированные, как они должны быть.
''Δ
'` нажмите 118
Диапазон Δ - все числа от 1 до 118
это атомные номера
"²zōdΕ«⅝ ←╝⅔πφ"'³─◄
«…» нажать 794198124771504466790502538
'³ нажать 19
─ base[19] decode - в результате получается массив [1, 2, 2, 8, 3, 8, 4, 18, 5, 18, 6, 3, 9, 14, 6, 15, 7, 3, 10, 14 , 7, 15]
◄ декодирование длин серий
Конечный результат: [1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]
Это периоды с 9и 10 для лантаноидов и актиноидов соответственно.
"³υ≥τk┐?№L‚↑γ°"'³─6«{K;K;A{:I}a}X¹
"..." нажмите 270687554118568732622432847987
'³─ декодирование по основанию 19, в результате чего получается [1, 0, 18, 0, 1, 1, 13, 5, 1, 1, 13, 5, 1, 17, 1, 17, 1, 16, 4, 14, 1, 16, 4, 14]
6«{ } повторить 12 раз
К;К; получить первые 2 элемента массива под массивом (например: .
.., 13, 5, [1, 1, 13, 5, 1, 17, 1, 17, 1, 16, 4, 14, 1) , 16, 4, 14])
A сохранить массив в переменной A (чтобы он не мешался) ..., 13, 5
{ } повторить POP раз ..., 13
: продублировать число ..., 13, 13
Я увеличиваю его ..., 13, 14
и так далее (например, 5 раз, в результате получается 6 чисел) ..., 13, 14, 15, 16, 17, 18, [1, 1, 13, 5, 1, 17, 1, 17, 1, 16, 4, 14, 1, 16, 4, 14]
загрузить обратно массив
повторяя это все 12 раз
X удалить массив из стека
¹ оберните все эти числа в массив
Конечный результат: [1, 18, 1, 2, 13, 14, 15, 16, 17, 18, 1, 2, 13, 14, 15, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 , 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 4, 5, 6, 7, 8, 9 , 10, 11, 12, 13, 14, 15, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 , 17, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
Это периоды, которые можно так красиво сжать, потому что если атомные номера отсортированы, то и они тоже.
Вторая часть: петля
¹Hā;{
¹ объединить все эти 4 массива в один большой массив
H повернуть влево
[[а, б, в], [["в", 3, 6]
Итак, [1, 2, 3], становится ["b", 2, 5] . Теперь структура подмассива [имя, атомный номер, группа, период]
[4, 5, 6]] ["а", 1, 4]]
Пара важных вещей по этому поводу:
- он заставляет каждый новый подмассив содержать все данные из всех массивов с постоянным индексом
- меняет местами индексы - были заданы a,b,c, но теперь в каждом подмассиве первыми элементами являются c, b, a.
Это важно, потому что последние элементы будут отрисовываться первыми, поэтому все будет отображаться правильно. См. https://gist.github.com/dzaima/221d179.2e03d0429e3403cf255c66926 для того, что произойдет, если это не изменится.
а; вставьте пустой массив ниже этого большого массива
{ для каждого подмассива
⁾J6*;J3*;
⁾ переводите элементы массива в предложение, игнорируя числа. Делает заглавной 1-ю букву имени
J pop получить последний элемент массива [["Au", 79, 6], 11]
6* умножить на 6 - координата X [["Au", 79, 6], 66]
; swap, получая массив выше [66, ["Au", 79, 6]]
J pop получить последний элемент массива [66, ["Au", 79], 6]
3* умножить на 6 - координата Y [66, ["Au", 79], 18]
; поменять местами, получив массив выше [66, 18, ["Au", 79]]
Jl1=@*+l3κ@*ΚΚ"<Ψ:$ō∫ΣO±> ⁄‘7nž}
J получить 1-й элемент массива [84, 6, ["C"], 6] [66, 18, ["Au"], 79] [96, 21, ["Lv"], 116]
l получить длину [84, 6, ["C"], 6, 1] [66, 18, ["Au"], 79, 2] [96, 21, ["Ур"], 116, 3]
1= push if [length] = 1 [84, 6, ["C"], 6, 1] [66, 18, ["Au"], 79, 0] [96, 21, ["Lv"], 116, 0]
@* получить такое количество пробелов [84, 6, ["C"], 6, ""] [66, 18, ["Au"], 79, ""] [96, 21, ["Lv"], 116 , ""]
+ присоединить [84, 6, ["C"], "6"] [66, 18, ["Au"], "79"] [96, 21, ["Lv"], "116"]
l получить длину [84, 6, ["C"], "6", 2] [66, 18, ["Au"], "79", 2] [96, 21, ["Ур"], "116", 3]
3κ делать 3-[длина] [84, 6, ["С"], "6", 1] [66, 18, ["Аи"], "79", 1] [96, 21, ["Ур" ], "116", 0]
@* получить такое количество пробелов [84, 6, ["C"], "6", ""] [66, 18, ["Au"], "79", ""] [96, 21, ["Lv "], "116", ""]
Κ добавить перед теми [84, 6, ["C"], "6"] [66, 18, ["Au"], "79"] [96, 21, ["Lv"], "116"]
Κ добавьте, что в массиве [84, 6, [" 6 ", "C"]] [66, 18, [" 79", "Au"]] [96, 21, ["116", "Lv"]]
".
.." нажать " _____ | ŗ || ŗ ||_____|", заменив ŗ на соответствующий элемент из массива [66, 18, " _____ | 79 || Au ||_____|"]
7n разбить это на массив элементов длиной 7 [66, 18, "_____", "| 79 |", "| Au |", "|_____|"]
ž установить этот массив в позиции [66, 18] в массиве ниже
} завершить цикл for-each
Теперь вывод выглядит так.
Третья часть: Дополнения
"‛‽‛№l№’2n{_"□׀⁵‘čž}
"...’ } протолкнуть индексы кодовых страниц символов [24, 19, 24, 28, 108, 28]
2n разбит на массив элементов длины 2 [[24, 19], [24, 28], [108, 28]]
{ для каждого подмассива
_ поместить все содержимое массива в стек [24, 19]
"..." нажать "\/\/\/" [24, 19, "\/\/\/"]
č разбит на массив символов [24, 19, ["\", "/", "\", "/", "\", "/"]]
ž заменить в материнском массиве координаты [например, 24, 19] с этими символами
«O⁶‛±0±‛¤3¤M¤’2n{_»P8‘ž
«...» протолкнуть индексы кодовых страниц символов [79, 6, 24, 12, 48, 12, 24, 27, 51, 27, 77, 27]
2n разбит на массив элементов длины 2 [[79, 6], [24, 12], [48, 12], [24, 27], [51, 27], [77, 27]]
{ для каждого подмассива (неявно закрытого)
_ поместить все содержимое массивов в стек [79, 6]
"Р8" нажать "_____________________________" [79, 6, "_____________________________"]
ž заменить в материнском массиве координаты [например, 79, 6] с этой строкой
Искусство периодической таблицы – Etsy.

