Séquence d'exponentiation

13

La plus ancienne mine de sel polonaise, située à Bochnia *, a été inaugurée en 1248, que nous pouvons considérer comme un nombre magique . On peut voir qu'il est égal à 4 chiffres de la séquence de exponentiations: 2^0, 2^1, 2^2, 2^3.

Comme la date est en fait à 4 chiffres de la séquence, nous pourrions l'allonger. Nous pourrions répéter le processus jusqu'à atteindre l'infini. La séquence ressemblerait à ceci, si nous la limitons au nombre2048

124816326412825651210242048

Pour le rendre un peu meilleur, nous pouvons séparer les chiffres:

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

Essayons une séquence personnalisée plus longue que la date. Disons que nous voulons qu'il ait 5 chiffres - il y a plus d'une possibilité:

  • 24816
  • 81632
  • 64128

Ou à 3 chiffres:

  • 124
  • 248
  • 816

Nous pourrions également ajouter les nombres à 3 chiffres à cela, mais disons qu'une séquence doit avoir au moins deux nombres .

* Il n'y a aucune information à ce sujet sur Wikipedia anglais. Si vous entrez la version polonaise - alors il y en a. Si vous visitez la mine, les ouvriers vous diront également qu'elle a commencé en 1248.

Le défi

Créez une séquence d'exponentiation comme dans les exemples ci-dessus avec 2 comme base.

Étant donné un nombre compris entre 2 et 27, sortez toutes les parties possibles de la séquence (celle de 2048 ou plus si vous le souhaitez) avec un nombre de chiffres égal à l'entrée. Vous ne pouvez pas couper un nombre, la sortie comme 481n'est donc pas valide, car 16 est coupé en deux.

Règles:

  • Les failles standard sont interdites.
  • Vous pouvez supposer que l'entrée est un nombre à l'intérieur de la plage.
  • Votre programme peut accepter des entrées supérieures à la plage (28+), mais cela n'augmentera / ne diminuera pas le score.
  • Les espaces en sortie sont ignorés. Vous pouvez sortir comme 124ou comme 4 8 16.
  • Différentes possibilités doivent être séparées par n'importe quel caractère de la liste: ,./|ou un saut de ligne.
  • Vous pouvez sortir sous forme de tableau.
  • Chaque possibilité doit inclure au moins 2 numéros différents .
  • Vous devez sortir une partie de la séquence, vous ne pouvez pas mélanger des nombres qui ne sont pas côte à côte, comme:14 .
  • La sortie codée en dur n'est pas autorisée, cependant, vous pouvez coder en dur une chaîne / un nombre / un tableau contenant la séquence complète.
  • L'entrée 27 doit renvoyer la séquence 2048 complète.
  • Comme déjà mentionné précédemment, ne coupez pas les chiffres . Ex.16doit rester 16- vous ne pouvez pas utiliser 481- vous devez utiliser 4816.
  • ÉDITER: J'aurais peut-être dit quelque chose de mal là-bas; 2048 est le dernier nombre que votre programme devrait prendre en charge, vous pouvez ajouter la prise en charge des int plus gros.

Cas de test

Contribution: 2

12, 24, 48

Contribution: 3

124, 248, 816

Contribution: 4

1248, 4816, 1632, 3264

Contribution: 5

24816, 81632, 64128

Contribution: 27

124816326412825651210242048

Et des chiffres plus tard ...

Si j'ai fait une erreur dans l'un des cas de test, dites-le-moi ou modifiez la question.


C'est le , donc le code le plus court en octets gagne!

Trèfle rouge
la source
1
Ce n'est donc qu'avec 2 comme base, n'est-ce pas? Pourriez-vous clarifier cela dans la question? Je ne sais pas si c'est sous-entendu par "Séquence d'exponentiations", mais même si c'est le cas, je suis sûr qu'il y a des gens comme moi qui ne le savent pas.
cole
@cole En fait, oui, c'est seulement avec 2. Merci d'avoir mentionné!
RedClover
1
La sortie peut-elle être séparée par une nouvelle ligne?
H.PWiz
1
Pas de soucis; comme je l'ai dit, je le poussais. Certains auteurs de défis peuvent être incroyablement flexibles sur le format de sortie, donc, pour un octet ou 2, cela vaut la peine de le demander;) (Remarque: cela ne doit pas être interprété comme une suggestion!)
Shaggy
1
Dans l'intro, vous devez mettre en majuscule le polonais. "polonais" est un mot anglais différent .
Peter Cordes

