25
Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved. 1

Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Embed Size (px)

DESCRIPTION

Gator Engineering Sample questions P1: Reverse words –Given a list of space separated words, reverse the order of the words. Each line of text contains L letters and W words. A line will only consist of letters and space characters. There will be exactly one space character between each pair of consecutive words. Copyright © 2008 W. W. Norton & Company. All rights reserved. 3

Citation preview

Page 1: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Google Code Jam 2015

Copyright © 2008 W. W. Norton & Company.All rights reserved.

1

Page 2: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Rules

Copyright © 2008 W. W. Norton & Company.All rights reserved.

2

Page 3: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Sample questions• P1: Reverse words

– Given a list of space separated words, reverse the order of the words. Each line of text contains L letters and W words. A line will only consist of letters and space characters. There will be exactly one space character between each pair of consecutive words.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

3

Page 4: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P1: Reverse Words• Input

– The first line of input gives the number of cases, N.N test cases follow. For each test case there will a line of letters and space characters indicating a list of space separated words. Spaces will not appear at the start or end of a line.

• Output– For each test case, output one line containing "Case #x:

" followed by the list of words in reverse order.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

4

Page 5: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P1: Reverse Words• Limits

– Small dataset– N = 5

1 ≤ L ≤ 25• Large dataset

– N = 1001 ≤ L ≤ 1000

Copyright © 2008 W. W. Norton & Company.All rights reserved.

5

Page 6: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P1: Reverse Words• Sample

Copyright © 2008 W. W. Norton & Company.All rights reserved.

6

Input  Output 

3this is a testfoobarall your base

Case #1: test a is thisCase #2: foobarCase #3: base your all

Page 7: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P2: T9 Spelling • Problem

– The Latin alphabet contains 26 characters and telephones only have ten digits on the keypad. We would like to make it easier to write a message to your friend using a sequence of keypresses to indicate the desired characters. The letters are mapped onto the digits as shown below. To insert the character B for instance, the program would press 22. In order to insert two characters in sequence from the same key, the user must pause before pressing the key a second time. The space character ' ' should be printed to indicate a pause. For example, 2 2 indicates AA whereas 22 indicates B.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

7

Page 8: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P2: T9 Spelling • Input

– The first line of input gives the number of cases, N. N test cases follow. Each case is a line of text formatted as desired_message

– Each message will consist of only lowercase characters a-z and space characters ' '. Pressing zero emits a space.

• Output – For each test case, output one line containing "Case #x:

" followed by the message translated into the sequence of keypresses.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

8

Page 9: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P2: T9 Spelling • Limits

– 1 ≤ N ≤ 100.• Small dataset

– 1 ≤ length of message in characters ≤ 15.• Large dataset

– 1 ≤ length of message in characters ≤ 1000.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

9

Page 10: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

P2: T9 Spelling • Sample

Copyright © 2008 W. W. Norton & Company.All rights reserved.

10

Input Output 

4hiyesfoo  barhello world

Case #1: 44 444Case #2: 999337777Case #3: 333666 6660 022 2777Case #4: 4433555 555666096667775553

Page 11: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering Copyright © 2008 W. W. Norton & Company.All rights reserved.

11

Chapter 12

Pointers and Arrays (Continued)

Page 12: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Using an Array Name as a Pointer• Pointer arithmetic is one way in which arrays and

pointers are related.• Another key relationship:

The name of an array can be used as a pointer to the first element in the array.

• This relationship simplifies pointer arithmetic and makes both arrays and pointers more versatile.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

12

Page 13: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Using an Array Name as a Pointer• Suppose that a is declared as follows:int a[10];

• Examples of using a as a pointer:*a = 7; /* stores 7 in a[0] */*(a+1) = 12; /* stores 12 in a[1] */

• In general, a + i is the same as &a[i].– Both represent a pointer to element i of a.

• Also, *(a+i) is equivalent to a[i].– Both represent element i itself.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

13

