I need to call my friends but the buttons of my cordless phone are not working properly. The only buttons I can press are [Up], [Down] and [Call]. [Up] and [Down] can be used to navigate in my recent calls and [Call] can be used to call the selected name. My phone has a list that holds N
recent calls, and I know that all the friends I need to call are in this list.
Task:
You'll receive a number N
and a list of names L
:
N
is the number of recent calls my phone can remember;L
has the names in the order I need to call.
You must output the number of button presses I need to make in an optimal arrangement of the recent call list.
Example:
-> Input:
Calling Anna, Bob and then Anna again. With a recent calls list of size 5.
5
Anna
Bob
Anna
-> Output:
Possible optimal arrangement: Anna, Foo, Bar, Foobar, Bob
5 # Key presses: [Call] Anna, [Up] + [Call] Bob, [Down] + [Call] Anna
More test cases:
Input: 5, Anna, Bob, Carl
Output: 5
Input: 5, Anna, Bob, Carl, Anna
Output: 8
Input: 5, A, B, C, D, E, A
Output: 11
Input: 6, A, B, C, D, E, A
Output: 12
Input: 4, A, B, C, B, A
Output: 10
Rules:
- Your cursor will always start in the first position of the list;
- You can take the input
N
andL
from any source: keyboard, parameters, file, etc; - The names in the list can be in any reasonable format such as: strings, integers, chars;
- When you reach the end of the recent calls list and presses [Down] again, your cursor wraps around. The same happens when you're at the begining of the recent calls list and presses [Up];
- When you call someone, that person's name will be moved to the first position of the recent calls list and the rest will be pushed down;
- When you call someone, your cursor will be moved to the first position;
- A friend name cannot appear more than once in the recent calls list;
- You can fill your recent calls list with dummy entries (see example);
- The number of friends to call will not be greater than
N
.