Welcome to Programming Practicum “Putting the C into CS” You aren’t here writing clinic...

Preview:

Citation preview

Welcome to Programming Practicum“Putting the C

into CS”

You aren’t here

writing clinic reports

clinic liaison phone call

coding chunky strings

rebooting knuth (or turing or…)

installing

Debian 3.1

Engineering dept.

the dumpster

University of St. Petersburg

On the 405, in traffic, being chased by police (and TV) helicopters.

Mailing something at the Claremont Post Office

Waiting for the snow enveloping you on Route 5 N to melt

Krispy Kreme’s drive-through

Teaching Honors English for Janice Barbee at

Pomona High School

Worldcom Headquarters

Leading a Gray Davis / Gary Coleman / Arnold “T-800” Schwarzenegger gubernatorial fundraiser

exploring martian soil

Being dragged off-course 18 miles into a marathon race by a crazed spectator

Massey University Palmerston North, NZ

Pittsburgh

Driving N on the Dalton Highway… (though it feels like it!)

Victorville, for DARPA's Urban Granc Challenge

Waiting in line to vote in the Florida primaries…

Denver, CO or Minneapolis, MN

What is this course about?

What is this course about?

• A chance to “improve” your programming skillsAlgorithm analysis and

insightProgram design and implementation

optimizing coding time

ACM programming contest

What

Why

Research/prototype programming

Hands-on practice with algorithms and techniques

Unofficial course name: CS -70

Familiarity with Java’s libraries OR your choice of language "reasonable"

2007 ACM regionals - results

CSLB

PomonaSDSU

CPSLO

http://www.socalcontest.org/history/2007/results-2007.shtml

http://icpc.baylor.edu/icpc/ '09 world finals: Stockholm, Sweden

Class Organization

alternating format

discussion sessions

lab sessions

• problem and program analysis

• discussion of strategy and coding tips

• deciding on functional decomposition, data structures, language facilities, and algorithms to use in teams of 2-3

• teams may use 1 machine per person (only the mock contest adheres to ACM rules)

• these problems count for each member of the group

• sometimes new problems, other times with known ones

• ~ 4 problems given out per week…

a team might want to practice with only 1

machine

Class Organization

Feedback from prior semesters…

• make individual vs. team-based work clear, lectures vs. labs

• problems are, in general, individually completed -- except

• there should be an opportunity to start coding “cold”

• snacks and jotto!

• problems per person per week?

• about 1~2 (if you work on a team in lab)

• and consider all of the weeks of the term!

• those done during the lab "mock contest" sessions

• submit for each person (email me if there are problems…)

• provide the code to all team members

• you may or may not choose to work as a team afterwards

Course Organization

Sep 2 Welcome! Review of dynamic programming: 4 problemsSep 9 Lab/Mock contest session: 4 problems

Sep 16 Discussion session on graph problems: 4 problemsSep 23 Lab/Mock contest session: 4 problems

