JavaScript (ES6), 153 142 139 bytes
n=>([...n].map((c,i,[...a])=>[...''+1e9].map((u,j)=>s+=j+i&&j!=c?p((a.splice(i,1,j),a.join``)):0),s=0,p=q=>eval('for(k=q;q%--k;);k==1')),s)
Acepta entradas como una cadena. Comportamiento indefinido para entrada no válida, aunque debería terminar sin error en cualquier cadena que se me ocurra. Sin embargo, no necesariamente antes de la muerte por calor del universo, particularmente para cuerdas largas.
Manifestación
f=
n=>([...n].map((c,i,[...a])=>[...''+1e9].map((u,j)=>s+=j+i&&j!=c?p((a.splice(i,1,j),a.join``)):0),s=0,p=q=>eval('for(k=q;q%--k;);k==1')),s)
console.log([...''+1e19].map((_,i)=>f(i+1+'')).join())
i.onchange=()=>console.log(f(i.value))
<input id=i>
Mejoras
Ahorró 11 bytes refactorizando las reduce()llamadas en map()llamadas y copiando implícitamente la matriz aen el parámetro de la función, en lugar de hacerlo dentro del contexto de la splice()llamada.
Guardado 3 bytes gracias a @Neil sugerencia 's para convertir [...Array(10)]a [...''+1e9].
Código no minificado
input => (
[...input].map(
(char, decimal, [...charArray]) =>
[...'' + 1e9].map(
(unused, digit) => sum +=
digit + decimal && digit != char ?
prime(
(
charArray.splice(decimal, 1, digit)
, charArray.join``
)
) :
0
)
, sum = 0
, prime = test => eval('for(factor = test; test % --factor;); factor == 1')
)
, sum
)
Explicación
La función utiliza dos niveles map()para sumar la cantidad de permutaciones que pasan la prueba de primalidad, que se tomó prestada y modificada de esta respuesta .
(Respuesta original)
reduce((accumulator, currentValue, currentIndex, array) => aggregate, initialValue)
Entonces, por ejemplo, para calcular la suma de una matriz, pasaría un initialValuede 0y devolvería un aggregateigual a accumulator + currentValue. Modificando ligeramente este enfoque, calculamos el número de permutaciones que pasan la prueba de primalidad:
reduce(
(passedSoFar, currentDecimal, currentIndex, digitArray) =>
isValidPermutation() ?
passedSoFar + prime(getPermutation()) :
passedSoFar
, 0
)
Eso es esencialmente lo interno reduce(), que itera todas las permutaciones de la digitArrayal cambiar cada decimaluna a una específica permutatedDigit. Luego necesitamos un exterior reduce()para iterar todos los posibles permutatedDigitcon los que reemplazar cada uno decimal, lo cual es justo 0-9.
Anormalidades en la implementación
[...''+1e9].map((u,j)=>...era el camino más corto @Neil podía pensar en iterar un argumento 0a través 9. Sería preferible hacerlo u, pero uno es útil para cada elemento de la matriz, en este caso.
i+jen la condición ternaria, verifica que 0no haya una permutación posible del dígito inicial, según la especificación de desafío. j!=casegura que el original nno sea candidato para pasar la prueba de primalidad.
(a.splice(i,1,j),a.join``)Es un desastre. splice()reemplaza el dígito en decimal == icon el permutatedDigit == j, pero como splice()devuelve los elementos eliminados (en este caso, sería igual a [a[i]]) en lugar de la matriz modificada, debemos usar el operador de coma para pasar la matriz modificada aa la prueba de primalidad, pero no antes de join()iniciarla en una cadena de números.
Por último, eval()es guardar un byte ya que, en comparación con el enfoque más canónico, es más corto:
q=>eval('for(k=q;q%--k;);k==1')
q=>{for(k=q;q%--k;);return k==1}
La referencia a la prueba principal pse inicializa en un argumento no utilizado para la map()llamada.
npara el que es la salida0. Creo que esn = 200. También creo que vienen en racimos:200,202,204,206,208,320,322,...,328,510,...,518,620,...628,840,...,848, etc