What's new
iamretro

Wow! It seems you have yet to create an account with us! Needless to say, you have to register in order to get the full "iamretro" experience! You will then be able to create your own topics, reply to posts and be an active member of the MOST prolific community in Greece (even further than that, but we're being modest for now). So don't delay! REGISTER!

Quarantine challenge

clemenza

Retro Addict
Comrade
Joined
Feb 22, 2013
Messages
981
Μα, κατά τη γνώμη μου όλα αυτά είναι εκ διαμέτρου αντίθετα με το σκοπό που υπηρετεί αυτό το thread!
Το ζητούμενο ήταν η μεταφορά και όχι το portability...

Η C είναι γνώριμη μόνο σε όσους (όπως ήδη έγραψα) τη διδάχτηκαν για τον ένα ή τον άλλο λόγο. Ανήκω σε αυτούς και δεν βλέπω λόγο πάντως να πρέπει (και) εδώ να τη βλέπω μπροστά μου! :D:D:D

Αντιθέτως, η Basic μου δίνει ξεκάθαρα μεγαλύτερο fun factor. Αισθάνομαι σαν πιτσιρικάς στα 80s που έκατσε μπροστά στο home computer του και προσπαθεί κάτι να κάνει με αυτό πέρα από το να παίζει "βιντεοπαιχνίδια"...

Ούτε και εγώ έχω πρόβλημα με το τι κώδικας να μπει εδώ. Ας είναι οτιδήποτε και όποιος έχει γνώσεις/χρόνο/όρεξη/κέφι (πες το όπως θες) να ασχοληθεί, ας το κάνει.
Απλά για εμένα δεν έχει τον ίδιο βαθμό διασκέδασης...
Κωνσταντίνε, όπως ακριβώς γράφει και ο Δημήτρης, αν χρησιμοποιήσουμε ANSI C λόγω των πλεονεκτημάτων που θα προσέφερε, χάνεται όλο το νόημα του thread! Το ενδιαφέρον/διασκεδαστικό όλης της ιστορίας είναι π.χ. το πώς θα μεταφέρεις ένα πρόγραμμα που χρησιμοποιεί εντολές READ και DATA στον ΖΧ81 που δεν έχει αυτή τη δυνατότητα; Πώς θα μεταφέρουμε το προγραμματάκι του 8bit Show and Tell στον Amstrad CPC στον οποίο δεν μπορούμε να διαβάσουμε με PEEK ποιος χαρακτήρας βρίσκεται στην κάθε θέση της οθόνης; Προσωπικά εκεί εντοπίζω το όλο challenge, σε συνδυασμό φυσικά με το ότι για όλα αυτά μπορούμε - στην πλειοψηφία των περιπτώσεων - να χρησιμοποιήσουμε τα vanilla 8μπιτα μηχανάκια της εποχής χωρίς ούτε ένα έξτρα περιφερειακό, χωρίς ούτε ένα έξτρα πρόγραμμα.

Αν επιθυμούμε να φτιάξουμε κάτι που να τρέχει σε πιο σύγχρονα μηχανάκια και σε σήμερα ευρέως χρησιμοποιούμενες γλώσσες προγραμματισμού αυτή είναι μια άλλη ιστορία, ένα άλλο challenge, το οποίο, στο δικό μου μυαλό θα ταίριαζε ως quarantine challenge στο forum iamcurrent ή στο iamup-to-date και όχι στο iamretro! :p
 

sly*m

Retro Addict
Comrade
Joined
Oct 30, 2018
Messages
608
Μόνο BASIC; Γιατί όχι C αν υπάρχει κάποιος compiler; Φυσικά όποιος θέλει μπορεί να το γράψει σε οποιαδήποτε γλώσσα προγραμματισμού.

Υπολογισμός ψηφίων π. Εδώ για τον ZX81, το listing είναι από τον πρωτότυπο κώδικα.

edit: Εδώ είναι τα πρώτα 1000 ψηφία του π για έλεγχο.

Code:
#include <stdio.h>

int main() {
    int r[2800 + 1];
    int i, k;
    int b, d;
    int c = 0;

    for (i = 0; i < 2800; i++) {
        r[i] = 2000;
    }

    for (k = 2800; k > 0; k -= 14) {
        d = 0;

        i = k;
        for (;;) {
            d += r[i] * 10000;
            b = 2 * i - 1;

            r[i] = d % b;
            d /= b;
            i--;
            if (i == 0) break;
            d *= i;
        }
        printf("%.4d", c + d / 10000);
        c = d % 10000;
    }

    return 0;
}

IBM PC και συμβατοί: TURBO PASCAL

19663

Code:
{*************************}
{ Turbo-Pascal Pi Numbers }
{*************************}

program PiNumbers;

uses Crt, Strings;

const
  ArrLen = 2800;

var
  I,K,B,D,C: Longint;
  NUM,FMT,VAL: array[0..4] of Char;
  L: Word;
  R: array[0..ArrLen+1] of Longint;

begin
  ClrScr;
  C := 0;
  for I := 0 to ArrLen-1 do R[I] := 2000;
  K := ArrLen;
  while K > 0 do
  begin
    D := 0;
    I := K;
    while true do
    begin
      D := D + R[I] * 10000;
      B := 2 * I - 1;
      R[I] := D mod B;
      D := D div B;
      dec(I);
      if I = 0 then break;
      D := D*I;
    end;
    FMT := '00000';
    StrLCopy(VAL,'',1);
    Str(C + D div 10000,NUM);
    L := 4 - StrLen(NUM);
    if L = 0 then VAL := NUM;
    if L > 0 then
    begin
      StrLCat(VAL, FMT, L);
      StrLCat(VAL,NUM,4);
    end;
    Write(VAL);
    C := D mod 10000;
    K := K - 14;
  end;
  repeat
  until keypressed;
end.
 
Last edited:

chriskgnr

Retro Guru
Comrade
Joined
Oct 2, 2012
Messages
2,067
IBM PC και συμβατοί: TURBO PASCAL

View attachment 19662


Code:
{*************************}
{ Turbo-Pascal Pi Numbers }
{*************************}

program PiNumbers;

uses Crt, Strings;

const
  ArrLen = 2800;

var
  I,K,B,D,C: Longint;
  NUM,FMT,VAL: array[0..4] of Char;
  L: Word;
  R: array[0..ArrLen+1] of Longint;

begin
  ClrScr;
  C := 0;
  for I := 0 to ArrLen-1 do R[I] := 2000;
  K := ArrLen;
  while K > 0 do
  begin
    D := 0;
    I := K;
    while true do
    begin
      D := D + R[I] * 10000;
      B := 2 * I - 1;
      R[I] := D mod B;
      D := D div B;
      dec(I);
      if I = 0 then break;
      D := D*I;
    end;
    FMT := '00000';
    Str(C + D div 10000,NUM);
    L := 4 - StrLen(NUM);
    if L = 0 then VAL := NUM;
    if L > 0 then
    begin
      StrLCat(VAL, FMT, L);
      StrLCat(VAL,NUM,4);
    end;
    Write(VAL);
    C := D mod 10000;
    K := K - 14;
  end;
  repeat
  until keypressed;
end.


το δυσκολεύεις αγαπητέ.... :lol:
για ρετρίλα και διασκέδαση, δώσε μας κάτι σε ALGOL π.χ. από το βιβλίο του Φραγκάκη της M.P.S. !! :p
 

konc

Retro Enthusiast
Comrade
Joined
Nov 8, 2012
Messages
415
Κωνσταντίνε, όπως ακριβώς γράφει και ο Δημήτρης, αν χρησιμοποιήσουμε ANSI C λόγω των πλεονεκτημάτων που θα προσέφερε, χάνεται όλο το νόημα του thread! Το ενδιαφέρον/διασκεδαστικό όλης της ιστορίας είναι π.χ. το πώς θα μεταφέρεις ένα πρόγραμμα που χρησιμοποιεί εντολές READ και DATA στον ΖΧ81 που δεν έχει αυτή τη δυνατότητα; Πώς θα μεταφέρουμε το προγραμματάκι του 8bit Show and Tell στον Amstrad CPC στον οποίο δεν μπορούμε να διαβάσουμε με PEEK ποιος χαρακτήρας βρίσκεται στην κάθε θέση της οθόνης; Προσωπικά εκεί εντοπίζω το όλο challenge, σε συνδυασμό φυσικά με το ότι για όλα αυτά μπορούμε - στην πλειοψηφία των περιπτώσεων - να χρησιμοποιήσουμε τα vanilla 8μπιτα μηχανάκια της εποχής χωρίς ούτε ένα έξτρα περιφερειακό, χωρίς ούτε ένα έξτρα πρόγραμμα.

Αν επιθυμούμε να φτιάξουμε κάτι που να τρέχει σε πιο σύγχρονα μηχανάκια και σε σήμερα ευρέως χρησιμοποιούμενες γλώσσες προγραμματισμού αυτή είναι μια άλλη ιστορία, ένα άλλο challenge, το οποίο, στο δικό μου μυαλό θα ταίριαζε ως quarantine challenge στο forum iamcurrent ή στο iamup-to-date και όχι στο iamretro! :p

Ναι δεν έχω καμία αντίρρηση σ' αυτήν την εκδοχή του challenge. Δεν εννοούσα να αρχίσουμε να γράφουμε C στα ρετρομηχανάκια μας, όντως αυτό δεν έχει ούτε νόημα ούτε πλάκα να ψάχνεις compilers για το κάθε target. Περισσότερο εννοούσα ένας απλός αλγόριθμος σε C να μεταφερθεί στα home σε ότι γλώσσα βολεύεται ή βρίσκει πιο fun ο καθένας, φυσικά και σε basic. Ας πούμε αυτό με το pi το γράφεις άνετα σε οποιαδήποτε basic και έχει και τα θεματάκια του να ασχοληθείς πχ overflow των numeric data types
 

darthcotsos

Retro Starter
Comrade
Joined
Jul 18, 2012
Messages
54
C εεε? γουστάρω.!!! Θα το ετοιμάσω συντομα και σε Σπεχτρουμ (ή και αλλου... :p) Ωραίος ο Μάνος!
 

darthcotsos

Retro Starter
Comrade
Joined
Jul 18, 2012
Messages
54
Στον ZX Spectrum χωρίς καμια αλλαγή στον κώδικά του Μάνου για τον ZX81 και με cross compiler τον Ζ88dk.

19685

19686

O Ζ88dk το πάει απο default στις 64 στήλες! αλλα έχει θέμα... Το ψάξιμο μετά από τη δουλειά.... :p

Και μετά το ψαξιμο η έκδοση του Μανου για το Atari παιζει μάλλον σε όλα τα 8μπιτα!
Δοκιμη σε Spectrum και Commodore 64...
 

Attachments

  • pi.png
    pi.png
    148.6 KB · Views: 23
  • pi.zip
    4.5 KB · Views: 0
Last edited:

lliont

Retro Member
Comrade
Joined
Aug 3, 2017
Messages
102
Και για να θυμηθώ και τα εφηβικά μου χρόνια το έκανα σε TI-99/4a extended basic

19681

Θα χρωστάω και μερικά ψηφία δεν χωράνε στην οθόνη του TΙ

19682

Τελείωσε και τα 800 μετά από 1+ ώρα με turbo speed στον emulator
Αν έτρεχε στον κανονικό θα τελείωνε 1+ ψηφία σε 800 ώρες.

άντε και τα χρωστούμενα:

19688
 
Last edited:

chriskgnr

Retro Guru
Comrade
Joined
Oct 2, 2012
Messages
2,067
Και για να θυμηθώ και τα εφηβικά μου χρόνια το έκανα σε TI-99/4a extended basic

View attachment 19681

Θα χρωστάω και μερικά ψηφία δεν χωράνε στην οθόνη του TΙ

View attachment 19682

Τελείωσε και τα 800 μετά από 1+ ώρα με turbo speed στον emulator


Στο FOR K=2800 ... γιατί το STEP το έχεις να μειώνεται ανα 14?
 

sly*m

Retro Addict
Comrade
Joined
Oct 30, 2018
Messages
608
Στο FOR K=2800 ... γιατί το STEP το έχεις να μειώνεται ανα 14?

Χρήστο γιατί δεν διαβάζεις την πηγή του αλγόριθμου που την έδωσα στο αρχικό ποστ; εεεε; :devilish::p
(Δεν λέω να καταλάβεις ακριβώς τα μαθηματικά αλλά θα πάρεις μια ιδέα...)
 

darthcotsos

Retro Starter
Comrade
Joined
Jul 18, 2012
Messages
54
Στο ZX81 πάει κάπως αργα αλλα δουλευεί, έχει σκρολάρει και λείπουν οι πρώτες γραμμές!
19689
 

Attachments

  • zx81pi.zip
    2.1 KB · Views: 1

darthcotsos

Retro Starter
Comrade
Joined
Jul 18, 2012
Messages
54
Και κάτι απλό, ο αλγόριθμος του Πασχα σε Basic & C :)