Sep 30 Discussion session on geometry problems: 4 problemsOct 7 No class (I'll be out of town…)Oct 14 Lab/Mock contest session: 4 problems

Oct 21 No class… Fall break!Oct 28 Mock ACM contest, 9pm – 1:00am, 6 problems

Nov 4 Regional participants' -- preparation meeting

Nov 11 Discussion and wrap-up for the semester

You may submit problems until the end of exams…

Sat. Nov. 8 may be the regional contest

Course webpage

references

administrative info

problem statements and sample data

problems you have solved

Grading

CS 189 is graded individually... (it’s possible to take it P/F, too)

Coding Guidelines• problems can be done any time

during the semester

• discussion of algorithms always OK

• coding should be within teams

• you may use any references except an existing solution or partial solution…

• one person should take the lead on each problem

• use /cs/ACM/acmSubmit <file> to submit

• try things out !

the reason for ACM!

though not for CS elective credit…

Problem multipliers

Problems are worth double if

• You solve them during the 4:15 - 5:30 lab sessions

• It's one of the "extra difficult" problems, which will be determined as we go…

• The new-language bonus is only in the spring term!

• Any standard language is OK -- but do keep in mind that the competition allows only Java, C, and C++ .

Other "standard" languages:

the team gets credit, up to 3 people

These multipliers may be accumulated…

reasonable alternatives will also be considered…

C#, python, ruby

Language Choice?

Ask about our 2 extra-credit projects!web-updating and

web-jotto

Spring 2008 summary

python 82

java 60

C++ 40

Tallies per problem and per language

(thus far)…

17 (+2)

8 4 16 (+2)

1 (+1)

6 (+1)

20 (+12)

(+2)

3 (+1)

1 1 2 11 (+1)

1 (+1)

17 (+9)

(+2)

4 (+2)

1

2 2 8 3 2 8 (+2)

13 (+10)

14 (+9)

1 21 (+16)

(+4)

1 1 15 (+14)

number of 2x scores number

of 4x scores

d 8

ruby 6

scheme 3

lua 2

awk 2

js 2

sqlcobolbasicx86 asmpascalmathematicash, latex

1each

Dynamic programming!

Jotto!

Sophs Jrs Srs Profs

A word-guessing game similar to mastermind…

pluot 1

pluot 0

pluot 1

pluot 2

Dynamic programming

When a seemingly intractable problem has lots of repeated substructure, go

DP!

Build a table of partial results.

Replace computation with table look-up when possible

For example:

Dynamic programming

Build a table of partial results.

Replace computation with table look-up when possible

the binary-decimal problem, for example:

263190

Numbers, N, up to 106

Input

0 marks the end of the input

10111011111001

the smallest decimal multiple of N with only

the digits 0 and 1 !

Output

Ideas?

When a seemingly intractable problem has lots of repeated substructure, go

DP!

One way…

Count up to the solution, starting from 1…

Dynamic programming

Storing intermediate results in a table for fast look-up:input N = 6

possible remainders upon dividing by N (6)

# of digits in answer

0 1 2 3 4 5

2

1

3

4

Dynamic programming

Storing intermediate results in a table for fast look-up:input N = 6

possible remainders upon dividing by N (6)

# of digits in answer

0 1 2 3 4 5

2

1

3

4

1

Dynamic programming

Storing intermediate results in a table for fast look-up:input N = 6

possible remainders upon dividing by N (6)

# of digits in answer

0 1 2 3 4 5

2

1

3

4

1

10 111

Dynamic programming

Storing intermediate results in a table for fast look-up:input N = 6

possible remainders upon dividing by N (6)

# of digits in answer

0 1 2 3 4 5

2

1

3

4

1

111110 10 111

10 111

Dynamic programming

Storing intermediate results in a table for fast look-up:input N = 6

possible remainders upon dividing by N (6)

# of digits in answer

0 1 2 3 4 5

2

1

3

4

1

111110 10 111

10 111

1110 111110 10 111

DP!

Only checking values for which a remainder has not yet been used…

Fast

Another example

binary-as-decimal problem

"pebbles" problem (2007 ACM regionals)

Square array, up to 15x15, of integers

from 1 to 99

Input

Output

Idea

place "pebbles" on integers, trying to maximize total, but no two pebbles may be adjacent…

maximum possible sum

14?

3 8 6 7 9 1 4 6 1

vertically, horizontally, or diagonally

3 8 67 9 14 6 1

Pebbles

3 8 67 9 14 6 1

Square array, up to 15x15, of integers

from 1 to 99

Input

DP Idea consider all possibilities for pebbling each row -they only depend on the previous row's best scores!

Subset chosen (pebbles)

000 001 010 011 100 101 110 111Row #

0

1

2a b c

Store the BEST score available for each possible subset.

Pebbles

3 8 67 9 14 6 1

Square array, up to 15x15, of integers

from 1 to 99

Input

DP Idea consider all possibilities for pebbling each row -they only depend on the previous row's best scores!

Subset chosen (pebbles)

000 001 010 011 100 101 110 111Row #

0

1

2a b c

Store the BEST score available for each possible subset.

0 6 8 x 3 9 x x

Pebbles

3 8 67 9 14 6 1

Square array, up to 15x15, of integers

from 1 to 99

Input

DP Idea consider all possibilities for pebbling each row -they only depend on the previous row's best scores!

Subset chosen (pebbles)

000 001 010 011 100 101 110 111Row #

0

1

2a b c

Store the BEST score available for each possible subset.

0 6 8 x 3 9 x x

90+9

41+3

99+0

137+6

88+0

x x x

Pebbles

3 8 67 9 14 6 1

Square array, up to 15x15, of integers

from 1 to 99

Input

DP Idea consider all possibilities for pebbling each row -they only depend on the previous row's best scores!

Subset chosen (pebbles)

000 001 010 011 100 101 110 111Row #

0

1

2a b c

Store the BEST score available for each possible subset.

0 6 8 x 3 9 x x

90+9

41+3

99+0

137+6

88+0

x x x

x x x0+13 c+13 b+9 a+9 ?

running time?

Pebbles

binary-as-decimal problem

"pebbles" problem (2007 ACM regionals)

71 24 95 56 5485 50 74 94 2892 96 23 71 1023 61 31 30 4664 33 32 95 89

Square array, up to 15x15, of integers

from 1 to 99

Input

Output

71 24 95 56 5485 50 74 94 2892 96 23 71 1023 61 31 30 4664 33 32 95 89

Idea

place "pebbles" on integers, trying to maximize total, but no two pebbles may be adjacent…

maximum possible sum

572

Thanks, Martijn!

Scanner sc = new Scanner(System.in);

even a bit easier!

Martijn is shifty!

Martijn is VERY shifty!

Where is the table?

This sure is sum code…

to the max

Problem Set #0(4 problems)

In teams of 2~3, read over these…

I need a picture of Farmer Ran!

Problem Set #0(4 problems)

In teams of 2~3, read over these.

• Where does the structure of the problem depend on similar (but smaller!) substructure?

• Think of your next 5-letter jotto word… !

• How might you build up a table of values toward an overall solution?

See you next Tuesday!

bring a laptop, if you have one…

Jotto!

Sophs Jrs Srs Me

A word-guessing game similar to mastermind…

pluot 1

pluot 0

pluot 1

pluot 2

Problem Set #1(6 probs, 3 wks)

Input

4 4 tow cat row care ... .#. ... .## 0 0

# of words in the puzzle (to follow)

# of rows in the puzzle (after the words)

the words

the puzzle

this indicates the end of the input…

Problem Set #1(6 probs, 3 wks)

Input

4 4 tow cat row care ... .#. ... .## 0 0

either the solution OR a statement that it can't be solved…

Output

Problem 1 cat a#o row e## Problem 2: no layout is possible.

Problem Set #1(6 probs, 3 wks)

Input

6 5 1

1 2 2 3 4 4 5 1 3 2

1 4 2 1 0 0 0

# of empty boxes on the form

# of clerks in the office (three lines each)

clerk #0

this indicates the end of the input…

the box(es) CHECKED

the box(es) ERASED the clerks who get a copy

clerk #1

clerk #2

clerk #3

clerk #4

0 1 2 3 4 5

the form

Problem Set #1(6 probs, 3 wks)

Input

6 5 1

1 2 2 3 4 4 5 1 3 2

1 4 2 1 0 0 0

# of empty boxes on the form

# of clerks in the office (three lines each)

clerk #0

this indicates the end of the input…

the box(es) CHECKED

the box(es) ERASED the clerks who get a copy

clerk #1

clerk #2

clerk #3

clerk #4

0 1 2 3 4 5

the form

let's try it…

Problem Set #1(6 probs, 3 wks)

Input

6 5 1

1 2 2 3 4 4 5 1 3 2

1 4 2 1 0 0 0

# of empty boxes on the form

# of clerks in the office (three lines each)

clerk #0

this indicates the end of the input…

the box(es) CHECKED

the box(es) ERASED the clerks who get a copy

clerk #1

clerk #2

clerk #3

clerk #4

0 1 2 3 4 5

the form

Output1 3 4 5

the boxes checked the last time it leaves clerk #0's

desk…

Problem Set #1(6 probs, 3 wks)

Input

RDDR Speedy M 0101 Jumper F 0101 Slowpoke M 1101 Terror F 1100 Shadow F 1001 *** Frisky 0101 Sleepy 1101***

list of traits, R == "recessive" D == "dominant"

D traits are passed if EITHER parent has themR traits are passed if BOTH parents have them

all of the parents, gender, and traits

the baby shrews…

Deduce their possible parents!

Problem Set #1(6 probs, 3 wks)

Input

RDDR Speedy M 0101 Jumper F 0101 Slowpoke M 1101 Terror F 1100 Shadow F 1001 *** Frisky 0101 Sleepy 1101***

list of traits, R == "recessive" D == "dominant"

D traits are passed if EITHER parent has themR traits are passed if BOTH parents have them

all of the parents, gender, and traits

the baby bunnies…

Deduce their possible parents!

Output

Frisky by Jumper-Slowpoke or Jumper-Speedy or ______Sleepy by _________

Problem Set #1(6 probs, 3 wks)

Input

RDDR Speedy M 0101 Jumper F 0101 Slowpoke M 1101 Terror F 1100 Shadow F 1001 *** Frisky 0101 Sleepy 1101***

list of traits, R == "recessive" D == "dominant"

D traits are passed if EITHER parent has themR traits are passed if BOTH parents have them

all of the parents, gender, and traits

the baby bunnies…

Deduce their possible parents!

Output

Frisky by Jumper-Slowpoke or Jumper-Speedyor Shadow-SpeedySleepy by Shadow-Slowpoke

Problem Set #1(6 probs, 3 wks)

Decide which problem is the easiest and which one is the hardest …

(to code, not to compute!)

Read these three problems… then

Problem Set #1(6 probs, 3 wks)

my estimates…

hardest

easiest

important heuristic:I’m always wrong

See you next Tuesday

in the CS labs… !

Welcome to Programming Practicum“Putting the C

into CS”

You aren’t here

writing clinic reports

clinic liaison phone call

coding chunky strings

rebooting knuth (or turing or…)

installing

Debian 3.1

Engineering dept.

the dumpster

University of St. Petersburg

On the 405, in traffic, being chased by police (and TV) helicopters.

Mailing something at the Claremont Post Office

Waiting for the snow enveloping you on Route 5 N to melt

Krispy Kreme’s drive through

Teaching Honors English for Janice Barbee at

Pomona High School

Worldcom Headquarters

Leading a Gray Davis / Gary Coleman / Arnold “T-800” Schwarzenegger gubernatorial fundraiser

exploring martian soil

Being dragged off-course 18 miles into a marathon race by a crazed spectator

Massey University Palmerston North, NZ

Pittsburgh

Driving N on the Dalton Highway… (though it feels like it!)

What is this course about?

• A chance to “improve” your programming skillsAlgorithm analysis and

insightProgram design and implementation

optimizing coding time

ACM programming contest

What

Why

Research/prototype programming

Hands-on practice with algorithms and techniques

Unofficial course name: CS -70

Familiarity with Java’s libraries OR your choice of language

Course Organization

Jan 16 Welcome! Random teams of 3: 6 problems, 3 weeks

Jan 23 Lab session to work on problems (Beckman B102 or 105)

Jan 30 Discussion session on the first set of problems Feb 6 Lab session with new problems: 4 problems, 2 weeks

Feb 13 Discussion session on the second set of problemsFeb 20 Lab session with new problems: 6 problems, 3 weeks

Feb 27 Discussion session on the third set of problems

Mar 6 No class - Fall breakMar 20 Mock ACM contest, 9pm – 1am, teams of 3, 6 pr, 4 hours

Mar 27 No class (out of town)

Apr 3 Discussion session on the mock contest + Finale!

You may submit problems until the end of exams…

2 per team

2/team

3 per team

1-4 / team

Class Organization

alternating format

discussion sessions

lab sessions

• problem and program analysis

• discussion of strategy and coding tips

• deciding on functional decomposition, data structures, language facilities, and algorithms to use in teams of 2-3

• teams should use 1 terminal per person (only the mock contest adheres to ACM rules)

• these problems count for each member of the group• sometimes new problems, other times with known ones

• ~1 problem per week per person…

Course webpage

reference links

administrative info

problem statements and test data

problems your team has solved

Grading

CS 189 is graded individually... (it’s possible to take it P/F, too)

Coding Guidelines• problems can be done any time

during the semester

• discussion of algorithms always OK

• coding should be within teams

• you may use any references except an existing solution or partial solution…

• one person should take the lead on each problem

• use /cs/ACM/acmSubmit <file> to submit

• try things out !

the reason for ACM!

Choose your language…

• extensive library of data structures and algorithms available

Java is almost the universal choice for the competition…

• I/O made simpler with 1.5’s Scanner and printf

the C in CS!

Input from stdin

Output to stdout

Choose your language…

Python is nice

C#

Whatever language you choose needs to be able to run on the Macs in

the CS labs (and preferably knuth, as

well…)

I’ll likely need your help to get things set

up for testing…

def floyd_warshall(W, infinity): n = matrix.get_num_rows(W) D = matrix.clone(W) DD = matrix.make(n,n) for k in xrange(n): for i in xrange(n): for j in xrange(n): DD[i][j] = min(D[i][j], D[i][k] + D[k][j]) DD, D = D, DD return D

Others ?Marty: prolog!

Problem Set #1(6 probs, 3 wks)

Input

4 4 tow cat row care ... .#. ... .## 0 0

# of words in the puzzle (to follow)

# of rows in the puzzle (after the words)

the words

the puzzle

this indicates the end of the input…

Problem Set #1(6 probs, 3 wks)

Input

6 5 1

1 2 2 3 4 4 5 1 3 2

1 4 2 1 0 0 0

# of empty boxes on the form

# of clerks in the office (three lines each)

clerk #0

this indicates the end of the input…

the box(es) CHECKED

the box(es) ERASED the clerks who get a copy

clerk #1

clerk #2

clerk #3

clerk #4

0 1 2 3 4 5

the form

Output1 3 4 5

the boxes checked the last time it leaves clerk #0's

desk…

Problem Set #1(6 probs, 3 wks)

Input

RDDR Speedy M 0101 Jumper F 0101 Slowpoke M 1101 Terror F 1100 Shadow F 1001 *** Frisky 0101 Sleepy 1101***

list of traits, R == "recessive" D == "dominant"

D traits are passed if EITHER parent has themR traits are passed if BOTH parents have them

all of the parents, gender, and traits

the baby shrews…

Deduce their possible parents!

Output

Frisky by Jumper-Slowpoke or Jumper-Speedy or ______Sleepy by _________

Problem Set #1(6 probs, 3 wks)

Decide which problem is the easiest and which one is the hardest …

(to code, not to compute!)

Read these three problems… then

Coaches’ Room

Choose your language…

• extensive library of data structures and algorithms available

Java/Cthe universal choice for the competition…

• I/O made simpler with 1.5’s Scanner and printf

the C in CS!

Input from stdin

Output to stdout

Choose your language…

Python is nice

def floyd_warshall(W, infinity): n = matrix.get_num_rows(W) D = matrix.clone(W) DD = matrix.make(n,n) for k in xrange(n): for i in xrange(n): for j in xrange(n): DD[i][j] = min(D[i][j], D[i][k] + D[k][j]) DD, D = D, DD return D

Ruby :-)

