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
la source
Réponses:
JavaScript (ES7),
636159 octetsEnregistré 4 octets grâce à Neil .
la source
10**-~Math.log10(c)
. (Mais +1 pour l'utilisationreduce
, bien sûr.)async
/await
et l'opérateur d'exponentiation**
**
est vraiment utile, je suis d'accord. Cela aurait dû être dans ES6.C,
7975 octetsMerci à @GB pour avoir économisé 4 octets!
Essayez-le en ligne!
la source
Bash, 66
Essayez-le en ligne .
la source
$[...]
sont sujets à l'expansion des paramètres sans explicite$
(par exemple,d
au lieu de$d
), en enregistrant deux caractères.((s=$1+$2,d=$1-$2))
pour initialiser les deux variables.EXCEL, 61 octets
Excel, 18 octets non valides
la source
Empilés , 36 octets
Essayez-le en ligne!
Précédemment:
,@A$(-+*){!A...n!}"!:inits$#'"!$summap:[email protected]\^1\,\*sum
Je vais essayer d'extraire un octet ou deux avant d'écrire une explication. (
#'
= taille de, et"
est "faire sur chacun", aucune chaîne n'est attachée ici.)À 26 octets non concurrentes:
$(*+-)#!!:{%y#'10\^x*y+}#\
.la source
TI-Basic,
3433 octetsla source
Prompt A,B
devrait aussi fonctionnerGNU dc, 36
Définit une macro
m
qui prend les deux premiers membres de la pile, applique la macro et laisse le résultat sur la pile (comme dans l'exemple de la question):Essayez-le en ligne .
la source
Perl 6 ,
81 6158 octetsEssayez-le
Essayez-le
Essayez-le
la source
x-y
s'agit d'un identifiant valide.Gelée , 27 octets
Définit un lien / fonction dyadique, appelable avec
ç
. Prend deux entiers en entrée et renvoie un entier. Il a l'avantage supplémentaire de pouvoir prendre x<
y ou x>
y en utilisant la différence absolue.Essayez-le en ligne!
Explication:
Détails:
la source
PHP,
7975 octetsdeux versions:
prend l'entrée des arguments de la ligne de commande; courir avec
-r
.Je suppose que se
strlen
qualifie de "fonction qui renvoie le nombre de chiffres",bien qu'il utilise le nombre comme une chaîne. Faites-moi savoir sinon.
la source
strlen
soit valide.C (gcc) , 70 octets
Essayez-le en ligne!
basé sur Steadybox réponse , mettant tout dans une macro pour un peu plus.
(Remarque: attribuer le résultat à
d
au lieu dea
travaux, de manière inattendue. J'ai jeté un coup d'œil au code assembleur généré et il semble être correct.)la source
Haskell, 54 octets
Le puzzle est implémenté via une fonction infixe
#
, par exemple8#2 = 16106
. L'autre fonction%
,, définit la concaténation en base 10 (en supposant que le RHS est supérieur à 0).la source
Dyalog APL, 31 octets
{a⊥⍨10*1+⌊10⍟a←(⍺×⍵)(⍺+⍵)(⍺-⍵)}
basé sur l'exemple de code APL de l'énoncé du problème
la source
PHP, 87 octets
et une solution non valide pour 37 octets
la source
Rubis, 61 octets
Ce qui ressemble étrangement à cette réponse Javascript, mais sans utiliser de logarithme.
la source
Python,
9291 caractèresMerci à la suggestion de Wizards;)
la source
)
etif
.R (3.3.1), 104 octets
renvoie une fonction anonyme.
Ceci est ma première tentative de golf, donc tout commentaire est apprécié.
la source
REXX, 70 octets
Bien sûr, le chemin natif serait beaucoup plus court:
la source
PowerShell, 88 octets
PowerShell ne possède pas d'opérateur électrique qui n'aide pas. Je ne peux pas non plus compter la longueur d'un entier sauf si vous le comptez comme une chaîne, ce que nous ne pouvons pas faire, donc je vérifie si c'est
-gt
9 pour connaître la longueur. Cela pourrait probablement être plus concis mais je dois retourner au travail.la source
Python 2.7,
10996 octetsCorrigé après avoir suivi les règles du concours. Crédits à mbomb007 pour avoir fait passer le code de 109 octets à 96 octets
la source
•You're not allowed to use strings or any kind of concatenation anywhere in your code.
a
un lambda.a=lambda n:10**int(...
. Vous pouvez également le faireb,c=input()
en donnant vos deux entrées séparées par une virgule.J , 25 octets
*;+;-
Encadrez les résultats de chaque opération.10#.inv&.>
Convertissez chaque résultat en un tableau de chiffres de base 10. (inv
est^:_1
)[:;
Déballez et rejoignez les tableaux.10#.
Convertissez un tableau de chiffres de base 10 en un entier.X=.
définissez ce qui précède comme l'opérateurX
.Résultats:
la source
X=.
Mathematica, 67 octets
Prend
x-y
, puis prend le log10 dex-y
, l'arrondit, calcule 10 à la puissance de cela, puis le multiplie parx+y
. Mais nous devons également considérer commelog10(x-y)
étant 0, donc nous remplaçons 0 par 1. Ensuite, nous prenons le log10 de2x
, arrondi, plus 1, et trouvons 10 à la puissance de cela. Multipliez cela parxy
et ajoutez-le.la source
05AB1E ,
232216 octetsEssayez-le en ligne!
Nous aurions pu économiser quelques octets si nous avions été autorisés à utiliser des chaînes dans le programme (mais pas dans les calculs) en bouclant sur une chaîne contenant les opérations
"-+*"
, car le code effectué pour chaque opération est le même.Bien sûr, si nous avions été autorisés à utiliser la concaténation, nous aurions économisé beaucoup plus.
la source
R, 64 octets
Usage:
la source