El desafío es escribir codegolf para el permanente de una matriz .
El permanente de una matriz n-by- = ( ) se define comonAai,j
Aquí S_nrepresenta el conjunto de todas las permutaciones de [1, n].
Como ejemplo (de la wiki):
Su código puede recibir información como lo desee y proporcionar resultados en cualquier formato razonable, pero incluya en su respuesta un ejemplo completo que incluya instrucciones claras sobre cómo proporcionar información a su código. Para hacer el desafío un poco más interesante, la matriz puede incluir números complejos.
La matriz de entrada siempre es cuadrada y será como máximo de 6 por 6. También deberá poder manejar la matriz vacía que tiene permanente 1. No es necesario poder manejar la matriz vacía (estaba causando demasiados problemas).
Ejemplos
Entrada:
[[ 0.36697048+0.02459455j, 0.81148991+0.75269667j, 0.62568185+0.95950937j],
[ 0.67985923+0.11419187j, 0.50131790+0.13067928j, 0.10330161+0.83532727j],
[ 0.71085747+0.86199765j, 0.68902048+0.50886302j, 0.52729463+0.5974208j ]]
Salida:
-1.7421952844303492+2.2476833142265793j
Entrada:
[[ 0.83702504+0.05801749j, 0.03912260+0.25027115j, 0.95507961+0.59109069j],
[ 0.07330546+0.8569899j , 0.47845015+0.45077079j, 0.80317410+0.5820795j ],
[ 0.38306447+0.76444045j, 0.54067092+0.90206306j, 0.40001631+0.43832931j]]
Salida:
-1.972117936608412+1.6081325306004794j
Entrada:
[[ 0.61164611+0.42958732j, 0.69306292+0.94856925j,
0.43860930+0.04104116j, 0.92232338+0.32857505j,
0.40964318+0.59225476j, 0.69109847+0.32620144j],
[ 0.57851263+0.69458731j, 0.21746623+0.38778693j,
0.83334638+0.25805241j, 0.64855830+0.36137045j,
0.65890840+0.06557287j, 0.25411493+0.37812483j],
[ 0.11114704+0.44631335j, 0.32068031+0.52023283j,
0.43360984+0.87037973j, 0.42752697+0.75343656j,
0.23848512+0.96334466j, 0.28165516+0.13257001j],
[ 0.66386467+0.21002292j, 0.11781236+0.00967473j,
0.75491373+0.44880959j, 0.66749636+0.90076845j,
0.00939420+0.06484633j, 0.21316223+0.4538433j ],
[ 0.40175631+0.89340763j, 0.26849809+0.82500173j,
0.84124107+0.23030393j, 0.62689175+0.61870543j,
0.92430209+0.11914288j, 0.90655023+0.63096257j],
[ 0.85830178+0.16441943j, 0.91144755+0.49943801j,
0.51010550+0.60590678j, 0.51439995+0.37354955j,
0.79986742+0.87723514j, 0.43231194+0.54571625j]]
Salida:
-22.92354821347135-90.74278997288275j
No puede utilizar ninguna función preexistente para calcular el permanente.



[[]](tiene una fila, la matriz vacía no) o[](no tiene profundidad 2, las matrices sí) en forma de lista?[[]].Respuestas:
J, 5 bytes
J no ofrece incorporaciones para lo permanente o determinante, sino que ofrece una conjunción
u . v yque se expande recursivamente a loylargo de los menores y calcula diádicau . ventre los cofactores y la salida de la llamada recursiva a los menores. Las opciones deuyvpueden variar. Por ejemplo, usaru =: -/yv =: *es-/ .*cuál es el determinante. Las opciones pueden incluso por%/ .!dóndeu=: %/, reducir por división, yv =: !cuál es el coeficiente binomial. No estoy seguro de lo que significa esa salida, pero eres libre de elegir tus verbos.Una implementación alternativa para 47 bytes usando el mismo método en mi respuesta de Mathematica .
Esto simula un polinomio con n variables creando un polinomio con una variable elevada a potencias de 2. Esto se mantiene como una lista de coeficientes y la multiplicación polinomial se realiza usando convolución, y el índice en 2 n contendrá el resultado.
Otra implementación para 31 bytes es
que es una versión ligeramente golfizada basada en la expansión de Laplace tomada del ensayo J sobre determinantes .
Uso
fuente
Haskell, 59 bytes
Esto hace un desarrollo similar a Laplace a lo largo de la primera columna, y usa que el orden de las filas no importa. Funciona para cualquier tipo numérico.
La entrada es como una lista de listas:
fuente
Jalea ,
109 bytesPruébalo en línea!
Cómo funciona
fuente
Python 2, 75 bytes
Parece torpe ... debería ser vencible.
fuente
05AB1E ,
191413 bytesPruébalo en línea!
Explicación
fuente
œ€Å\PO.Python 2, 139 bytes
repl.it
Implementa el algoritmo ingenuo que sigue ciegamente la definición.
fuente
MATL,
1714 bytesPruébalo en línea
Explicación
fuente
Rubí,
7463 bytesUna traducción directa de la fórmula. Varios bytes guardados gracias a ezrast.
Explicación
fuente
reduceen realidad daña el recuento de bytes en comparación con la agregación manual:->a{m=0;a.permutation{|b|n=1;a.size.times{|i|n*=b[i][i]};m+=n};m}timescircuito también.Ruby 2.4.0,
5961 bytesExpansión recursiva de Laplace:
Menos golfizado:
Ruby 2.4 no se lanza oficialmente. En versiones anteriores,
.sumdeberá ser reemplazado por.reduce(:+), agregando 7 bytes.fuente
Mathematica, 54 bytes
Ahora que las matrices vacías ya no se consideran, esta solución es válida. Se origina en la página MathWorld sobre permanentes .
fuente
JavaScript (ES6), 82 bytes
También funciona con la matriz vacía, por supuesto.
fuente
Julia 0.4 , 73 bytes
En las versiones más recientes de julia, puede omitir
[]las comprensiones, pero necesitausing Combinatoricslapermutationsfunción. Funciona con todos los tipos de números en Julia, incluidosComplex.res unUnitRangeobjeto definido como un argumento de función predeterminado, que puede depender de argumentos de función anteriores.Pruébalo en línea!
fuente