Imagina que tienes dos cajas B(x)y B(y), cada una con un bit desconocido: 0 o 1, y una máquina Fque puede radiografiarlas y producir una tercera caja para B(x^y)( xor ). FTambién puede calcular B(x*y)( y ). De hecho, esos son solo casos especiales de la operación única que la máquina puede realizar: producto interno de cada uno , indicado a F()continuación.
Para dos matrices de la misma longitud
[B(x[0]), B(x[1]), ..., B(x[n-1])]
[B(y[0]), B(y[1]), ..., B(y[n-1])]
producto interno se define como
B(x[0]*y[0] ^ x[1]*y[1] ^ ... ^ x[n-1]*y[n-1])
" Cada " medio F()puede procesar múltiples pares de x[], y[]de una sola vez. El x[]y y[]de un par debe ser de la misma longitud; x[]-s y y[]-s de diferentes pares no necesariamente lo necesitan.
Las cajas están representadas por identificadores enteros únicos.
Una implementación de producto interno cada uno en JavaScript podría verse como
var H=[0,1]; // hidden values, indexed by boxId
function B(x) { // seal x in a new box and return the box id
return H.push(x)-1;
}
function F(pairs) { // "inner product each"
return pairs.map(function (pair) {
var r = 0, x = pair[0], y = pair[1];
for (var i = 0; i < x.length; i++) r ^= H[x[i]] * H[y[i]];
return B(r);
})
}
(Por favor, traduzca lo anterior a su idioma de elección).
Se le dio acceso a una F()implementación según sea apropiado para su idioma (pero sin acceso Hao B()) y se le dieron dos matrices de identificadores de caja que constituyen las representaciones binarias de 16 bits de dos enteros ay bsu tarea es producir identificadores de caja para la representación binaria de 16 bits de a+b(descartar desbordamiento) con el número mínimo de F()llamadas.
La solución que llama F()la menor cantidad de veces gana. Los lazos se romperán contando el número total de x[],y[]pares con los que F()se llamó: menos es mejor. Si aún está empatado, el tamaño de su código (excluyendo la implementación de F()y sus ayudantes) determina el ganador en la forma tradicional de golf de código. Utilice su título como "MyLang, 123 llamadas, 456 pares, 789 bytes" para su respuesta.
Escribe una función o un programa completo. Entrada / salida / argumentos / resultado son matrices int en cualquier formato razonable. La representación binaria puede ser little-o big-endian: elija una.
Apéndice 1: para facilitar un poco el desafío, puede suponer que los cuadros con ID 0 y 1 contienen los valores 0 y 1. Esto le da constantes, útiles, por ejemplo, para la negación ( x^1"no"). Había maneras de evitar la falta de constantes, por supuesto, pero el resto del desafío es bastante difícil de todos modos, así que eliminemos esta distracción.
Apéndice 2: Para ganar la recompensa, debe hacer uno de los siguientes:
publique su puntaje (llamadas, pares, bytes) y su código antes de la fecha límite
publique su puntaje y un hash sha256 de su código antes de la fecha límite; luego publique el código real dentro de las 23 horas posteriores a la fecha límite
y=f(x)y dejaré xdepender y.
data Box = B Int deriving (Show); f :: [[[Box]]] -> [Box]Necesitaré más tiempo para descubrir cómo implementar f(Haskell fuerza las minúsculas aquí). Mañana lo intentaré.
Fsolo una vez. Eso seguramente sería hacer trampa, pero no estoy seguro de si sería una buena trampa o una mala trampa.