Sekwencja wykładnicza

13

Najstarsza polska kopalnia soli, znajdująca się w Bochni *, powstała w 1248 roku, co możemy uznać za magiczną liczbę . Widzimy, że jest równy 4 cyfry z sekwencji exponentiations: 2 ^ 0, 2 ^ 1, 2 ^ 2, 2 ^ 3.

Ponieważ data jest w rzeczywistości 4 cyframi z sekwencji, możemy ją wydłużyć. Możemy powtarzać ten proces, aż osiągniemy nieskończoność. Sekwencja wyglądałaby tak, gdybyśmy ograniczyli ją do liczby2048

124816326412825651210242048

Aby wyglądało to trochę lepiej, możemy oddzielić liczby:

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

Wypróbujmy niestandardową, dłuższą sekwencję niż data. Powiedzmy, że chcemy, aby miał 5 cyfr - istnieje więcej niż jedna możliwość:

  • 24816
  • 81632
  • 64128

Lub 3-cyfrowe:

  • 124
  • 248
  • 816

Możemy również dodać do tego 3-cyfrowe liczby, ale powiedzmy, że sekwencja musi mieć co najmniej dwie liczby .

* Brak informacji na ten temat w angielskiej Wikipedii. Jeśli wejdziesz w polską wersję - to jest. Jeśli odwiedzisz kopalnię, pracownicy powiedzą ci również, że rozpoczęła się w 1248 roku.

Wyzwanie

Utwórz sekwencję potęgowania, jak w powyższych przykładach, z 2 jako zasadą.

Biorąc pod uwagę liczbę z zakresu 2-27, wypisz wszystkie możliwe części sekwencji (2048 jeden lub większy, jeśli chcesz) z liczbą cyfr równą wartości wejściowej. Nie można wyciąć liczby, więc wynik podobny do 481jest nieprawidłowy, ponieważ 16 jest przecięte na pół.

Zasady:

  • Standardowe luki są zabronione.
  • Możesz założyć, że na wejściu znajduje się liczba z zakresu.
  • Twój program może akceptować dane wejściowe większe niż zakres (28+), ale to nie zwiększy / nie zmniejszy wyniku.
  • Spacje wyjściowe są ignorowane. Możesz generować jak 124lub lubić 4 8 16.
  • Różne możliwości powinny być oddzielone dowolnym znakiem z listy: ,./|lub wierszem.
  • Możesz wyprowadzać dane jako tablicę.
  • Każda możliwość powinna obejmować co najmniej 2 różne liczby .
  • Musisz wyjście część sekwencji, nie można mieszać numery, które nie są obok siebie, jak: 14.
  • Wyjściowe kodowanie jest niedozwolone, jednak można na stałe zakodować ciąg / liczbę / tablicę zawierającą pełną sekwencję.
  • Wejście 27 powinno zwrócić pełną sekwencję 2048.
  • Jak już wspomniano wcześniej, nie wycinaj liczb . Dawny. 16musisz zostać 16- nie możesz użyć 481- musisz użyć 4816.
  • EDYCJA: Mogłem powiedzieć coś złego; 2048 to ostatnia liczba, którą Twój program powinien obsługiwać, możesz dodać obsługę większych int.

Przypadki testowe

Wejście: 2

12, 24, 48

Wejście: 3

124, 248, 816

Wejście: 4

1248, 4816, 1632, 3264

Wejście: 5

24816, 81632, 64128

Wejście: 27

124816326412825651210242048

A później numery ...

Jeśli popełniłem błąd w jednym z przypadków testowych, powiedz mi lub edytuj pytanie.


To jest , więc wygrywa najkrótszy kod w bajtach!

Czerwona koniczyna
źródło
1
Więc to tylko z 2 jako bazą, prawda? Czy możesz to wyjaśnić w pytaniu? Nie jestem pewien, czy sugeruje to „Sekwencja wykładników”, ale nawet jeśli tak, jestem pewien, że są ludzie tacy jak ja, którzy tego nie wiedzą.
cole
@cole Właściwie tak, to tylko z 2. Dzięki za wzmiankę!
RedClover,
1
Czy wyjście można oddzielić znakiem nowej linii?
H.PWiz
1
Bez obaw; jak powiedziałem, naciskałem. Niektórzy autorzy wyzwań mogą być niewiarygodnie elastyczni w formacie wyjściowym, więc ze względu na bajt lub 2 warto zapytać;) (Uwaga: nie należy tego interpretować jako sugestii!)
Shaggy,
1
We wstępie powinieneś pisać po polsku. „polski” to inne angielskie słowo .
Peter Cordes,

