Probablement un simple défi de golf de code. Étant donné 2 entiers positifs m
et n
, faites une liste de n
valeurs qui sont des entiers positifs dont la somme est égale au nombre m
. Soit toutes les valeurs dans la sortie sont la même valeur ou la différence est exactement 1.
Exemples
Par exemple
m=6
etn=3
deviendrait2, 2, 2
m=7
etn=3
deviendrait2, 2, 3
ou2, 3, 2
ou3, 2, 2
m=7
etn=2
deviendrait3, 4
ou4, 3
m=7
etn=1
deviendrait7
m=7
etn=8
générerait une erreur car la somme de 8 entiers positifs ne peut pas être 7.m=10
etn=4
deviendrait3, 3, 2, 2
ou toute autre permutation
Règles
- L'entrée et la sortie concernent uniquement des entiers positifs.
- Soit toutes les valeurs dans la sortie sont la même valeur ou la différence est exactement 1.
- L'ordre des valeurs dans la liste n'est pas important.
- La somme des valeurs de la liste est égale à
m
. - Lorsqu'il n'est pas résoluble, générer une erreur ou une fausse valeur (dans le cas de m = 7 et n = 8 par exemple).
- En raison des autres règles
m=8
etn=3
générerait l'une des permutations de3, 3, 2
(non2, 2, 4
)
Le gagnant
Il s'agit de code-golf, donc la réponse valide la plus courte - mesurée en octets - l'emporte.
float a = -0f, b = 0f; System.out.println(a == b); System.out.println(a + "," + b);
... produittrue
et-0.0,0.0
. Vous voyez, 0 positif et 0 négatif sont clairement deux nombres distincts ... la mise en œuvre le dit!Réponses:
Gaia , 4 octets
Il y a presque juste une fonction intégrée pour cela ...
Explication
la source
Python 2 ,
4843 octetsRetourne
0
sur erreur.Essayez-le en ligne!
41 octets (avec astuce @ xnor)
Lance une
NameError
erreur.Essayez-le en ligne!
la source
Mathematica, 33 octets
contribution
production
renvoie Faux lorsqu'il n'est pas résoluble
la source
MATL , 7 octets
Lorsqu'il n'y a pas de solution, la sortie est un tableau contenant au moins un zéro, ce qui est faux dans MATL.
Essayez-le en ligne!
Explication
Considérez les entrées
m = 10
etn = 4
.la source
Haskell , 30 octets
Essayez-le en ligne!
la source
Fusain , 15 octets après application de NDD 1
Essayez-le en ligne!
N'affiche rien s'il n'y a pas de solution. Lien vers la version détaillée .
1 NDD = Neil-Driven Development.
Ma réponse précédente:
Charbon de bois ,
32 27 2420 octetsEssayez-le en ligne!
N'affiche rien s'il n'y a pas de solution. Lien vers la version détaillée .
Bien sûr, je n'aurais pas pu jouer au golf sans l'aide de Neil.
la source
Cast
opérateur fonctionne pour une raison quelconque, mais ce n'est pas un algorithme idéal ... J'ai une solution à 16 octets.Cast
fonctionne sur les listes, je suis à 11 octets ...Map
, comment ça marche?Map
est comme la version d'expression defor
, jusqu'à l'utilisation de la même variable de boucle. Ainsi, dans votre exemple, plutôt que de pousser une expression dans une liste à chaque fois,Map
les recueille automatiquement et les évalue dans la liste des résultats.R , 33 octets
Un port de la réponse Octave de Luis Mendo . Assez triste que ce soit presque 50% plus court que ma réponse précédente.
Essayez-le en ligne!
réponse précédente, 63 octets:
Une fonction anonyme qui prend deux arguments (obligatoires)
m
etn
, et deux optionnels qui sont à des fins de golf. Renvoie un vecteur dans l'ordre croissant. En cas d'échec, la première valeur sera0
, qui est falsey dans R, carif
n'utilise que la première valeur du vecteur (avec un avertissement).Il est essentiellement équivalent à la fonction suivante:
Essayez-le en ligne!
la source
pryr::f(diff(trunc(0:n*m/n)))
fonctionne et est plus court!Gelée ,
76 octetsEssayez-le en ligne! Ne produit rien pour la falsification.
Comment ça fonctionne
la source
TI-Basic, 23 octets
Renvoie ERR: DIVIDE BY 0 en cas d'erreur
la source
Octave , 24 octets
Le code définit une fonction anonyme. La sortie est un tableau numérique (vecteur ligne). Lorsqu'il n'y a pas, ce tableau contient au moins un zéro, ce qui est faux dans Octave.
Essayez-le en ligne!
Explication
0:m/n:m
produit un tableau den+1
valeurs de0
àm
avec stepm/n
.fix
arrondit chaque entrée vers0
etdiff
calcule les différences consécutives.À titre d'exemple, voici tous les résultats intermédiaires pour
m = 7
,n = 3
:la source
Haskell ,
938988878671 octetsEssayez-le en ligne!
Explication
La fonction principale ici est
e
.e
prendra une liste et exécutera essentiellement un rouleau à pâtisserie le long de la gauche vers la droite. Bien qu'il y ait un élément dans la liste qui soit supérieur à son voisin de droite, nous en déplacerons un vers la droite.Maintenant, tout ce que nous avons à faire est d'alimenter cette fonction d'une liste suffisamment déséquilibrée et de lui permettre de faire la magie. La liste que nous choisirons est juste
m
suivie den-1
zéros. Puisque c'est facile à faire.La dernière chose que nous devons faire est de nous assurer que le cas d'erreur est traité. Pour cela, nous jetons simplement une
Non-exhaustive patterns in function
erreur aussi longtemps quem>n
.la source
error[]
par défaut avec un motif non exhaustif à la place:m!n|m>n=e$m:replicate(n-1)0
.(0<$[1..n-1])
plus court quereplicate(n-1)0
.C # (.NET Core) ,
868271 octetsrenvoie une erreur pour les entrées non valides.
Essayez-le en ligne!
-4 octets grâce à TheLethalCoder
-11 octets grâce à OlivierGrégoire
la source
a=>b=>
au début.using System.Collections.Generic
si je retourne unIEnumerable<int>
?IEnumerable<int>
serait dans la définition de la fonction, vous n'aurez pas besoin d'inclure leusing
.Haskell, 48 octets
Commencez par une liste de
n
zéros. Répéterm
: prenez le premier élément, ajoutez-en un et placez-le à la fin de la liste.Échoue avec une erreur de correspondance de modèle si
n < m
.Essayez-le en ligne!
la source
Braingolf , 30 octets
Essayez-le en ligne!
Prend les entrées dans l'ordre inverse (
n
est la première entrée,m
est la deuxième)Divise
m
parn
, duplique lesn
temps de résultat , puis les boucle et les incrémente une à unem % n
foisla source
Lot, 71 octets
cmd/cset/a
ne produit aucun séparateur, je dois donc utiliserecho(
((
évite l'impressionECHO is on.
).la source
PHP> = 7.1, 62 octets
PHP Sandbox Online
la source
Python 2 , 41 octets
Essayez-le en ligne!
NameError
quand c'est impossible.Python 2 , 43 octets
Essayez-le en ligne!
ValueError
quand c'est impossible.la source
NameError
pour sortir par erreurJavascript (ES6),
57 56 5341 octetsLa réponse inclut désormais une manière plus intelligente de créer les valeurs. Merci @Neil
Usage
Histoire
Première mine
Puis ajouté l'opérateur d'étalement et la syntaxe de curry inclinée par @Arnauld
la source
_=>m++/n|0
enregistre un tas d'octets.Java (OpenJDK 8) ,
8073636159 octetsEssayez-le en ligne!
Remarque, à des fins de curry,
m
etn
sont inversés.la source
Pyth , 11 octets
Essayez-le en ligne!
la source
Pyth , 13 octets
Essayez-le en ligne! Sortie
0
en cas d'erreur.Tricherie, 6 octets
Essayez-le en ligne! Le tableau contient une
0
erreur. Malheureusement, ce n'est pas faux en Pyth .Explication
la source
CJam ,
1312 octetsEssayez-le en ligne!
Il s'agit d'un bloc anonyme qui prend l'entrée comme
n m
sur la pile. Cela aurait été une bonne réponse, mais l'exigence de gestion des erreurs l'a complètement détruite.Erreurs avec une division par zéro lorsqu'il n'est pas possible de les résoudre.
Explication
Si l'exigence de gestion des erreurs est levée, celle-ci peut être raccourcie à 7 octets, ce qui représente une diminution de plus de 40%:
la source