Cześć, witamy w PPCG. Wyzwania związane z jednym językiem są zwykle źle oceniane w PPCG. Może możesz zmienić to na ogólne wyzwanie: biorąc pod uwagę ciąg, wypisz sumę wszystkich liczb w ciągu, ignorując wszystko inne (tzn. "the 5is 108 seCONd4 a"Spowoduje to , 117ponieważ 5+108+4=117). Ponadto każde „pytanie” powinno mieć tag warunku zwycięskiego . W tym przypadku zakładam, że jest to [code-golf] (jest najkrótszym możliwym rozwiązaniem)?
Kevin Cruijssen
4
Wygląda na to, że zamieściłeś podobne pytanie na SO, które zwykle potwierdza, że nie zostało zaprojektowane jako wyzwanie PPCG i szukasz kodu „użytecznego”, a nie kodu golfowego. Zamiast tego polecam ulepszyć swoje pierwotne pytanie w SO, aby lepiej pasowało do reguł witryny.
Arnauld
4
Zmieniłem Twój post, aby pasował do naszych standardów. Edytuj, jeśli wynik Ci nie odpowiada.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: SumOperator Charcoal automatycznie wyodrębnia liczby z ciągu, jednak jeśli ciąg nie zawiera znaków innych niż cyfry, wówczas pobiera sumę cyfrową, więc łączę bajt zerowy, aby tego uniknąć. Wynik jest następnie rzutowany z powrotem do łańcucha w celu uzyskania niejawnego wyniku.
Dlaczego nie. Obowiązkowa odpowiedź wyrażenia regularnego. Prawdopodobnie mógłby zadokować 6 za pomocą Pythona 2, ale cokolwiek. Nie ma już zastosowania, ponieważ używam ewaluacyjnego podejścia zamiast mapy.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
Ładny! Jednak w TIO powinieneś używać z == l[1]zamiast z is l[1]tego. Obecny kod może dawać fałszywe negatywy, jeśli liczby będą wystarczająco wysokie.
Dość prosty. Iw cubix weźmie pierwszą liczbę całkowitą na wejściu i wypchnie ją na stos. To powoduje pomijanie wszystkich postaci. Reszta zajmuje się dodatkowym i wykrywaniem końca wejścia.
I! Wpisz liczbę całkowitą i przetestuj ją na 0
s+q;;Jeśli nie zero, zamień TOS (siły i początkowe 0) i dodaj. Przesuń wynik na spód stosu i wyczyść górę. Wróć do początku.
/i? Jeśli zero, przekieruj i wprowadź znak, aby sprawdzić
|?;/Jeśli dodatni (znak) skręca w prawo w odbicie, to popycha go z powrotem przez szachownicę ?i skręca w prawo na pop ze stosu, pozostawiając 0 na TOS. Następnie adres IP zostaje przekierowany z powrotem do głównej pętli.
I>p.O@ jeśli ujemny (koniec wejścia) skręca w lewo, wprowadź liczbę całkowitą, przenieś spód stosu na górę, wyjdź i zatrzymaj.
Bardziej interesująca, ale pośrednia odpowiedź (37 bajtów): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Wyjaśnienie
Sum##N=>MatchAll&"\\d+"
Ma to postać:
f##g=>h&x
która po rozwinięciu i nawiasie staje się:
f ## (g => (h&x))
##tworzy dwie funkcje razem, =>tworzy funkcję odwzorowującą funkcję lewą na wynik funkcji prawej i &wiąże argument z boku funkcji. W przypadku danych wejściowych _jest to równoważne z:
{ f[Map[g, h[_, x]]] }
Najpierw MatchAlluruchamiamy cyfry ( \\d+). Następnie konwertujemy każdy przebieg na rzeczywistą liczbę całkowitą za pomocą Nfunkcji. Na koniec bierzemy sumę tych liczb za pomocą Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
Nie sądzę, żeby to było poprawne: (jedyny) przykład OP sugeruje, że kolejne cyfry powinny tworzyć jedną liczbę całkowitą, więc „123” powinno dawać 123, a nie 6, jak twój kod.
-4 bytesza pomocą Long::newzamiast Long::valueOf. -1 byteprzez skrócenie wyrażenia regularnego - jeśli później usuwamy już puste ciągi, tworzenie dodatków przy dzieleniu jest w porządku.
Wyjaśniono
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
Spowoduje to ,117
ponieważ5+108+4=117
). Ponadto każde „pytanie” powinno mieć tag warunku zwycięskiego . W tym przypadku zakładam, że jest to [code-golf] (jest najkrótszym możliwym rozwiązaniem)?string x='-12hello3';
czy liczycie ujemne liczby całkowite (tj. -12 + 3 === -9)?Odpowiedzi:
JavaScript,
3432 bajtys=>eval(s.match(/\d+/g).join`+`)
Dopasuj wszystkie cyfry i połącz je,
+
zmieniając go na 5 + 108 + 4, aby sprawdzić wynik.Działa tylko na dodatnich liczbach całkowitych.
Zaoszczędź 2 bajty dzięki Arnauldowi
źródło
console.log(f.toString().length)
, ale to nie 100% wiarygodne albo.Perl 6 , 14 bajtów
Wypróbuj online!
Anonimowy blok kodu, który zwraca sumę wszystkich serii cyfr
źródło
05AB1E ,
116 bajtówWypróbuj online.
Wyjaśnienie:
źródło
¡
!R ,
644845 bajtówPo zobaczeniu wpisu PowerShell mogłem dalej grać w golfa.
Wypróbuj online!
źródło
t=
wystarczy tutaj zamiasttext
APL (Dyalog Unicode) , 11 bajtów
Anonimowa ukryta funkcja pref
Wypróbuj online!
⊢
argument⊆
podzielone na partycje (przebiegi True stają się częściami, przebiegi False są separatorami) według∊
członków∘
z⎕D
zestawem cyfr#⍎¨
oceń każdy w głównej przestrzeni nazw+/
sumaźródło
Retina 0.8.2 , 8 bajtów
Wypróbuj online!
źródło
PowerShell , 29 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 5 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie:
Sum
Operator Charcoal automatycznie wyodrębnia liczby z ciągu, jednak jeśli ciąg nie zawiera znaków innych niż cyfry, wówczas pobiera sumę cyfrową, więc łączę bajt zerowy, aby tego uniknąć. Wynik jest następnie rzutowany z powrotem do łańcucha w celu uzyskania niejawnego wyniku.źródło
Haskell , 50 bajtów
Wypróbuj online!
Prawdopodobnie jest lepszy sposób, ale jest to najbardziej oczywisty.
źródło
Zsh , 21 bajtów
Wypróbuj online!
Niestety bash narzeka, ponieważ interpretuje
0108
jako ósemkowy. Zsh nie (chyba żesetopt octalzeroes
)źródło
Bash, 43 bajty
Zastępuje każdą liczbę nie będącą liczbą spacją, a następnie sumuje je razem.
-5 bajtów dzięki GammaFunction
źródło
{
}
zamiastdo
done
.Python 3 ,
635956 bajtówDlaczego nie. Obowiązkowa odpowiedź wyrażenia regularnego.
Prawdopodobnie mógłby zadokować 6 za pomocą Pythona 2, ale cokolwiek.Nie ma już zastosowania, ponieważ używam ewaluacyjnego podejścia zamiast mapy.Wyjaśnienie:
Wypróbuj online!
źródło
z == l[1]
zamiastz is l[1]
tego. Obecny kod może dawać fałszywe negatywy, jeśli liczby będą wystarczająco wysokie.Java 10, 66 bajtów
To jest lambda od
String
doint
.Ujemne liczby całkowite nie są obsługiwane. Prawdopodobnie w porządku.
Wypróbuj online
Podziękowanie
źródło
[^0-9]
na\D
kilka bajtów, także można przełączyćlong
iString
navar
(chociaż trzeba będzie zmienić typ zwracany doint
Ruby,
3227 znakówPodziękowanie
źródło
*?+
zamiast.join ?+
-7 bajtów. Patrz ary * strCubix , 17 bajtów
Wypróbuj online!
Zobacz, jak biegnie
Dość prosty.
I
w cubix weźmie pierwszą liczbę całkowitą na wejściu i wypchnie ją na stos. To powoduje pomijanie wszystkich postaci. Reszta zajmuje się dodatkowym i wykrywaniem końca wejścia.I!
Wpisz liczbę całkowitą i przetestuj ją na 0s+q;;
Jeśli nie zero, zamień TOS (siły i początkowe 0) i dodaj. Przesuń wynik na spód stosu i wyczyść górę. Wróć do początku./i?
Jeśli zero, przekieruj i wprowadź znak, aby sprawdzić|?;/
Jeśli dodatni (znak) skręca w prawo w odbicie, to popycha go z powrotem przez szachownicę?
i skręca w prawo na pop ze stosu, pozostawiając 0 na TOS. Następnie adres IP zostaje przekierowany z powrotem do głównej pętli.I>p.O@
jeśli ujemny (koniec wejścia) skręca w lewo, wprowadź liczbę całkowitą, przenieś spód stosu na górę, wyjdź i zatrzymaj.źródło
PHP ,
4039 bajtówWypróbuj online!
Uruchom z
php -nF
wejściem pochodzi ze STDIN. Przykład:źródło
Haskell , 43 bajty
Wypróbuj online!
Wykorzystuje
reads
.źródło
Z przodu 13 bajtów
Działa to, ponieważ
I
po prostu skanuje strumień wejściowy w poszukiwaniu następnego tokena, który wygląda jak liczba, ignorując wszystko inne.Wypróbuj online!
źródło
QuadR , 9 bajtów
Wypróbuj online!
+/
suma⍎
ocena jako APL z⍵
wynik\D
zamieniając każdą cyfrę na innąźródło
Japt
-x
, 5 bajtówWypróbuj online!
źródło
Attache , 23 bajty
Wypróbuj online!
Bardziej interesująca, ale pośrednia odpowiedź (37 bajtów):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Wyjaśnienie
Ma to postać:
która po rozwinięciu i nawiasie staje się:
##
tworzy dwie funkcje razem,=>
tworzy funkcję odwzorowującą funkcję lewą na wynik funkcji prawej i&
wiąże argument z boku funkcji. W przypadku danych wejściowych_
jest to równoważne z:Najpierw
MatchAll
uruchamiamy cyfry (\\d+
). Następnie konwertujemy każdy przebieg na rzeczywistą liczbę całkowitą za pomocąN
funkcji. Na koniec bierzemy sumę tych liczb za pomocąSum
.źródło
APL (NARS), znaki 13, bajty 26
test:
źródło
C # (interaktywny kompilator Visual C #),
117111 bajtówWypróbuj online.
źródło
Perl 5
-p
, 17 bajtówWypróbuj online!
źródło
Japt v2.0a0
-x
, 3 bajtyKolejna jazda próbna dla mojego interpretera (bardzo WIP).
Spróbuj
źródło
Java 8,
53130 bajtów105 bajtów + 25 bajtów na import wyrażenia regularnego
Wypróbuj online!
Wyjaśnienie
źródło
SNOBOL4 (CSNOBOL4) , 81 bajtów
Wypróbuj online!
źródło
Szybki, 109 bajtów
Wypróbuj online!
źródło
Pip , 6 bajtów
Traktuje
-123
jako ujemną liczbę całkowitą. Wypróbuj online!Jeśli łączniki powinny być ignorowane, a nie traktowane jako znaki minus, to następujące działanie działa dla 7 bajtów :
XD
jest predefiniowaną zmienną dla`\d`
;+XD
dodaje+
do niego modyfikator wyrażenia regularnego , dopasowując go do 1 lub więcej cyfr.źródło
Java (JDK) ,
989493 bajtówWypróbuj online!
-4 bytes
za pomocąLong::new
zamiastLong::valueOf
.-1 byte
przez skrócenie wyrażenia regularnego - jeśli później usuwamy już puste ciągi, tworzenie dodatków przy dzieleniu jest w porządku.Wyjaśniono
źródło