Advent of Code 2023

Übergeordnete Themen zum gesamten Paket passend
Antworten
FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Advent of Code 2023

Beitrag von FDominicus »

Ist auf dem Weg. Ich habe mir mal heute Aufgabe 1 in Windev vorgenommen
Nur der Part 1 derzeit, aber vielleicht mag ja noch jemand mitmachen und es verbessern.
Ich schreib’, das ganze mit Windev 28 64 bit auf Windows 11,
mal sehen auf, wie viel ich davon Lust habe ...
AdventOfCode-2023.zip
AOC Day 01 Part 01
(1008.3 KiB) 74-mal heruntergeladen

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Advent of Code 2023

Beitrag von FDominicus »

Nur weil ich es kann habe ich das mal chatgpt machen lassen. Es hat die Beschreibung nicht richtig verstanden aber mit etwas Händchen halten kam da heraus:

Code: Alles auswählen

// Open the file for reading


// Function to extract calibration values from a line and store in the database
Function ProcessAndStoreData(line)
    // Finding the position of the first digit (0-9)
    firstDigitPosition = -1;
    for i = 1 to Length(line)
        if IsNumeric(SubString(line, i, 1)) then
            firstDigitPosition = i;
            Break;
        endIf;
    endFor;

    // Finding the position of the last digit (0-9)
    lastDigitPosition = -1;
    for i = Length(line) to firstDigitPosition by -1
        if IsNumeric(SubString(line, i, 1)) then
            lastDigitPosition = i;
            Break;
        endIf;
    endFor;

    // Extracting the first and last digits
    firstDigit = SubString(line, firstDigitPosition, 1);
    lastDigit = SubString(line, lastDigitPosition, 1);

    // Combining the digits to form a two-digit number
    calibrationValue = Integer(firstDigit) * 10 + Integer(lastDigit);

    // Inserting data into the database
    // HAdd(TableName, HFormat("ReadLine, FirstDigit, LastDigit, Sum", line, firstDigit, lastDigit, calibrationValue));
EndFunction

/
Der Code zum Auslesen von der Datei und dem Eintrag in die Datenbank ist noch nicht in Ordnung, was man aber sicher ändern kann...
Ich habe meinen Code erst mal ohne chatgpt geschrieben und dabei folgende Verständnisfehler gehabt, Arbeitsweise von Position

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Advent of Code 2023

Beitrag von FDominicus »

Part 02 habe ich mit brute force gelöst:

Code: Alles auswählen

FUNCTION PUBLIC  combineFirstAndLastNumberFromString(sText is string): int
nVonVorne, nVonHinten	are int 
nResult					is int 
nTemp is int
actChar is string
sActString is string
nVonVorne = -1

FOR i = 1 TO sText.Length() 
	actChar = sText[[i]]
	IF CharactType(actChar) = ctNumeric  THEN
		IF nVonVorne < 0 THEN
			nVonVorne = StringToNum(actChar)
			nVonHinten = nVonVorne
		ELSE 
			nVonHinten = StringToNum(actChar)
		END
	ELSE
		sActString = sText[[i TO]]
		IF nVonVorne < 0 THEN
			nVonVorne = findNumberFromEnglishIn(sActString)
			nVonHinten = nVonVorne
		ELSE
			nTemp = findNumberFromEnglishIn(sActString)
			IF nTemp > 0 THEN
					nVonHinten = nTemp
			END
		END
	END
	
	
END
nResult = nVonVorne * 10 + nVonHinten
RETURN nResult

dazu: 
FUNCTION findNumberFromEnglishIn( aString): int
	arrNumbersInEnglisch is array of string = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
	i is int = 1
	nResult is int = -1
	FOR EACH item OF arrNumbersInEnglisch 
		IF aString[[1 TO item.Length()]] = item THEN
			nResult = i
			RETURN nResult
		END
		i++
	END
	RETURN nResult


Das Problem, die Namen können ineinander übergehen: nineight -> 9 8
Die Laufzeit für das Problem ist schon bemerkbar ...
aber was soll's

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Advent of Code 2023

Beitrag von Herbert »

https://adventofcode.com/

Ich habe den Calendar auf die Schnelle nicht begriffen. Wo findet man die Parts?

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Advent of Code 2023

Beitrag von FDominicus »

Wenn Sie auf der Hauptseite sind, gibt es Zahlen, auf die Zahlen klicken 1 -> Day 01 Aufgabe
Man muß erst Part1 lösen, um dann die Anforderungen für Part 2 zu bekommen.

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Advent of Code 2023

Beitrag von Herbert »

:)
Alles klar. Tag 1 geschafft.
Part1=0.02 sec
Part2=0.03 sec

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Advent of Code 2023

Beitrag von FDominicus »

Wie gelöst?

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Advent of Code 2023

Beitrag von Herbert »

Part 2

Code: Alles auswählen

ArrayAdd(arrsnum,"one")
ArrayAdd(arrsnum,"two")
ArrayAdd(arrsnum,"three")
ArrayAdd(arrsnum,"four")
ArrayAdd(arrsnum,"five")
ArrayAdd(arrsnum,"six")
ArrayAdd(arrsnum,"seven")
ArrayAdd(arrsnum,"eight")
ArrayAdd(arrsnum,"nine")
ArrayAdd(arrsnum,"zero")
time1=Now()
sBUf=fReadLine(nFile,Charact(10))
LOOP
	IF sBUf="" _OR_ sBUf=EOT THEN
		fClose(nFile)
		BREAK
	END
	ListAdd(LIST_TestDataStringsDay02,sBUf)
	sres=findnumberschar(sBUf,arrsnum)
	ListAdd(LIST_CalculatedDigitsDataDay02,sres)
	nsum+=Val(sres)
	sBUf=fReadLine(nFile,Charact(10))
END
time2=Now()
//Info(""Fertig erstellt ""+NumToString(l,"3d")+"/"+NumToString(k,"3d"))
EDT_SumResults1=nsum
mit

Code: Alles auswählen

PROCEDURE findnumberschar(sbuf,arrsnum)
i,l,m are int
nlen is int
npos1,npos2,npos3 are int
schar1,schar2 are strings
nlen=sbuf.Length()
FOR i=1 _TO_ nlen
	IF IsNumeric(sbuf[i]) THEN
		schar1=sbuf[i]
		npos1=i
		BREAK
	END
END
FOR i=nlen _TO_ 1 STEP -1
	IF IsNumeric(sbuf[i]) THEN
		schar2=sbuf[i]
		npos2=i
		BREAK
	END
END
l=Position(sbuf,arrsnum)
IF l>0 THEN
	npos3=npos1
	FOR i=1 TO 10
		l=Position(sbuf,arrsnum[i])
		IF l>0 THEN
			IF l<npos3 THEN
				npos3=l
				schar1=i
			END
			//break
		END
	END
	npos3=npos2
	FOR i=1 TO 10
		m=Position(sbuf,arrsnum[i],0,FromEnd)
		IF m>0 THEN
			IF m>npos3 THEN
				npos3=m
				schar2=i
			END
			//break
		END
	END
END
RESULT schar1+schar2
Habe deine Listen geklaut :)

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Advent of Code 2023

Beitrag von FDominicus »

Also recht ähnlich gelöst. Wie auf dem anderen Thread geschrieben, ich mag diese tiefe Verschachtelungen nicht.
Mir ist noch 'ne Idee gekommen es mit regulären Ausdrücken zu versuchen. Im Augenblick habe ich aber ein etwas Arbeit um die Ohren

Mal sehen vielleicht ma Wochenende. ...

Antworten