Hoàn thành excel
Nếu bạn dành bất kỳ khoảng thời gian nào cho máy tính, có thể bạn đã tìm thấy cách sử dụng các phím tắt trong quy trình làm việc của mình. Thuộc tính quen thuộc nhất có thể là CMD-C và CMD-V (hoặc CTRL-C và CTRL-V) để sao chép và dán trong nhiều chương trình và hệ thống. Người sử dụng quyền lực có xu hướng đi xa hơn nữa. các biên tập viên văn bản phổ biến như Emacs, VIM và những người khác cung cấp cho người dùng một loạt các hoạt động đáng kinh ngạc thông qua các kết hợp phức tạp của các tổ hợp phím Nội dung chính Hiển thị
Shell ipython không đi xa đến thế, nhưng không cung cấp một số phím tắt để điều hướng nhanh khi nhập lệnh. Các phím tắt này trên thực tế không được cung cấp bởi Ipython chính, nhưng thông tin phụ thuộc của nó vào thư viện Readline GNU. Như vậy, một số phím tắt sau đây có thể khác nhau tùy thuộc vào cấu hình hệ thống của bạn. Ngoài ra, trong khi một số phím tắt này hoạt động trong ghi chép dựa trên trình duyệt, phần chủ yếu này là về các phím tắt trong vỏ ipython Khi bạn đã quen với những điều này, chúng có thể rất hữu ích để nhanh chóng thực hiện các lệnh nhất định mà không di chuyển tay từ vị trí bàn phím "nhà". Nếu bạn là người dùng Emacs hoặc nếu bạn có kinh nghiệm với vỏ kiểu Linux, thì sau đây sẽ rất quen thuộc. Chúng tôi sẽ nhóm các phím tắt này thành một số loại. phím tắt điều hướng, phím tắt nhập văn bản, phím tắt lịch sử lệnh và phím tắt linh tinh Điều hướng phím tắtMặc dù việc sử dụng các phím mũi tên trái và phải để di chuyển về phía sau và tiến về phía trước là khá rõ ràng, nhưng có những tùy chọn khác không yêu cầu di chuyển tay của bạn khỏi vị trí bàn phím "Nhà" Tổ hợp phímHoạt độngIn [1]: (reverse-i-search)`sqa': square??9Màn hình thiết bị đầu cuối rõ ràng In [1]: (reverse-i-search)`sqa': def square(a): """Return the square of a""" return a ** 20Ngắt lệnh Python hiện tại________số 8Thoát khỏi phiên bản IpythonCtrl-C nói riêng có thể hữu ích khi bạn vô tình bắt đầu một công việc rất dài. Mặc dù một số phím tắt được thảo luận ở đây có vẻ hơi mờ nhạt lúc đầu, nhưng chúng nhanh chóng trở thành tự động với thực tế. Khi bạn phát triển bộ nhớ cơ đó, tôi nghi ngờ bạn thậm chí sẽ thấy mình ước chúng có sẵn trong các bối cảnh khác nhau Cuối tuần này, tôi đã đi nghỉ cùng một số nhà phát triển đồng nghiệp của Devnology. Chúng tôi làm điều này hàng năm, uống bia, nói về lập trình, và cũng thường là lập trình Năm nay tôi thậm chí còn vui hơn thường lệ, vì Daan van Berkel đề xuất chúng tôi xây dựng một máy Turing trong Excel. Trong bài đăng trên blog này, tôi sẽ nói về cách chúng tôi xây dựng nó, nhưng tất nhiên bạn cũng có thể bỏ qua tất cả những điều đó và chỉ cần tải xuống và chơi với nó. Xin lưu ý rằng các tính toán tự động đã bị tắt, vì vậy nếu bạn muốn chạy máy, bạn sẽ phải thực hiện thủ công Trước hết, máy Turing là gì? Theo Wikipedia, máy Turing là một "thiết bị giả thuyết điều khiển các ký hiệu trên một dải băng" Dải băng là vô hạn và máy Turing có thể đọc và ghi nó, nhưng cũng duy trì trạng thái bên trong. Dựa vào ký hiệu hiện tại của băng, máy Turing có thể thay đổi trạng thái hiện tại. Một ví dụ về chương trình Turing rất đơn giản là đây Chương trình này, với 3 trạng thái và 4 lần chuyển đổi, thay đổi khối đầu tiên gồm 1 thành khoảng trống và dừng lại. Ví dụ, nó thay đổi băng 1 1 1 _ _ 1 _ _ 1 vào trong _ _ _ _ _ 1 _ _ 1 Mục tiêu của chúng tôi là chế tạo máy Turing chỉ sử dụng các công thức. Chúng tôi bắt đầu với việc tạo một trang tính riêng để biểu diễn bảng trạng thái, như hình bên dưới Đây chỉ đơn giản là mã hóa của máy trạng thái với trạng thái hiện tại và tiếp theo, đọc và viết gì và di chuyển đầu theo hướng nào. Cột đầu tiên là một công thức, cụ thể là nối các cột B và C, trạng thái và ký hiệu để đọc. Chẳng hạn, công thức trong A2 đọc là =B2&”-“&C2. Giá trị được dùng làm khóa để xác định nên sử dụng chuyển đổi nào, với một trạng thái và ký hiệu. Với ví dụ trên, chúng tôi tính toán số kế tiếp cho các số đơn vị, chúng tôi đọc danh sách các số 1 (có thể đứng trước các khoảng trống) và thêm một số 1 vào cuối Sau đó, chúng ta hãy nhìn vào chính máy. Vì chúng tôi chỉ sử dụng các công thức, chúng tôi không thể liên tục thay đổi băng. Do đó, chúng tôi sử dụng một hàng trong bảng tính để biểu thị một trạng thái của băng. Mỗi dòng sau biểu thị trạng thái của băng sau một lần chuyển đổi. Như Willem van de Ende đã nói một cách thơ mộng. “Không có nhà nước nào bị tổn hại trong quá trình tạo ra cỗ máy Turing này” Điều này có nghĩa là dòng trên cùng của bảng tính (hiển thị màu vàng trong ảnh chụp màn hình sau) thể hiện trạng thái ban đầu này của máy. C2 hiển thị hàng nơi chúng tôi đạt đến trạng thái tạm dừng và D2 đếm số 1 từ đó. Vì dòng đầu tiên chứa ba số 1, chiếc máy này dường như đang tính toán người kế vị Bây giờ, làm thế nào để chúng ta đi từ trạng thái này sang trạng thái khác? . Tại cột A, chúng tôi lưu vị trí cột của người đứng đầu. Trong cột B, chúng tôi lưu trạng thái hiện tại. Cùng với đó, chúng ta có thể tính giá trị của một ô vuông trên băng, bằng cách xem trạng thái và giá trị trước đó trên băng, với công thức bên dưới Một công thức khá phức tạp, vì vậy hãy định dạng nó một chút =IF(COLUMN(C5)=A4, Bắt đầu với dòng cuối cùng. Nếu cột của ô này không bằng A4, nói cách khác, nếu đầu hiện không phải là ô này, thì giá trị sẽ không thay đổi, tôi. e. chúng ta có thể sử dụng giá trị ở hàng trước Điều đó để lại cho chúng tôi những điều sau đây cho trường hợp phần đầu nằm chính xác trên cột này. Trong đối số đầu tiên của VLOOKUP, chúng ta nối trạng thái và ký hiệu ở đầu, để tìm nó trong StateTable (đối số thứ hai là phạm vi để tìm kiếm, chúng ta đã đặt tên cho bảng trạng thái là StateTable) Chúng ta lấy cột thứ 4 Nếu giá trị được tìm thấy, đây sẽ là trạng thái mới của hình vuông này trên băng. Mặt khác, một lần nữa, chúng tôi lấy giá trị trước đó. Điều này có nghĩa là khi chúng tôi đạt đến trạng thái tạm dừng, vì khi đạt đến trạng thái đó, chúng tôi sẽ không bao giờ tìm thấy chuyển đổi và chúng tôi không muốn cuộn băng chứa đầy #N/A sau trạng thái tạm dừng Trong cột B, chúng tôi cũng sử dụng VLOOKUP để xác định trạng thái mới Công thức được hiển thị bên dưới ($ đã xóa cho rõ ràng) =IFERROR Ở đây, khóa tra cứu phức tạp hơn một chút, chúng ta đang nối trạng thái trước đó trong B4, với giá trị ở đầu mà chúng ta tìm thấy bằng hàm INDEX, hàm này trả về giá trị của ô thứ A4 trong phạm vi A4. FM4. Lần này, chúng tôi muốn lấy cột thứ sáu, trạng thái mới Cột A, để tính toán đầu mới, chứa một công thức tương tự, cụ thể là dòng thứ ba của cột này, tìm kiếm hướng =IFERROR Khi chúng tôi đã tìm thấy hướng, chúng tôi tìm trong bảng thứ hai, DirectionTable, để biết đầu cần di chuyển như thế nào. L tương ứng với -1 và R tương ứng với 1. Điều này được thêm vào đầu hiện tại Vậy đó, đó là tất cả các công thức cần thiết để xây dựng Máy Turing. thậm chí không nhiều. Tôi đoán chúng tôi mất khoảng một giờ để xây dựng cái này. Điều tuyệt vời cuối cùng mà chúng tôi đã thêm vào là định dạng có điều kiện cho phần đầu. Chúng tôi đã phải loay hoay một chút, nhưng hóa ra cú pháp định dạng có điều kiện cho phép bạn đánh dấu các công thức là COLUMN(C5)=$A5. Sử dụng nó trên toàn bộ băng dẫn đến điều này Bạn thực sự thấy đầu di chuyển. Chúng tôi nhận thấy điều này rất hữu ích để gỡ lỗi các định nghĩa về máy trạng thái, vì bạn có thể dễ dàng thấy đầu mình làm những việc điên rồ ở đâu. Người đứng đầu bộ máy nhà nước đó là Sau đó, Daan và tôi đã dám thực hiện hoạt động quyền lực. Điều đó khiến chúng tôi mất thêm 4 giờ nữa, nhưng chúng tôi đã làm được (tải xuống tại đây). Đầu vào được đưa ra một lần nữa trong ký hiệu đơn nguyên, vì vậy 2 lũy thừa của 4 sẽ là 1 1 _ 1 1 1 1 (hãy gọi chúng là A và B) Tôi không đi sâu vào chi tiết của máy trạng thái, vì nó có 39 bước đã nêu và 81 lần chuyển đổi, nhưng ý tưởng cơ bản của chúng tôi là nhân A với chính B lần. Do đó, trước tiên chúng tôi đặt một số 1 ở cuối băng, sau đó đặt một bản sao của A ở cuối băng. Sau đó, chúng tôi nhân hai số ở cuối băng (ban đầu là 1 và A). Đối với điều này, chúng tôi đã tạo ra một máy trạng thái phụ. Trong Excelsheet có các trạng thái bắt đầu bằng S. Chúng tôi lặp lại điều này B lần, bằng cách gạch bỏ một số 1 trong B cho mỗi lần chúng tôi làm điều này. Dễ dàng phải không? Băng (ở mức thu phóng 10%) được hiển thị bên dưới. Điều thú vị là bạn có thể thấy hai phần khác nhau của thuật toán mà chúng tôi sử dụng, các lần quét dài là sao chép A và các bước nhỏ hơn là phép nhân Chúng tôi đã có rất nhiều niềm vui khi xây dựng nó, nhưng đó cũng là một trải nghiệm thực sự hữu ích, vì việc xây dựng cỗ máy trạng thái phức tạp đòi hỏi bạn phải rất chính xác, chỉ cần thử công cụ và nhấn 'tính toán ngay bây giờ' sẽ không thành công. Ngoài ra, như mọi khi, chia để trị là một cách tiếp cận tốt; Ảnh thưởng, đây là chúng tôi đang làm việc với nó Cập nhật. Nếu bạn thích bài đăng này, vui lòng upvote nó trên HN. https. //Tin tức. ycombinator. com/item?id=6416631 Bài đăng này đã được truy cập 71,872 lần Chia sẻ cái này
Có liên quan← Bài trước Bài tiếp theo → 25 Bình luận
|