Secuencia de exponenciación

13

La mina de sal polaca más antigua , ubicada en Bochnia *, se inició en el año 1248, que podemos considerar un número mágico . Podemos ver que es igual a 4 dígitos de la secuencia de exponenciación: 2 ^ 0, 2 ^ 1, 2 ^ 2, 2 ^ 3.

Como la fecha es en realidad 4 dígitos de la secuencia, podríamos alargarla. Podríamos repetir el proceso hasta llegar al infinito. La secuencia se vería así, si la limitamos a número2048

124816326412825651210242048

Para que se vea un poco mejor, podemos separar los números:

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

Probemos una secuencia personalizada más larga que la fecha. Digamos que queremos que tenga 5 dígitos; hay más de una posibilidad:

  • 24816
  • 81632
  • 64128

O los de 3 dígitos:

  • 124
  • 248
  • 816

También podríamos agregar los números de 3 dígitos a esto, pero digamos que una secuencia debe tener al menos dos números .

* No hay información sobre esto en la Wikipedia en inglés. Si ingresa la versión polaca, entonces la hay. Si visita la mina, los trabajadores también le dirán que comenzó en 1248.

El reto

Cree una secuencia de exponenciación como en los ejemplos anteriores con 2 como base.

Dado un número del rango 2-27, salida todas las partes posibles de la secuencia (la 2048 o más grande si lo desea) con una cantidad de dígitos igual a la entrada. No puede cortar un número, por lo que la salida como 481no es válida, porque 16 se corta por la mitad.

Reglas:

  • Lagunas estándar están prohibidas.
  • Puede suponer que la entrada es un número dentro del rango.
  • Su programa puede aceptar entradas mayores que el rango (28+), pero eso no aumentará / disminuirá la puntuación.
  • Los espacios en la salida se ignoran. Puede generar like 124o like 4 8 16.
  • Las diferentes posibilidades deben estar separadas por cualquier carácter de la lista: ,./|o un avance de línea.
  • Se puede generar como una matriz.
  • Cada posibilidad debe incluir al menos 2 números diferentes .
  • Debe salida de una parte de la secuencia, no se puede mezclar números que no están uno al lado del otro, como: 14.
  • La salida codificada no está permitida, sin embargo, puede codificar una cadena / número / matriz que contenga la secuencia completa.
  • La entrada 27 debería devolver la secuencia completa de 2048.
  • Como ya se mencionó anteriormente, no corte los números . Ex. 16debe quedarse 16, no puede usar 481, debe usar 4816.
  • EDITAR: Podría haber dicho algo mal allí; 2048 es el último número que su programa debería admitir, puede agregar soporte para int's más grandes.

Casos de prueba

Entrada: 2

12, 24, 48

Entrada: 3

124, 248, 816

Entrada: 4

1248, 4816, 1632, 3264

Entrada: 5

24816, 81632, 64128

Entrada: 27

124816326412825651210242048

Y luego números ...

Si cometí un error en alguno de los casos de prueba, dígame o edite la pregunta.


Este es el , por lo que gana el código más corto en bytes.

Trébol rojo
fuente
1
Entonces esto es solo con 2 como base, ¿correcto? ¿Podría aclarar eso en la pregunta? No estoy seguro de si está implícito en la "Secuencia de exponenciaciones", pero incluso si es así, estoy seguro de que hay personas como yo que no lo saben.
cole
@cole En realidad, sí, es solo con 2. ¡Gracias por mencionarlo!
RedClover
1
¿Se puede separar la salida por nueva línea?
H.PWiz
1
Sin preocupaciones; como dije, lo estaba empujando. Algunos autores reto puede ser increíblemente flexible del formato de salida por lo que, en aras de un byte o 2, vale la pena preguntar;) (Nota: Esto no debe interpretarse como una sugerencia)!
Shaggy
1
En la introducción, debe capitalizar polaco. "polaco" es una palabra diferente en inglés .
Peter Cordes

Respuestas:

7

05AB1E , 12 11 10 bytes

Soporta la secuencia hasta 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Pruébalo en línea!

Explicación

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

Guardado 1 byte gracias a Erik the Outgolfer
Guardado 1 byte gracias a Riley

Emigna
fuente
X›puede ser
Erik the Outgolfer
@EriktheOutgolfer: Oh sí. Siempre olvido que existe uno ahora. Gracias :)
Emigna
Puede Y₃Ýmser ₃Ýo?
Riley
@Riley: Sí. Tenía eso antes, pero por alguna razón debo haberlo cambiado. Gracias :)
Emigna
Probar el código ahora (mucho después del final del desafío) ... y su solución parece devolver toneladas de matrices vacías para mí ... ¿Estoy haciendo algo mal?
RedClover
4

Jalea ,  19 18  16 bytes

Puede haber una solución más corta ahora que podemos usar cualquier límite (no solo 2048), aunque este cambio en la especificación ha permitido un ahorro de un byte de esta implementación al pasar a un límite de 32768.
--yep. ..

-2 bytes gracias a Erik the Outgolfer (uso Vpara permitir el argumento correcto implícito del filtro y el ajuste)
: sí, es muy similar a su ineficiente ahora; ¡Vota el suyo !

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

Un enlace monádico que toma un número y devuelve una lista de números.

Pruébalo en línea!

¿Cómo?

⁴Ḷ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
fuente
1
¿Es esto muy similar al tuyo? (por favor sea honesto: p)
Erik the Outgolfer
Curiosamente sólo estaba tratando de utilizar Vy que va a trabajar para el 16 en lugar de 1000: ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Jonathan Allan
Voy por la mayoría: p
Erik the Outgolfer
@EriktheOutgolfer ahora pueden ser similares, pero creo que ambos debemos mantenerlos. Estoy seguro de que se te ocurrió el tuyo de forma independiente y estoy seguro de que también habría encontrado el truco de evaluación (ya que estaba viendo exactamente eso , solo necesitaba acertar el encadenamiento).
Jonathan Allan
@EriktheOutgolfer He asumido que eres hombre, y prefiero que me llamen así, pero en realidad tampoco lo sé; ¡hágamelo saber si prefiere un pronombre diferente!
Jonathan Allan
4

Japt , 22 20 19 16 bytes

Admite entrada hasta, 639pero las brechas comienzan a aparecer en la secuencia después 234(consulte la lista completa de rangos de entrada admitidos aquí ). Emite una matriz de cadenas.

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

Pruébalo

I(64) podría ser reemplazado por L(100) pero estaríamos entrando en notación científica e inexactitudes de precisión. Filtrarlos, obviamente, aumentaría el recuento de bytes y solo aumentaría la entrada máxima a 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
Lanudo
fuente
3

Casco , 18 17 bytes

La salida está separada por líneas nuevas

fo=⁰LmṁsftQ↑12¡D1

Pruébalo en línea!

¿Cómo?

           ↑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
fuente
3

Jalea , 16 bytes

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

Pruébalo en línea!

Nota: muy ineficiente. Devuelve una lista de números.

Erik el Outgolfer
fuente
Parece que Tio no puede analizar este código ... Siempre excede los 60 segundos ...
RedClover
1
@Soaku funciona en teoría, simplemente se agota porque es muy ineficiente.
Jonathan Allan
1
@Soaku quise decir en mi comentario. Ya los he reemplazado allí, y hay salida [12, 24, 48].
Erik el Outgolfer
1
@Soaku ¿Por qué no ir al máximo si puede sin costo adicional? ;)
Erik the Outgolfer
3

JavaScript (ES7), 102 100 bytes

Imprime todas las subsecuencias coincidentes con 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)))

Manifestación

NB : este fragmento almacena los resultados y los imprime en la consola para facilitar su uso.

Arnauld
fuente
3

Haskell , 72 67 bytes

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

Pruébalo en línea!

Guardado 5 bytes gracias a Laikoni

Usé un límite de 99porque 2^99tiene una longitud > 27.

jferard
fuente
Sin embargo, está devolviendo casos adicionales para una entrada de 27.
Jonathan Allan
Puede reemplazar 99 con 11, por lo que se vuelve más válido. Aunque, no dije que los números> 2048 no son válidos. Solo dije que 2048 es el rango mínimo .
RedClover
@JonathanAllan Creo que sigue siendo correcto: "El 2048 o más grande si quieres" Tomé la secuencia 633825300114114700748351602688, porque garantiza que no habrá otra solución (en el rango 2-27). En realidad, creo que un límite de 45 sería suficiente, porque length$(show$2^44)++(show$2^45)==28.
jferard
@jferard que fue editado después de su respuesta (en realidad decía "limitado a 2048" antes). También puedo acortar el mío en este caso.
Jonathan Allan
1
@ JonathanAllan Sí, en realidad me di cuenta de que algunas de las reglas en la pregunta son incorrectas y engañosas justo después de publicar esta respuesta.
RedClover
2

Mathematica, 122 bytes

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


Entrada

[27]

Salida

{879609302220817592186044416, 134217728268435456536870912, 524288104857620971524194304, 163843276865536131072262144, 204840968192163843276865536, 256512102420484096819216384, 641282565121024204840968192, 163264128256512102420484096, 124816326412825651210242048}

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344
J42161217
fuente
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++);}

Pruébalo en línea!

Desenrollado:

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
fuente
1

R , 99 bytes

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

Pruébalo en línea!

flodel
fuente
1

Perl 5 , 76 bytes

75 bytes de código + 1 para -a

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

Pruébalo en línea!

Xcali
fuente
1

Japt, 24 bytes

No votar

Ahora me di cuenta de que es la misma forma de hacerlo que @Shaggy, solo que menos golf. (¿Debo eliminar la respuesta?)

Después de mucho tiempo desde que publiqué esta pregunta, aprendí mi primer idioma de golf. Debido a esto, decidí probar suerte aquí.

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

Pruébalo en línea!

La puntuación no es la mejor, ni siquiera es buena, pero me llevó mucho tiempo hacer esto.

Pierdo mucho puntaje, porque por alguna razón, ã solo puede devolver matrices de longitud x ... Podría ser incluso ~ 10 bytes, si no es así.

Explicación:

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ébol rojo
fuente