Seyrek İletki


12

Bazı pozitif tamsayı verildiğinde n, integral katları olan 2π/n(her biri tek bir ölçümde) tüm açıları ölçmenize izin veren en az sayıda işarete sahip bir açıölçer tasarlayın .

ayrıntılar

Bir çıkış olarak, bir aralıktaki çıktı tamsayılar listesini verebilir 0etmek n-1(veya 1etmek nher markanın pozisyonunu temsil) o. Alternatif olarak , her bir işaretin konumunda a ve hiçbirinin bulunmadığı bir (alt çizgi) nile bir dize / uzunluk listesi çıktısı alabilirsiniz . (Ya da iki farklı karakter daha uygun olur.) Örnek: For tam olarak 3 işaretleri tüm açıları ölçmek için muktedir gerek (örneğin) ayarlayarak az bir işareti , az bir işareti ve bir adet işareti . Bunu bir liste veya dize olarak kodlayabiliriz .#_
n = 52π/5, 4π/5, 6π/5, 8π/5, 2π02π/56π/5[0,1,3]##_#_

Örnekler

Çıkışların mutlaka benzersiz olmadığını unutmayın.

n:  output:
 1  [0]
 2  [0,1]
 3  [0,1]
 4  [0,1,2]
 5  [0,1,2]
 6  [0,1,3]
 7  [0,1,3]
 8  [0,1,2,4]
 9  [0,1,3,4]
10  [0,1,3,6]
11  [0,1,3,8]
20  [0,1,2,3,6,10]

Not: Bu seyrek cetvel problemine benzer , ancak doğrusal bir ölçek (iki uçlu) yerine dairesel (açısal) bir ölçek düşünürüz.

PPS: Bu komut dosyası, her biri için bir dizi işaret örneğini hesaplamalıdır n. Çevrimiçi deneyin!

PPPS: @ngn'nin belirttiği gibi, bu problem döngüsel bir düzen grubunun minimal fark tabanını bulmaya eşdeğerdir n. Minimum siparişler http://oeis.org/A283297'de listelenir ve bazı teorik sınırlar https://arxiv.org/pdf/1702.02631.pdf adresinde bulunur.



Primern = q^2 + q + 1 güç için tam örtüşme ile sınırda dupeq .
Peter Taylor

@PeterTaylor Neden bir dupe olduğunu düşündüğünüzü anlamıyorum. Ve "örtüşme" nin ne şekilde olduğunu açıklayabilir misiniz? Benzerlikler olmasına rağmen, bunlar çok farklı iki sorundur. Ayrıca bu kod golf ve bağlantılı meydan bile puanlama programın boyutunu içermez.
Kusur

Bunlar çok farklı iki sorun değil. PPPS'nizdeki OEIS bağlantısını okuyun: Burada atıfta bulunulan "Singer'ın fark seti", cevabımda uygulanan projektif alan yöntemi tarafından üretilen Golomb cetveli. Puanlama yönteminin farklı olduğuna dikkat çekiyorum.
Peter Taylor

Yanıtlar:


4

Jöle , 13 bayt

ŒPðṗ2I%QLðÐṀḢ

Çevrimiçi deneyin!

Nasıl çalışır

ŒPðṗ2I%QLðÐṀḢ  Main link. Argument: n (integer)

ŒP             Powerset; generate all subsequences of [1, ..., n].
  ð       ÐṀ   Begin a dyadic chain. Call it with all subsequences S as left
               argument and n as right one. Return the array of all sequences for
               which the chain returns the maximal result, i.e., [0, ..., n-1].
   ṗ2              Cartesian power 2; generate all pairs of elements of S.
     I             Increments; map each pair [x, y] to [y-x].
      %            Map each [y-x] to [(y-x)%n].
       Q           Unique; deduplicate the array of modular difference singletons.
        L          Take the length.
         ð     Begin a new, dyadic chain.
               Left argument: S' (filted subsequences). Right argument: n
            Ḣ  Take the first element of S'.
               Since S was sorted by length, so is S', so the first element of S'
               is the shortest subsequence that satisfies the condition.

4

MATL , 20 bayt

:qGZ^!"G:q@&-G\m?@u.

Bunun ötesinde girişler için TIO'da bellek kalmaz 8.

Çevrimiçi deneyin!

Nasıl çalışır

