Fuzion Logo
flang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

are_we_fast_yet/queens.fz


# ported from https://github.com/smarr/are-we-fast-yet/blob/master/benchmarks/Java/src/Queens.java
queens =>

  free_maxs := (marrays bool).new 8 true
  free_rows := (marrays bool).new 16 true
  free_mins := (marrays bool).new 16 true
  queen_rows := (marrays i32).new 8 -1

  queens =>
    place_queen 0

  place_queen(c i32) =>
    return := mut false
    for r in 0..7
    until res.get
      if get_row_column r c
        queen_rows[r] := c
        set_row_column r c false

        if (c = 7) | (place_queen (c+1))
          return <- true
        else
          set_row_column r c true
    else
      false

  get_row_column(r,c i32)=>
    free_rows[r] & free_maxs[c+r] & free_mins[c-r+7]

  set_row_column(r,c i32, v bool) =>
    free_rows[r        ] := v
    free_maxs[c + r    ] := v
    free_mins[c - r + 7] := v


  res := mut true
  for i in 1..10 do
    res <- (res.get & queens)

  say res.get