Последовательность экспонирования


13

Старейшая польская соляная шахта, расположенная в Бохне *, была основана в 1248 году, что можно считать магическим числом . Мы можем видеть , что он равен 4 цифры от последовательности возведения в степень: 2 ^ 0, 2 ^ 1, 2 ^ 2, 2 ^ 3.

Поскольку дата на самом деле составляет 4 цифры из последовательности, мы можем сделать ее длиннее. Мы могли бы повторить процесс, пока не достигнем бесконечности. Последовательность будет выглядеть так, если мы ограничим ее числом2048

124816326412825651210242048

Чтобы это выглядело немного лучше, мы можем разделить числа:

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

Давайте попробуем пользовательскую, более длинную последовательность, чем дата. Допустим, мы хотим, чтобы он имел 5 цифр - существует более одной возможности:

  • 24816
  • 81632
  • 64128

Или 3 цифры:

  • 124
  • 248
  • 816

Мы могли бы также добавить к этому 3-значные числа, но, скажем, последовательность должна иметь как минимум два числа .

* В английской Википедии нет информации об этом. Если вы вводите польскую версию - то есть. Если вы посетите шахту, рабочие также скажут вам, что она началась в 1248 году.

Соревнование

Создайте последовательность возведения в степень, как в примерах выше, с основанием 2.

Учитывая число в диапазоне 2-27, выведите все возможные части последовательности (2048 или больше, если хотите) с количеством цифр, равным вводу. Вы не можете вырезать число, поэтому вывод вроде 481недопустим, потому что 16 разрезается пополам.

Правила:

  • Стандартные лазейки запрещены.
  • Вы можете предположить, что ввод - это число внутри диапазона.
  • Ваша программа может принимать входные данные, превышающие диапазон (28+), но это не увеличит / уменьшит оценку.
  • Пробелы в выходных данных игнорируются. Вы можете выводить как 124или как 4 8 16.
  • Различные возможности должны быть отделены любым символом из списка: ,./|или переводом строки.
  • Вы можете вывести в виде массива.
  • Каждая возможность должна включать как минимум 2 разных номера .
  • Вы должны выходная часть последовательности, вы не можете смешивать номера, которые не рядом друг с другом, как: 14.
  • Жестко закодированный вывод не разрешен, однако вы можете жестко закодировать строку / число / массив, содержащий полную последовательность.
  • Вход 27 должен возвращать полную последовательность 2048.
  • Как уже упоминалось ранее, не сокращайте числа . Ex. 16должен остаться 16- ты не можешь использовать 481- ты должен использовать 4816.
  • РЕДАКТИРОВАТЬ: Я мог бы сказать что-то не так там; 2048 - это последний номер, который должна поддерживать ваша программа, вы можете добавить поддержку для больших целых чисел.

Контрольные примеры

Входные данные: 2

12, 24, 48

Входные данные: 3

124, 248, 816

Входные данные: 4

1248, 4816, 1632, 3264

Входные данные: 5

24816, 81632, 64128

Входные данные: 27

124816326412825651210242048

А потом цифры ...

Если я допустил ошибку в каком-либо из тестовых случаев, сообщите мне или отредактируйте вопрос.


Это , поэтому выигрывает самый короткий код в байтах!


1
Так что это только с 2 в качестве базы, правильно? Не могли бы вы уточнить это в вопросе? Я не уверен, подразумевается ли это под «Последовательностью выражений», но даже если это так, я уверен, что есть такие люди, как я, которые этого не знают.
Коул

@cole На самом деле, да, это только с 2. Спасибо за упоминание!
RedClover

1
Можно ли разделить вывод новой строкой?
H.PWiz

1
Не стоит беспокоиться; как я уже сказал, я толкал это. Некоторые авторы испытаний могут быть невероятно гибкими в выходном формате, поэтому, ради байта или 2, стоит спросить;) (Примечание: это не следует интерпретировать как предложение!)
Shaggy

1
Во вступлении вы должны использовать польский язык. «польский» это другое английское слово .
Питер Кордес

Ответы:


7

05AB1E , 12 11 10 байт

Поддерживает последовательность до 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Попробуйте онлайн!

объяснение

₃Ý            # 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 байт благодаря Erik the Outgolfer.
1 байт благодаря Riley.


X›может быть
Эрик Outgolfer

@EriktheOutgolfer: О да. Я всегда забываю, что один существует сейчас. Спасибо :)
Emigna

Может Y₃Ýmбыть ₃Ýo?
Райли

@ Райли: Да. У меня было это раньше, но по какой-то причине я, должно быть, изменил это. Спасибо :)
Emigna

Попробуй код сейчас (очень поздно после завершения вызова) ... и, похоже, твое решение возвращает мне тонны пустых массивов ... Я что-то не так делаю?
RedClover

6

Pyth, 22 21 20 17 байт

fqQlTjLkt#.:^L2yT

Попробуйте онлайн

объяснение

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

21 байт:fqQlTmjkdftlT.:m^2d12
г-н Xcoder


