Ніхто не знає номерів 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.

Тестові кейси

Введення⟼Вихід

n   ⟼ Length(GAU(n))

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

Це проблема з .
Найкоротший код у байтах виграє.

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


4
Що означає GAU?
Leaky Nun

21
G - це GAU, A і U - просто там без причини

2
До n = 9, довжини є чотиригранними числами, але крім цього багатоцифрові числа перетворюються на просту закриту форму
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 numberприємно
Ерік the Outgolfer


7

Мозок-Флак , 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

Лушпиння , 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

Це здається важким, коли пояснюється лол.


2

J, 24 байти

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

Подібний високорівнева підхід до APL відповіді dzaima в перекладі на J, за виключення обчислює довжину цього числа, перетворюючи його в рядок першого замість того , щоб колоди, і ми отримуємо використовувати гак 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
Халвард Гуммель

@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

Математика, 66 байт

Tr[1^(f=Flatten)[IntegerDigits/@f@(a=Array)[a[#~Table~#&,#]&,#]]]&



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
Луїс Мендо

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)))))))));
Ніл


@ ASCII-тільки я спробував сума продукту , але це було 17 байт: ≔⊕NθIΣEθ×⁻θι×ιLIι. Однак, використовуючи Incrementedзамість InclusiveRangeгоління 4 байти від мого попереднього коментаря!
Ніл


1

[Діалог 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.