ลำดับการยกกำลัง


13

เหมืองเกลือโปแลนด์ที่เก่าแก่ที่สุดซึ่งตั้งอยู่ที่ Bochnia * เริ่มต้นในปี 1248 ซึ่งเราสามารถพิจารณาตัวเลขมหัศจรรย์ได้ เราจะเห็นว่ามันเป็นเท่ากับ 4 หลักจากลำดับของ exponentiations 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+) ได้ แต่จะไม่เพิ่ม / ลดคะแนน
  • ช่องว่างในเอาต์พุตจะถูกละเว้น คุณสามารถส่งออกเหมือนหรือชอบ1244 8 16
  • ความเป็นไปได้ที่แตกต่างกันควรถูกคั่นด้วยอักขระใด ๆ จากรายการ: ,./|หรือตัวดึงข้อมูลบรรทัด
  • คุณสามารถส่งออกเป็นอาร์เรย์
  • ความเป็นไปได้ทุกคนควรจะมีอย่างน้อย 2 หมายเลขที่แตกต่างกัน
  • คุณต้องส่งออกเป็นส่วนหนึ่งของลำดับคุณไม่สามารถผสมตัวเลขที่ไม่ได้ติดกันอื่น ๆ 14เช่น:
  • ไม่อนุญาตให้ใช้เอาต์พุต Hardcoded อย่างไรก็ตามคุณสามารถเข้ารหัสสตริง / หมายเลข / อาร์เรย์ที่มีลำดับแบบเต็มได้
  • ข้อมูลเข้า 27 ควรกลับมาตามลำดับ 2048 เต็ม
  • ดังกล่าวแล้วก่อนที่จะทำตัวเลขไม่ได้ตัด อดีต 16ต้องอยู่16- คุณไม่สามารถใช้481- 4816คุณต้องใช้
  • แก้ไข:ฉันอาจจะพูดอะไรผิดไปที่นั่น; 2048 เป็นหมายเลขสุดท้ายที่โปรแกรมของคุณควรสนับสนุนคุณสามารถเพิ่มการสนับสนุนสำหรับ int ที่ใหญ่ขึ้น

กรณีทดสอบ

การป้อนข้อมูล: 2

12, 24, 48

การป้อนข้อมูล: 3

124, 248, 816

การป้อนข้อมูล: 4

1248, 4816, 1632, 3264

การป้อนข้อมูล: 5

24816, 81632, 64128

การป้อนข้อมูล: 27

124816326412825651210242048

และตัวเลขต่อมา ...

หากฉันทำผิดพลาดในกรณีทดสอบใด ๆ ให้บอกฉันหรือแก้ไขคำถาม


นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!


1
ดังนั้นนี่เป็นเพียง 2 เป็นฐานถูกต้องหรือไม่ คุณช่วยอธิบายได้ไหมในคำถาม ฉันไม่แน่ใจว่ามันบอกเป็นนัยโดย "Sequence of Exponentiations" แต่แม้ว่ามันจะเป็นจริงฉันแน่ใจว่ามีคนที่นั่นเหมือนฉันที่ไม่รู้ตัว
โคล

@ โคลจริงแล้วใช่มันเป็นเพียง 2 ขอบคุณสำหรับการพูดถึง!
RedClover

1
สามารถแยกเอาต์พุตด้วยการขึ้นบรรทัดใหม่ได้หรือไม่
H.PWiz

1
ไม่ต้องห่วง; เหมือนที่ฉันพูดฉันกำลังผลักดันมัน ผู้เขียนที่ท้าทายบางคนสามารถมีความยืดหยุ่นอย่างไม่น่าเชื่อในรูปแบบผลลัพธ์ดังนั้นเพื่อ byte หรือ 2 ก็คุ้มค่าถาม;) (หมายเหตุ: ไม่ควรตีความว่าเป็นข้อเสนอแนะ!)
Shaggy

1
ในบทนำคุณควรใช้ประโยชน์จากภาษาโปแลนด์ "polish" เป็นคำภาษาอังกฤษอื่น
Peter Cordes

คำตอบ:


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›สามารถ
Erik the Outgolfer

@EriktheOutgolfer: โอ้ใช่แล้ว ฉันมักจะลืมว่ามีอยู่ตอนนี้ ขอบคุณ :)
Emigna

สามารถY₃Ýmเป็น₃Ýo?
Riley

@Riley: ใช่ ฉันเคยเป็นแบบนั้นมาก่อน แต่ด้วยเหตุผลบางอย่างฉันต้องเปลี่ยนมัน ขอบคุณ :)
Emigna

ลองใช้รหัสตอนนี้ (ช้ามากหลังจากการท้าทายสิ้นสุด) ... และวิธีแก้ปัญหาของคุณดูเหมือนจะส่งคืนอาร์เรย์ว่างเปล่าจำนวนมากสำหรับฉัน ... ฉันกำลังทำอะไรผิดหรือเปล่า?
RedClover


