Я собираюсь быть противоположным здесь и сказать, что нет необходимости в auto const &
в диапазоне, основанном на цикле. Скажите мне, считаете ли вы, что следующая функция глупа (не в своей цели, а в том, как она написана):
long long SafePop(std::vector<uint32_t>& v)
{
auto const& cv = v;
long long n = -1;
if (!cv.empty())
{
n = cv.back();
v.pop_back();
}
return n;
}
Здесь автор создал ссылку на константу v
для использования для всех операций, которые не изменяют v. Это, на мой взгляд, глупо, и тот же аргумент может быть сделан для использования auto const &
в качестве переменной в диапазоне, основанном на цикле, а не только на auto &
.
Я бы использовал unicodedata
import unicodedata
print(unicodedata.normalize("NFKC","③① 年 ⑫ 月 ①③ 日"))
В результате получилось:
31 年 12 月 13 日
Это также преобразует другие варианты японских цифр, цифры полной ширины.
import unicodedata
print(unicodedata.normalize("NFKC","123①②③123"))
-
123123123
Предполагая, что у вас уже есть текст OCR'd для обведенных цифрами в вашем вопросе, будет достаточно простой замены текста. Вот как это делается в Python:
def uncircle(s):
for i in range(1, 21):
s = s.replace(chr(0x245f + i), str(i))
return s.replace('\u24ea', '0')
Обведенные числа от 1 до 20 - это кодовые точки Unicode от 0x2460 до 0x2473, а обведенное число 0 - это кодовая точка Unicode 0x24ea.