Réponses:

7

05AB1E , 12 11 10 octets

Prend en charge la séquence jusqu'à 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Essayez-le en ligne!

Explication

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

1 octet enregistré grâce à Erik the Outgolfer
1 octet enregistré grâce à Riley

Emigna
la source
X›peut être
Erik the Outgolfer
@EriktheOutgolfer: Oh oui. J'oublie toujours qu'il en existe un maintenant. Merci :)
Emigna
Peut- Y₃Ýmêtre ₃Ýo?
Riley
@Riley: Oui. J'avais ça avant, mais pour une raison quelconque, j'ai dû le changer. Merci :)
Emigna
Essayer le code maintenant (bien tard après la fin du défi) ... et votre solution semble me renvoyer des tonnes de tableaux vides ... Suis-je en train de faire quelque chose de mal?
RedClover
6

Pyth, 22 21 20 17 octets

fqQlTjLkt#.:^L2yT

Essayez-le en ligne

Explication

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

la source
21 octets:fqQlTmjkdftlT.:m^2d12
M. Xcoder
19 octets - fqQlTjLkftT.:m^2d12
Jakube
18 octets - fqQlTjLkftT.:^L2yT
Jakube
1
17 octets - fqQlTjLkt #.: ^ L2yT
Jakube
4

Gelée ,  19 18  16 octets

Il peut y avoir une solution plus courte maintenant que nous pouvons utiliser n'importe quelle coupure (pas seulement 2048), bien que cette modification de la spécification ait permis une sauvegarde d'un octet de cette implémentation en passant à une coupure de 32768.
--yep. ..

-2 octets grâce à Erik l'Outgolfer (utilisation de Vpour permettre l'argument droit implicite du filtre et du serrage) -
oui, il est très similaire à son inefficace maintenant;aller voter pour lui !

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

Un lien monadique prenant un numéro et renvoyant une liste de numéros.

Essayez-le en ligne!

Comment?

⁴Ḷ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
la source
1
Est- ce trop similaire au vôtre? (veuillez être honnête: p)
Erik the Outgolfer
Curieusement , je voulais juste utiliser Vet il va travailler pour 16 au lieu de 1000: ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Jonathan Allan
J'y vais le plus: p
Erik the Outgolfer
@EriktheOutgolfer, ils peuvent maintenant être similaires, mais je pense que nous devrions tous les deux les garder Je suis sûr que vous avez trouvé le vôtre indépendamment et je suis sûr que j'aurais aussi trouvé l'astuce eval (puisque je regardais exactement cela , juste besoin pour bien enchaîner).
Jonathan Allan
@EriktheOutgolfer J'ai fait l'hypothèse que vous êtes un homme et préférez être désigné comme tel, mais en réalité je ne sais pas non plus comme un fait; faites-moi savoir si vous préférez un pronom différent!
Jonathan Allan
4

Perl 6 , 62 59 octets

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

Essayez-le en ligne!

nwellnhof
la source
4

Japt , 22 20 19 16 octets

Prend en charge l'entrée jusqu'à 639mais des lacunes commencent à apparaître dans la séquence après 234(voir la liste complète des plages d'entrée prises en charge ici ). Génère un tableau de chaînes.

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

Essaye-le

I(64) pourrait être remplacé par L(100) mais nous entrerions dans la notation scientifique et les inexactitudes de précision. Le fait de les filtrer augmenterait évidemment le nombre d'octets et n'augmenterait que l'entrée maximale à 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
Hirsute
la source
3

Python 2 , 105 octets

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]

Essayez-le en ligne!

