67
<codeware/> how to present code

import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

<codeware/>how to present code

Page 2: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

your slides are not your IDE

Page 3: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

$> not your console either

Page 4: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

here are five rules forpresenting code

Page 5: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

rule 1:$ use monospaced font$

Page 6: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

or

monospace

proportional

Page 7: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

monospace

proportional

fixed or variable

fixed or variable

Page 8: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

monospace

proportional

Page 9: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

var power = function(base, exponent) { var result = 1; for (var count = 0; count < exponent; count++) result *= base; return result;};

monospace

proportional

Page 10: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

monospacemonospaced fontshave better readability when presenting code

proportional

Page 11: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

monospace

proportional it is harder to follow code with proportional fonts

monospaced fontshave better readability when presenting code

Page 12: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

use monospaced fontsfor code readability

Page 13: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

rule 2:$ use big fonts$

Page 14: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

presenting for a big audience?

$ this is not your desktop monitor$ font size should be bigger$

Page 15: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

I mean BIGGERthan your think

Page 16: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

I really mean BIGGER than your think

Page 17: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

console.log(“even BIGGER where possible”)

Page 18: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

console .log(“use line breaks”)

Page 19: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

<body> <button onClick=“coolFunction()” autofocus>too small</button></body>

Page 20: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

<body> <button onClick=“coolFunction()” autofocus> same but BIGGER </button></body>

Page 21: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

BIGGER is betterhow do you expect people in the back to read this?

Page 22: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

rule 3:$ smart syntax highlighting$

Page 23: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

this is not your IDEuse syntax highlighting only where needed

Page 24: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

this is not your IDEuse syntax highlighting only where needed

Page 25: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

Presenting code on your slides usually results in a wall of text.Highlight only the specific parts you want your audience to focus on.

Page 26: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

Presenting code on your slides usually results in a wall of text.Highlight only the specific parts you want your audience to focus on.

Page 27: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

Presenting code on your slides usually results in a wall of text.Highlight only the specific parts you want your audience to focus on.

Page 28: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

3 slides example - Ruby map function

1

2

3

Page 29: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

names = ['rey', 'fin', 'poe']

names.map! {|name| name.capitalize }

puts names

3 slides example - Ruby map function

1

2

3

Page 30: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

names = ['rey', 'fin', 'poe']

names.map! {|name| name.capitalize }

puts names

3 slides example - Ruby map function

1

2

3

Page 31: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

names = ['rey', 'fin', 'poe']

names.map! {|name| name.capitalize }

puts names

# output Rey Fin Poe

3 slides example - Ruby map function

1

2

3

Page 32: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

rule 4:$ using ellipsis…$

Page 33: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

Page 34: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

what’s the point in presenting all you code if people can’t follow?

Page 35: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

keep just the relevant code

Page 36: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

import sys

from ortools.constraint_solver import pywrapcp

# By default, solve the 8x8 problem.n = 8 if len(sys.argv) < 2 else int(sys.argv[1])

# Creates the solver.solver = pywrapcp.Solver("n-queens")# Creates the variables.# The array index is the row, and the value is the column.queens = [solver.IntVar(0, n - 1, "x%i" % i) for i in range(n)]# Creates the constraints.

# All columns must be different.# (The "not on the same row" constraint is implicit from the array we're# using to store our variables; since no two elements of an array# can have the same index, there can be no queens with the same row.)solver.Add(solver.AllDifferent(queens))

# No two queens can be on the same diagonal.solver.Add(solver.AllDifferent([queens[i] + i for i in range(n)]))solver.Add(solver.AllDifferent([queens[i] - i for i in range(n)]))

db = solver.Phase(queens, solver.CHOOSE_MIN_SIZE_LOWEST_MAX, solver.ASSIGN_CENTER_VALUE)

solver.NewSearch(db)

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

printprint "Solutions found:", num_solutionsprint "Time:", solver.WallTime(), "ms"

Solving the N-queens Problem

use ellipsis…

Page 37: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

...

# Creates the solver.solver = pywrapcp.Solver("n-queens")...

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

...

Solving the N-queens Problem

Page 38: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

...

# Creates the solver.solver = pywrapcp.Solver("n-queens")...

# Iterates through the solutions, displaying each.num_solutions = 0while solver.NextSolution(): queen_columns = [int(queens[i].Value()) for i in range(n)]

# Displays the solution just computed. for i in range(n): for j in range(n): if queen_columns[i] == j: print "Q", else: print "_", print print num_solutions += 1

solver.EndSearch()

...

Solving the N-queens Problem

