関数定義を表す文字列の入力が与えられたら、関数の引数が改行で区切られて整列されるように、改行とスペースが挿入された文字列を出力します。
入力文字列は次のパターンに従います。
まず、プレフィックスで始まります。プレフィックスは常に少なくとも1文字の長さで、文字は含まれません
,()
。開き括弧(
(
)は、引数リストの始まりを示します。その後、ゼロ個以上の引数のリストが続きます。これらは文字列
", "
(コンマとスペース)で区切られます。引数には文字は含まれません,()
。閉じ括弧(
)
)は、引数リストの終わりを示します。最後に、0個以上の文字であり、文字を含むことがある接尾辞が見つかる 場合があります
,()
。
入力文字列は、印刷可能なASCIIのみで構成されます(つまり、改行は含まれません)。
出力は次のとおりでなければなりません。
プレフィックス、コピーされたそのまま、および開き括弧。
引数リスト。今回は
", "
、コンマ、改行、および各引数の最初の文字を垂直方向に揃えるために必要なだけのスペースで区切られています。閉じ括弧と接尾辞(存在する場合)はそのまま。
これはcode-golfであるため、バイト単位の最短コードが優先されます。
テストケース(形式:単一行の入力とそれに続く出力と二重の改行):
def foo(bar, baz, quux):
def foo(bar,
baz,
quux):
int main() {
int main() {
fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {
fn f(a: i32,
b: f64,
c: String) -> (String, Vec<i32>) {
function g(h) {
function g(h) {
def abc(def, ghi, jkl, mno)
def abc(def,
ghi,
jkl,
mno)
x y z(x, y, z) x, y, z)
x y z(x,
y,
z) x, y, z)
a>>" "
本当に賢い