ไม่มีใครรู้ว่าตัวเลข GAU


22

ฉันขอแนะนำคุณกับหมายเลข GAU

GAU(1) = 1  
GAU(2) = 1122  
GAU(3) = 1122122333  
GAU(4) = 11221223331223334444  
GAU(6) = 11221223331223334444122333444455555122333444455555666666  
...  
GAU(10) = 11221223331223334444122333444455555122333444455555666666122333444455555666666777777712233344445555566666677777778888888812233344445555566666677777778888888899999999912233344445555566666677777778888888899999999910101010101010101010  

ความท้าทายนี้ค่อนข้างง่าย!

รับจำนวนเต็ม n> 0 ค้นหาจำนวนหลักของ GAU (n)

ตัวอย่าง

มาทำให้GAU (4)
เราทำตามขั้นตอนต่อไปนี้ (จนกว่าเราจะได้ถึง 4) และต่อกัน

[1][122][122333][1223334444]   

คุณต้องเขียนทุก ๆ หลาย ๆ ครั้งตามมูลค่าของมัน แต่คุณต้องนับทุก ๆ ครั้งตั้งแต่ 1

ลองทำGAU (5)
เราจะต้องนับจาก 1 ถึง 1

[1]   

จากนั้นเป็น 1 ถึง 2 (แต่จะซ้ำทุก ๆ หลาย ๆ ครั้งตามค่าของมัน )

[122]     

จากนั้นเป็น 1 ถึง 3

[122333]   

จากนั้นเป็น 1 ถึง 4

[1223334444]    

และในที่สุดจาก 1 ถึง 5 (นี่คือขั้นตอนสุดท้ายเพราะเราต้องการค้นหา GAU ( 5 ))

[122333444455555]     

ตอนนี้เราทำตามขั้นตอนเหล่านี้ทั้งหมดแล้วต่อ
ผลลัพธ์ที่ได้คือ GAU (5)

11221223331223334444122333444455555     

เราสนใจในจำนวนตัวเลขของตัวเลข GAU เหล่านี้

กรณีทดสอบ

Input⟼Output

n   ⟼ Length(GAU(n))

1   ⟼ 1  
2   ⟼ 4  
3   ⟼ 10  
10  ⟼ 230   
50  ⟼ 42190  
100 ⟼ 339240  
150 ⟼ 1295790  

นี่คือความท้าทาย
โค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ

หากคุณยังมีข้อสงสัยโปรดแจ้งให้เราทราบ
ฉันต้องการให้ทุกคนที่นี่เข้าใจรูปแบบที่ซับซ้อนซึ่งซ่อนเร้นนี้


4
GAU หมายถึงอะไร
Leun Nun

21
G สำหรับ GAU, A และ U อยู่ที่นั่นโดยไม่มีเหตุผล

2
จนถึง n = 9 ความยาวคือตัวเลข tetrahedral แต่เกินกว่าที่ตัวเลขหลายหลักจะเข้าสู่รูปแบบปิดที่เรียบง่าย
Miff

FYI กรณีทดสอบของคุณบอกว่าn ⟼ Length(GUA(n))ไม่ใช่ GAU (n)
numbermaniac

2
@numbermaniac ขอบคุณที่จำสิ่งนี้ หมายเลข GUA นั้นแตกต่างกันโดยสิ้นเชิง พวกเขายังไม่ได้คิดค้น!

คำตอบ:


14

SOGL V0.12 , 11 10 8 7 5 ไบต์

∫∫l*+

ลองที่นี่! - สิ่งนี้คาดว่าจะถูกเรียกว่าเป็นฟังก์ชั่นที่มีอินพุตบนสแต็กและกล่องอินพุตว่างเปล่า
7 ไบต์ทางเลือกที่รับอินพุตจากกล่องอินพุต:

0.∫∫l*+

ลองที่นี่!

0      push 0
 .     push the input
  ∫    iterate over a range 1..POP (input) inclusive, pusing the current number
   ∫    iterate over 1..POP (above loops number) inclusive, pusing the current number
    l    push that numbers length without popping the number
     *   multiply the length by the number
      +  add to the zero, or whatever it is now

push that numbers length without popping the numbernice
Erik the Outgolfer


7

Brain-Flak , 166 ไบต์

<>(((()()())({}){})())<>{({}[()]<({}({}<<>({}[()])((){[()](<()>)}{}){{}((((({})({})){}{}){}))<>(({}<({}())>){()<({}[({})])>}{})(<>)}{}<>>({}({})())))>)}{}({}<{}{}{}>)

