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] с этой строкой