Wszystko w tytule ...
Weź jako wejście dodatnią liczbę całkowitą n>=12
i ... rób, co mówi tytuł.
Tak, dotyczy to OEIS A187924 .
Niektóre przypadki testowe
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
To jest golf golfowy . Najkrótszy kod w bajtach wygrywa!
Odpowiedzi:
Befunge, 81 bajtów
Wypróbuj online!
Może obsłużyć co najmniej n = 70, po czym niektóre wartości zaczną przepełniać rozmiar komórki stosu w większości implementacji, a na tych, które tego nie robią, potrwa to tak długo, że nie warto czekać, aby się dowiedzieć.
Biorąc pod uwagę te ograniczenia, nawet nie zawracamy sobie głowy próbą obsługi wartości n większych niż 99, co oznacza, że możemy łatwiej przetestować, czy wartość kończy się na n , po prostu porównując wartość modulo 100 z n .
Poniżej znajduje się bardziej szczegółowy podział kodu.
Odczytaj n ze standardowego i zapisz w pamięci.
Zainicjuj wartość testową v na 0 i uruchom główną pętlę, zwiększając v z góry.
Sprawdź, czy
v%n == 0
, a jeśli nie, wróć do początku głównej pętli.Sprawdź, czy
v%100 == n
, a jeśli nie, wróć do początku głównej pętli.Podsumowując cyfry w v kilkakrotnie dodając v modulo 10 oraz podzielenie V przez 10
testu, gdy suma jest równa n , a jeśli nie powrócić na początek głównej pętli.
W przeciwnym razie wypisz v i wyjdź.
źródło
05AB1E , 14 bajtów
Wypróbuj online!
Wyjaśnienie
Rozwiązania wymagające dużych prefiksów przekroczą limit czasu w TIO
źródło
JavaScript (ES6),
5554 bajtówPobiera dane wejściowe jako ciąg. Potrzebuje przeglądarki z obsługą rekurencji ogona, aby uzyskać większe wyniki. Edycja: Zapisano 1 bajt dzięki @Arnauld.
źródło
eval([s,...a].join`-`)?
działałby również, choć nie jest to krótszy czas ...||
.Brachylog v2,
1210 bajtówWypróbuj online!
Jest to przesłanie funkcji, które pobiera dane wejściowe przez
.
i generuje dane wyjściowe przez?
(odwrotnie niż normalna konwencja; wszystkie funkcje Brachylog mają dokładnie dwa argumenty, które mogą być argumentami wejściowymi lub wyjściowymi, ale język nie wymusza żadnego konkretnego użycia argumentu). My zwykle nie rozważyć konwencje użycia argumentu za istotne w PPCG .Wyjaśnienie
Poprzednia wersja tego rozwiązania miała specjalny przypadek (
Ḋ|
tj. „Dosłownie zwracaj cyfry”) dla pojedynczych cyfr, ale pytanie najwyraźniej mówi, że nie musisz tego sprawdzać (dzięki @DLosc za złapanie tego), więc usunąłem to. (Zapisane rozwiązanie nie będzie działać na pojedynczych cyfrach, ponieważ Brachylog nie weźmie 1 za możliwość nieznanego w mnożeniu, aby zapobiec nieskończonym pętlom; jego multiplikacje są arbitralne).Ta odpowiedź dotyczy teraz prawie bezpośredniego tłumaczenia specyfikacji. Zaczynając od
?
(wynik / liczba, którą próbujemy znaleźć; predykat Brachylog zawsze niejawnie zaczyna się od?
) używamya₁.
do stwierdzenia, że ma.
(dane wejściowe) jako sufiks. Następnie;A×?
oznacza, że mnożymy może (×
) wynik przez coś (;A
), aby otrzymać?
(na wyjściu). Na koniecẹ+
sumuje (+
) cyfry (ẹ
)?
i domyślnie jest to domniemane twierdzenie na końcu każdego programu Brachylog, który daje wynik końcowy.
. Innymi słowy, ten program to „.
sufiks?
,.
pomnożony przez coś?
,.
to suma cyfr?
”, co jest bardzo zbliżone do dosłownego tłumaczenia oryginalnego programu.Jest
≜
to konieczne do wprowadzenia wymogu sumy cyfrowej. Zakładam, że cośẹ
nie lubi nieznanych, więc≜
Brachylog mówi Bruteylogowi, by użyła metody brutalnej siły w tej części programu zamiast algebry.źródło
Haskell , 72 bajty
Wypróbuj online!
Zauważ, że znaleziona liczba minus n musi być wielokrotnością zarówno n, jak i 10 ^ długości (n).
Inspirowany Laikoni i całkowicie ludzki
źródło
lcm n(10^length(show n))
dolcm(10^length(show n))n
1 bajtaAlice , 35 bajtów
Wypróbuj online!
Wyjaśnienie
Ten program ma naprawdę niezłą mieszankę i interakcję między trybem Cardinal (przetwarzanie liczb całkowitych) i Ordinal (przetwarzanie ciągów znaków).
Typowe ramy dla wyzwań z dziesiętnymi wejściami / wyjściami, które działają głównie w trybie kardynalnym:
A aktualny program:
źródło
Java (OpenJDK 8) ,
13611010392 bajty-26 dzięki JollyJoker
-7 ponownie dzięki JollyJoker
-11 dzięki Oliverowi Grégoire
Wypróbuj online!
Uwielbiam Javę! Może być tak, że używam nieefektywnego podejścia, ale nie mam wbudowanej funkcji sumy kontrolnej i podwójnej konwersji na String, aby sprawdzić, czy koniec liczby kosztuje bajty ...
Nie golfowany:
źródło
(""+i).endsWith(""+a)
powinno działać.n/=10
zamiastn=n/10
też. Ponadtoi+=a
w pętli for można pominąć sprawdzenie podzielności.Mathematica, 72 bajty
-18 bajtów od @MartinEnder
Wypróbuj online!
Oto kolejna wersja autorstwa Martina Endera
To podejście może wzrosnąć do
n=40
(41 przekracza domyślny limit iteracji)Mathematica, 65 bajtów
Wypróbuj online!
źródło
Python 2 , 74 bajty
Takie rozwiązanie zakłada
n <= sys.maxint
.Wypróbuj online!
źródło
str(x)
sięx
w back-kleszcze dwa razy, aby zapisać 6 bajtów (jak można uciec z powrotem-kleszcze wewnątrz back-kleszczy?).`
backslash zaznacz w backticks.L
bałagan w algorytmie.C (gcc)
7169 bajtów, błąd kończy się na 100Próbowałem z długim i% 1000, ale przekroczył limit czasu
-2 bajty dzięki steadybox
Wypróbuj online
źródło
Łuska ,
20 1917 bajtówDzięki @Zgarb za -2 bajty!
Wypróbuj online!
źródło
C # (.NET Core) ,
90 8483 + 18 = 101 bajtówWypróbuj online!
(""+n)
w niektórych miejscach in.ToString()
innych.źródło
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
oszczędza 20 bajtów.n%100
? Co jeślin>100
?Julia, 70 bajtów
źródło
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Dzięki temu możesz zaoszczędzić 5 bajtów. Wypróbuj online!Ohm v2 , 16 bajtów
Wypróbuj online!
źródło
Pip , 18 bajtów
Algorytm inspirowany odpowiedzią Emigny . Wypróbuj online!
Jak to działa
źródło
JavaScript REPL (ES5),
6059 bajtówźródło
Haskell , 75 bajtów
Wypróbuj online!
Wyjaśnienie:
Zastanawiam się, czy „koniec w
n
” można skrócić. Też próbowałemshow n`elem`scanr(:)""(show x)
, ale to dłużej.źródło
Rubinowy ,
65 63 5453 bajtówWypróbuj online!
źródło
Pyth ,
2221 bajtówWypróbuj tutaj!
źródło
Haskell , 75 bajtów
Wypróbuj online!
źródło
PowerShell , 84 bajty
Wypróbuj online!
Prosta konstrukcja, ale długie polecenia. Przekroczono limit czasu dla TIO dla
n=100
, ale jeśli wyraźnie ustawimy,i
aby być blisko, wyprowadza poprawnie.To tylko prosta
for
pętla, która działa tak długo, jak spełniony jest jeden z warunków. Te trzy warunki to 1)$i%$n
, tzn. Mamy resztę; 2)$i-notmatch"$n$"
, tzn. Nie jest wyrażeniem regularnym pasującym do ostatnich kilku cyfr; i 3)([char[]]"$i"-join'+'|iex)-$n
, tj.$n
sumy cyfr nie są równe (tutaj sprawdzane przez proste odejmowanie, ponieważ niezerowe wartości są prawdziwe). Wewnątrz pętli po prostu zwiększamy$i
.Zatem, jeśli nie mamy reszty, wyrażenie regularne pasuje, a liczby są równe, wszystkie trzy warunki są
$false
i wychodzimy z pętli. W rezultacie możemy po prostu wyjść$i
z rurociągu, a wynik jest niejawny.źródło
PHP, 73 + 1 bajty
Uruchom jako potok z
-R
.Pętle
$i
przez wielokrotność<input>
momentusum_of_digits-<input>
itail_of_i-$n
są falsy; następnie drukujei
.źródło
m4, 210 bajtów
Definiuje makro,
f
które oblicza odpowiedź. Jest to trochę powolne - bezużyteczne - ale obiecuję, że zadziała.Myślałem, że m4 byłoby fajne, ponieważ domyślnie traktuje liczby całkowite jako ciągi, ale jest to całkiem złe.
źródło
Scala, 120 bajtów
Działa to do czasu
n = 70
, po którym nastąpi przepełnienie liczb całkowitych. Dla jednego dodatkowego znakuInt
można zmienić na aLong
i pozwolić nan > 100
obliczenie wartości.Oto nieco dłuższa wersja bez golfa:
źródło
R , 115 bajtów
Wypróbuj online!
Straszna funkcja R. Przyrosty
F
(zaczyna się od0
) don
momentu znalezienia wartości spełniającej wymagane właściwości, którą następnie zwraca. Zastosowanieany
nadouble
wypowiedzi wysyła ostrzeżenie dla każdej iteracji pętli, ale nie wpływa na prawidłowość.Przekracza limit czasu dla TIO dla wystarczająco dużych danych wejściowych (n = 55 lub więcej), ale powinien poprawnie obliczyć rozwiązanie, biorąc pod uwagę wystarczającą ilość czasu / przestrzeni.
źródło
Perl 5,
4644 + 1 (-p) = 45 bajtów2 bajty zapisane dzięki Xcali, nie można znaleźć lepszego
pierwsza odpowiedź
Wypróbuj online
źródło
Galaretka ,
2221 bajtówWypróbuj online!
Edycja: skompresowany do jednej linii
Wyjaśnienie
Pisanie zajęło mi wiele godzin, ponieważ uczę się Jelly, ale teraz, kiedy skończyłem, jestem bardzo zadowolony. Przez długi czas nie zdawałem sobie sprawy, że jest mi potrzebny
¤
i po prostu nie mogłem go uruchomić. Patrząc na [ten] [1] dobrze wyjaśniony kod pomógł mi podpisać umowę. Prowadziło mnie także wiele innych odpowiedzi na żelki w PPCG.źródło
JavaScript, 224 bajty
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Un-golf:Zastosowanie: 1. getNumber (12) 2. getNumber (13) 3. ....
źródło
getNumber
lubsumDigits
.J ,
3733 bajtówWypróbuj online!
Przygotowanie licznika iteracji jest ~ 5 razy szybsze, ale o 5 bajtów dłuższe:
Wypróbuj online!
Zwiększanie o 100, 27 bajtów :
Wypróbuj online!
źródło
Python 2 , 70 bajtów
Wypróbuj online!
źródło