-
Content Count
54 -
Joined
-
Last visited
-
Days Won
1
pmcgee last won the day on December 12 2024
pmcgee had the most liked content!
Community Reputation
23 ExcellentRecent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Is it possible to compile a dynamic linked library in one Delphi version and use it in older versions?
pmcgee replied to araujoarthur's topic in RTL and Delphi Object Pascal
I'm 100% not an expert on DLLs ... but I know people have even used Delphi compiled Dlls with eg C# applications. (Maybe it would be best to imagine a D10 vs D12 as being incompatible to that sort of degree?) -
Creating irregularly shaped multi-dim dynamic arrays
pmcgee replied to JohnLM's topic in Algorithms, Data Structures and Class Design
Going off your picture ... I'd say 'Yes', I think you are over-complicating things. But it is normal for us to come at a problem, trying out various ideas ... getting too close to the problem, going down dead ends, and then finally making some realisations that simplify the whole thing. Sometimes over and over and over - until hopefully achieving a simple and elegant solution. Consider just making a StringList. {$APPTYPE CONSOLE} program Project1; uses System.Classes, System.Types; type TState = (int, alpha); const Digits : set of char = ['0','1','2','3','4','5','6','7','8','9']; function Parse( s:String ) : TStringList; begin Result := TStringList.Create; var state : TState := int; var temp : string := ''; for var ch in s do case state of int: if ch in Digits then temp := temp+ch else begin if temp <> '' then result.Add(temp); temp := ch; state := alpha; end; alpha: if not (ch in Digits) then temp := temp+ch else begin if temp <> '' then result.Add(temp); temp := ch; state := int; end; end; if temp <> '' then result.Add(temp); end; begin var s:TStringList := Parse('12abcd345ghi6kl7mnopq890'); writeln( s.Text ); s.Free; readln; end. (Actually, with a StringList, all you'd really have to do is insert your chosen delimiter between runs of Alphas and Ints. But I wanted to model a bit more general approach.) -
There might be a marketing imperative, for new Delphi people (assuming there are some), to be able to immediately show zero-effort Windows programming, say bouncing a ball around a square ... with drag and drop components, and nice event-driven functionality. I think that addresses one market. However, I think as a programming enthusiast, coming to a new language like eg Swift, Haskell, Zig, or Odin .. or even C, C++, or Rust, then I want to understand the language itself and the expressions and idioms. Every time I am trying out new ideas (to me) in Delphi, or eg recently with the Advent of Code, I am writing a console program. I think it's the cleanest and simplest way. Sure there are certainly things, like events and messaging, that you will probably do with a gui program ... but yeah, I like the console.
-
The speed thing is addressed in the 'Behind the Scenes' video ... people who are the Olympic athletes at this event have entire solution systems pre-prepared for reading in and manipulating data, and then solving the puzzle. The head guy mentions that people will blast through, ignoring the text, maybe even guessing at the problem being asked in the quest for a fastest solution. He specifically says that that endeavour is not "programming" as such ... it's an entirely different beast.
-
Personally, I post everything that it takes to recreate my answer. And any sundry files (like Excel) I might employ to help along the way. Reproducible Researchβ’ π Ha. I feel this pain. π I have often found my code volume increasing like an expanding balloon ... until I have worked out what I should have been doing, then the cutting away begins ... and 80 lines drops back to 20. I have this currently in my solution for Problem 5 Part 2. 60 out of 120 lines became unnecessary as I realised the information I needed to gather ... but the exploration process was necessary to come to that understanding in the first place. π
-
If you can see it on the screen, you can capture video of your screen. If it's in the IDE, then eg Delphi has a CodeInsight bar that buzzes up a little for a moderate size project (like DevCpp), loading or analyzing some stuff, then disappears.
-
I was following an idea that I had thought of yesterday ... and now have the form of the solution. I was assuming the data was less strictly complete than it is, so in reality it's not so hard actually.
-
I made a quick video of an (unsolved atm) part I liked of Q5-2 ...
-
@JohnLM ... (Throwing a possible small spanner) ... I'm not sure from the gif ... are you sorting the two lists?
-
One thing that is part of the challenge, from my perspective ... is when you can deal with Part 2 with only a reasonably small modification of your Part 1 solution. Maybe it's just me, but I find that very satisfying when it happens. π
-
I don't think you should be bothered about watermarks. In my favourite 'podcast with slides' of well over 100 episodes, the 'Activate Windows' logo has become an expected, even demanded, regular character.
-
function: how to return nil
pmcgee replied to jesu's topic in Algorithms, Data Structures and Class Design
@jesu I see this was a while back, but I'd encourage you to look up the idea of an Optional type. (One of) the points of an optional type, is that it doesn't reduce the value space of your inhabited type. Using 'NaN' or '-1' or whatever as a magic value might interfere with the validity of your use of the Double value. With an optional type , the inhabited type is uncontaminated by any other interpretation or usage. You can look at what it looks like in eg Spring4D, but here's the basic idea : type Maybe_Double = record // or Optional_Double ok : boolean; d : double; end; function Safe_Sqrt( i:integer ) : Maybe_Double; begin if i<0 then result.ok := false else begin result.ok := true; result.d := sqrt(i); end; end; begin for var i:= -2 to 2 do begin var ss := Safe_Sqrt(i); if ss.ok then writeln(i, ' ', d) else writeln(i, ' ','Undefined'); end; end. PS : Another feature of an optional type is that all uses of the inhabited type transfer into the "optional world". // If you have a function F( d:double ) : string, // then you can automatically have an 'identical' function OptF( od:maybe_double ) : maybe_string; begin if od.ok then exit( F(od) ) else exit( <the nil case> ) end; -
@JohnLM Great. This is perfectly reasonable .. for at least two reasons. 1) The challenge is about achieving a solution - dissecting the problem in a way that makes it solvable. 2) Eg in the day 2 and 3 problems, I put the data in Excel to manipulate it around, get a perspective on the contents, and to provide results to crosscheck against while I am only part way towards constructing my approach. I have kept them in my Github repo. 3) Also, some of the challenge is just reading in the data ... which can be sometimes tedious and/or obvious. I have used Excel and Notepad++ to make the data into a Delphi unit holding the info, when moving text with code was unrewarding. PS : There's a cool video from the guy that creates and runs the challenges from very recently. People solve the problems in many different ways - and not just with code. CppNorth - Keynote: Advent of Code, Behind the Scenes - Eric Wastl
-
Done. I've never used these before. π
-
I'm lagging a little bit behind ... my solutions are here : https://github.com/pmcgee69/Advent-of-Code-2024/ My ultimate aim is to try to use a functional approach ... and to get ideas for better syntax for Delphi into the future. I'd really like to also solve in Rust and C++, for the learning but also for the ideas on syntax. I will definitely try to lean on eg Claude.io to work out solutions in those two. There's only so much time available!