Les ordinateurs vivent en binaire. Tous les programmeurs connaissent le binaire.
Mais les 2**x
bases sont souvent négligées car non pratiques, alors qu'elles ont de belles relations avec le binaire.
Pour vous montrer un exemple d'une relation aussi belle, 19 sera mon témoignage.
19 10011 103 23 13 j
19 est décimal, inclus pour plus de clarté.
10011 est 19 en binaire.
103, en base 4 se fait à partir du binaire de cette façon:
- log2 (4) == 2, rappelons-nous deux.
- Pad 10011 pour qu'il ait un multiple de 2 longueurs -> 010011
Prenez les chiffres 2 par 2 de gauche à droite et traitez-les comme des nombres binaires à 2 chiffres:
- 01 -> 1
- 00 -> 0
- 11 -> 3
Fait , 10011 en base 4 est 103.
Pour la base 8, faites la même chose mais 3 par 3 comme log2 (8) = 3.
- Pad 010011
- 010 -> 2
011 -> 3
23, terminé .
Pour la base 16, faites la même chose mais 4 x 4 comme log2 (16) = 4.
- Pad 00010011
- 0001 -> 1
0011 -> 3
13, terminé .
Tâche
Étant donné un nombre maximum en entrée, vous devez générer un tableau
base-ten-i base-two-i base-four-i base-eight-i base-sixteen-i base-thirtytwo-i
pour i cela va de 0 à n inclus. Les nombres binaires sont la quintessence du minimum absolu nécessaire pour fonctionner, donc votre code doit être aussi court que possible.
Restrictions et bonus
Base-ten -> binaire et binaire -> Les composants intégrés de base-dix sont considérés comme des failles comme Base-a -> Base-b.
Si vous générez toutes les
2**i
bases (pour i> 2) en utilisant les relations mentionnées ci-dessus, vous obtenez un*0.6
bonus, mais les conversions de base générales (écrites par vous-même) sont autorisées.
Exemple de tableau
> 32
0 0 0 0 0 0
1 1 1 1 1 1
2 10 2 2 2 2
3 11 3 3 3 3
4 100 10 4 4 4
5 101 11 5 5 5
6 110 12 6 6 6
7 111 13 7 7 7
8 1000 20 10 8 8
9 1001 21 11 9 9
10 1010 22 12 a a
11 1011 23 13 b b
12 1100 30 14 c c
13 1101 31 15 d d
14 1110 32 16 e e
15 1111 33 17 f f
16 10000 100 20 10 g
17 10001 101 21 11 h
18 10010 102 22 12 i
19 10011 103 23 13 j
20 10100 110 24 14 k
21 10101 111 25 15 l
22 10110 112 26 16 m
23 10111 113 27 17 n
24 11000 120 30 18 o
25 11001 121 31 19 p
26 11010 122 32 1a q
27 11011 123 33 1b r
28 11100 130 34 1c s
29 11101 131 35 1d t
30 11110 132 36 1e u
31 11111 133 37 1f v
32 100000 200 40 20 10
Réponses:
CJam, 54 * 0,6 = 32,4 octets
Testez-le ici.
Pour référence, voici une solution plus courte qui ne donne pas droit au bonus (à 39 octets):
la source
Pyth, 52 * 0,6 = 31,2 octets
Testez-le en ligne
Ma réponse non bonus est de 39 octets
la source
PHP,
232230233217 * 0,6 = 130,2aucune chance de battre les langues de golf, mais j'ai aimé le défi.
$n=32;
ou remplacer$n
par32
(ou tout autre entier non négatif); appeler via cli$n
par$_GET[n]
(+ 6 / + 3.6) et appelez soit dans le navigateursoit sur cli avec
php-cgi -f bases.php -n=32
<br>
ou préfixer<pre>
pour tester dans le navigateurSupprimez E_NOTICE de error_reporting (prepend
error_reporting(0);
) pour les supprimer.panne:
édition majeure:
74 octets pour corriger les résultats décimaux 0 après la refonteversion non bonus, 142 octets
PHP bat Python?
Même si j'ai ajouté les 6 (3,6) octets pour faire de l'extrait de code un programme, je battre toujours Python (223 * 0,6 = 133,8 ou 148 sans bonus contre 158). Incroyable.
la source
for
mot - clé dans la boucle for la plus à l'extérieur."\n"
-> rupture de ligne physique.Ruby, 80 octets (version non bonus)
la source
Python3 -
189, 167, 166150 octets16 octets enregistrés avec l'aide de @ LeakyNun !
Version bonus -
296 * 0,6 = 177,6279 * 0,6 = 167,4 octetsVersion légèrement plus lisible de la version bonus.
la source
"0123456789abcdefghijklmnopqrstuv"
c'est plus court quefrom string import* digits+ascii_lowercase
digits+ascii_lowercase
: D. Merci!for i in range(int(input())+1):f=lambda n=i,b,c="0123456789abcdefghijklmnopqrstuv":n<b and c[n]or f(n//b,b)+c[n%b];print(i,f(2),f(4),f(8),f(16),f(32))
(une ligne)