История изменений
Исправление rtxtxtrx, (текущая версия) :
Ну питон тормозом оказался с его 305 секундами:
❯ python test.py
min=-40.0, max=40.0, avg=0.0006985198499998723
/tmp 305s
❯ cat test.py
with open('data.txt') as fp:
min = 100.0
max = -100.0
avg = 0.0
count = 0
for line in fp:
val = float(line[line.find(';') + 1:])
min = val if val < min else min
max = val if val > max else max
avg += val
count += 1
avg /= count
print(f"{min=}, {max=}, {avg=}")
/tmp
❯ du -sh /tmp/data.txt
7.6G /tmp/data.txt
/tmp
❯ tail /tmp/data.txt
s;-19.61
s;-39.28
s;0.34
s;23.89
s;25.68
s;37.79
s;39.99
s;-6.86
s;31.15
s;-29.94
/tmp
❯ cat gen.py
import random
with open('data.txt', 'w') as fp:
for i in range(1_000_000_000):
fp.write(f"s;{round(random.random()*80-40,2)}\n")
Медленее 45 секунд в лоб на джаве (там результат для тридрипера???). Но я не понимаю, что этот тест меряет…
Я попробовал на C++ наговнокодить тож самое:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
ifstream file("/tmp/data.txt");
float min = 100.0;
float max = -100.0;
float avg = 0.0;
int count = 0;
if (file.is_open()) {
string line;
string val;
float temp;
while (getline(file, line)) {
val = line.substr(line.find(";") + 1);
temp = stof(val);
min = temp < min ? temp : min;
max = temp > max ? temp : max;
avg += temp;
++count;
}
}
avg /= count;
cout << "min=" << min << ", max=" << max << ", avg=" << avg << "\n";
}
Вышло:
❯ ./test
min=-40, max=40, avg=-0.000427344
/tmp 107s
❯
Нужно найти максимальную, минимальную и среднюю температуру по каждой локации за минимальное время
я только сейчас это прочел. там нужно мин/макс/сред для каждой деревни найти, а не просто… Все равно C++ расстраивает и выходит ненамного быстрее пистона, а потому Java тем более не нужна
Исправление rtxtxtrx, :
Ну питон тормозом оказался с его 305 секундами:
❯ python test.py
min=-40.0, max=40.0, avg=0.0006985198499998723
/tmp 305s
❯ cat test.py
with open('data.txt') as fp:
min = 100.0
max = -100.0
avg = 0.0
count = 0
for line in fp:
val = float(line[line.find(';') + 1:])
min = val if val < min else min
max = val if val > max else max
avg += val
count += 1
avg /= count
print(f"{min=}, {max=}, {avg=}")
/tmp
❯ du -sh /tmp/data.txt
7.6G /tmp/data.txt
/tmp
❯ tail /tmp/data.txt
s;-19.61
s;-39.28
s;0.34
s;23.89
s;25.68
s;37.79
s;39.99
s;-6.86
s;31.15
s;-29.94
/tmp
❯ cat gen.py
import random
with open('data.txt', 'w') as fp:
for i in range(1_000_000_000):
fp.write(f"s;{round(random.random()*80-40,2)}\n")
Медленее 45 секунд в лоб на джаве (там результат для тридрипера???). Но я не понимаю, что этот тест меряет…
Я попробовал на C++ наговнокодить тож самое:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
ifstream file("/tmp/data.txt");
float min = 100.0;
float max = -100.0;
float avg = 0.0;
int count = 0;
if (file.is_open()) {
string line;
string val;
float temp;
while (getline(file, line)) {
val = line.substr(line.find(";") + 1);
temp = stof(val);
min = temp < min ? temp : min;
max = temp > max ? temp : max;
avg += temp;
++count;
}
}
avg /= count;
cout << "min=" << min << ", max=" << max << ", avg=" << avg << "\n";
}
Вышло:
❯ ./test
min=-40, max=40, avg=-0.000427344
/tmp 107s
❯
Нужно найти максимальную, минимальную и среднюю температуру по каждой локации за минимальное время
я только сейчас это прочел. там нужно мин/макс/сред для каждой деревни найти, а не просто… Все равно C++ расстраивает и выхлдит ненамного быстрее пистона
Исходная версия rtxtxtrx, :
Ну питон тормозом оказался с его 305 секундами:
❯ python test.py
min=-40.0, max=40.0, avg=0.0006985198499998723
/tmp 305s
❯ cat test.py
with open('data.txt') as fp:
min = 100.0
max = -100.0
avg = 0.0
count = 0
for line in fp:
val = float(line[line.find(';') + 1:])
min = val if val < min else min
max = val if val > max else max
avg += val
count += 1
avg /= count
print(f"{min=}, {max=}, {avg=}")
/tmp
❯ du -sh /tmp/data.txt
7.6G /tmp/data.txt
/tmp
❯ tail /tmp/data.txt
s;-19.61
s;-39.28
s;0.34
s;23.89
s;25.68
s;37.79
s;39.99
s;-6.86
s;31.15
s;-29.94
/tmp
❯ cat gen.py
import random
with open('data.txt', 'w') as fp:
for i in range(1_000_000_000):
fp.write(f"s;{round(random.random()*80-40,2)}\n")
Медленее 45 секунд в лоб на джаве (там результат для тридрипера???). Но я не понимаю, что этот тест меряет…
Я попробовал на C++ наговнокодить тож самое:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
ifstream file("/tmp/data.txt");
float min = 100.0;
float max = -100.0;
float avg = 0.0;
int count = 0;
if (file.is_open()) {
string line;
string val;
float temp;
while (getline(file, line)) {
val = line.substr(line.find(";") + 1);
temp = stof(val);
min = temp < min ? temp : min;
max = temp > max ? temp : max;
avg += temp;
++count;
}
}
avg /= count;
cout << "min=" << min << ", max=" << max << ", avg=" << avg << "\n";
}
Вышло:
❯ ./test
min=-40, max=40, avg=-0.000427344
/tmp 107s
❯