Page 14: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Using an Array Name as a Pointer• The fact that an array name can serve as a pointer

makes it easier to write loops that step through an array.

• Original loop:for (p = &a[0]; p < &a[N]; p++) sum += *p;

• Simplified version:for (p = a; p < a + N; p++) sum += *p;

Copyright © 2008 W. W. Norton & Company.All rights reserved.

14

Page 15: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Using an Array Name as a Pointer• Although an array name can be used as a pointer,

it’s not possible to assign it a new value.• Attempting to make it point elsewhere is an error:while (*a != 0) a++; /*** WRONG ***/

• This is no great loss; we can always copy a into a pointer variable, then change the pointer variable:p = a;while (*p != 0) p++;

Copyright © 2008 W. W. Norton & Company.All rights reserved.

15

Page 16: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• When passed to a function, an array name is treated as a pointer.• Example:

int find_largest(int a[], int n){ int i, max;  max = a[0]; for (i = 1; i < n; i++) if (a[i] > max) max = a[i]; return max;}

• A call of find_largest:largest = find_largest(b, N);

This call causes a pointer to the first element of b to be assigned to a; the array itself isn’t copied.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

16

Page 17: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• The fact that an array argument is treated as a

pointer has some important consequences.• Consequence 1: When an ordinary variable is

passed to a function, its value is copied; any changes to the corresponding parameter don’t affect the variable.

• In contrast, an array used as an argument isn’t protected against change.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

17

Page 18: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• For example, the following function modifies an

array by storing zero into each of its elements:void store_zeros(int a[], int n){ int i;  for (i = 0; i < n; i++) a[i] = 0;}

Copyright © 2008 W. W. Norton & Company.All rights reserved.

18

Page 19: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• To indicate that an array parameter won’t be

changed, we can include the word const in its declaration:int find_largest(const int a[], int n){ …}

• If const is present, the compiler will check that no assignment to an element of a appears in the body of find_largest.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

19

Page 20: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• Consequence 2: The time required to pass an array

to a function doesn’t depend on the size of the array.

• There’s no penalty for passing a large array, since no copy of the array is made.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

20

Page 21: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• Consequence 3: An array parameter can be

declared as a pointer if desired.• find_largest could be defined as follows:int find_largest(int *a, int n){ …}

• Declaring a to be a pointer is equivalent to declaring it to be an array; the compiler treats the declarations as though they were identical.

Copyright © 2008 W. W. Norton & Company.All rights reserved.

21

Page 22: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• Although declaring a parameter to be an array is

the same as declaring it to be a pointer, the same isn’t true for a variable.

• The following declaration causes the compiler to set aside space for 10 integers:int a[10];

• The following declaration causes the compiler to allocate space for a pointer variable:int *a;

Copyright © 2008 W. W. Norton & Company.All rights reserved.

22

Page 23: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• In the latter case, a is not an array; attempting to

use it as an array can have disastrous results.• For example, the assignment*a = 0; /*** WRONG ***/

will store 0 where a is pointing.• Since we don’t know where a is pointing, the

effect on the program is undefined. 

Copyright © 2008 W. W. Norton & Company.All rights reserved.

23

Page 24: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Array Arguments (Revisited)• Consequence 4: A function with an array

parameter can be passed an array “slice”—a sequence of consecutive elements.

• An example that applies find_largest to elements 5 through 14 of an array b:largest = find_largest(&b[5], 10);

Copyright © 2008 W. W. Norton & Company.All rights reserved.

24

Page 25: Gator Engineering Google Code Jam 2015 Copyright © 2008 W. W. Norton & Company. All rights reserved.…

Gator Engineering

Using a Pointer as an Array Name• C allows us to subscript a pointer as though it

were an array name:#define N 10…int a[N], i, sum = 0, *p = a;…for (i = 0; i < N; i++) sum += p[i];

The compiler treats p[i] as *(p+i).

Copyright © 2008 W. W. Norton & Company.All rights reserved.

25