Üsleme Sırası


13

Bochnia * 'da bulunan en eski Polonya tuz madeni, sihirli bir sayı olarak düşünebileceğimiz 1248 yılında başladı . Biz üs alma sırası gelen 4 basamak eşit olduğunu görebilirsiniz: 2 ^ 0, 2 ^ 1, 2 ^ 2, 2 ^ 3.

Tarih aslında diziden 4 hane olduğundan, daha uzun sürebiliriz. Sonsuza ulaşana kadar süreci tekrarlayabiliriz. Eğer sayı ile sınırlarsak sıra şöyle görünür2048

124816326412825651210242048

Biraz daha iyi görünmesini sağlamak için sayıları ayırabiliriz:

1|2|4|8|16|32|64|128|256|512|1024|2048

Tarihten daha uzun, özel bir dizi deneyelim. Diyelim ki 5 basamaklı olmasını istiyoruz - birden fazla olasılık var:

  • 24816
  • 81632
  • 64128

Veya 3 haneli olanlar:

  • 124
  • 248
  • 816

Buna 3 basamaklı sayıları da ekleyebiliriz, ancak diyelim ki bir sekansın en az iki rakamı olması gerekir .

* Bu konuda Vikipedi hakkında bilgi yok. Lehçe sürümünü girerseniz - o zaman var. Madeni ziyaret ederseniz, işçiler size 1248'de başladığını da söyleyecektir.

Meydan okuma

Temel olarak 2 ile yukarıdaki örneklerde olduğu gibi bir üs alma dizisi oluşturun.

2-27 aralığından bir sayı verildiğinde , dizinin tüm olası bölümlerini (isterseniz 2048 bir veya daha büyük) girişe eşit basamak miktarıyla çıktılayın. Bir sayıyı kesemezsiniz, bu nedenle çıktı 481geçersizdir, çünkü 16 yarıya kadar kesilmiştir.

Kurallar:

  • Standart boşluklar yasaktır.
  • Girdinin aralık içindeki bir sayı olduğunu varsayabilirsiniz.
  • Programınız aralıktan (28+) büyük girişleri kabul edebilir, ancak bu skoru artırmaz / azaltmaz.
  • Çıktıdaki boşluklar yok sayılır. Gibi 124veya gibi çıktı alabilirsiniz 4 8 16.
  • Listedeki herhangi bir karakterle ,./|veya satır beslemeyle farklı olasılıklar ayrılmalıdır .
  • Dizi olarak çıktı alabilirsiniz.
  • Her olasılık en az 2 farklı sayı içermelidir .
  • Sen çıkış gerekir bir parçası dizisinin, değil yanyana, gibidirler sayılar karştramazsnz: 14.
  • Sabit kodlu çıkışa izin verilmez, ancak tam diziyi içeren bir dizeyi / sayıyı / diziyi kodlayabilirsiniz.
  • Giriş 27, tam 2048 dizisini döndürmelidir.
  • Daha önce de belirtildiği gibi, sayıları kesmeyin . Ör. 16kalmalı 16- kullanamazsın 481- kullanmalısın 4816.
  • EDIT: Orada yanlış bir şey söylemiş olabilirdim; 2048, programınızın desteklemesi gereken son sayıdır, daha büyük int'ler için destek ekleyebilirsiniz.

Test senaryoları

Giriş: 2

12, 24, 48

Giriş: 3

124, 248, 816

Giriş: 4

1248, 4816, 1632, 3264

Giriş: 5

24816, 81632, 64128

Giriş: 27

124816326412825651210242048

Ve sonraki sayılar ...

Herhangi bir test vakasında hata yaptıysam soruyu söyle ya da düzenle.


Bu , yani bayt içindeki en kısa kod kazanır!


1
Yani bu sadece üs olarak 2 ile doğru mu? Bunu soruda açıklığa kavuşturabilir misiniz? Bunun "Üstel Sıralamalar" tarafından ima edilip edilmediğinden emin değilim, ama öyle olsa bile, eminim orada benim gibi bunu bilmeyen insanlar var.
cole

@cole Aslında, evet, sadece 2 ile. Bahsettiğiniz için teşekkürler!
RedClover

1
Çıktı yeni satırla ayrılabilir mi?
H.PWiz

1
Telaşa gerek yok; dediğim gibi, onu itiyordum. Bazı meydan okuma yazarları çıktı formatı üzerinde inanılmaz derecede esnek olabilirler , bu yüzden bir bayt veya 2 uğruna sormaya değer;) (Not: Bu bir öneri olarak yorumlanmamalıdır!)
Shaggy

1
Giriş bölümünde Lehçe'yi büyük harfle yazmalısınız. "polish" farklı bir İngilizce kelimedir .
Peter Cordes

Yanıtlar:


7

05AB1E , 12 11 10 bayt

Sekansı destekler 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Çevrimiçi deneyin!

açıklama

₃Ý            # push range [0 ... 95]
  o           # raise 2 to the power of each
   Œ          # get a list of all sublists
    ʒ         # filter, keep elements that satisfy:
     g        # length
      ≠       # false (not equal to 1)
       }      # end filter
        J     # join each
         ù    # keep numbers of length matching the input

