„Suma cyfrowa” odnosi się do sumy wszystkich cyfr w liczbie.
Na przykład cyfrowa suma 1324
to 10
, ponieważ 1+3+2+4 = 10
.
Wyzwanie polega na napisaniu programu / funkcji do obliczenia najmniejszej liczby większej niż wejście, którego suma cyfrowa jest wejściem.
Przykład z instrukcją
Jako przykład weź liczbę 9
jako dane wejściowe:
9 = 1+8 -> 18
9 = 2+7 -> 27
9 = 3+6 -> 36
...
9 = 8+1 -> 81
9 = 9+0 -> 90
Prawidłowy wynik będzie najmniejszą liczbą powyżej, czyli 18
.
Okular
Należy zauważyć, że 9
nie jest to poprawny wynik dla tego przykładu, ponieważ liczba odwrócona musi być większa niż liczba oryginalna.
Zauważ, że dane wejściowe będą dodatnie.
Przypadki testowe:
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)
Referencje:
To jest OEIS A161561 .
Edycja: Dodano dodatkową walizkę testową (18)
Podziękowania dla Martina Endera za fragment tabeli wyników
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>
code-golf
arithmetic
levanth
źródło
źródło
Odpowiedzi:
05AB1E,
19178 bajtówKod:
Wyjaśnił:
Wypróbuj online
Edycja: Zapisano 9 bajtów dzięki @Adnan
źródło
SO
jest krótszym sposobem uzyskania sumy cyfr (zamiastJ`)O
). Ponadto bez przypisywania zmiennych możesz to zrobić[>DSO¹Q#
:).Python 2, 33 bajty
Bezpośredni wyraz. Tworzy ciąg liczbowy z 9 na końcu, a resztą na początku. Z wyjątkiem, dla jednocyfrowych
n
, dajen+9
.Niektóre wyjścia mają wiodące zera (
099
dla18
).źródło
Retina ,
3931 bajtówPobiera dane wejściowe jednoargumentowe .
Wypróbuj online! (Pierwsze dwa wiersze pozwalają na uruchomienie kilku przypadków testowych jednocześnie i dla wygody konwertuje z dziesiętnego na jednoargumentowy).
To tak naprawdę nie wyszukuje wyniku liniowo, ale oblicza go jawnie:
n
jest większy niż 9, zastąpić jen % 9
następnien / 9
(podłogą) dziewiątkami.n + 9
.Używając
!
(lub czegokolwiek innego, co nie jest1
) jako jednoznacznej cyfry, mogę zapisać jeszcze jeden bajt, stosując następujące podejście:Ale myślę, że ten format wejściowy jest trochę rozciągnięty.
źródło
Pyth , 8 bajtów
Zestaw testowy.
źródło
Java 7,
6861 bajtówRobi mniej więcej to samo, co wiele innych odpowiedzi tutaj. Chciał pokazać podejście Java bez korzystania z manipulacji ciągami i pętli.
Dzięki FryAmTheEggman za przypomnienie mi, że jestem głupi;)
źródło
MATL ,
109 bajtówWypróbuj online!
Wyjaśnienie
źródło
V!U
+1 ode mnie. To powinno znaleźć się na naszej liście idiomów MATL.JavaScript (ES7), 32 bajty
38 bajtów jako ES6:
źródło
Python 3,
128948474 bajtówBez wyjścia, bezpośrednie podejście, początkujący kodegolfer;)
źródło
print(m)
zreturn m
(nie zapisuje żadnych bajtów ale nie trzeba drukować w samej funkcji). Nadal możesz wydrukować return funkcji wyjściowej,print(r(n))
aby przetestować swoją funkcjęm=n+1;f=1
orazif s==n:f=0
Właściwie 17 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
;)
)C
7365 bajtówMakro z funkcją pomocnika.
e
Funkcja po prostu wylicza moce dziesięciu, aF
makro wykorzystuje tę samą metodę rozwiązywania jak to rubin , a tym python odpowiedź. niestety, jestdłuższy niżmniej więcej tyle samo, ile obie odpowiedzi razem wzięte. Ale to pierwsza odpowiedź C.(8 bajtów zaoszczędzonych dzięki sztuczce Lynna w usuwaniu
int
).źródło
int
, oszczędzając 8 bajtów.Brachylog , 8 bajtów (niekonkurencyjny)
=
został zmodyfikowany po opublikowaniu tego wyzwania, aby działało teraz na domenach nieskończonych, co ma miejsce w tym przypadku.Wyjaśnienie
Spowoduje to powrót
=
do momentu, aż wartość Output sprawi, że cały predykat będzie prawdziwy.źródło
TSQL (sqlserver 2012),
10799 bajtówWypróbuj online!
źródło
Python 2, 39 bajtów
Czysta arytmetyka liczb całkowitych.
Pełny program z wyjściem
Wydajność:
źródło
eval
PowerShell v2 +, 62 bajty
Pobiera dane wejściowe,
$n
a następnie wykonujefor
pętlę. Inicjalizujemy pętlę, ustawiając nasz numer docelowy$a
, na jeden większy niż$n
(ponieważ musi być większy, a to zapewnia1..9
prawidłowe działanie). Każdą pętlę zwiększamy$a++
. Nic nie dzieje się w odpowiedniej pętli, ale warunek jest tam, gdzie dzieje się logika programu. Jesteśmy dosłownie biorąc numer docelowy jako ciąg, rzucając go jako char-tablicy,-join
ing tablicę z+
czym rurociągów goiex
(podobnie jakeval
). Sprawdzamy, czy jest to nasza liczba wejściowa, czy nie, i odpowiednio zapętlamy. Po wyjściu z pętli dotarliśmy do miejsca, w którym nasza liczba docelowa jest sumą cyfr równą naszej liczbie wejściowej, więc$a
jest umieszczana w potoku i dane wyjściowe są niejawne.Dla porównania, oto „konstruuj ciąg z odpowiednią liczbą 9”, który zrobili inni ludzie, przy 67 bajtach
lub metodą „czystej arytmetyki liczb całkowitych”, którą zrobili inni ludzie, przy 70 bajtach
Żaden z nich nie jest krótszy, ale oba są bardziej interesujące.
źródło
param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
Pyke,
987 bajtów, niekonkurujące - używa nowszej wersjiWypróbuj tutaj!
źródło
1
. A właściwie dlaczego sięMissing arg to Equals, evaling input
pojawia? Mam na myśli, że podam mu numer wejściowyJavaScript (ES2015),
453933 bajtyZaoszczędziłem kolejne 6 bajtów dzięki @Conor O'Brien i @Shaun H.Myślę
, że zostawię go takim, jakim jest, ponieważ ta wersja różni się od odpowiedzi @ Neila przy użyciu
String.repeat()
.Poprzednia wersja (zapisano 6 bajtów dzięki @Qwertiy):
Pierwsza wersja:
źródło
~~(v/9)
=>v/9|0
,'1'+v-1
=>v+9
v <= 9
. Pomyślę, czy mogę zwrócić wszystkie wartości liczbowe, co może być kolejnym oszczędzaniem bajtów (no .repeat () i zawijaniem zwracanej wartości w + ()).v>9
jest o 2 bajty krótszy,string.repeat
wprowadzi|0
niepotrzebną wartość dziesiętną**
oczywiście nie używając .Lua, 52 bajty
Przeznaczony do zapisania w pliku i uruchomienia za pomocą interpretera Lua, np
lua <file> <input number>
Możesz także spróbować tutaj: https://repl.it/CXom/1
(Przy repl.it numer wejściowy jest zakodowany na stałe dla ułatwienia testowania)
źródło
n>9
działać poprawnie, należy najpierw zmusić go do liczby....+0>9
by działało?Rakieta 70 znaków, 71 bajtów
Ten sam algorytm jak większość innych. Bardzo smutne, że nie mam domyślnie% dla modulo lub ** dla expt, lub dzielenia liczb całkowitych, w przeciwnym razie mogłoby to być znacznie krótsze i mógłbym przerobić C i Javę. Nadal jednak kocham ten język
źródło
Sześciokąt ,
40 3130 bajtówLub, jeśli wolisz, aby Twój kod był trochę mniej liniowy i bardziej wielokątny:
Wypróbuj online!
Dzięki @FryAmTheEggman za kilka pomysłów i inspiracji: o)
Poprzednia wersja:
<.:->+_.!(..'!.\><9!%>@.{.}|.?"
Wersja poprzednia:
<><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\
źródło
Perl 6 ,
3829 bajtów(najwyraźniej bezpośrednie podejście jest krótsze)
Wyjaśnienie:
Test:
źródło
Java 10,
11462 bajtyWypróbuj online.
EDYCJA:
13073 bajtów bez wiodących zer (dzięki @ levanth` ):Wypróbuj online.
Wyjaśnienie:
źródło
String c(int n){return""+(n>9?(n%9)+s(n):n+9);}
zint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
""+
wint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Rubinowy, 33 bajty
Jest to wersja arytmetyczna, która akurat jest taka sama jak odpowiedź python xnora. Jest to anonimowa funkcja, która przyjmuje i zwraca wartość int.
źródło
MathGolf ,
87 bajtówWypróbuj online!
Tak, domniemane wejście.
Wyjaśnienie:
źródło
k
).Rubinowy, 38 bajtów
Ta odpowiedź zwraca ciąg znaków lub liczbę int w zależności od wielkości wejściowej. Jest to rozwiązanie rekurencyjne, które prosi o rozwiązanie za 9 mniej niż dodaje „9” na końcu.
Rubin, 39 bajtów
Dla jeszcze jednego bajtu ta odpowiedź zawsze zwraca liczbę całkowitą. ten sam algorytm jak powyżej, ale z liczbami.
źródło
C, 80 bajtów
Ungolfed spróbuj online
źródło
PHP, 77 znaków
źródło
Oracle SQL 11.2,
165bajtówNie grał w golfa
źródło
Python 3 55 bajtów
Przyjmuje dwa identyczne argumenty
tzn. aby to nazwać, użyłbyś f (x, x)
źródło
Japt , 9 bajtów
Spróbuj
źródło
PowerShell, 54 bajty
Skrypt testowy:
Wydajność:
Expalantion
[$_-gt9]
zwraca pierwszą cyfrę i ogon$_%9
)'9'*(($_-$_%9)/9))
($_+9)
źródło