Trình tự lũy thừa


13

Mỏ muối lâu đời nhất của Ba Lan, nằm ở Bochnia *, được bắt đầu vào năm 1248, chúng ta có thể xem xét một con số kỳ diệu . Chúng ta có thể thấy rằng nó bằng 4 chữ số từ chuỗi lũy thừa : 2 ^ 0, 2 ^ 1, 2 ^ 2, 2 ^ 3.

Vì ngày thực sự là 4 chữ số trong chuỗi, chúng tôi có thể làm cho nó dài hơn. Chúng ta có thể lặp lại quá trình cho đến khi chúng ta đạt đến vô tận. Trình tự sẽ như thế này, nếu chúng ta giới hạn nó thành số2048

124816326412825651210242048

Để làm cho nó trông tốt hơn một chút, chúng ta có thể tách các số:

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

Hãy thử một chuỗi tùy chỉnh, dài hơn ngày. Giả sử, chúng tôi muốn nó có 5 chữ số - có nhiều hơn một khả năng:

  • 24816
  • 81632
  • 64128

Hoặc 3 chữ số:

  • 124
  • 248
  • 816

Chúng ta cũng có thể thêm các số có 3 chữ số vào đây, nhưng giả sử, một chuỗi phải có ít nhất hai số .

* Không có thông tin về điều này trên Wikipedia tiếng Anh. Nếu bạn nhập phiên bản tiếng Ba Lan - thì có. Nếu bạn đến thăm mỏ, các công nhân cũng sẽ nói với bạn rằng nó bắt đầu vào năm 1248.

Các thách thức

Tạo một chuỗi lũy thừa như trong các ví dụ ở trên với 2 là cơ sở.

Cho một số từ phạm vi 2-27, xuất tất cả các phần có thể có của chuỗi (2048 một hoặc lớn hơn nếu bạn muốn) với số lượng chữ số bằng với đầu vào. Bạn không thể cắt một số, vì vậy đầu ra như481 không hợp lệ, vì 16 bị cắt làm đôi.

Quy tắc:

  • Lỗ hổng tiêu chuẩn bị cấm.
  • Bạn có thể giả sử đầu vào là một số trong phạm vi.
  • Chương trình của bạn có thể chấp nhận đầu vào lớn hơn phạm vi (28+), nhưng điều đó sẽ không tăng / giảm điểm.
  • Không gian trong đầu ra được bỏ qua. Bạn có thể xuất 124hoặc thích4 8 16 .
  • Các khả năng khác nhau nên được phân tách bởi bất kỳ ký tự nào trong danh sách: ,./| hoặc nguồn cấp dữ liệu.
  • Bạn có thể xuất ra như một mảng.
  • Mỗi khả năng nên bao gồm ít nhất 2 số khác nhau .
  • Bạn phải xuất một phần của chuỗi, bạn không thể trộn các số không nằm cạnh nhau, như : 14.
  • Đầu ra mã hóa cứng không được phép, tuy nhiên, bạn có thể mã hóa chuỗi / số / mảng chứa chuỗi đầy đủ.
  • Đầu vào 27 sẽ trả về chuỗi 2048 đầy đủ.
  • Như đã đề cập trước đó, không cắt giảm số lượng . Ví dụ. 16phải ở lại 16- bạn không thể sử dụng 481- bạn phải sử dụng 4816.
  • EDIT: Tôi có thể đã nói điều gì đó sai ở đó; 2048 là số cuối cùng mà chương trình của bạn sẽ hỗ trợ, bạn có thể thêm hỗ trợ cho int int lớn hơn.

Các trường hợp thử nghiệm

Đầu vào: 2

12, 24, 48

Đầu vào: 3

124, 248, 816

Đầu vào: 4

1248, 4816, 1632, 3264

Đầu vào: 5

24816, 81632, 64128

Đầu vào: 27

124816326412825651210242048

Và những con số sau này ...

Nếu tôi mắc lỗi trong bất kỳ trường hợp kiểm tra nào, hãy cho tôi biết hoặc chỉnh sửa câu hỏi.


Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!


1
Vì vậy, điều này chỉ với 2 là cơ sở, đúng không? Bạn có thể làm rõ điều đó trong câu hỏi? Tôi không chắc liệu nó có ngụ ý "Trình tự lũy thừa" hay không, nhưng ngay cả khi đó là, tôi chắc chắn có những người ngoài kia như tôi không biết điều đó.
cole