ลองออนไลน์!

คำอธิบาย

<>(((()()())({}){})())<>           # Initialize second stack with 9 and 10
{({}[()]<                          # Do main loop n times:
  ({}
    ({}
      <
        <>({}[()])                 # Subtract 1 from counter to next power of 10
        ((){[()](<()>)}{}){        # If reached a power of 10 (say, 10^k):
          {}((((({})({})){}{}){})) # Multiply existing (10^k*0.9) by 10 and push twice
          <>                       # On first stack
          (
            ({}<({}())>)           # Increment length of numbers
            {()<({}[({})])>}{}     # Divide length of new set of numbers by this length
          )                        # Add together to get new set of numbers length
        (<>)}  
      {}<>>  
      ({}({})())                   # Add number length to number set length
    )                              # Add number set length to new segment length
  )                                # Add new segment length to total length
>)}                                # End main loop
{}({}<{}{}{}>)                     # Put result on stack by itself






3

Husk , 7 ไบต์

ṁLṁṘNḣḣ

ลองออนไลน์!

คำอธิบาย

          Implicit input, e.g 4
      ḣ   Range from 1 to n                               [1,2,3,4]
     ḣ    Prefixes                                        [[],[1],[1,2],[1,2,3],[1,2,3,4]]
  ṁ       Map and then concatenate
   ṘN     Repeat each number in each list by its index    [[],[1],[1,2,2],[1,2,2,3,3,3],[1,2,2,3,3,3,4,4,4,4]]
                                                          [1,1,2,2,1,2,2,3,3,3,1,2,2,3,3,3,4,4,4,4]
ṁ         Map and then sum
 L        Length (of number: 10 -> 2)                     26

โอ้อีกวิธีแก้ไขปัญหา Husk :) ไม่เห็นการส่งของคุณเมื่อโพสต์ของฉันจำนวนเดียวกัน แต่พวกเขาก็แตกต่างกันพอสมควรดังนั้นฉันจะออกจากที่นี่ด้วย
ბიმო



3

CJam , 20 ไบต์

q~),(\{),{_s,*+}*+}%

ลองออนไลน์!

หมายเลขถูกส่งผ่านในฟิลด์ "อินพุต"

คำอธิบายที่ไม่ถูกปรับแต่ง: (ตัวอย่างอินพุต = 2)

q~),(\{),{_s,*+}*+}%                                             | Stack:
q                     read input as string                       | "2"
 ~                    eval input (add it to stack as integer)    | 2
  )                   add 1                                      | 3
   ,                  range (convert to array with values 0...N) | [0, 1, 2]
    (                 pop first item of array                    | [1, 2] 0
     \                swap top two values of stack               | 0 [1, 2]
      {           }   for each item in array...                  | 0 1
       )              add 1                                      | 0 2
        ,             range (convert to array with values 0...N) | 0 [0, 1]
         {     }      for every element in the array...          | 0 0
          _           duplicate                                  | 0 0 0
           s          convert to string                          | 0 0 "0"
            ,         get length of string                       | 0 0 1
             *        multiply                                   | 0 0
              +       add                                        | 0 1
                *     fold                                       | 0 1
                 +    add                                        | 1
                   %  repeat                                     | 4

ดูเหมือนยากเมื่ออธิบาย lol


2

J, 24 ไบต์

