CodeWars 2008:  Kì Thi Phát Hiện Tài Năng Lặp Trình cấp PTTH của HP
Phỏng Vấn Chủ Nhiệm Bộ Phận Ra Đề Thi và chấm thi

Vietsciences-Làng Đậu   16/03/2008

Những bài cùng tác giả

Các bạn thân mến,

Thấm thoát đã 1 năm, kì thì Codewars trở lại. Lần này LĐ hân hạnh được sự nhiệt tình trả lời phỏng vấn của người đứng đầu bộ phận ra đề và chấm bài.  Để có thể biết thêm nhiều thông tin chi tiết xin các bạn đọc lại bài viết "Tìm Hiểu Kì Thi CodeWars: Cơ Hội Phát Hiện Tài Năng Lập Trình Cấp Trung Học của HP"  Bài viết này chỉ bổ xung thêm vài nhận xét và trình bày lại toàn văn cuộc phỏng vấn ngắn.
Các ảnh chụp của nhiếp ảnh gia Krodel, Mike (Photos courtesty by Krodel, Mike)

Kì Thi Codewars 2008:


Biểu tượng của Codewars 2008

  • So với các năm trước bộ phận ra đề thi đã tích cực chuẩn bị ngay từ khi kết thúc cuộc thi năm 2007 (tháng 3).   Năm nay số lượng đề bài được đầy đủ và có cả đề dành lại cho năm 2009.  Việc kiểm soát cộng điểm có thay đổi phần nào.  Các bài thi sau khi đã chấm xong ngoài việc ghi chép độc lập bởi hai nguồn khác nhau còn có 1 lần ghi chép điểm số của bài giải đúng với số báo danh và trả về ngay lập tức cho nhóm dự thi (qua đó các em biết chắc chắn được số điểm và bài giải của mình có được chấp nhận hay không).  Các bài giải chưa đúng hoàn toàn sẽ bị trả về ngay lập tức để các em có di hoặc loại bỏ bài đó hoặc sửa sai bài của mình.   Dĩ nhiên, người chấm không có thêm bớt hay bình phẩm gì vào bài thi của các em.  Điều cải cách này cho thấy tinh thần công khai trong việc chấm bài.
  • Kì thi này có sự hỗ trợ của hai hãng lớn về phần mềm đó là Microsoft và VMware. Ngoài ra còn có các "đại gia" như Coca cola, Pepsi Cola, Chik-phi-la ... tham dự. Nhờ sự ủng hộ lớn này mà phần quà dành cho mỗi thí sinh tham dự năm nay có phần hậu hỉ (1 áo có logo 2008, 1 bộ trình dịch MS Studio mới nhất, phần mềm hổ trợ lập trình cho trò chơi, ....).  Không chỉ thí sinh, những giáo viên đi kèm theo các đội thi cũng được quà đặc biệt của Microsoft.   Trong thời gian các em làm bài thi, Microsoft đã mạnh dạn mở luôn 1 lớp cấp tốc về cách dùng Visual Studio cho các giáo chức (đúng là họ biết cách quảng cáo sản phẩm :-)  Đặc điểm đáng lưu ý ở đây là phần thưởng cho các đội đọat giải thì không nhiều ngoại trừ giá trị về tinh thần danh dự ngược lại các em lại được bắt thăm trúng các giải thưởng khá năng kí như là các computer đời mới (laptop  và desktop) cũng như nhiều thứ giá trị khác như digital camera, ...
  • Việc ra đề năm nay có vài kết quả bất ngờ, đề bài số 5 chẳng hạn, thật sự không khó ... nhưng không có đội nào trong tổng số khoảng 160 đội giải được!!!?  tổng cộng có hai bài không có đội nào giải đúng là bài số 5 (cho cả hai trình độ thường và năng khiếu) và bài 15 (dành riêng cho đội năng khiếu). 
  • Số trường trung học năm nay là 60 trường trung học. Bao gồm 160 đội tuyển.
  • Kết quả cũng không quá đáng ngạc nhiên là các trường trung học nổi tiếng thường dần đầu: Trường Katy Taylor lại đạt giải nhất cho trình độ năng khiếu.
  • Trong kì thi này do người tham gia ghi điểm thiếu kinh nghiệm nên, ban tổ chức đã quyết định thống kê và kiểm tra lại toàn bộ các bài giải đúng. Thời gian thông báo kết quả do đó bị lui lại hơn 90 phút.


