Oy pusulasını doğrulayın


12

B'yi etiketleyeceğimiz bir oy pusulası numarası , 1'den B'ye (B + 1) / 2 arasındaki sayıları bir üçgene yerleştirmenin yollarının sayısıdır, böylece her satır ve sütun artan sırada olur. İlk dört oy pusulası sayısı:

a(0) = 1
a(1) = 1
a(2) = 1
a(3) = 2

a(3)2, yani sayıları 1'den 3(3+1)/2 = 6böyle bir üçgende düzenlemenin 2 yolu olduğu anlamına gelir :

1          1
2 3    or  2 4
4 5 6      3 5 6

Daha fazla ayrıntı için OEIS sekans girişine bakın.

Oy pusulası üçgeni verdiğiniz zorluk, doğruluğunu doğrulamaktır. Bunu karşılamaktadır bir sandık üçgenin koşulları (satır ve sütun artan), şöyle yapmalısınız çıktı birçok nasıl diğer (girişteki biri hariç) yolları doğru üçgen düzenlemek için vardır. Giriş üçgeni yanlış yapılandırılmışsa, hiçbir şey çıkarmamalısınız.

Sondaki satırsonlarına izin verilir.

Giriş

Geçerli bir oy pusulası üçgeni olabilecek veya olmayabilecek bir sayı üçgeni. Örneğin:

1
2 3
4 5 6

1
10 5 
9 8 2
7 6 4 3

1
3 2

9
2 11
14 3 5
12 8 1 7
15 13 10 4 6

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21

Çıktı

Giriş geçerli bir oy pusulası üçgeniyse, aynı sayıları geçerli bir oy pusulası üçgeninde düzenlemenin kalan sayısı. Giriş geçerli bir oy pusulası üçgeni değilse, hiçbir şey. Örneğin, yukarıdaki girişler bu çıktıları üretir ( <nothing>gerçek bir boş çıktı için bir yer tutucudur):

1                     # the same as a(3)-1

<nothing>

<nothing>

<nothing>

33591                 # the same as a(6)-1

puanlama

Bu : her zamanki gibi, en düşük bayt sayısı kazanır. Tiebreaker en erken gönderildi.


1
Muhtemelen sütunların da artan sırada olduğunu belirtmelisiniz. OEIS tanımına bakana kadar bu beni şaşırttı.
ballesta25

O zaman neden 1/4 5/2 3 6geçerli değil ?
Leaky Nun

Özellik düzeltildi - OEIS girişini yanlış okudum. @ ballesta25
ArtOfCode

cc @LeakyNun ^
ArtOfCode

Doğru sırada olmasa bile, girdinin doğru sayıları içerdiğini varsayabilir miyiz?
Dennis

Yanıtlar:


4

Jöle , 20 bayt

;Zµ⁼Ṣ€
ẋÇFŒ!ṁ€⁸ÇÐfL’

Geçerli oy pusulası üçgenleri için, çalışma süresi ve bellek kullanımı en az O (n!) Şeklindedir ; burada n , üçgenin giriş sayısıdır. Geçersiz olanlar çökerek tanınır, böylece hiçbir şey yazdırılmaz.

Çevrimiçi deneyin!

Test sürüşü

Yerel olarak, (4) 'ün doğru bir şekilde hesaplandığını doğrulayabildim .

$ time jelly eun ';Zµ⁼Ṣ€¶ẋÇFŒ!ṁ€⁸ÇÐfL’' '[1],[2,3],[4,5,6],[7,8,9,10]'
11

real    6m9.829s
user    6m7.930s
sys     0m2.579s

Nasıl çalışır

;Zµ⁼Ṣ€         Helper link. Argument: T (triangular array)

 Z             Zip/transpose T.
;              Concatenate the original and the transposed copy.
  µ            Begin a new monadic chain, with the previous result (R) as argument.
    Ṣ€         Sort each array in R.
   ⁼           Test for equality with R.
               This returns 1 if T is a ballot triangle, 0 if not.

ẋÇFŒ!ṁ€⁸ÇÐfL’  Main link. Argument: A (triangular array)

 Ç             Call the helper link with argument A.
ẋ              Repeat A that many times.
               This yields an empty array if A is not a ballot triangle.
  F            Flatten the result.
   Œ!          Generate all permutations of the digits of A.
     ṁ€⁸       Mold each permutation like A, i.e., give it triangular form.
               This crashes if permutation array is empty.
        ÇÐf    Filter; keep permutations for which the helper link returns 1.
           L’  Compute the length and decrement it.

3

Brachylog , 44 bayt

{:{o?}a,?z:2a},?ly+yb:3flw
p~c.:laBtybB,.:1&

Çevrimiçi deneyin!

Bu iki kat daha hızlı gerçekleşir, bu nedenle doğru testler için, teorik olarak doğru veya uzun boylu üçgenler için doğru sonucu ürettiğine inanmanız gerekir 3.

Yine de falsey test vakalarını test edebilirsiniz, bunlar oldukça hızlı bir şekilde sona ermelidir.


Spesifikasyonu güncellemem gerekti - hem satırlar hem de sütunlar artıyor olmalı. OEIS girişini yanlış okumamın sonucu. Cevabınızı geçersiz kılarsa özür dileriz!
ArtOfCode

@ArtOfCode Cevabımın başından beri yaptığı buydu
Leaky Nun

2

JavaScript (ES6), 143 bayt

a=>a.some((b,i)=>b.some((c,j)=>c<b[j-1]||i&&c<a[i-1][j]))?'':(f=n=>n<2||n*f(n-1),g=(n,m=f(n*n+n>>1))=>n<2?m:g(--n,m*f(n)/f(n+n+1)),g(a.length))

Üçgeni geçersiz bir giriş arar ve ardından sonucu hesaplamak için OEIS'de formülün özyinelemeli bir formülasyonunu kullanır.


Spesifikasyonu güncellemem gerekti - hem satırlar hem de sütunlar artıyor olmalı. OEIS girişini yanlış okumamın sonucu. Cevabınızı geçersiz kılarsa özür dileriz!
ArtOfCode

@ArtOfCode Hayır, bunu zaten kontrol ediyordum, ama yine de teşekkürler.
Neil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.