19 байтов - fqQlTjLkftT.:m^2d12
Якуб

18 байт - fqQlTjLkftT.:^L2yT
Якуб

1
17 байт - fqQlTjLkt #.: ^ L2yT
Якуб

4

Желе ,  19 18  16 байтов

Теперь может быть более короткое решение, когда мы можем использовать любое отсечение (не только 2048), хотя это изменение спецификации позволило сэкономить один байт из этой реализации, перейдя к отсечке 32768. -
Да. ..

-2 байта благодаря Эрику Outgolfer (использование, Vчтобы позволить неявный правильный аргумент фильтра и ужесточения) -
да, это очень похоже на его неэффективный в настоящее время; давай голосуй его !

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

Монадическая ссылка, принимающая число и возвращающая список чисел.

Попробуйте онлайн!

Как?

⁴Ḷ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
Является ли это слишком похожа на вашу? (пожалуйста, будьте честны: p)
Эрик Outgolfer

Достаточно странно , но я просто пытался использовать , Vи он будет работать на 16 , а не 1000: ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Джонатан Аллан

Я собираюсь больше всего: p
Эрик Outgolfer

@EriktheOutgolfer теперь они могут быть похожими, но я думаю, что мы оба должны держать их. Я уверен, что вы придумали свой самостоятельно, и я уверен, что я нашел бы и уловку eval (так как я смотрел именно на это , просто нужно, чтобы получить правильную цепочку).
Джонатан Аллан

@EriktheOutgolfer Я сделал предположение, что вы мужчина и предпочитаете, чтобы вас называли таковым, но на самом деле не знаю ни как факт; дайте мне знать, если вы предпочитаете другое местоимение!
Джонатан Аллан


4

Japt , 22 20 19 16 байт

Поддерживает ввод до, 639но пропуски начинают появляться в последовательности после 234(см. Полный список поддерживаемых диапазонов ввода здесь ). Выводит массив строк.

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

Проверь это

I(64) можно заменить на L(100), но мы будем вдаваться в неточности научных обозначений и точности. Очевидно, что их фильтрация увеличит количество байтов и увеличит только максимальный ввод 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

Шелуха , 18 17 байт

Вывод разделен переводом строки

fo=⁰LmṁsftQ↑12¡D1

Попробуйте онлайн!

Как?

           ↑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

Желе , 16 байт

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

Попробуйте онлайн!

Примечание: очень неэффективно. Возвращает список чисел.


Кажется, что Tio не может разобрать этот код ... Он всегда превышает 60 секунд ...
RedClover


1
@ Соаку это работает в теории - это просто время ожидания, потому что это очень неэффективно.
Джонатан Аллан

1
@ Соаку, я имел в виду мой комментарий. Я уже заменил их там, и есть выход [12, 24, 48].
Эрик Outgolfer

1
@ Soaku Почему бы не пойти на максимум, если вы можете без дополнительных затрат? ;)
Эрик Outgolfer

3

JavaScript (ES7), 102 100 байт

Печатает все соответствующие подпоследовательности с 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)))

демонстрация

NB . Этот фрагмент буферизует результаты и выводит их на консоль для удобства пользователя.


3

Haskell , 72 67 байт

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

Попробуйте онлайн!

Сохранено 5 байтов благодаря Laikoni

Я использовал предел, 99потому что 2^99имеет длину > 27.


Он возвращает дополнительные случаи для ввода 27, хотя.
Джонатан Аллан

Вы можете заменить 99 на 11, чтобы он стал более действительным. Хотя я не утверждал, что числа> 2048 недействительны. Я только заявил, что 2048 - это минимальный диапазон.
RedClover

@JonathanAllan Я думаю, что все еще правильно: «2048 или больше, если хотите», я взял последовательность 633825300114114700748351602688, потому что она гарантирует, что не будет никакого другого решения (в диапазоне 2-27). На самом деле, я думаю, что 45 предел будет достаточно, потому что length$(show$2^44)++(show$2^45)==28.
jferard

@jferard, который был фактически отредактирован после вашего ответа (на самом деле он говорил «ограничено 2048» раньше). Я тоже могу сократить свой в этом случае.
Джонатан Аллан

1
@JonathanAllan Да, я действительно понял, что некоторые правила в этом вопросе неверны и вводят в заблуждение сразу после публикации этого ответа.
RedClover

2

Mathematica, 122 байта

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


вход

[27]

Выход

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

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344

2

C 170 байт

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

Попробуйте онлайн!

раскатали:

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 байта

Не голосуйте

Теперь я понял, что это то же самое, что и @Shaggy, но меньше в гольфе. (Должен ли я удалить ответ?)

Через некоторое время после публикации этого вопроса я выучил свой первый язык игры в гольф. Из-за этого я решил попытать счастья здесь.

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

Попробуйте онлайн!

Счет не лучший, он даже не хороший, но мне потребовалось много времени, чтобы сделать это.

Я теряю много очков, потому что по ряду причин ã может возвращать только массивы x длины ... Это может быть даже ~ 10 байт, если не это.

Объяснение:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.