@cole Trên thực tế, vâng, chỉ với 2. Cảm ơn đã đề cập!
RedClover

1
Đầu ra có thể được phân tách bằng dòng mới?
H.PWiz

1
Đừng lo lắng; Như tôi đã nói, tôi đã đẩy nó. Một số tác giả thách thức có thể cực kỳ linh hoạt về định dạng đầu ra, vì vậy, vì lợi ích của byte hoặc 2, đáng để hỏi;) (Lưu ý: Điều đó không nên được hiểu là một đề xuất!)
Shaggy

1
Trong phần giới thiệu, bạn nên viết hoa tiếng Ba Lan. "Đánh bóng" là một từ tiếng Anh khác .
Peter Cordes

Câu trả lời:


7

05AB1E , 12 11 10 byte

Hỗ trợ trình tự lên đến 2^95 = 39614081257132168796771975168

₃ÝoŒʒg≠}Jù

Hãy thử trực tuyến!

Giải trình

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

Đã lưu 1 byte nhờ Erik, Outgolfer
Đã lưu 1 byte nhờ Riley


X›có thể
Erik the Outgolfer

@EriktheOutgolfer: Ồ vâng. Tôi luôn quên rằng một người tồn tại bây giờ. Cảm ơn :)
Emigna

Có thể Y₃Ýmđược ₃Ýokhông?
Riley

@Riley: Đúng. Tôi đã có điều đó trước đây, nhưng vì một số lý do tôi phải thay đổi nó. Cảm ơn :)
Emigna

Thử mã ngay bây giờ (rất muộn sau khi kết thúc thử thách) ... và giải pháp của bạn dường như trả lại hàng tấn mảng trống cho tôi ... Tôi có làm gì sai không?
RedClover


4

Thạch ,  19 18  16 byte

Bây giờ có thể có một giải pháp ngắn hơn là chúng tôi có thể sử dụng bất kỳ điểm cắt nào (không chỉ năm 2048), mặc dù thay đổi này đối với đặc điểm kỹ thuật đã cho phép tiết kiệm một byte từ việc triển khai này bằng cách chuyển sang
giới hạn 32768. --yep. ..

-2 byte nhờ Erik Outgolfer (sử dụng Vđể cho phép ẩn đối số đúng của bộ lọc và thắt chặt) - hiện
tại nó rất giống với đối số không hiệu quả của anh ta; đi upvote của mình !

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

Một liên kết đơn âm lấy một số và trả về một danh sách các số.

Hãy thử trực tuyến!

Làm sao?

⁴Ḷ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
này quá giống như của bạn? (xin hãy trung thực: p)
Erik the Outgolfer

Thật thú vị, tôi chỉ đang cố gắng sử dụng Vvà nó sẽ hoạt động trong 16 chứ không phải 1000 : ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf.
Jonathan Allan

Tôi sẽ làm nhiều nhất: p
Erik the Outgolfer

@EriktheOutgolfer bây giờ họ có thể giống nhau nhưng tôi nghĩ rằng cả hai chúng ta nên giữ họ. Tôi chắc chắn rằng bạn đã đến với bạn một cách độc lập và tôi chắc chắn tôi cũng đã tìm thấy mánh khóe (vì tôi đang nhìn chính xác , chỉ cần để có được chuỗi đúng).
Jonathan Allan

@EriktheOutgolfer Tôi đã đưa ra giả định bạn là nam và thích được gọi như vậy, nhưng thực tế không biết là sự thật; hãy cho tôi biết nếu bạn thích một đại từ khác!
Jonathan Allan


4

Japt , 22 20 19 16 byte

Hỗ trợ đầu vào tối đa 639nhưng các khoảng trống bắt đầu xuất hiện trong chuỗi sau 234(Xem danh sách đầy đủ các phạm vi đầu vào được hỗ trợ tại đây ). Xuất ra một chuỗi các chuỗi.

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

Kiểm tra nó

I(64) có thể được thay thế bằng L(100) nhưng chúng ta sẽ đi vào ký hiệu khoa học và độ chính xác không chính xác. Rõ ràng, việc lọc chúng ra sẽ làm tăng số byte và chỉ tăng đầu vào tối đa lên 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

Chồng , 18 tuổi 17 byte

Đầu ra được phân tách bằng dòng mới

fo=⁰LmṁsftQ↑12¡D1

Hãy thử trực tuyến!

Làm sao?

           ↑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

Jelly , 16 byte

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

