Знайдіть найменше число, що перевищує вхід, цифрова сума якого є входом


28

"Цифрова сума" означає суму всіх цифр у числі.

Наприклад, цифрова сума 1324є 10, тому що 1+3+2+4 = 10.

Завдання полягає в тому, щоб написати програму / функцію для обчислення найменшого числа, що перевищує вхід, цифровою сумою якого є вхід.

Приклад із покроковою інструкцією

Як приклад, візьміть число 9як вхідне:

9 = 1+8 -> 18
9 = 2+7 -> 27
9 = 3+6 -> 36
...
9 = 8+1 -> 81
9 = 9+0 -> 90

Дійсний висновок був би найменшим числом вище, яке є 18.

Технічні характеристики

Зверніть увагу, що 9це невірний вихід для цього прикладу, тому що перевернуте число повинно бути більше, ніж початкове число.

Зауважте, що введення буде позитивним.

Випробування:

 2 => 11      (2 = 1 + 1)
 8 => 17      (8 = 1 + 7)
12 => 39     (12 = 3 + 9)
16 => 79     (16 = 7 + 9)
18 => 99     (18 = 9 + 9)
24 => 699    (24 = 6 + 9 + 9)
32 => 5999   (32 = 5 + 9 + 9 + 9)

Список літератури:

Це OEIS A161561 .

Редагувати: Додано додатковий тестовий зразок (18)

Дякуємо Мартіну Ендерові за фрагмент лідерів

var QUESTION_ID=81047,OVERRIDE_USER=31373;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


11
Ця назва зачепила мій мозок.
Фаталізувати

Відповіді:


4

05AB1E, 19 17 8 байт

Код:

[>DSO¹Q#

Пояснили:

[            # start infinite loop
 >           # increase loop variable, will initially be input
  DSO        # make a copy and sum the digits
     ¹Q#     # if it equals the input, break
             # else return to start of loop
             # implicitly print

Спробуйте в Інтернеті

Редагувати: Збережено 9 байт завдяки @Adnan


4
SO- це коротший спосіб отримати суму цифр (замість J`)O). Також без змінних призначень можна обійтися [>DSO¹Q#:).
Аднан

2
@Adnan. Приємно! Я повністю пропустив С. Повинен зрозуміти, що мені не потрібні змінні.
Емінья

14

Python 2, 33 байти

lambda n:[n+9,`n%9`+n/9*'9'][n>9]

Прямий вираз. Створює числовий рядок з 9 у кінці, а решта на початку. За винятком однозначних n, дає n+9.

Деякі виходи мають провідні нулі ( 099для 18).


7

Сітківка , 39 31 байт

r`1{1,9}
$.&
T`d`_d`^.$
^.$
1$&

Здійснює введення в одинаковому режимі .

Спробуйте в Інтернеті! (Перші два рядки дозволяють запускати кілька тестових випадків одночасно та перетворювати з десяткової в одинарну для зручності.)

Це насправді не шукає результат лінійно, але обчислює його явно:

  • Якщо вхідний показник nбільший за 9, ми замінюємо його n % 9наступними n / 9(поповненими) дев'ятьма.
  • В іншому випадку ми замінимо його n + 9.

Використовуючи !(або що-небудь інше, що не є 1) як одинарну цифру, я можу зберегти ще один байт за допомогою наступного підходу:

^!(?!!{9})
1
r`!{0,9}
$.&
0\B

Але я думаю, що цей формат введення трохи розтягнутий.


Отже, Retina не дозволить вводити Integer або просто не може обробити арифметику Integer?
левант

@levanth У Retina взагалі немає арифметики - вся мова заснована на обробці рядків за допомогою регулярних виразів, тому вся арифметика зазвичай виконується на одинарних поданнях. Сітківка може прийняти десятковий цілочисельний вхід і перетворити його в одинаковий спочатку, але це коштує 6 додаткових байтів, і наша політика дозволяє неперевірити введення, якщо в виклику не вказано десяткове. (Якщо ви бажаєте вимагати, щоб усі відповіді взяли десятковий ввід, сміливо скажіть це у специфікації, і я оновлю свою відповідь.)
Мартін Ендер

ні, ні гаразд ^^ Мені просто цікаво було про одинарне введення
левант


6

Java 7, 68 61 байт

int f(int n){return n>9?-~(n%9)*(int)Math.pow(10,n/9)-1:n+9;}

Здійснює приблизно те ж саме, що і багато інших відповідей тут. Хотів показати підхід Java без використання рядкових маніпуляцій та циклів.

Дякую FryAmTheEggman за те, що він нагадав мені, що я німий;)


Принаймні, ви перевершили SQL?
Rɪᴋᴇʀ

Мех, лише удвічі більший, ніж більшість відповідей пітона / рубіну, тому я не відчуваю себе занадто погано для Java. Було б непогано перемогти C, хоча: P
Geobits

: / На жаль, дістав це з блоку мого класу. Я, мабуть, в цьому іржавий.
Геобіц

@Geobits Це, мабуть, обіграє C--.
gcampbell

@Fry Повністю забув про цей трюк. Дякую, що поставило мене попереду С, принаймні;)
Геобіт

3

MATL , 10 9 байт

`QtV!UsG-

Спробуйте в Інтернеті!

Пояснення

`        % Do...while
  Q      %   Add 1. Takes input implicitly the first time
  t      %   Duplicate
  V!Us   %   To string, transpose, to number, sum. Gives sum of digits
  G-     %   Subtract input. If 0, the loop ends and the stack is implicitly displayed

1
Розумне використання V!U+1 від мене. Це повинно входити до нашого списку ідіом MATL.
Suever

@Suever Так, він звикає досить часто
Луїс Мендо

3

JavaScript (ES7), 32 байти

n=>(n%9+1)*10**(n/9|0)-(n>9||-8)

38 байт як ES6:

n=>parseFloat(n%9+1+'e'+n/9)-(n>9||-8)

3

Пітон 3, 128 94 84 74 байт

Без виходу, прямого підходу, початкового кодексу;

def r(n):
 m=n
 while 1:
  m+=1
  if sum(map(int,str(m)))==n:return(m)

1
Для початку є багато місця, яке можна видалити. Перед / після = + (), наприклад.
Емінья

1
Також ви можете замінити print(m)на return m(не зберігає жодних байтів, але не потрібно друкувати в самій функції). Ви все ще можете надрукувати вихідну функцію повернення, print(r(n))щоб перевірити свою функцію
липень

1
Ви також можете видалити багато нових рядків; m=n+1;f=1іif s==n:f=0
Блакитний

1
Замінивши друк поверненням, ви можете зробити це безпосередньо в операторі if і видалити f, а також оператор else.
Емінья

2
Ви все одно можете видалити f і просто використовувати в той час, як 1: а також видалити пробіл між int (c) та for
Emigna


2

C 73 65 байт

Макрос з функцією помічника.

e(y){return y?10*e(y-1):1;}
#define F(n) n<9?n+9:(1+n%9)*e(n/9)-1

eФункція просто обчислює повноваження десяти, а Fмакрос використовує той же метод , як Вирішуючи цей рубін , і цей пітон відповіді. на жаль, вона довша приблизно тієї ж довжини, що і обидва ці відповіді. Але це перша відповідь С.

(8 байтів збережено за допомогою хитрості видалення Лінни int.)


Ви можете скинути обидва випадки int, заощадивши 8 байт.
Лінн

2

Брахілог , 8 байт ( неконкурентоспроможний )

<.=:ef+?

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

Пояснення

<.       Output > Input
  =      Label the Output (i.e. unify it with an integer)
   :ef   Get the list of digits of the Output
      +? Input is the sum of all those digits

Це буде відслідковуватися =до тих пір, поки значення Output не зробить цей предикат справжнім.



1

Python 2, 39 байт

lambda n:[n+9,(1+n%9)*10**(n/9)-1][n>9]

Чиста ціла арифметика.

Повна програма з виходом

f=lambda n:[n+9,(1+n%9)*10**(n/9)-1][n>9]

print(f(2))
print(f(8))
print(f(12))
print(f(16))
print(f(17))
print(f(18))
print(f(24))
print(f(32))

Вихід:

11
17
39
79
89
99
699
5999

Мені подобається, як ця рецептура уникає провідного нуля.
Ніл

@Neil інший міг уникнути цього, використовуючиeval
Blue

1

PowerShell v2 +, 62 байти

param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-ne$n;$a++){}$a