Outgolfer Erik sayesinde 1 bayt kurtardı Riley
sayesinde 1 bayt kurtardı


X›olabilir
Outgolfer Erik

@EriktheOutgolfer: Ah evet. Şimdi her zaman var olduğunu unutuyorum. Teşekkürler :)
Emigna

Can Y₃Ýmolmak ₃Ýo?
Riley

@Riley: Evet. Daha önce de vardı, ama bir nedenden dolayı değiştirmiş olmalıydım. Teşekkürler :)
Emigna

Kodu şimdi denemek (meydan okuma bittikten sonra çok geç) ... ve çözümünüz benim için tonlarca boş dizi döndürüyor gibi görünüyor ... Yanlış bir şey mi yapıyorum?
RedClover


4

Jöle ,  19 18  16 bayt

Her ne kadar spesifikasyondaki bu değişiklik 32768'lik bir kesime geçerek bu uygulamadan bir bayt tasarruf sağlamasına rağmen, herhangi bir kesme (sadece 2048 değil) kullanabileceğimiz için daha kısa bir çözüm olabilir
. --Yep. ..

Outgolfer Erik sayesinde -2 bayt ( Vfiltrenin örtük doğru argümanına izin vermek ve sıkmak için kullanılması ) -
evet şimdi verimsiz olanına çok benziyor; onun oyu al !

⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf

Bir sayı alan ve bir sayı listesi döndüren monadik bir bağlantı.

Çevrimiçi deneyin!

Nasıl?

⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf - Link: number, n        e.g. 3
⁴                - literal sixteen             16
 Ḷ               - lowered range               [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
  2              - literal two                 2
   *             - exponentiate                [1,2,4,8,16,32,...,32768]
    Ẇ            - all sublists                [[1],[2],...,[1,2],[2,4],...,[1,2,4],...]
      17         - literal seventeen           17
     ṫ           - tail from index             [[1,2],[2,4],...,[1,2,4],...]]
        V        - evaluate as Jelly code      [12,24,...,124,...]
              Ðf - filter keep:
             ¥   -   last two links as a dyad
           $     -     last two links as a monad:
         D       -       decimal list (of entry) (i.e. 816 -> [8,1,6] or 24 -> [2,4])
          L      -       length                  (i.e. 816 -> 3, or 24 -> 2)
            ⁼    -   equals (n)                  (i.e. 816 -> 1, or 24 -> 0)
                 - ...resulting in             [816, 124, 248]

1
bu sizinkine çok benzer? (lütfen dürüst olun: p)
Outgolfer Erik

Tuhaftır Sadece kullanmaya çalışıyordu Vve 16 yerine 1000 çalışacağız: ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Jonathan Allan


@EriktheOutgolfer şimdi benzer olabilirler ama her ikisini de saklamalıyız, ikiniz de bağımsız olarak geldiğinizden eminim ve eminim ben de eval hilesini bulurdum (tam olarak buna baktığımdan beri) , zincirlemeyi doğru yapmak için gerekli).
Jonathan Allan

@EriktheOutgolfer Erkek olduğunuz varsayımını yaptım ve böyle ifade edilmeyi tercih ediyorum, ama aslında ikisini de bilmiyorum; farklı bir zamiri tercih ederseniz bana bildirin!
Jonathan Allan


4

Japt , 22 20 19 16 bayt

En fazla girişi destekler 639ancak boşluklar sonraki sırada görünmeye başlar 234(Desteklenen giriş aralıklarının tam listesine buradan bakın ). Bir dizgi çıktısı verir.

IÆIo!²ãX m¬lUäc

Dene

I(64), L(100) ile değiştirilebilir ancak bilimsel gösterim ve hassas yanlışlıklara giriyorduk. Bunları filtrelemek, tabii ki bayt sayısını artıracak ve sadece maksimum girdiyi artıracaktır 736.

                     :Implicit input of integer U
I                    :64
 Æ                   :Map each X in [0,64)
  Io                 :  Range [0,64)
    !²               :  Raise 2 to the power of each
      ãX             :  Subsections of length X
         m           :  Map
          ¬          :    Join
           lU        :  Filter elements of length U
             Ã       :End map
              ¤      :Slice off the first 2 elements
               c     :Flatten


3

Kabuk , 18 17 bayt

Çıktı yeni satırlarla ayrılır

fo=⁰LmṁsftQ↑12¡D1

Çevrimiçi deneyin!

Nasıl?

           ↑12¡D1    The sequence [1,2,4...2048]
              ¡      Repeatedly apply function, collecting results in a list
               D     double
                1    initially applying to 1
           ↑12       Take the first 12 elements
          Q          Get all sublists
        ft           With a length greater than 1
     mṁs             Convert each list into a string, e.g [4,8,16] -> "4816"
fo=⁰L                Keep only those whose length is equal to the input

3

Jöle , 16 bayt

ȷḶ2*ẆṫȷḊVDL$⁼¥Ðf

Çevrimiçi deneyin!

