ค้นหา Serialized Integer


16

งาน

เขียนโปรแกรมที่จะใช้ (เป็นอินพุต) จำนวนเต็มบวก จากนั้นจะนับจากการ0ผนวกแต่ละจำนวนเต็มกับ a Stringต่อเมื่อความยาวของStringน้อยกว่าค่าของอินพุต

เนื่องStringจำนวนเต็มถูกกำหนดให้เป็นจำนวนเต็มเต็มรูปแบบที่มีมูลค่าสูงสุดเป็นของ โดย "เต็มรูปแบบ" จำนวนเต็มไม่ควรมีตัวเลขที่หายไป (ซึ่งจะเกิดขึ้นหากข้อจำกัดความยาวของข้อมูลStringตรงกัน)

เอาต์พุตของโปรแกรมควรเป็นจำนวนเต็มต่อเนื่องสำหรับอินพุตที่เป็นบวกของมัน


กฎระเบียบ

  • มันคือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ!
  • อินพุตจะเป็นค่าบวกเสมอ
  • เอาต์พุตจะต้องเป็นจำนวนเต็มใน base-10 (ฐานสิบ)
  • โปรแกรมจะต้องจัดทำดัชนี 0

ตัวอย่างอินพุต | เอาท์พุต

   5 | 4   (0 1 2 3 4              - Length of 5)
  11 | 9   (0 1 2 3 4 5 6 7 8 9 1  - Length of 11)
  12 | 10  (0 1 2 3 4 5 6 7 8 9 10 - Length of 12)
1024 | 377 (0 1 2 3 4 5 6 7 8 ...  - Length of 1024)

หมายเหตุ (s)


6
กรณีทดสอบที่แนะนำ:11
Rod

@Rod เพิ่มไว้หวังว่ามันจะง่ายต่อการเข้าใจ!
Jacob G.

การเพิ่มเครื่องหมายคำพูดลงในสตริงในตัวอย่างอาจทำให้เข้าใจได้ง่ายขึ้นว่าเป็นสตริง
isaacg

ดังนั้นN-1ตัวเลขแรกของค่าคงที่ Champernowneด้วยค่าที่เติม0ไว้?
Mego

คำตอบ:





5

Japt , 13 ไบต์

1n@P±X l >U}a

ทดสอบออนไลน์!

คำอธิบาย

1n@ P± X l >U}a
1nX{P+=X l >U}a
                   Implicit: U = input integer, P = empty string
  X{         }a    Return the first integer X in [0, 1, 2, ...] that returns a truthy value:
    P+=X             Append X to P.
         l >U        Return P.length > U.
                   This returns the first integer that can't fit into the U-char string.
1n                 Subtract 1 from the result.
                   Implicit: output result of last expression




4

เจลลี่ ,  11 10  9 ไบต์

RD;\L€<⁸S

ลิงก์ monadic ที่ใช้จำนวนเต็มบวกและส่งคืนจำนวนเต็มที่ไม่ใช่ค่าลบ

ลองออนไลน์!

อย่างไร?

การแก้ไข ...

RD;\L€<⁸S - link: number n
R         - range -> [1,2,...10,11,...,n-1]
 D        - convert to decimal (vectorises) -> [[1],[2],...,[1,0],[1,1],...D(n-1)]
   \      - cumulative reduce by:
  ;       -   concatenation -> prefixes i.e.: [[1],[1,2],...,[1,2,...,1,0],[1,2,...,1,0,1,1],[1,2,...,1,0,1,1,...Flattened(D(n))]]
    L€    - length of €ach -> [1,2,3,...,11,13,...,length([1,2,...,1,0,1,1,...Flattened(D(n))])]
       ⁸  - chain's left argument, n
      <   - less than? (vectorises)
        S - sum (yields the number of prefixes that are less than or equal in length to n)
          -   Note: `0` is excluded from the range and all the prefixes, but including
          -         it would mean comparing to n+1 AND decrementing at the end (for a
          -         total cost of a byte)

4

ฉันรักมัน! การใช้การแบ่งส่วนเพื่อเปรียบเทียบนั้นยอดเยี่ยม
isaacg

