Lundi mini-golf: une série de courtes questions sur le golf , affichées (avec un peu de chance!) Tous les lundis.
(Désolé, je suis encore en retard; j'étais loin de mon ordinateur hier et aujourd'hui.)
Les programmeurs américains (en particulier les golfeurs de code) adorent les séquences entières arbitraires. Nous avons même un site entier dédié à ces séquences qui compte actuellement environ 200 000 entrées. Dans ce défi, nous allons implémenter un autre ensemble de ces séquences.
Défi
Votre défi consiste à écrire un programme ou une fonction qui accepte un entier N et génère une séquence d'entiers de base 10, où chaque entier suivant est déterminé de cette manière:
- Commencez à 1.
Pour chaque chiffre D dans la représentation en base 10 de l'entier précédent:
- Si D est 0, ajoutez un à l'entier courant.
- Dans le cas contraire, il faut multiplier le nombre entier courant par D .
Détails
- Vous pouvez supposer que 0 < N <2 31 .
- Vous devez sortir chaque entier de la séquence, en commençant par le numéro d'entrée, jusqu'à ce qu'un nombre inférieur à 10 soit atteint.
- La sortie peut être un tableau ou une chaîne séparée par des espaces, des virgules, des sauts de ligne ou une combinaison de ceux-ci.
- Un espace de fin et / ou une nouvelle ligne est autorisé, mais pas une virgule de fin.
- Il ne doit jamais y avoir de zéros non significatifs.
Exemples
Exemple 1: 77
Cet exemple est assez simple:
77 = 1*7*7 = 49
49 = 1*4*9 = 36
36 = 1*3*6 = 18
18 = 1*1*8 = 8
Ainsi, la sortie appropriée est 77 49 36 18 8
.
Exemple 2: 90
Ici nous avons:
90 = 1*9+1 = 10
10 = 1*1+1 = 2
Ainsi, la sortie serait 90 10 2
.
Exemple 3: 806
Lisez les équations de gauche à droite:
806 = 1*8+1*6 = 54 (((1*8)+1)*6)
54 = 1*5*4 = 20
20 = 1*2+1 = 3
La sortie devrait être 806 54 20 3
.
Cas de test
Le premier nombre de chaque ligne est l'entrée et la ligne complète est la sortie attendue.
77 49 36 18 8
90 10 2
249 72 14 4
806 54 20 3
1337 63 18 8
9999 6561 180 9
10000 5
8675309 45369 3240 25 10 2
9999999 4782969 217728 1568 240 9
1234567890 362881 2304 28 16 6
À titre de référence, voici les prochains entiers appropriés de 10 à 100:
Current | Next
--------+-----
10 | 2
11 | 1
12 | 2
13 | 3
14 | 4
15 | 5
16 | 6
17 | 7
18 | 8
19 | 9
20 | 3
21 | 2
22 | 4
23 | 6
24 | 8
25 | 10
26 | 12
27 | 14
28 | 16
29 | 18
30 | 4
31 | 3
32 | 6
33 | 9
34 | 12
35 | 15
36 | 18
37 | 21
38 | 24
39 | 27
40 | 5
41 | 4
42 | 8
43 | 12
44 | 16
45 | 20
46 | 24
47 | 28
48 | 32
49 | 36
50 | 6
51 | 5
52 | 10
53 | 15
54 | 20
55 | 25
56 | 30
57 | 35
58 | 40
59 | 45
60 | 7
61 | 6
62 | 12
63 | 18
64 | 24
65 | 30
66 | 36
67 | 42
68 | 48
69 | 54
70 | 8
71 | 7
72 | 14
73 | 21
74 | 28
75 | 35
76 | 42
77 | 49
78 | 56
79 | 63
80 | 9
81 | 8
82 | 16
83 | 24
84 | 32
85 | 40
86 | 48
87 | 56
88 | 64
89 | 72
90 | 10
91 | 9
92 | 18
93 | 27
94 | 36
95 | 45
96 | 54
97 | 63
98 | 72
99 | 81
100 | 3
Vous pouvez trouver cette liste étendue à 10000 ici .
Notation
Il s'agit de code-golf , donc le code valide le plus court en octets l'emporte. Tiebreaker va à la soumission qui a atteint son nombre d'octets final en premier. Le gagnant sera choisi lundi 19 octobre prochain. Bonne chance!
Edit: Félicitations à votre gagnant, @isaacg , en utilisant encore Pyth pour 14 octets !
|*GHhG
enregistre un octet de plus?H*GHhG
.PowerShell,
9291908887 octetsla source
(...)
pour tirer parti de la sortie automatique ... Je vais devoir m'en souvenir à l'avenir.Pip ,
282523 octetsPrend un nombre comme argument de ligne de commande et sort la séquence sur des lignes successives.
Explication:
Maintenant, je suis content d'avoir changé
P
de déclaration en opérateur il y a plusieurs révisions.Pa
est une expression qui évaluea
la valeur de mais la génère également, donc je peux imprimera
et tester simultanément si elle est inférieure à dix en utilisantt>Pa
.la source
CJam,
26252422 octetsou
Essayez-le en ligne.
Comment ça marche
Les deux programmes font essentiellement la même chose; la première est une approche récursive, la seconde une approche itérative. Je vais expliquer le premier, que je considère plus intéressant.
la source
Minkolang 0,7 ,
5246 octetsBoucles imbriquées Woohoo!
Explication
la source
Mathematica, 66 octets
la source
Python 3, 74,
76octetsIl y avait déjà une réponse Python ici avec réduire, donc je voulais en faire une sans. Il doit être appelé avec un int.
la source
Python,
8580 octetsCela imprime maintenant correctement la liste entière, au lieu de seulement la première valeur.
la source
g=
.K5 , 24 octets
Rassembler une liste d'éléments tout en itérant vers un point fixe est précisément ce que fait l'opérateur de numérisation
\
. À chaque itération, je commence par convertir le nombre en une chaîne, puis j'évalue chaque caractère (.:'$:
), en éclatant le nombre en ses chiffres. Ensuite, j'exécute une réduction (/
) commençant par 1 et utilisant le lambda{(x*y;x+1)@~y}
. Dans ce cas,x
c'est la valeur réductrice ety
est chaque terme successif de la séquence.En action:
la source
Julia,
938988868377 octetsCela crée une fonction récursive
f
qui imprime les éléments de séquence sur des lignes distinctes.Non golfé:
Essayez-le en ligne
6 octets enregistrés grâce à Dennis!
la source
n>9
pour se conformer au deuxième exemple. En outre,f(n)=(println(n);if(d=n>9)for i=reverse(digits(n)) i<1?d+=1:d*=i end;f(d)end)
est un peu plus court.Ruby
83, 72 octetsOriginal déclaré en fonction:
J'ai essayé d'utiliser
Enumerator.new
mais il utilise tellement d'octets :-(Amélioration en utilisant la récursivité:
la source
C # et LINQ,
165146 octetsj (pour jarvis) est la fonction récursive. r est la liste des int du résultat.
testé dans LINQPAD:
la source
int n = 1
peut êtreint n=1
, etc.Haskell, 71 octets
Utilisation:
g 8675309
->[8675309,45369,3240,25,10,2]
.la source
Matlab, 108
la source
Java 8, 148 octets
formaté
la source
Gelée , 9 octets
Essayez-le en ligne!
la source