[プログラマ]チュートリアル(Javascript)



ソース:プログラマ

質問する


数え切れない、順序付けされた、またはある順序で並べられた要素の集合を「tuple」(tuple)と呼ぶ.n個の要素を有するtupleをn tupleと呼び、以下のように表すことができる.
(a1, a2, a3, ..., an)
Tupleには以下の性質があります.
重複する要素が存在する可能性があります.ex : (2, 3, 1, 2)
要素には一定の順序があり、要素の順序が異なる場合、それらは異なるトーンです.ex : (1, 2, 3) ≠ (1, 3, 2)
tupleの要素数は限られている.
要素の個数がnであり、重複する要素(a 1,a 2,a 3,...,an)がない場合(ただし、a 1,a 2,...,anは自然数)、集合記号「{」,「}」を用いて表すことができる.
{{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
例えば、tupleが(2、1、3、4)である場合
{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
に表示されます.この場合、集合は要素順序の影響を受けません.
{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
{{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
{{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
同じ例(2、1、3、4)をすべて表します.
パラメータに特定のtupleを表す集合を含む文字列sが与えられた場合、解関数を完了し、sで表されるtupleを配列に戻します.
せいげんじょうけん
  • sの長さは5以上100000以下である.
  • sは、数字と「{」、「}」、「,」のみで構成されています.
  • の数字は0で始まりません.
  • sは、繰り返し要素のないtupleを常に正確に表す.
  • sで表されるtupleの要素は100000より大きい自然数である.
  • 入力は、
  • を返す配列の長さが1または500未満の場合にのみ与えられます.
  • 問題を解く


    まず、問題の要求に応じてチュートリアルを整理する必要があります.
    メソッドフィルタリングにより文字列を容易に整理できます.
    順番は以下の通りです.
  • 文字列の連続カッコをクリアします.
  • '},{分割.
  • で区切られた各文字を「,」で区切った後、数字に変換します.
  • の各配列の長さを基準として昇順に配列する.
  • の角を中心に配列し、前の配列と重複しない要素のみを加えます.
  • インプリメンテーションコード

    const solution = s => 
        s.slice(2,-2)
         .split('},{')
         .map(v=>v.split(',').map(x=>Number(x)))
         .sort((a,b)=>a.length-b.length)
         .reduce((acc,cur)=>[...acc,...cur.filter(v=>!acc.includes(v))],[])