Seite 2 von 2

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 11:45
von __blackjack__
@Dennis89: Cool. 👍

Zum BASIC-Programm lesen lernen und auch zur Bedienung des (virtuellen) C64 lohnt sich vielleicht ein Blick in das Handbuch des Rechners. Im Grunde ist das ein BASIC-Kurs der nebenbei ein bisschen den Rechner erklärt. Die C64-Wiki-Seite zum Handbuch hat eine Übersicht was da so drin steht, und am Ende auch Links wo man das als PDF im Netz herunterladen kann: https://www.c64-wiki.de/wiki/Bedienungs ... mmodore_64

Was Dir natürlich zum Programm fehlt sind die (leider ebenfalls extrem virtuellen) Notizen, die man sich bei Programmen wo man nur ein bis zwei Zeichen für Variablennamen hat, im Grunde immer nebenbei auf Papier gemacht hat. Damit man in einem halben Jahr selbst noch weiss was das Programm macht ohne sich das wieder erarbeiten zu müssen. 🤓

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 12:06
von sparrow
Weil der Fokus hier gerade sehr auf BASIC fällt, hier ein kurzer Spotlight auf die Zeit nach den Maschinen der 90er: Irgendwann in den 90ern wurde Microsofts "Visual Basic" in der RAD-Umgebung sehr populär und gefühlt zieht sich das bis heute auch in Excel-Makros durch.

Und da gibt es auch unter Linux etwas, das sich an dem Konzept orientiert und auf BASIC setzt: Gambas (Wikipedia).

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 13:12
von nezzcarth
Seit Ende der 80er hat die Firma VTech einen (sehr rudimentären) BASIC Interpreter in seine Lerncomputer eingebaut, einschließlich Tutorial im Handbuch, was neben C64 und Taachenrechnern vielleicht weniger bekanntist. Da ist es mir zum ersten Mal begegnet. QBasic unter Dos war dann eine echte Offenbarung im Vergleich :) (Heute weiß ich allerdings nicht mehr, wie ich das ertragen habe ;) )

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 13:25
von sparrow
@nezzcart: Der hier? ♥️

Bild
Das Image wird irgendwann gehen, daher: Es zeigt einen VTech Genius Leader 2000.

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 16:29
von __blackjack__
@nezzcarth: Die Anzeigegrösse scheint mir eine Herausforderung zu sein. Zwei Zeilen á 20 Zeichen? Hat man da je mehr als eine Zeile Quelltext gleichzeitig gesehen? Ich habe seit dem ich letztes Jahr mal mit einem VIC-20 angefangen habe Programme zu schreiben, den deutlichen Einfluss von der 22×23 Anzeige dort gemerkt. Ist ja das gleiche BASIC wie im C64, aber meine Programme hatten auf dem VIC-20 deutlich kürzere Zeilen, weil das da einfach schneller unübersichtlich wird.

Für die VTech Genius Rechner gibt es ein SDK, dann kann man kompiliertes C verwenden statt interpretiertes BASIC: https://github.com/hotkeymuc/vgldk und anscheinend auch ein experimentelles CP/M. Ist ja ein Z80 Prozessor drin.

QBasic hat man ertragen weil man die ganzen schlechteren Alternativen noch frisch in Erinnerung hatte. Und irgendwie halt trotz Pascal, weil es vertrauter war. So war es jedenfalls bei mir. Und Visual Basic unter Windows, weil Windowsprogramme in C ziemlich gruselig waren und ich mir Delphi nicht leisten konnte.

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 17:49
von nezzcarth
@sparrow & __blackjack__: Fast, das Gerät war ein "Genius Leader 4-<sowieso>" mit immerhin schon vierzeiligem Display. Besonders gestört hat es mich, soweit ich mich entsinne, nicht; ich kannte es ja nicht anders. Was mich schon mehr gestört hat, war, wenn ich in der lokalen Bücherei mal wieder Bücher mit Code-Listings gefunden habe, die Befehle enthielten, die "meinem" BASIC fremd waren. Zum Beispiel "PEEK" und "POKE". Das nicht im Handbuch dokumentierte CLS funktionierte aber, immerhin. Irgendwann viel später habe ich dann mal alte Anzeigen (oder so) für "Simons' BASIC" für den C64 gefunden, die unter anderem mit der Anzahl der unterstützten Befehle geworben haben. Das fand ich lustig, aber damals hätte mich das in meiner Verzweiflung vmtl. sehr angesprochen :) Soweit ich herausfinden konnte, ähnelt das BASIC in diesen Geräten wohl MBASIC/BASIC-80 von Microsoft.

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 18:57
von __blackjack__
@nezzcarth: „4000 Quattro“ dann wahrscheinlich. Der Typ der das SDK maintained hat den wohl auch. Es gibt Fotos auf seiner Hackaday-Seite: V-Tech Genius Leader / PreComputer Hacking.

Die Geräte sind bei Kleinanzeigen.de anscheinend für 20—30 € zu haben. Falls Du Deinen nicht mehr hast und mit Retro-Hardware spielen möchtest. 😎

Microsoft-BASIC klingt plausibel. VTech hatte einen Apple II-Clone (VTech Laser 128) und dafür haben sie das BASIC von Microsoft lizensiert, so das Apple es nicht geschafft hat die aus dem Markt zu klagen. 😈 Die Geschäftsbeziehung zu Microsoft war also schon vorhanden.

