İki kutunuz olduğunu B(x)ve B(y)her birinin bilinmeyen bir biti olduğunu düşünün - 0 veya 1 ve Fbunları X-ışınıyla B(x^y)( xor ) için üçüncü bir kutu üretebilen bir makine . Fayrıca hesaplayabilir B(x*y)( ve ). Aslında, bunlar sadece makinenin gerçekleştirebileceği tek işlemin özel durumlarıdır - her biriF() aşağıda belirtilen iç ürün .
Aynı uzunlukta iki dizi için
[B(x[0]), B(x[1]), ..., B(x[n-1])]
[B(y[0]), B(y[1]), ..., B(y[n-1])]
İç çarpım olarak tanımlanır
B(x[0]*y[0] ^ x[1]*y[1] ^ ... ^ x[n-1]*y[n-1])
" Her biri " , tek seferde F()birden fazla çiftini işleyebilir . Ve bir çift aynı uzunlukta olması gerekir; -s ve -s farklı çiftlerden mutlaka gerekmez.x[]y[]x[]y[]x[]y[]
Kutular benzersiz tamsayı kimlikleriyle temsil edilir.
Her biri JavaScript'te dahili ürün uygulaması gibi görünebilir
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);
})
}
(Lütfen yukarıdakileri tercih ettiğiniz dile çevirin.)
Dilinize F()uygun bir uygulamaya erişim verilir (ancak erişiminiz yoktur Hveya yoktur B()) ve iki tamsayının 16 bitlik ikili gösterimlerini oluşturan iki kutu kimliği dizisi verilir ave bgöreviniz 16 bitlik ikili gösterim için kutu kimlikleri üretmektir. ve a+ben az sayıda (atma taşma) F()çağrıları.
En F()az kez çağıran çözüm kazanır. Bağlanan toplam x[],y[]çift sayısı sayılarak bozulacaktır F()- daha azı daha iyidir. Hala bağlıysa, kodunuzun boyutu (uygulaması F()ve yardımcıları hariç ) kazananı geleneksel kod golf yönteminde belirler. Lütfen cevabınız için "MyLang, 123 çağrı, 456 çift, 789 bayt" gibi bir başlık kullanın.
Bir işlev veya tam bir program yazın. Girdi / çıktı / bağımsız değişkenler / sonuç, herhangi bir makul biçimde int dizileridir. İkili gösterim küçük veya büyük-endian olabilir - birini seçin.
Ek 1: Meydan okumayı biraz kolaylaştırmak için, 0 ve 1 numaralı kimliğe sahip kutuların 0 ve 1 değerlerini içerdiğini varsayabilirsiniz x^1. Sabitlerin eksikliği etrafında elbette yollar vardı, ama meydan okumaların geri kalanı zaten yeterince zor, bu yüzden bu dikkati dağıtalım.
Ek 2: Ödül kazanmak için aşağıdakilerden birini yapmanız gerekir:
puanınızı (çağrılar, çiftler, baytlar) ve kodunuzu son tarihten önce yayınlayın
puanınızı ve son başvuru tarihinden önce kodunuzun bir sha256 karmasını gönderin; ardından gerçek kodu son tarihten sonraki 23 saat içinde gönderin
y=f(x)ve xbağımlı olalım y.
data Box = B Int deriving (Show); f :: [[[Box]]] -> [Box]Nasıl uygulanacağını anlamak için daha fazla zamana ihtiyacım olacak f(Haskell burada küçük harf) - Yarın bir deneyeceğim.
Fyalnızca bir kez arayabilirdim . Bu kesinlikle hile olur, ama iyi hile mi yoksa kötü hile mi olacağından emin değilim.