Послідовність експоненції


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

Або тризначні:

  • 124
  • 248
  • 816

До цього можна також додати трицифрові числа, але скажімо, що послідовність повинна мати принаймні два числа .

* В англійській Вікіпедії про це немає інформації. Якщо ви введете польську версію - значить, є. Якщо ви відвідаєте шахту, робітники також скажуть вам, що вона почалася в 1248 році.

Змагання

Створіть послідовність експоненції, як у прикладах вище, з базою 2.

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

Правила:

  • Стандартні лазівки заборонені.
  • Можна припустити, що вхід - це число всередині діапазону.
  • Ваша програма може приймати дані, що перевищують діапазон (28+), але це не збільшує / зменшує бал.
  • Проміжки у виході ігноруються. Ви можете виводити подобу 124або подобається 4 8 16.
  • Різні можливості повинні бути відокремлені будь-яким символом зі списку: ,./|або каналом рядка.
  • Ви можете виводити як масив.
  • Кожна можливість повинна містити принаймні 2 різних числа .
  • Ви повинні вихідна частина послідовності, ви не можете змішувати номера, які не поруч один з одним, як: 14.
  • Виведення з жорстким кодом заборонено, проте ви можете жорстко кодувати рядок / число / масив, що містить повну послідовність.
  • Вхід 27 повинен повернути повну послідовність 2048.
  • Як вже було сказано раніше, не скорочуйте числа . Вих. 16Ви повинні залишитися 16- Ви не можете використовувати 481- Ви повинні використовувати 4816.
  • EDIT: я, можливо, сказав щось не так; 2048 - це останнє число, яке повинна підтримувати ваша програма, ви можете додати підтримку більшої кількості int.

Тестові справи

Вхід: 2

12, 24, 48

Вхід: 3

124, 248, 816

Вхід: 4

1248, 4816, 1632, 3264

Вхід: 5

24816, 81632, 64128

Вхід: 27

124816326412825651210242048

А пізніші цифри ...

Якщо я помилився в будь-якому з тестових випадків, скажіть мені або відредагуйте питання.


Це , тому найкоротший код у байтах виграє!


1
Тож це лише 2, як основа, правильно? Чи можете ви уточнити це у запитанні? Я не впевнений, чи мається на увазі це «Послідовність експоненцій», але навіть якщо це так, я впевнений, що там є такі люди, як я, які цього не знають.
cole

@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 байт завдяки Еріку Перевершив
1 байт завдяки Райлі


X›може бути
Ерік Аутгольфер

@EriktheOutgolfer: О так. Я завжди забуваю, що таке існує зараз. Дякую :)
Emigna

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

@Riley: Так. Я мав це раніше, але чомусь я повинен був це змінити. Дякую :)
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
Jakube

18 байт - fqQlTjLkftT.:^L2yT
Jakube


4

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

Зараз може бути коротшим рішенням, коли ми можемо використовувати будь-яке відсічення (не тільки 2048), хоча ця зміна специфікації дозволила зберегти один байт від цієї реалізації, перейшовши на відрізок 32768. -
так. ..

-2 байти завдяки Еріку Атгольферу (використання, 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)
Ерік Переможник

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

Я збираюся найбільше: p
Ерік Перехідник

@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

Спробуйте в Інтернеті!

Примітка: дуже неефективно. Повертає список номерів.


Здається, Тіо не зможе розібрати цей код ... Він завжди перевищує 60 секунд ...
RedClover


1
@Soaku це працює теоретично - це просто час, тому що це дуже неефективно.
Джонатан Аллан

1
@Soaku Я мав на увазі свій коментар. Я вже їх там замінив, і є вихід [12, 24, 48].
Ерік Аутгольфер

1
@Soaku Чому б не поїхати найбільше, якщо можна без зайвих витрат? ;)
Ерік Аутгольфер

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

Демо

Примітка . Цей фрагмент буферизує результати та друкує їх на консолі для зручності використання.


3

Haskell , 72 67 байт

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

Спробуйте в Інтернеті!

Збережено 5 байт завдяки Лайконі

Я використовував обмеження, 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

Математика, 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, 2048409681921638432768655, 2565121024204824242424242448249484,,

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.