Marty: prolog!

Postscript!

Welcome to Programming Practicum“Putting the C

into CS”

You aren’t here

writing clinic reports

clinic liaison phone call

coding chunky strings

rebooting knuth (or turing or…)

installing

Debian 3.1

Engineering dept.

the dumpster

University of St. Petersburg

On the 405, in traffic, being chased by police (and TV) helicopters.

Mailing something at the Claremont Post Office

Waiting for the snow enveloping you on Route 5 N to melt

Krispy Kreme’s drive-through

Teaching Honors English for Janice Barbee at

Pomona High School

Worldcom Headquarters

Leading a Gray Davis / Gary Coleman / Arnold “T-800” Schwarzenegger gubernatorial fundraiser

exploring martian soil

Being dragged off-course 18 miles into a marathon race by a crazed spectator

Massey University Palmerston North, NZ

Pittsburgh

Driving N on the Dalton Highway… (though it feels like it!)

Victorville, for DARPA's Urban Granc Challenge

Waiting in line to vote in the Florida primaries…

Waiting in line to vote in the Florida primaries…

What is this course about?

• A chance to “improve” your programming skillsAlgorithm analysis and

insightProgram design and implementation

optimizing coding time

ACM programming contest

What

Why

Research/prototype programming

Hands-on practice with algorithms and techniques

