Explication:
L'année dernière, en cours de mathématiques, sur les devoirs, nous obtenions parfois ces questions extrêmement simples, bien que tout aussi ennuyeuses, appelées puzzles de diamants. C'étaient essentiellement des questions où l'on nous donnerait une somme, et un produit devait ensuite trouver les deux nombres qui, multipliés, donnent le produit et, lorsqu'ils sont ajoutés, donnent la somme. Cela m'a rendu fou, car la seule façon dont je savais comment les résoudre (dans Algèbre I) était de simplement lister les facteurs du produit puis de voir ceux qui étaient ajoutés pour faire la somme. (Comme je ne savais pas comment utiliser Quadratics à l'époque) Sans parler, ils n'étaient pas vraiment un défi mathématique. Cependant, il m'est venu à l'esprit que j'aurais dû écrire un programme. Voilà donc votre défi aujourd'hui! Écrivez un programme qui peut résoudre un puzzle en diamant.
Exemples Excuses pour l'image floue, c'est la meilleure que j'ai pu trouver. En outre, ignorez les nombres dans les bulles.Le haut du diamant est le produit, le bas est la somme, la droite et la gauche sont les deux nombres. Les réponses sont les suivantes: (Ce sont aussi vos cas de test)
- 9, -7
- -2, -1
- 5, 8
- -9, -9
Règles:
- Vous ne pouvez pas utiliser de fonctions ou de classes prédéfinies qui accomplissent cela pour vous.
- Votre code doit être un programme complet ou une fonction qui retourne ou imprime les réponses une fois qu'il les trouve
- L'entrée est la somme et le produit, qui sont entrés en tant que paramètres de fonction ou entrée utilisateur
Caractéristiques:
- Supposons que les deux nombres, la somme et le produit seront toujours un entier.
- Les deux réponses seront toutes deux comprises entre -127 et 127.
- Votre entrée sera composée de deux entiers (Sum et Product).
N'oubliez pas qu'il s'agit de golf de code, donc le nombre d'octets le plus court l'emporte. Veuillez titrer votre réponse avec le ## Nom de la langue standard, Nombre d'octets
Edit: Aussi, Doorknob a souligné qu'il s'agit essentiellement de "factoriser un quadratique de forme x ^ 2 + bx + c". C'est une autre façon de penser et d'aborder ce défi. :RÉ
x^2 + bx + c
», n'est-ce pas?(x + n)(x + m)
vous donnex^2 + (n+m)x + (n*m)
, donc l'affacturage dit quadratique est fondamentalement équivalent à cette question (si je comprends bien).Réponses:
Gelée ,
151110 octetsEssayez-le en ligne!
Le code binaire suivant fonctionne avec cette version de l'interpréteur Jelly.
Idée
Ceci est basé sur le fait que
Code
la source
Licorne ,
4650298218741546Maintenant avec des chèvres, des arcs-en-ciel et des étincelles!
Si tout va bien plus court que Java.
Utilise un encodage personnalisé qui peut être appliqué avec
ApplyEncoding
Explication
Comment cela marche-t-il??? Avec la magie des licornes (et un peu de code).
La licorne est compilée en JavaScript
Chaque section est séparée par un espace et chaque section représente un caractère dans le code JavaScript.
Si la section contient des licornes, le caractère de la section est la longueur de la section, convertie en un code de caractère (par exemple, 32 licornes seraient un espace)
Si la section contient des chèvres, la longueur de la section est doublée puis convertie en code char.
Si les caractères spéciaux du programme ne s'affichent pas, voici une image:
Ce n'est pas une compétition car Unicorn a été créé après la publication de ce défi.
la source
JavaScript ES6,
453937 * octets* Merci à Dennis!
la source
TeaScript, 22 octets
30 31Pas si mal. Serait beaucoup plus court si je pouvais obtenir des fonctionnalités de golf terminées plus tôt, telles que des raccourcis Unicode de
licorneEssayez-le en ligne
la source
MATL , 33 octets
Sort les deux nombres sur deux lignes différentes. Si aucune solution n'existe, elle ne produit aucune sortie. S'il existe plusieurs solutions, il ne produit que la paire de nombres correspondant à une solution.
Exemple
Ce qui suit a été exécuté dans Octave avec la validation GitHub actuelle du compilateur.
Explication
la source
matl
et appuyez sur "Entrée"; puis collez le programme et terminez avec une ligne vierge. Que voulez-vous dire que la syntaxe est terriblement divisée? MATL utilise une notation polonaise inversée (postfixe), peut-être que cela vous prête à confusion?Julia,
464432 octetsUne fonction f qui prend la somme puis le produit.
Ma première réponse Julia. @AlexA., Vous devriez être fier de moi.
Merci @Dennis et @Alex A. pour toute l'aide. Je dois barrer le 44.: P
la source
f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
dc, 16
Lit la somme puis le produit à partir de lignes distinctes de STDIN. Les nombres -ve doivent être entrés avec un trait de soulignement au lieu d'un signe moins. par exemple
Explication:
Même solution quadratique de base pour
sum = a + b
etproduct = a * b
. Cela calcule la solutiona
comme:Et calcule la solution
b
comme:Étendu:
La division par 2 est effectuée tardivement pour éviter la perte de précision. Il est possible de diviser par 2 plus tôt, mais cela nécessite une précision fractionnaire qui nécessite plus de caractères.
la source
Pyth,
2118 octetsSauvegardé 3 octets grâce à @Dennis
Suite de tests
Mon deuxième programme Pyth jamais, donc il peut probablement être joué avec des modules intégrés. Les suggestions sont les bienvenues!
Comment ça marche
(Cette explication peut ne pas être correcte à 100%; je ne connais pas très bien Pyth.)
Notez que
/
c'est une division entière. En le remplaçant parc
, nous pourrions également faire fonctionner cela avec des entrées non entières.la source
J
est une variable à attribution automatique et est définie la première fois qu'elle est utilisée. La seule partie qui ne semble pas tout à fait correcte est La liste est actuellement [J].,
prend exactement deux arguments et les combine dans une liste.Java, 82 (69 λ) octets avec formule quadratique (127 (114 λ) octets force brute)
Brute-Force: (Vanille, Java 7)
Amélioré λ: (Java 8)
Attribuez lambda à
java.util.function.BiFunction<Integer, Integer, int[]>
et appelezapply()
.Vieille approche brute par force brute. Seule la fonction de travail est là, et comme Java ne peut pas retourner plusieurs valeurs, nous renvoyons un
int
tableau à 2 éléments avec les nombres requis.Le programme basé sur l'approche par force brute complète peut être trouvé ici sur ideone.com , avec la version λ ici.
Jouer au golf consistait à retirer toutes les bretelles inutiles.
Non golfé:
Approche quadratique: (Vanilla, Java 7)
Amélioré λ: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); retourne new int [] {x / 2, sx / 2} ;}
(Utilisation comme pour la force brute λ ci-dessus).
Les paramètres et les critères de retour sont les mêmes que la solution de force brute ci-dessus.
Utilise la bonne vieille formule quadratique utilisée par presque toutes les autres réponses ici, et ne peut pas être approfondie beaucoup moins que quelqu'un ne m'aide ici. C'est assez clair, donc je n'inclus pas de version non golfée.
Le programme basé sur l'approche quadratique complète est ici sur ideone.com , avec la version λ ici.
la source
Japt ,
28222120 octetsL'entrée se fait sous la forme de
-63 2
.Explication:
U
etV
sont les deux entrées (-63
et2
dans le premier cas)²
met le nombre au carréq
extrait la racine carréela source
[X=ºV²-4*U ¬+V)/2V-X]
Sans les raccourcis:[X=((V²-4*U q +V)/2V-X]
je devrais vraiment rendre la fin]
inutile dans la prochaine version ...APL,
2721 octetsIl s'agit d'un train de fonctions dyadiques qui accepte des entiers à droite et à gauche et renvoie un tableau. Pour l'appeler, affectez-le à une variable.
Non golfé:
Essayez-le en ligne
6 octets enregistrés grâce à Dennis!
la source
CJam, 18 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 3,
4944 octetsIl existe probablement quelques façons de jouer au golf encore plus loin, mais cela semble assez bon tel quel.
la source
s/2-d
. En outre,d=(s*s/4-p)**.5
enregistre quelques octets.MathCAD 15. 38 octets
Avec une formule mathématique, la programmation dans MathCAD est facile. Le langage est même conçu pour gérer facilement des nombres complexes. Cependant, il existe des langues plus courtes qui peuvent résoudre le problème.
la source
𝔼𝕊𝕄𝕚𝕟, 21 caractères / 30 octets
Try it here (Firefox only).
Meh. Cela devrait être assez visuel pour que vous puissiez tous avoir l'idée; cependant, si vous devez
î = input1, í = input2
,.la source
PHP, 62 octets
Cela pourrait être assez long mais être un "programme" web PHP complet. Accepte les arguments via la requête "get".
Démo .
la source
TI-BASIC, 20 octets
Prend
Q
deAns
etP
dePrompt
. Appelez commeP:prgmNAME
.la source
Prompt
déclaration soit si longue lol. Je ne connais pas TI-BASIC, mais cela pourrait être plus court si vous deviez mettre le code dans une fonction et passer P comme paramètre.Prompt
,P
,/
,2
,+
,√(
,²
,4
,-
,Ans
, et{
sont un jeton, et chacun de ces jetons est un octet. De plus, TI-BASIC n'a pas de fonctions. C'est probablement la méthode la plus courte.