Python cho người Việt

Python cho người Việt

Entries tagged “contest”

Kết quả cuộc thi giải toán lần II

written by vithon, on Apr 18, 2013 11:29:51 PM.

Cảm ơn sự hưởng ứng nhiệt tình của các bạn với cuộc thi giải toán lần II của PCNV.

Lần này nhóm nhận được sự sự tham gia của năm bạn Phạm Ngọc Quang Nam, Nguyễn Văn Nam, Vũ Khuê, Hoàng Quốc Thịnh, và Đậu Duy Khánh.

Bài của bạn Thịnh:

09:03:48 ~/tmp/pell2$ python3.3 thinhhq.py | python timer.py > thinhhq.txt
09:04:22 ~/tmp/pell2$ python checker.py < thinhhq.txt
Max 448985
09:04:30 ~/tmp/pell2$ python3.3 thinhhq.py | python timer.py > thinhhq.txt2
09:05:04 ~/tmp/pell2$ python checker.py < thinhhq.txt2
Max 449905
09:05:08 ~/tmp/pell2$ python3.3 thinhhq.py | python timer.py > thinhhq.txt3
09:05:39 ~/tmp/pell2$ python checker.py < thinhhq.txt3
Max 449421

Bài của bạn Văn Nam:

09:05:46 ~/tmp/pell2$ python3.3 namnv.py | python timer.py > namnv.txt
09:07:12 ~/tmp/pell2$ python checker.py < namnv.txt
Max 1394855
09:07:28 ~/tmp/pell2$ python3.3 namnv.py | python timer.py > namnv.txt2
09:07:47 ~/tmp/pell2$ python checker.py < namnv.txt2
Max 1394855
09:08:00 ~/tmp/pell2$ python3.3 namnv.py | python timer.py > namnv.txt3
09:08:19 ~/tmp/pell2$ python checker.py < namnv.txt3
Max 1394855

Bài của bạn Khanh:

09:12:49 ~/tmp/pell2$ python3.3 khanhdd.py | python timer.py > khanhdd.txt
Traceback (most recent call last):
  File "khanhdd.py", line 13, in <module>
    print (a1,' ',b1)
BrokenPipeError: [Errno 32] Broken pipe
09:13:27 ~/tmp/pell2$ python checker.py < khanhdd.txt
ERROR:root:Format
Traceback (most recent call last):
  File "checker.py", line 16, in <module>
    n, k = map(long, line.split())
ValueError: too many values to unpack

Bài của bạn Khuê

09:14:37 ~/tmp/pell2$ python3.3 khuev.py | python timer.py > khuev.txt
  File "khuev.py", line 35
    print "n: %d - k: %d" % (-b / 2, k)
                        ^
SyntaxError: invalid syntax

Bài của bạn Quang Nam:

09:15:19 ~/tmp/pell2$ python3.3 nampnq.py | python timer.py > nampnq.txt
  File "nampnq.py", line 5
    print "n=%d, k=%d" % (n,k)
                     ^
SyntaxError: invalid syntax

Mã nguồn và bản lưu kết quả của cuộc thi có thể được tải về từ https://docs.google.com/file/d/0B5X03CmpgiFeMkNubXlGNFlCMjQ/edit?usp=sharing.

Như vậy, bạn Văn Nam đã thắng giải kỳ này. Xin chúc mừng bạn Văn Nam.

Bạn Văn Nam gửi thư cho admin@ cho biết mẫu áo bạn chọn, và thông tin bưu điện để nhóm PCNV có thể gửi áo về cho bạn.

Cuộc thi giải toán bằng Python

written by vithon, on Mar 31, 2013 9:18:00 AM.

