Size: a a a

2020 April 26

а

а кто это in Go-go!
не глядя
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Рабочий вариант на бинарном дереве: https://pastebin.com/aB4J2qBd
Вариант на scanf и мапе, но не проходящий по времени: https://pastebin.com/xFiHW2nk

Выше профилировка scanf:
источник

d

dmitri💡 in Go-go!
а кто это
не глядя
Садись, пять
источник

RS

Roman Sharkov in Go-go!
Dmitriy 😎 Smotrov
Рабочий вариант на бинарном дереве: https://pastebin.com/aB4J2qBd
Вариант на scanf и мапе, но не проходящий по времени: https://pastebin.com/xFiHW2nk

Выше профилировка scanf:
зачем pastebin если есть play.golang.org?
источник

DS

Dmitriy 😎 Smotrov in Go-go!
а кто это
а вот массивы могут
Можно попробовать, но тогда все равно алгоритм будет сложнее... у меня числа от 0 до 100 в тексте, нужно будет приводить к 3м... а это все равно сложнее, чем на с++

#include <iostream>
#include <map>

using namespace std;

int main()
{
   int k;
   cin >> k;

   map<unsigned char, int> result;

   for(int i = 0; i < k; i++)
   {
       int n;
       cin >> n;
       for(int j = 0; j < n; j++)
       {
           unsigned int value;
           cin >> value;

           result[value]++;
       }
   }

   map<unsigned char, int>::const_iterator it;
   for(it = result.begin(); it != result.end(); ++it)
   {
       for(int i = 0; i < it->second; i++)
           cout << (int)(it->first) << " ";
   }
   return 0;
}
источник

DE

Dmitry Ermakovich 🐍... in Go-go!
а кто это
strings.Contains
Contains для массивов глядите в библиотеке go-funk, там и type-safe реализации есть, и универсальная
Upd: или просто funk, ну вы найдете
источник

RS

Roman Sharkov in Go-go!
Dmitriy 😎 Smotrov
Можно попробовать, но тогда все равно алгоритм будет сложнее... у меня числа от 0 до 100 в тексте, нужно будет приводить к 3м... а это все равно сложнее, чем на с++

#include <iostream>
#include <map>

using namespace std;

int main()
{
   int k;
   cin >> k;

   map<unsigned char, int> result;

   for(int i = 0; i < k; i++)
   {
       int n;
       cin >> n;
       for(int j = 0; j < n; j++)
       {
           unsigned int value;
           cin >> value;

           result[value]++;
       }
   }

   map<unsigned char, int>::const_iterator it;
   for(it = result.begin(); it != result.end(); ++it)
   {
       for(int i = 0; i < it->second; i++)
           cout << (int)(it->first) << " ";
   }
   return 0;
}
так… стоп… числа или цифры?!
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Dmitry Ermakovich 🐍
Contains для массивов глядите в библиотеке go-funk, там и type-safe реализации есть, и универсальная
Upd: или просто funk, ну вы найдете
Т.е. из коробки ничего нет, чтобы прочитать число из текста так же быстро, как с++?
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Roman Sharkov
так… стоп… числа или цифры?!
Числа, неотрицательные, целые, от 0 до 100
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Roman Sharkov
если тормоза и правда в концертации тогда могу предложить запрещённый приём из рязряда тёмной магии, https://github.com/valyala/fastjson/blob/v1.5.1/util.go#L8
Попробую, но это, не числа. Но для хешмапа подойдет
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Dmitriy 😎 Smotrov
Попробую, но это, не числа. Но для хешмапа подойдет
Результат с деревом:

// BenchmarkMergeArrays-8           2  770636634 ns/op   924104 B/op     1233 allocs/op

Результат с хешмапой + черная магия b2s
// BenchmarkMergeArrays-8             2  786696061 ns/op  1503060 B/op   179976 allocs/op

Черная магия выглядит проще по коду, но тесты с ней ходить паралельно перестали)
источник

DP

Daniel Podolsky in Go-go!
Dmitriy 😎 Smotrov
Рабочий вариант на бинарном дереве: https://pastebin.com/aB4J2qBd
Вариант на scanf и мапе, но не проходящий по времени: https://pastebin.com/xFiHW2nk

Выше профилировка scanf:
ридер и райтер буферизованные пробовали?
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Daniel Podolsky
ридер и райтер буферизованные пробовали?
Да, стоит и то и другое. Читаю через bufio.Scanner, пишу bufio.Writer
источник

RS

Roman Sharkov in Go-go!
Dmitriy 😎 Smotrov
Результат с деревом:

// BenchmarkMergeArrays-8           2  770636634 ns/op   924104 B/op     1233 allocs/op

Результат с хешмапой + черная магия b2s
// BenchmarkMergeArrays-8             2  786696061 ns/op  1503060 B/op   179976 allocs/op

Черная магия выглядит проще по коду, но тесты с ней ходить паралельно перестали)
чёрную магию можно в данном случае использовать только крайне аккуратно. Только если мы абсолютно уверены, что строка не утечёт никуда дальше и []byte под ней не изменится
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Dmitriy 😎 Smotrov
Да, стоит и то и другое. Читаю через bufio.Scanner, пишу bufio.Writer
Сори, в бенчмарке, который приложил выше не включил bufio.Writer, вот результат с ним:

// BenchmarkMergeArrays         2  760506584 ns/op   375768 B/op     1073 allocs/op

Меньше аллоков и памяти, но скорость та же
источник

RS

Roman Sharkov in Go-go!
Dmitriy 😎 Smotrov
Сори, в бенчмарке, который приложил выше не включил bufio.Writer, вот результат с ним:

// BenchmarkMergeArrays         2  760506584 ns/op   375768 B/op     1073 allocs/op

Меньше аллоков и памяти, но скорость та же
в задаче как у вас можно обойтись и без аллокаций вовсе, на самом деле
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Roman Sharkov
в задаче как у вас можно обойтись и без аллокаций вовсе, на самом деле
Это скорее всего аллоки на подготовку тестовых данных, сейчас исключу их
источник

DP

Daniel Podolsky in Go-go!
А формулировка задачи какая?
источник

DP

Daniel Podolsky in Go-go!
Сканф же тормоз во всех языках. Может, он не нужен?
источник

DS

Dmitriy 😎 Smotrov in Go-go!
Daniel Podolsky
Сканф же тормоз во всех языках. Может, он не нужен?
Да, я реализация с ним не проходит тесты, я использовал чтение байт и подсчет чисел в дереве... ну или черную магию b2s и хешмапу, как писали выше
источник