diff --git a/DIRECTORY.md b/DIRECTORY.md index cafd1eee9e30..f4e3bf188be5 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -522,6 +522,7 @@ ## [Fractals](fractals) * [Barnsley Fern](fractals/barnsley_fern.py) + * [Hilbert Curve](fractals/hilbert_curve.py) * [Julia Sets](fractals/julia_sets.py) * [Koch Snowflake](fractals/koch_snowflake.py) * [Mandelbrot](fractals/mandelbrot.py) @@ -699,7 +700,7 @@ * [Gradient Descent](machine_learning/gradient_descent.py) * [K Means Clust](machine_learning/k_means_clust.py) * [K Medoids](machine_learning/k_medoids.py) - * [K Nearest Neighbours](machine_learning/k_nearest_neighbours.py) + * [K Nearest Neighbors](machine_learning/k_nearest_neighbors.py) * [Linear Discriminant Analysis](machine_learning/linear_discriminant_analysis.py) * [Linear Regression](machine_learning/linear_regression.py) * [Linear Regression Vectorized](machine_learning/linear_regression_vectorized.py) @@ -710,9 +711,11 @@ * Lstm * [Lstm Prediction](machine_learning/lstm/lstm_prediction.py) * [Mfcc](machine_learning/mfcc.py) + * [Mini Batch Gradient Descent](machine_learning/mini_batch_gradient_descent.py) * [Multilayer Perceptron Classifier](machine_learning/multilayer_perceptron_classifier.py) * [Polynomial Regression](machine_learning/polynomial_regression.py) * [Principle Component Analysis](machine_learning/principle_component_analysis.py) + * [Q Learning](machine_learning/q_learning.py) * [Random Forest Classifier](machine_learning/random_forest_classifier.py) * [Random Forest Regressor](machine_learning/random_forest_regressor.py) * [Scoring Functions](machine_learning/scoring_functions.py) @@ -742,6 +745,7 @@ * [Binary Multiplication](maths/binary_multiplication.py) * [Binomial Coefficient](maths/binomial_coefficient.py) * [Binomial Distribution](maths/binomial_distribution.py) + * [Binomial Expansion](maths/binomial_expansion.py) * [Ceil](maths/ceil.py) * [Chebyshev Distance](maths/chebyshev_distance.py) * [Check Polygon](maths/check_polygon.py) @@ -784,6 +788,7 @@ * [Interquartile Range](maths/interquartile_range.py) * [Is Int Palindrome](maths/is_int_palindrome.py) * [Is Ip V4 Address Valid](maths/is_ip_v4_address_valid.py) + * [Is Ipv6 Address Valid](maths/is_ipv6_address_valid.py) * [Is Square Free](maths/is_square_free.py) * [Jaccard Similarity](maths/jaccard_similarity.py) * [Joint Probability Distribution](maths/joint_probability_distribution.py) @@ -882,6 +887,7 @@ * [Bell Numbers](maths/special_numbers/bell_numbers.py) * [Carmichael Number](maths/special_numbers/carmichael_number.py) * [Catalan Number](maths/special_numbers/catalan_number.py) + * [Disarum Number](maths/special_numbers/disarum_number.py) * [Hamming Numbers](maths/special_numbers/hamming_numbers.py) * [Happy Number](maths/special_numbers/happy_number.py) * [Harshad Numbers](maths/special_numbers/harshad_numbers.py) diff --git a/maths/special_numbers/disarum_number.py b/maths/special_numbers/disarum_number.py new file mode 100644 index 000000000000..4f7389ef2274 --- /dev/null +++ b/maths/special_numbers/disarum_number.py @@ -0,0 +1,53 @@ +""" +A number n is said to be a Disarium number if the sum of its digits raised to +their respective positions equals the number itself. + +Examples of Disarium Numbers: 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, ... + +https://rosettacode.org/wiki/Disarium_numbers +""" + + +def is_disarium_number(number: int) -> bool: + """ + This function takes an integer number as input. + Returns True if the number is a Disarium number. + + >>> is_disarium_number(-1) + False + >>> is_disarium_number(0) + False + >>> is_disarium_number(1) + True + >>> is_disarium_number(89) + True + >>> is_disarium_number(135) + True + >>> is_disarium_number(175) + True + >>> is_disarium_number(518) + True + >>> is_disarium_number(598) + True + >>> is_disarium_number(123) + False + >>> is_disarium_number(89.0) + Traceback (most recent call last): + ... + TypeError: Input value of [number=89.0] must be an integer + """ + if not isinstance(number, int): + msg = f"Input value of [number={number}] must be an integer" + raise TypeError(msg) + if number < 1: + return False + + digits = str(number) + total = sum(int(digit) ** (idx + 1) for idx, digit in enumerate(digits)) + return total == number + + +if __name__ == "__main__": + import doctest + + doctest.testmod()