Problem:
Biorąc pod uwagę zestaw liczb całkowitych, znajdź w nim sumę wszystkich dodatnich liczb całkowitych.
Wejście:
- t - liczba przypadków testowych [ t <1000]
- W każdym z kolejnych t wierszy liczba całkowita N [-1000 ≤ N ≤ 1000]
Wynik
Program powinien wypisać sumę wszystkich liczb całkowitych dodatnich.
Sprawdź swój kod w internetowym sądzie
Wynik
Wynik jest równy rozmiarowi kodu źródłowego twojego programu, z wyjątkiem symboli z kodem ASCII ≤ 32.
Oto lista najlepszych wyników: Najlepsze wyniki w Pythonie (najlepszy wynik to 29)
code-challenge
gmunkhbaatarmn
źródło
źródło
T
(liczba ... errr ... liczb (?)) Nie jest opcją ... ponieważ przypadki testowe zawierają dodatkowe dane poT
liczbach ... twój kod zawiedzie w SPOJ. Wydawało się, że wszyscy (3 odpowiedzi poniżej) sprytnie pominęli pierwszą liczbę całkowitą.Odpowiedzi:
Biała spacja, 0
Nie mogłem się oprzeć.
S
= spacja,T
= tab,N
= nowa linia, wszystkie mają kody ASCII <= 32.Kodowane w standardzie Base64 dla łatwego kopiowania i wklejania.
źródło
S
kodowania binarnego liczby. Są to wszystkie instrukcje w formularzu push-number-stackSSSS...N
, w których 4.S
koduje zbędne wiodące 0. (Oczywiście nie ma to wpływu na wynik.)Element, 17 znaków plus 1 spacja
To jest mój pierwszy skonstruowany język. Został zaprojektowany tak, aby był bardzo kompaktowy i czytelny dla człowieka. Wszystkie instrukcje mają długość jednego znaku i spełniają jedną funkcję.
Element ma dwa stosy i skrót jako struktury pamięci. Dwa stosy nazywane są stosem głównym i stosem kontrolnym. Główny stos to miejsce, w którym występuje manipulacja arytmetyczna, we / wy i mieszania. Stos sterujący to miejsce, w którym zachodzą operacje logiczne, a stos ten steruje pętlą while i for.
Podstawową ideą elementu jest to, że istnieje skrót przechowujący liczby / ciągi znaków, podczas gdy stos służy do wykonywania obliczeń na tych liczbach. Wyniki tych obliczeń mogą następnie przypisać określone miejsce w haszu do przyszłego wykorzystania. Różne treści skrótu są nazywane elementami, więc jest podobny do tablicy, ale może mieć nazwy nienumeryczne.
EDIT: Można znaleźć tłumacza Element (napisany w Perlu) tutaj .
Oto lista operatorów: W niektórych z tych przykładów min oznaczają liczby już na stosie.
Oto przewodnik na temat działania programu:
źródło
Perl, 31
źródło
say
tego nie uczyniłoby tego nieco krótszym? Najlepiej pasowałby do 29 postaci.say
nie jest wbudowany i (przynajmniej) wymaga przełącznika wiersza polecenia, który byłby liczony do liczby znaków.$\
zamiast$i
:<>;$\+=$_*($_>0)while<>;print
Ruby 1.9.2, 37
Wywołaj jak rubinowa nazwa skryptu file_with_ints.
źródło
Ruby, 52
źródło
s
.Haskell, 58
Prawidłowo działa tylko na
t
liczbach całkowitych. Nie uruchomiłem tego przeciwko Spojowi, bo po prostu nie mam ochoty się tam zarejestrować.źródło
t
liczby całkowite”?kod w C 89 znaków
Dużo próbowałem zredukować mój kod do mniej niż 63 bajtów, ale mogę go zmniejszyć tylko do 89 bajtów. Pomóż mi zmniejszyć go do 63 bajtów lub nawet mniej.
źródło
return 0;
nie jest konieczne,for
cykl może zostaćfor(scanf(x,&t);t--;scanf(x,&a),a>0?b+=a:a);
skrócony do ==, co powoduje, że 78 znaków ...error: initializer element is not computable at load time x="%d"
Perl, 33
Chociaż przestrzeń jest niezbędna, dziwne wydaje się jej nie liczenie. No cóż, reguły są zasadami.
Hmm Prawdopodobnie mógłbym odejść od używania nazwy zmiennej, która również nie liczy się do sumy. Chodzi o to, że nie jestem pewien, jak wkleiłbym kod.
źródło
Clojure, 71
źródło
*in*
nie jest tojava.io.BufferedReader
, jak wymaga tegoline-seq
.Na pamiątkę Dennis M. Ritchie
unix
57¹72:zakładając, że i jest plikiem zawierającym ints.
¹) było błędne, zawierało liczbę linii i dodało 1 linię za mało.
echo $ (($ (cat i | head -n $ (head -n1 i) | grep -v "-" | tr '\ n' '+') 0))źródło
Haskell, 51
(dodatkowe spacje dla przejrzystości, ponieważ się nie liczą)
Haskell jest ... interesujący, ponieważ masz tendencję do otrzymywania programów ze znaczną liczbą potrzebnych miejsc.
źródło
filter (>0)
.C, 88
Po kolejnym dużym wysiłku kod jest o jeden znak mniej, pomóż mi bardziej go zmniejszyć.
źródło
return 0;
) i ({}
forfor
)b,x="%d";main(a,t){for(scanf(x,&t);t--&&scanf(x,&a);)b+=(a>0)*a;printf(x,b);}
<- 77 bajtówBefunge-98 (24)
(Upewnij się, że używasz interpretera, który może odczytywać liczby ujemne (wydaje się to być dość powszechnym błędem, ale RcFunge działa))
Perl (25)
(Perl zezwala na znaki sterujące w nazwach zmiennych, nazwałem swoją zmienną ^ B (ASCII 2), aby nie liczyć się do celu.)
(Wariant normalny (27 znaków)):
źródło
APL (10)
Wyjaśnienie:
⍳⎕
: przeczytaj wiersz, podaje listę [1..N] dla danych wejściowych użytkownika N¨
: dla każdego elementu na tej liście ... (tzn. wykonaj N razy)0⌈⎕
: przeczytaj wiersz, zwróć maksymalnie 0 i wprowadzony N+/
daje sumę tej listy.źródło
Mathematica:
1816źródło
PowerShell, 44
źródło
Pytanie 12
przykładowe użycie
źródło
befunge,
3524z niewielką inspiracją, widząc odpowiedź marinus, udało mi się również 24 znaki. ale mam zupełnie inne podejście.
źródło
PYTHON 2.x, 50 znaków
źródło
C, 70
72znakówWyniki na stronie SPOJ zdecydowanie wydają się nierealne - nie mam pojęcia, jak sprowadzić to do 63.
Jednak w niektórych kompilatorach można osiągnąć 68 znaków poprzez nadużywanie niezdefiniowanego zachowania. Poniższe działa w systemie Linux x86 z 32-bitowym gcc, na którym wszystkie stosy są przekazywane na stos.
źródło
excel, 27
policz t w A1, reszta danych a2 i w dół
źródło
Clojure, 108
Naprawdę chciałbym uniknąć tej
java.io.BufferedReader.
części, ponieważ sama kosztuje 24 znaki. Ale AFAIK bez tego nie ma możliwości odczytu linii ze STDIN.źródło
Perl, 20
Wiem, że jest stary i trywialny, ale odpowiedź na Perla można jeszcze poprawić:
źródło
}{
znaczy / robi?C ++:
115 znaków. Potrzebujesz zoptymalizować do 90. Jakieś sugestie?
źródło
return 0
wmain
. Ustawiając zmienne globalne, możesz porzucić=0
inicjalizację. W końcufor(;;)
jest taka sama liczba znaków,while()
ale masz dwa dodatkowe miejsca na wyrażenie.std::
beforecin
andcout
and getting rid of theusing namespace std;
can save 5 more characters.PHP, 71
źródło
Python: (92 characters)
źródło
a=raw_input
andr=range
and usinga()
andr()
later can save quite a few characters.scala
5554:źródło
C
źródło
sum
can be reduced tos
, the output string can just be"%d"
, etc.Ruby, 42
(based on david4dev's answer)
Best score for Ruby on spoj: http://www.spoj.com/ranks/SIZECON/lang=RUBY
źródło
45 chars in python
źródło