| Task: | Kertoma | 
| Sender: | Sup | 
| Submission time: | 2023-09-03 19:34:51 +0300 | 
| Language: | Python3 (PyPy3) | 
| Status: | READY | 
| Result: | 100 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 22 | 
| #2 | ACCEPTED | 24 | 
| #3 | ACCEPTED | 54 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | 1, 2, 3 | details | 
| #2 | ACCEPTED | 0.04 s | 1, 2, 3 | details | 
| #3 | ACCEPTED | 0.04 s | 1, 2, 3 | details | 
| #4 | ACCEPTED | 0.04 s | 1, 2, 3 | details | 
| #5 | ACCEPTED | 0.04 s | 1, 2, 3 | details | 
| #6 | ACCEPTED | 0.04 s | 1, 2, 3 | details | 
| #7 | ACCEPTED | 0.04 s | 2, 3 | details | 
| #8 | ACCEPTED | 0.04 s | 2, 3 | details | 
| #9 | ACCEPTED | 0.04 s | 2, 3 | details | 
| #10 | ACCEPTED | 0.04 s | 2, 3 | details | 
| #11 | ACCEPTED | 0.05 s | 3 | details | 
| #12 | ACCEPTED | 0.05 s | 3 | details | 
| #13 | ACCEPTED | 0.05 s | 3 | details | 
| #14 | ACCEPTED | 0.05 s | 3 | details | 
| #15 | ACCEPTED | 0.05 s | 3 | details | 
| #16 | ACCEPTED | 0.05 s | 3 | details | 
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 = 10
            #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: ACCEPTED
| input | 
|---|
| 20097 12282 12229 12214 12406 ... | 
| correct output | 
|---|
| 32001 | 
| user output | 
|---|
| 32001 | 
Test 14
Group: 3
Verdict: ACCEPTED
| input | 
|---|
| 47934 29918 29878 29713 29984 ... | 
| correct output | 
|---|
| 71718 | 
| user output | 
|---|
| 71718 | 
Test 15
Group: 3
Verdict: ACCEPTED
| input | 
|---|
| 84691 54156 54277 54533 54296 ... | 
| correct output | 
|---|
| 123123 | 
| user output | 
|---|
| 123123 | 
Test 16
Group: 3
Verdict: ACCEPTED
| input | 
|---|
| 99098 63339 63878 64182 63904 ... | 
| correct output | 
|---|
| 142663 | 
| user output | 
|---|
| 142663 | 
