Câu đố: Code ngắn nhất?

hình như bỏ ko đâu, cần auto& vì có dòng gán s = t;

trên cái challenge nó ko báo lỗi là được rồi :joy:

e test rồi, AC mới hay ấy chứ :joy:

2 Likes

Vậy là còn 103 kí tự.

auto geneticMicroRobots(int, auto x)
{
    for (s : x)
    {
        std::string t;
        for(n : s)
            t=char(149 - n - n%4 / 3 * 11)+t;
        s=t;
    }
    return x;
}

vậy là mặc định ko viết gì nó hiểu là auto& chứ ko phải auto. C++11 cũng khôn phết :joy:

2 Likes

Không hiểu vì sao n chưa khai báo mà nó vẫn nhận nhỉ?

cái n trong for (n : s) là biến riêng. Sửa thành for (c : s) cũng được. Còn cái tham số đầu tiên truyền vô hàm geneticMicroRobots thì đơn giản là được bỏ qua thôi. Đáng lẽ geneticMicroRobots(auto x) là đủ rồi. Khi gọi hàm này trong main() thì truyền đại số nào ở tham số đầu tiên là được
auto y = geneticMicroRobots(0, x);

1 Like

for (c : s) t = (c = 149 - c%4/3*11 - c) + t;

vòng for viết lại như vậy đỡ 2 ký tự khỏi phải ép kiểu char(...) :joy: 101 chữ thế nào mà thằng kia ép xuống 96 :joy:

2 Likes

Tên hàm chắc là sửa cũng được chứ nhể? =)))

1 Like

ko được, tại trong main() thì nó gọi tên hàm này, nên bắt buộc ghi đúng tên hàm thôi.

có thể là nó gọi
std::vector<std::string> y = geneticMicroRobots(x.size(), x);

1 Like

có ai nghĩ được đệ quy không nhỉ…

1 Like

Nhà vô địch nâng mức tạ lên 91 kí tự rồi anh ơi :disappointed_relieved:

chịu thua, để coi code nó ra sao :joy:

coi profile của nó thấy nó có 100 đáp án ngắn nhất rồi, ảo lòi :joy:

2 Likes
auto geneticMicroRobots(int, auto v) {
    for (s : v)
        for (c : s = {rbegin(s), rend(s)})
            c = "                                                                 T G   C            A"[c];
    return v;
}
1 Like

Ôi mẹ ơi có cách đảo chuỗi ảo diệu vậy cơ à? :joy:
Còn cái chuỗi kia là 0->85
c ở đây là 1 ký tự. Mà c đc lưu ở dạng số -> " "[c] = lấy ký tự thứ c của chuỗi kia.

3 Likes

vãi =)))

vì ko tính dấu cách nên nó chơi theo kiểu q[‘A’] = ‘T’, q[‘T’] = ‘A’ v.v…

trong cái chuỗi trên thì nhìn vào ko cần đếm cũng biết là ‘T’ ở vị trí thứ 65 (tương ứng với mã của ‘A’), ‘G’ ở vị trí 67 của ‘C’, v.v… Vì ko tính dấu cách nên cái chuỗi kia có dài 87 ký tự nó cũng chỉ tính là 4 ký tự :joy: hack vl :joy:

còn để quay ngược chuỗi thì nó xài ctor của std::string: nhận vào iterator đầu tiên vào iterator cuối cùng tạo ra 1 chuỗi mới. Ở đây rbegin(s) là reverse begin của s, rend là reverse end của s. s = {…} là kiểu khởi tạo biến mới của C++11 theo initializer list thì phải :joy:

2 Likes

Kinh điển quá :smile:

nếu xài cái " T G C A"[c] của nó thì chắc code mình còn 92 ký tự đó. :joy: là cách của chú đứng thứ 2 :joy:

2 Likes

Đứng thứ 3 thôi, vì có người cũng 92 kí tự :wink:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?