Unofficial course name: CS -70

Familiarity with Java’s libraries OR your choice of language

Class Organization

alternating format

discussion sessions

lab sessions

• problem and program analysis

• discussion of strategy and coding tips

• deciding on functional decomposition, data structures, language facilities, and algorithms to use in teams of 2-3

• teams should use 1 machine per person (only the mock contest adheres to ACM rules)

• these problems count for each member of the group• sometimes new problems, other times with known ones

• ~3 problems per week per person…

Class Organization

Feedback from prior semesters…

• make individual vs. team-based work clear, lectures vs. labs

• problems are, in general, individually completed, except

• there should be an opportunity to start coding “cold”

• snacks and jotto!

• problems per person per week?

• ~2 in the fall

• ~3 in the spring

• those done during the lab "mock contest" sessions

• submit for each person (or email me…)

• provide the code to all team members

• you may or may not choose to work as a team afterwards

Course Organization

Jan 29 Welcome! Review of dynamic programming: 4 problemsFeb 5 Lab/Mock contest session: 4 problems

Feb 12 Discussion session on geometry problems: 4 problemsFeb 19 Lab/Mock contest session: 4 problems

Feb 26 Lab/Mock contest session: 4 problems

Mar 4 Discussion session on search problems: 4 problems

Mar 11 No class… need to be away

Mar 18 No class - Spring breakMar 23 Mock ACM contest, 9pm – midnight, 6 problems

Mar 25 Discussion and wrap-up of the semester

You may submit problems until the

end of exams…

Sat. Mar 8 and Sat. Apr 19external

competitions…

Competition Options

www.ccsc.org/southwestern/2008/contest.html

www.ieee.org/web/membership/students/scholarshipsawardscontests/ieeextreme.html

Sat. Mar 8 and Sat. Apr 19external

competitions…

Course webpage

references

administrative info

problem statements and test data

problems you have solved

Grading

CS 189 is graded individually... (it’s possible to take it P/F, too)

Coding Guidelines• problems can be done any time

during the semester

• discussion of algorithms always OK

• coding should be within teams

• you may use any references except an existing solution or partial solution…

• one person should take the lead on each problem

• use /cs/ACM/acmSubmit <file> to submit

• try things out !

the reason for ACM!

Problem multipliers

Problems are worth double if

• You solve them during the 4:15 - 5:30 lab sessions

• You are the first person to use a particular language - though there is an additional responsibility here: to set up the testing system to handle that language!

• It's one of the "extra difficult" problems, which will be determined as we go…

languages already used:

the team gets credit, up to 3 people

python 56

ruby 12

java 6

c++ 11

