Палиндромные простые проблемы довольно распространены, но это не тот вопрос, о котором идет речь. В этом вызове число не обязательно должно быть палиндромом, а его основными факторами.
задача
Ваш код должен принимать одно положительное целое число в качестве входных данных. Затем проверьте, являются ли какие-либо перестановки простых факторов этого целого числа палиндромными при конкатенации. Если это так, выведите один из них (список факторов, а не объединенную строку). Иначе вы должны вывести-1
.
Это код-гольф , поэтому выигрывает самый короткий код в байтах !
Тестовые случаи
11 -> [11]
4 -> [2, 2]
39 -> [3, 13]
6 -> -1
1207 -> [17, 71]
393 -> -1
2352 -> [2, 2, 7, 3, 7, 2, 2]
code-golf
palindrome
factoring
Maltysen
источник
источник
-1
быть возвращены другие отличимые значения ? В Perl 6 Я думаю о томNil
,Fail
или другие неопределенные значения. Также может ли выход быть любым позиционным значением?1
или-1
?Ответы:
05AB1E , 7 байтов
Попробуйте онлайн!
Объяснение:
(
.Δ
удобно по умолчанию -1, поэтому дополнительная работа не требуется)источник
Pyth, 14 байт
-2 байта @FryAmTheEggman
Объяснение:
Спасибо @FryAmTheEggman за напоминание о
I
. Я не думаю, что использовал это раньше.Тестирование
источник
jk
так же, какs`M
CJam - 17 байтов
Спасибо Мартину Бюттнеру за то, что он сэкономил мне 10 байтов!
Я впервые пишу в CJam! Объяснение:
источник
W%
. Вы также можете использовать=
блок, чтобы получить первую палиндромную простую факторизацию. Это составляет 18 байт:Wrimfe!{s_W%=}=p];
... вы можете сохранить еще один, завершив с ошибкой (поскольку вывод ошибки идет в STDERR):Wrimfe!{s_W%=}=p;
Рубин, 89 + 7 = 96
102 + 7 = 109+7 за
-rprime
флаг.Вздох , некоторые встроенные в Ruby имена имеют такие длинные имена ... по крайней мере, это делает код довольно понятным.
flat_map
Бит , потому чтоprime_division
возвращается отл.[[2, 2], [3, 1]]
для ввода12
(который представляет ).2231
Спасибо @histocrat за 13 байтов!
источник
Юлия,
132122 байтаЭто лямбда-функция, которая принимает целое число и возвращает либо массив, либо -1. Чтобы вызвать его, присвойте его переменной.
Ungolfed:
Сохранено 10 байтов благодаря Glen O!
источник
foldl
вместоreduce
(они делают то же самое, ноfoldl
имеют определенный порядок и на один байт короче). Вместо этого используйте прямое сравнение с пустой структуройisempty
(я не уверен на 100%, что это за типx
, но, если это, например, набор, используйтеx==[]
). И использовать,(q=join(p))
а затем простоq
в фильтре, чтобы сохранить еще два байта.x
это массив, а неfirst(x)
просто использоватьx[]
.==[]
и это давало мне ошибки, но я попробовал снова сейчас, и это работает. Должно быть, я что-то испортил раньше. ¯ \ _ (ツ) _ / ¯ Единственное предложение, которое я не смог использовать, - это избавиться от негоfirst
; в этом случае я должен использовать,first
потому чтоx
это итератор / коллекция / что-то, что неgetindex
определено.Брахилог , 10 байт
Попробуйте онлайн!
Первоначально я ожидал, что необходимость вывода
-1
вместо того, чтобы позволить потерпеть неудачу, будет иметь довольно большую стоимость в байтах, но поскольку вывод в случае успеха не может быть объединен, он стоит только два байта, необходимых для записи_1
(если мы удалили те, что оставило бы выход безусловной недобросовестный0
, и если мы дополнительно изменили∨
на∧
предикат потерпит неудачу , а), потому что нам нужно разорвать объединение с неявным выходом либо образом. (Если бы конкатенация была выходом для успеха, но-1
все равно была выходом для неудачи, мы бы имелиḋpc.↔|∧_1
или выводятся, этоḋpc.↔.∨_1
. В самом коротком случае, когда выход объединяется, и предикат может потерпеть неудачу, все это только пять байтов:ḋpc.↔
, Хотя фактические факторы не выводятся, это создает ощущение проблемы решения ...)источник
Haskell, 122 байта
Пример использования:
f 39
->[3,13]
.Очевидный подход грубой силы. Итерирование по всем перестановкам простых факторов и проверка на палиндромы. Выберите первый. Если их нет, список пуст и добавляется добавленный
[-1]
.источник
Perl 6 , 100 байт
Использование:
Около половины этого (53 байта) занято основным кодом факторизации.
Если бы существовал
prime-factorize
метод, все могло бы быть значительно короче.источник
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Желе , 16 байт
Дольше, чем я ожидал, как по количеству байтов, так и по времени, которое потребовалось для записи.
Попробуйте онлайн!
Объяснение:
источник
Japt
-F-1
, 9 байтПопытайся
источник
Japt, 18 байт
Почти такой же короткий, как CJam ...
Попробуйте онлайн!
Как это устроено
источник
JavaScript (ES6),
256244208187 байтСохранено 36 байтов благодаря @Neil
Определяет анонимную функцию; например,
F=
использовать его. Это на самом деле довольно быстро при вводе 2352, всего около 150 миллисекунд, чтобы закончить на моем компьютере.источник
x=>eval("for(a=[],i=2;x>1;x%i?i++:(a.push(i),x/=i));p=[],f=(z,t=[])=>z.length?z.map((u,i)=>f([...z.slice(0,i),...z.slice(i+1)],[...t,u])):(y=t.join``)==[...y].reverse().join``&&p.push(t),f(a),p[0]||-1")
APL (NARS), 169 символов, 338 байтов
G - это функция поиска перестановок, а f - функция этого упражнения; тестовое задание:
источник