Hãy thử trực tuyến!

Lưu ý: rất không hiệu quả. Trả về một danh sách các số.


Tio dường như không thể phân tích mã này ... Nó luôn vượt quá 60 giây ...
RedClover


1
@Soaku nó hoạt động trên lý thuyết - nó chỉ hết thời gian vì nó rất không hiệu quả.
Jonathan Allan

1
@Soaku Ý tôi là bình luận của tôi. Tôi đã thay thế chúng ở đó, và có đầu ra [12, 24, 48].
Erik the Outgolfer

1
@Soaku Tại sao không đi nhiều nhất nếu bạn có thể mà không phải trả thêm chi phí? ;)
Erik the Outgolfer

3

JavaScript (ES7), 102 100 byte

In tất cả các chuỗi con phù hợp với 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)))

Bản giới thiệu

Lưu ý : Đoạn mã này đang đệm kết quả và in chúng ra bàn điều khiển để thân thiện với người dùng.


3

Haskell , 72 67 byte

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

Hãy thử trực tuyến!

Đã lưu 5 byte nhờ Laikoni

Tôi đã sử dụng một giới hạn 99bởi vì 2^99có một chiều dài > 27.


Nó trả lại các trường hợp bổ sung cho đầu vào 27 mặc dù.
Jonathan Allan

Bạn có thể thay thế 99 bằng 11, vì vậy nó trở nên hợp lệ hơn . Mặc dù, tôi không nói rằng các số> 2048 là không hợp lệ. Tôi chỉ tuyên bố, năm 2048 là phạm vi tối thiểu .
RedClover

@Jonathan ALLan Tôi nghĩ vẫn đúng: "2048 một hoặc lớn hơn nếu bạn muốn" Tôi đã thực hiện chuỗi 633825300114114700748351602688, vì nó đảm bảo rằng sẽ không có giải pháp nào khác (trong phạm vi 2-27). Trên thực tế, tôi nghĩ rằng một giới hạn 45 sẽ là đủ, bởi vì length$(show$2^44)++(show$2^45)==28.
jferard

@jferard đã thực sự được chỉnh sửa sau câu trả lời của bạn (nó thực sự đã ghi "giới hạn đến 2048" trước đó). Tôi có thể rút ngắn của tôi trong trường hợp này quá.
Jonathan Allan

1
@Jonathan ALLan Vâng, tôi thực sự nhận ra rằng một số quy tắc trong câu hỏi là sai và gây hiểu lầm chỉ sau khi đăng anwer này.
RedClover

2

Toán học, 122 byte

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


Đầu vào

[27]

Đầu ra

Tơ 8

Input [1000]
Output  1441151880758558722882303761517117445764607523034234881152921504606846976230584300921369395246116860184273879049223372036854775808184467440737095516163689348814741910323273786976294838206464147573952589676412928295147905179352825856590295810358705651712118059162071741130342423611832414348226068484722366482869645213696944473296573929042739218889465931478580854784377789318629571617095687555786372591432341913615111572745182864683827230223145490365729367654460446290980731458735308812089258196146291747061762417851639229258349412352483570327845851669882470496714065569170333976494081934281311383406679529881638685626227668133590597632773712524553362671811952641547425049106725343623905283094850098213450687247810566189700196426901374495621121237940039285380274899124224247588007857076054979824844849517601571415210995964968969903520314283042199192993792198070406285660843983859875843961408125713216879677197516879228162514264337593543950336158456325028528675187087900672316912650057057350374175801344

2

C, 170 byte

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

Hãy thử trực tuyến!

Chưa được kiểm soát:

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 byte

Đừng upvote

Bây giờ tôi nhận ra rằng đó là cách làm tương tự như @Shaggy đã làm, chỉ là ít chơi gôn hơn. (Tôi có nên xóa câu trả lời không?)

Sau một thời gian dài kể từ khi đăng câu hỏi này, tôi đã học được ngôn ngữ chơi gôn đầu tiên của mình. Vì điều này, tôi quyết định thử vận ​​may ở đây.

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

Hãy thử trực tuyến!

Điểm số không phải là tốt nhất, nó thậm chí không tốt, nhưng tôi đã mất rất nhiều thời gian để làm điều này .-.

Tôi mất rất nhiều điểm, vì một số lý do, ã chỉ có thể trả về các mảng x dài ... Nó có thể thậm chí ~ 10 byte, nếu không phải vậy.

Giải trình:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.