Çoğunluk işlevi, üç boole girişi alan ve en yaygın olanı döndüren bir boolean işlevidir. Örneğin maj(x,y,z)
, çoğunluk işlevi T
doğruysa ve F
yanlış'ı gösterirse, o zaman:
maj(T,T,T) = T
maj(T,T,F) = T
maj(T,F,F) = F
maj(F,F,F) = F
Bu soru, çoğunluk işlevlerinin bileşimi olarak boole işlevlerinin yazılmasıyla ilgilidir. Çoğunluk fonksiyonlarının 5-ary kompozisyonuna bir örnek verilebilir (x1,x2,x3,x4,x5) => maj(x1,x2,maj(x3,x4,x5))
. Bu işlev, bu örnek giriş vektörlerinde aşağıdaki çıktıyı döndürür:
(T,T,F,F,F) => maj(T,T,maj(F,F,F)) = maj(T,T,F) = T
(T,F,T,T,F) => maj(T,F,maj(T,T,F)) = maj(T,F,T) = T
(T,F,T,F,F) => maj(T,F,maj(T,F,F)) = maj(T,F,F) = F
(F,F,F,T,T) => maj(F,F,maj(F,T,T)) = maj(F,F,T) = F
Görev
Pozitif bir tamsayı n ve booleanların uzunluk n vektörlerinin bir listesini girip, mümkünse verilen vektörlerin hepsinde doğru olan çoğunluk kapıları ağacını çıktılayan bir program yazın. İşlev, sınırlamalar listesinde olmayan vektörlerde doğru veya yanlış döndürebilir.
Vektörlerin listesi istediğiniz formatta girilebilir. İsterseniz, vektörü girmek yerine, vektördeki gerçek konumların listesini girebilirsiniz. Örneğin,
[TTF,TFT,FTT]
veya[[T,T,F],[T,F,T],[F,T,T]]
veya[[1,2],[1,3],[2,3]]
(gerçek pozisyonların listesi) hepsi iyidir.Çıktı geçerli herhangi bir ağaç biçimi olabilir. Örneğin
maj(maj(x1,x2,x3),x4,x5)
çalışır. Büyük olasılıkla, değişkenleri için olduğu gibi tek sayılar stand-in olarak kullanmak isteyeceksiniz[[1,2,3],4,5]
.123m45m
Örneğin, ters cila da uygundur.Çalışan bir işlev yoksa, programınız bir hata oluşturmalı veya bir falsey değeri çıkarmalıdır.
Çalışan birden çok işlev varsa, programınız bunlardan herhangi birini döndürebilir. Fonksiyonun basitleştirilmesine gerek yoktur. Örneğin
maj(x1,x1,x2)
veyax1
eşdeğerdir.
puanlama
Bu kod golf: Bayt en kısa çözüm kazanır.
Test senaryoları:
Bu durumların her biri için birçok olası çıkış olduğunu unutmayın, bu nedenle çıktınızı bir işleve dönüştüren bir denetleyici komut dosyası yazmalı ve işlevinizin belirtilen giriş vektörlerinin her birinde doğru olup olmadığını kontrol etmelisiniz.
Input: 3, [TFF]
Output: 1 or [1,1,2] or [1,[1,2,2],[1,1,3]] or other equivalent
Input: 3, [TFF,FTF]
Output: Falsey or error (it's not possible)
Input: 3, [TTF,TFT]
Output: [1,2,3] or 1 or other equivalent
Input: 3, [TTF,TFT,FTT]
Output: [1,2,3] or [1,3,2] or other equivalent
Input: 4, [TTFF,TFTF,FFTT]
Output: Falsey or error
Input: 4, [TTTF,TTFT,TFTT,FTTT]
Output: [1, 2, 3] or [2,3,4], or many other options
Input: 5, [TTTFF,FTTFT,TFFFT]
Output: [1,[1,[1,2,5],[2,4,5]],3] or many other options
Input: 6, [TTTFFF,FTFTTF,TFFTFT]
Output: [1, 2, 4] or [1, [1, 2, 4], [2, 3, 4]] or others
Input: 5, [TTTFF,TTFTF,TTFFT,TFTTF,TFTFT,TFFTT,FTTTF,FTTFT,FTFTT,FFTTT]
Output: [[1, [1, 3, 5], 4], [1, 2, [2, 4, 5]], [2, 3, [3, 4, 5]]] or others
Input: 7, [TTTTFFF,TTTFTFF,TTTFFTF,TTTFFFT,TTFTTFF,TTFTFTF,TTFTFFT,TTFFTTF,TTFFTFT,TTFFFTT,TFTTTFF,TFTTFTF,TFTTFFT,TFTFTTF,TFTFTFT,TFTFFTT,TFFTTTF,TFFTTFT,TFFTFTT,TFFFTTT,FTTTTFF,FTTTFTF,FTTTFFT,FTTFTTF,FTTFTFT,FTTFFTT,FTFTTTF,FTFTTFT,FTFTFTT,FTFFTTT,FFTTTTF,FFTTTFT,FFTTFTT,FFTFTTT,FFFTTTT]
Output: [[[1, [1, [1, 4, 7], 6], 5], [1, [1, 3, [3, 6, 7]], [3, 5, [5, 6, 7]]], [3, 4, [4, [4, 5, 7], 6]]], [[1, [1, [1, 4, 7], 6], 5], [1, 2, [2, [2, 5, 7], 6]], [2, [2, 4, [4, 6, 7]], [4, 5, [5, 6, 7]]]], [[2, [2, [2, 4, 7], 6], 5], [2, 3, [3, [3, 5, 7], 6]], [3, [3, 4, [4, 6, 7]], [4, 5, [5, 6, 7]]]]]