To wyzwanie jest oparte na pytaniu dotyczącym przepływu stosu .
Po wprowadzeniu liczby dodatniej wyślij ją jako sumę każdej cyfry pomnożonej przez jej reprezentację potęgi-10.
Wkład
Liczba jako liczba całkowita, ciąg znaków lub lista cyfr / znaków.
- Liczba będzie ściśle dodatnia.
- Jeśli zaakceptujesz liczbę jako ciąg znaków lub listę, nie rozpocznie się ona od
0
.
Wydajność
Łańcuch reprezentujący sumę każdej odpowiedniej cyfry podstawy 10, każda pomnożona przez odpowiednią moc podstawy 10. Suma jest reprezentowana jako a + b
. Jeśli chcesz, możesz użyć do jednego miejsca po każdej stronie +
znaku. Operandy są wymienione w kolejności malejącej.
0
nigdy nie może być poprawnym operandem.+
Znak (lub nie otoczony spacjami) nie może być wiodącym lub część spływu.
Przykłady
Input Output
12 10 + 2
or 10+2
or 10 +2
or 10+ 2
9 9
123 100 + 20 + 3
10 10
101 100 + 1
Niepoprawne dane wyjściowe
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
To jest code-golf, więc wygrywa najkrótszy kod w bajtach!
Odpowiedzi:
Python 3:
838079 bajtówWypróbuj online!
Moje pierwsze zgłoszenie do Code Golf.
-3 Bajtów przez jaja. Dziękuję za tę przydatną wskazówkę :) -4 Bytes by mypetlion. Dziękuję za tę wskazówkę dotyczącą skrócenia :)
źródło
if'0'<t[i]
zmieniając kolejność instrukcji if na i zmieniając formułę zx-i-1
nax+~i
. Oto link TIO ze zmianami krok po kroku.print
instrukcję,print(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
aby zapisać 1 bajt.Galaretka , 9 bajtów
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6), 47 bajtów
Pobiera dane wejściowe jako liczbę całkowitą.
Wypróbuj online!
Skomentował
źródło
R , 55 bajtów
Zakładając, że liczby całkowite są mniejsze niż 1e10, co i tak jest większe niż maksymalna 32-bitowa liczba całkowita ...
Wypróbuj online!
źródło
10^(nchar(n):1-1
teoretycznie działałby dla dowolnej liczby całkowitej ...Język programowania Szekspira ,
807806805804 bajtówWypróbuj online!
-23 bajty, jeśli pierwszy znak może być pusty
Wyjaśnienie
źródło
Python 2 , 64 bajty
Wypróbuj online!
Python 2 , 66 bajtów
Wypróbuj online!
źródło
Galaretka ,
1211 bajtówPełny program akceptujący liczbę jako listę cyfr (w formacie Python), która wypisuje wynik.
Wypróbuj online!
W jaki sposób?
Poprzednie @ 12 bajtów:
źródło
Haskell,
6054 bajtówEdycja: -6 bajtów dzięki Delfad0r.
Pobiera liczbę wejściową jako ciąg znaków.
Wypróbuj online!
źródło
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
oszczędza 6 bajtów Wypróbuj online! .05AB1E , 10 bajtów
Proste wdrożenie.
Wprowadź jako listę cyfr.
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 , 64 bajty
Nienazwana funkcja, która pobiera listę cyfr
n
i zwraca ciąg znaków.Wypróbuj online!
enumerate(n)
przyniosłoby krotki windex, item
poprzekn
z indeksem zaczynającym się od0
.Jednak
enumerate
bierze również opcjonalny indeks początkowy jako drugi argument, ustawiając to-len(n)
otrzymujemy indeksami (e
y)-len(n)
,-len(n)+1
, ...,-1
.Oznacza to, że liczba wymaganych zer końcowych dla dowolnego elementu (
b
) jest-1-e
, co oznacza,~e
że~e*'0'
otrzymuje wymagane końcowe zera.`b`
pobiera ciąg znaków reprezentujący cyfrę całkowitąb
i+
łączy to z zerami.if b
odfiltrowuje wpisy za pomocąb==0
.'+'.join(...)
następnie łączy powstałe ciągi ze+
znakami.źródło
Python 2,
827371 bajtów-9 bajtów dzięki @ovs
-2 bajty dzięki @JonathanAllan
Wypróbuj online
źródło
Haskell ,
565552 bajtów-4 bajt dzięki Nimi .
Wypróbuj online!
wyjaśnienie
Wypróbuj online!
źródło
Perl 6 , 38 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera listę cyfr i zwraca ciąg znaków.
Wyjaśnienie:
źródło
APL (Dyalog),
464140 bajtów-5 bajtów dzięki @dzaima
Anonimowa funkcja przedrostka. Pobiera dane wejściowe jako ciąg. TIO
(To jest mój pierwszy raz, gdy używam APL-a na PPCG, prawdopodobnie grywalnego. Przeklinajcie też, zera!)
źródło
⎕IO←0
Retina , 19 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Wyświetl wszystkie niezerowe cyfry
Do każdej cyfry dodaj tyle zer, ile cyfr końcowych.
Oddziel każdy wynik literą
+
s zamiast domyślnej nowej linii.Retina 0.8.2 , 21 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Wyświetl wszystkie sufiksy danych wejściowych rozpoczynające się od niezerowych cyfr.
Zastąp wszystkie końcowe cyfry zerami.
Połącz wyniki z
+
s.źródło
C (gcc) ,
7169 bajtówKażdy krok funkcji rekurencyjnej odejmuje część, którą wydrukuje, i przekazuje resztę liczby.
Dzięki pułapkowi cat za sugestię.
Wypróbuj online!
źródło
Brachylog ,
3532 bajtów-3 bajty, ponieważ 0 nie jest prawidłowym wejściem
Wypróbuj online! lub testsuite
Wyjaśnienie
źródło
|∧Ṡ
koniec. :)Brachylog v2, 15 bajtów
Wypróbuj online!
Bardzo, bardzo nieefektywny.
Jakoś to udaje się używać tylko 6 bajtów, co jest w większości języków twarde części (podział numer w formularzu do 10 b, gdzie jest jednocyfrowy, w porządku malejącym), a całe 9 bajtów do „przyłączenia się do „(który jest wbudowany w większość języków golfowych, ale nie Brachylog).
+
W przeciwieństwie do większości moich poleceń Brachylog (które są funkcjami), jest to pełny program, pobierający dane wejściowe ze standardowego wejścia i generujący dane wyjściowe na standardowym wyjściu.
Wyjaśnienie
(Powodem
wᵐ
jest raczej wykorzystywanie niż bardziej normalnec
jest to, że mamy do czynienia z heterogeniczną listą - zawiera ona zarówno liczby, jak i łańcuchy - i zamiast pozwolić na ich mieszanie, najłatwiej jest po prostu wydrukować je wszystkie osobno.)Algorytm tutaj brutalnie wymusza wszystkie addytywne partycje wejścia, aż znajdzie odpowiednią (!). Brachylog preferuje podział na mniejsze możliwości, a przy możliwościach posortowanych w porządku rosnącym, więc pierwszym rozwiązaniem, jakie znajdzie, jest odwrotność rozwiązania, o które pyta pytanie. Musimy to tylko odwrócić, aby uzyskać pożądane rozwiązanie.
źródło
Czysty , 73 bajty
Wypróbuj online!
Definiuje funkcję
$ :: String -> String
pobierającą ciąg znaków i zwracającą ciąg znaków.źródło
Płótno ,
1413 bajtówWypróbuj tutaj!
źródło
Attache , 37 bajtów
Wypróbuj online!
Wersja Pointfree (41 bajtów):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
Wyjaśnienie
źródło
C (gcc), 87 bajtów
Wypróbuj online!
źródło
PowerShell,
5552 bajtówSkrypt oczekuje tablicy ciągów, każdy ciąg zawiera jedną cyfrę. Skrypt testowy:
Wydajność:
źródło
Japt , 13 bajtów
Pobiera dane wejściowe jako tablicę cyfr.
Spróbuj
Wyjaśnienie
Alternatywny
Pobiera dane wejściowe jako tablicę ciągów cyfr.
Spróbuj
źródło
Java 10,
8278 bajtówOdpowiedź JavaScript (ES6) Port of Arnauld .
-2 bajty dzięki @ceilingcat .
-2 bajty dzięki Arnauldowi .
Wypróbuj online.
Wyjaśnienie:
źródło
n%m
przypisaną do zmiennej dla czytelności.)m<n
powinno działać.SNOBOL4 (CSNOBOL4) ,
134133129 bajtówWypróbuj online!
Zaoszczędzono cały bajt, wykonując przetwarzanie ciągów zamiast arytmetyki!
źródło
sed -E ,
10999977574 bajtyKażdy wiersz danych wejściowych jest traktowany jako osobna liczba. Wypróbuj online .
Wyjaśnienie:
… Można grać w golfa, jak sądzę.
źródło
01010101010
ani000000
, zgodnie ze specyfikacją wyzwania. Czy to oszczędza jakieś bajty?Brainfuck, 147 bajtów
Wypróbuj online! (Będziesz musiał zaznaczyć pole oznaczone „!” I wpisać swoje dane po „!” W drugim wierszu kodu, w przeciwnym razie będzie nadal pytał o dane wejściowe na zawsze.)
Prawdopodobnie nie będzie to najkrótsza odpowiedź ani gra w golfa w możliwie najkrótszy sposób, ale fajnie było spróbować zrobić to w Brainfuck, więc równie dobrze mogę to opublikować.
Jak wskazał @JoKing, ten program nie usuwa zer. Spróbuję to naprawić, ale może to być dość trudne.
Wyjaśnienie:
źródło
APL (Dyalog Unicode) , 20 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako wektor cyfr. Generuje spację przed i po każdej z nich
+
oraz zawiera zmienną liczbę spacji wiodących.To jest pociąg. Jest on podzielony na następujące.
Pierwszą funkcją jest to
⌽
, że odwraca tablicę, więc1 0 2
staje się2 0 1
.Następnie wchodzimy do
(10×⊢)\
, która jest stosowana do odwróconej tablicy. Ta część została zainspirowana odpowiedzią ngn na wyzwanie Boustrophedonise. Pożyczanie wyjaśnienia ngn, biorąc pod uwagę wektor cyfrA B C ...
, zastosowanie(10×⊢)\
tego wektora daje następujące.On
2 0 1
,(10×⊢)\
daje2 0 100
.Dalej nadchodzi
0~⍨
. To usuwa wszystkie0
s z tablicy, dając2 100
.Wreszcie jest
+
s.{⍵'+'⍺}/
to redukcja rozpoczynająca się od prawej, która łączy lewy arg z a+
, a następnie prawy arg. Skutecznie odwraca to tablicę podczas wstawiania+
s. To daje100 '+' 2
, który jest wyświetlany jako100 + 2
.źródło
MathGolf ,
121110 bajtówWypróbuj online!
Wyjaśnienie
Pierwsze polecenie nie jest potrzebne, ponieważ dane wejściowe można podać jako listę cyfr.
Mogę dodać operator mnożenia parami, który jest jednym bajtem, ale obecnie nie jest częścią tego języka. Następnie mógłbym usunąć jeden bajt z tego rozwiązania.
źródło