Không gian thi Codewars 2008

 

Toàn Văn Bài Phỏng Vấn Với Ông Mark Matson
 

1. Can you describe yourself within HP and your role in Codewars?
Người dịch (ND):  Xin ông tự giới thiệu về vai trò của ông trong HP và Codewars?

My “real job” at Hewlett-Packard is as a Software Program Manager on platform servers in the Industry Standard Servers group. Basically, for a given new server, my job is to make sure all needed software, from operating systems to BIOS to drivers, is ready to go when the server is ready to ship. I have been involved with CodeWars since its beginning 11 years ago, back when I was programming full-time. In 2008, I was in charge of the Problem Creation Team (which creates the problem set given to the CodeWars competitors) and the Scoring Team (that compiles the team scores during the actual competition). Since all work done by HP employees for CodeWars is voluntary, everyone ends up doing all kinds of other things to help make the contest happen – from taking pictures to serving pizza to printing display posters.
ND: "Công việc thực sự" của tôi ở Hewlett-Packard là một Quản lý Chương Trình Phần Mềm trên các máy chủ nền trong nhóm Industry Standard Server (Máy Chủ Tiêu Chuẩn Công Nghiệp).  Chủ yếu công việc của tôi là bảo đảm được tất cả các phần mềm cần thiết, từ Hệ điều hành cho đến các bộ khiển BIOS được sẵn sàng trước khi các máy chủ được gửi (bán) ra ngoài.  Tôi đã tham dự với Codewars từ 11 năm nay, từ lúc mà tôi còn là một lập trình viên toàn thời gian.  Trong năm 2008 này, tôi chịu trách nhiệm trong Nhóm Ra Đề (viết ra các đề bài cho các đội dự thí) và Nhóm Ghi Điểm (chuyển dịch điểm số của các đội dự thi trong suốt thời gian thi đấu).  Vì mọi việc đều hoàn tất bởi các nhân viên của HP tự nguyện cho kì thi Codewars, cho nên mỗi người cuối cùng sẽ lựa cho mình một nhiệm vụ trong mọi loại việc để cho kì thi được tốt đẹp -- từ việc phục vụ bánh pizza cho đến việc in các bích chương  (Thực sự ông Mark đã nói chuyện rất khiêm tốn -- Ông chủ trì bộ phận ra đề thi trong rất nhiều năm và là người rất nghiêm túc, luận luôn điều chỉnh các phương pháp tổ chức để mỗi năm được tiến bộ hơn, ít bị gian lận và hiệu quả hơn -ND)

 

2. Why HP calls it "Codewars" ? What is the meaning of this programming contests to HP, to you, and to the students?
Tại sao lại gọi là "Codewars"?  Ý nghĩa của kì thi này đối với HP, với ông và với các học sinh là gì?

I’m not sure who came up with the name “CodeWars,” but it emphasizes, in a fun way, that this is a real competition for programmers. We try to make it fun, but we also want it to be a real challenge and stretch for these teams – something that will inspire them to push a little further into their technology education. CodeWars started as a totally grass roots effort, with a few employees from an old Compaq software development group, some of whom had competed in similar contests at the college level. Our goal was simply to have an outreach to our local high-school students, and to help inspire them to consider technology as a career. We also run an annual robotics competition, HP Kids Day, at the middle school level. Its goal is to do the same for kids at an earlier stage, and in particular to reach kids that otherwise might not consider a technology career.
Tôi không rõ ai đã đem đến cái tên "Codewars",  nhưng nó là để nhấn mạnh, trong một kiểu hài hước, rằng đây là cuộc tranh tài thực sự giữa các nhà lập trình.  Chúng tôi cố gắng để làm cho nó trở nên vui vẻ, nhưng vẩn muốn cho nó thực sự thách thức và căng thẳng cho các đội dự thi -- là những điều sẽ gợi hứng các em nhằm thúc đẩy xa hơn chút nữa trong viẹc giáo dục công nghệ của các em.  Codewars bắt đầu hình thành từ nổ lực của một ít nhân viên đã từng tham gia các kì thi tương tự khi còn ở cấp đại học, đến từ một nhóm phát triển phần mềm Compaq cũ (hãng Compaq đã xác nhập vào hãng HP vào năm 2001 - ND). Mục đích của chúng tôi đon giản là nhằm cho các học sinh địa phương đạt tới một tầm cao, và để giúp gợi hứng cho các em xem xét một định hướng nghề nghiệp trong công nghệ.  Bên cạnh, chúng tôi còn có tổ chức cuộc tranh tài Robot thường niên, gọi là HP Kids Day (Ngày Trẻ Em HP) cho câp độ Phổ Thông Cơ Sở.  Việc này có cùng một một mụch dích như trên, và đặc biệt để tạo diều kiện cho các trẻ em, vì nếu không chúng sẽ không nghĩ đến nghề nghiệp trong ngành công nghê.

