Вызов:
Вам дана строка, содержащая только цифры. Ваша задача - вывести минимальное количество простых чисел, которые должны быть объединены для формирования строки. Если это невозможно, выведите 0
.
Тестовые случаи:
Вход -> Выход:
252 -> 3
235 -> 2
92 -> 0
31149 -> 2
Ответы:
JavaScript (ES6),
123121120 байтСохраненный байт благодаря @Neil!
объяснение
Принимает одну строку в качестве ввода. Из-за метода первичной проверки (рекурсивное разделение проб) наибольшее число, которое можно безопасно проверить
13840
. Некоторые числа выше этого не будут выполнены из-за превышения максимального размера стека вызовов. Это, однако, заканчивается мгновенно для каждого случая, с которым он может справиться.источник
i?(a=...)&&(b=...)&&a+b:0
наi&&(a=...)&&(b=...)&&a+b
?MATL ,
2624 байтаЭто займет несколько секунд для некоторых тестовых случаев.
Попробуйте онлайн!
объяснение
источник
Pyth, 16 байт
Тестирование
Объяснение, чтобы следовать.
источник
Pyth -
191716 байтТестовый пакет .
источник
Bash + coreutils,
169158149 байтМы считаем одинарным, выводя строку с одним
b
для каждого простого числа и заканчиваяa
в конце строки (так чтоprintf
есть токен для работы).Тест на простоту
factor $n | grep -q ': \w*$'
, который определяет, имеет ли число ровно один простой множитель.Мы рекурсивно разбиваем входные данные; если левая половина проста, мы фильтруем результаты правой половины, добавляя по одному к каждому значению. Возврат
a
для ввода нулевой длины завершает рекурсию.Наконец, мы берем все результаты и сортируем, чтобы найти самые короткие (игнорируя любые, которые не имеют,
a
чтобы указать успех); мы должны удалить два (для вставленногоa
и для новой строки), затем подсчитать количество символов, чтобы получить результат.тесты
Я добавил
111
в тесты, чтобы показать, что1
правильно считается не простым.источник
c
генерировать финал0
. Не так сильно увлекаюсь обильным stderr. Вы можете использовать (варианты) мой ответ в качестве основы для своего собственного, если хотите.Mathematica,
142135 байтКак видите, Mathematica не была создана для этой задачи. Принимает список цифр.
источник
And@@
вместоAllTrue
? Должно сэкономить 4-5 байт.Flatten[#,1]
=Join@@@#