Défi:
Il y a un puzzle stupide circulant sur les réseaux sociaux qui se lit comme suit:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Implémentez une fonction ou un opérateur qui, lorsqu'il reçoit deux nombres entiers positifs x
et y
tels que x > y > 0
, donne la bonne réponse sous forme d' entier , où les chiffres de la réponse sont les chiffres de x * y
suivi par les chiffres de x + y
suivi par les chiffres de x - y
. Très simple.
Règles:
- Les failles standard ne sont pas autorisées.
- C'est le code-golf donc le code le plus court en octets gagne.
- La validation des données d'entrée n'est pas requise. Ce programme peut se bloquer ou retourner des ordures lorsqu'il reçoit une entrée non valide.
- Vous êtes autorisé à utiliser des fonctions et des opérateurs numériques (y compris des nombres entiers et à virgule flottante, des fonctions de bibliothèque mathématique et d'autres fonctions qui acceptent et renvoient des nombres).
- Vous êtes autorisé à utiliser une fonction qui renvoie le nombre de chiffres d'un nombre, le cas échéant.
- Vous n'êtes pas autorisé à utiliser des chaînes ou tout type de concaténation n'importe où dans votre code.
- Le résultat peut être renvoyé ou poussé vers la pile, selon ce qui s'applique dans la langue. Le résultat doit être un nombre entier, pas une chaîne.
Exemple de code:
Le code suivant crée un opérateur dyadique nommé X
.
X ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
Explication:
Dans APL, vous évaluez de droite à gauche.
⍺ and ⍵
sont l'opérande gauche et droite, respectivement⌊10⍟⍺-⍵
lit comme suit:floor of log10(⍺-⍵)
. Effectue d'abord la soustraction puis le logarithme puis le sol. De droite à gauche. log10 est fait afin de compter les chiffres de⍺-⍵
(vous devez additionner 1 par la suite).⍺×⍵×10*(...)
lit:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺
Par conséquent,
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵
est le produit, décalé vers la gauche de la somme du nombre de chiffres de la somme et de la différence. La multiplication par une puissance de 10 décale un entier vers la gauche.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)
est la somme, décalée vers la gauche du nombre de chiffres de la différence.(⍺-⍵)
est la différence. Aucun décalage n'est nécessaire ici.X←{...}
est la façon dont vous définissez un opérateur dans APL.
Exemples:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
Le code suivant crée une macro nommée a
:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Explication:
sx
etsy
pop un élément de la pile et enregistrez-le sur les registresx
ety
, respectivement.lx
etly
charger un élément à partir des registresx
ety
respectivement et le pousser vers la pile.d
duplique le dernier élément de la pile.^
calcule la puissance de deux nombres.Z
saute un nombre et renvoie son nombre de chiffres. Cela se fait cardc
n'a pas de fonction logarithme.[...]sa
stocke une macro dans le registrea
.la
le charge.x
exécute la macro en haut de la pile.
Exemples:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153