Vintage Computing Christmas Challenge 2022
Modérateurs : Papy.G, fneck, Carl
- Carl
- Modérateur
- Messages : 13301
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
- init_hello
- Messages : 224
- Inscription : 13 mars 2022 12:03
- Localisation : Paris
Re: Vintage Computing Christmas Challenge 2022
Merci Carl, amusant ! J'ai justement un peu de congés à partir de ce soir
Eric
- init_hello
- Messages : 224
- Inscription : 13 mars 2022 12:03
- Localisation : Paris
Re: Vintage Computing Christmas Challenge 2022
J'ai envoyé mon programme. Réponse la semaine prochaine
Eric
- Carl
- Modérateur
- Messages : 13301
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
Re: Vintage Computing Christmas Challenge 2022
Pour quelle machine ?
Carl
Carl
- init_hello
- Messages : 224
- Inscription : 13 mars 2022 12:03
- Localisation : Paris
- init_hello
- Messages : 224
- Inscription : 13 mars 2022 12:03
- Localisation : Paris
Re: Vintage Computing Christmas Challenge 2022
Classé 98 sur 192, avec un programme BASIC Applesoft de 2 lignes et 108 octets. Loin des 34 octets du vainqueur (en asm 6502 sur C64)
Eric
Re: Vintage Computing Christmas Challenge 2022
Bravo @init_hello ! Peux-tu nous parler de ton approche et de ta solution ?
- init_hello
- Messages : 224
- Inscription : 13 mars 2022 12:03
- Localisation : Paris
Re: Vintage Computing Christmas Challenge 2022
Oui bien sûr. Le but était de reproduire le dessin de l'étoile avec le programme le plus court possible, tous les langages et systèmes étant admis. Il y a plein d'approches possibles, celle que j'ai prise semble l'avoir été aussi par beaucoup d'autres, y-compris les programmes les plus courts qui ont poussé le truc plus loin et optimisé bien mieux que moi. Elle consiste à trouver une forme géométrique de base qui par transformations simples (miroir, rotation) permette d'obtenir le résultat final.
A priori on pouvait décomposer l'étoile en 2, 4 ou 8 formes géométriques. J'ai opté pour une décomposition en 4 triangles qui se superposent en partie (du coup certains "pixels" sont dessinés plusieurs fois, ce n'est pas optimum question rapidité, mais ça ne comptait pas). J'ai utilisé 2 boucles imbriquées pour les coordonnées x et y, et à chaque itération, 4 points sont "allumés", 1 par triangle. Il suffit de 3 transformations simples des coordonnées x et y pour avoir les 4 points. Le tout peut tenir en 2 lignes (en BASIC Applesoft) :
10 FOR Y = 4 TO 20:L = Y +12: IF Y >12 THEN L = 36 -Y
20 FOR X = 16 TO L: HTAB X: VTAB Y: PRINT "*";: HTAB 40 -X: PRINT "*";: HTAB Y +8: VTAB X -8: PRINT "*";: HTAB Y +8: VTAB 32 -X: PRINT "*";: NEXT X,Y
Note : j'ai choisi de dessiner l'étoile au centre de l'écran, mais ce n'était pas exigé.
En analysant quelques "winners", on retrouve presque toujours les 2 boucles imbriquées, mais en optimisant l'algorithme et en utilisant des astuces, on peut faire beaucoup mieux. Les 2 premiers sont en assembleur Z80 (sur ZX81 et Spectrum), le 3ème en APL ! (27, 29 et 30 octets respectivement).
En BASIC le meilleur a fait 49 octets (BBC BASIC).
A noter je suis quand même le gagnant dans la catégorie Apple II (3 candidats seulement )
Le classement détaillé est ici :
https://demozoo.org/parties/4578/
A priori on pouvait décomposer l'étoile en 2, 4 ou 8 formes géométriques. J'ai opté pour une décomposition en 4 triangles qui se superposent en partie (du coup certains "pixels" sont dessinés plusieurs fois, ce n'est pas optimum question rapidité, mais ça ne comptait pas). J'ai utilisé 2 boucles imbriquées pour les coordonnées x et y, et à chaque itération, 4 points sont "allumés", 1 par triangle. Il suffit de 3 transformations simples des coordonnées x et y pour avoir les 4 points. Le tout peut tenir en 2 lignes (en BASIC Applesoft) :
10 FOR Y = 4 TO 20:L = Y +12: IF Y >12 THEN L = 36 -Y
20 FOR X = 16 TO L: HTAB X: VTAB Y: PRINT "*";: HTAB 40 -X: PRINT "*";: HTAB Y +8: VTAB X -8: PRINT "*";: HTAB Y +8: VTAB 32 -X: PRINT "*";: NEXT X,Y
Note : j'ai choisi de dessiner l'étoile au centre de l'écran, mais ce n'était pas exigé.
En analysant quelques "winners", on retrouve presque toujours les 2 boucles imbriquées, mais en optimisant l'algorithme et en utilisant des astuces, on peut faire beaucoup mieux. Les 2 premiers sont en assembleur Z80 (sur ZX81 et Spectrum), le 3ème en APL ! (27, 29 et 30 octets respectivement).
En BASIC le meilleur a fait 49 octets (BBC BASIC).
A noter je suis quand même le gagnant dans la catégorie Apple II (3 candidats seulement )
Le classement détaillé est ici :
https://demozoo.org/parties/4578/
Eric
Re: Vintage Computing Christmas Challenge 2022
Notre ami Neotenien a aussi participé avec ce programme (pour TO8). Il est aussi 1er sur cet ordinateur (et seul concurrent).
C'est là qu'on voit que les jeunes, habitués à des machines puissantes, ne programment pas avec le même souci d'économie et d'efficacité que les informaticiens de l'époque.
Code : Tout sélectionner
1 cx=8:cy=8:IMAX=100:DIM px(IMAX),py(IMAX),psens(IMAX):cls:r(0)=4.25:r(1)=9.2:r(2)=6.3:r(3)=9.2:o=3.14159/8
2 fori=1to16:line (cx+int(r((i-1)MOD4)*sin((i-1)*o)+0.5),cy+int(r((i-1)MOD4)*cos((i-1)*o)+0.5))-(cx+int(r(i MOD4)*sin(i*o)+0.5),cy+int(r(i MOD4)*cos(i*o)+0.5))"*":next
3 dx(0)=0:dy(0)=-1:dx(1)=1:dy(1)=0:dx(2)=0:dy(2)=1:dx(3)=-1:dy(3)=0:psens(1)=0:sens=0:x=cx:y=cy:px(1)=x:py(1)=y:ip=1:locate x,y:?"*"
4 x=px(ip):y=py(ip):sens=psens(ip):ifsens=4then7
5 x=x+dx(sens):y=y+dy(sens):ifscreen(x,y)<>42thenip=ip+1:px(ip)=x:py(ip)=y:psens(ip)=0:locate x,y:?"*":goto4
6 sens=sens+1:psens(ip)=sens:goto4
7 ifip>1thenip=ip-1:goto4
5 CLS:?"Typein center coordonate (x,y) of star (8-31),(8-16)":input cx,cy:if cx<8 or cx>31 or cy<8 or cy>16 then 5
10 IMAX=100:DIM px(IMAX),py(IMAX),psens(IMAX):cls:r(0)=4.25:r(1)=9.2:r(2)=6.3:r(3)=9.2:o=3.14159/8
20 for i=1 to 16:line (cx+int(r((i-1)MOD 4)*sin((i-1)*o)+0.5) , cy+int(r((i-1) MOD 4)*cos((i-1)*o)+0.5))-(cx+int(r(i MOD 4)*sin(i*o)+0.5) , cy+int(r(i MOD 4)*cos(i*o)+0.5))"*":next
30 'Remplissage : Utilisation de pile
31 dx(0)=0:dy(0)=-1:dx(1)=1:dy(1)=0:dx(2)=0:dy(2)=1:dx(3)=-1:dy(3)=0:psens(1)=0:sens=0:x=cx:y=cy:px(1)=x:py(1)=y:ip=1:locate x,y:?"*"
32 x=px(ip):y=py(ip):sens=psens(ip):if sens=4 then 37
33 x=x+dx(sens):y=y+dy(sens):if screen(x,y)<>42 then ip=ip+1 : px(ip)=x : py(ip)=y : psens(ip)=0:locate x,y:?"*": goto32
34 sens=sens+1:psens(ip)=sens:goto32
37 if ip>1 then ip=ip-1:goto32
This Basic 1.0 for the Star challenge was tested and run on Thomson TO8 computer emulator (DC MOTO), choosing Basic 1.0 ("2" in main screen) or Basic 512 (1 in main menu).
To launch the fd file : choose the TO8/TO9/TO9+ emulation, load the fd file, on DCMoto or other Thomson emulator, then choose B on main screen (For TO8) or D (on TO9/TO9+). The program ask you where to put center of star and check if your answer is acceptable.
It works faster on Basic 512 that on Basic 1.0 (+30% faster).
This BASIC code is personnal code I built for this challenge. It is fully Basic 1.0 compatible so that it can work on all 8 bits computer which has a full compatible Basic 1.0 (On MSX, Amstrad maybe, C64 etc). It use a personnal code for fulling close shape.
We can reduice the Line parts (line 20) on basic code (omitting the origin point) but there were a problem on DC Moto emulator about this point. And finally the code is not shorter because we should add "POINT" instruction at the begining in this case.
Bruno AUBIN/Neotenien : 2022-12-19 Monday
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Vintage Computing Christmas Challenge 2022
Moi je dirais qu'il y a des programmeurs d'informatique de gestion qui font des gros programmes robustes, sans surprise, qu'ion comprends tout de suite et qui inspirent confiance.
Et il y a les bricolos des démos qui donnent des programmes plein d'astuces, optimisés au point d'être illisibles, et qui n'inspirent du coup pas trop confiance (comment ca se fait la maintenance avec un code pareil?), mais qui donne le même résultat avec 100fois moins de resources.
L'un n'est pas mieux que l'autre. Ce sont deux écoles de programmation: celle pour le boulot, et celle pour le perso. Le boulot ca paye le loyer et la nourriture, le perso ca nourrit l'esprit et le fun. Il faut les deux.
Dans le même genre, il y a le concours ioccc. Et croyez-moi, il faut être un bon programmeur (de gestion) pour pouvoir faire des codes C pareils (matez moi ce jeu de démineur)
Et il y a les bricolos des démos qui donnent des programmes plein d'astuces, optimisés au point d'être illisibles, et qui n'inspirent du coup pas trop confiance (comment ca se fait la maintenance avec un code pareil?), mais qui donne le même résultat avec 100fois moins de resources.
L'un n'est pas mieux que l'autre. Ce sont deux écoles de programmation: celle pour le boulot, et celle pour le perso. Le boulot ca paye le loyer et la nourriture, le perso ca nourrit l'esprit et le fun. Il faut les deux.
Dans le même genre, il y a le concours ioccc. Et croyez-moi, il faut être un bon programmeur (de gestion) pour pouvoir faire des codes C pareils (matez moi ce jeu de démineur)
Dernière modification par __sam__ le 30 déc. 2022 21:45, modifié 2 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
- init_hello
- Messages : 224
- Inscription : 13 mars 2022 12:03
- Localisation : Paris
Re: Vintage Computing Christmas Challenge 2022
En tout cas ça stimule la créativité : Neotenien s'est servi de formules trigonométriques. C'est étonnant comment les maths offrent des moyens très divers pour un même objectif !
Eric
Re: Vintage Computing Christmas Challenge 2022
Bravo à vous init_hello et Neotenien d'avoir planché sur ce problème et envoyé votre programme.
Re: Vintage Computing Christmas Challenge 2022
Pour ma part j'en suis resté aux deulignes d'Hebdogiciel : http://dcmo5.free.fr/deu/
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Vintage Computing Christmas Challenge 2022
Ah les deulignes toute une époque, certains arrivaient à sortir de ces trucs.
Un gentil voisin qui était abonné à Hebdogiciel pour son MO5 me passait les listings et les deulignes pour CPC.
Un gentil voisin qui était abonné à Hebdogiciel pour son MO5 me passait les listings et les deulignes pour CPC.
Re: Vintage Computing Christmas Challenge 2022
Quelqu'un a-t-il réussi à faire fonctionner le programme de Neotenien ?
Je dois rater quelque chose car il revient en boucle sur la saisie des coordonnées du centre de l'étoile. Je n'arrive pas à aller plus loin
Je dois rater quelque chose car il revient en boucle sur la saisie des coordonnées du centre de l'étoile. Je n'arrive pas à aller plus loin
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.