[Перевод] Самое широкое простое число, записанное римскими цифрами25.03.2016 21:33
Один из моих любимых развлекательных твиттеров — это @wacnt. Там появляются вопросы, на которые не может ответить математический поисковик Wolfram|Alpha. На некоторые, кстати, мне сумел дать ответ виртуальный ассистент Facebook M.
Вот штучка из недавних, которая заставила меня улыбнуться:
простое число, не большее 4000, получающееся самым широким при записи римскими цифрами шрифтом Times New Roman
widest prime less than 4000 when written as a Roman numeral in Times New Roman
— Wolfram|Alpha Can’t (@wacnt) 4 февраля 2016 г.
Facebook M просто выдал самое большое из простых чисел, близких к 4000 — это 3989. Но это не обязательно так, ведь речь идёт о римской записи.
В рамках ежедневной прокрастинации мне срочно нужно было узнать ответ именно на этот вопрос.
Для начала я составил список простых чисел, меньших 4000. Из-за лени я просто нагуглил их и вставил в скрипт.
Затем мне надо было преобразовать их в римские. NSNumberFormatter с такой задачей не справился. Пришлось искать нужную функцию и адаптировать её в качестве расширения UInt.
extension UInt {
// Adapated from https://gist.github.com/kumo/a8e1cb1f4b7cff1548c7
var romanNumeral: String {
let romanValues = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
let arabicValues: [UInt] = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
var romanValue = ""
var startingValue = self
for (index, romanChar) in romanValues.enumerate() {
let arabicValue = arabicValues[index]
let div = startingValue / arabicValue
if div > 0 {
for _ in 0..
Осталось пройтись по всем числам и найти самое широкое из них, измеряя строчки, записанные шрифтом Times New Roman.
import UIKit
var widest: UInt = 0
var width: CGFloat = 0
let attributes = [
NSFontAttributeName: UIFont(name: "Times New Roman", size: 12)!
]
for prime in primes {
let size = prime.romanNumeral.sizeWithAttributes(attributes)
if size.width >= width {
width = size.width
widest = prime
}
}
print("widest prime less than 4000 when written as a Roman numeral in Times New Roman: \(widest)")
И оказалось, что самое широкое простое число до 4000, записанное римскими цифрами шрифтом Times New Roman — это 3889, или MMMDCCCLXXXIX.