Если задано число от 1 до 24, выведите число поцелуев, насколько вам известно (некоторые числа будут иметь более одного приемлемого результата). Знание геометрии не является обязательным, поскольку все результаты перечислены ниже.
Со страницы Википедии о проблеме числа поцелуев :
число поцелуев определяется как число неперекрывающихся единичных сфер, которые могут быть расположены таким образом, чтобы они каждый касались другой данной единичной сферы
То есть, учитывая, что одна единичная сфера, сколько еще единичных сфер может коснуться ее, не перекрывая ни одну из них? Вопрос будет задан в N-мерном пространстве, где под сферой понимается N-1-мерная сфера.
Например:
- в двухмерном пространстве единичный круг может касаться 6 других единичных кругов.
- в трехмерном пространстве единичная сфера может касаться 12 других единичных сфер.
На странице Википедии перечислены значения от 1 до 24 пространств. Однако некоторые из них еще не известны точно, поэтому даны только нижняя и верхняя границы. Таблица воспроизводится здесь так, чтобы она оставалась фиксированной, независимо от будущего сужения диапазонов из-за новых доказательств. Решения оцениваются по этой фиксированной таблице, даже если страница Википедии будет изменена в будущем.
Таблица границ
Dimension Lower bound Upper bound
1 2 2
2 6 6
3 12 12
4 24 24
5 40 44
6 72 78
7 126 134
8 240 240
9 306 364
10 500 554
11 582 870
12 840 1357
13 1154 2069
14 1606 3183
15 2564 4866
16 4320 7355
17 5346 11072
18 7398 16572
19 10668 24812
20 17400 36764
21 27720 54584
22 49896 82340
23 93150 124416
24 196560 196560
вход
Размерность: целое число от 1 до 24 (включительно).
Здесь «целое число» указывает, что входные данные не будут иметь дробной части - это может быть 2
или 3
никогда 2.5
. Решение может по-прежнему принимать ввод в виде числа с плавающей запятой или, например, строки.
Выход
Число в соответствующем диапазоне, от нижнего предела до верхнего предела для этого входа (включительно).
Вывод должен быть детерминированным (всегда одинаковым для одного и того же ввода).
Вывод должен быть целым числом. Например, для ввода 5
возможных действительных выходов 40
, 41
, 42
, 43
, 44
. Обратите внимание, что это ограничение по значению, а не по типу. Допустимо возвращать число с плавающей запятой, если оно имеет нулевую дробную часть. Например, 41.5
не будет действительным, но 41.0
будет действительным.
счет
Это код-гольф . Ваша оценка - это количество байтов в вашем коде. Для каждого языка победителем является решение с самым низким баллом.
источник
Ответы:
Юлия 0.6 , 52 байта
Попробуйте онлайн!
Как?
Машинное обучение! (Вроде. Может быть. Не совсем. )
c
ceil
источник
MLBase
!!! Дж / к, линии вокруг ML размыты как всегда, но это, вероятно , слишком просто, чтобы заслужить машинное обучение на этикетке. Опять же, всегда полезно вставить модное слово в!x86,
62595350 байтМое решение использует таблицу поиска байтов и сдвиг на 2 (без вычислений FP). Размеры с 9 по 23 обеспечивают достаточную свободу для переключения. Ввод
eax
и вывод вecx
.-3 по обмену
eax
иecx
такcmp $imm, %al
как короче чемcmp $imm, %cl
.-4 не обрабатывая случай N = 24 отдельно, а применяя корректировку ко всем 1024 случаям.
-2 не возвращаясь рано (глупо)
-3 с использованием таблицы в качестве смещения и
movzbl
вместо обнуления сxor
Hexdump (таблица
.text
вместо.data
)источник
.rodata
, а не в.data
любом случае. (Или на винде, видимо.rdata
)..rodata
Раздел компонуется как часть текстового сегмента.shl
, особенно когда ваш номер не подписан (выmovzbl
загружали его, а неmovsbl
). Конечно,sal
это просто другое имя для того же кода операции. Издает gccsal
, но это довольно редко можно увидеть в рукописном коде.JavaScript (ES6), 60 байт
Попробуйте онлайн!
Как?
Все остальные термины вычисляются рекурсивно с использованием:
приводя к следующим соотношениям:
Окончательный результат в конечном итоге сорван и возвращен.
Сводка результатов
Приближенные результаты приведены с двумя десятичными знаками.
источник
Желе ,
2926 байтПопробуйте онлайн!
Как это работает
источник
JavaScript (Node.js) ,
12099 байтСбросил 21 байт. Значительное сокращение благодаря предложению tsh добавить дыру в начало массива (сохраняя два байта, идущих от
n-1
иn
, и нацеливаясь на круглые числа в пределах нижней и верхней границ, таким образом уменьшая их от записи с фиксированной точкой, как1154
до экспоненциальной записи нравится2e3
.Опять же, моя первоначальная цель состояла в том, чтобы показать, насколько легким будет «тупой» путь (например, без использования какой-либо реальной математики, как ответ Арно. Это впечатляет, что все еще есть место, чтобы уменьшить его без каких-либо преобразований или вычислений).
Попробуйте онлайн!
В два раза длиннее ответа Арно, 0 - сложность.
JavaScript (Node.js) ,
129128 байтов(-1 байт благодаря предложению использовать битовый сдвиг)
Попробуйте онлайн!
Чтобы удовлетворить требования интереса, я украл логику из ответа x86 и построил массив из этого. Делая это на 9 байт длиннее. Но немного интереснее.
источник
f=
, изменить(x)
наx
, добавить отверстие и изменитьx-1
наx
. TIO ; и, возможно, округлите их до 99 байтовРунический, 173 байта
(Обратите внимание, что нижний правый угол должен учитываться для байтов: они неявно заполнены пробелами.)
Исполняющему TIO требуется обновление, на которое опирается этот ответ (и я исправляю некоторые другие дыры перед тем, как попросить Денниса восстановить). Но добавьте значение (обязательно добавьте пробелы в строках 2 и 3, если в качестве значения в первой строке используется более одного символа). Вот самый простой способ записать необходимые значения:
Попробуйте онлайн!
Функционально это порт ответа Джулии Сундара (но у Руника нет команды для добавления
e
в стек (или, действительно, любого десятичного значения), поэтому необходимо было приближение). Аппроксимация дляe
входов менее 8 является более точной, поскольку потеря точности привела к значениям, лежащим за пределами допустимого диапазона выходных данных (например,7
приведет к 125).Ceil()
было достигнуто путем преобразования в символ, а затем обратно в число (это не удалось для исключительно больших значений, поэтому при 40k я делил его на 100, делаю преобразование в и обратно, затем умножаю на 100).Вероятно, есть некоторая возможность упростить расположение (например, запустить точку входа вертикально, снизу или найти способ сжать аппроксимации для
e
), но я счастлив, что могу просто выполнить вычисление.161 байт.
Обновление переводчика:
Благодаря чтению ввода с фиксацией толчка Runic теперь имеет несколько математических функций и возможность разбирать строки как двойные. Это значительно упростит этот ответ, но я оставлю его таким, чтобы оно показывало усилия, которые я вложил в него (я добавил функции Math с одним аргументом и разбор строк вскоре после публикации: я уже включил Sin / Cos / Tan мой список дел, но он не рассматривал Exp, Abs, Log и т. д., и в нем заканчивались символы). Обновление TIO должно произойти в течение следующих 24-48 часов, в зависимости от того, когда его увидит Деннис.
212,+16,+1c2*,+1cX,+
сократил бы до ->1'eA
с этим обновлением интерпретатора.A
выскакивает символ и значение и выполняет математическую операцию над этим значением на основе извлеченного символа (e
в этом случае возвращаетExp()
иExp(1)
возвращает e ).источник