回答:
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
オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:炭の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バイト
何故なの。必須の正規表現の答え。おそらくPython 2を使用して6をドッキングできますが、何でも。私はマップを使用する代わりに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 @ . . .
. .
. .
かなりシンプルなもの。 I
cubixでは、入力の最初の整数を取得してスタックにプッシュします。これには、すべての文字をスキップする効果があります。残りは追加を処理し、入力の終了を検出します。
I!
整数を入力し、0をテストしますs+q;;
ゼロでない場合、TOS(強制および初期0)を交換して追加します。結果をスタックの下部にプッシュし、上部をきれいにします。最初に戻ります。/i?
ゼロの場合、リダイレクトして文字入力を行い、確認します|?;/
ポジティブ(文字)がリフレクトに右に曲がる場合、チェッカーを通してそれを押し戻し?
、スタックからポップに右に曲がり、TOSに0を残します。その後、IPはメインループにリダイレクトされます。I>p.O@
負の場合(入力の終わり)、左に曲がり、整数入力を行い、スタックの一番下を一番上にし、出力して停止します。<?=array_sum(preg_split('(\D)',$argn));
php -nF
入力ありで実行するのはSTDINからです。例:
$ 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))
##
2つの関数を一緒に構成し=>
、左の関数を右の関数の結果にマッピングする関数を作成し&
、引数を関数の側面にバインドします。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
Swift、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 bytes
のLong::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](最短の解決策)であると仮定しますか?