3. Can you share to us the best and the worst things or the funny things that you experienced in among of the Codewars contests in the past?
Ông có thể chia sẽ với chúng tôi những kinh nghiệm vui buồn, hay dở mà ông đã trải qua trong các kì thi Codewars?

Well, the best times are often when a team “comes out of nowhere” to perform well at CodeWars. For example, in 2007, the team from Gonzales (a small town southwest of Houston) High School finished 2nd in our Advanced Division – a real surprise. Another highlight in 2007 was hosting a team from the New Orleans area who had been directly affected by Hurricane Katrina. Thanks to the generosity of various sponsors, we were able to fly them to Houston free of charge, and provide lodging to them in a local hotel. That’s the kind of thing that makes a difference in someone’s life. We’ve had all sorts of problems during the contests that are funny in retrospect – power outages, burned pizza, scoring problems – but what sticks with you are the kids that really get a kick out of the whole event. We hope those kids will eventually find a career in programming or other technology areas.
Những trải nghiệm tốt đẹp nhất thường là khi có một đội "không có tiếng tăm" thực hiện tốt trong kì thi.  Chẳng hạn, năm 2007, đội từ Trung học Gonzales (Một thị tứ nhỏ ở Tây Nam thành phố Houston) đã đạt giải nhì trong Bộ Phận Năng Khiếu -- là một điều thực sự làm ngạc nhiên.  Một điểm sáng khác trong năm 2007 là việc lo tạm trú của một đội từ New Orleans, nơi đã trực tiếp chịu ảnh hưởng của bão Katrina.  Nhờ vào sự rộng lượng của các nhà bảo trợ, chúng tôi đã có thể giúp họ chuyến bay đến Houston mà không phải trả tiền vé, và cung cấp chỗ ăn ở cho họ tại một khách sạn.  Đó là sự kiện mà làm thay đổi cuộc sống của một số người. Chúng tôi  đã có nhiều loại khó khăn trong thời gian các cuộc thi diễn ra mà nhìn lại thật buồn cười -- như là mất điện, bánh pizza bị cháy khét, các khó khăn lúc ghi điểm -- nhưng những điều đáng nhớ với các bạn là các em đã thực sự làm được điều đáng kể trong toàn bộ sự kiện.  Chúng tôi hy vọng những đứa trẻ này sẽ dần tìm thấy một chuyên nghiệp trong lập trình hay trong các ngành công nghệ.

4. In your idea, what kind of the programming problem would be a "good candidate" to select for a Codewars contest ?
Theo ý Ông, kiểu đề bài nào sẽ là một "đề dự khảo tốt" có thể được lựa chọn trong một kì thi Codwars?

A perfect CodeWars programming problem is easy and simple to state, but challenging to solve. We don’t want to trick the students, but cause them to really think and stretch their programming muscles.
Một đề bài lập trình tuyệt vời trong Codewars là bài dể mô tả, nhưng lại thách đố để giải quyết. chúng tôi không muốn cài bẫy các học sinh, mà muốn bắt họ thực sự tư duy và kéo căng các cơ bắp lập trình của họ.

5. About future, would you please share to us what can be changed, applied to Codewars ?
Trong tương lai, Ông có thể nào chia sẻ với chúng tôi những gì có thể thay đổi , áp dụng cho Codewars?