[:+/[:+/\[:(*#@":"0)1+i.

วิธีการระดับสูงคล้ายกับคำตอบ APL dzaima ของการแปลเป็น J (*#@":"0)ยกเว้นเราคำนวณความยาวจำนวนโดยเปลี่ยนมันเป็นสตริงแรกแทนการบันทึกและเราได้รับการใช้เบ็ดของเจคูณความยาวจากจำนวนของตัวเอง: หลังจากนั้นเป็นเพียงผลรวมของผลรวมการสแกน

ลองออนไลน์!


1
1(#.]*#\*#\.)1#@":@+i.ใช้ได้กับ 22 ไบต์
ไมล์

@miles นั่นเป็นคนฉลาด - ฉันใช้เวลาคิดดู การเขียนโปรแกรมใน J มานานเท่าไหร่แล้ว?
โจนาห์

หลังจากฉันเข้าร่วมโค้ดกอล์ฟเล็กน้อย ฉันไม่ได้ใช้มันเพื่อเขียนโปรแกรมจริง ๆ อย่างที่ฉันรู้ว่าจะสามารถอ่านได้ แต่ฉันใช้มันเป็นเครื่องคิดเลขบนเดสก์ท็อปขั้นสูงในตอนนี้และมักจะมีหน้าต่างเปิดอยู่เพื่อคำนวณบางอย่าง
ไมล์

2

R , 39 ไบต์

function(n)sum(nchar(rep(1:n,n:1*1:n)))

ตรวจสอบกรณีทดสอบทั้งหมด!

อัลกอริทึมง่าย ผมสังเกตเป็นส่วนใหญ่ไม่ว่าสำหรับiใน1:n, iซ้ำแล้วซ้ำอีกi*(n-i+1)ครั้ง ดังนั้นฉันจึงสร้างเวกเตอร์นั้นนับจำนวนตัวอักษรในแต่ละตัวแล้วบวกพวกมัน


1

Python 2, 51 50 ไบต์

lambda n:sum(~k*(k-n)*len(`k+1`)for k in range(n))

@LeakyNun ทำไมล่ะ ฉันพัฒนาคำตอบนี้เอง ฉันไม่ได้ตรวจสอบคำตอบอื่น ๆ
orlp

1
สิ่งนี้ไม่ได้ส่งออกคำตอบที่ถูกต้องให้ 0 สำหรับ n = 1, 3 สำหรับ n = 2 และ 14 สำหรับ n = 3
Halvard Hummel

@HalvardHummel โอ๊ะแปะป้ายแล้วลืม +1 แก้ไขแล้ว
orlp

ฉันเห็นว่าในที่สุดคุณก็เข้าใจพ่อ! มีวิธีทดสอบรหัสของคุณทางออนไลน์หรือคำตอบอื่น ๆ ของ Python 2 ครอบคลุมเรื่องนี้ด้วยหรือไม่

1

JavaScript (ES6), 50 42 ไบต์

อัปเดต: ตอนนี้โดยทั่วไปแล้วเป็นพอร์ตของคำตอบอื่น ๆ

f=(n,i=1)=>n&&`${n}`.length*n*i+f(n-1,i+1)

กรณีทดสอบ





1

Japt , 12 11 10 9 ไบต์

õõÈ*sÊÃxx

ลองมันหรือทดสอบตัวเลขทั้งหมด 1-150


คำอธิบาย

Uการป้อนข้อมูลโดยนัยของจำนวนเต็ม

õõ

สร้างอาร์เรย์ของจำนวนเต็มตั้งแต่ 1 ถึงUจากนั้นสร้างอาร์เรย์ย่อยจาก 1 ถึงแต่ละจำนวนเต็ม

È   Ã

ผ่านองค์ประกอบของแต่ละอาร์เรย์ย่อยผ่านฟังก์ชั่น

*sÊ

แปลงองค์ประกอบปัจจุบันเป็นสตริง ( s) รับความยาว ( Ê) และคูณมันด้วยองค์ประกอบ

xx

ลดอาเรย์หลักด้วยการเพิ่มหลังจากทำเช่นเดียวกันกับอาเรย์ย่อยแต่ละอันในครั้งแรก


1

Jq 1.5 , 82 49 43 ไบต์

[range(.)+1|range(.)+1|"\(.)"*.|length]|add

ขยาย

[   range(.)+1        # for i=1 to N
  | range(.)+1        # for j=1 to i
  | "\(.)"*.          # "j" copied j times
  | length            # convert to length
] | add               # add lengths

เรียกใช้ตัวอย่าง

$ jq -Mr '[range(.)+1|range(.)+1|"\(.)"*.|length]|add' <<< "150"
1295790

ลองออนไลน์! ยังjqplay.org


1

ซ้อนกัน , 28 ไบต์

[~>[~>[:rep]"!]"!flat''#`#']

ลองออนไลน์!

บางคนอาจถามว่า "จุดไหนที่ชื่อแทนไม่สามารถอ่านได้" หากนี่ไม่ใกล้คุณจะมีคำจำกัดความที่ "อ่านง่าย" ได้อย่างเสรี

คำอธิบาย

[~>[~>[:rep]"!]"!flat''#`#']    input: N
 ~>[          ]"!               for each number K from 1 to N
    ~>[    ]"!                  for each number J from 1 to K
       :rep                     repeat J J times
                 flat           flatten the resultant array
                     ''#`       join by the empty string
                         #'     get the length of said string


1

C # (. NET Core) , 94 80 74 ไบต์

n=>{int b=0,a=0,i;while(a++<n)for(i=0;i++<a;)b+=(i+"").Length*i;return b;}

ลองออนไลน์!

ฉันหวังว่าจะหาทางออกโดยตรงเช่นอะไร คำตอบของ @ kamoroso94เริ่มต้นขึ้น แต่ก็ยอมแพ้เมื่อฉันใช้เวลามากเกินไป อาจมีวิธีการทำ แต่สูตรต้องปรับเปลี่ยนสำหรับทุกขั้นตอนขนาด

กิตติกรรมประกาศ

บันทึก 14 ไบต์ด้วย @someone

บันทึกไปแล้ว 6 ไบต์ด้วย @Kevin Cruijssen


1
n=>{int b=0,a=0,i;for(;a++<n;)for(i=0;i++<a;)b+=i.ToString().Length*i;return b;} ลองออนไลน์! 80 ไบต์และประสิทธิภาพ
คำสรรพนามของฉันคือ monicareinstate

1
i.ToString()สามารถ(i+"")บันทึกไบต์เพิ่มเติมได้
Kevin Cruijssen

1

MATL , 15 ไบต์

:ttP*Y"10&YlQks

ลองออนไลน์!

คำอธิบาย:

:                range 1:input (implicit input)
 tt              duplicate twice
   P             reverse
    *            multiply elementwise
     Y"          runlength decoding
       10&Yl     log10
            Qk   increment and floor
              s  sum (implicit output)

ลอการิทึมนั้นมีราคาแพง :-) คุณสามารถแทนที่ด้วยการแปลงเป็นสตริงลบช่องว่างความยาว::ttP*Y"VXzn
Luis Mendo

1

Perl 6 , 36 ไบต์

{[+] 1..*Z*($_...1).map:{.chars*$_}}

ทดสอบมัน

ขยาย:

{  # bare block lambda with implicit parameter 「$_」

  [+]               # reduce the following using &infix:«+»

    1 .. *          # Range from 1 to infinity

    Z*              # zip using &infix:«*»

    ( $_ ... 1 )    # sequence from the input down to 1
    .map:           # for each one
    { .chars * $_ } # multiply the number of digits with itself
}

1

ถ่าน , 18 14 ไบต์

IΣE⊕NΣE⊕ι×λLIλ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: การใช้Sumบันทึกฉัน 4 ไบต์ คำอธิบาย:

  E⊕N           Map from 0 to the input (loop variable i)
      E⊕ι       Map from 0 to i (loop variable l)
            Iλ  Cast l to string
           L    Take the length
         ×λ     Multiply by l
     Σ          Sum the results
 Σ              Sum the results
I               Cast to string
                Implicitly print

: | ผลรวมผลรวมตัวเลขในสตริงเมื่อได้รับอาร์กิวเมนต์สตริง
ASCII เท่านั้น

@ ASCII เท่านั้นมันไม่ได้ว่ามันเป็นเพียงแค่การพิมพ์Σแทน ...
นีล

@ ASCII เท่านั้นยังดีที่สุดที่ฉันสามารถทำได้Sumคือ 18 ไบต์:Print(Cast(Sum(Map(InclusiveRange(1, InputNumber()), Sum(Map(InclusiveRange(1, i), Times(l, Length(Cast(l)))))))));
Neil


@ ASCII เท่านั้นฉันพยายามรวมของสินค้า แต่นั่นก็เป็น 17 ≔⊕NθIΣEθ×⁻θι×ιLIιไบต์: อย่างไรก็ตามการใช้IncrementedแทนการInclusiveRangeโกน 4 ไบต์ปิดความคิดเห็นก่อนหน้าของฉัน!
Neil


1

[Dyalog APL], 22 20 ไบต์

{+/≢¨⍕¨↑,/(/⍨¨⍳¨⍳⍵)}

ลองออนไลน์!

คำอธิบาย:

{+/≢¨⍕¨↑,/(/⍨¨⍳¨⍳⍵)}
{                  } anonymous function with right argument named 
                ⍳⍵   range 1 to right arg
              ⍳¨     for each, range 1 to it
             ¨       for each
           /⍨          for each item, repeat right arg left arg times
          (       )  take that and
        ,/           join the sub-arrays together
                    convert from a nested array to a simple array (or something like that, I don't quite understand it :p)
     ⍕¨              convert each number to a char-array (aka string version)
   ≢¨                get length of each
 +/                  sum that together

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