Займає введення, $nпотім виконує forцикл. Ми ініціалізуємо цикл, встановивши наш цільовий номер, $aщоб він був більшим, ніж $n(оскільки він повинен бути більшим, плюс це забезпечує 1..9правильну роботу). Кожну петлю нарощуємо $a++. У циклі нічого не відбувається, але умовно - це те, де відбувається логіка програми. Ми буквально приймаємо цільове число як рядок, відкидаючи його як масив char, -joinобчислюючи масив, +а потім перекладаючи на нього iex(аналогічно eval). Ми перевіряємо, чи дорівнює це нашому вхідному чи ні, і продовжуємо циклічно відповідно. Після того, як ми вийшли з циклу, ми дійшли до місця, де наш цільовий номер дорівнює цифрі, що дорівнює нашому вхідному номеру, тому $aвін розміщується на конвеєрі, а вихід непрямий.


Для довідки, ось метод "побудувати рядок з відповідною кількістю 9", який зробили інші люди, у 67 байт

param($n)(($n+9),(+(""+($n%9)+'9'*(($n/9)-replace'\..*'))))[$n-gt9]

або "чиста ціла арифметична" методика, яку зробили інші люди, в 70 байт

param($n)(($n+9),("(1+$n%9)*1e$(($n/9)-replace'\..*')-1"|iex))[$n-gt9]

Жоден з них не коротший, але обидва цікавіші.


Ви можете зберегти 3 байти:param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
mazzy

1

Pyke, 9 8 7 байт, не конкуруючий - використовує більш нову версію

.fhsq)h

Спробуйте тут!

.f      - first where true:
  h     - n+1
   sq    - digital_root(^) == input()
      h - that number +1

Перевірений знову, ваше рішення дає не правильний вихід для входів 1 - 8
лева

Я думаю, що я його зламав ... Працює за винятком номера 1. До речі, чому Missing arg to Equals, evaling inputприходить? Я маю на увазі, що я даю йому вхідне число
лева

@levanth Це відбувається тому, що за замовчуванням веб-інтерфейс увімкнено попередження. Я щойно зашифрував спосіб вимкнути це (як 10 хвилин тому). Щодо того, чому це не спрацювало для 1, я перевіряв, чи не перевищує їх число 10, а чи триває це так.
Блакитний

1

JavaScript (ES2015), 45 39 33 байти

Збережено ще 6 байт завдяки @Conor O'Brien та @Shaun H.
Я думаю, що я залишу це так, як є, тому що ця версія відрізняється від відповіді @ Ніла використанням String.repeat().

v=>+(v>9?v%9+'9'.repeat(v/9):v+9)

Попередня версія (збережено 6 байт завдяки @Qwertiy):

f=v=>+(v/9>1?v%9+'9'.repeat(v/9|0):v+9)

Перша версія:

f=v=>+(v/9>1?v%9+'9'.repeat(~~(v/9)):'1'+v-1)

1
~~(v/9)=> v/9|0, '1'+v-1=>v+9
Qwertiy

@Qwertiy Дуже дякую Мені потрібно дізнатися більше про побітові оператори. Щодо другої зміни, схоже, я надто ускладнив справу v <= 9. Я подумаю, якщо зможу повернути всі числові значення, які можуть бути ще одним збереженням байтів (не.
Лейбруг

Не потрібно називати цю функцію згідно з нашими правилами
Conor O'Brien

1
v>9на 2 байти коротше, string.repeatзначення десяткової величини не |0потрібне
Shaun H

Також відрізняється від моєї відповіді тим, що **звичайно не використовую .
Ніл

1

Луа, 52 байти

n=...+0
print(n>9 and(n%9)..string.rep(9,n/9)or n+9)

Мається на увазі збереження у файлі та запуск інтерпретатора Lua, наприклад lua <file> <input number>

Ви також можете спробувати тут: https://repl.it/CXom/1

(На repl.it вхідний номер жорстко кодується для зручності тестування)


Що робить '... + 0' ...? Це передає вхід на ціле число?
Yytsi

1
Так, до числа (Lua до 5.3 використовував лише парні, наприклад, JavaScript). Lua автоматично перетворить рядки в числа у виразах, але не порівняння. Тож для n>9правильної роботи її потрібно спочатку примусити до числа.
PiGuy

+1! Розумію. Так ...+0>9би працювало?
Yytsi

1
Так! Було б :)
PiGuy

