Submission details
Task:Rotations
Sender:suchoale
Submission time:2020-09-26 15:57:26 +0300
Language:Python3 (PyPy3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.93 sdetails
#2ACCEPTED0.90 sdetails
#3ACCEPTED0.30 sdetails
#4ACCEPTED0.30 sdetails
#5--details
#6--details
#7--details
#8ACCEPTED0.05 sdetails
#9ACCEPTED0.05 sdetails
#10ACCEPTED0.05 sdetails
#11ACCEPTED0.05 sdetails
#12--details

Code

import sys

def get_next_index(move, i, n):
    if i + move < n:
        return i + move
    else:
        return move + i - n


if __name__ == '__main__':
    word = sys.stdin.readline().strip()
    N = len(word)
    index = list(range(N))

    sorted_letters, index = zip(*sorted(zip(word, index)))

    pos_count = 0
    for i in range(N):
        if sorted_letters[0] == sorted_letters[i]:
            pos_count += 1
        else:
            break

    possibilities = index[:pos_count]

    if len(possibilities) == N:
        print(word)
    else:
        move = 1
        while(len(possibilities)) > 1 and move < N:
            letters = len(possibilities) * [0]
            i = 0
            for start_index in possibilities:
                letters[i] = word[get_next_index(move, start_index, N)]
                i+=1

            sorted_next_letters, new_possibilities = zip(*sorted(zip(letters, possibilities)))

            pos_count = 0
            for i in range(len(sorted_next_letters)):
                if sorted_next_letters[0] == sorted_next_letters[i]:
                    pos_count += 1
                else:
                    break
            possibilities = new_possibilities[:pos_count]

            move += 1

        if possibilities[0] is 0:
            print(word)
        else:
            print(word[possibilities[0]:] + word[:possibilities[0]])

Test details

Test 1

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
Truncated

Test 2

Verdict: ACCEPTED

input
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
abbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

user output
abbbbbbbbbbbbbbbbbbbbbbbbbbbbb...
Truncated

Test 3

Verdict: ACCEPTED

input
jibanqfglkmsywdlqjquxxnqeyhbyu...

correct output
aaadptqmkuqxnvmojzhghqtfztbwsj...

user output
aaadptqmkuqxnvmojzhghqtfztbwsj...
Truncated

Test 4

Verdict: ACCEPTED

input
muykjgvsstkgydmumitbgvsbtgyvmv...

correct output
aaaeaeipiqglrtbzelgrqmrxqbnjke...

user output
aaaeaeipiqglrtbzelgrqmrxqbnjke...
Truncated

Test 5

Verdict:

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
(empty)

Test 6

Verdict:

input
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

correct output
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

user output
(empty)

Test 7

Verdict:

input
jtcbpjizbiauauipwsdteaisynwesj...

correct output
aisynwesjvtvgghnbqyqprwpfqayzl...

user output
(empty)

Test 8

Verdict: ACCEPTED

input
a

correct output
a

user output
a

Test 9

Verdict: ACCEPTED

input
ab

correct output
ab

user output
ab

Test 10

Verdict: ACCEPTED

input
ba

correct output
ab

user output
ab

Test 11

Verdict: ACCEPTED

input
home

correct output
ehom

user output
ehom

Test 12

Verdict:

input
baaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
(empty)