4 kyu
Smallest possible sum
1,393 of 8,042dkhaburdzania
Description:
Description
Given an array X of positive integers, its elements are to be transformed by running the following operation on them as many times as required:
if X[i] > X[j] then X[i] = X[i] - X[j]
When no more transformations are possible, return its sum ("smallest possible sum").
For instance, the successive transformation of the elements of input X = [6, 9, 21] is detailed below:
X_1 = [6, 9, 12] # -> X_1[2] = X[2] - X[1] = 21 - 9
X_2 = [6, 9, 6] # -> X_2[2] = X_1[2] - X_1[0] = 12 - 6
X_3 = [6, 3, 6] # -> X_3[1] = X_2[1] - X_2[0] = 9 - 6
X_4 = [6, 3, 3] # -> X_4[2] = X_3[2] - X_3[1] = 6 - 3
X_5 = [3, 3, 3] # -> X_5[1] = X_4[0] - X_4[1] = 6 - 3
The returning output is the sum of the final transformation (here 9).
Example
solution([6, 9, 21]) #-> 9
Solution steps:
[6, 9, 12] #-> X[2] = 21 - 9
[6, 9, 6] #-> X[2] = 12 - 6
[6, 3, 6] #-> X[1] = 9 - 6
[6, 3, 3] #-> X[2] = 6 - 3
[3, 3, 3] #-> X[1] = 6 - 3
Additional notes:
There are performance tests consisted of very big numbers and arrays of size at least 30000. Please write an efficient algorithm to prevent timeout.
Algorithms
Mathematics
Arrays
Similar Kata:
Stats:
Created | Feb 8, 2014 |
Published | Feb 8, 2014 |
Warriors Trained | 32732 |
Total Skips | 8507 |
Total Code Submissions | 62496 |
Total Times Completed | 8042 |
Ruby Completions | 294 |
JavaScript Completions | 1393 |
Python Completions | 3489 |
PHP Completions | 255 |
Crystal Completions | 22 |
C++ Completions | 1175 |
Kotlin Completions | 250 |
Haskell Completions | 243 |
Clojure Completions | 82 |
Racket Completions | 29 |
Go Completions | 378 |
C Completions | 518 |
COBOL Completions | 8 |
Rust Completions | 216 |
D Completions | 10 |
TypeScript Completions | 163 |
Scala Completions | 25 |
CoffeeScript Completions | 10 |
Total Stars | 826 |
% of votes with a positive feedback rating | 84% of 942 |
Total "Very Satisfied" Votes | 707 |
Total "Somewhat Satisfied" Votes | 177 |
Total "Not Satisfied" Votes | 58 |
Total Rank Assessments | 10 |
Average Assessed Rank | 4 kyu |
Highest Assessed Rank | 3 kyu |
Lowest Assessed Rank | 7 kyu |