CSES - Datatähti 2023 alku - Results
Submission details
Task:Kertoma
Sender:Sup
Submission time:2022-11-03 18:02:03 +0200
Language:Python3 (CPython3)
Status:READY
Result:46
Feedback
groupverdictscore
#1ACCEPTED22
#2ACCEPTED24
#30
Test results
testverdicttimegroup
#1ACCEPTED0.02 s1, 2, 3details
#2ACCEPTED0.02 s1, 2, 3details
#3ACCEPTED0.02 s1, 2, 3details
#4ACCEPTED0.02 s1, 2, 3details
#5ACCEPTED0.02 s1, 2, 3details
#6ACCEPTED0.02 s1, 2, 3details
#7ACCEPTED0.02 s2, 3details
#8ACCEPTED0.02 s2, 3details
#9ACCEPTED0.02 s2, 3details
#10ACCEPTED0.02 s2, 3details
#11ACCEPTED0.10 s3details
#12ACCEPTED0.18 s3details
#13--3details
#14--3details
#15--3details
#16--3details

Code

import math
import time

"""
The code uses an input() variable from at the beginning to get the input of the digits.
If you want to use the codde without the input, then please use: logarithm_sums(the input here as a string) in the python terminal

the code takes the input line the same way as it was shown in the example input on the Datatähti webpage.
"""

num_of_digits = input("")

time_cost = time.time()

def logarithm_sums(y):
    n = 1

    x = str(y).split(" ")

    the_num_from_before_digits = 1
    
    done = True

    input_amount_of_digits = 0

    for a_digit in x:
        input_amount_of_digits += int(a_digit)


    calculated_logarithm = math.log(n, 10)
    num_of_digits = math.floor(calculated_logarithm) +1 



    while done:  # this loop runs until we find the number that is factorialised, or until it finds that the input does not correspond a factorial

        if num_of_digits >= input_amount_of_digits+1:
            print("the number does not correspond to a factorial")
            print("the n: ", n)
            done = False


            
        if num_of_digits == the_num_from_before_digits and num_of_digits == input_amount_of_digits:
            the_factorial = math.factorial(n)

            amount_of_numbers_correct = 0

            #print("THE NUMBER FACTORIALISED IS: ", the_factorial)

            for i in range(10):   # we make a loop to check every digit from 0 to 9 if the number (variable n) has the same amount opf them as the input
                if str(the_factorial).count(str(i)) == int(x[i]):
                    amount_of_numbers_correct += 1


            
            if amount_of_numbers_correct == 10:  #this is finally the output code, that will show the number that is factorialised if the input is correct
                print(n)
                #print("the number that is factorialised is: ", n)
                #time_cost2 = time.time()
                #print("the duration of the code : ", time_cost2-time_cost)
                done = False

            else:
                n += 1
                calculated_logarithm += math.log(n, 10)
                num_of_digits = math.floor(calculated_logarithm) +1 
            #print(num_of_digits)


        elif num_of_digits == input_amount_of_digits:   # if our digits has finally got the same amount of digits as the input, this code will trigger, that checks the digits 
            the_factorial = math.factorial(n) 
            amount_of_numbers_correct0 = 0
            for i in range(10):   # we make a loop to check every digit from 0 to 9 if the number (variable n) has the same amount opf them as the input
                if str(the_factorial).count(str(i)) == int(x[i]):
                    amount_of_numbers_correct0 += 1
                    
            if amount_of_numbers_correct0 == 10: #this is finally the output code, that will show the number that is factorialised if the input is correct
                print(n)

                #print("the number that is factorialised is: ", n)
                #time_cost2 = time.time()
                #print("the duration of the code : ", time_cost2-time_cost)
                done = False

            else:
                n += 1
                calculated_logarithm += math.log(n, 10)
                num_of_digits = math.floor(calculated_logarithm) +1

        
        else:  #if the factorial of n (which at the end wil be the number that is factorialised) does not have as many digits as the input, this line else: statement will trigger
            the_num_from_before = n
            the_num_from_before_logarithm =math.log(the_num_from_before, 10)
            the_num_from_before_digits = math.floor(the_num_from_before_logarithm) +1 
            n += 1

            calculated_logarithm += math.log(n, 10)
            num_of_digits = math.floor(calculated_logarithm) +1 


logarithm_sums(num_of_digits)

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
0 0 1 0 0 0 0 0 0 0

correct output
2

user output
2

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
0 0 0 0 0 0 1 0 0 0

correct output
3

user output
3

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
0 0 1 0 1 0 0 0 0 0

correct output
4

user output
4

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
2 0 1 1 0 0 1 0 2 0

correct output
10

user output
10

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
9 3 1 1 2 2 3 1 6 1

correct output
27

user output
27

Test 6

Group: 1, 2, 3

Verdict: ACCEPTED

input
10 4 3 4 3 2 2 4 3 7

correct output
36

user output
36

Test 7

Group: 2, 3

Verdict: ACCEPTED

input
71 53 36 30 25 29 42 24 34 29

correct output
199

user output
199

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
71 33 46 38 27 45 36 21 35 35

correct output
205

user output
205

Test 9

Group: 2, 3

Verdict: ACCEPTED

input
93 38 35 26 43 54 38 25 41 34

correct output
222

user output
222

Test 10

Group: 2, 3

Verdict: ACCEPTED

input
100 33 33 45 36 43 38 54 56 36

correct output
242

user output
242

Test 11

Group: 3

Verdict: ACCEPTED

input
3419 1797 1845 1849 1879 1791 ...

correct output
5959

user output
5959

Test 12

Group: 3

Verdict: ACCEPTED

input
4776 2695 2709 2781 2616 2753 ...

correct output
8391

user output
8391

Test 13

Group: 3

Verdict:

input
20097 12282 12229 12214 12406 ...

correct output
32001

user output
(empty)

Test 14

Group: 3

Verdict:

input
47934 29918 29878 29713 29984 ...

correct output
71718

user output
(empty)

Test 15

Group: 3

Verdict:

input
84691 54156 54277 54533 54296 ...

correct output
123123

user output
(empty)

Test 16

Group: 3

Verdict:

input
99098 63339 63878 64182 63904 ...

correct output
142663

user output
(empty)