1969119692
C:
#include <stdio.h>

 int main(void)
   {
     int FD,R19,tmp,d,m,Y,tA,tB,tC,tD,tE;
     Y=0;
        
         printf("Orthodox Easter Caculator \n");
         printf("Please give the year: ");
         scanf ("%d",&Y);
         FD= Y/100;
         R19= Y % 19;
         tA = ((255-11*R19) % 30)+21;
         tB = (tA-19) % 7;
         tC = (40-FD) % 7;
         tmp = Y % 100;
         tD = (tmp + tmp/4) % 7;
         tE = ((20 -tB - tC - tD) % 7)+1;
         d = tA +tE;
         tmp = 10;
         if (Y > 1600)
            tmp = tmp+FD-16-((FD-16)/4);
         d = d+tmp;
        
         if (d>61)
            {
             d=d-61;
             m=5;
             }
         else
          if (d>31)
             {
               d=d-31;
               m=4;
            
              }
            else
              m=3;
              
         printf("%d/%d\n",d,m);       
         printf("\nwww.retrounboxers.gr \nProgram by Darth_Cotsos\n");
      }
 

geoanas

Commodore Vampire
Staff member
Comrade
Joined
Oct 21, 2012
Messages
7,272
Έχετε πάρει όλοι σας φωτιά εδώ μέσα... παρακολουθώ και θαυμάζω βρε :emoji_ok_hand:
 