Bu [0 1 ... n-1], üs ile Kartezyen gücünü üretir ve nher Kartezyen demetini test etmek için bir döngü kullanır. Test başlığın eğer elementin tüm ikili farklarının hesaplanmasını ve bu farklar modülo eğer görme oluşur ndahil tüm sayılar 0, 1, ..., n-1.

Koşulu yerine getiren Kartezyen bir grup bulunur bulunmaz döngüden çıkar ve bu gruptaki benzersiz girdiler çözüm olarak yazdırılır.

Bu , u > v verildiğinde , u benzersiz girişlere sahip yeterli bir tuples setinin v ile herhangi bir tupledan daha önce test edileceği garanti edilir. benzersiz girişleri . "Yeterli bir küme", bu kümedeki tuple'lerin hiçbiri bir çözüm değilse, aynı sayıda benzersiz girişe sahip başka bir tupün bir çözüm olmadığı anlamına gelir.

Örneğin n = 3, Kartezyen tupüller aşağıda gösterildiği gibidir, burada her satır bir tupledir:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
 ···
2 2 1
2 2 2
  • İlk grup, benzersiz değeri 0 0 0olan tek ilgili gruptur 1. Daha sonra ortaya çıkacak olsa da 1 1 1ve 2 2 2görünse bile , 0 0 0sadece ve eğer varsa bir çözümdür. Böylece, demet tarafından oluşturulan tekli 0 0 0set, u =1 .
  • İkinci ve üçüncü küpe, yani 0 0 1ve 0 0 2için, yeterli bir set oluşturmak u = 2; yani, tüm durumları 2benzersiz değerlerle kapsarlar . Dördüncü grup 0 1 0asla çözüm olarak seçilmeyecektir, çünkü 0 0 1önce test edilecektir. Benzer şekilde, demet 0 2 0asla seçilmeyecektir çünkü daha sonra görünür 0 0 2. Gibi eşler 2 2 1hiçbir zaman çözüm olarak seçilmeyecektir çünkü 0 0 1eşdeğerdir (modulo nve yinelenen değerlere kadar) ve önce görünür.
  • Vb.

Yorumlanan kod:

:q         % Push [0 1 ... n-1], where n is the input (implicit)
GZ^        % Cartesian power with exponent n. Gives an (n^n) × n matrix
           % where each row is a Cartesian tuple
!          % Transpose. Now each Cartesian tuple is a column
!"         % For each column (that is, each Cartesian tuple)
  G:q      %   Push [0 1 ... n-1] (*)
  @        %   Push current column
  &-       %   Matrix of pairwise differences (**)
  G\       %   Modulo n, element-wise
  m        %   Ismember function: for each entry in (*), gives true iff
           %   it is present in (**)
  ?        %   If all entries are true
    @      %     Push current column
    u      %     Unique entries. This is the solution
    .      %     Break loop
           %   End (implicit)
           % End (implicit)
           % Display (implicit)

3

Stax , 26 21 bayt

Åæ4&╕u◙╩►s∙Φ▬═(0~ d+Q

Çevrimiçi çalıştırın ve hata ayıklayın!

Şu anda çevrimiçi sürüm giriş için başarısız oluyor, 20ancak bu hata düzeltildi ve henüz dağıtılan çevrimiçi yorumlayıcıya dağıtılmadı. 20Davayı çalıştırmak için biraz zaman ayırın .

açıklama

Çift yönlü farkın hesaplanması nedeniyle, kve x-kburada denkliği konusunda endişelenmem gerekmediği ortaya çıkıyor . 5 bayt kaydediliyor.

Açıklamak için ambalajsız sürümü kullanır.

rS{%o~{;i@c:2{E-x%mu%x<wm
r                            [0..`x`], where `x` is input
 S                           Powerset
  {%o~                       Sort by length
      {;i@             w     For each element in the powerset
          c:2                All pairs
             {    m          Map each pair `[p,q] to
              E-                 `q-p`
                x%               `(q-p)%x`
                   u%        Count of unique modulo differences
                     x<      Loop until the count of unique modulo differences is larger than the input(`n`)
                             Now we have found a valid set in the powerset
                        m    Output the members of the set,one element per line.

Bu şartı uygulayarak 0ve 1hem cevap üyesi olmaları, biz POWERSET üretebilir [2..x]yerine [0..x]ekleyin ve sonra 0ve 1elle POWERSET her elemana. Daha verimlidir ancak girdiyi 1özel olarak ele alması gerekir ve daha fazla bayt maliyeti vardır.



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.