Barre
la source
3

Husk , 18 17 octets

La sortie est séparée par des retours à la ligne

fo=⁰LmṁsftQ↑12¡D1

Essayez-le en ligne!

Comment?

           ↑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
la source
3

Gelée , 16 octets

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

Essayez-le en ligne!

Remarque: très inefficace. Renvoie une liste de nombres.

Erik le Outgolfer
la source
Tio ne semble pas être capable d'analyser ce code ... Il dépasse toujours 60 secondes ...
RedClover
1
@Soaku Essayez de remplacer le ȷs (ie 1000) par 20s (limite supérieure inférieure) .
Erik the Outgolfer du
1
@Soaku, cela fonctionne en théorie - il arrive juste à expiration car il est très inefficace.
Jonathan Allan
1
@Soaku, je voulais dire sur mon commentaire. Je les ai déjà remplacés là-bas, et il y a une sortie [12, 24, 48].
Erik the Outgolfer du
1
@Soaku Pourquoi ne pas y aller le plus possible si vous le pouvez sans frais supplémentaires? ;)
Erik the Outgolfer
3

JavaScript (ES7), 102100 octets

Imprime toutes les sous-séquences correspondantes avec 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)))

Démo

NB : Cet extrait met les résultats en mémoire tampon et les imprime sur la console pour plus de convivialité.

Arnauld
la source
3

Haskell , 72 67 octets

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

Essayez-le en ligne!

5 octets enregistrés grâce à Laikoni

J'ai utilisé une limite de 99car 2^99a une longueur > 27.

jferard
la source
Il retourne cependant des cas supplémentaires pour une entrée de 27.
Jonathan Allan
Vous pouvez remplacer 99 par 11, afin qu'il devienne plus valide. Cependant, je n'ai pas déclaré que les nombres> 2048 ne sont pas valides. J'ai seulement déclaré que 2048 est la plage minimale .
RedClover
@JonathanAllan Je pense que c'est toujours correct: "Le 2048 ou plus si vous voulez" J'ai pris la séquence 633825300114114700748351602688, car cela garantit qu'il n'y aura pas d'autre solution (dans la plage 2-27). En fait, je pense qu'une limite de 45 serait suffisante, car length$(show$2^44)++(show$2^45)==28.
jferard
@jferard qui a en fait été modifié après votre réponse (il indiquait en fait "limité à 2048" auparavant). Je peux raccourcir le mien dans ce cas aussi.
Jonathan Allan,
1
@JonathanAllan Oui, j'ai réalisé que certaines des règles de la question sont fausses et trompeuses juste après avoir posté cette réponse.
RedClover
2

Mathematica, 122 octets

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


Contribution

[27]

Production

{879609302220817592186044416, 134217728268435456536870912, 524288104857620971524194304, 163843276865536131072262144, 204840968192163843276865536, 25651210242048121281282081281264

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344
J42161217
la source
2

C, 170 octets

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

Essayez-le en ligne!

Déroulé:

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
la source
1

R , 99 octets

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="")

Essayez-le en ligne!

flodel
la source
1

Perl 5 , 76 octets

75 octets de code + 1 pour -a

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

Essayez-le en ligne!

Xcali
la source
1

Japt, 24 octets

Ne votez pas trop

Maintenant, je me suis rendu compte que c'était la même façon de faire que @Shaggy, mais moins de jouer au golf. (Dois-je supprimer la réponse?)

Après un long moment depuis la publication de cette question, j'ai appris ma première langue de golf. Pour cette raison, j'ai décidé de tenter ma chance ici.

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

Essayez-le en ligne!

Le score n'est pas le meilleur, ce n'est même pas bon, mais cela m'a pris beaucoup de temps .-.

Je perds beaucoup de score, car pour certaines raisons, ã ne peut renvoyer que des tableaux de longueur x ... Cela pourrait même être ~ 10 octets, sinon cela.

Explication:

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
Trèfle rouge
la source
0

Rubis , 94 octets

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

Essayez-le en ligne!

GB
la source