You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@
3
3
4
4
## Formatting
5
5
6
-
All entries should be formatted using the `Ctr-D`shortcut for both Lazarus and Delphi entries.
6
+
All source code should be formatted using the default formatting rules for Pascal code, which your IDE should provide. Both Lazarus and Delphi uses `Ctr-D`as a shortcut to format your code.
7
7
8
8
## Folder name for the entry
9
9
@@ -13,11 +13,11 @@ For example, using _Gustavo Carreno_ for the name, the folder would be `entries/
13
13
14
14
## Name of the executable binary
15
15
16
-
The executable binary follows the same rules has the entry folder above.
16
+
The executable binary follows the same rules has the entry folder above; therefore, on Windows, the above example's executable would be `gcarreno.exe` and on Linux, just `gcarreno`.
17
17
18
18
## Placement of the executable binary
19
19
20
-
The executable binary should be placed under a folder named `bin` below the root folder of this repository.
20
+
The executable binary should be placed under a folder named `bin` below the root folder of this repository (`../../../bin` relative to your source).
21
21
22
22
This folder is not present on the repository and is being ignored from the `.gitignore`.
23
23
@@ -57,7 +57,8 @@ The type is contained within the title and can be one of these types:
57
57
Subjects should be no greater than 50 characters, should begin with a capital letter and do not end with a period.
58
58
59
59
Use an imperative tone to describe what a commit does, rather than what it did. For example, use change; not changed or changes.
60
-
The Body
60
+
61
+
### The Body
61
62
62
63
Not all commits are complex enough to warrant a body, therefore it is optional and only used when a commit requires a bit of explanation and context. Use the body to explain the what and why of a commit, not the how.
Copy file name to clipboardExpand all lines: README.md
+42-17Lines changed: 42 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,36 +36,37 @@ The task is to write an Object Pascal program which reads the file, calculates t
36
36
```
37
37
38
38
## Entering The Challenge
39
-
Submissions will be via a `PR`( Pull Request) to this repository. \
39
+
Submissions will be via a `PR` (Pull Request) to this repository.
40
40
The challenge will run from the 10th of March until the 10th of May, 2024.
41
41
42
42
When creating your entry, please do as follows:
43
43
1. Create a folder under `entries` with your first initial and last name, e.g., for Gustavo Carreno: `entries/gcarreno`.
44
44
2. If you're worried about anonymity, because the Internet stinks, feel free to use a fictional one: Bruce Wayne, Clark Kent, James Logan, Peter Parker, Diana of Themyscira. Your pick!
45
45
3. Create a `README.md` with some content about your approach, e.g., `entries/gcarreno/README.md`.
46
46
4. Put all your code under `entries/<your name>/src`, e.g., `entries/gcarreno/src`.
47
-
5. If you need to provide a custom `.gitignore` for something not present in the main one, please do.
47
+
5. Send your binary to the `bin` folder off the root of this repository.
48
+
6. If you need to provide a custom `.gitignore` for something not present in the main one, please do.
49
+
7. Read the [CONTRIBUTING.md](./CONTRIBUTING.md) file for more details.
48
50
49
51
This challenge is mainly to allow us to learn something new. This means that copying code from others will be allowed, under these conditions:
50
52
1. You can only use pure Object Pascal with no calls to any operating system's `API` or external `C/C++` libraries. \
51
-
**There's been a bit of confusion about this restriction.**\
52
-
To clear that out: You can use any package/custom code you want.\
53
-
As long as it compiles cross-platform and itself is only pure Object Pascal.\
54
-
Anything from the `Jedi Project` or even `mORMmot` ( or anything else ), if it compiles, runs cross-platform it's allowed.
53
+
**There's been a bit of confusion about this restriction.**
54
+
-To clear that out: You can use any package/custom code you want.
55
+
-As long as it compiles cross-platform and itself is only pure Object Pascal.
56
+
-Anything from the `Jedi Project` or even `mORMmot` ( or anything else ), if it compiles, runs cross-platform it's allowed.
55
57
2. The code must have some sort of mention/attribution to the original author, in case you've used someone else's code.
56
58
3. It's not a blatant copy just for the sake of submission.
57
59
4. It adds something of value, not just a different code formatting.
58
60
5. All code should be formatted with the `IDE`'s default formatting tool.
59
61
60
-
**IMPORTANT**\
61
-
This challenge can be entered even if you only have access to the Community Edition of RAD Studio. \
62
-
I have a Windows VM, with RAD Studio installed, that will do the necessary cross compilation into my Linux host.
62
+
**IMPORTANT**
63
+
This challenge can be entered even if you only have access to the Community Edition of RAD Studio. I have a Windows VM, with RAD Studio installed, that will do the necessary cross compilation into my Linux host.
63
64
64
65
Submit your implementation and become part of the leader board!
65
66
66
67
## Rounding
67
68
68
-
Székely Balázs has provided code for rounding towards positive infinity per the original challenge.\
69
+
Székely Balázs has provided code for rounding towards positive infinity per the original challenge.
69
70
This will be the official way to round the output values:
70
71
```pas
71
72
function TBaseline.RoundEx(x: Double): Double;
@@ -96,7 +97,7 @@ end;
96
97
```
97
98
98
99
## Generating the measurements.txt
99
-
> **NOTE**\
100
+
> **NOTE**
100
101
> We now have both a Lazarus version and a Delphi version of the generator for both 32b and 64b.
101
102
102
103
In order to produce the One Billion Rows of text, we are providing the [source code](./generator) for the official generator, so we all have the same entry data.
@@ -110,7 +111,7 @@ In order to produce the One Billion Rows of text, we are providing the [source c
110
111
|**-n** or **--line-count \<number\>**| The amount of lines to be generated ( Can use 1_000_000_000 ) |
111
112
112
113
## Baseline
113
-
> **NOTE**\
114
+
> **NOTE**
114
115
> This is still a bit in flux, still needing to get the Delphi version done.
115
116
116
117
In order to verify the official output, we are providing the [source code](./baseline) for the official baseline.
@@ -147,6 +148,21 @@ Expected `SHA256` hash:
147
148
> Until then, this is the current one: `db3d79d31b50daa8c03a1e4f2025029cb137f9971aa04129d8bca004795ae524`
148
149
> There's also an archived version of the [baseline output](./data/baseline.output.gz)
149
150
151
+
## Differences From Original
152
+
I've decided that I would want this challenge to be turned way up to 11!
153
+
154
+
This means that there are some differences from the original.
155
+
156
+
The original results are calculated on a smaller set of weather stations: 400.\
157
+
While I haven't tabulated how many reside on the input file, we do not limit it to any number as we use the full ~40K stations present on `data/weather_stations.csv` to generate the input file.
158
+
159
+
Another difference is the machines these are run on.\
160
+
I'm using my own machine, with the specs mentioned on the [Results](#results) section bellow.\
161
+
I'm also allowing the use of the full 32 threads that my machine provides, where the original challenge limits it to 8.\
162
+
The original challenge also has a second results table with 10K stations and the use of all 64 threads.
163
+
164
+
With all this said, comparison with the original challenge should be made with this in mind.
165
+
150
166
## Results
151
167
These are the results from running all entries into the challenge on my personal computer:
152
168
- Ubuntu 23.10 64b
@@ -155,10 +171,18 @@ These are the results from running all entries into the challenge on my personal
155
171
- 250GB SSD
156
172
- 1TB HDD
157
173
158
-
| # | Result (m:s.ms): SSD | Result (m:s.ms): HDD | Compiler | Submitter | Notes | Certificates |
> After some tests performed by @paweld, it makes no sense to have an `HDD` run.
185
+
> I've removed that from the results
162
186
163
187
## Evaluating Results
164
188
Each contender is run 10 times in a row for both `SSD` and `HDD` using `hyperfine` for the time taking. \
@@ -183,7 +207,8 @@ A: Ubuntu 23.10 64b.
183
207
I'd like to thank [@paweld](https://github.com/paweld) for taking us from my miserable 20m attempt, to a whopping ~25s, beating the [Python script](https://github.com/gunnarmorling/1brc/blob/main/src/main/python/create_measurements.py) by about 4 and a half minutes.\
184
208
I'd like to thank [@mobius](https://github.com/mobius1qwe) for taking the time to provide the Delphi version of the generator.\
185
209
I'd like to thank [@dtpfl](https://github.com/dtpfl) for his invaluable work on maintaining the `README.md` file up to date with everything.\
186
-
I'd like to thank Székely Balázs for providing many patches to make everything compliant with the original challenge.
210
+
I'd like to thank Székely Balázs for providing many patches to make everything compliant with the original challenge.\
211
+
I'd like to thank [@corneliusdavid](https://github.com/corneliusdavid) for giving some of the information files a once over and making things more legible and clear.
187
212
188
213
## Links
189
214
The original repository: https://github.com/gunnarmorling/1brc\
0 commit comments