입력
문자열
산출
줄에있는 모든 정수의 합입니다.
제약
선 ≤500의 1≤Length
샘플 테스트 사례
입력
the 5is 108 seCONd4 a
산출
117
설명
합계 : 5 + 108 + 4 = 117
string x='-12hello3';음수를 계산합니까 (예 : -12 + 3 === -9)?
문자열
줄에있는 모든 정수의 합입니다.
선 ≤500의 1≤Length
입력
the 5is 108 seCONd4 a
산출
117
설명
합계 : 5 + 108 + 4 = 117
string x='-12hello3';음수를 계산합니까 (예 : -12 + 3 === -9)?
답변:
s=>eval(s.match(/\d+/g).join`+`)
모든 숫자를 일치시키고 +5 + 108 + 4로 바꾸어 결과를 평가하십시오.
양의 정수에서만 작동합니다.
Arnauld 덕분에 2 바이트 절약
f=
s=>eval(s.match(/\d+/g).join`+`)
g=()=>b.innerHTML = f(a.value)
g()
<input id=a value="the 5is 108 seCONd4 a" onkeyup="g()">
<pre id=b>
console.log(f.toString().length)이지만 100 % 신뢰할 수는 없습니다 .
þмS¡þO
설명:
þм # 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
¡!
익명의 암묵적 prefic 기능
+/#⍎¨∊∘⎕D⊆⊢
⊢ 논쟁 거리
⊆ 로 분할 (True가 조각이되고 False가 분리기가됩니다)
∊ 회원
∘ 의
⎕D 숫자의 집합
#⍎¨ 루트 네임 스페이스에서 각각 평가
+/ 합집합
\d+
$*
1
IΣ⁺ψS
온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명 : Charcoal의 Sum연산자는 문자열에서 숫자를 자동으로 추출하지만 문자열에 숫자가 아닌 문자가 포함되어 있지 않으면 대신 디지털 합계를 취하므로이를 방지하기 위해 널 바이트를 연결합니다. 그런 다음 결과는 암시 적 출력을 위해 문자열로 캐스트됩니다.
<<<$[${1//[^0-9]/+0}]
${1 } # the 5is 108 seCONd4 a
${1//[^0-9]/+0} # +0+0+0+05+0+0+0108+0+0+0+0+0+0+04+0+0
$[${1//[^0-9]/+0}] # 117
불행하게도, bash 0108는 8 진수로 해석되기 때문에 불평합니다 . zsh을하지 않는 (하지 않는 한 setopt octalzeroes)
for n in ${1//[!0-9]/ };{((s+=n));};echo $s
숫자가 아닌 모든 숫자를 공백으로 바꾼 다음 서로 합칩니다.
GammaFunction 덕분에 -5 바이트
왜 안돼? 의무 정규식 답변. 파이썬 2를 사용하여 6을 도킹 할 수는 있지만 무엇이든 가능합니다. map을 사용하는 대신 eval 접근법을 사용하고 있으므로 더 이상 적용되지 않습니다.
import re;x=lambda y:eval('+'.join(re.findall('\d+',y)))
설명:
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
z == l[1]대신 사용해야 합니다 z is l[1]. 숫자가 충분히 높아지면 현재 코드에서 잘못된 부정을 줄 수 있습니다.
?|i.I!/s+q;;>p.O@
? |
i .
I ! / s + q ; ;
> p . O @ . . .
. .
. .
상당히 간단한 것입니다. Icubix에서는 입력에서 첫 번째 정수를 가져 와서 스택으로 푸시합니다. 이것은 모든 문자를 건너 뛰는 효과가 있습니다. 나머지는 추가를 처리하고 입력의 끝을 감지합니다.
I! 정수를 입력하고 0을 테스트s+q;;0이 아닌 경우 TOS (강제 및 초기 0)를 교환하고 추가하십시오. 결과를 스택 맨 아래로 밀고 상단을 청소하십시오. 처음으로 돌아갑니다./i? 0이면 리디렉션하고 문자 입력을 수행하여 확인하십시오.|?;/양수 (문자)가 리플렉션 ?으로 우회전 하면 체커를 통해 다시 밀고 스택에서 팝으로 우회전하여 TOS에 0을 남겨 둡니다. 그런 다음 IP가 기본 루프로 다시 리디렉션됩니다.I>p.O@ 음수 (입력 끝)가 왼쪽으로 돌리면 정수 입력을 수행하고 스택의 맨 아래를 맨 위로 가져 와서 출력하고 정지하십시오.<?=array_sum(preg_split('(\D)',$argn));
php -nFSTDIN에서 입력으로 실행합니다 . 예:
$ echo the 5is 108 seCONd4 a | php -nF sumint.php
117
Sum##N=>MatchAll&"\\d+"
더 흥미롭지 만 간접적 인 대답 (37 바이트) : {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Sum##N=>MatchAll&"\\d+"
형식은 다음과 같습니다.
f##g=>h&x
확장 및 괄호로 묶으면 다음과 같이됩니다.
f ## (g => (h&x))
##두 함수를 함께 구성 =>하고 오른쪽 함수 결과에 대해 왼쪽 함수를 매핑하는 함수를 만들고 함수 &의 측면에 인수를 바인딩합니다. input의 _경우 다음과 같습니다.
{ f[Map[g, h[_, x]]] }
먼저 MatchAll숫자 ( \\d+)를 입력합니다. 그런 다음 N함수를 사용하여 각 런을 실제 정수로 변환 합니다. 마지막으로을 사용하여이 숫자의 합을 취합니다 Sum.
a=>System.Text.RegularExpressions.Regex.Replace(a,@"\D+"," ").Split(' ').Select(x=>x==""?0:int.Parse(x)).Sum();
정규식 가져 오기의 경우 105 바이트 + 25 바이트
s->{long c=0;for(Matcher m=Pattern.compile("\\d+").matcher(s);m.find();c+=new Long(m.group()));return c;}
s->{ // Lambda function
long c=0; // Sum is zero
for(Matcher m=Pattern.compile("\\d+").matcher(s); // Prepare regex matcher
m.find(); // While the string contains unused matches...
c+=new Long(m.group())); // Add those matches to the output
return c; // Return the output
}
S =INPUT
D S SPAN('0123456789') . N REM . S :F(O)
O =O + N :(D)
O OUTPUT =O
END
스위프트, 109 바이트
func s(a:String){var d=0,t=0;a.forEach{(c) in if let e=Int(String(c)){d=d*10+e}else{t+=d;d=0}};t+=d;print(t)}
$+a@XI
-123음의 정수로 취급 합니다. 온라인으로 사용해보십시오!
a Command-line input
@XI Regex find all integers (XI is a variable predefined as the regex `-?\d+`)
$+ Fold on +
빼기 부호로 취급하지 않고 하이픈을 무시해야하는 경우 7 바이트에 대해 다음이 작동 합니다 .
$+a@+XD
XD는 사전 설정된 변수입니다 `\d`. +XD정규식 +수정자를 추가하여 1 자리 이상의 숫자와 일치시킵니다.
s->java.util.Arrays.stream(s.split("\\D")).filter(t->!t.isEmpty()).mapToLong(Long::new).sum()
-4 bytesLong::new대신 에 사용하여 Long::valueOf.
-1 byte정규 표현식을 단축하여 나중에 빈 문자열을 제거하고 분할 할 때 여분의 것을 만듭니다.
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"발생합니다117때문에5+108+4=117). 또한 여기에있는 모든 '질문'에는 당첨 조건 태그 가 있어야합니다 . 이 경우 [code-golf] (가장 짧은 솔루션 임)라고 가정합니까?