switching to high quality piper tts and added label translations
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
from collections import defaultdict
|
||||
|
||||
from sympy.utilities.iterables import multiset, is_palindromic as _palindromic
|
||||
from sympy.utilities.misc import as_int
|
||||
|
||||
|
||||
def digits(n, b=10, digits=None):
|
||||
"""
|
||||
Return a list of the digits of ``n`` in base ``b``. The first
|
||||
element in the list is ``b`` (or ``-b`` if ``n`` is negative).
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
>>> from sympy.ntheory.digits import digits
|
||||
>>> digits(35)
|
||||
[10, 3, 5]
|
||||
|
||||
If the number is negative, the negative sign will be placed on the
|
||||
base (which is the first element in the returned list):
|
||||
|
||||
>>> digits(-35)
|
||||
[-10, 3, 5]
|
||||
|
||||
Bases other than 10 (and greater than 1) can be selected with ``b``:
|
||||
|
||||
>>> digits(27, b=2)
|
||||
[2, 1, 1, 0, 1, 1]
|
||||
|
||||
Use the ``digits`` keyword if a certain number of digits is desired:
|
||||
|
||||
>>> digits(35, digits=4)
|
||||
[10, 0, 0, 3, 5]
|
||||
|
||||
Parameters
|
||||
==========
|
||||
|
||||
n: integer
|
||||
The number whose digits are returned.
|
||||
|
||||
b: integer
|
||||
The base in which digits are computed.
|
||||
|
||||
digits: integer (or None for all digits)
|
||||
The number of digits to be returned (padded with zeros, if
|
||||
necessary).
|
||||
|
||||
See Also
|
||||
========
|
||||
sympy.core.intfunc.num_digits, count_digits
|
||||
"""
|
||||
|
||||
b = as_int(b)
|
||||
n = as_int(n)
|
||||
if b < 2:
|
||||
raise ValueError("b must be greater than 1")
|
||||
else:
|
||||
x, y = abs(n), []
|
||||
while x >= b:
|
||||
x, r = divmod(x, b)
|
||||
y.append(r)
|
||||
y.append(x)
|
||||
y.append(-b if n < 0 else b)
|
||||
y.reverse()
|
||||
ndig = len(y) - 1
|
||||
if digits is not None:
|
||||
if ndig > digits:
|
||||
raise ValueError(
|
||||
"For %s, at least %s digits are needed." % (n, ndig))
|
||||
elif ndig < digits:
|
||||
y[1:1] = [0]*(digits - ndig)
|
||||
return y
|
||||
|
||||
|
||||
def count_digits(n, b=10):
|
||||
"""
|
||||
Return a dictionary whose keys are the digits of ``n`` in the
|
||||
given base, ``b``, with keys indicating the digits appearing in the
|
||||
number and values indicating how many times that digit appeared.
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
>>> from sympy.ntheory import count_digits
|
||||
|
||||
>>> count_digits(1111339)
|
||||
{1: 4, 3: 2, 9: 1}
|
||||
|
||||
The digits returned are always represented in base-10
|
||||
but the number itself can be entered in any format that is
|
||||
understood by Python; the base of the number can also be
|
||||
given if it is different than 10:
|
||||
|
||||
>>> n = 0xFA; n
|
||||
250
|
||||
>>> count_digits(_)
|
||||
{0: 1, 2: 1, 5: 1}
|
||||
>>> count_digits(n, 16)
|
||||
{10: 1, 15: 1}
|
||||
|
||||
The default dictionary will return a 0 for any digit that did
|
||||
not appear in the number. For example, which digits appear 7
|
||||
times in ``77!``:
|
||||
|
||||
>>> from sympy import factorial
|
||||
>>> c77 = count_digits(factorial(77))
|
||||
>>> [i for i in range(10) if c77[i] == 7]
|
||||
[1, 3, 7, 9]
|
||||
|
||||
See Also
|
||||
========
|
||||
sympy.core.intfunc.num_digits, digits
|
||||
"""
|
||||
rv = defaultdict(int, multiset(digits(n, b)).items())
|
||||
rv.pop(b) if b in rv else rv.pop(-b) # b or -b is there
|
||||
return rv
|
||||
|
||||
|
||||
def is_palindromic(n, b=10):
|
||||
"""return True if ``n`` is the same when read from left to right
|
||||
or right to left in the given base, ``b``.
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
>>> from sympy.ntheory import is_palindromic
|
||||
|
||||
>>> all(is_palindromic(i) for i in (-11, 1, 22, 121))
|
||||
True
|
||||
|
||||
The second argument allows you to test numbers in other
|
||||
bases. For example, 88 is palindromic in base-10 but not
|
||||
in base-8:
|
||||
|
||||
>>> is_palindromic(88, 8)
|
||||
False
|
||||
|
||||
On the other hand, a number can be palindromic in base-8 but
|
||||
not in base-10:
|
||||
|
||||
>>> 0o121, is_palindromic(0o121)
|
||||
(81, False)
|
||||
|
||||
Or it might be palindromic in both bases:
|
||||
|
||||
>>> oct(121), is_palindromic(121, 8) and is_palindromic(121)
|
||||
('0o171', True)
|
||||
|
||||
"""
|
||||
return _palindromic(digits(n, b), 1)
|
||||
Reference in New Issue
Block a user