Skip to content

Commit 378f30c

Browse files
ArunKishoreVoletipre-commit-ci[bot]cclauss
authored
Add Disarium number checker implementation (#13529)
* Add Disarium number checker implementation Introduces is_disarium_number function to check if a number is a Disarium number, including input validation and doctests for various cases. * updating DIRECTORY.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updating DIRECTORY.md * Clarify Disarium number definition in comments Updated the definition of a Disarium number for clarity. --------- Co-authored-by: ArunKishoreVoleti <ArunKishoreVoleti@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com> Co-authored-by: cclauss <cclauss@users.noreply.github.com>
1 parent b472cbc commit 378f30c

2 files changed

Lines changed: 56 additions & 0 deletions

File tree

DIRECTORY.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,9 +711,11 @@
711711
* Lstm
712712
* [Lstm Prediction](machine_learning/lstm/lstm_prediction.py)
713713
* [Mfcc](machine_learning/mfcc.py)
714+
* [Mini Batch Gradient Descent](machine_learning/mini_batch_gradient_descent.py)
714715
* [Multilayer Perceptron Classifier](machine_learning/multilayer_perceptron_classifier.py)
715716
* [Polynomial Regression](machine_learning/polynomial_regression.py)
716717
* [Principle Component Analysis](machine_learning/principle_component_analysis.py)
718+
* [Q Learning](machine_learning/q_learning.py)
717719
* [Random Forest Classifier](machine_learning/random_forest_classifier.py)
718720
* [Random Forest Regressor](machine_learning/random_forest_regressor.py)
719721
* [Scoring Functions](machine_learning/scoring_functions.py)
@@ -886,6 +888,7 @@
886888
* [Bell Numbers](maths/special_numbers/bell_numbers.py)
887889
* [Carmichael Number](maths/special_numbers/carmichael_number.py)
888890
* [Catalan Number](maths/special_numbers/catalan_number.py)
891+
* [Disarum Number](maths/special_numbers/disarum_number.py)
889892
* [Hamming Numbers](maths/special_numbers/hamming_numbers.py)
890893
* [Happy Number](maths/special_numbers/happy_number.py)
891894
* [Harshad Numbers](maths/special_numbers/harshad_numbers.py)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
"""
2+
A number n is said to be a Disarium number if the sum of its digits raised to
3+
their respective positions equals the number itself.
4+
5+
Examples of Disarium Numbers: 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, ...
6+
7+
https://rosettacode.org/wiki/Disarium_numbers
8+
"""
9+
10+
11+
def is_disarium_number(number: int) -> bool:
12+
"""
13+
This function takes an integer number as input.
14+
Returns True if the number is a Disarium number.
15+
16+
>>> is_disarium_number(-1)
17+
False
18+
>>> is_disarium_number(0)
19+
False
20+
>>> is_disarium_number(1)
21+
True
22+
>>> is_disarium_number(89)
23+
True
24+
>>> is_disarium_number(135)
25+
True
26+
>>> is_disarium_number(175)
27+
True
28+
>>> is_disarium_number(518)
29+
True
30+
>>> is_disarium_number(598)
31+
True
32+
>>> is_disarium_number(123)
33+
False
34+
>>> is_disarium_number(89.0)
35+
Traceback (most recent call last):
36+
...
37+
TypeError: Input value of [number=89.0] must be an integer
38+
"""
39+
if not isinstance(number, int):
40+
msg = f"Input value of [number={number}] must be an integer"
41+
raise TypeError(msg)
42+
if number < 1:
43+
return False
44+
45+
digits = str(number)
46+
total = sum(int(digit) ** (idx + 1) for idx, digit in enumerate(digits))
47+
return total == number
48+
49+
50+
if __name__ == "__main__":
51+
import doctest
52+
53+
doctest.testmod()

0 commit comments

Comments
 (0)