Minimum seyrek cetveller


20

N uzunluğunda standart bir cetvel 0, 1, ..., n konumlarında (hangi birimlerde) mesafe işaretlerine sahiptir . Bir seyrek cetvel bu işaretlerin bir alt kümesine sahiptir. Bir cetvel, p ve q konumlarında p - q = k ile işaretler varsa k mesafesini ölçebilir .

Meydan okuma

Pozitif tam sayı Verilen n , çıkış uzunluğunun seyrek cetvel gerekli işaretlerin yeter sayısı n böylece 1, 2, ..., tüm mesafeleri ölçmek anlamına n .

Bu OEIS A046693 .

Örnek olarak, giriş 6 için çıkış 4'tür. Yani, 0, 1, 4, 6 işaretli bir cetvel 1−0 = 1, 6−4 = 2, 4−1 = 3, 4−0 olarak çalışır = 4, 6−1 = 5 ve 6−0 = 6.

Ek kurallar

  • Algoritma keyfi olarak büyük n için geçerli olmalıdır . Ancak, programın bellek, zaman veya veri türü kısıtlamaları ile sınırlı olması kabul edilebilir.
  • Giriş / çıkış herhangi bir makul yolla alınabilir / üretilebilir .
  • Programlara veya işlevlere herhangi bir programlama dilinde izin verilir . Standart boşluklar yasaktır.
  • Bayt cinsinden en kısa kod kazanır.

Test senaryoları

1   ->   2
2   ->   3
3   ->   3
4   ->   4
5   ->   4
6   ->   4
7   ->   5
8   ->   5
9   ->   5
10  ->   6
11  ->   6
12  ->   6
13  ->   6
14  ->   7
15  ->   7
16  ->   7
17  ->   7
18  ->   8
19  ->   8
20  ->   8
21  ->   8
22  ->   8
23  ->   8
24  ->   9
25  ->   9
26  ->   9
27  ->   9
28  ->   9
29  ->   9
30  ->  10
31  ->  10 
32  ->  10

Yanıtlar:


2

Jöle , 14 bayt

ŒcIQL
‘ŒPÇÐṀḢL

Negatif olmayan tamsayıları alan ve döndüren monadik bir bağlantı.

Çevrimiçi deneyin! ( burada ilk 15 değer- verimli değil)

Nasıl?

İşaretleme sayıları tarafından sıralanan 1'den n + 1'e kadar işaretler ([1, n + 1] güç seti) kullanarak yapılabilecek tüm cetvelleri bulur ve yalnızca maksimum ölçülebilir mesafeler (uzunluğu sıralı tüm işaret çiftleri arasındaki farklar), sonra ilkinin uzunluğunu (yani en kısa olanı [s] biri) döndürür.

ŒcIQL - Link 1: number of measurable distances: list of numbers, ruler  e.g. [1,2,3,7]
Œc    - all pairs                                [[1,2],[1,3],[1,7],[2,3],[2,7],[3,7]]
  I   - incremental differences                                          [1,2,6,1,5,4]
   Q  - de-duplicate                                                       [1,2,6,5,4]
    L - length                                                                      5

‘ŒPÇÐṀḢL - Main link: number, n              e.g. 4
‘        - increment                              5
 ŒP      - power-set (implicit range of input)   [[],[1],[2],[3],[4],[5],[1,2],[1,3],[1,4],[1,5],[2,3],[2,4],[2,5],[3,4],[3,5],[4,5],[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5],[2,4,5],[3,4,5],[1,2,3,4],[1,2,3,5],[1,2,4,5],[1,3,4,5],[2,3,4,5],[1,2,3,4,5]]
    ÐṀ   - keep those maximal under:
   Ç     -   call the last link (1) as a monad   [[1,2,3,5],[1,2,4,5],[1,3,4,5],[1,2,3,4,5]]
      Ḣ  - head                                  [1,2,3,5]
       L - length                                 4



5

Pyth , 14 bayt

lh.Ml{-M^Z2ySh

Burada deneyin!

Pyth , 21 19 bayt

hlMf!-SQmaFd.cT2ySh

Burada deneyin!

Nasıl çalışır

Golften sonra bunu güncelleyeceğim.

hSlMfqSQS {maFd.cT2ySh ~ Tam program. Q = giriş.

                   Sh ~ Tam sayı aralığı [1, Q + 1].
                  y ~ Powerset.
    f ~ Filtre (değişken T kullanır).
              .cT2 ~ T'nin iki elementli kombinasyonlarının tümü.
          m ~ Harita.
           aFd ~ Mutlak farkla azaltır.
        S {~ Veri tekilleştirme, sıralama.
     qSQ ~ [1, Q] tamsayı aralığına eşit mi?
  lM ~ Uzunluk ile harita.
hS ~ Minimum.

İkinci yaklaşımım için bir bayt kaydetme ve şu anki yaklaşımımdan 3 bayt golf için bana ilham veren isaacg'a teşekkürler !


Güç seti uzunluğa göre sıralandığından, birincisi Sgereksizdir.
isaacg

@isaacg Teşekkürler! Harika cevabınız (+1) yeni yaklaşımımdan 3 bayt tasarruf etmem için bana ilham verdi ve 14 bayt oldu.
Bay Xcoder

5

Python 2 , 129 128 126 bayt

-1 byte için totallyhuman'a teşekkürler

from itertools import*
r=range(1,input()+2)
[{a-b+1for a in l for b in l}>set(r)>exit(i)for i in r for l in combinations(r,i)]

Çevrimiçi deneyin!

çıkış çıkış kodu ile yapılır


4

Kabuk , 20 18 bayt

λ▼mLfȯ≡⁰u´×≠tṖ⁰)…0

-2 bayt için @ H.PWiz teşekkürler!

Çevrimiçi deneyin!

açıklama

λ               )…0  -- lambda with argument ⁰ as [0..N]
              Ṗ⁰     -- all subsets of [0..N]
             t       -- tail (remove empty subset)
    f(      )        -- filter by following function:
           ≠         --   absolute differences
         ´×          --   of all pairs drawn from itself
        u            --   remove duplicates
      ≡⁰             --   "equal" to [0..N]
  mL                 -- map length
 ▼                   -- minimum

oa-ile aynıdır
H.PWiz

@ H.PWiz gerçekten sadece uzunluklarının aynı olduğu için önemlidir, çünkü [0..N] aralığı dışında herhangi bir fark olamaz.
Martin Ender

Muhtemelen kullanabilirsiniz .
Martin Ender


3

Pyth, 15 bayt

lhf!-SQ-M^T2yUh

Test odası

Nasıl çalışır

lhf!-SQ-M^T2yUh
             Uh    [0, 1, ... n]
            y      Powerset - all possible rulers
  f                Filer rulers on
         ^T2       All pairs of marks, in both orders
       -M          Differences - (a)
     SQ            [1, ... n], the desired list of differences - (b)
    -              Remove (a) from (b)
   !               Check that there's nothing left.
 h                 The first remaining ruler (powerset is ordered by size)
l                  Length


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.