Maximum number of characters using keystrokes A, Ctrl+A, Ctrl+C and Ctrl+V

前端 未结 14 1490
忘掉有多难
忘掉有多难 2020-12-07 07:03

This is an interview question from google. I am not able to solve it by myself. Can somebody shed some light?

Write a program to print the sequence of keystrokes suc

14条回答
  •  借酒劲吻你
    2020-12-07 07:36

    Assume you have x characters in the clipboard and x characters in the text area; let's call it "state x".

    Let's press "Paste" a few times (i denote it by m-1 for convenience), then "Select-all" and "Copy"; after this sequence, we get to "state m*x". Here, we wasted a total of m+1 keystrokes. So the asymptotic growth is (at least) something like f^n, where f = m^(1/(m+1)). I believe it's the maximum possible asymptotic growth, though i cannot prove it (yet).

    Trying various values of m shows that the maximum for f is obtained for m=4.

    Let's use the following algorithm:

    Press A a few times
    Press Select-all
    Press Copy
    Repeat a few times:
        Press Paste
        Press Paste
        Press Paste
        Press Select-all
        Press Copy
    While any keystrokes left:
        Press Paste
    

    (not sure it's the optimal one).

    The number of times to press A at the beginning is 3: if you press it 4 times, you miss the opportunity to double the number of A's in 3 more keystrokes.

    The number of times to press Paste at the end is no more than 5: if you have 6 or more keystrokes left, you can use Paste, Paste, Paste, Select-all, Copy, Paste instead.

    So, we get the following algorithm:

    If (less than 6 keystrokes - special case)
        While (any keystrokes left)
            A
    Else
        First 5 keystrokes: A, A, A, Select-all, Copy
        While (more than 5 keystrokes left)
            Paste, Paste, Paste, Select-all, Copy
        While (any keystrokes left)
            Paste
    

    (not sure it's the optimal one). The number of characters after executing this is something like

    3 * pow(4, floor((n - 6) / 5)) * (2 + (n - 1) % 5).

    Sample values: 1,2,3,4,5,6,9,12,15,18,24,36,48,60,72,96,144,192,240,288,...

提交回复
热议问题