Чарівний шестикутник


17

Існує багато магічних квадратів, але є лише один нетривіальний магічний шестикутник, як пояснив доктор Джеймс Гріме , який полягає в наступному:

  18 17  3
 11  1  7 19
9  6  5  2 16
 14  8  4 12
  15 13 10

Як це робиться в шестикутнику, це найлегше записати як один рядок, просто прочитавши його рядок за рядком:

18 17 3 11 1 7 19 9 6 5 2 16 14 8 4 12 15 13 10

Звичайно, загалом є дванадцять таких представлень цього чарівного шестикутника, якщо рахувати обертання та відбиття. Наприклад, обертання вищевказаного шестикутника на 1/6 годинникової стрілки призведе до

9 11 18 14 6 1 17 15 8 5 7 3 13 4 2 19 10 12 16

@Okx попросив перерахувати решта варіантів. Решта списків:

15 14 9 13 8 6 11 10 4 5 1 18 12 2 7 17 16 19 3
3 17 18 19 7 1 11 16 2 5 6 9 12 4 8 14 10 13 15
18 11 9 17 1 6 14 3 7 5 8 15 19 2 4 13 16 12 10
9 14 15 11 6 8 13 18 1 5 4 10 17 7 2 12 3 19 16

плюс усі згадані списки перевернуті.

Виклик

Напишіть програму, яка виводить магічний шестикутник як список. Ви можете вибрати будь-яке з 12 відбитків / обертів шестикутника.

Додайте кілька слів про те, як працює ваше рішення.


2
Чи можна це зробити в шестикутнику? Якщо так, я покладу нагороду, щоб нагородити цю відповідь.
Містер Xcoder

1
@ Mr.Xcoder Все, що можна зробити в Гексагоні. Це, мабуть, просто не буде дуже цікаво, тому що я сумніваюся, що вам вдасться зберегти байти на простому друкуванні одного зі списків.
Мартін Ендер

Відповіді:



5

Желе , 11 байт

“JɼQⱮȦ>Ȯ’Œ?

Ниладичне посилання, що повертає список заданої орієнтації, відображається ліворуч праворуч.

Спробуйте в Інтернеті!

Як?

Просто та річ, для якої я зробив Œ?

“JɼQⱮȦ>Ȯ’Œ? - Niladic link: no arguments
“JɼQⱮȦ>Ȯ’   - base 250 number, 18473955480703453
         Œ? - shortest permutation of some set of natural numbers one through to some N
            -   inclusive which would lie at that index in a list of all permutations of
            -   those same natural numbers when sorted lexicographically.
            -
            -   - for example 7Œ?:
            -   - since 7 is greater than 3! and less than 4!+1, it references four items
            -   - the sorted order of permutations of 4 items is:
            -   - [[1,2,3,4],[1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[1,4,3,2],[2,1,3,4], ...]
            -   - so 7Œ? yields [2,1,3,4]

4

Pyth, 15 байт

.PC"A¡öò\x06\x11Ý"S19

(Контрольні символи замінено на \x06і\x11 для зручності перегляду.)

Спробуйте в Інтернеті

Як це працює

   "A¡öò\x06\x11Ý"      magic string
  C                     convert to number n using codepoints as base-256 digits
.P                S19   nth lexicographic permutation of [1, …, 19]

4

05AB1E , 14 байт

Обидва рішення генерують список [3,17,18,19,7,1,11,16,2,5,6,9,12,4,8,14,10,13,15]

19Lœ•δn2мׄÁ•è

Створює список всіх (відсортованих) перестановок діапазону [1...19]та індексує цей список із базовим числом стиснених базових 255 255.

Або 15 байт, які можна виконувати в Інтернеті

•áRвºñ*$vn+•20в

Декомпресує рядок основи 255 на число 10 основи та перетворює на список базових 20 цифр.

Спробуйте в Інтернеті!


3

SOGL , 15 байт

³←@uΙΒQH√y׀“L«─

Пояснення:

...“     push the number 4121998669867569415662783
    L«   push 20
      ─  convert 4121998669867569415662783 from base 10 to a base 20 number aka base 10 array 

3

Желе , 21 байт

18473955480703453œ?19

Я дуже хочу стиснути таку велику кількість, але не знаю як.

Спробуйте в Інтернеті!


18473955480703453на 1 байт коротше.
Емінья

Виправте мене, якщо я помиляюся, але хіба список індексів кодової сторінки не буде коротшим?
Нік Кліффорд

Стиснення RE: Це те саме число, яке я використовував у своєму. Все, що вам потрібно зробити, це перетворити число на біективну базу 250 за допомогою ḃ250та індексувати на кодовій сторінці (що тепер простіше, оскільки для цього є атом ніладіка ØJ).
Джонатан Аллан

@NickClifford це також буде 21 байт (19 індексів, відкрита та близька цитата).
Джонатан Аллан

@JonathanAllan Ах, зрозумів.
Нік Кліффорд



0

Математика, 37 байт

36^^md1o3apsqxqkfhq6~IntegerDigits~20

Пояснення (що може бути очевидним, оскільки Mathematica - це не мова кодового гольфу, але відповідно до вимоги ОП):

36  : Number base
^^  : Input a number in arbitrary base. See BaseForm documentation
md1o3apsqxqkfhq6 : the number in base 36
~IntegerDigits~20 : convert to base 20 as list of digits

Вихід:

{18,17,3,11,1,7,19,9,6,5,2,16,14,8,4,12,15,13,10}

1
Зверніть увагу , що kolmogorv-складність на насправді це про стиснення даних.
flawr

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.