同じ文字を繰り返した文字列を生成したい

同じ文字がn個並んだ文字列を生成したいです。 Pythonにおける
a = "a"*10
print(a)
#結果: aaaaaaaaaa
a = "a"*10
print(a)
#結果: aaaaaaaaaa
みたいに簡潔に記述できたら神です。 質問としては, ・上の例と同じことができる構文があるか ・構文がなければスマート(?)に生成するにはどうすればいいか です。 環境: Skript 2.5.3
15 Replies
gladiolus8789
gladiolus8789OP2w ago
やり方自体は
function repeat_letter(str: string, n: integer) :: string:
loop {_n} times:
add {_str} to {_result::*}

set {_result} to concat {_result::*} by ""
return {_result}
function repeat_letter(str: string, n: integer) :: string:
loop {_n} times:
add {_str} to {_result::*}

set {_result} to concat {_result::*} by ""
return {_result}
というので考えてはいます。 ただ何となく汚い気がするので簡潔に記述できたら気持ちええなあと思い質問させていただきました。
yukkina
yukkina2w ago
set (_a) to "a" loop 10 times: set (_a) to "(_a)a" みたいなクソ文しか思いつかんかった strを計算する方法は無いと思うねんな これの方が綺麗や
gladiolus8789
gladiolus8789OP2w ago
あと、自分が調べた限りでは https://skripthub.net/docs/?id=10165 これがあったんですが Skript +2.8.0のため使用不可でした
Skript Hub - Documentation
Repeat String (Expression) - Skript
Repeats inputted strings a given amount of times.
月猫ch
月猫ch2w ago
add A to LIST は処理が遅いので やめたほうがいいかもしれません 1例(というかうちのやり方)なんですけど
set {_} to ""
loop {_n} times:
set {_} to "%{_}%%{_str}%
return {_}
set {_} to ""
loop {_n} times:
set {_} to "%{_}%%{_str}%
return {_}
とかやってます つまりyukkinaニキとおなじ え、見た目がきしょい?ごめん
gladiolus8789
gladiolus8789OP2w ago
たしかに無理に配列使う必要ないですね このくらいであれば見た目の良さよりも軽い方が好ましいですから、そのやり方にします お二方とも、ありがとうございます。 Skript変なところで不便なので頭おかしくなりますよ!
yukkina
yukkina2w ago
strを計算式に入れ込めるpyも少し特殊な言語だと思うけどな
DarkestCat
DarkestCat2w ago
それはそう
月猫ch
月猫ch2w ago
逆にpyのstr計算はどういう内部処理なんだ……
Unknown User
Unknown User2w ago
Message Not Public
Sign In & Join Server To View
4Vx¼ް
4Vx¼ް2w ago
variables:
#100
{reserved} = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

function s(letter: text, repeats: number) :: text:
set {_} to subtext of {reserved} from 0 to {_repeats}
replace "0" in {_} with {_letter}
return {_}

command /a:
trigger:
send s("a", 50)
variables:
#100
{reserved} = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

function s(letter: text, repeats: number) :: text:
set {_} to subtext of {reserved} from 0 to {_repeats}
replace "0" in {_} with {_letter}
return {_}

command /a:
trigger:
send s("a", 50)
より速く処理したいなら自分の使う分だけ予め0を入力しておいてsubtextとreplaceを使う loopで1文字ずつ追加するより約7倍速い
月猫ch
月猫ch2d ago
⬆天才だろこれ
4Vx¼ް
4Vx¼ް2d ago
メモリとCPUはトレードオフの関係にあるけど 高水準な言語では配列が自動で拡張されるからあまり馴染みがないかもしれない 低水準に近い言語では要素数を恣意的に決めることが多いと思う 200個連続させる場合はs("aa", 100)でもできる
tanoKun
tanoKun2d ago
最近の言語は、コンパイラが最適化することも多いからね
Kurumi1011
Kurumi10117h ago
計算時間ここまで探求するのえぐい C言語やんけ‼️
tanoKun
tanoKun7h ago
javaの場合、単純な string結合は stringbuilderになる

Did you find this page helpful?