Zadanie
Zadanie jest bardzo proste. Biorąc pod uwagę niepusty ciąg zawierający cyfry , wielkie i małe litery , wypisz sumę pozostałych liczb. Na przykład:
a1wAD5qw45REs5Fw4eRQR33wqe4WE
Filtrowanie wszystkich liter spowoduje:
1 5 45 5 4 33 4
Suma tych liczb to 1 + 5 + 45 + 5 + 4 + 33 + 4 = 97
. Więc wynik byłby 97
.
Przypadki testowe
a > 0
0 > 0
5 > 5
10 > 10
a0A > 0
1a1 > 2
11a1 > 12
4dasQWE65asAs5dAa5dWD > 79
a1wAD5qw45REs5Fw4eRQR33wqe4WE > 97
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Odpowiedzi:
GS2, 2 bajty
Wypróbuj online!
Jak to działa
źródło
Labirynt , 8 bajtów
Weź to, Pyth ...
Wypróbuj online!
Wyjaśnienie
Zwykły podkład (skradziony ze Sp3000):
Przydaje się tutaj to, że Labirynt ma dwa różne polecenia wejściowe
,
i?
. Pierwszy z nich odczytuje pojedynczy bajt ze STDIN lub-1
z EOF. Ten ostatni odczytuje liczbę całkowitą ze STDIN. Robi to pomijając wszystko, co nie jest jest liczbą, a następnie odczytuje pierwszą znalezioną liczbę dziesiętną. Ten powraca0
w EOF, więc nie możemy go użyć do wiarygodnego sprawdzenia EOF tutaj.Główną pętlą programu jest ten kompaktowy bit:
Gdy
?
czytamy liczbę całkowitą (ignorując wszystkie litery),+
dodajemy ją do bieżącej sumy (która zaczyna się jako jedna z niejawnych zer na dole stosu). Następnie czytamy inną postać,,
aby sprawdzić EOF. Tak długo, jak nie jesteśmy w EOF, odczytywany znak będzie literą, która ma dodatni kod znaku, więc adres IP skręca w prawo (z jego punktu widzenia, tj. Na zachód).;
odrzuca postać, ponieważ nie jest nam potrzebna, a następnie ponownie wchodzimy do pętli.Gdy jesteśmy w EOF,
,
przesuń a,-1
więc IP skręca w lewo (na wschód).;
ponownie odrzuca to-1
,!
wypisuje bieżącą sumę jako liczbę całkowitą i@
kończy działanie programu.źródło
CJam, 13 bajtów
Naprawiono do pracy z wprowadzaniem bez liczb dzięki Dennis! Zapisano również bajt, zastępując tablicę liter tablicą ASCII powyżej kodu 64. Kolejny bajt zapisany przez Dennisa!
Prosta transliteracja z liter na spacje, następnie ewaluacja i sumowanie. Wypróbuj online .
źródło
MATL , 8 bajtów
Wypróbuj online!
źródło
Siatkówka oka ,
2211Wypróbuj online!
11 bajtów (!) Zapisanych dzięki Martinowi!
Zasadniczo od dziesiętnego do unarnego, a następnie policz
1
s.źródło
$0
domyślać, jeśli podstawienie zaczyna się$*
. To bardzo powszechny wzorzec, który pozwoliłby ci pokonać Pytha. ;)Japt, 2 bajty
Przetestuj online!
Jak to działa
źródło
JavaScript ES6, 35 bajtów
Jak to działa
Najpierw zamieniamy każdy ciąg znaków innych niż cyfry na
"+"
. Istnieją w zasadzie cztery różne sposoby, w jakie może to zakończyć:Sprawy 1 i 2 zostały już załatwione. Ale w jakiś sposób musimy naprawić ten ostatni,
+
aby nie spowodował błędu. Możemy to usunąć za pomocą.replace(/\+$,"")
, ale to zbyt kosztowne. Możemy dodać a0
na końcu, ale wpłynęłoby to na ostatnią liczbę, jeśli ciąg nie kończy się na+
. Kompromisem jest dołączenie.0
, które samo w sobie jest poprawną liczbą i nie wpływa na wartość innych liczb całkowitych.Oto kilka innych wartości, które również by działały:
Alternatywna wersja, również 35 bajtów
Kolejna alternatywna wersja, 36 bajtów
źródło
Pyth,
121110 bajtówNa szczęście
s
(konwersja na int) zwraca0
po zastosowaniu do pustego ciągu, więc nie muszę się martwić o to, żesplit("a1b", "\D+")
zwraca["", "1", ""]
. Podobniesplit("a", "\D+")
zwraca["", ""]
.To pozwala mi nawet dzielić na każdą cyfrę osobno
1 + 0 + 0 + 0 + 0 + 2
jest to to samo, co1 + 2
.Dzięki Thomas Kwa za bajt!
źródło
Gol> <> , 4 bajty
Tak krótki, że potrzebuję smoczego tekstu ...
źródło
Perl 6 , 18 bajtów
Stosowanie:
źródło
Galaretka, 6 bajtów
Wypróbuj online!
Jak to działa
źródło
Perl, 21 + 1 = 22 bajtów
Wymaga
-p
flagi:źródło
a
?0
;-)Julia, 35 bajtów
Jest to anonimowa funkcja, która przyjmuje ciąg znaków i zwraca liczbę całkowitą. Aby go wywołać, przypisz go do zmiennej.
Używamy,
matchall
aby uzyskać tablicę składającą się z dopasowań wyrażenia regularnego\d+
, które są tylko liczbami całkowitymi w ciągu. Musimy wstawić 0 na początku łańcucha, w przeciwnym razie w przypadku takich przypadków"a"
sumujemy pustą tablicę, co powoduje błąd. Następnie stosujemyparse
do każdego dopasowania ciągu, które konwertuje się na liczby całkowite i bierzemy sumę.źródło
parse
może się stać,int
jeśli nie masz nic przeciwko ostrzeżeniu o rezygnacji.PHP, 64 bajty
Uruchom jako
https://eval.in/517817
źródło
<?
zamiast<?php
?JavaScript,
3239 bajtówPokaż fragment kodu
źródło
Mathematica, 51 bajtów
Łapanie niewłaściwego końca pełnych poleceń wbudowanych w Mathematica. 1 Bajkot przy pomocy @DavidC
źródło
DigitCharacter ..
zapisze 1 bajtDigitCharacter
nie działa tak, jak napisano, ponieważ usuwa wszystkie cyfry, a my chcemy usunąć wszystkie litery ...Total@ ToExpression@StringCases[#, DigitCharacter ..] &
R,
4643 bajtówWyjaśnienie
Przykładowy przebieg
Edit: Wymieniłem
[^0-9]
z\\D
.źródło
PowerShell,
2826 bajtówPobiera dane wejściowe,
$args
a następnie dokonuje wyrażenia regularnego,-replace
aby zamienić litery+0
, a następnie potokuje toiex
(skrótInvoke-Expression
i podobne doeval
).Alternatywnie
Jeśli nie masz nic przeciwko zewnętrznym wynikom, możesz wykonać następujące czynności, również przy
2826 bajtach:Spowoduje to przeniesienie ciągu wejściowego
$args
i umieszczenie-split
go w tablicy ciągów znaków innych niż liczby (usunięcie ich w trakcie procesu). Na przykład1a2b33
zamieniłby się w['1','2','33']
. Podajemy toMeasure-Object
za pomocą-Sum
parametru. Dane wyjściowe byłyby następujące:Edycja - durr, nie potrzebuję
[ ]
wyrażenia regularnego, ponieważ nie określam już listy możliwych dopasowań ...źródło
Gema, 39 znaków
Przykładowy przebieg:
źródło
Poważnie, 13 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
a
. Powinna być poprawka jednobajtowa.Java, 70 bajtów
źródło
TI-Basic, 106 bajtów
Działa na kalkulatorach TI-83/84!
źródło
Clojure / ClojureScript, 35 bajtów
źródło
R, 50 bajtów
Wymaga
gsubfn
zainstalowaniaUżywa
strtoi
przymusu do numerycznegoźródło
Ruby 45 bajtów
(Pierwsza próba pracy, ponownie ją odwiedzę)
źródło
POSIX sh + tr + dc,
2725 bajtówKonwertuje dowolny ciąg znaków innych niż cyfry (w tym kończący znak nowej linii) na
+
operator, wypycha dwa zera na stos (w przypadku, gdy wprowadzanie rozpoczyna się od cyfry), dodaje je wszystkie i drukuje wynik. Na dole stosu może pozostać dodatkowe zero, ale nie dbamy o to.źródło
Lua, 51 bajtów
Na razie dość krótko! Jeszcze krótszy niż Java! Dane wejściowe muszą być argumentem wiersza polecenia, aby działały.
Nie golfił
źródło
Narzędzia Bash + GNU, 29
Jeśli wymagane jest wsparcie wprowadzania bez liczb (np
a
), Możemy to zrobić:Narzędzia Bash + GNU, 38
1 bajt zapisany dzięki @TobySpeight.
źródło
a
. Obecnie dyskutujemy, czy jest to ważne, czy nie.;
zamiast||
zawsze dodawać zero, bez szkody.Python 2, 70 bajtów
Dla przyjemności zamieszczam odpowiedź w języku Python.
Bardzo prosty i używa wyrażenia regularnego, aby znaleźć wszystkie liczby na wejściu. Wypróbuj online!
źródło
raw_input
lub przejść na Python3. Mniejsza wersja (py3 56 bajtów)import re;print(sum(map(int,re.findall('\d+',input()))))
.Oracle SQL 11.2, 105 bajtów
Wyrażenie regularne konwertuje znaki alfa na „,”
XMLTABLE utwórz jeden wiersz dla każdego elementu w ciągu, używając „,” jako separatora.
SUMUJ wiersze, aby uzyskać wynik.
NVL jest potrzebne, aby uwzględnić ciąg bez cyfr.
źródło