1

Ракетка 70 символів, 71 байт

Такий же алгоритм, як і більшість інших. Досить сумно з приводу відсутності% для модуля, або ** для expt або цілого поділу за замовчуванням, інакше це може бути набагато коротше, і я міг би перевершити C і Java. Але все ж люблю мову

(λ(x)(if(> x 9)(-(*(+(modulo x 9)1)(expt 10(floor(/ x 9))))1)(+ x 9)))

1

Шестикутник , 40 31 30 байт

<_:->.(.+><.'!.\@"9!%>!/{.}|.?

Або, якщо ви хочете, щоб ваш код був трохи менш лінійним і трохи більше полігональним:

    < _ : -
   > . ( . +
  > < . ' ! .
 \ @ " 9 ! % >
  ! / { . } |
   . ? . . .
    . . . .

Спробуйте в Інтернеті!

Дякуємо @FryAmTheEggman за деякі ідеї та натхнення: o)

Попередня версія: <.:->+_.!(..'!.\><9!%>@.{.}|.?"

Версія Previouser: <><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\


1
Це, здається, працює? Все ще виглядає по-голорошковому.
FryAmTheEggman

@FryAmTheEggman Приємна робота! Через 2 хвилини після публікації я подумав про набагато кращий спосіб зробити, ну, майже все. Мабуть, тунельне бачення? Я працюю над переглянутою версією.
Сок

Дякую :) Просто люди з вигадками часто балакають про Гексагонію в кімнаті мов езотеричного програмування . Приєднуйтесь, якщо хочете :)
FryAmTheEggman

1
Вдалося згладити це трохи більше: hexagony.tryitonline.net/…
FryAmTheEggman

1

Perl 6 ,  38   29 байт

{$_>9??(1+$_%9)*10**Int($_/9)-1!!$_+9}
{first *.comb.sum==$_,$_^..*}

(мабуть, прямий підхід коротший)

Пояснення:

{
  first
    *.comb.sum == $_, # lambda that does the check
    $_ ^.. *          # Range.new: $_, Inf, :excludes-min
}

Тест:

#! /usr/bin/env perl6

use v6.c;
use Test;

my @tests = (
   2 => 11,
   8 => 17,
   9 => 18,
  12 => 39,
  16 => 79,
  18 => 99,
  24 => 699,
  32 => 5999,
);

plan +@tests;

my &next-digital-sum = {first *.comb.sum==$_,$_^..*}

for @tests -> $_ ( :key($input), :value($expected) ) {
  is next-digital-sum($input), $expected, .gist;
}
1..8
ok 1 - 2 => 11
ok 2 - 8 => 17
ok 3 - 9 => 18
ok 4 - 12 => 39
ok 5 - 16 => 79
ok 6 - 18 => 99
ok 7 - 24 => 699
ok 8 - 32 => 5999

1

Java 10, 114 62 байти

n->{var r="";for(int i=0;i++<n/9;r+=9);return(n>9?n%9:n+9)+r;}

Спробуйте в Інтернеті.

