Definición
Dada una matriz de enteros no negativos y un entero no negativo , definimos como la función de "corte" que elimina todas las filas y todas las columnas en que contienen .
Ejemplo:
Tu tarea
Dada y una suma de destino , su tarea es encontrar todos los valores posibles de tal que la suma de los elementos restantes en es igual a .
Ejemplo:
Dada la matriz anterior y :
- es una solución, porque y
- es la única otra solución posible: y
Entonces el resultado esperado sería .
Aclaraciones y reglas.
- La entrada está garantizada para admitir al menos una solución.
- La suma de los elementos de la matriz original se garantiza que sea mayor que .
- Puede suponer . Significa que una matriz vacía nunca conducirá a una solución.
- Los valores de pueden imprimirse o devolverse en cualquier orden y en cualquier formato razonable y sin ambigüedades.
- Se le permite no deduplicar la salida (por ejemplo, o se consideran respuestas válidas para el ejemplo anterior).[ 1 , 5 , 1 , 5 ]
- Este es el código de golf .
Casos de prueba
M = [[6,1,5],[1,2,8],[9,8,5],[6,0,4]]
S = 9
Solution = {1,5}
M = [[7,2],[1,4]]
S = 7
Solution = {4}
M = [[12,5,2,3],[17,11,18,8]]
S = 43
Solution = {5}
M = [[7,12],[10,5],[0,13]]
S = 17
Solution = {0,13}
M = [[1,1,0,1],[2,0,0,2],[2,0,1,0]]
S = 1
Solution = {2}
M = [[57,8,33,84],[84,78,19,14],[43,14,81,30]]
S = 236
Solution = {19,43,57}
M = [[2,5,8],[3,5,8],[10,8,5],[10,6,7],[10,6,4]]
S = 49
Solution = {2,3,4,7}
M = [[5,4,0],[3,0,4],[8,2,2]]
S = 8
Solution = {0,2,3,4,5,8}
code-golf
array-manipulation
matrix
Arnauld
fuente
fuente
[[1,5],[1],[5],[]]
para el primer caso de prueba) sería un medio válido de salida?Respuestas:
K (ngn / k) , 39 bytes
Pruébalo en línea!
gracias @ Adám por esta explicación :
{
...}
función,x
es M yy
es S,/x
aplanar M (estos son los k candidatos)a:
asignar aa
x{
...}/:
aplique la siguiente función a cada uno mientras usa M como argumento izquierdo fijo (x
):x=y
Matriz booleana que indica dónde los elementos de M son iguales al candidato k actual~
negar esob:
asignar eso ab
&/
Reducción AND (encuentra columnas sin esa k )(
...)&\:
Y eso con cada uno de los siguientes:&/'b
Y reducción de cada uno (encuentra filas sin esa k )x*
multiplicar M por eso+//
gran sumay=
lista de booleanos que indica dónde S es igual a esas sumas&
índices de Verdadesa@
use eso para indexar en los elementos (los k candidatos)fuente
APL (Dyalog Unicode) ,
353328 bytes SBCS-7 gracias a ngn.
Anónimo infijo lambda. Toma S como argumento izquierdo y M como argumento derecho.
Pruébalo en línea!
{
...}
"dfn",⍺
y⍵
son argumentos izquierdo y derecho ( S y M ) respectivamente:⍵[
…]
Indice M con las siguientes coordenadas:⊂⍵
encierra M para tratarlo como un elemento único⍵=
compare cada elemento (es decir, k candidato) de M con toda esa M(
…)¨
Aplique la siguiente función tácita a cada uno:∧⌿
reducción Y vertical (encuentra columnas sin ese k candidato)…
∘.∧
Producto booleano cartesiano con:∧/
reducción horizontal Y (encuentra filas sin ese k candidato)⍵×
multiplica M con esa máscara+/∘,
suma la matriz aplanada⍺=
Booleano que indica dónde S es igual a esas sumas⍸
índices donde eso es ciertofuente
{M[⍸⍺={+/,(∧⌿d)/M⌿⍨∧/d←M≠⍵}¨M←⍵]}
M
cuando aún no se ha creado?⍵
como⍺
en el dfn interior es igualmente confuso para mí{⍵[⍸⍺=+/¨(,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}
R ,
7873 bytesPruébalo en línea!
No ordena ni deduplica la salida.
Crédito a J.Doe y Giuseppe por -5 bytes.
fuente
Jalea ,
2019171514 bytesEste es un enlace monádico que toma M como argumento y lee S desde STDIN.
Pruébalo en línea!
Cómo funciona
fuente
Haskell ,
88868477 bytesVerifique todos los casos de prueba .
Explicación
fuente
Pyth ,
27 23 22 2120 bytes¡Banco de pruebas!
No deduplica.
¿Cómo funciona?
fuente
Python 2 ,
114108bytesPruébalo en línea!
fuente
Perl 6 ,
8074 bytesPruébalo en línea!
Explicación
fuente
05AB1E , 21 bytes
Pruébalo en línea!
Solo después de escribir esta respuesta, vi la de Kevin . Creo que esto es sustancialmente diferente, así que lo publico por separado. Mi intuición dice que el conteo de bytes óptimo es de alrededor de 18, así que tendré que volver a visitar esto y ver qué más puedo hacer. Con el código actual, es imposible escribir un conjunto de pruebas, pero yo mismo he verificado todos los casos de prueba y los resultados son correctos.
Algoritmo de Recorte
~
+
Después de lo cual se calcula la suma de la matriz resultante.
fuente
[[1,1,0,1],[2,0,0,2],[2,0,1,0]]
que me atormentó por el número1
(que elimina cada columna ...) De hecho, tenía un poco menos de 20 en mi cabeza, así como la posibilidad. Lástima que apenas haya incorporados matrices, a pesar de los productos agregados recientemente. En cuanto al1|2
(1 2~
en 05AB1E Synthax) que resulta en 3, esto se debe a quelogical OR
actúa como unbinary OR
cuando otros números que no están0
/1
están involucrados (creo / asumo).+
Supongo que puede reemplazarse de todos modos, así que espero que no haya problemas con él :)05AB1E (heredado) ,
2726 bytesNo clasifica ni descalifica el resultado.
Solo funciona en el legado (por ahora), porque la suma de cada uno parece estar haciendo algunas cosas extrañas cuando parte de las listas internas son enteros y otras son listas ...
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Jalea , 22 bytes
Pruébalo en línea!
-6 bytes usando el enfoque general de la respuesta 05AB1E del Sr. Xcoder.
fuente
Carbón , 33 bytes
Pruébalo en línea! El enlace es a una versión detallada del código e incluye deduplicación. Explicación:
Acoplar la primera matriz de entrada
q
en la lista predefinidau
.Para cada elemento de la lista, sume la matriz, pero si la fila contiene el elemento, use en
0
lugar de su suma, y al sumar filas que no contengan el elemento, si la columna contiene el elemento, use en0
lugar del valor de la columna . Esto es un poco más golfístico que filtrar los elementos, ya que el carbón no puede sumar una lista vacía.fuente
Limpio , 92 bytes
Pruébalo en línea!
Explicado:
fuente
MATLAB - 80 bytes
( Corregido y ) Compactado:
Y en una versión completamente desarrollada:
Gracias a los comentarios para resaltar mi error inicial. Tenga en cuenta que esta versión no deduplica la salida.
Es posible deduplicar la salida con 5 bytes más:
fuente