Вступление:
Я коллекционер извилистых головоломок. Здесь вы можете увидеть мою текущую коллекцию из ± 300 головоломок.
Я думаю, что все знают обычный кубик Рубика (куб 3x3x3), который является кубом NxNxN . Существуют также кубоиды (пазлы в форме блоков), которые бывают разных форм, возможно, лучше объясненные SuperAntionioVivaldi здесь :
- Обычные кубиноиды домино (например, 2x2x3 ; 2x3x3 ; 3x3x4 ; и т. Д.) - они бывают в форме NxNx (N + O) или Nx (N + O) x (N + O) , которые имеют два нечетных измерения и четный или два четных и нечетных.
- Кубоиды Shapeshifter (например, 2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ; и т. Д.) - они имеют форму NxNx (N + P) , которая, как следует из названия, изменяет форму (во всех направлениях). Все три измерения являются нечетными или четными.
- Floppy Cuboids (например, 1x3x3 ; 2x4x4 и т. Д.). Они бывают в форме Nx (N + P) x (N + P) , которые почти такие же, как Shapeshifters, но с так называемыми Floppy Parities.
- Кирпичные кубоиды (например, 2x3x4 ; 3x4x5 ; 2x3x5 и т. Д.) - они имеют форму Nx (N + O) x (N + P), которые, как и обычные кубиноиды домино, имеют два нечетных измерения и четное, или два четных и нечетных; но не имеют одинаковых размеров.
- Окончательный Оборотни (такие как 2x4x6 ; 3x5x7; 2x4x10; и т.д.) - Они приходят в виде Nx (N + O) х (N + R) , и Shapeshift в любом направлении. Все три измерения являются нечетными или четными; но не имеют одинаковых размеров.
Вызов:
Входные данные:
Целое положительное число n со следующим ограничением: 8 <= n <= 125.
n может быть однозначно декодировано как произведение трех значений (измерений), каждое из которых составляет от 2 до 5 включительно.
Причина, по которой я ограничил это значение 2-5, состоит в том, чтобы предотвратить дублирование входов (например, 1x2x4 = 8
и 2x2x2 = 8
), даже несмотря на то, что существует много кубоидов более низкого / более высокого порядка . Это также означает, что для Ultimate Shapeshifters нет тестовых случаев.
Выход / Тестовые случаи:
Это все случаи, которые ваша программа / функция должна поддерживать, начиная от длин ребер 2 до 5 в каждой возможной трехмерной конфигурации:
Input Cuboid/Cube Type/Output
8 2x2x2 Cube
12 2x2x3 Regular Domino Cuboid
16 2x2x4 Shapeshifter Cuboid
20 2x2x5 Regular Domino Cuboid
18 2x3x3 Regular Domino Cuboid
24 2x3x4 Brick Cuboid
30 2x3x5 Brick Cuboid
32 2x4x4 Floppy Cuboid
40 2x4x5 Brick Cuboid
50 2x5x5 Regular Domino Cuboid
27 3x3x3 Cube
36 3x3x4 Regular Domino Cuboid
45 3x3x5 Shapeshifter Cuboid
48 3x4x4 Regular Domino Cuboid
60 3x4x5 Brick Cuboid
75 3x5x5 Floppy Cuboid
64 4x4x4 Cube
80 4x4x5 Regular Domino Cuboid
100 4x5x5 Regular Domino Cuboid
125 5x5x5 Cube
Правила соревнований:
- Любые входные данные, не входящие в куб / не кубоидные, в диапазоне 8-125 должны приводить к выводу «none».
- Формат вывода - ваш собственный выбор. Я думаю, что наиболее разумными являются целые числа, как
0
= 'нет';1
= Куб;2
= Обычный Домино Кубоид;3
= Shapeshifter Cuboid;4
= Гибкий диск Cuboid;5
= Кирпичный кубоид. Любой другой выходной формат также подойдет, если вы укажете, какой вы использовали.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены. ( ПРИМЕЧАНИЕ. Поскольку я не знаю, существует ли разумная формула для преобразования ввода-вывода, разрешено жестко кодировать ответы на основе ввода. )
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
источник
24
), поэтому я не знаю, что вы хотите отсортировать по этому поводу?Ответы:
05AB1E ,
2621 байтNone: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5
Попробуйте онлайн! или как тестовый набор
объяснение
Единственное место, где я вижу, что мы могли бы сохранить байты здесь, это найти лучший способ генерации числа 123224454212324512210 .
Это только 1 от простого числа, поэтому одним из возможных вариантов сохранения было бы найти индекс этого простого числа и сгенерировать индекс менее чем в 9 байтов.
Я не знаю, насколько хорошо функция pi работает для 21-значных простых чисел, но это может быть возможно.
источник
k
существует? !! ??!?!?!?!JavaScript (ES6),
979286 байтЭта функция сначала проверяет правильность ввода, а затем выбирает правильное значение из справочной таблицы.
Удивительно, но самая длинная часть - проверка достоверности ( n имеет вид x * y * z с x , y и z в [2,3,4,5] ?). Должен быть более короткий способ сделать это, но я не мог понять это до сих пор.
Возвращает символ:
Тестовое задание
Показать фрагмент кода
источник
Рубин,
106 9896 байтПотому что, почему бы и нет, жесткое кодирование.
Как указано, 0 = «нет»; 1 = куб; 2 = Обычный Домино Кубоид; 3 = кубоид Shaifhifter; 4 = гибкий диск; 5 = кирпичный кубоид
источник
Perl 6 ,
6958 байтИспользует целочисленный формат вывода, предложенный в описании задачи, за исключением того, что он возвращает неинициализированное значение
(Any)
вместо0
в случае входных данных, которые не образуют действительный куб / кубоид.Как это устроено
Создает список
8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125
.Создает список
1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1
(из литерала base-32).Создает Hash (ассоциативную карту) с первым списком в качестве ключей и вторым списком в качестве значений.
Индексирует хеш с введенным номером.
источник
Пакетный, 163 байта
Использует предложенный формат вывода. Объяснение: Основная идея состоит в том, чтобы перебрать список кубов, как определено в вопросе. Для каждого куба мы вычисляем, чтобы увидеть, является ли его объем входным целым числом, и, если это так, вычисляем тип куба из справочной таблицы.
Исходная таблица поиска представляла собой строку букв, но выполнять операции со строками в
for
цикле довольно сложно, поэтому я переключился на цифры, которые можно извлечь арифметически. К сожалению, пакетная обработка ограничена 32-разрядными целыми числами, поэтому я не смог уместить все цифры в одну переменную (даже в базе 5 вы можете получить только 13 цифр), поэтому вместо этого я разделил переменную на две части, закодированные в базе 6 для удобства.29948521
находится2545522321
в базе 6, которая кодирует 10 самых маленьких кубоидов в обратном порядке; когда у него заканчиваются цифры, мы добавляем,14081593
который находится1221452321
в базе 6, кодирующей 10 самых больших кубоидов.источник