Vintage Computing Christmas Challenge 2022

C'est le lieu des discussions diverses et variées, mais toujours en rapport avec le thème général du forum et dans l'esprit de celui-ci. Contient des rubriques électroniques.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Carl
Modérateur
Messages : 13297
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Vintage Computing Christmas Challenge 2022

Message par Carl »

VCCC2022compo.png
VCCC2022compo.png (3.32 Kio) Consulté 3574 fois
https://logiker.com/Vintage-Computing-C ... lenge-2022

Carl
Avatar de l’utilisateur
init_hello
Messages : 224
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Vintage Computing Christmas Challenge 2022

Message par init_hello »

Merci Carl, amusant ! J'ai justement un peu de congés à partir de ce soir :-)
Eric
Avatar de l’utilisateur
init_hello
Messages : 224
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Vintage Computing Christmas Challenge 2022

Message par init_hello »

J'ai envoyé mon programme. Réponse la semaine prochaine :-)
Eric
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13297
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Vintage Computing Christmas Challenge 2022

Message par Carl »

Pour quelle machine ?

Carl
Avatar de l’utilisateur
init_hello
Messages : 224
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Vintage Computing Christmas Challenge 2022

Message par init_hello »

Apple II, BASIC Applesoft. Résultats ce soir !!
Eric
Avatar de l’utilisateur
init_hello
Messages : 224
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Vintage Computing Christmas Challenge 2022

Message par init_hello »

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) :mrgreen:
Eric
Avatar de l’utilisateur
paspeur
Messages : 320
Inscription : 29 avr. 2022 16:28
Localisation : Californie/Bretagne

Re: Vintage Computing Christmas Challenge 2022

Message par paspeur »

Bravo @init_hello ! Peux-tu nous parler de ton approche et de ta solution ?
Avatar de l’utilisateur
init_hello
Messages : 224
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Vintage Computing Christmas Challenge 2022

Message par init_hello »

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 :-D)

Le classement détaillé est ici :
https://demozoo.org/parties/4578/
Eric
Daniel
Messages : 17418
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Vintage Computing Christmas Challenge 2022

Message par Daniel »

Notre ami Neotenien a aussi participé avec ce programme (pour TO8). Il est aussi 1er sur cet ordinateur (et seul concurrent).

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
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.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7983
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Vintage Computing Christmas Challenge 2022

Message par __sam__ »

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)
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
Avatar de l’utilisateur
init_hello
Messages : 224
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Vintage Computing Christmas Challenge 2022

Message par init_hello »

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
Zebulon
Messages : 2805
Inscription : 02 nov. 2020 14:03

Re: Vintage Computing Christmas Challenge 2022

Message par Zebulon »

Bravo à vous init_hello et Neotenien d'avoir planché sur ce problème et envoyé votre programme. 👍
Daniel
Messages : 17418
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Vintage Computing Christmas Challenge 2022

Message par Daniel »

Pour ma part j'en suis resté aux deulignes d'Hebdogiciel :wink: : http://dcmo5.free.fr/deu/
Daniel
L'obstacle augmente mon ardeur.
Zebulon
Messages : 2805
Inscription : 02 nov. 2020 14:03

Re: Vintage Computing Christmas Challenge 2022

Message par Zebulon »

Ah les deulignes toute une époque, certains arrivaient à sortir de ces trucs. :shock:

Un gentil voisin qui était abonné à Hebdogiciel pour son MO5 me passait les listings et les deulignes pour CPC. :D
Daniel
Messages : 17418
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Vintage Computing Christmas Challenge 2022

Message par Daniel »

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 :roll:
Daniel
L'obstacle augmente mon ardeur.
Répondre