Skip to content

Instantly share code, notes, and snippets.

@Vicfred
Last active June 1, 2023 17:20
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Vicfred/af0399fa865548fb35ed07ff0749ca09 to your computer and use it in GitHub Desktop.
Save Vicfred/af0399fa865548fb35ed07ff0749ca09 to your computer and use it in GitHub Desktop.
nim language tricks

read int

import strutils
let rating = stdin.readLine.parseInt

read list of space separated integers

import strutils, sequtils
let line = stdin.readLine.split.map(parseInt)

or

let get = iterator: string {.closure.} =
  for s in stdin.readAll.split: yield s

initialize list of integers

var snukes = newSeq[int](n);

create an array containing 1..n

var ini = (1..n).toSeq

initialize NxM matrix

import sugar
var a = newSeq[seq[int]](n).map(x => newSeq[int](m))

or

var a = newSeqWith(n, newSeq[int](m))

read a NxM matrix

let A = (1..n).mapIt(stdin.readLine.split.map(parseInt))

empty tree

var tree = newSeq[seq[edge]](n+1)

read input

import strutils, sequtils

let read = iterator: string {.closure.} =
  while true:
    for s in stdin.readLine.split:
      yield s

print an iterable separated with spaces

echo b.mapIt($it).join(" ")

read n lines

let lines = (1 .. n).mapIt(stdin.readLine)

read n lines

let lines = newSeqWith(n, stdin.readline)

read and unpack integers

var n,m : int
(n,m) = stdin.readLine.split.map(parseInt)

operator overloading

proc `*`(s: string, n: int): string =
  result = ""
  for _ in 1..n:
    result &= s

echo "a" * 5 # It works

echo 5 * 5 # The default implementation stills working
echo 45 * 89

misc

"hello" & "world" # string concatenation
$type             #convert type to string
inc x             # x++
stdout.write      # echo with no \n
fmt"X es {x}"     # python f-strings style
toSet()           # convert to set
a.sort system.cmp # 0.13.0 needs a sorting function

table with character frequency

import tables
var letters = toCountTable(myString)
 
# 0.13.0
import tables
var letters = initCountTable[char]()
for c in myString:
  letters.inc(c)
  
let groups = {"1": 1, "3": 1, "5": 1, "7": 1, "8": 1, "10": 1, "12": 1,
              "4": 2, "6": 2, "9": 2, "11": 2,
              "2": 3}.toTable

switch/case

case x:
  of 3: echo "X is a 3"
  of 5: echo "X is a 5"
  of 1:
    inc x
    echo "X where a 1 but now is 2"
  else: echo "I don't know what is X"

print depending on a conditional

echo(if conditional: "Yes" else: "No")

unpack variables

https://github.com/Yardanico/nim-snippets/blob/master/unpack_macro.nim

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment