introduction
Ce défi consiste à trouver le plus grand nombre en supprimant y chiffres du numéro d'origine n qui a x chiffres.
En supposant que y=2 n=5263 x=4
les nombres possibles supprimant y = 2 chiffres sont:
[52, 56, 53, 26, 23, 63]
Ainsi, le plus grand nombre est celui 63
qui doit être la sortie de cet exemple.
Une autre logique serait: pour chaque y, recherchez de gauche à droite le chiffre qui est le chiffre suivant droit, puis supprimez-le, sinon en cas de non-correspondance, supprimez les derniers chiffres y .
Utiliser y=3 n=76751432 x=8
pour expliquer:
y=3
76751432
-^------ remove 6 because right next 7 is greater
y=2
7751432
---^--- remove 1 because right next 4 is greater
y=1
775432
-----^ the search failed, then remove last y digits
result = 77543
Les deux méthodes expliquées ci-dessus fonctionnent .. bien sûr, vous pouvez également utiliser une autre méthode :)
Défi
Le nombre n ne comportera pas plus de 8 chiffres, et y sera toujours supérieur à zéro et inférieur à x .
Pour éviter un format d'entrée strict, vous pouvez utiliser les valeurs: y n x
comme vous préférez: comme paramètres dans la fonction, entrée brute ou tout autre moyen valide. N'oubliez pas de dire comment vous avez fait cela dans votre réponse.
La sortie doit être le numéro de résultat.
C'est le code-golf , la réponse la plus courte en octets l'emporte.
Exemple d'entrée et de sortie
Encore une fois: vous n'avez pas besoin d'être trop strict :)
4 1789823 7 -> 983
1 54132 5 -> 5432
3 69314 5 -> 94
2 51794 5 -> 794
modifier
J'ai modifié l'ordre d'entrée pour refléter le fait que certains d'entre vous n'ont peut-être pas besoin de la valeur x pour résoudre le problème. x est désormais une valeur facultative.
la source
x
c'est une sorte d'information inutile.x
en entrée peut raccourcir le code. (Exemple: ma réponse Julia.)Réponses:
A-Ray ,
97 octetsMa nouvelle langue! Selon la méta, cela est autorisé, mais si cela n'est pas accepté, je le supprimerai.
Explication:
Exemple d'entrée (nombre, x, y):
Sortie:
Vous pouvez tester cela avec le fichier .jar fourni dans le lien github.
la source
MATL , 10 octets
Cela utilise la version (9.2.1) du langage / compilateur, qui est antérieure à ce défi.
Il prend trois entrées de stdin dans cet ordre: longueur de chaîne, nombre de caractères supprimés, chaîne.
Exemple
EDIT : Essayez-le en ligne! (le code dans le lien doit
XN
au lieu deXn
se conformer aux changements de langue après ce défi; aussi,o
n'est plus nécessaire)Explication
(Cela coûte toujours 2 octets de plus qu'il ne devrait en raison du
nchoosek
comportement différent des fonctions d'Octave et de Matlab . Corrigé dans la prochaine version du compilateur.)Réponse au défi d'origine (exigences d'entrée plus strictes): 16 octets
Utilise la version actuelle (9.2.1) du langage / compilateur.
Exemple
Explication
(Cela aurait dû être 4 octets de moins, mais j'en ai besoin
wow...c
parce que lanchoosek
fonction d'Octave , contrairement à Matlab, ne fonctionne pas avec la saisie de caractères. Sera corrigé pour la prochaine version du compilateur.)la source
wow
Votre code est étonné de sa propre brièveté;)Pyth -
1198 octetsSuite de tests .
la source
2 5263 4
.Japt, 19 octets
Essayez-le en ligne!
Comment ça marche
la source
Brachylog , 30 octets
Depuis OP a assoupli les contraintes sur IO, cela attend
[Number, NumberOfDigitsRemoved]
en entrée et renvoie la réponse en sortie, par exemplebrachylog_main([1789823,4], Z).
.Explication
la source
Python 3, 69 octets
Cela définit une fonction anonyme acceptant les trois arguments. Profitant pleinement de la règle selon laquelle "vous pouvez utiliser les valeurs:
y n x
comme vous préférez", j'ai choisi d'acceptery
et enx
tant qu'entiers et enn
tant que chaîne. La valeur de retour est une chaîne.Juste au cas où quelqu'un sentirait que cela étire trop les règles, cette version prend toutes les entrées sous forme d'entiers et fait 74 octets.
Et juste pour les coups de pied, j'ai également écrit une version à deux arguments, en prenant
y
et àn
partir de la ligne de commande et en imprimant le résultat dansSTDOUT
. C'est 92 octets.la source
ES6, 70 octets
Renvoie un résultat numérique à moins qu'il ne
y
soit faux etn
soit une chaîne. Je me suis convaincu que faire la récursion à l'envers fonctionne toujours (ma solution ne s'applique pas à faire la récursivité correcte).Aussi mon premier code de golf où j'utilise les trois guillemets (mais pas tous comme guillemets), ce qui m'a empêché de calculer trivialement la longueur.
la source
Julia,
12895 octetsIl s'agit d'une fonction qui accepte les trois valeurs comme paramètres et renvoie un entier.
Non golfé:
la source
Haskell, 64 octets
Exemple d'utilisation:
(4#7)"1789823"
->"983"
.Le numéro d'origine
n
est pris sous forme de chaîne. (Je ne sais pas si je surestime la règle "pas de format d'entrée strict", mais une entrée de chaîne était requise (!) Dans la première version).Comment ça marche: faites une liste de toutes les sous-séquences de
n
, conservez-les avec la longueurx-y
et choisissez le maximum.la source
Rubis, 40 octets
Il s'agit d'une fonction anonyme qui prend
y
etx
sous forme d'entiers etn
de chaîne, et renvoie une chaîne. Vous pouvez l'appeler par exemple comme ceciet il reviendra
"63"
.la source
MATLAB 40 octets
Tester:
la source
Pyth, 45 octets
essayez-le ici
la source
JavaScript (ES6), 78
Une fonction récursive avec 2 arguments y et d.
y
peut être numérique ou chaîne,d
doit être une chaîne.Avant que le défi ne change, il était de 107 - ... avec toutes les bizarreries d'entrée / sortie ...
Tester
la source
n-1
devrait l'êtrey-1
.