feat: add cold-code-challenge
This commit is contained in:
parent
9710e41b97
commit
9a67c1c317
145
cold-code-challenge/README.md
Normal file
145
cold-code-challenge/README.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
# Cold Code Challenge - Random Large Integer Sorting Edition
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
|
||||||
|
Solve an algorithmic problem involving sorting an array of random unique large
|
||||||
|
integers, and return a specific compressed part of the output.
|
||||||
|
The solution that ***consumes the least energy*** wins.
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
**Advent of Energy:**
|
||||||
|
You are given an array of random unique integers, and you need to sort them in
|
||||||
|
non-decreasing order. Instead of outputting the entire sorted array, your task
|
||||||
|
is to calculate the sum of all elements in the sorted sequence, where each
|
||||||
|
element is multiplied by its position index (starting from 0).
|
||||||
|
|
||||||
|
**Input:**
|
||||||
|
|
||||||
|
- A random array of unique integers of size up to 1,000,000, with values
|
||||||
|
represented as 64-bit signed integers, ranging from
|
||||||
|
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
|
||||||
|
- Calculate the sum of all elements in the sorted array, where each element is
|
||||||
|
multiplied by its position index (starting from 0), and print this sum.
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
|
||||||
|
1. **Execution Time Limit:**
|
||||||
|
The solution must terminate within 30 seconds for all inputs.
|
||||||
|
Solutions that do not complete before the timeout will be discarded.
|
||||||
|
|
||||||
|
2. **Platform:**
|
||||||
|
All submissions will be run on a standardized hardware setup
|
||||||
|
(Intel® Core™ i9-13900H) with Ubuntu 22.04 for fair comparison of
|
||||||
|
energy consumption.
|
||||||
|
|
||||||
|
3. **Language Support:**
|
||||||
|
Submissions can be made in C, C++, Python, Go, Rust, Scheme, Racket,
|
||||||
|
or Assembly.
|
||||||
|
|
||||||
|
4. **Energy Profiling Tool:**
|
||||||
|
Solutions will be evaluated using Intel's **RAPL** or similar energy
|
||||||
|
measurement tools.
|
||||||
|
|
||||||
|
5. **Submission Requirements:**
|
||||||
|
Each submission must be a single source file. Participants must also
|
||||||
|
provide the command line used to build the executable binary, which
|
||||||
|
must rely only on packages and dependencies available in the
|
||||||
|
Ubuntu 22.04 package repository.
|
||||||
|
|
||||||
|
6. **Implementation Restrictions:**
|
||||||
|
The sorting algorithm must be an original implementation, and participants
|
||||||
|
are not allowed to use existing sorting library functions (e.g., `sorted()`
|
||||||
|
in Python or `std::sort` in C++). However, performance libraries such as
|
||||||
|
NumPy, OpenBLAS, SIMD intrinsics, etc., may be used for optimization.
|
||||||
|
|
||||||
|
7. **Submission Requirements:**
|
||||||
|
Each submission must be a single source file.
|
||||||
|
Participants must also provide the command line used to build and run the
|
||||||
|
solution, which must rely only on packages and dependencies available in the
|
||||||
|
Ubuntu 22.04 package repository.
|
||||||
|
|
||||||
|
## Submission Limit
|
||||||
|
|
||||||
|
Participants are allowed to submit their solution up to three times.
|
||||||
|
The first two submissions can be used to get feedback on execution time and
|
||||||
|
energy consumption, and the third submission will be considered the final one.
|
||||||
|
|
||||||
|
## Evaluation Criteria
|
||||||
|
|
||||||
|
1. **Correctness:**
|
||||||
|
The sum must be computed correctly.
|
||||||
|
|
||||||
|
2. **Energy Consumption:**
|
||||||
|
The average energy consumption will be recorded over multiple runs of
|
||||||
|
various array size and content, and the solution with the lowest average
|
||||||
|
energy wins. In case of close ties (taking into account noise from
|
||||||
|
multiple runs), solutions will be ranked based on execution time as the
|
||||||
|
second criterion.
|
||||||
|
|
||||||
|
3. **Execution Time:**
|
||||||
|
The time limit for each execution is capped at 30 seconds.
|
||||||
|
|
||||||
|
|
||||||
|
## Example Solution (Python - Sum Version with Integers)
|
||||||
|
|
||||||
|
```python
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def energy_efficient_sort(arr):
|
||||||
|
sorted_arr = sorted(arr)
|
||||||
|
# Calculate the sum of all elements, each multiplied by its position index (starting from 0)
|
||||||
|
return sum(i * sorted_arr[i] for i in range(len(sorted_arr)))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Read input from file
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print("Usage: python solution.py <input_file>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
input_file = sys.argv[1]
|
||||||
|
with open(input_file, 'r') as f:
|
||||||
|
arr = [int(line.strip()) for line in f]
|
||||||
|
|
||||||
|
result = energy_efficient_sort(arr)
|
||||||
|
print(result)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sample Input File
|
||||||
|
|
||||||
|
Create a text file named `input.txt` with each integer on a new line. For example:
|
||||||
|
```
|
||||||
|
314159265
|
||||||
|
271828182
|
||||||
|
-161803398
|
||||||
|
141421356
|
||||||
|
-223606797
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then run the example solution with the command:
|
||||||
|
```
|
||||||
|
python3 solution.py input.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
This last command should print:
|
||||||
|
```
|
||||||
|
2193160920
|
||||||
|
```
|
||||||
|
|
||||||
|
Use the following command to measure energy consumption:
|
||||||
|
```
|
||||||
|
perf stat -e power/energy-pkg/ python3 solution.py input.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Measurement Process
|
||||||
|
|
||||||
|
1. **Run the Code:**
|
||||||
|
Each solution will be executed on the same hardware platform, with energy
|
||||||
|
consumption measured using the profiling tool.
|
||||||
|
|
||||||
|
2. **Energy Profiling Command:**
|
||||||
|
A script will manage the execution, ensuring energy usage is recorded
|
||||||
|
accurately.
|
Loading…
Reference in New Issue
Block a user