Zadanie:
Biorąc pod uwagę liczbę całkowitą w systemie liczb dziesiętnych, zmniejsz ją do jednej cyfry dziesiętnej w następujący sposób:
- Konwertuj liczbę na listę cyfr dziesiętnych.
- Znajdź największą cyfrę, D
- Usuń D z listy. Jeśli występuje więcej niż jedno wystąpienie D, wybierz pierwsze od lewej (w najbardziej znaczącej pozycji), wszystkie pozostałe powinny pozostać nienaruszone.
- Konwertuj wynikową listę na liczbę dziesiętną i pomnóż ją przez D.
- Jeśli liczba jest większa niż 9 (ma więcej niż 1 cyfrę dziesiętną), powtórz całą procedurę, wprowadzając do niej wynik. Zatrzymaj się, gdy otrzymasz wynik jednocyfrowy.
- Wyświetl wynik.
Przykład:
26364 ->
1. 2 6 3 6 4
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
at position 1 and get the list 2 3 6 4
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.
Kontynuujemy, powtarzając procedurę dla 14184 i tak dalej, i przechodzimy przez następujące wyniki pośrednie, ostatecznie osiągając 8:
11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8
Tak więc wynik dla 26364 wynosi 8.
Dane wejściowe: liczba całkowita / ciąg znaków reprezentujący liczbę całkowitą
Wyjście: Pojedyncza cyfra, wynik zmniejszenia zastosowanego do liczby.
Przypadki testowe:
9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6
To jest golf golfowy , więc wygrywają najkrótsze odpowiedzi w bajtach w każdym języku.
code-golf
arithmetic
integer
Galen Iwanow
źródło
źródło
10 -> 10
?Odpowiedzi:
05AB1E , 6 bajtów
Kod:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 49 bajtów
Pobiera dane wejściowe jako ciąg znaków reprezentujący liczbę całkowitą, np
f("26364")
.Przypadki testowe
Pokaż fragment kodu
źródło
Galaretka , 13 bajtów
Wypróbuj online!
-1 dzięki trick znalazłem w Jonathana Allana odpowiedź .
Pełny program
źródło
Pyth , 16 bajtów
Pobiera dane wejściowe jako ciąg. Wypróbuj tutaj! (Alternatywnie:
.WtH`*s.-ZeSZseS
)Pyth , 18 bajtów
Pobiera dane wejściowe jako liczbę całkowitą. Wypróbuj tutaj!
Jak to działa
16 bajtów
18-bajtowy
Bycie tak blisko Galaretki przy tego rodzaju wyzwaniach jest bardzo dobre dla Pyth IMO :-)
źródło
Łuska ,
141312 bajtówDzięki Zgarb za uratowanie 1 bajtu.
Wypróbuj online!
Wyjaśnienie:
źródło
R ,
9995 bajtówWypróbuj online!
Funkcja rekurencyjna. Dodanie
f(number)
stopki może służyć do testowania innych wartościnumber
. Prosta implementacja,d
to lista cyfr i10^(n:2-2)%*%d[-M]
oblicza liczbę z usuniętą największą cyfrą.źródło
Python 2 , 72 bajty
Wypróbuj online!
źródło
432969
. „ValueError: niepoprawny literał dla int () z bazą 10: ''”n
było 0, wówczasn*(n<=9)
nadal przyjmowałoby wartość falsy, 0, co powoduje, że rekurencja jest kontynuowana i powoduje błąd, podczas gdy ciąg znaków'0'
jest wartością zgodną z prawdą i dlatego rekurencja zostaje zatrzymana.Ruby , 59 bajtów
Wypróbuj online!
Rekurencyjna funkcja lambda o nazwie like
f[26364]
.źródło
Galaretka , 15 bajtów
Wypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
źródło
Haskell ,
706766 bajtówZaoszczędź
34 bajty dzięki nim!Wypróbuj online!
źródło
until
. Wypróbuj online! ....span=<<(>).maximum...
.C # (.NET Core) , 126 bajtów
Wypróbuj online!
źródło
if(n<10)return n;...return F(...);
na pojedynczy zwrot z trójskładnikiem, jeśli:int F(int n){var x=(n+"").ToList();var m=x.Max(d=>d);x.RemoveAt(x.IndexOf(m));return n<10?n:F(int.Parse(string.Concat(x))*(m-48));}
( 131 bajtów )using System.Linq;
(18 bajtów) do bajtu.APL (Dyalog) ,
363533 bajtów-1 z powodu zaktualizowanych specyfikacji OP. -2 dzięki ngn.
Anonimowa ukryta funkcja prefiksu. Jako argument przyjmuje liczbę całkowitą.
Wypróbuj online!
{
…}
Funkcja gdzie⍵
jest argument:⍵>9:
jeśli argument jest większy niż 9, to:⍕⍵
sformatuj (wykreśl) argument⍎¨
wykonaj (oceń) każdy (to daje nam cyfry jako liczby)(
…)
Zastosuj następującą ukrytą funkcję na tych⌈/
największa cyfra×
czasy10⊥
dekodowanie base-10 (zbiera cyfry)⊂
wszystkie cyfry⌷⍨¨
indeksowane według każdego z⍳∘≢
że I ndices od liczby cyfr≠
różni się od⊢⍳⌈/
Największą cyfrowy kod i ndex w całej listy cyfr∇
powrócić (tj. wezwać siebie) w tej sprawie⋄
jeszcze⍵
zwraca argument niezmodyfikowanyźródło
>10
być>9
?>9
zaoszczędziłoby bajt.Perl 6 ,
4541 bajtówSprawdź to
Sprawdź to
Rozszerzony:
źródło
Siatkówka , 67 bajtów
Wypróbuj online! Link zawiera przypadki testowe wystarczająco szybko, aby nie hamować serwera Dennisa. Wyjaśnienie:
W przypadku liczb dwucyfrowych powielają one liczbę za pomocą
;
separatora, poprzedzając cyfrę 1 w duplikacie. W przypadku liczb jednocyfrowych jest to przedrostek1;
liczby.Posortuj cyfry duplikatu. (W przypadku liczb jednocyfrowych nie ma to wpływu.)
Znajdź pierwsze wystąpienie największej cyfry i usuń ją, a także pozostałe cyfry w duplikacie oraz dodatkową 1, która została dodana wcześniej. (W przypadku liczb jednocyfrowych dopasowanie nie powiedzie się, więc to nic nie robi.)
Pomnóż liczbę przez cyfrę. W przypadku liczb jednocyfrowych powoduje to powstanie oryginalnego numeru i pętla kończy się. W przeciwnym razie program zapętla się, aż zostanie osiągnięta jedna cyfra.
źródło
C# (.NET Core),
177164 + 18 bytesSaved 13 bytes thanks to @raznagul!
Try it online!
źródło
s.Length<2
ton<10
. Also, you can remove the ternary operator and justreturn f(y)
at the end, as the case is handled by theif
in the next step of the recursion.Java 8,
126104 bytes-22 bytes thanks to @OlivierGrégoire.
Explanation:
Try it here.
źródło
n>9
and revert conditions instead ofn<10
).Jq 1.5, 86 bytes
Expanded
Try it online!
źródło
Perl 5, 41 + 1 (
-p
) = 42 bytesTry it online!
źródło
9
. :( but tinkered a little and managed to get 41 bytes with a fix: Try it online!Lua,
137108 bytesThanks to Jonathan S for golfing off 29 bytes.
Try it online!
źródło
D,
188186185 bytesTry it online!
I hate lazy evaluation, so much. Any tips are welcome!
źródło
Lua, 154 Bytes
I should have some ways to golf this down, I'm experimenting right now.
Try it online!
Explanations
źródło
PowerShell, 123 bytes
Try it online!
Ooof. PowerShell arrays are immutable, so we need to use the lengthy
[Collections.ArrayList]
casting here so we can call.remove()
later.Takes input
$args
, converts it to a string, then achar
-array, then anArrayList
. Stores that into$a
. Then wewhile
loop until we're at or below9
. Each iteration, we're calling.remove
on the largest element of$a
(done bysort
and taking the last element[-1]
), storing the largest element into$b
at the same time. This happens to work because the ASCII values sort in the same fashion as the literal digits.Next, we recompute
$a
, again as anchar
-array (andArrayList
implicitly), by casting our$b
(which is currently achar
) to a string, then an int with+
, and multiplying that to$a
-join
ed into a string (implicitly cast to int). This satisfies the "multiply by D" portion of the challenge.Finally, once we're out of the loop, we put
$a
onto the pipeline and output is implicit.źródło
Pip,
2221 bytesTakes input as a command-line argument. Verify all test cases: Try it online!
Explanation
Ungolfed, with comments:
In the golfed version, the loop body is condensed into a single expression:
źródło
C
103,95, 90 bytesTry it online!
źródło
Java 8: 115 bytes
-10 bytes thanks to Jo King
Unfortunately you can't call a lambda function recursively, so an extra 11 bytes is needed for the method header. I am aware there is a shorter Java answer that loops instead, but I decided to come up with this on my own.
Try it online
źródło
-48
from the map to the end of them
definition. Try it online! You also have some extra whitespace in your TIO linkJ, 40 bytes
Try it online!
explanation
źródło
PowerShell, 230 bytes
Try it online!
Wasted too much on all the type casting.
źródło
PHP,
8277+1 bytesRun as pipe with
-nR
or try it online.źródło
dc,
9885 bytesMany thanks to this answer for the idea of utilizing
~
in the extraction of digits from a number, resulting in two saved bytes over the original version of the code.This was a rather though one to complete in
dc
with its nonexistent string manipulation capabilities.Try it online!
źródło
Bash, 80 bytes
Uses packages Core Utilities (for
sort
andtail
) andgrep
.How does it work?
źródło