@isaacg เป็นหนึ่งในสนามกอล์ฟที่ดีของ Pyth (บน) ฉันได้แนวคิดเมื่อเห็นคำตอบของ Neil (การจัดทำดัชนีแทนที่จะแบ่งส่วน แต่เป็นความคิดเดียวกัน) < num seqก็มีประโยชน์มาก
PurkkaKoodari

3

Perl 6 , 36 ไบต์

{(0...^{([~] 0..$^a).comb>$_})[*-1]}

ลองออนไลน์!

  • 0 ...^ {...}คือลำดับของตัวเลขจากศูนย์จนกระทั่งน้อยกว่าหนึ่งซึ่งโค้ดบล็อกในเครื่องหมายวงเล็บปีกกาส่งคืนจริง (...หากไม่มีเครื่องหมายรูปหมวกจะส่งคืนหมายเลขแรกที่บล็อกส่งคืนจริง)
  • [~] 0 .. $^aคือการต่อหมายเลขจาก0สูงถึงหมายเลขปัจจุบัน$^a(พารามิเตอร์ไปยังบล็อคโค้ด)
  • .combคือรายการของอักขระทั้งหมด (หลัก) ในสตริงที่ต่อกัน ตีความว่าเป็นตัวเลขมันประเมินความยาวของสตริง .charsจะดูเป็นธรรมชาติมากกว่าที่จะใช้ที่นี่เนื่องจากมันประเมินโดยตรงกับความยาวของสตริง แต่ชื่อนั้นยาวกว่าหนึ่งตัวอักษร
  • $_ เป็นอาร์กิวเมนต์ของฟังก์ชันระดับบนสุด
  • [*-1] เลือกองค์ประกอบสุดท้ายของรายการที่สร้างขึ้น

2

QBIC , 34 ไบต์

{A=!p$~_lB+A|>:|_xp-1|\B=B+A]p=p+1

คำอธิบาย

{           DO infinitely
A=!p$       Set A$ to p cast to num
            Note that p starts out as 0.
~      >:   IF the input number is exceeded by
 _l   |     the length of
   B+A      A$ and B$ combined
_xp-1|      THEN QUIT, printing the last int successfully added to B$
            The _X operator quits, (possibly) printing something if followed by a-zA-Z
            _x is slightly different, it prints the expression between the operator _x and |
\B=B+A      ELSE add A$ to B$
]           END IF
p=p+1       Raise p, and rerun


2

J, 26 ไบต์

(>i:1:)([:+/\[:>.10^.1+i.)

((>i:1:)([:+/\[:>.10^.1+i.))"0 ] 5 11 12 1024 2000 20000 100000 1000000
4 9 10 377 702 5276 22221 185184




0

Java 8, 64 ไบต์

n->{int i=0;for(String t="0";;t+=++i)if(t.length()>n)return~-i;}

หรือทางเลือกเล็กน้อยที่มีจำนวนไบต์เดียวกัน:

n->{int i=0;for(String t="";;t+=i++)if(t.length()>n)return i-2;}
n->{int i=-1;for(String t="";;t+=++i)if(t.length()>n)return~-i;}

คำอธิบาย:

ลองที่นี่

n->{                  // Method with integer as both parameter and return-type
  int i=0;            //  Integer `i`, starting at 0
  for(String t="0";   //  String, starting at "0"
      ;               //  Loop indefinitely
       t+=++i)        //    After every iteration: append the String with `i+1`
                      //    by first increasing `i` by 1 with `++i`
    if(t.length()>n)  //   If the length of the String is larger than the input:
      return~-i;      //    Return `i-1`
                      //  End of loop (implicit / single-line body)
}                     // End of method


0

ทับทิม 44 ไบต์

แรงบันดาลใจจากคำตอบ JAVA ของ Kevin Cruijssen -4 ไบต์ต้องขอบคุณ G B.

->n{i,t=0,'';t+="#{i+=1}"while t.size<n;i-1}

(i + = 1; t + = i.to_s) เหมือนกับ t + = "# {i + = 1}" ยาวอีก 4 ไบต์เท่านั้น
GB

และถ้าคุณทำอย่างนั้นคุณไม่ต้องการตัวแปร t อีกต่อไปคุณสามารถลบขนาดจาก n แล้วเปรียบเทียบกับ 0
GB

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