Mathematica, pas de modulo!
n = 14627;
length = Ceiling[Log[10, n]];
img = Rasterize[n, RasterSize -> 400, ImageSize -> 400];
box = Rasterize[n, "BoundingBox", RasterSize -> 400, ImageSize -> 400];
width = box[[1]]; height = box[[3]];
ToExpression[
TextRecognize[
ImageAssemble[
ImageTake[img, {1, height}, #] & /@
NestList[# - width/length &, {width - width/length, width},
length - 1]]]]
Faisons le décomposer.
Nous utilisons d’abord des "arithmétiques créatives" pour savoir combien de chiffres sont dans le nombre: length = Ceiling[Log[10, n]];
Ensuite, nous rastérisons le nombre en une grande image:
Maintenant, nous interrogeons le cadre de sélection de cette image et remplissons la largeur et la hauteur (en utilisant le décalage de la ligne de base au lieu de la hauteur de l'image, car MM ajoute des espaces au-dessous de la ligne de base de l'image).
Ensuite, NestList soustrait récursivement la largeur de l'image, divisée par la longueur de la chaîne, pour permettre à ImageTake de cueillir des caractères à la fin de l'image, l'un après l'autre, et ceux-ci sont réassemblés par cette image:
Ensuite, nous transmettons cela à la fonction TextRecognize pour la reconnaissance optique de caractères qui, à cette taille d'image et à cette qualité de rastérisation, est capable de reconnaître de manière impeccable la sortie finale et de nous donner l'entier:
72641
Logarithmes et OCR - C'est comme le chocolat et le beurre de cacahuète!
Nouveau et amélioré
Cette version compile le numéro pour traiter le comportement obstiné de TextRecognize avec de petits nombres, puis soustrait le pavé à la fin. Cela fonctionne même pour les nombres à un chiffre!
Cependant, pourquoi exécuter une procédure inverse sur un seul numéro est un mystère pour moi. Mais, par souci d’exhaustivité, j’ai même fait en sorte que cela fonctionne pour des entrées de zéro et un, ce qui normalement casserait du fait que le journal au sol ne renverrait pas 1 pour eux.
n = 1;
pad = 94949;
length = If[n == 1 || n == 0, 1, Ceiling[Log[10, n]]];
img = Rasterize[n + (pad*10^length), RasterSize -> 400,
ImageSize -> 400];
padlength = length + 5;
box = ImageDimensions[img];
width = box[[1]]; height = box[[2]];
reversed =
ImageResize[
ImageAssemble[
ImageTake[img, {1, height}, #] & /@
NestList[# - width/padlength &, {width + 1 - width/padlength,
width}, padlength - 1]], 200];
recognized = ToExpression[TextRecognize[reversed]];
(recognized - pad)/10^5