Petit défi programmatique pour développeurs en mal d'amusement

Bonsoir,

Ce n'est pas pour vous poser une question que je m'adresse à vous ce soir mais pour lancer un défi à ceux qui développent avant tout pour s'amuser

Voici le défi: réussir à coder en moins de 150 caractères une (ou plusieurs...) fonction générant aléatoirement un numéro de couleur correspondant aux huit couleurs du sommet du cube des couleurs, pour rappel les voici:

sans titre

Une bouteille de Pommard offerte au premier qui y parviendra, offre valable jusqu'à Dimanche 6/09/2020 23H59. Corrigé Lundi si personne n'est arrivé à mieux

Bonsoir,

Function x()
a = Array("FF", "00")
x = a(Int(2 * Rnd)) & a(Int(2 * Rnd)) & a(Int(2 * Rnd))
End Function

Cordialement,

Function x()
a = Array("FF", "00")
x = a(Int(2 * Rnd)) & a(Int(2 * Rnd)) & a(Int(2 * Rnd))
End Function

Pareil !

Bravo Sébastien je ne pensais pas que ce serait si rapide c'est très bien vu. Une erreur d'exécution 424 , Objet requis sur la ligne

A = Array("FF", "00")

Mais même en ajoutant avant un petit dim A avant on arrive à 109 caractères ! Je suis ri-di-cu-li-sé et je te dois ta bouteille je l'envoie où ? Prochain défi je limiterai la mise à un Carambar !

et tu es vite rejoint ! J'avais eu du mal à échafauder (qui me renvoie un nombre decimal, mais vous avez de la marge pour faire la conversion):

Function s(N, R)
s = 255 * Int((N Mod 2 ^ R) / 2 ^ (R - 1))
End Function
Function A()
C = Int(Rnd * 8)
A = RGB(s(C, 1), s(C, 2), s(C, 3))
End Function

où c'est la fonction A qui donne le résultat attendu

Une erreur d'exécution 424 , Objet requis sur la ligne

A = Array("FF", "00")

Si le "a" est déjà pris (puisqu'en majuscule), remplace-le par une autre lettre.

je te dois ta bouteille je l'envoie où ?

Si tu veux organiser des petits challenges, ils sont les bienvenus mais pas besoin de prix pour motiver les participants

En plus l'envoi en Suisse te coûterait probablement bien plus cher que la bouteille (et pas sûr qu'elle arrive entière)

Exact en remplaçant le A par e ça marche et on arrive à 103 caractères

OK je ne proposerai plus de rétribuer mes éventuels futurs challenges

Bonjour à tous,

sans plus de consignes, je considère que ce n'est pas tricher

Function c()
c = Application.Dec2Hex(ThisWorkbook.Colors(Rnd() * 8 + 1), 6)
End Function

88 car.
eric

Bonsoir,

juste pour voir si j'ai compris un petit truc au niveau des couleurs, sur : a = Array("FF", "00")
le doublage des lettres est-il utile ? Car je croyais avoir compris qu'en Hexa FF00FF = F0F, non ?

@ bientôt

LouReeD

juste pour voir si j'ai compris un petit truc au niveau des couleurs, sur : a = Array("FF", "00")

le doublage des lettres est-il utile ? Car je croyais avoir compris qu'en Hexa FF00FF = F0F, non ?

C'est exact, mais pas sûr que ce soit le but recherché ici ... Sinon on pourrait effectivement gratter quelques caractères Array("F", 0)

sans plus de consignes, je considère que ce n'est pas tricher

Bien vu

Ah si. Pour moi c'est 3 éléments (3 octets) de 0 à 255 donc de 00 à FF pour désigner les couleurs que le système comprenne.
eric

eriiic tu me fais peur pour que ta fonction renvoie un long comme la mienne si j'ai bien compris elle pourrait se résumer à :

Function d()
d = ThisWorkbook.Colors(Rnd() * 8 + 1)
End Function

C'était donc aussi simple que ça : 64 caractères ! et pas excessivement difficile à appréhender !

sans plus de consignes, je considère que ce n'est pas tricher

Quelle consigne supplémentaire feraient de toi un tricheur ?

Bien cordialement

Bonjour,

oui, bien sûr. Mais je pensais que tu voulais le résultat en hexa avec les 0 non significatifs comme dans ta table exemple.

Disons que je ne fabrique pas le nombre, je me sers de la table interne à excel. Ca rend le code limité à vba et donc moins général.
Pour moi c'est un peu tricher
eric

Bonjour Eriiic,

Non la sortie en Long directement utilisable par un Font ou un Interior.color me parait préférable

Disons que je ne fabrique pas le nombre

Tu ne fabriques certes pas le nombre mais tu as trouvé LA solution au challenge donné.

En poussant à l'extrême en renommant son "ThisWorkbook" par "W" on arrive à une nouvelle enchère de 51 caractères:

Function f()
d = W.Colors(Rnd * 8 + 1)
End Function

soir quasiment 3 fois moins que ce que je pensais être déjà un challenge...

Quelqu'un pour surenchérir ?

Ah oui mais là tu omets de compter le Set W = ... indispensable.
Ne serais-tu pas un peu tricheur toi aussi ;-)

Ah oui mais là tu omets de compter le Set W = ... indispensable.

Ne serais-tu pas un peu tricheur toi aussi ;-)

Non enfin pas trop j'ai renommé mon ThisWorkbook manuellement dans la fenêtre propriétés pas d'utilisation de Set donc

Bonjour Stéphane1972, le Forum,

Si l'on peut modifier les propriétés objet...

Une fonction Couleur avec 46 caractères.

Plus une macro de 46 secondes y faisant appel.

Bons tests, bonne continuation.

16colorfonction.xlsm (18.33 Ko)
Rechercher des sujets similaires à "petit defi programmatique developpeurs mal amusement"