Trong lần thi trước (http://www.vithon.org/2010/05/24/phat-d%E1%BB%99ng-cu%E1%BB%99c-thi-gi%E1%BA%A3i-toan-b%E1%BA%B1ng-python), chúng ta đánh giá chương trình dựa trên số lượng cặp N, K tìm được.

Tiêu chí của lần thi này là in ra cặp số N, K lớn nhất có thể tìm được trong 30 giây. Cặp số cuối cùng được in ra trong 30 giây sẽ được xem là cặp số lớn nhất và dùng để đánh giá các chương trình với nhau.

Giải thưởng của kỳ thi lần này sẽ là một áo thun do bạn Nguyễn Thành Nam đã tặng nhóm PCNV trong lần đi PyCon vừa qua. Các bạn có thể xem qua các áo giải thưởng (trừ EdX cỡ L, các áo khác cỡ M, chỉ được chọn 1) ở URL sau:

https://drive.google.com/folderview?id=0B5X03CmpgiFeNzNJN09qZnd2Sk0&usp=sharing

Các bài tham dự gửi bằng thư điện tử về cho admin@ hạn chót trong ngày 14 tháng 04 năm 2013. Nhằm khuyến khích việc sử dụng Python 3, các bài tham gia kỳ thi này sẽ được chấm trên Python 3.3. Mòng các bạn chú ý yêu cầu này.

Quyết định của người chấm là cuối cùng. Xin miễn nhận khiếu nại.

Kết quả cuộc thi Đời

written by vithon, on Oct 21, 2011 5:51:00 PM.

Cuộc thi Đời kết thúc vào tuần trước nhưng vì không có điều kiện truy cập Internet nên đến bây giờ ban tổ chức mới có thể công bố kết quả.

Cuộc thi thu hút bốn bài tham dự từ các bạn sau:

Tác giảBài tham dự
Nhâm Xuân Namlife.py
Huỳnh Hải Âubilife.py
Phan Phụng Tiếntreeoflife.py
Vũ Khuêcuocthidoi.py

Nhóm PCNV đã sử dụng một chương trình chấm giải đơn giản khác để đánh giá các bài này. Chương trình này chỉ đơn giản là tạo một ma trận MxN phần tử và yêu cầu các bài tham gia tính giá trị của các ô ngẫu nhiên tại thế một thế hệ trong tương lai.

Ở vòng đầu tiên, ma trận 1x1 được sử dụng.

G:\vithon\life>judge.py -c 1 -r 1 -n 10000 bilife.Board life.MainBoard treeoflife.Board cuocthidoi.Board
Generating random test case
Width = 1
Height = 1

0

Executing bilife.Board
Executing life.MainBoard
Executing treeoflife.Board
Executing cuocthidoi.Board

Checking for cell (0, 0)
Traceback (most recent call last):
  File "G:\vithon\life\judge.py", line 120, in <module>
    main()
  File "G:\vithon\life\judge.py", line 96, in main
    if results[module_name]['object'].get_cell(row, col):
  File "G:\vithon\life\treeoflife.py", line 160, in get_cell
    raise ValueError()
ValueError

Vì sinh ra lỗi nên mô-đun treeoflife đã bị loại.

Ở vòng hai, ma trận 2x2 được sử dụng và chỉ tính một thế hệ tương lai.

G:\vithon\life>judge.py -c 2 -r 2 -n 1 bilife.Board life.MainBoard cuocthidoi.Board
Generating random test case
Width = 2
Height = 2

1 1
0 1

Executing bilife.Board
Executing life.MainBoard
Executing cuocthidoi.Board

Checking for cell (0, 1)
*** alive count = 2, dead_count = 1
bilife is eliminated

Checking for cell (1, 0)
*** alive count = 3, dead_count = 0

Checking for cell (0, 0)
*** alive count = 2, dead_count = 1
bilife is eliminated

Checking for cell (1, 1)
*** alive count = 2, dead_count = 1
bilife is eliminated

RESULT:
[+] cuocthidoi : 0.000000 seconds
[+] life : 0.000000 seconds
[-] bilife : 0.000000 seconds

Với lần chạy này, chỉ có mô-đun bilife đưa ra kết quả sai cho trường hợp ô (0, 1). Chương trình chấm so sánh kết quả của mô-đun với kết quả của số đông. Trong trường hợp này, số đông đã đúng.

Sau hai lần chạy, chỉ còn lại hai mô-đun lifecuocthidoi.

Lần chạy thứ ba sử dụng ma trận 2x2 với một thế hệ.

G:\vithon\life>judge.py -c 2 -r 2 -n 1 life.MainBoard cuocthidoi.Board
Generating random test case
Width = 2
Height = 2

1 0
0 0

Executing life.MainBoard
Executing cuocthidoi.Board

Checking for cell (0, 0)
*** alive count = 1, dead_count = 1
life is eliminated

Checking for cell (1, 1)
*** alive count = 0, dead_count = 2

Checking for cell (1, 0)
*** alive count = 0, dead_count = 2

Checking for cell (1, 0)
*** alive count = 0, dead_count = 2

RESULT:
[-] life : 0.000000 seconds
[+] cuocthidoi : 0.000000 seconds

Với lần chạy này, life đã bị loại, và chỉ còn cuocthidoi.

Tóm lại, sau ba vòng chạy thì chỉ có mô-đun cuocthidoi đưa ra đáp án đúng. Tuy nhiên, giải này không có người chiến thắng vì mục tiêu của giải là thi về tốc độ thực thi. Khi chỉ có một đối thủ trong cuộc thi thì giải trở nên vô nghĩa. Hơn nữa, bài tham dự cuocthidoi.py đã không thực hiện đúng quy chế thứ 3 trong thể lệ tham gia nên cũng bị loại. Mặc dù không có người chiến thắng nhưng nhóm PCNV xin chúc mừng tác giả Vũ Khuê đã vượt qua các đối thủ khác trong cuộc thi.

Nói tóm lại, giải đã không đạt được mục tiêu đề ra ban đầu. Xin hẹn gặp các bạn ở các giải sau!

Cuộc thi Đời

written by vithon, on Sep 15, 2011 1:36:00 PM.

Nhóm PCNV hân hạnh tổ chức một cuộc thi nhỏ với giải thưởng lớn!

Game of Life, tạm dịch Trò chơi Đời, là một mô phỏng trạng thái các điểm trên một ma trận MxN đơn giản. Các điểm trên ma trận có trạng thái hoặc là sống, hoặc là chết. Trạng thái của một ma trận được gọi là một thế hệ. Các điểm trên ma trận ở thế hệ G sẽ tuân theo các luật sau để xác định trạng thái của chúng ở thế hệ G + 1:

  1. Nếu số lượng các điểm sống chung quanh điểm hiện tại là 3, thì điểm hiện tại sẽ sống.
  2. Nếu số lượng các điểm sống chung quanh điểm hiện tại là 2, thì điểm hiện tại sẽ tiếp tục giữ trạng thái hiện tại.
  3. Nếu số lượng các điểm sống chung quanh điểm hiện tại nhỏ hơn 2, hoặc lớn hơn 3, điểm hiện tại sẽ chết.

Cuộc thi Đời là sự tranh đua của các mã nguồn Python thực hiện việc tối ưu hóa cách thể hiện mô phỏng trên. Thể lệ của cuộc thi bao gồm:

  1. Bài tham dự gửi về địa chỉ thư admin tại vithon.org.
  2. Bài tham dự chỉ được sử dụng ngôn ngữ Python, và các thư viện chuẩn đi kèm.
  3. Bài tham dự chỉ cần hiện thực hóa lớp mẫu bên dưới bằng cách kế thừa nó và cài đặt các phương thức cần thiết.
  4. Yếu tố cơ bản để đánh giá là tốc độ chạy của chương trình.
  5. Hạn tham dự là hết ngày 15 tháng 10 năm 2011.
  6. Chỉ có một giải có trị giá tương đương 250 đô la Singapore.
  7. Quyết định của ban tổ chức là cuối cùng, xin không nhận khiếu nại.
class Board(object):
    '''Represents the Game of Life matrix.

    Each cell has at most 8 neighbors. A cell may have less than 8 neighbors.
    For example, a cell at (0, 0) would have only three neightbors (0, 1),
    (1, 0) and (1, 1).

    The cells are addressed in a row-major (row first) manner. The index starts
    from zero.

    '''

    def __init__(self, width=10, height=10):
        '''Initializes this board.

        Args:
            width (int): Number of cells in a row.
            height (int): Number of rows in this board.

        '''

        raise NotImplemented()

    def generation(self, n=1):
        '''Transform this board into next ``n`` generation(s).

        The transformation is in place similar to ``list.sort``.
        No value is returned to the caller.

        Args:
            n (int): Number of generations.

        Raises:
            ValueError: If n is smaller than 1.

        '''

        raise NotImplemented()

    def get_cell(self, row, col):
        '''Returns the state of the cell at row ``row`` and column ``col``.

        Args:
            row (int): The row, zero-indexed.
            col (int): The column, zero-indexed.

        Returns:
            True: If the cell is alive.
            False: If the cell is dead.

        '''

        raise NotImplemented()

    def set_cell(self, row, col, state):
        '''Sets a cell at row ``row`` and column ``col`` to state ``state``.

        Args:
            row (int): The row, zero-indexed.
            col (int): The column, zero-indexed.
            state (bool): Cell's state.

        '''

        raise NotImplemented()

    def get_row(self, row):
        '''Returns the states of all cells in row ``row``.

        Args:
            row (int): The row, zero-indexed.

        Returns:
            A sequence of bools.

        '''

        raise NotImplemented()

Mọi thắc mắc và thảo luận xin vui lòng gửi lên diễn đàn.

Tranh tài Bắn Suồng

written by vithon, on Nov 26, 2010 10:23:00 AM.

Cập nhật: Phiên bản battleship.zip cũ có lỗi. Các bạn tải về bản mới hoặc sửa dòng player2_mod = __import__(opts.player_1) thành player2_mod = __import__(opts.player_2). Xin cáo lỗi vì sự phiền toái này.

Nhóm PCNV hân hạnh tổ chức một cuộc thi mới: Tranh tài Bắn Suồng!

Bắn Suồng (xin lỗi vì sai chính tả, nhưng để giữ chữ viết tắt BS nên tôi đành phải đặt tên trò chơi là vậy) không phải là một trò chơi thông thường. Để chơi trò chơi này, các bạn phải viết mã bằng ngôn ngữ… (cho xin 500 đồng trống và kèn cho hào hứng tí nào) Python để điều khiển các đối tượng trong trò chơi.

Các bạn có thể tải trò chơi về tại địa chỉ http://www.vithon.org/static/battleship.zip.

Cuộc thi Bắn Suồng được tổ chức với thể lệ như sau:

  1. Mô-đun (các tập tin .py) tham gia phải gửi về cho admin+thư-rác@vithon.org (bỏ phần + thư rác) trước ngày 12 tháng 12 năm 2010.
  2. Các bài thi này sẽ được kiểm tra trước khi được chấp nhận cho thi.
  3. Các bài tham dự sẽ đấu vòng tròn tính điểm. Thắng sẽ được 3 điểm, hòa được 1, và thua được 0 điểm.
  4. Các trận đấu sẽ được truyền hình (qua web) trực tiếp vào ngày 12 tháng 12.
  5. Vùng biển sẽ có kích thước ngẫu nhiên với độ rộng và dài tối thiểu là 10, và tối đa là 15.
  6. Một giải nhất sẽ nhận được 01 chiếc áo Vithon miễn phí, và có thể mua thêm 01 chiếc áo khác với giá ưu đãi 100.000!
  7. Quyết định của ban tổ chức là cuối cùng. Xin được phép không nhận khiếu nại.

Để trao đổi về cuộc thi này, cũng như các vấn đề liên quan đến lập trình Python, các bạn có thể sử dụng diễn đàn của nhóm hoặc liên hệ qua IRC.

Nhóm PCNV rất mong nhận được sự tham gia nhiệt tình của các bạn.

Cuộc thi viết chương trình theo dõi mã máy

written by Nguyễn Thành Nam, on Jul 22, 2010 12:13:00 PM.

Một người bạn của chúng ta đã có nhã ý tài trợ cho một cuộc thi nhỏ.

Mục tiêu: Viết một công cụ bằng ngôn ngữ Python để thực hiện việc lưu lại những lệnh gọi hàm ở mức hợp ngữ trong khi thực thi của một chương trình thông thường khác.

Ví dụ: Với đoạn mã tương tự như sau:

0x08048552 <main+110>:	mov    DWORD PTR [esp],eax
0x08048555 <main+113>:	call   0x80483d8 <printf@plt>
0x0804855a <main+118>:	mov    eax,0x0
0x0804855f <main+123>:	leave  
0x08048560 <main+124>:	ret 

thì chương trình sẽ in ra thông tin tương tự (có thể tùy ý chỉnh sửa cho đầy đủ hơn) như sau:

* Before printf()
--------------------------------------------------------------------------[regs]
  EAX: 0x08048646  EBX: 0x002B2FF4  ECX: 0x00000003  EDX: 0xBFFFEF9C  
  ESI: 0x00000000  EDI: 0x00000000  EBP: 0xBFFFF0A8  ESP: 0xBFFFEF80  
 

* After printf()
--------------------------------------------------------------------------[regs]
  EAX: 0x0000000A  EBX: 0x002B2FF4  ECX: 0xBFFFEF68  EDX: 0x002B4320  
  ESI: 0x00000000  EDI: 0x00000000  EBP: 0xBFFFF0A8  ESP: 0xBFFFEF80

Yêu cầu: Bắt buộc phải sử dụng ngôn ngữ Python cho chương trình chính. Có thể sử dụng thêm các công cụ phụ hoặc thư viện hỗ trợ như GDB, ptrace.

Hạn nộp bài: Ngày 26 tháng 07 năm 2010

Nộp bài (mã nguồn) về cho admin+frontpage@vithon.org (xin vui lòng bỏ +frontpage).

Giải thưởng: Một giải thưởng duy nhất bao gồm 100.000 đồng tiền mặt và một món quà từ Las Vegas.

Phát động cuộc thi Giải Toán Bằng Python

written by Phan Đắc Anh Huy, on May 24, 2010 2:32:00 PM.

Sau thành công của 2 lần thi trước, nhóm PCNV tiếp tục phát động cuộc thi Giải Toán Bằng Python để chào mừng ngày quốc tề thiếu nhi đang đến rất gần. Đề thi rất đơn giản:

Hãy dùng ngôn ngữ lập trình Python để tính toán và xuất ra các cặp số n và k thỏa mãn:
1 + 2 + … + n = n + 1 + n + 2 + … + n + k


Input : Không có.
Output : Standard Output.
Output Format : In trên nhiều dòng, mỗi dòng là một cặp số n, k cách nhau bằng một hoặc nhiều khoảng trắng.

Yêu cầu :
- Chỉ được dùng các module built-in.
- Không được in ra các giá trị n, k đã tính toán sẵn trước khi chương trình thực thi dưới bất kỳ hình thức nào.
- Chương trình sẽ được người chấm thực thi trong vòng 30 giây. Hết thời gian này, chương trình sẽ bị ngắt.
- Chương trình nào in ra được nhiều cặp số n,k nhất sẽ chiến thắng.
- Chương trình sẽ bị loại nếu in ra bất cứ cặp số n,k nào không chính xác.
Thời hạn dự thi: Từ ngày hôm nay (24/05/2010) đến hết ngày 31/05/2010.


Bài dự thi xin gửi về địa chỉ email admin+frontpage@vithon.org (xin vui lòng bỏ +frontpage trước khi gửi), bạn có thể gửi nhiều lần trong trường hợp cải thiện được kết quả của mình. Chương trình được gửi cuối cùng sẽ được nhóm PCNV sử dụng để chấm điểm chung cuộc.

Trong quá trình làm bài, nếu có nhu cầu trao đổi, đặt câu hỏi, hay chỉ đơn giản là muốn trò chuyện với những người bạn rất dễ thương trong nhóm PCNV, các bạn có thể tham gia phòng tán gẫu #vithon ở máy chủ irc.freenode.net
Đã là cuộc thi thì không thể thiếu giải thưởng, phần thưởng cho người thắng cuộc là 100.000 VND và một buổi trò chuyện thân mật với admin nhóm PCNV.

Trao giải cuộc thi lập trình game bằng Python

written by Nguyễn Thành Nam, on Feb 5, 2010 10:56:00 AM.

Ngày 04 tháng 02 năm 2009, nhóm PCNV đã trao giải cuộc thi lập trình game với ngôn ngữ Python cho bạn Hoàng Quốc Thịnh.

Cuộc thi lập trình game với ngôn ngữ Python là một trong những hoạt động của nhóm PCNV nhằm lôi cuốn sự tham gia tìm hiểu và khuyến khích sáng tạo trong việc sử dụng ngôn ngữ Python.

Ngôn ngữ Python là một ngôn ngữ mạnh, đơn giản, và tổng quát. Ngoài việc được sử dụng trong các tổ chức lớn như Google, và NASA, Python còn được dùng để viết nên những trò chơi như EVE-Online với cả triệu người chơi, hay Ruồi Yêu Cứt với giải thưởng lập trình game bằng Python đầu tiên.

Xin chúc mừng bạn Hoàng Quốc Thịnh.

Hình bên dưới là bạn Nguyễn Thành Nam đại diện nhóm PCNV đang trao giải cho bạn Hoàng Quốc Thịnh trong bữa ăn thân mật. Hình chụp bởi nhiếp ảnh gia Thành Nguyễn (Malaysia) và sửa đôi chút bởi nhiếp ảnh gia Nguyễn Duy Thọ.

/static/game_programming_contest_prize.png