4

เยลลี่ ,  19 18  16 ไบต์

อาจมีวิธีแก้ปัญหาที่สั้นกว่าตอนนี้ที่เราอาจใช้การตัด (ไม่ใช่แค่ปี 2048) ถึงแม้ว่าการเปลี่ยนแปลงข้อกำหนดนี้อนุญาตให้บันทึกหนึ่งไบต์จากการดำเนินการนี้โดยการย้ายไปยังการตัด
32768 ..

-2 ไบต์ต้องขอบคุณErik the Outgolfer (ใช้Vเพื่ออนุญาตอาร์กิวเมนต์ที่ถูกต้องโดยนัยของตัวกรองและการทำให้รัดกุม) -
ใช่แล้วมันคล้ายกันมากกับประสิทธิภาพที่ไม่มีประสิทธิภาพของเขาในตอนนี้ ลงคะแนนโหวตเขา !

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

ลิงก์ monadic ที่ใช้ตัวเลขและส่งคืนรายการตัวเลข

ลองออนไลน์!

อย่างไร?

⁴Ḷ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)
Erik the Outgolfer

ขันพอผมก็แค่พยายามที่จะใช้Vและมันจะทำงานเป็นเวลา 16 มากกว่า ⁴Ḷ2*Ẇṫ17VDL$⁼¥Ðf1000
Jonathan Allan

ฉันจะทำให้ดีที่สุด: p
Erik the Outgolfer

@EriktheOutgolfer ตอนนี้พวกเขาอาจจะคล้ายกัน แต่ฉันคิดว่าเราควรให้พวกเขาทั้งสองฉันแน่ใจว่าคุณมากับคุณอย่างอิสระและฉันแน่ใจว่าฉันได้พบเคล็ดลับ eval เกินไป (ตั้งแต่ฉันกำลังมองว่า เพียงแค่ต้องการรับสายที่ถูกต้อง)
Jonathan Allan

@EriktheOutgolfer ฉันได้ตั้งสมมติฐานว่าคุณเป็นเพศชายและชอบที่จะเรียกเช่นนี้ แต่จริง ๆ แล้วไม่ทราบว่าเป็นความจริง แจ้งให้เราทราบหากคุณต้องการสรรพนามอื่น!
Jonathan Allan


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

Husk , 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
@ โซกุทำงานได้ในเชิงทฤษฎี - มันเพิ่งหมดเวลาเพราะมันไม่มีประสิทธิภาพมาก
Jonathan Allan

1
@ Soaku ฉันหมายถึงความคิดเห็นของฉัน [12, 24, 48]ฉันได้เปลี่ยนไปแล้วพวกเขามีและมีการส่งออก
Erik the Outgolfer

1
@Soaku ทำไมไม่ไปให้มากที่สุดถ้าคุณสามารถโดยไม่มีค่าใช้จ่ายเพิ่มเติม? ;)
Erik the 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)))

การสาธิต

หมายเหตุ : ตัวอย่างนี้กำลังบัฟเฟอร์ผลลัพธ์และพิมพ์ไปยังคอนโซลเพื่อให้ใช้งานง่าย


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 แม้ว่า
Jonathan Allan

คุณสามารถแทนที่ 99 ด้วย 11 ดังนั้นมันจึงมีความถูกต้องมากขึ้น แม้ว่าฉันไม่ได้ระบุว่าหมายเลข> 2048 ไม่ถูกต้อง ฉันระบุเท่านั้นว่า 2048 เป็นช่วงต่ำสุด
RedClover

@JanathanAllan ฉันคิดว่ามันยังถูกต้อง: "2048 หนึ่งหรือใหญ่กว่าถ้าคุณต้องการ" ฉันใช้ลำดับ 633825300114114700748351602688 ลำดับเพราะรับประกันได้ว่าจะไม่มีทางออกอื่น (ในช่วง 2-27) อันที่จริงผมคิดว่าวงเงิน 45 length$(show$2^44)++(show$2^45)==28จะเพียงพอเพราะ
jferard

@ jferard ที่แก้ไขจริงหลังจากคำตอบของคุณ (ระบุว่า "จำกัด เพียง 2048" ก่อน) ฉันสามารถร่นของฉันในกรณีนี้ได้เช่นกัน
Jonathan Allan

1
@JanathanAllan ใช่ฉันรู้จริงว่ากฎบางข้อในคำถามนั้นผิดและทำให้เข้าใจผิดหลังจากโพสต์คำแนะนำนี้
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

ลองออนไลน์!

คะแนนไม่ดีที่สุดมันไม่ได้ดี แต่ใช้เวลามากในการทำเช่นนี้ -

ฉันเสียคะแนนไปเยอะเพราะด้วยเหตุผลบางอย่างã can สามารถคืนค่าอาร์เรย์ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.