perl 2

postscript 2

c# 8

haskell 1

prolog 2

c 5

php 1

These multipliers may be accumulated…

Dynamic programming

When a seemingly intractable problem has large amounts of repeated or redundant substructure, DP can sometimes provide an efficient solution.

Build a table of partial results.

Replace computation with table look-up when possible

For example:

263190

Numbers, N, up to 106

Input

0 marks the end of the input

10111011111001

the smallest decimal multiple of N with only

the digits 0 and 1 !

Output

Ideas?

One way…

Count up to the solution, starting from 1…

Dynamic programming

Storing intermediate results in a table for fast look-up:input N = 6

possible remainders upon dividing by N (6)

# of digits in answer

0 1 2 3 4 5

2

1

3

4

1

111110 10 111

10 111

1110 111110 10 111

DP!

Only checking values for which a remainder has not yet been used…

Problem Set #1(4 problems)

In teams of ~3, think about

- how would you solve this problem?

- how could you most simplify the programming ?- think of a 5-letter jotto word… !

- is it a dynamic programming problem?

- divide up with one problem per group -

Competition Options

www.ccsc.org/southwestern/2008/contest.html

www.ieee.org/web/membership/students/scholarshipsawardscontests/ieeextreme.html

Sat. Mar 8 and Sat. Apr 19external

competitions…