Not: çok verimsiz. Bir sayı listesi döndürür.


Tio bu kodu
ayrışıyor


1
@Soaku teoride çalışıyor - sadece zaman aşımına uğradı çünkü çok verimsiz.
Jonathan Allan

1
@ Soaku Yorumumu kastetmiştim. Onları zaten orada değiştirdim ve çıktı var [12, 24, 48].
Outgolfer Erik

1
@Soaku Ekstra ücret ödemeden yapabiliyorsanız neden en iyisini yapmayasınız? ;)
Outgolfer Erik

3

JavaScript (ES7), 102 , 100 bayt

İle eşleşen tüm alt dizileri yazdırır alert().

l=>[...1e11+''].map((_,k,a)=>a.map((_,x)=>(s=(g=n=>x<=k|n<k?'':g(n-1)+2**n)(x)).length-l||alert(s)))

gösteri

Not : Bu snippet, sonuçları arabelleğe alır ve kullanıcı dostu olması için konsola yazdırır.


3

Haskell , 72 67 bayt

f n=[s|i<-[0..99],j<-[i+1..99],s<-[show.(2^)=<<[i..j]],length s==n]

Çevrimiçi deneyin!

Laikoni sayesinde 5 bayt kurtardı

Uzunluğu 99olduğu için bir sınır kullandım .2^99> 27


Yine de 27'lik bir giriş için ekstra vakalar geri geliyor.
Jonathan Allan

99'u 11 ile değiştirebilirsiniz, böylece daha geçerli olur . Yine de, 2048'den büyük sayıların geçersiz olduğunu belirtmedim. Sadece 2048'in minimum aralık olduğunu söyledim .
RedClover

@JonathanAllan Hala doğru olduğunu düşünüyorum: "İsterseniz 2048 bir veya daha büyük" 633825300114114700748351602688 dizisini aldım, çünkü başka bir çözüm olmayacağını garanti ediyor (2-27 aralığında). Aslında 45 limitin yeterli olacağını düşünüyorum length$(show$2^44)++(show$2^45)==28.
jferard

@jferard, cevabınızdan sonra gerçekten düzenlendi (daha önce "2048 ile sınırlı" olduğunu belirtti). Bu durumda benimkini de kısaltabilirim.
Jonathan Allan

1
@JonathanAllan Evet, aslında bu soruya cevap gönderdikten sonra sorudaki bazı kuralların yanlış ve yanıltıcı olduğunu fark ettim.
RedClover

2

Mathematica, 122 bayt

(s=#;FromDigits@F[f/@#]&/@Select[Subsequences[Array[2^#&,99,0]],l@#>1&&(l=Length)@(F=Flatten)[(f=IntegerDigits)/@#]==s&])&  


Giriş

[27]

Çıktı

{879609302220817592186044416, 134217728268435456536870912, 524288104857620971524194304, 163843276865536131072262144, 204840968192163843276865536, 2512121212121212121212121212122012121212121212121212121212121212121212121212121212122012

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344

2

C, 170 bayt

i,j;f(n){char t[99],s[12][5]={"1"};for(i=j=1;i<12;)sprintf(s+i++,"%d",j*=2);for(i=0;i<12;++i,strlen(t)-n||j>1&&puts(t))for(j=*t=0;strlen(t)<n&&j+i<12;)strcat(t,s+i+j++);}

Çevrimiçi deneyin!

unrolled:

i,j;
f(n)
{
    char t[99], s[12][5] = {"1"};
    for (i=j=1; i<12;)
        sprintf(s+i++, "%d", j*=2);
    for (i=0; i<12; ++i, strlen(t)-n || j>1 && puts(t))
        for (j=*t=0; strlen(t)<n && j+i<12;)
            strcat(t, s+i+j++);
}



1

Japt, 24 bayt

Oy verme

Şimdi bunu @Shaggy'in yaptığı gibi yapmanın aynı yolu olduğunu fark ettim, sadece daha az golf. (Cevabı kaldırmalı mıyım?)

Bu soruyu yayınladığımdan bu yana uzun bir süre sonra ilk golfçümü öğrendim. Bu yüzden şansımı burada denemeye karar verdim.

2oI,@IÆ2pYÃãX ®q
c f_Ê¥N

Çevrimiçi deneyin!

Skor en iyisi değil, iyi bile değil, ama bunu yapmak çok zamanımı aldı.

Çok fazla puan kaybediyorum, çünkü bazı nedenlerle, ã sadece x uzunluk dizileri döndürebilir ... Bu değilse, ~ 10 bayt bile olabilir.

Açıklama:

2oI,@IÆ2pYÃãX ®q # All 2^ combinations:
2oI              # Range 2-64
   ,@            # Map (X as index)
     IÆ          #   Range 0-64, map (Y as index)
       2pY       #   2^Y
          Ã      #   End function (map)
                 #   this = array of powers.
           ãX    #   All combinations with X length
              ®q # Join then (arrays to numbers)

c f_Ê¥N          # Filter length to input:
c                # Flatten
  f_             # Filter
    Ê            #  Length
     ¥           #  ==
      N          #  Parsed input

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.