EDIT: 130 73 байт без провідних нулів (завдяки @ levanth` ):

n->{var r="";for(int i=0;i++<n/9;r+=9);return new Long((n>9?n%9:n+9)+r);}

Спробуйте в Інтернеті.

Пояснення:

n->                           // Method with integer parameter and long return-type
  var r="";                   //  Result-String, starting empty
  for(int i=0;i++<n/9;r+=9);  //  Append `n` integer-divided by 9 amount of 9's to `r`
  return new Long(            //  Cast String to number to remove any leading zeroes:
    (n>9?                     //   If the input `n` is 10 or larger
      n%9                     //    Use `n` modulo-9
     :                        //   Else (`n` is smaller than 10):
      n+9)                    //    Use `n+9`
    +r);}                     //   And append `r`

1
Якщо когось цікавить: виправлення буде на сім байт довше, замініть String c(int n){return""+(n>9?(n%9)+s(n):n+9);}наint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
леваван

@levanth Я відредагував це. Btw, ви забули ""+вint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Кевін Круїйсен

1

Рубін, 33 байти

Це арифметична версія int, яка просто така ж, як відповідь пітона xnor. Це анонімна функція, яка бере і повертає int.

->n{n<10?n+9:(1+n%9)*10**(n/9)-1}

Я не знаю так багато рубіну, але це -> на початку анонімна функція?
левант

@levanth: так. Я
уточню

Не працює для n = 9
GB

@GB дякую, що вказали на це. Зараз це виправлено.
MegaTom

1

MathGolf , 8 7 байт

Æ)_Σk=▼

Спробуйте в Інтернеті!

Неявне введення yay.

Пояснення:

          Implicit input
 Æ     ▼  Do while false loop that pops the condition
  )       Increment top of stack
   _      Duplicate
    Σ     Get the digit sum
     k    Get input
      =   Is equal?
          Implicit output

Я знаю, що це старіша відповідь, але ви можете вирішити її в 7 байтів із неявним введенням (просто пропустіть перший k).
maxb

0

Рубін, 38 байт

f=->n{n<11?n+9:"#{n<19?n-9:f.(n-9)}9"}

Ця відповідь повертає рядок або int залежно від розміру вводу. Це рекурсивне рішення, яке запитує рішення на 9 менше, а потім додає "9" до кінця.


Рубін, 39 байт

f=->n{n<11?n+9:(n<19?n-9:f.(n-9))*10+9}

Для ще одного байту ця відповідь завжди повертає int. той же алгоритм, що і вище, але з числами.




0

Oracle SQL 11.2, 165 байт

SELECT l FROM(SELECT LEVEL l,TO_NUMBER(XMLQUERY(REGEXP_REPLACE(LEVEL,'(\d)','+\1')RETURNING CONTENT)) s FROM DUAL CONNECT BY 1=1)WHERE s=:1 AND l!=s AND rownum=1;

Без гольфу

SELECT l   
FROM   (
         SELECT LEVEL l, -- Number to evaluate
                XMLQUERY( 
                          REGEXP_REPLACE(LEVEL,'(\d)','+\1')  -- Add a + in front of each digit 
                          RETURNING CONTENT
                        ).GETNUMBERVAL()s                     -- Evaluate le expression generated by the added + 
                FROM DUAL 
                CONNECT BY 1=1 -- Run forever            
       )
WHERE s=:1      -- The sum must be equal to the input
  AND l!=s      -- The sum must not be the input 
  AND rownum=1  -- Keep only the first result

0

Python 3 55 байт

Бере два аргументи, однакові

f=lambda a,b:a if sum(map(int,str(a)))==b else f(-~a,b)

тобто для його виклику ви б використовували f (x, x)



0

Powershell, 54 байти

$args|%{(($_+9),+(''+$_%9+'9'*(($_-$_%9)/9)))[$_-gt9]}

Тестовий сценарій:

$f = {

$args|%{(($_+9),+(''+$_%9+'9'*(($_-$_%9)/9)))[$_-gt9]}

}

@(
    ,(  1,  10   )
    ,(  2 , 11   )
    ,(  8 , 17   )
    ,(  9 , 18   )
    ,( 10,  19   )
    ,( 11,  29   )
    ,( 12 , 39   )
    ,( 16 , 79   )
    ,( 18 , 99   )
    ,( 19 , 199  )
    ,( 24 , 699  )
    ,( 27 , 999  )
    ,( 32 , 5999 )
    ,( 52 , 799999 )
    ,( 128, 299999999999999 )
) | % {
    $a,$e = $_
    $r = &$f $a
    "$($r-eq$e): $r"
}

Вихід:

True: 1 : 10
True: 2 : 11
True: 8 : 17
True: 9 : 18
True: 10 : 19
True: 11 : 29
True: 12 : 39
True: 16 : 79
True: 18 : 99
True: 19 : 199
True: 24 : 699
True: 27 : 999
True: 32 : 5999
True: 52 : 799999
True: 128 : 299999999999999

Розширення

  • якщо [$_-gt9]повертає першу цифру та хвіст
    • перша цифра - різниця між $ _ і сумою 9 ( $_%9)
    • хвіст - кілька дев'яток - '9'*(($_-$_%9)/9))
    • нарешті, перетворює рядок результатів у число, щоб видалити ведучий 0
  • інше повертається ($_+9)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.