Well, we are always looking at ways to improve the event. We are hoping to do more automation next year in both the judging and scoring areas. We’d also like to expand the number of schools participating, if not the total number of teams. Due to changes on the HP campus here in Houston, we will also be moving to a new location next year, and that will present its own set of challenges.
Chúng tôi lúc nào cũng tìm kiếm các phương án để tăng phẩm chất cho kì thi.  Chúng tôi hy vọng sẽ đưa vào vệc tự động hóa nhiều hơn trong năm tới trong cả hai phương diện chấm thi và ghi điểm.  Chúng tôi cũng muốn mở rộng ra cho nhiều trường tham dự, không chỉ trong số lượng các đội dự thi.  Do sự thay đổi các cơ sở làm việc của HP ở Houston này, chúng tôi cùng sẽ phải di chuyển địa điẻm thi trong năm tới, và sẽ phải đương đầu với nhiều thách đố.

I, on behalf of many vienamese students and educators, want to say "thank you so much for what you share to us".
Đại diện cho nhiều học sinh và các nhà giáo xin chuyển đến Ông lời cảm ơn chân thành cho sự chia này.

Kết Quả Thống Kê:

Khu vực Năng Khiếu

 

 Thứ  Hạng  

 

Trường 

 

Học Khu 

 

Đội#

 
   

1

    

Taylor H.S.

     

Katy ISD

    

#2069

   
 

2

  Cypress Creek H.S.  

Cypress-Fairbanks ISD 

 

#2060

 
 

3

  Friendswood H.S.  

Friendswood ISD

 

#2003

 
 

4

  Cypress Falls / Cypress Woods H.S.   Cypress-Fairbanks ISD  

#2072

 
 

5

  Paschal H.S.   Fort Worth ISD  

#2073

 
 

5

  Cinco Ranch H.S.   Katy ISD  

#2033

 
 

5

  Seven Lakes H.S.   Katy ISD  

#2036

 
 

8

  Bryan High School Technology Academy   Bryan ISD  

#2027

 
 

9

  Seven Lakes H.S.   Katy ISD  

#2038

 
 

10

  Friendswood H.S.  

Friendswood ISD

 

#2001

 

Khu Vực Hiểu Biết

 

 Thứ
Hạng

 

Trường 

 

Học Khu 

 

Đội #

 
   

1

    

Clements H.S.

     

Fort Bend ISD

    

#1029

   
 

2

  Nederland H.S.  

Nederland ISD 

 

#1006

 
 

3

 

Cinco Ranch H.S.

 

Katy ISD

 

#1043

 
 

4

  Clear Lake H.S.   Clear Creek ISD  

#1099

 
 

5

  Dulles H.S.   Fort Bend ISD  

#1019

 
 

6

  Klein Oak H.S.   Klein ISD  

#1014

 
 

7

  Cypress Creek H.S.   Cypress-Fairbanks ISD  

#1084

 
 

8

  Seven Lakes H.S.   Katy ISD  

#1044

 
 

9

  Clear Creek H.S.   Clear Creek ISD  

#1020

 
 

10

  Friendswood H.S.   Friendswood ISD  

#1003

 


Kết quả thống kê năm 2008 cho bộ phận năng khiếu

 

Một Số Đề Bài:

Để minh hoạ xin liệt ra đây trong nguyên văn một số đề bài bào gồm bài 5 (5 điểm) và bài 15 (15 điểm) là hai bài không có HS giải và bài có điểm số cao nhất 16 (17 điểm).

Houston Skyline

Write a program that will produce a silhouette of the Houston skyline, given the height and placement of a series of buildings.

Program Input

Prompt the user for the start location (the left edge) [1..60], the width [1..40], and height [1..20] of each building.  Note that the dimensions of a building are a measure of its interior, and does not count the outside edges.  A building of width 1 and height 6 will actually consume 3 columns and 8 rows on the silhouette.  Continue prompting for more buildings until a zero is entered for the start location.  The entire skyline will fit within 50 columns wide and a maximum height of 20 rows.  There will be no more than 16 buildings.

 

Enter building #1’s start:    3
Enter building #1’s width:    3
Enter building #1’s height:   3

Enter building #2’s start:    10
Enter building #2’s width:    5
Enter building #2’s height:   2

Enter building #3’s start:    4
Enter building #3’s width:    3
Enter building #3’s height:   7

Enter building #4’s start:    10
Enter building #4’s width:    1
Enter building #4’s height:   10

Enter building #5’s start:    0

Program output:

Output to the screen the outline of the resulting silhouette.  Smaller buildings may be completely hidden by larger ones. 

         +-+
         | |
         | |
   +---+ | |
   |   | | |
   |   | | |
   |   | | |
  ++   | | |
  |    | | +---+
  |    | |     |
  |    | |     |
