01/10/2018, 14:20
Bài toán đố, Mong mn góp ý hướng đi
Kiểm tra trong chuỗi có k ký tự kề nhau mà như nhau không? Thực hiện phép loại bỏ ký tự kề nhau mà như nhau chỉ giữ lại một.(Lưu ý không được sử dụng vòng lặp while, for,… và cũng không được sử dụng đệ quy).
Cảm ơn ạ!
Bài liên quan
Không dùng for thì sao duyệt được từng kí tự đây?
Bài này ko dùng for while chắc dùng goto với if hả :))
Mã giả - Scala-like style (Apache Spark) - chưa test
Bày này bạn cắt từng phần tử cho vào stack. Kiểm tra phần tử cho vào so với top có giống nhau không. Nhưng k dùng lặp thì lấy kiểu chi :))
ùm bài này mình nghĩ chi có cách nào đó mà mình phải tự lên mạng tìm hiểu thôi chứ không có trong trường
Có 3 cách để duyệt hoặc tính toán phần tử:
Cách mình viết là theo Monad
Monad cái này minh mới nghe luôn có youtuber nào dạy cái này k bạn
hôm bữa cũng có tìm hiểu, thì tìm dc regex mà k biết dùng sao
Map với reduce thực chất là loop rồi
MapReduce có thể hiện thực bằng loop hoặc recursive, cũng có thể viết cho eager collection hoặc lazy collection, có thể deal với finite collection hoặc infinte collection, có thể parallelization hoặc sequence. Tuỳ ngôn ngữ mà có hiện thực Monad khác nhau.
Monad trong Spark xử lý dữ liệu trên hệ thống phân tán, lazy cho transformation (map) và eager cho agregration (reduce). Nhưng lại cung cấp interface giống như sequential collection thông thường.
Nhưng mà bài này không được dùng loop hay recursion
Loop khi làm với sequential collection. Khi thực hiện song song thì đã không phải là loop nữa rồi.
Tương tự: Có thể Recursion hiện thực bằng Loop bằng kĩ thuật tail-recursion. Nhưng Loop cũng có thể hiện thực bằng Recursion thông qua Iteration hoặc Generation.
Nhiều ý tưởng trong này khá thú vị : https://www.quora.com/How-can-I-print-1-to-100-in-C++-without-a-loop-goto-or-recursion
Nhưng ngay cả khi logic do mình viết không có loop hoặc recursion, thì cũng chưa chắc framework không sử dụng loop hoặc recursion.
Nếu bạn dùng C++17 thì có thể thử fold expression, code nó sinh ra không hề dùng loop hay recursion gì, nhưng nguyên liệu cung cấp cho fold expression không nhập từ bên ngoài đc.
Mình không dùng loop nhưng built-in function của standard library chưa chắc không dùng loop/recursion. Việc nó thực hiện song song cũng chưa chắc là nó k dùng loop/recur vì nó lazy. Nếu muốn mọi thứ đơn giản thì chỉ cần
Cần gì monad hay stream làm chi. Để hiểu được monad là gì cũng đâu đơn giản
RE hay các Declarative Language đều có 2 bước, chuyển sang high-order function (optimize, reorder lại nếu có), từ high-order function sang code thực. Hoặc có thể gộp 2 bước làm 1.
Loop, Recursion, Generation, Monad thực chất đều dịch trực tiếp bởi Compiler. Không thằng nào implement thằng nào cả.
Bạn thì cứ cho rằng Monad phải làm bằng loop, nên mình mới đưa ví dụ loop làm bằng recursion. Có thể thiết kế Compiler bằng recursion, còn Loop, Generation, Monad đều viết trên recursion hết. Nhưng chẳng ai làm vì nó chậm tốc độ.
Mình chưa bao giờ khẳng định
github.com
Monad phải làm bằng loop
. Loop và recursion là thực chất rất tương đồng nhau rồi. Còn ý mình nói ở đây là với một bài toán với đề bài như trênkhông được dùng loop và recursion
. Thì bạn dùng những thứ nhưmap
reduceBy
(monad way?? ) làm gì? Bạn có thể khẳng định là trong source của Scala hàmmap
vàreduceBy
không perform loop hay recursion trong đó không? Mình code elixir và có đọc source của erlang. Thì những thứ nhưmap
flatMap
… đều perform đệ quy hết. Việc sử dụng recursion ở một FP như haskell, erlang, scala là hết sức bình thường chắc bạn cũng hiểu. Nên những gì bạn implement không hợp với đề bài của chủ thớt. Mà bạn hiểu monad là gì không thế.blackberry/Erlang-OTP/blob/master/lib/stdlib/src/lists.erl
This file has been truncated. show originalRất dị ứng với kiểu đề ko được sử dụng … , muốn đố bài khó thiếu gì cách
Có lẽ mình hơi quá đà, xin lỗi bạn nha.
Mình đồng ý mình sai ở chỗ MapReduce không implement trên Recursion, chính xác là tail call recursion. Viết recursion dễ đọc hơn là viết theo dạng vòng lặp.
Nếu đúng bằng Recursion thường rất dễ xảy ra tràn Stack. Cơ chế cấp phát thu hồi cho block trên stack của loop giống như cấp phát và thu hồi function của tail-recursion. Nên 2 thằng này không giống nhau.
Monad có thể mình lạm dụng quá đà, chỉ áp dụng với box là immutable collection. Còn các hàm reduceByKey() là mở rộng thêm cho các higher-order function cơ bản. Giống như Regular Expression vậy, RE nguyên thuỷ không có cú pháp
\w{m,n}
gì đâu.Về khẳng định phải làm, thì mình quote lại câu của bạn.
Dạ em mới học nên đọc mấy cmt của mấy anh không hiểu gì cả
Thấy bạn đề tag C++ mà mình thấy ngại. Regex trong C++ vẫn phải xử lí với while nên mình xài Python cho tiết kiệm calo.
Run online:
Ideone.com
Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.