Fourni une entrée sous la forme d'un entier non signé:
13457
Votre fonction / sous-routine devrait retourner:
75431
Puisque c'est un concours de popularité, soyez créatif. Les solutions créatives utilisent des techniques inhabituelles ou intelligentes pour accomplir une tâche donnée.
Contraintes:
- Vous ne pouvez pas utiliser de tableaux.
- Vous ne pouvez pas utiliser de chaînes.
- Pas de substitution RTL (
‮
)
Points Brownie pour l'utilisation de l'arithmétique créative.
Comme il s’agit d’un concours de popularité, je vous suggère de ne pas utiliser l’ %
opérateur modulo ( ) dans votre code.
À propos des zéros au début:
Si l'entrée est:
12340
Puis la sortie:
4321
serait acceptable.
popularity-contest
duci9y
la source
la source
1230
est l'entrée? Sommes-nous autorisés à sortir321
? (Sinon, les chaînes sont nécessaires).Réponses:
Mathematica, pas de modulo!
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:
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.
la source
TextRegognize
ne fonctionne pas pour les petits nombres. Et vous avez une faute de frappe dansheight = b[[3]];
. Vérifiez aussi ma réponse aussi, s'il vous plaît! :)TextRecognize
, c'est qu'il renvoie une chaîne, ce qui n'est pas autorisé et vous devez également la reconvertir en nombre.Perl / LuaTeX / Tesseract
Le script Perl suivant lit le nombre sous forme d'argument de ligne de commande, par exemple:
1234567890
Le script Perl suivant imprime le numéro via LuaTeX. Une police virtuelle est créée à la volée et reproduit les chiffres horizontalement.
Ensuite, le nombre entier est à nouveau reflété horizontalement:
La dernière image est relue via OCR (tesseract):
0987654321
la source
Brainfuck
Fondamentalement, il ne s'agit que d'un programme d'inversion des entrées.
UPD: Comme Sylwester l’a souligné dans les commentaires, dans les interpréteurs / compilateurs classiques de Brainfuck (sans possibilité de partir de zéro dans la matrice de mémoire), ce programme ne fonctionnerait pas en l'absence de '>' au début, de sorte que le plus stable la version est:
la source
>
la possibilité au début de faire une cellule zéro avant les données, cela ne fonctionnera pas dans beaucoup d'interpréteurs / compilateurs.[.<]
n'a pas de cellule zéro à arrêter à cause de cela et va échouer. Erreur debf -n rev1.bf
isError: Out of range! Youwanted to '<' below the first cell.
. Si vous compilez vous obtenezsegfault
peut - être un .,[.,]
Haskell
Pas de tableaux, de chaînes ou de modules.
De plus, je sais que nous ne sommes pas censés utiliser de listes ou de chaînes, mais j'aime la brièveté de la procédure:
la source
C ++
la source
?:
Je suppose que quelqu'un doit être le partypooper.
Frapper
Les limites de taille dépendent de votre coquille, mais tout ira bien.
la source
declare -i
. Comparerfoo=089
etdeclare -i foo=089
(nombre octal invalide).Javascript
EDIT : Puisqu'il est suggéré de ne pas utiliser
%
opérateur, j'utilise un petit truc maintenant.Je sais que ce n'est pas un code-golf, mais il n'y a aucune raison de le prolonger.
r(13457)
résultats75431
De plus, c'est beaucoup plus rapide que la méthode string (
n.toString().split('').reverse().join('')
):==> Rapport JSPerf <==
la source
~~
au lieu deMath.floor
?~~
deMath.floor
(le changement suggéré par @Victor)Python
Pas sûr que cette implémentation soit qualifiée pour les mathématiques créatives
De plus, l'opérateur% n'a pas été utilisé en soi, bien que l'on puisse affirmer que divmod fait la même chose, mais ensuite la question doit être reformulée :-)
la mise en oeuvre
démo
Comment ça marche?
Ceci est une solution divmod récursive * Cette solution détermine le chiffre le moins significatif puis le pousse à la fin du nombre. *
Encore une autre implémentation Python
Comment ça marche?
C'est une solution récursive qui permute les chiffres extrêmes du nombre
Exemple Run
la source
Juste pour être contraire, une surutilisation de l'opérateur modulo:
Notez que cela inverse toujours 5 chiffres et que les entiers 32 bits débordent pour des valeurs d'entrée supérieures à 39045.
la source
C #
Voici un moyen de le faire sans l'
%
opérateur Modulus ( ) et juste une simple arithmétique.la source
%
opérateur. :) Je vois ce que vous voulez dire cependant, mon texte était un peu trompeur.Frapper
la source
C
Pas de chaînes, tableaux, modules ou divisions. Au lieu de cela, division par soustraction répétée.
la source
Mathematica
Créer une image hors numéro, la refléter, la partitionner en chiffres. Ensuite, il y a deux alternatives:
Comparez chaque image d'un chiffre réfléchi avec les images précédentes préparées, remplacez-la par le chiffre correspondant et construisez le numéro à partir de celui-ci.
Réfléchissez chaque chiffre séparément, créez une nouvelle image et transmettez-la à la fonction de reconnaissance d'image.
J'ai fait les deux
EDIT : Ajout du remplissage de trois zéros, car ne
TextRecognise
fonctionne correctement qu'avec des entiers> 999.la source
Lua
Pas de tableaux ou de chaînes utilisés. Le numéro est divisé en chiffres et réassemblé à l'aide de la liste d'arguments.
la source
%
! : PPython2
Suppose que "entier non signé" est 32 bits
Lorsqu'elle reçoit une entrée
1230
, elle sort0321
.la source
"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
Postscript
Pas de tableaux, pas de chaînes, pas de variables.
Le même sans
mod
(qui est juste un raccourci, donc pas de grande différence):la source
C #
Ceci n'utilise pas de chaînes ni de tableaux, mais utilise le
Stack<T>
type .NET (EDIT: opérateur de module utilisé à l'origine; maintenant supprimé)la source
C
En ce sens que la solution évidente est représentée dans quelques autres langues, vous pouvez aussi l’afficher en C.
Golfé:
Ungolfed:
EDIT: Je viens de voir le module éditer.
Golfé (sans module):
Ungolfed (pas de module):
la source
Java
Voici ce que je propose, sans chaînes, ni tableaux ... pas même de variables (en Java, cela ne vous dérange pas):
EDIT Une version plus lisible
la source
PowerShell
Une solution rapide dans PowerShell. Aucun tableau ou chaîne utilisé, implicitement ou explicitement.
Essai:
la source
python (facile à assembler)
Inverse les bits d'un octet. Des points pour ne pas faire exactement la même chose que tout le monde?
Exemple
la source
C ++
SORTIE
Trois échantillons
Test avec des zéros
Cela aussi inverse les nombres flottants !!!
Si vous souhaitez exécuter ce code, exécutez-le sur votre ordinateur car il crée un fichier temporaire pendant son exécution et je ne sais pas si les compilateurs en ligne créeraient un fichier temporaire sur votre ordinateur.
la source
ECMAScript 6
Ensuite:
reverse(12345)
les sorties54321
reverse(3240)
les sorties423
reverse(6342975)
les sorties5792436
la source
Fission
Ce programme inverse l'entrée.
la source
FORTH
Je pense que c'est l'opposé du populaire ... mais utiliser Forth est toujours créatif ...Créons un nouveau mot
Ici, il utilise le mot U / qui renvoie le reste et le quotient, le reste est envoyé en sortie sous forme de nombre dans un champ de 1 caractère, jusqu'à ce que le dividende soit égal à zéro. Aucune chaîne n'est utilisée, du moins jusqu'à ce que quelque chose soit envoyé à la vidéo. Je n'utilise pas d'opérateur modulo, j'utilise plutôt une division entière avec reste et quotient. Essayons
la source
Code de la machine de Turing
En utilisant la syntaxe à partir d' ici.
Essayez-le en ligne!
la source
Python
la source
rev(1230)
donne321
. Je suppose que ça devrait vraiment donner0321
?C
la source
Lot
Vous avez manqué la partie sur le fait de ne pas utiliser de chaînes - bien.
la source
Python 2
la source