--+    +-+     +----------------------------------

12345678901234567890123456789012345678901234567890


Railway        Shunting Crew        codewars 2008

 

A railway shunting crew must fulfill orders for the formation of departing trains from the rail cars in its sidings. There are four sidings, lettered A, B, C and D, with a limited number of positions that a rail car may occupy: five each for A and B, three each for C and D. The formation order will specify the sequence of rail cars to be connected to the locomotive that occupies the outmost position of siding A. The train will be formed from five of the eight cars sitting in the sidings in the order specified. Rail cars may only move to or from siding A. This means, for example, that a car cannot move directly from siding C to siding D. Instead, it must first move from siding C to siding A (where a free space must therefore be available), then to siding D. In other words, all valid moves must have siding A as the source or destination.

Write a program that prints a series of valid rail car movements that fulfills the formation order.

Input

The input consists of three lines. The first two lines represent the initial configuration of rail cars on the sidings. The representation is logical, not physical. The logical siding layout looks like this:

AAAAA+BBBBB

CCC^DDD

The + and ^ characters represent the switch. The third line represents the formation order

 

L----+86321

  457^---

L12345

 

also try these:

L----+35841
  267^---
L12846

L----+26381
  457^---
L41732

Output

 

The program must print the siding configuration at each step from initial configuration to fulfillment, with a blank line between each step. Only one car may move per step. Many correct solutions are possible. It is also possible to return to a previously visited configuration through a long sequence of moves. However, revisiting a previous configuration is a waste of the shunting crew’s time (never mind the judges) and will be considered an incorrect solution. In the final train configuration, one of the rail cars must occupy the + location of the switch. The switch must remain unoccupied in all other steps. The program should complete within 15-20 seconds. Programs that do not complete within 60 seconds on a judge’s machine will be considered incorrect.

 

L----+86321

457^---

 

L8---+-6321

457^---

 

L----+-6321

457^--8

 

L6---+--321

457^--8

 

L----+--321

457^-68

L7---+--321

45-^-68

 

L----+--321

45-^768

 

L5---+--321

4--^768

 

L54--+--321

---^768

 

L543-+---21

---^768

L54--+---21

3--^768

 

L542-+----1

3--^768

 

L54--+----1

32-^768

 

L541-+-----

32-^768

 

L54--+-----

321^768

L547-+-----

321^-68

 

L54--+----7

321^-68

 

L5---+---47

321^-68

 

L----+---47

321^568

 

L1---+---47

32-^568

L12--+---47

3--^568

 

L123-+---47

---^568

 

L1234+----7

---^568

 

L12345----7

---^-68

 

23 moves.


Warning: Graphic Functions!                    codewars 2008

Often times seeing the graph of a function is the best way to understand its properties.

            Write a program to graph a function y = f(x) over a specified range.

Input

The program will read one or more lines typed from the console. Each line contains an algebraic expression of a single variable x. Valid operations include addition, subtraction, multiplication, division, exponentiation (where ab is represented by a^b), parentheses, sine, cosine, and log10. The program must evaluate the expression using standard arithmetic precedence rules: first functions and parenthesis, then exponents, then multiplication and division, then addition and subtraction. Back-to-back exponents must be evaluated right-to-left, all other operations left-to-right. When correctly parsed, the input will not cause divide by zero conditions. Trigonometric functions should operate in radians, not degrees. The program must display a prompt to the console before each line with the string “f(x)=”, and it must terminate when the input-line is the word END. 

f(x)=7.2*cos( (x + 3) / 4 )
f(x)=
log( x+21 ) * 5.771
f(x)=
3 * x^2 -4 *x+ 1
f(x)=
END

Output

The program must plot each function over the range -10 to 10 in a 21x21 integer grid. Output values should be truncated (always round down). Each function must be plotted in its own grid. The program must draw X and Y axes  

..........|..........
..........|..........
..........|..........
.......*..|..........
.....**.**|..........
....*.....*..........
..........|..........
...*......|*.........
..*.......|.*........
..........|..........
-*--------+--*-------
*.........|...*......
..........|....*.....
..........|..........
..........|.....*....
..........|......*...
..........|.......*..
..........|........**
..........|..........
..........|..........
..........|..........


 http://vietsciences.free.fr , http://vietsciences.org  Làng Đậu