sly*m

Retro Addict
Comrade
Joined
Oct 30, 2018
Messages
608
Και κάτι από τον ταπεινό ZX81.
UFO απο το βιβλίο: 34 Amazing Gmaes for the 1K ZX81 του Alastair Gourlay!

View attachment 19524

Atari ST Basic. Χειρισμός με το mouse, shoot με το mouse button. Έκανα το random κατέβασμα πιό μικρό για να μην κατεβαίνει γρήγορα το alien ship και πιό έντονη την οριζόντια random θέση του. Το mouse διαβάζεται από το Gem.

edit: Διορθώθηκε για να παίζει σε όλα τα resolutions του ST. Προσθήκη μεταβλητών για βελτίωση του flicker.

19701

19700
 
Last edited:

konc

Retro Enthusiast
Comrade
Joined
Nov 8, 2012
Messages
415
Εδώ σε GW-BASIC του DOS 3.3, έτσι γιατί... δεν την αγαπάει κανείς και την έχουμε παραμελήσει :D Εντάξει το συγκεκριμένο είναι αστείο και δεν χρειάζεται τίποτα, απλώς βρήκα αφορμή να ξαναδώ τη GW (οκ πρόσθεσα και 2-3 απαραίτητες πινελιές για τους πιο παρατηρητικούς). Ένα πράγμα κατάλαβα απ' αυτό: Δεν μπορώ πλέον να διαβάσω τίποτα χωρίς indentation και coding conventions, με τίποτα. Α, και ότι δε με βλέπω να ξανακουμπάω basic σύντομα!

