Zadanie
Zbuduj kalkulator, który pobiera dowolny ciąg znaków z pliku, standardowego pliku itp. I sumuje wszystkie wartości znaków.
Przykład
Input
Hello World!
Output
1085
Zasady
Kalkulator musi akceptować tylko kodowanie ASCII.
Najkrótszy kod wygrywa.
Notatki
Jeśli chodzi o komentarz m.buettner, muszę powiedzieć, że nie myślałem o części wielobajtowej.
Więc zostawiam to również jako bonus.
Kalkulator powinien być uruchamiany tak, jak napisano, więc nie trzeba go modyfikować przed kompilacją lub interpretacją.
Premia
Dzięki Synthetica jest jeszcze jeden bonus,
Program, który ma najmniejszą moc wyjściową, gdy używasz kodu, gdy jego wejście
wygrywa,otrzymuje gwiazdkę.
Nie chcę go całkowicie modyfikować.
Jeśli napiszesz ją dodatkowo, aby wyprowadzić (prawą) wartość w UTF-8, otrzymasz gwiazdkę.
Kod, który działa najszybciej na moim laptopie (Lenovo Yoga 13 Intel Core i5 3317U 1,7 GHz, 8 GB pamięci RAM, 128 GB SSD, Intel HD 4000, Windows 8) dostaje gwiazdkę.
Kody sieciowe będą uruchamiane najpierw w IE11 z chakrą, a następnie w FireFox 29.0.1 z SpiderMonkey
Kod systemu Linux będzie działał na Raspberry Pi z Raspbian.
Ciąg testowy jest następujący:
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
Miłego kodowania :)
Bonusscoring
Mam zamiar zrobić punktację w tę sobotę, więc 07.06.14, wszystkie odpowiedzi po tej dacie nie dostaną punktów bonusowych;)
Możesz pobrać kod, którego użyję do testowania tutaj , możesz go rozwinąć i ulepszyć :)
Mała aktualizacja ze względu na bonus, mój laptop jest częściowo zepsuty, więc zrobię to prawdopodobnie w następny weekend, bardzo mi przykro z tego powodu :(
Hello World!
używanie dwóch różnych języków dla wartości ASCII na moim komputerze.Odpowiedzi:
GolfScript, 4 znaki
Wystarczy użyć operatora fold (
*
), aby dodać wszystkie znaki.Jeśli musi działać z pustym łańcuchem, 9 znaków:
Dzięki @PeterTaylor za udostępnienie alternatywnej wersji 6-znakowej, która działa z pustym ciągiem znaków:
źródło
0\{+}/
obsługuje pusty ciągAPL (8)
Wyjaśnienie:
+/
suma⎕UCS
wartości Unicode dla⍞
wprowadzanie znakówźródło
Hello World!
?1085
. Byłoby niepoprawne, gdyby dał inny wynik. Sumuje wartości znaków kodowych Unicode.⍞
znaczy;)⍞
oznacza odczytanie linii z klawiaturyHaskell 36
źródło
$ printf "Hello World!" | ./charsum
ECHO "Hello World! | ghci charsum.hs
interact
ishow
zamiastgetContents>>=print
:main=interact$show.sum.map fromEnum
Narzędzia Shell + GNU, 29 bajtów
Pobiera dane wejściowe ze standardowego wejścia:
Wynik własny: 2385
c, 52 bajty
Skompiluj z (wygenerowano niektóre ostrzeżenia):
Pobiera dane wejściowe ze standardowego wejścia:
Wynik własny: 4354
źródło
od
poleceniu?od -AntuC
nie robi tego samego cood -An -tuC
.od-An-tuC
lubod -An-tuC
JavaScript ( ES6 ) 51
źródło
...
przedtemprompt
? Czy to nowa rzecz w ES6, czy też jest w wersji wcześniejszej niż ES6?[...prompt(x=0)]
wziął monit z domyślną wartością 0 (która później będzie używana w sumie) i zastosuje to wejście jako tablicę znaków ... ? Który technicznie byłby taki samprompt(x=0).split("")
, prawda?prompt(x=0)
oznacza „ustaw x na 0, zadzwońprompt
z wartością ustawienia x na 0”, to znaczy 0. Byłoby to równoznaczne z zapisaniem(x=0,prompt(x))
gs2 , 1 bajt
d
(0x64
/sum
) oczywiście sumuje wszystkie bajty na standardowym wejściu.źródło
Python 3-28 bajtów
Przykładowy przebieg:
Pobiera dane wejściowe z stdin,
map
sord
funkcja do niego, aby uzyskać wartość ASCII każdego znaku,sum
s it iprint
s.źródło
print sum(map(ord,raw_input()))
map(ord,input())
nainput().encode()
. Obiekty bajtów mogą być nadal sumowane i mają tę samą długość.8086 Zestaw (16 bitów) -
4741 bajtówZawartość
test.com
pliku to:Rzeczywista praca jest wykonywana w pierwszych 11 bajtach; Potrzebuję reszty, aby wydrukować wynik w notacji dziesiętnej.
Kod źródłowy (podaj jako dane wejściowe do
debug.com
asemblera DOS ):Kilka uwag na temat kodu:
źródło
CJam, 3 bajty (suma 260)
Możesz spróbować online .
Dzięki jimmy23013 za pomoc w odcięciu 2 znaków :)
Wyjaśnienie:
źródło
q1b
jest krótszy.Befunge98, 6 bajtów, suma: 445
Każdy tłumacz powinien mieć się dobrze. Używam CCBI .
Użyj w następujący sposób:
Działa dla wielobajtowych znaków i pustych ciągów.
Wyjaśnienie
2j
- przeskocz przez kolejne dwie instrukcje (@
i.
- patrz poniżej)~
- połóż następny znak na stosie+
- dodaj wartość kodu nowego znaku do bieżącej sumy. Wskaźnik instrukcji zawija się na początek i cykl się powtarza~
napotka EOF, odwraca kierunek wskaźnika i wykonywane są dwie „ukryte” instrukcje:.
- wydrukuj sumę@
- wyjścieźródło
Rubin,
1312 bajtówsum
jest wbudowaną funkcją, która sumuje znaki ciągu. Odejmuje 10, aby uwzględnić nowy wiersz na końcugets
wartości zwracanej.(Edytowany 4 lata później, aby zmienić
x-10
na~9+x
... wartość~9
jest-10
, ale pozwala nam usunąć spacjęp
i argument, oszczędzając bajt.)źródło
p
to metoda wyprowadzania wartości debugowania czegoś w linii.PowerShell - 27
Przykład
źródło
[char[]]"$args"|measure -s
tak długo, jak długo jest tylko jeden wpis $ arg.Julia -
117 znaków, suma wynikowa =943536Ponieważ pytanie pozwala na wejście z dowolnego źródła, wybieram istniejącą zmienną. Załóżmy, że
A
zawiera ciąg, który chcemy ocenić.Jak się okazuje, możesz zsumować ciąg bezpośrednio, a on oceni ... Jednak ze względu na sposób, w jaki obsługiwane jest sumowanie znaków, jeśli w ciągu znajduje się nieparzysta liczba znaków, wyśle znak, zamiast jakiejkolwiek liczby całkowitej. W związku z tym wymuszamy rzutowanie na int przez pomnożenie przez 1.
Stara wersja:
Wyjdzie w zapisie szesnastkowym (jeśli suma jest mniejsza niż 256, to będzie
0x??
, w przeciwnym razie będzie to 8 bajtów jako0x????????
). Jeśli zostanie użyty w kodzie, w którym wynik jest użyty, będzie działał jak każdy inny numer (w ten sposób Julia wyświetla bez znaku int).Aby zobaczyć wartość wyniku w postaci dziesiętnej, załącz powyższe w
int()
, jak wint(sum(A.data))
.Dla każdego, kto nie zna Julii, przypisujesz
A
dokładnie to samo, co inne przypisania do zmiennych. WięcA="Hello World!"
lubA="sum(n.data)"
. W przypadku, gdy musisz wstawić"
lub'
znaki, istnieje wiele opcji, z których najłatwiejszym (ponieważ unika się potrzeby znajomości niuansów literałów ciągów Julii)A=readline()
, a następnie po prostu wpisuje ciąg do STDIN (wygrał t obsługuje jednak nowe linie). Sekwencja zmiany znaczenia dla nowego wiersza jest, jak zwykle,\n
ale nie sądzę, że można tego użyć z readline ().źródło
n
? W ogóle nie znam Julii;)n
na,A
aby zmniejszyć wynikową sumę z 988 na 943..data
; ale ponieważ są postaciami, dają wynik postaci dla nieparzystej liczby znaków. Mnożenie przez 1 poprawia to.K5, 2 bajty (funkcja), 5 bajtów (program)
Funkcjonować
Program
Nie jestem pewien, czy K5 został utworzony przed, czy po opublikowaniu tego wyzwania. Niezależnie od tego ... TO JEST NIESAMOWITE !!
W K5, jeśli wykonujesz operacje arytmetyczne na łańcuchach, konwertuje znaki na ich kody ASCII. Więc to po prostu używa operatora sumy
+/
(właściwie to plus + ponad).źródło
Matlab / Octave 4 bajty (premia: 405)
Ten kod jest anonimową funkcją, która wykonuje zadanie, pobiera ciąg znaków i zwraca wymaganą liczbę.
źródło
gs2
odpowiedzi, ale przynajmniej przy takim samym podejściu jak odpowiedź Julii nadal powinienem pisaćsum(A)
. Myślę, żesum
sam nie jest w porządku (nie byłby nawet prawidłowym kodem =).Idź (59 znaków)
Wszystko w Go jest domyślnie utf8. Tekst kodowy w `delimetrach przebiegających przez siebie daje wynik: 5399.
źródło
math.Sum
można go używać zmap
podobnymJolf, 2 bajty (niekonkurujące)
Wypróbuj tutaj!
Umm ... nie wiem co jeszcze powiedzieć.
źródło
Gol> <> , 4 bajty (niekonkurujące)
Uwaga: ten język jest nowszy niż wyzwanie.
źródło
JavaScript ES6, 41 bajtów
Dzięki @ETHproductions za 2 bajty zapisane!
źródło
_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x
?Python, 24 bajty
Jest to krótsze niż jakiekolwiek dotychczasowe rozwiązanie Pythona: anonimowa funkcja anonimowa, która przyjmuje ciąg znaków jako argument i zwraca sumę.
Wypróbuj online!
Najpierw
x.encode()
przekształca go wbytes
obiekt. Następniesum
dodaje wartości char-code. Ponieważ jest to funkcja lambda, wartością jest zwracana implikacja.Dodatkowo można mieć
lambda x:sum(map(ord,x))
taką samą liczbę bajtów.źródło
SML,
4236Właśnie dodałem inny język.
Konwertuje ciąg znaków na tablicę znaków, oblicza liczbę ascii każdej wartości i oblicza sumę wszystkich liczb ascii.
źródło
;
. 36 bajtów: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/…C 32
źródło
main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}
(107 znaków), choć z jakiegoś powodu ignoruje pierwszą postać. Ponadto kody wyjścia POSIX to tylko 8 bitów; w bashuecho $?
.D (funkcja: 60)
Zdecydowanie nie ma w nim wygrać.
Zakładając, że nie musi to być kompletny program
Tak się nazywa
Wynik:
D (program: 133)
Nie liczy podziałów linii.
Z większą ilością białych znaków i dłuższymi nazwami zmiennych dla czytelności
Aby wesprzeć podział wiersza na wejściu, mógłbym użyć
byLine(KeepTerminator.yes)
- w prawidłowy sposób, dla 20 znaków - lub dołączyć'\n'
do mojej linii - który przerywa wprowadzanie jednowierszowe i może podawać nieprawidłową sumę w systemie Windows z powodu CRLF, dla 18 znaków.źródło
JavaScript (ES6) 54
5854 bajty dzięki nderscore :źródło
alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
Delfy (
8783)Bez golfa
Pętle poprzez
S
dodanieord
wartości znaku do wyniku. gdzie x == wynikEdycje:
Zapisano 4 znaki, przechodząc na int64 i zmieniając dodawanie do sumy.
źródło
k (8 znaków)
Tłumaczenie Q.
Wartość bonusowa:
źródło
J (7)
Tak blisko, ale jak dotąd ... No cóż, chyba 7 jest wystarczająco przyzwoite, ponieważ ta odpowiedź akceptuje również puste ciągi. (Używam zmiennej jako danych wejściowych do wyrażenia
from a file, stdin or whatever
)Wyjaśnienie:
a.
zawiera wszystkie znaki ASCII.x i. y
jest podobny do Pythona[x.index(i) for i in y]
.Dlatego
a. i. y
konwertujey
na tablicę wartości ASCII+/
jest jaksum
:+/1 2 3 4 5 6
oznacza1+2+3+4+5+6
Cała sprawa w akcji
Aby otrzymać bonus:
Chyba nieźle.
Cholera.
Dzięki @algorytmshark
Dzięki @marinus
źródło
b
naA
wynik w 449.R,
35 znaków (suma 3086)26 bajtów (suma 2305)readline()
jest o jeden znak dłuższy niż,scan(,"")
alescan
domyślnie dzieli dane wejściowe na spacje.Stosowanie:
źródło
Japt , 6 bajtów (niekonkurujące)
Ta odpowiedź nie jest konkurencyjna, ponieważ Japt został utworzony po opublikowaniu tego wyzwania.
Dość proste. Wypróbuj online!
Jak to działa
źródło
¬
jakiejś negacji?url/interpreter.html#new=1
); cokolwiek bez niego używa starego zestawu znaków, a cokolwiek z nim korzysta z nowego zestawu znaków.PlatyPar , 2 bajty (niekonkurujące)
Wypróbuj online !
u
generuje tablicę wszystkich wartości znaków w ciągu wejściowym is
znajduje ich sumę.Po uruchomieniu na siebie wraca
232
.Jest to podobne do odpowiedzi Conora Jolfa , z tym wyjątkiem, że używam bajtu do konwersji łańcucha znaków na tablicę kodów znaków (co jest jawne w Jolfie), podczas gdy używa bajtu do pobierania danych wejściowych (co jest niejawne w PlatyPar).
źródło