Hack lấy vé miễn phí đi AngelHack Ho Chi Minh 2015
Angel Hack
1
White

Gà đi bộ viết ngày 30/06/2015

Gần đây thấy sự kiện AngelHack Việt Nam 2015 quảng cáo rầm rộ trên FB, trong đó có một đoạn nói rằng, nếu giải được bài toán do họ đặt ra thì có thể lấy vé miễn phí đến sự kiện:
http://angelhack.com/hackathon/vietnam-2015/

FB

Tóm tắt đề bài:

Đọc một xâu Braille và in ra từ tiếng Anh tương ứng. Ở đây Braille chỉ dùng với 26 ký tự tiếng Anh.

# Input
Input và một mảng chữ Braille trên cùng một dòng. Vì mỗi chữ Braille cần 3 dòng để hiển thị nên số dòng input luôn luôn là 3. Dấu ‘.’ tượng trưng cho ký tự nhấn xuống, chữ ‘O’ tượng trưng có ký tự nổi.

# Output
In ra từ tiếng Anh tương ứng

# Sample Input
O. O. O. O. O. .O O. O. O. OO 
OO .O O. O. .O OO .O OO O. .O
.. .. O. O. O. .O O. O. O. ..

# Sample Output
helloworld

# Challenge Input 
.O O. .O OO O. O. .O OO O. OO O. .O O. .O
O. .O O. .. .. OO OO .. .. .. OO OO .O OO
O. O. O. O. .. O. O. O. OO .. .. .O O. .O

Lời giải sẽ là promotion code để lấy vé miễn phí!

Phân tích

Sau khi tìm hiểu ở Wikipedia thì ta có thể hiểu cách map thông tin từ Braille sang English
Braille

Để tạo từ điển chuyển đổi thì có thể làm đơn giản bằng brute-force

braille = [
    "O.....",
    "O.O...",
    "OO....",
    "OO.O..",
    "O..O..",
    "OOO...",
    "OOOO..",
    "O.OO..",
    ".OO...",
    ".OOO..",
    "O...O.",
    "O.O.O.",
    "OO..O.",
    "OO.OO.",
    "O..OO.",
    "OOO.O.",
    "OOOOO.",
    "O.OOO.",
    ".OO.O.",
    ".OOOO.",
    "O...OO",
    "O.O.OO",
    ".OOO.O",
    "OO..OO",
    "OO.OOO",
    "O..OOO"
]
braille_dict = {k:v for k,v in zip(braille,'abcdefghijklmnopqrstuvwxyz')}

Với từ điển này thì chỉ cần gọi braille_dict(braille_char) là có thể tìm được chữ cái tương ứng. Vấn đề còn lại chỉ là xử lý đoạn input. Input của chúng ta trải trên 3 dòng, và cần đọc 2 ký tự của cả 3 dòng thẳng cột để tạo ra một chữ braille

alt text

Cho là dòng được đọc từ file braille.txt, đoạn đọc input sẽ có thể viết như là

f = open("braille.txt")
data = [l.split() for l in f.readlines()]
braille_data = ["".join(i) for i in zip(data[0],data[1],data[2])]

Vậy là cuối cùng chỉ cần

print "".join([braille_dict[x] for x in braille_data])

Đoạn mã giải tổng kết như sau

braille = [
    "O.....",
    "O.O...",
    "OO....",
    "OO.O..",
    "O..O..",
    "OOO...",
    "OOOO..",
    "O.OO..",
    ".OO...",
    ".OOO..",
    "O...O.",
    "O.O.O.",
    "OO..O.",
    "OO.OO.",
    "O..OO.",
    "OOO.O.",
    "OOOOO.",
    "O.OOO.",
    ".OO.O.",
    ".OOOO.",
    "O...OO",
    "O.O.OO",
    ".OOO.O",
    "OO..OO",
    "OO.OOO",
    "O..OOO"
]
braille_dict = {k:v for k,v in zip(braille,'abcdefghijklmnopqrstuvwxyz')}
f = open("braille.txt")
data = [l.split() for l in f.readlines()]
braille_data = ["".join(i) for i in zip(data[0],data[1],data[2])]
print "".join([braille_dict[x] for x in braille_data])

Bây giờ thay ký tự input đầu vào vào file braille.txt như thử thách ta sẽ có lời giải cho bài toán

$ python braille.py
sosmartmuchwow

Vậy còn chần chừ gì nữa, lấy vé free thôi nào ! 5$ for free !

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Gà đi bộ

3 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
16 11
Python là một ngôn ngữ rất linh hoạt trong xử lý số và xâu chuỗi, hồi mới học Python tôi hay dùng (Link) để luyện tập. Ở bài viết này tôi sẽ viết l...
Gà đi bộ viết 3 năm trước
16 11
White
3 0
Fabric Fabric là một tool chạy các tác vụ shell trên môi trường với cấu trúc và độ dễ hiểu của Python. Tôi hay dùng Fabric để thay thế cho các bas...
Gà đi bộ viết gần 3 năm trước
3 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
2 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!