Треки
/
Julia
Julia
/
Вправи
/
Перевірка ISBN
Перевірка ISBN

Перевірка ISBN

Середня

Вказівки

Процес перевірки ISBN-10 допомагає підтвердити, що ідентифікаційний номер книжки правильний. Зазвичай такі номери містять дефіси та мають такий вигляд: 3-598-21508-8

ISBN

Формат ISBN-10 - це 9 цифр (від 0 до 9) плюс один контрольний символ (або цифра, або тільки X). Якщо контрольний символ - це X, він позначає значення «10». Такі номери записують як із дефісами, так і без них, а їхню правильність можна перевірити за такою формулою:

(d₁ * 10 + d₂ * 9 + d₃ * 8 + d₄ * 7 + d₅ * 6 + d₆ * 5 + d₇ * 4 + d₈ * 3 + d₉ * 2 + d₁₀ * 1) mod 11 == 0

Якщо результат дорівнює 0, тоді ISBN-10 правильний, інакше він неправильний.

Приклад

Візьмімо ISBN-10 3-598-21508-8. Підставмо його у формулу й отримаємо:

(3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 == 0

Оскільки результат дорівнює 0, це доводить, що наш ISBN правильний.

Завдання

Маючи рядок тексту (англ. string), програма має перевірити, чи є наданий рядок тексту правильним ISBN-10. Щоб це зробити, потрібно подумати про попередню обробку та розбір рядка тексту перед обчисленням контрольної цифри ISBN.

Програма має вміти перевіряти ISBN-10 як із розділовими дефісами, так і без них.

Застереження

Перетворення рядків тексту на числа буває непростим у деяких мовах. Тепер це ще складніше, бо контрольна цифра ISBN-10 може бути X (що позначає «10»). Наприклад, 3-598-21507-X - це правильний ISBN-10.

Додаткові завдання

Якщо братися за ці завдання, то спершу напишіть, будь ласка, для них власні тести у файлі свого рішення!

  • Визначте макрос рядка тексту (англ. string), щоб isbn"3-598-21507-X" == ISBN("3-598-21507-X").

  • Нехай конструктор також приймає ISBN-13. Один і той самий ISBN має вважатися рівним незалежно від формату: ISBN("1-234-56789-X") == ISBN("978-1-234-56789-7").

  • Визначте функцію або ітератор, що генерує дійсний ISBN, можливо, навіть від заданого початкового ISBN.

Чи можемо ми зберегти ISBN як ціле число, а не як рядок тексту, і чи була б це взагалі хороша ідея? Якби ми це зробили, чи змогли б ми, як і раніше, вивести ISBN (разом із контрольною цифрою) як рядок тексту?

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Julia Exercism

Час розпочати Перевірка ISBN?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Julia, а також 35 концепцій128 вправ та справжнє наставництво від людей, і все це безкоштовно.