
def 						_snake_case(  SCREAMING_SNAKE_CASE__    )			->   bool:
       return credit_card_number.startswith(("""34""", """35""", """37""", """4""", """5""", """6""")    )







def 						_snake_case(  SCREAMING_SNAKE_CASE__    )			->   bool:
       lowercase							:					Optional[int]	     =				credit_card_number
       lowercase							:					Optional[Any]	     =				0
       lowercase							:					Union[str, Any]	     =				len(SCREAMING_SNAKE_CASE__    ) - 2
       for i in range(SCREAMING_SNAKE_CASE__ ,     -1 ,     -2    ):
              #  double the value of every second digit
              lowercase							:					Optional[Any]	     =				int(cc_number[i]    )
              digit *= 2
              # If doubling of a number results in a two digit number
              # i.e greater than 9(e.g., 6 × 2 = 12),
              # then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6),
              # to get a single digit number.
              if digit > 9:
                     digit %= 10
                     digit += 1
              lowercase							:					List[Any]	     =				cc_number[:i] + str(SCREAMING_SNAKE_CASE__    ) + cc_number[i + 1 :]
              total += digit

       # Sum up the remaining digits
       for i in range(len(SCREAMING_SNAKE_CASE__    ) - 1 ,     -1 ,     -2    ):
              total += int(cc_number[i]    )

       return total % 10 == 0







def 						_snake_case(  SCREAMING_SNAKE_CASE__    )			->   bool:
       lowercase							:					Dict	     =				f"{credit_card_number} is an invalid credit card number because"
       if not credit_card_number.isdigit():
              print(f"{error_message} it has nonnumerical characters."    )
              return False

       if not 13 <= len(SCREAMING_SNAKE_CASE__    ) <= 16:
              print(f"{error_message} of its length."    )
              return False

       if not validate_initial_digits(SCREAMING_SNAKE_CASE__    ):
              print(f"{error_message} of its first two digits."    )
              return False

       if not luhn_validation(SCREAMING_SNAKE_CASE__    ):
              print(f"{error_message} it fails the Luhn check."    )
              return False

       print(f"{credit_card_number} is a valid credit card number."    )
       return True


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  validate_credit_card_number("""4111111111111111""")
  validate_credit_card_number("""32323""")


from bisect import bisect
from itertools import accumulate







def 						_snake_case(  SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__    )			->   Optional[int]:
       lowercase							:					Dict	     =				sorted(zip(SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__    ) ,     key=lambda SCREAMING_SNAKE_CASE__    : x[0] / x[1] ,     reverse=SCREAMING_SNAKE_CASE__    )
       lowercase     ,      lowercase							:					Optional[Any]	     =				[i[0] for i in r], [i[1] for i in r]
       lowercase							:					Any	     =				list(accumulate(SCREAMING_SNAKE_CASE__    )    )
       lowercase							:					int	     =				bisect(SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__    )
       return (
           0
           if k == 0
           else sum(vl[:k]    ) + (w - acc[k - 1]) * (vl[k]) / (wt[k])
           if k != n
           else sum(vl[:k]    )
       )


if __name__ == "__main__":
  import doctest

  doctest.testmod()
