LINUX.ORG.RU

История изменений

Исправление 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
❯