Advent of Code 2023
-
- Member
- Beiträge: 65
- Registriert: 9. Mai 2015, 08:19
Advent of Code 2023
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 ...
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 ...
-
- Member
- Beiträge: 65
- Registriert: 9. Mai 2015, 08:19
Re: Advent of Code 2023
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:
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
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
/
Ich habe meinen Code erst mal ohne chatgpt geschrieben und dabei folgende Verständnisfehler gehabt, Arbeitsweise von Position
-
- Member
- Beiträge: 65
- Registriert: 9. Mai 2015, 08:19
Re: Advent of Code 2023
Part 02 habe ich mit brute force gelöst:
Das Problem, die Namen können ineinander übergehen: nineight -> 9 8
Die Laufzeit für das Problem ist schon bemerkbar ...
aber was soll's
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
Die Laufzeit für das Problem ist schon bemerkbar ...
aber was soll's
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Advent of Code 2023
https://adventofcode.com/
Ich habe den Calendar auf die Schnelle nicht begriffen. Wo findet man die Parts?
Ich habe den Calendar auf die Schnelle nicht begriffen. Wo findet man die Parts?
-
- Member
- Beiträge: 65
- Registriert: 9. Mai 2015, 08:19
Re: Advent of Code 2023
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.
Man muß erst Part1 lösen, um dann die Anforderungen für Part 2 zu bekommen.
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Advent of Code 2023
Alles klar. Tag 1 geschafft.
Part1=0.02 sec
Part2=0.03 sec
-
- Member
- Beiträge: 65
- Registriert: 9. Mai 2015, 08:19
Re: Advent of Code 2023
Wie gelöst?
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Advent of Code 2023
Part 2
mit
Habe deine Listen geklaut
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
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
-
- Member
- Beiträge: 65
- Registriert: 9. Mai 2015, 08:19
Re: Advent of Code 2023
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. ...
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. ...