Nous avons récemment atteint le seuil de 10 000 questions sur PPCG. Hourra! Célébrons cela avec un simple défi.
Contribution
Deux entiers et , tous deux dans , tels que .
Tâche
Votre tâche consiste à ajouter un seul chiffre à l'un de ces nombres entiers ou un seul chiffre aux deux, de sorte que . Si vous ajoutez un chiffre à la fois et , il ne doit pas nécessairement être le même chiffre.
Le nouveau chiffre peut être ajouté au début, à la fin ou n'importe où au milieu de l'entier d'origine. Cependant, vous ne pouvez pas ajouter un zéro non significatif.
Exemple:
Pour , les transformations suivantes sont valides:
Mais ceux-ci ne sont pas valides :
Étant donné et , il existe deux solutions possibles:
Sortie
Vous devez imprimer ou imprimer une liste de toutes les solutions possibles.
Pour l'exemple ci-dessus, la sortie attendue serait [[9238,762],[9273,727]]
.
Règles
- Les E / S peuvent être traitées dans n'importe quel format raisonnable et sans ambiguïté. Vous pouvez utiliser des chaînes, des listes de chiffres, etc. au lieu d'entiers.
- L'entrée est garantie d'avoir au moins une solution.
- Vous êtes autorisé à ne pas dédupliquer la sortie. Cependant, il serait apprécié que le code de test le déduplique avec un certain post-traitement, par exemple dans la section de pied de page de TIO.
- Il s'agit d'un défi de code-golf .
Cas de test
Input --> Output
934, 654 --> [[9346,654]]
737, 628 --> [[7372,2628]]
9122, 88 --> [[9122,878]]
923, 72 --> [[9238,762],[9273,727]]
998, 3 --> [[9968,32],[9987,13]]
900, 10 --> [[9900,100],[9090,910]] NB: solutions such as [9000,1000] are NOT valid
(more than one digit added to 10)
363, 632 --> [[3673,6327],[3638,6362]]
288, 711 --> [[2881,7119],[2882,7118],[2883,7117],[2884,7116],[2885,7115],[2886,7114],
[2887,7113],[2888,7112],[2889,7111]]
365, 635 --> [[365,9635],[1365,8635],[2365,7635],[3365,6635],[4365,5635],[5365,4635],
[6365,3635],[7365,2635],[8365,1635],[9365,635],[3065,6935],[3165,6835],
[3265,6735],[3465,6535],[3565,6435],[3665,6335],[3765,6235],[3865,6135],
[3965,6035],[3605,6395],[3615,6385],[3625,6375],[3635,6365],[3645,6355],
[3655,6345],[3675,6325],[3685,6315],[3695,6305],[3650,6350]]
output a list of all possible solutions
Oh bummer. Ce serait difficile pour ma langue runique. Je pourrais probablement écrire un programme qui pourrait produire une solution!Réponses:
Haskell ,
99 97 8281 octets-16 octets grâce à Delfad0r (en prenant les entrées comme une liste, en utilisant des abus que nous n'avons pas besoin de dédupliquer -> n peut toujours être en [0,4] & en utilisant une combinaison intelligente de format d'entrée et
ap
)!Essayez-le en ligne!
la source
R , 96 octets
Essayez-le en ligne!
Explication (non golfée)
Nous attribuons
?
àpaste
. Cela nous permet de faire quelque chose de cool:a<-b?c<-d
fait des affectations en ligne dans l'paste
appel, ce que nous ne pouvions pas faire avec un autre opérateur que?
, car il a une priorité inférieure à<-
.Maintenant, comme @JoKing l'a gentiment souligné, il peut y avoir des cas comme
900 10
où deux insertions pourraient avoir lieu, comme9100 8100
. Nous filtrons donc les correspondances où le nombre de caractères dans l'un ou l'autre nombre a augmenté de plus de 1. La façon rapide de le faire est avec la distance d'édition de Levenshtein àadist
laquelle nous nous lions+
.la source
Pyth,
282725242220 octetsEssayez-le en ligne ici , ou vérifiez tous les cas de test ici - la suite de tests déduplique le résultat en ajoutant a
{
.L'entrée est une liste de chaînes.
Edit 4: sauvé encore 2 octets, grâce à Mr Xcoder -
v
vectorise par défaut, etL
utilise enm
dessous, donc la cartographie sur la plage est implicite, ce qui rend l'U
inutile aussiEdit 3: Introduction à l'utilisation globale de l'
;
opérateur pour conserver l'accès à 10 pour économiser 2 octets, grâce à FryAmTheEggman et issacg:Edit 2: J'ai oublié que l'opérateur de somme existe, combien embarrassant ...
Édition 1: la version précédente acceptait une liste d'entiers en entrée, effectuant des conversions de chaînes manuellement, pour 27 octets:
la source
T
, mais dans les blocs fonctionnels, les variables sont redéfinies pour agir à la place comme variables d'itération - dans le bloc de filtre, la variable d'itération se trouve êtreT
ainsi, donc elle ne peut pas être utilisée. Cela signifie que ce10 ^ 4
serait^10 4
, ce qui fait 5 octets de long, donc pas plus court malheureusementT
inUT
est toujours 10, pour la[0,10)
gamme. Mais àf...T
l'T
est devenu une variable d'itération pour le filtre. Merci pour l'explication, cela a du sens! Et faireT4^
plus tôt, l'enregistrer dans une variable, et utiliser cette variable dans le filtre est également (au moins) 5 octets.10000
par^;4
.;
a toujours la valeur de la variable d'itération dans le contexte global, dans ce cas 10. C'est^;4
ce que vous recherchez.fq^;4sT*FmvsmXLkdThl
. ( Pyth bat Jelly? OO Hourra )Perl 6 , 64 octets
Essayez-le en ligne!
Il s'agit d'un port de réponse de GB utilisant une expression régulière pour vérifier si les numéros sont valides. Merci à nwellnhof de l' avoir porté .
Ancienne réponse,
127 110, 88 octets-22 octets grâce à nwellnhof!
Essayez-le en ligne!
Bloc de code anonyme qui prend une liste de deux nombres et renvoie une liste de paires de nombres.
Plutôt que de jouer avec l'insertion des chiffres, cette solution vérifie chaque combinaison de nombres qui totalisent 10000 et filtre que les nombres donnés font partie de la paire.
Explication:
la source
(i,1e4-i)
au lieu d'itérer sur chaque(i,j)
et de les filtrer?R ,
179 161 150 150144 octetsEssayez-le en ligne!
35 octets enregistrés par @JayCe et @Giuseppe.
Explication
La fonction d'assistance g obtient toutes les insertions possibles.
Fonction principale.
J'ai remarqué après le fait que c'est essentiellement la même logique que la réponse Pyth .
la source
F
et%*%
Rubis ,
9391 octetsEssayez-le en ligne!
Essayez chaque numéro jusqu'à 10000 et utilisez l'expression régulière pour vérifier si les numéros correspondent.
la source
Gelée , 30 octets
Essayez-le en ligne!
Un peu maladroit car Jelly n'a pas d'insertion.
Explication
la source
PHP,
162159 octetsbel exemple pour une fonction de générateur!
prend l'entrée des arguments de la ligne de commande; imprime les doublons. Courez avec
-nr '<code>
ou essayez-le en ligne .la source
Pyth, 18 octets
Démonstration , suite de tests (la suite de tests est dédupliquée avec le leader
{
).L'entrée se présente sous la forme d'une liste de deux chaînes.
XLRRTT
: L et R effectuent des cartes imbriquées. Puisqu'il y en a 3, nous allons effectuer une carte triplement imbriquée de laX
fonction. Dans ce cas, laX
fonction insérera un caractère à une position désignée dans une chaîne.La chaîne est l'entrée, qui est implicite et placée par la première
R
. Le caractère s'étend sur0 ... 9
, nous avons donc tous les chiffres insérés possibles, et est placé par leL
. La plage est donnée parT
, qui est implicitement définie sur10
, qui est implicitement traitée comme[0 ... 9]
. La position s'étend0 ... 9
, ce qui est suffisant, car l'insertion d'un nombre après la 10e position ne sera jamais utile. Les résultats en double sont corrects. La plage est placée par la secondeR
et donnée par la secondeT
.v
: Chaînes de distribution imbriquées en pouces.sM
: Aplatissez le deuxième niveau de listes, nous laissant avec une liste de tous les nombres possibles après insertion de chiffres, pour chacun des nombres saisis.*F
: Prenez le produit cartésien des deux listes de nombres possibles.fqsT^;4
: Filtrer sur les paires dont le produit est10000
.;
prend la valeur d'10
ici, telle qu'elleT
est utilisée comme variable de filtre, et;
toujours comme la valeur de la variable qui est utilisée.la source
Japt ,
30292523 octetsPrend l'entrée comme un tableau de chaînes, génère un tableau de tableaux de chaînes.
Essayez-le
Explication
la source
Javascript (Node) -
183136123 octets123 octets grâce à Shaggy
136 octets grâce à Arnauld
Ancien code
Pas fier de ça, mais j'ai pensé que je soumettrais quand même. Crée une fonction de prototype de chaîne semblable à la carte qui prend la majeure partie des octets. La fonction parcourt simplement les deux permutations et trouve lorsque 1000-ab est égal à 0. Prend l'entrée en tant que chaînes.
Essayez-le en ligne!
Non golfé
la source
String.prototype
,function
,let
,this
) et avec quelques autres optimisations.map()
au lieu de lafor
boucle externe . NB: la seule raison pour laquelle nous utilisonsj
comme 1er paramètre de la fonction de rappel est que nous souhaitons qu'elle soit définie dans ce domaine.Gelée , 23 octets
Un lien monadique acceptant une liste de listes de chiffres
(par exemple pour l'exemple de 923 et 72 l'entrée est
[[9,2,3],[7,2]]
)Essayez-le en ligne! (le pied de page fait que les E / S sont une paire de deux entiers entrants et une liste [formatée] de paires d'entiers sortants)
Ou consultez la suite de tests .
Comment?
Vérifie toutes les paires de "nombres" (listes de chiffres) qui totalisent 10000 pour la validité en formant toutes les façons de choisir n-1 chiffres parmi ces "nombres" en maintenant l'ordre; et conserve ceux qui sont valides (où la validité permet également que le "nombre" testé soit égal au "nombre" d'origine).
la source
Stax , 24 octets
Exécuter et déboguer
Ce programme prend ses deux entrées comme un tableau de chaînes, comme ceci.
la source
Fusain , 33 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Au cas où vous ne l'auriez pas compris, il parcourt toutes les paires de valeurs qui s'ajoutent à 10000 (sous forme de chaînes), puis compte le nombre de fois que chaque entrée correspond au résultat de la suppression jusqu'à 1 caractère de la valeur respective. Si le nombre minimum est différent de zéro, les deux entrées correspondent et c'est une solution possible.
la source
Python 3,
165160153125117octetsset
de la valeur de retour, car la sortie peut contenir des doublons.range(len(s))
parrange(5)
.itertools
par des listes de listes imbriquées (et en supprimant un espace).UtilisationAccepte les chaînes en entrée, renvoie un ensemble d'entiers en sortie.itertools
et une fonction d'assistance simple.la source
set
la dernière ligne pour -5 octets.Rubis , 110 octets
Accepte les chaînes en entrée, renvoie un tableau de tableau d'entiers.
Basé sur version python . Pour un entier donné,
C
crée un tableau de nombres qui peut être créé en ajoutant un chiffre.Le lambda parcourt chaque paire possible et sélectionne celle dont la somme est de 10000.
Essayez-le en ligne!
la source
05AB1E (hérité) , 36 octets
Peut sans aucun doute être joué au golf de manière substantielle.
Essayez-le en ligne ou vérifiez tous les cas de test (
ê
dans le pied de page se trouve Uniquify & Sort).Explication:
la source
Gelée , 25 octets
Essayez-le en ligne!
Ce n'est pas la solution de gelée la plus courte ici, mais peut-être que quelqu'un peut jouer au golf? Je suis perplexe
la source