Exponentiationssequenz


13

Das älteste polnische Salzbergwerk in Bochnia * wurde im Jahr 1248 in Betrieb genommen, eine magische Zahl . Wir können sehen, dass es aus der Folge von Exponentiationen gleich 4 Ziffern ist:2 ^ 0, 2 ^ 1, 2 ^ 2, 2 ^ 3 .

Da das Datum tatsächlich aus 4 Ziffern der Sequenz besteht, können wir es verlängern. Wir könnten den Vorgang wiederholen, bis wir unendlich sind. Die Sequenz würde so aussehen, wenn wir sie auf die Anzahl beschränken2048

124816326412825651210242048

Um es ein bisschen besser aussehen zu lassen, können wir die Zahlen trennen:

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

Versuchen wir eine benutzerdefinierte, längere Sequenz als das Datum. Nehmen wir an, wir möchten, dass es 5 Ziffern hat - es gibt mehr als eine Möglichkeit:

  • 24816
  • 81632
  • 64128

Oder 3-stellige:

  • 124
  • 248
  • 816

Wir könnten auch die 3-stelligen Zahlen hinzufügen, aber sagen wir mal, dass eine Sequenz haben muss mindestens zwei Zahlen haben muss .

* Es gibt keine Informationen dazu in der englischen Wikipedia. Wenn Sie die polnische Version eingeben - dann gibt es. Wenn Sie die Mine besuchen, werden die Arbeiter Ihnen auch mitteilen, dass sie im Jahre 1248 begonnen hat.

Die Herausforderung

Erstellen Sie eine Exponentiationssequenz wie in den obigen Beispielen mit 2 als Basis.

Wenn Sie eine Zahl zwischen 2 und 27 eingeben, geben Sie alle möglichen Teile der Sequenz (The 2048 eins oder größer, wenn Sie möchten) mit einer Anzahl von Ziffern aus, die der Eingabe entspricht. Sie können keine Zahl schneiden, also wie ausgeben481 ungültig, da 16 in zwei Hälften geschnitten wird.

Regeln:

  • Standardlücken sind verboten.
  • Sie können davon ausgehen, dass die Eingabe eine Zahl innerhalb des Bereichs ist.
  • Ihr Programm kann Eingaben akzeptieren, die größer als der Bereich (28+) sind, aber die Punktzahl wird dadurch nicht erhöht / verringert.
  • Leerzeichen in der Ausgabe werden ignoriert. Sie können like 124oder like ausgeben 4 8 16.
  • Verschiedene Möglichkeiten sollten durch ein beliebiges Zeichen aus der Liste getrennt werden: ,./|oder durch einen Zeilenvorschub.
  • Sie können als Array ausgeben.
  • Jede Möglichkeit sollte mindestens 2 verschiedene Zahlen enthalten .
  • Sie müssen einen Teil der Sequenz ausgeben. Sie können keine Zahlen mischen, die nicht nebeneinander stehen, wie z.14 .
  • Eine fest codierte Ausgabe ist nicht zulässig. Sie können jedoch einen String / eine Nummer / ein Array mit der vollständigen Sequenz fest codieren.
  • Eingang 27 sollte die vollständige 2048-Sequenz zurückgeben.
  • Wie bereits erwähnt, schneiden Sie keine Zahlen . Ex. 16muss bleiben 16- du kannst nicht verwenden 481- du musst verwenden 4816.
  • EDIT: Ich könnte etwas falsch gesagt haben; 2048 ist die letzte Nummer, die Ihr Programm unterstützen sollte. Sie können Unterstützung für größere ints hinzufügen.

Testfälle

Eingang: 2

12, 24, 48

Eingang: 3

124, 248, 816

Eingang: 4

1248, 4816, 1632, 3264

Eingang: 5

24816, 81632, 64128

Eingang: 27

124816326412825651210242048

Und spätere Nummern ...

Wenn ich in einem der Testfälle einen Fehler gemacht habe, teilen Sie mir die Frage mit oder bearbeiten Sie sie.


Das ist , also gewinnt der kürzeste Code in Bytes!