Wären PEEK und POKE denn interessant gewesen? Programme die das verwenden sind ja nicht wirklich portabel. Beim Z80 braucht man in der Regel auch noch so etwas wie IN und OUT weil es bei dem Prozessor einen eigenen I/O-Adressraum gibt. PEEK & POKE sind Anzeichen dafür, dass die Leute, die das ins Programm geschrieben haben, selber gerne mehr/bessere BASIC-Befehle gehabt hätten. 😉

Re: Code-Golf

Verfasst: Mittwoch 23. Oktober 2024, 20:08
von Dennis89
Danke, habe mir die Links mal abgespeichert. Bin gerade noch an „Crafting Interpreters“ aus dem anderenThread 🤓


Grüße
Dennis

Re: Code-Golf

Verfasst: Samstag 26. Oktober 2024, 11:00
von nezzcarth
@__blackjack__: Du hast natürlich recht bzgl. PEEK und POKE. Allerdings wusste ich damals ja auch nicht so recht, was die eigentlich machen. Das waren für mich halt "mysteriöse" Befehle, die manchmal in Code Listings vorkamen, die ich irgendwo gefunden habe, und die halt dafür sorgten, dass fremder Code auf meinem Gerät nicht lief.

Re: Code-Golf

Verfasst: Freitag 15. November 2024, 20:49
von Dennis89
Hallo,

eine *.csv - Datei die so aufgebaut ist:

Code: Alles auswählen

#,Name,Type 1,Type 2,Total,HP,Attack,Defense,Sp. Atk,Sp. Def,Speed,Generation,Legendary
.
.
.
25,Pikachu,Electric,,320,35,55,40,50,50,90,1,False
.
.
.
95,Onix,Rock,Ground,385,35,45,160,30,45,70,1,False
Einmal lesbarer Code und dann so kurz ich konnte. Es ist Absicht, dass *nicht* `DictReader` genutzt wurde.

Code: Alles auswählen

#!/usr/bin/env python
from pathlib import Path
import csv


PATH_TO_CSV_FILE = Path("/home/dennis/PycharmProjects/Forum/pokemon.csv")
FIGHTER = "Pikachu"
ENEMY = "Onix"


def get_pokemons():
    with open(PATH_TO_CSV_FILE, "r", newline="", encoding="UTF-8") as csv_file:
        return list(csv.reader(csv_file, delimiter=","))


F = "Pikachu"
E = "Onix"
def s(p):p={p[1]:list(map(int,p[5:8])) for p in p[1:]};print(f"After {F} attacked {E}, {E} will have {p[E][0]-(p[F][1]-p[E][2])} HP")


def main():
    pokemons = get_pokemons()
    name_to_property = {pokemon[1]: list(map(int, pokemon[5:8])) for pokemon in pokemons[1:]}
    print(
        f"After {FIGHTER} attacked {ENEMY}, {ENEMY} will have {name_to_property[ENEMY][0] - (name_to_property[FIGHTER][1] - name_to_property[ENEMY][2])} HP")
    s(pokemons)


if __name__ == "__main__":
    main()
Geht's kürzer?

Grüße und viel Spass
Dennis

Re: Code-Golf

Verfasst: Sonntag 17. November 2024, 00:45
von __blackjack__
Von der Funktion ausgehend kann man 10 Zeichen einsparen. Ein paar offensichtliche Leerzeichen. Und dann geht umwandeln in eine Liste kürzer als mit `list()`, und man kann die Berechnung umstellen, damit die ohne Klammern auskommt:

Code: Alles auswählen

F="Pikachu"
E="Onix"
def s(p):P={p[1]:[*map(int,p[5:8])]for p in p[1:]};print(f"After {F} attacked {E}, {E} will have {P[E][2]-P[F][1]+P[E][0]} HP")
Edit: Noch ein Zeichen mehr eingespart:

Code: Alles auswählen

F="Pikachu"
E="Onix"
def s(p):P={p[1]:[*map(int,p[5:8])]for p in p[1:]};a,_,c=P[E];print(f"After {F} attacked {E}, {E} will have {c-P[F][1]+a} HP")

Re: Code-Golf

Verfasst: Sonntag 17. November 2024, 09:15
von Dennis89
Guten Morgen,

ja cool danke. Wäre der Lösungssatz nicht so lange, wäre es ein offizieller One-Liner was die Zeichenanzahl in einer Zeile angeht.


Grüße
Dennis

Re: Code-Golf

Verfasst: Sonntag 17. November 2024, 10:43
von Sirius3
Das map-Konstrukt ist recht lang, da lohnt es sich `int` zu wiederholen:

Code: Alles auswählen

def s(p):p={q[1]:q for q in p};print(f"After {F} attacked {E}, {E} will have {int(p[E][7])-int(p[F][6])+int(p[E][5])} HP")

Re: Code-Golf

Verfasst: Sonntag 17. November 2024, 11:51
von Dennis89
Das hatte ich gestern auch getestet, hatte aber nicht dran gedacht, dass ich in dem Fall dann die ganze Liste als Wert in das Wörterbuch schreiben kann.

Sehr cool, nur noch zwei Zeichen zu lang 😃


Danke und Grüße
Dennis