GWBASI01.png
GWBASI02.png
GWBASI03.png

Ακολουθεί edit με το listing, αφού το έγραψα μη βγάλει άλλος τα μάτια του με την εικόνα

Code:
5 CLS:PRINT TAB(32) "BULLSEYE"
10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
20 PRINT:PRINT:PRINT
30 PRINT "IN THIS GAME, UP TO 20 PLAYERS THROW DARTS AT A TARGET"
40 PRINT "WITH 10, 20, 30 AND 40 POINT ZONES. THE OBJECTIVE IS"
50 PRINT "TO GET 200 POINTS":PRINT
60 PRINT "THROW", TAB(20) "DESCRIPTION" TAB(45) "PROBABLE SCORE"
70 PRINT " 1" TAB(20) "FAST OVERARM" TAB(45) "BULLSEYE OR COMPLETE MISS"
80 PRINT " 2" TAB(20) "CONTROLLED OVERARM" TAB(45) "10, 20 OR 30 POINTS"
90 PRINT " 3" TAB(20) "UNDERARM" TAB(45) "ANYTHING":PRINT
100 DIM A$(20), S(20), W(10):M=0:R=0:FOR I=1 TO 20:S(I)=0:NEXT I
110 INPUT "HOW MANY PLAYERS";N:PRINT
115 IF N<1 OR N>20 GOTO 110
120 FOR I=1 TO N
130 PRINT "NAME OF PLAYER ";I;:INPUT A$(I)
140 NEXT I
150 R=R+1:PRINT:PRINT "ROUND";R
160 FOR I=1 TO N
165 T=0
170 PRINT:PRINT A$(I)"'S THROW";:INPUT T
180 IF T<>1 AND T<>2 AND T<>3 THEN PRINT "INPUT 1, 2 OR 3!":GOTO 170
190 ON T GOTO 200, 210, 220
200 P1=.65:P2=.55:P3=.5:P4=.5:GOTO 230
210 P1=.99:P2=.77:P3=.43:P4=.01:GOTO 230
220 P1=.95:P2=.75:P3=.43:P4=.05
230 U=RND(1)
240 IF U>=P1 THEN PRINT "BULLSEYE!! 40 POINTS!":B=40:GOTO 290
250 IF U>=P2 THEN PRINT "30-POINT ZONE!":B=30:GOTO 290
260 IF U>=P3 THEN PRINT "20-POINT ZONE!":B=20:GOTO 290
270 IF U>=P4 THEN PRINT "WHEW! 10 POINTS.":B=10:GOTO 290
280 PRINT "MISSED THE TARGET! TOO BAD.":B=0
290 S(I)=S(I)+B:PRINT "TOTAL SCORE =";S(I):NEXT I
300 FOR I=1 TO N
310 IF S(I)>=200 THEN M=M+1:W(M)=I
320 NEXT I
330 IF M=0 THEN 150
340 PRINT:PRINT "WE HAVE A WINNER!!":PRINT
350 FOR I=1 TO M:PRINT A$(W(I));" SCORED";S(W(I));"POINTS.":NEXT I
360 PRINT:PRINT "THANKS FOR THE GAME.":END
 
Last edited:
Top