1
Das ist also nur mit 2 als Basis, richtig? Könnten Sie das in der Frage klarstellen? Ich bin mir nicht sicher, ob es durch "Sequence of Exponentiations" impliziert wird, aber selbst wenn es so ist, bin ich mir sicher, dass es Leute wie mich gibt, die das nicht wissen.
Cole

@cole Eigentlich ist es ja nur mit 2. Danke für die Erwähnung!
RedClover

1
Kann die Ausgabe durch Zeilenvorschub getrennt werden?
H.PWiz

1
Keine Bange; Wie ich schon sagte, ich habe es geschoben. Einige Autoren Herausforderung kann sein unglaublich flexibel auf das Ausgabeformat so, im Interesse eines Bytes oder 2, dann ist es lohnt sich zu fragen;) (Hinweis: Das sollte nicht als Vorschlag interpretiert werden)!
Shaggy

1
Im Intro solltest du Polnisch großschreiben. "polnisch" ist ein anderes englisches Wort .
Peter Cordes

Antworten:


7

05AB1E , 12 11 10 Bytes

Unterstützt die Reihenfolge bis 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Probieren Sie es online!

Erläuterung

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

Dank Erik the Outgolfer
1 Byte gespeichert Dank Riley 1 Byte gespeichert


X›kann sein
Erik der Outgolfer

@EriktheOutgolfer: Oh ja. Ich vergesse immer, dass es jetzt eine gibt. Danke :)
Emigna

Kann Y₃Ýmsein ₃Ýo?
Riley

@ Riley: Ja. Ich hatte das schon einmal, aber aus irgendeinem Grund muss ich es geändert haben. Vielen Dank :)
Emigna

Probieren Sie den Code jetzt aus (viel zu spät nach dem Ende der Herausforderung) ... und Ihre Lösung scheint Tonnen von leeren Arrays für mich zurückzugeben ... Mache ich etwas falsch?
RedClover


4

Jelly ,  19 18  16 Bytes

Möglicherweise gibt es jetzt eine kürzere Lösung, in der wir einen beliebigen Grenzwert verwenden können (nicht nur 2048), obwohl diese Änderung der Spezifikation eine Ein-Byte-Einsparung gegenüber dieser Implementierung ermöglicht hat, indem ein Grenzwert von 32768
festgelegt wurde. --Yep. ..

-2 Bytes dank Erik the Outgolfer (Verwendung von V, um implizite richtige Argumentation des Filters und Verschärfung zu ermöglichen) -
Ja, es ist sehr ähnlich zu seinem ineffizienten jetzt; geh und stimme ihm zu !

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

Ein monadischer Link, der eine Nummer aufnimmt und eine Liste von Nummern zurückgibt.

Probieren Sie es online!

Wie?

⁴Ḷ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
Ist dir das zu ähnlich? (bitte seien Sie ehrlich: p)
Erik the Outgolfer

Witziger genug war ich nur versucht , zu verwenden , Vund es wird für 16 statt 1000 arbeiten: ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Jonathan Allan

Ich gehe für die meisten: p
Erik der Outgolfer

@EriktheOutgolfer sie mögen sich jetzt ähnlich sein, aber ich bin der Meinung, wir sollten sie beide behalten. Ich bin sicher, Sie haben sich Ihre selbst ausgedacht und ich bin sicher, ich hätte auch den Auswertungs-Trick gefunden (da ich genau das angeschaut habe) , musste nur die Verkettung richtig machen).
Jonathan Allan

@EriktheOutgolfer Ich habe die Annahme gemacht, dass Sie männlich sind und es vorziehen, als solche bezeichnet zu werden, aber eigentlich auch nicht als Tatsache wissen; lass es mich wissen, wenn du ein anderes Pronomen bevorzugst!
Jonathan Allan


4

Japt , 22, 20, 19 16 Bytes

Unterstützt Eingaben bis, 639aber Lücken erscheinen in der Sequenz nach 234(siehe die vollständige Liste der unterstützten Eingabebereiche hier ). Gibt ein Array von Strings aus.

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

Probier es aus

