差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン両方とも次のリビジョン
programming:nim:programming_contest [2018/10/12] – [入力] ikatakosprogramming:nim:programming_contest [2018/10/18] ikatakos
行 23: 行 23:
 |critbits|crit-bit木(効率のよい文字列検索木)|[[https://nim-lang.org/docs/critbits.html|Module critbits]]| |critbits|crit-bit木(効率のよい文字列検索木)|[[https://nim-lang.org/docs/critbits.html|Module critbits]]|
 |future|実験的な機能(リスト内包表記 etc.)|[[https://nim-lang.org/0.18.0/future.html|Module future]]| |future|実験的な機能(リスト内包表記 etc.)|[[https://nim-lang.org/0.18.0/future.html|Module future]]|
 +
 +まとめて
 +
 +<sxh>
 +import strutils, sequtils, math, algorithm, tables, sets, lists, queues, intsets, critbits, future
 +</sxh>
  
 =====入力===== =====入力=====
行 51: 行 57:
 分割代入(Destructuring assignment)は、直接行うにはこうするしかない? 分割代入(Destructuring assignment)は、直接行うにはこうするしかない?
  
-テンプレートとして関数を定義しておけば、letでも受け取れる(参考: somq14様)+関数を定義しておけば、letでも受け取れる(参考: somq14様)
  
 <code> <code>
行 91: 行 97:
   # または   # または
   echo "$1 $2 $3" % [$n, $m, $k]   echo "$1 $2 $3" % [$n, $m, $k]
 +
 +=====リストの作成=====
 +
 +arrayが固定長配列(コンパイル時に長さがわかっている必要がある)、seqが可変長リスト
 +
 +  # 空の1次元Seq
 +  var aaa: seq[int] = @[]  # 型の自動推定が働かないため明言する必要がある
 +  # または
 +  var aaa = newSeq[int]()
 +  
 +  # N要素の1次元Seq(その型のデフォルト値で初期化)
 +  var aaa = newSeq[int](N)
 +  
 +  # N要素の1次元Seq(その型のデフォルト値以外で初期化)
 +  var aaa = newSeq[int](N)
 +  aaa.fill(x)
 +  
 +  # N行M列の2次元Seq
 +  var aaa = newSeq[seq[int]](N)
 +  aaa.fill(newSeq[int](M))
 +  # または
 +  var aaa = newSeqWith(N, newSeq[int](M))
 +  
 +配列の値埋めについては、newSeqWithより、fillした方が速いらしい。これは、randなどが渡されたとき、fillだと引数として渡す際に評価された1つの値が全て入ってしまうが、newSeqWithは毎回initして別々の要素を作成するなどの挙動の違いによる。
 +
 +  * [[https://github.com/nim-lang/Nim/issues/7295|newSeqWith is 3 times slower than fill · Issue #7295 · nim-lang/Nim]]
 +
 +<sxh>
 +import sequtils, algorithm, random
 +
 +var aaa = newSeq[int](10)
 +aaa.fill(rand(100))
 +echo $aaa
 +# => @[3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
 +
 +var bbb = newSeqWith(10, rand(100))
 +echo $bbb
 +# => @[89, 18, 2, 95, 20, 9, 54, 37, 80, 51]
 +
 +
 +# 2次元配列の作成などは、fillでも独立した要素が作られる模様
 +# (参照が同じでccc[0][0]を変更したらccc[1][0], ccc[2][0]も変更されてしまう、ということはない)
 +
 +var ccc = newSeq[seq[int]](3)
 +ccc.fill(newSeq[int](3))
 +ccc[0][0] = 5
 +echo $ccc
 +# => @[@[5, 0, 0], @[0, 0, 0], @[0, 0, 0]]
 +
 +var ddd = newSeqWith(3, newSeq[int](3))
 +ddd[0][0] = 5
 +echo $ddd
 +# => @[@[5, 0, 0], @[0, 0, 0], @[0, 0, 0]]
 +</sxh>
 +
  
 =====要素数の数え上げ===== =====要素数の数え上げ=====
programming/nim/programming_contest.txt · 最終更新: 2018/10/19 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0