Wkład:
Liczba całkowita
Wydajność:
Suma samego wejścia + długość wejścia + każda pojedyncza cyfra wejścia.
nr + nr-length + {sum of digits} = output
Przykłady:
Input: 99
Output: 99
(nr) + 2
(nr-length) + (9 + 9)
(cyfry) →119
Wejście: 123
Wyjście: 123 + 3 + (1 + 2 + 3)
→132
Zasady konkursu:
Dane wejściowe mogą również zawierać dane ujemne, które są rozstrzygane w sposób specjalny. Znak
-
/ minus jest również+1
dla długości i jest częścią pierwszegodigit
.
Na przykład:Wejście:
-123
Wyjście:-123 + 4 + (-1 + 2 + 3)
→-115
- Możesz założyć, że wejście ani wyjście nigdy nie będzie poza zakresem (32-bitowej) liczby całkowitej.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Powiązane: Policz sumę wszystkich cyfr
code-golf
number
arithmetic
integer
Kevin Cruijssen
źródło
źródło
-123
sumy powinien być łańcuch , prawda?(-1 + 1 + 2 + 3)
(-1 + 2 + 3)
-1 + 2 + 3
. W przypadku tego wyzwania postanowiłem połączyć-
znak / minus z pierwszą cyfrą jako jedną cyfrą ujemną, aby uczynić ją nieco bardziej interesującą.Odpowiedzi:
05AB1E,
2820188 bajtówWyjaśnienie
Wypróbuj online
Zaoszczędź 10 bajtów dzięki @Adnan
źródło
ÐgsS'+ýO
.Python 2, 39 bajtów
Zestaw testowy
Używam tej samej sztuczki eval jak w mojej Pyth-answer .
źródło
eval
ijoin
jak wziąć ujemną pierwszą cyfrę na wejście ujemne? Oczekiwałbym,-123
że zostanę- + 1 + 2 + 3
napisany, ale najwyraźniej tak nie jest ... (A może tak, i automatycznie połączył- + 1
się-1
jako drugi krok?)-123
staje się"-+1+2+3"
po dołączeniu, co daje poprawny wynik, kiedyeval
to zrobisz . Spróbujeval("-+1")
na przykład, co powoduje-1
.- + 1
->- 1
. Istnieje jednoargumentowy operator plus, więc- + 1
zasadniczo jest taki sam jak-(+(1))
.+a
jest taki sam jaka
dla liczb.Pyth,
1110 bajtówDzięki @LeakyNun za bajt!
Zestaw testowy
Wyjaśnienie
źródło
CJam, 18 lat
Wypróbuj online
Wyjaśnienie:
źródło
Brachylog ,
3532 bajtówWyjaśnienie
źródło
XSLT 1.0 (bez EXSLT), 673 bajtów
Lekko napompowane:
Uruchom za pomocą xsltproc:
Tak,
ild.xsl
jest przesyłany dwukrotnie: raz jako dokument XSLT, a następnie jako dokument XML do przekształcenia. Dokument wejściowy musi być obecny, ponieważ procesor XSLT zazwyczaj wymaga jego uruchomienia. (XSLT jest zaprojektowany do zdefiniowania transformacji z dokumentu wejściowego do dokumentu wyjściowego; uruchomienie transformacji wyłącznie z parametrami wiersza poleceń, tak jak to tutaj zrobiłem, jest nietypowe.) W tym programie wystarczy dobrze sformatowany dokument XML jako dane wejściowe , a ponieważ XSLT jest aplikacją XML, każda dobrze uformowana transformacja XSLT jest z definicji dobrze uformowanym dokumentem XML.źródło
name="i" select="..."
np.<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
itp. Sądzę, że jeślixsltproc
dbasz o białe spacje, nie pozwoli to na brak cudzysłowu rzeczy przez.MATL, 20 bajtów
Wypróbuj online
Wszystkie przypadki testowe
Wyjaśnienie
źródło
Clojure, 102 bajty
Anonimowa funkcja, która konstruuje ciąg, który wygląda
(+ -123 4 -1 2 3 )
i sprawdza go. Wszystko, co jest dość szczegółowe, konstruuj ciąg znaków na podstawie liczby, jej długości, a następnie zamapuj każdy symbol reprezentujący ciąg znaków liczby oprócz minus do siebie plus spacja i minus pozostają takie sameMożesz zobaczyć, jak działa tutaj: https://ideone.com/FG4lsB
źródło
Dyalog APL ,
191716 bajtówPobiera ciąg i zwraca
≢
długość+
plus#
w⍎
ocenie głównej przestrzeni nazw'\d'⎕R'&+'
wyrażeń regularnych dołącz cyfry z plusem,,
po którym⊢
następuje niemodyfikowany ciąg–3 dzięki ngn
źródło
Matlab,
7667 bajtów9 bajtów zapisanych dzięki @Luis Mendo
Wyjaśnienie:
źródło
sum(t+1)+n
jest krótszy niżsum([n numel(t) t])
dc, 57 bajtów
Wyjaśnił:
To było o wiele bardziej skomplikowane, niż się spodziewałem! Dobre wyzwanie :)
źródło
10~
naA~
!Bash + coreutils, 36 bajtów
Wyjaśnienie:
W sed
\B
również dopasowuje również dwa kolejne znaki niebędące słowami, więc dla liczby ujemnej pasuje między „^” a „-”. Zwróć uwagę na0$1
sztuczki potrzebne do\B
dać0-1+2+3
, na przykład.Uruchom przykład: „input.txt” zawiera wszystkie przypadki testowe w instrukcji pytania
Wydajność:
źródło
$()
. Istnieją dwa alternatywne sposoby wykonania tego za pomocą backticksa, ale oba dają rozwiązanie 36 bajtów na końcu:sed 's:\B:+:g'<<<0$1
ised s:\\\B:+:g<<<0$1
.PowerShell v4, 48 bajtów
To powinno działać w v2 +, ale tylko przetestowane w V4.
Pobiera dane wejściowe
$n
. Tworzy nową tablicę z,
operatorem składającym się z$n
i.length
kiedy$n
jest konwertowany na ciąg. Łączy się z tym, że ciąg$n
rzutowany jako tablica znaków . Następnie cała tablica jest-join
edytowana razem z,+
zanim zostanie potokowanaiex
(podobnie doeval
). Wynik pozostawia się w potoku, a dane wyjściowe są niejawne.Na przykład dla danych wejściowych
-123
tablica wyglądałaby(-123, 4, -, 1, 2, 3)
, a łańcuch po niej-join
wyglądałby-123+4+-+1+2+3
. PotemInvoke-Expression
tak się dzieje, a wynik jest-115
zgodny z oczekiwaniami.źródło
Po uwzględnieniu
load-all
175 bajtówTo nie jest bardzo krótkie. Specjalna obsługa pojedynczego minus jest naprawdę denerwująca; Myślę, że mógłbym to zrobić lepiej i może zrobię to.
Za pomocą tego wyrażenia regularnego podstawienia:
Możemy zamienić przypadki testowe OP w zestaw testów Factor.
źródło
C #, 118 bajtów
źródło
1+ ++i
jest całkowicie absurdalny. Imos[i]<46
aby sprawdzić minus++i+1
?SpecBAS - 147 bajtów
Tworzy ciąg, który następnie uruchamia się. Niestety
EXECUTE
nie działa ze?
skrótemPRINT
, aleTEXT
uratował 1 postać.źródło
C #, 106 bajtów
Pokonałem java moim bajtem, moje życie jest kompletne
Ungolfed (kinda)
źródło
(n)=>{....
dla anonimowego lambdan=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
Chociaż musisz dodać +18, ousing System.Linq;
którym również zapomniałeś w bieżącej odpowiedzi.Java 8,
1741361221071059378 bajtów-14 bajtów dzięki @LeakyNun .
-15 bajtów dzięki @cliffroot .
Wyjaśnienie:
Wypróbuj online.
źródło
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
w końcu poczułeś się jak gra w golfa w Java @LeakyNun, czy Twój wariant działa? najpierw podaje złe odpowiedzi, a następnie ulega awarii.0
.38
na48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
yayPerl 6-30 bajtów
Tak dosłownie, jak to możliwe
Użyj go jako funkcji anonimowej
źródło
JavaScript (ES6), 38 bajtów
Wykorzystuje starą sztuczkę łączenia i ewaluacji. Zapisz 4 bajty, jeśli mogę nalegać na ciąg znaków:
źródło
C ++, 255 bajtów
źródło
Perl 5-37 bajtów
Dane wejściowe są w $ _
źródło
JavaScript (przy użyciu zewnętrznej biblioteki) (45 bajtów)
Korzystając z biblioteki, którą napisałem, aby przenieść LINQ do Javascript, mogłem napisać:
źródło
C,
13211611380Funkcja
f()
przyjmuje dane wejściowe jako ciąg znaków i zwraca wynik jako liczbę całkowitą. Pełna wersja programu (113 bajtów):Wymaga jednego argumentu.
źródło
Perl, 27 bajtów
Kod 22 bajtów + 5 dla
-paF
.Wyjaśnienie
Używa
-a
opcji autosplit z pustym separatorem (-F
), tworząc tablicę przekazywanych cyfr. Używa magicznej zmiennej,$"
która kontroluje, który znak jest używany do łączenia tablicy, gdy jest ona interpolowana w łańcuch (używamy"+"
tutaj) i fakt, że lista użyte w kontekście skalarnym zwróci długość listy (liczbę cyfr).Stosowanie
Perl, 27 bajtów
Kod 22 bajtów + 5 dla
-paF
.Alternatywne rozwiązanie, które jest o wiele bardziej czytelne dla nie więcej bajtów. Wolę drugi, ponieważ wygląda bardziej tajemniczo!
źródło
dc, 56 bajtów
Nie krótszy niż Joe powyżej, ale nieco inna implementacja (i taka, która przyjmuje liczby ujemne jako dane wejściowe vs. polecenie odejmowania). Prawdopodobnie można grać w golfa więcej, ale lunch trwa tak długo.
źródło
R, 108 bajtów
Trochę późno na imprezę, ale oto:
Aby ogólnie podzielić cyfry dowolnej liczby (np. Je zsumować), R wymaga od nas najpierw konwersji na ciąg, a następnie podzielenia ciągu na wektor ciągów. Podsumowując elementy, wektor łańcucha należy przekonwertować na liczbę lub liczbę całkowitą. To wraz z wyjątkiem z sumą cyfr liczby ujemnej zjada wiele bajtów.
Wyjątek może być nieco golfowy (do 96 bajtów), jeśli dozwolone są komunikaty ostrzegawcze.
W tym przypadku wektor łańcucha jest konwertowany bezpośrednio na liczbę całkowitą za pomocą
as.integer
. Jednak dla liczb ujemnych pierwszy element w wektorze będzie znak minus:"-"
. Powoduje to pewne problemy, np .:as.numeric(c("-",1,2,3))
powróciNA 1 2 3
i pojawi się komunikat ostrzegawczy. Aby to obejść, usuń NA, a następnie pomnóż pierwszy element-1
przed pobraniem sumy.źródło
RProgN, 30 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
Perl 5 , 22 + 1 (-p) = 23 bajty
Wypróbuj online!
źródło
AWK ,
64 6361 bajtówWypróbuj online!
Łącze TIO ma 6 dodatkowych bajtów,
s=j=0;
aby umożliwić wprowadzanie wielu wierszy. To najkrótsza metoda, jaką mogłem wymyślić. Jestem ciekawy, czy można to zrobić krócejAWK
.Zaoszczędzono 2 bajty, dzięki Kevin
źródło
$0=n+s+$0
można grać w golfa do$0+=n+s
(-2 bajtów)?