I(64) könnte durch L(100) ersetzt werden, aber wir würden uns mit wissenschaftlicher Notation und Präzisionsungenauigkeiten befassen. Das Herausfiltern würde natürlich die Byteanzahl erhöhen und nur die maximale Eingabe auf erhöhen 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

Schale , 18 17 Bytes

Die Ausgabe wird durch Zeilenumbrüche getrennt

fo=⁰LmṁsftQ↑12¡D1

Probieren Sie es online!

Wie?

           ↑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

Gelee , 16 Bytes

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

Probieren Sie es online!

Hinweis: sehr ineffizient. Gibt eine Liste mit Zahlen zurück.


Tio scheint diesen Code nicht analysieren zu können ... Es dauert immer
länger


1
@ Soaku es funktioniert in der Theorie - es läuft nur aus, weil es sehr ineffizient ist.
Jonathan Allan

1
@ Soaku meinte ich auf meinen Kommentar. Ich habe sie dort bereits ausgetauscht und es wird ausgegeben [12, 24, 48].
Erik der Outgolfer

1
@ Soaku Warum gehst du nicht für die meisten, wenn du kannst, ohne zusätzliche Kosten? ;)
Erik der Outgolfer

3

JavaScript (ES7), 102 100 Byte

Druckt alle passenden Teilsequenzen mit 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)))

Demo

NB : Dieses Snippet puffert die Ergebnisse und druckt sie aus Gründen der Benutzerfreundlichkeit auf die Konsole.


3

Haskell , 72 67 Bytes

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

Probieren Sie es online!

5 Bytes dank Laikoni gespart

Ich habe ein Limit von 99weil verwendet 2^99hat eine Länge > 27.


Es werden jedoch zusätzliche Fälle für eine Eingabe von 27 zurückgegeben.
Jonathan Allan

Sie können 99 mit 11 ersetzen, so wird es mehr gültig. Allerdings habe ich nicht angegeben, dass Nummern> 2048 ungültig sind. Ich habe nur angegeben, dass 2048 die Mindestreichweite ist.
RedClover

@ JonathanAllan Ich denke, es ist immer noch richtig: "Die 2048 oder größer, wenn Sie wollen" Ich habe die Sequenz 633825300114114700748351602688 genommen, weil es garantiert, dass es keine andere Lösung gibt (im Bereich 2-27). Eigentlich denke ich, dass ein Limit von 45 ausreichen würde, weil length$(show$2^44)++(show$2^45)==28.
Jferard

@ jferard, der nach Ihrer Antwort tatsächlich bearbeitet wurde (es stand tatsächlich "auf 2048 begrenzt" vor). Ich kann meine auch in diesem Fall verkürzen.
Jonathan Allan

1
@ JonathanAllan Ja, mir ist tatsächlich klar geworden, dass einige der Regeln in der Frage falsch und irreführend sind, kurz nachdem ich diese Antwort gepostet habe.
RedClover

2

Mathematica, 122 Bytes

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


Eingang

[27]

Ausgabe

{879609302220817592186044416, 134217728268435456536870912, 524288104857620971524194304, 163843276865536131072262144, 204840968192163843276865536, 25651210242048940

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344

2

C 170 Bytes

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

Probieren Sie es online!

Abgerollt:

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 Bytes

Nicht upvote

Jetzt wurde mir klar, dass dies auf die gleiche Art und Weise geschieht wie bei @Shaggy, nur dass weniger Golf gespielt wird. (Soll ich die Antwort entfernen?)

Nach einiger Zeit, seit ich diese Frage gestellt habe, habe ich meine erste Golfsprache gelernt. Aus diesem Grund habe ich mich entschlossen, hier mein Glück zu versuchen.

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

Probieren Sie es online!

Die Punktzahl ist nicht die beste, sie ist nicht einmal gut, aber ich habe viel Zeit dafür gebraucht.

Ich verliere eine Menge Punkte, weil ã aus bestimmten Gründen nur Arrays mit einer Länge von x zurückgeben kann ... Es könnten sogar ~ 10 Bytes sein, wenn das nicht der Fall ist.

Erläuterung:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.