the focus is now on the algorithm not the boilerplate

Page 39: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

rule 5:$ use screen annotation$

Page 40: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

do you want to focus your audience’s attention on a specific area in the screen?

Page 41: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

thinking of using a laser pointer?

Page 42: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

do you expect your audience to track this?

Page 43: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 44: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 45: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 46: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

always create slides as if you are the person sitting in the last row of the conference hall.use screen annotations.

Page 47: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

putting it all together$ ECMAScript 2015 Promise example$

Page 48: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

putting it all together$ ECMAScript 2015 Promise example$

the next slides will introduce the ECMAScript 2015 Promise Object

Page 49: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

fetchGraphData(graphName, function(error, graphData)) { if (error) { // handle error } // ... renderGraph(graphData, function(error)) { if (error) { // handle error } // ... notifyClients(msg, result, function(error, response)) { if (error) { // handle error } // ... }); });}); Typical JS code results with

many nested callbacks

Page 50: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

fetchGraphData(graphName, function(error, graphData)) { if (error) { // handle error } // ... renderGraph(graphData, function(error)) { if (error) { // handle error } // ... notifyClients(msg, result, function(error, response)) { if (error) { // handle error } // ... }); });}); makes it hard to follow

Page 51: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

fetchGraphData(graphName, function(error, graphData)) { if (error) { // handle error } // ... renderGraph(graphData, function(error)) { if (error) { // handle error } // ... notifyClients(msg, result, function(error, response)) { if (error) { // handle error } // ... }); });}); error handling is duplicated

Page 52: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

ECMAScript 2015 Promiseto the rescue!

Page 53: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

function fetchGraphData(graphName) { return new Promise(function(resolve, reject)) { let request = new XMLHttpRequest(); ...

// XMLHttpRequest to server request.open(‘GET’, ‘http://example.com', true); request.onload = function() { if (request.status == 200) { resolve(request.response); } else { reject(new Error(request.status)); } };});

The Promise object is used for deferred and asynchronous computations

Page 54: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

function fetchGraphData(graphName) { return new Promise(function(resolve, reject)) { let request = new XMLHttpRequest(); ...

// XMLHttpRequest to server request.open(‘GET’, ‘http://example.com', true); request.onload = function() { if (request.status == 200) { resolve(request.response); } else { reject(new Error(request.status)); } };});

resolve is called once operation has completed successfully

Page 55: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

function fetchGraphData(graphName) { return new Promise(function(resolve, reject)) { let request = new XMLHttpRequest(); ...

// XMLHttpRequest to server request.open(‘GET’, ‘http://example.com', true); request.onload = function() { if (request.status == 200) { resolve(request.response); } else { reject(new Error(request.status)); } };});

reject is called if the operation has been rejected

Page 56: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

fetchGraphData(graphName) .then(renderGraph) .then(notifyClients) .catch(function(error)) { console.log(“Error:”, error) });

Calling a Promise

Promise code is easy to read

Page 57: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

fetchGraphData(graphName) .then(renderGraph) .then(notifyClients) .catch(function(error)) { console.log(“Error:”, error) });

you can nest multiple Promise calls

Calling a Promise

Page 58: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

fetchGraphData(graphName) .then(renderGraph) .then(notifyClients) .catch(function(error)) { console.log(“Error:”, error) });

Calling a Promise

one error handling call

Page 59: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

remember! your slides are not your IDE

Page 60: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

1

codeware - 5 rules

2 3

4 5

Page 61: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

codeware - 5 rules

2 3

4 5

monospacedfont

Page 62: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

codeware - 5 rules

3

4 5

monospacedfont BIG

Page 63: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

codeware - 5 rules

4 5

monospacedfont BIG

smart syntax

highlighting

Page 64: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

codeware - 5 rules

5

monospacedfont BIG

smart syntax

highlighting

ellipsis...

Page 65: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

monospacedfont

codeware - 5 rules

BIGsmart syntax

highlighting

ellipsis...screen

annotation

Page 66: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

CreditsThe Noun Project: Check by useiconic.com Close by Thomas Drach

N-queens problem: OR-tools solution to the N-queens problem. Inspired by Hakan Kjellerstrand's solution at http://www.hakank.org/google_or_tools/, which is licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

https://developers.google.com/optimization/puzzles/queens#python

Page 67: import sys from ortools.constraint_solver import pywrapcp # By default, solve the 8x8 problem. n = 8 if len(sys.argv) < 2 else int(sys.argv[1]) # Creates the solver

for more tips follow me on twitter and slideshare