Odpowiedzi:

7

05AB1E , 12 11 10 bajtów

Obsługuje sekwencję do 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Wypróbuj online!

Wyjaśnienie

₃Ý            # 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

Zapisano 1 bajt dzięki Erikowi Outgolferowi
Zapisano 1 bajt dzięki Riley

Emigna
źródło
X›może być
Erik the Outgolfer,
@EriktheOutgolfer: Oh tak. Zawsze zapominam, że już istnieje. Dzięki :)
Emigna,
Może Y₃Ýmbyć ₃Ýo?
Riley,
@Riley: Tak. Miałem to już wcześniej, ale z jakiegoś powodu musiałem to zmienić. Dzięki :)
Emigna,
Wypróbowanie kodu teraz (znacznie później po zakończeniu wyzwania) ... a twoje rozwiązanie wydaje mi dla ciebie mnóstwo pustych tablic ... Czy robię coś złego?
RedClover,
6

Pyth, 22 21 20 17 bajtów

fqQlTjLkt#.:^L2yT

Wypróbuj online

Wyjaśnienie

fqQlTjLkt#.:^L2yT
            ^L2yT  Get the powers of 2 up to 2^20
        t#.:       Get all consecutive sequences of at least 2
     jLk           Concatenate each
fqQlT              Get the ones whose length is the input

źródło
21 bajtów:fqQlTmjkdftlT.:m^2d12
Pan Xcoder,
19 bajtów - fqQlTjLkftT.:m^2d12
Jakube
18 bajtów - fqQlTjLkftT.:^L2yT
Jakube
1
17 bajtów - fqQlTjLkt #.: ^ L2yT
Jakube
4

Galaretka ,  19 18  16 bajtów

Może być teraz krótsze rozwiązanie, w którym możemy zastosować dowolną wartość odcięcia (nie tylko 2048), chociaż ta zmiana specyfikacji pozwoliła zaoszczędzić jeden bajt od tej implementacji poprzez przejście do wartości
granicznej 32768. - Tak. ..

-2 bajty dzięki Erikowi Outgolferowi (użycie, Vaby umożliwić niejawny poprawny argument filtra i dokręcenie) -
tak, jest bardzo podobny do jego nieefektywnego; idź głosować na jego !

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

Monadyczny link pobierający liczbę i zwracający listę liczb.

Wypróbuj online!

W jaki sposób?

⁴Ḷ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]
Jonathan Allan
źródło
1
Czy to jest zbyt podobne do twojego? (proszę być szczerym: p)
Erik the Outgolfer
Zabawne tyle właśnie stara się wykorzystać Vi to będzie działać na 16 zamiast 1000: ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Jonathan Allan
Idę po więcej: p
Erik the Outgolfer
@EriktheOutgolfer mogą być teraz podobne, ale myślę, że oboje powinniśmy je zachować. Jestem pewien, że wymyśliłeś swoje samodzielnie i jestem pewien, że znalazłem też ewolucyjną sztuczkę (ponieważ dokładnie na to patrzyłem , po prostu potrzebowałem, aby prawidłowo połączyć łańcuchy).
Jonathan Allan
@EriktheOutgolfer Przyjąłem założenie, że jesteś mężczyzną i wolę być określany jako taki, ale tak naprawdę nie znam żadnego faktu; daj mi znać, jeśli wolisz inny zaimek!
Jonathan Allan,
4

Perl 6 , 62 59 bajtów

{grep *.comb==$_,map {[~] 2 X**[...] $_},combinations 12,2}

Wypróbuj online!

nwellnhof
źródło
4

Japt , 22 20 19 16 bajtów

Obsługuje dane wejściowe do, 639ale odstępy zaczynają pojawiać się w sekwencji po 234(Zobacz pełną listę obsługiwanych zakresów danych wejściowych tutaj ). Zwraca tablicę ciągów.

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

Sprawdź to

I(64) można zastąpić L(100), ale zajmiemy się notacjami naukowymi i niedokładnościami precyzji. Odfiltrowanie ich oczywiście zwiększyłoby liczbę bajtów i tylko zwiększyło maksymalną liczbę danych wejściowych do 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
Kudłaty
źródło
3

Python 2 , 105 bajtów

lambda l,r=range:[x for x in[''.join(`2**n`for n in r(i,j+2))for i in r(13)for j in r(i,11)]if len(x)==l]

Wypróbuj online!

Pręt
źródło
3

Łuska , 18 17 bajtów

Dane wyjściowe są oddzielone znakami nowej linii

fo=⁰LmṁsftQ↑12¡D1

Wypróbuj online!

W jaki sposób?

           ↑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
H.PWiz
źródło
3

Galaretka , 16 bajtów

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

Wypróbuj online!

Uwaga: bardzo nieefektywny. Zwraca listę liczb.

Erik the Outgolfer
źródło
Tio nie wydaje się być w stanie przeanalizować tego kodu ... Zawsze przekracza 60 sekund ...
RedClover
1
@ Soaku Spróbuj zastąpić ȷs (tj. 1000) 20S (dolny górny limit) .
Erik the Outgolfer
1
@ Soaku działa teoretycznie - po prostu przekracza limit czasu, ponieważ jest bardzo nieefektywny.
Jonathan Allan
1
@ Soaku miałem na myśli w moim komentarzu. Już je tam zastąpiłem i jest wyjście [12, 24, 48].
Erik the Outgolfer
1
@ Soaku Dlaczego nie wybrać najbardziej, jeśli możesz bez dodatkowych kosztów? ;)
Erik the Outgolfer,
3

JavaScript (ES7), 102 100 bajtów

Wyświetla wszystkie pasujące podsekwencje z 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)))

Próbny

Uwaga : ten fragment kodu buforuje wyniki i drukuje je na konsoli w celu ułatwienia obsługi.

Arnauld
źródło
3

Haskell , 72 67 bajtów

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

Wypróbuj online!

Zaoszczędź 5 bajtów dzięki Laikoni

Użyłem limitu, 99ponieważ 2^99ma długość > 27.

Jferard
źródło
Zwraca jednak dodatkowe przypadki dla wkładu 27.
Jonathan Allan
Możesz zastąpić 99 cyfrą 11, aby stała się bardziej poprawna. Chociaż nie podałem, że liczby> 2048 są nieprawidłowe. Powiedziałem tylko, że 2048 to minimalny zasięg.
RedClover
@JonathanAllan Myślę, że nadal jest poprawny: „2048 jeden lub większy, jeśli chcesz” Wziąłem sekwencję 633825300114114700748351602688, ponieważ gwarantuje, że nie będzie innego rozwiązania (w zakresie 2-27). Właściwie uważam, że limit 45 byłby wystarczający, ponieważ length$(show$2^44)++(show$2^45)==28.
jferard
@jferard, który był właściwie edytowany po twojej odpowiedzi (wcześniej w rzeczywistości był „ograniczony do 2048”). W tym przypadku mogę również skrócić swój.
Jonathan Allan,
1
@JonathanAllan Tak, naprawdę zdałem sobie sprawę, że niektóre reguły w pytaniu są błędne i wprowadzają w błąd tuż po opublikowaniu tego anwer.
RedClover
2

Mathematica, 122 bajty

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


Wejście

[27]

Wynik

{879609302220817592186044416, 134217728268435456536870912, 524288104857620971524194304, 163843276865536131072262144, 20484096819616848848616628616848465816816848465816816848465916816848465916816848465916416848416816910164164488169168.

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344
J42161217
źródło
2

C, 170 bajtów

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++);}

Wypróbuj online!

Rozwinięty:

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++);
}
Steadybox
źródło
1

R , 99 bajtów

function(n)for(i in 1:11)for(j in i:11+1)if(sum(nchar(x<-2^(0:11))[i:j])==n)cat(x[i:j],"\n",sep="")

Wypróbuj online!

flodel
źródło
1

Perl 5 , 76 bajtów

75 bajtów kodu + 1 dla -a

for$i(0..10){$/='',(map$/.=2**$_,$i..$_)&&$F[0]-length$/||say$/for$i+1..11}

Wypróbuj online!

Xcali
źródło
1

Japt, 24 bajty

Nie głosuj za głosem

Teraz zdałem sobie sprawę, że jest to taki sam sposób, jak @Shaggy, tylko mniej golfa. (Czy powinienem usunąć odpowiedź?)

Po pewnym czasie od opublikowania tego pytania nauczyłem się pierwszego języka golfowego. Z tego powodu postanowiłem spróbować szczęścia tutaj.

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

Wypróbuj online!

Wynik nie jest najlepszy, nie jest nawet dobry, ale zajęło mi to dużo czasu. -.

Tracę dużo punktów, ponieważ z niektórych powodów ã może zwrócić tylko tablice x długości ... Może to być nawet ~ 10 bajtów, jeśli nie to.

Wyjaśnienie:

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
Czerwona koniczyna
źródło
0

Ruby , 94 bajty

->n{a=*b=1;a<<b*=2until b>3**n;(2..n).flat_map{|x|a.each_cons(x).map &:join}.grep /^.{#{n}}$/}

Wypróbuj online!

GB
źródło