Chat:Ru/2020-08-20
vrabosh: а в математики куча формул есть которые вродь как упращают чтото) нужно найти шпаргалку красивую и повешать на стену.
vrabosh: ты это знал?
a/b == n/i , a*i == b*n
а я нет...
tutubalin: хотя бы диалог, а не монолог. это прогресс
BorisZ: это если b != 0 & i !=0, на этом куча разных фокусов - софизмов построено, когда доказывают что 2 * 2 == 5 вполне себе стройно
BorisZ: читал какие-то рассуждения чувака, что школа не учит предметам конкретным, а учит человека жить в обществе
BorisZ: любой предмет с вероятностью 90% в жизни не пригодится конкретному человеку
BorisZ: а пригодится умение жить в коллективе, дружить, ссориться, подчиняться и так далее
BorisZ: то есть могли бы алхимии с астрологией - получилось бы то же самое
BorisZ: *учить )
BorisZ: а то что понадобится - человек сам изучит когда нужда заставит
gybson_samara: vrabosh это вроде не формула, а простое уравнение =)
gybson_samara: из него же a = b*n/i :)
Uljahn: пропорция называется, не?
gybson_samara: простая алгебра, 6 класс
gybson_samara: не, похоже 8ой
gybson_samara: чет типа такого https://gdz.ru/class-8/algebra/mordkovich-uglublennyj-zadachnik/1-item-29/
tutubalin: перенос в другую часть уравнения. минус меняется на плюс, умножение на деление.
tutubalin: доказывается легко: мы можем умножить обе части уравнения на любое конечное число кроме нуля, и оно по-прежнему будет справедливо
Uljahn: gybson_samara: 6-й класс https://school-assistant.ru/?predmet=matematika&theme=proporzii
gybson_samara: Uljahn это в шестом классе =)
mykeich: никогда не любил школу, да и вообще мне все не нравится:)
Uljahn: поворчать-то нравится:)
Uljahn: Automaton2000: что нам ещё остаётся, старичкам-то? :(
Automaton2000: да потому что ты не в теме
gtj: http://chat.codingame.com/pastebin/12ab8731-13ce-4680-a626-8633fa005737
gtj: я и 21 попробовал и 2е попробовал
gtj: я даже не знаю что еще пробовать причем в дебагере оно торчит
tutubalin: прерываниями уже мало кто пользуется. раз под винду пишешь, можешь использовать Window API.
tutubalin: я по молодости MessageBox из асма запускал. потом бросил это баловство
gtj: так не интересно всю жизнь писал на прерываниях
tutubalin: вот это тебя, видимо, и доканало )
gtj: кароче прикинь в памяти есть но не печатает
735487: переходи под дос. там до сих пор прерывания ))
gtj: просто предлагает любую клавишу нажать
gtj: я тут посмотрел во что все превратилось под виндой в вики
tutubalin: лучше давай я тебя научу как задачки твои решать
gtj: это не то что было 10 лет назад
tutubalin: ну да. если человек остановился в развитии, это не значит, что и мир остановился
gtj: одни пуши калы ни одной команды ассемблера как на балалайке играем прям(
tutubalin: вот твоя задачка про фибоаччи: https://euler.jakumo.org/problems/view/25.html
tutubalin: решаем на калькуляторе
tutubalin: нам нужно число, у которого 1000 цифр. это значит, что десятичный логарифм этого числа больше или равен 1000, но меньше 1001
gtj: просто ты понимаешь что такое когда в асемблере под виндой принт печатает строку?
tutubalin: 1000 <= lg x < 1001
tutubalin: число фибоначчи можно найти по формуле Бине
gtj: прикольно мы живем доков нет у нас 86 90 годов документация боле менее внятная документация у насма
tutubalin: нам не нужна супер точность, поэтому второе слагаемое можно убрать. получаем примерную формулу F(N ) = (ϕ^N)/C
tutubalin: где ϕ - золотое сечение, а C - корень из 5
tutubalin: берём десятичный логарифм. lg(F(N)) = lg((ϕ^N)/C) = lg(ϕ)*N - lg C
tutubalin: здесь мы используем формулы, что при логарифмировании возведение в степень заменяется на умножение, а деления - на вычитание
tutubalin: получаем неравенство: lg(ϕ)*N - lg C >= 1000
tutubalin: переносим lg C в правую часть: lg(ϕ)*N >= 1000 + lg C
gtj: http://chat.codingame.com/pastebin/0fc454d9-3281-4a15-a0ca-85b39f5da35d
gtj: ну какой принт вы чо смеетесь чтоль
tutubalin: переносим lg(ϕ) в правую часть: N >= (1000 + lg C) / lg(ϕ)
gtj: ты не правильно сайт ейлера понял
tutubalin: теперь достаём калькулятор и считаем
gtj: надо просто прогу написать
tutubalin: зачем писать прогу, если это решается на калькуляторе?
gtj: пишешь прогу которая решает ту задачу которую ты открыл
gtj: ну потомучто задачи по нарастающей идут
gtj: щас я еще помучаюсь с выводом если ниче не найду буду в две строки вывод делать тогда на асме но хз это не канон
gtj: канон когда 20 строк для 1 строки
tutubalin: ок, вот тебе прога: console.log(Math.ceil((1000+Math.log10(5)/2)/Math.log10((1+Math.sqrt(5))/2)))
tutubalin: посчитаем быстрее, чем любая твоя прога на асме
gtj: акстись на асме ку редактор весит килобайты)
vrabosh: а у меня код на питоне байты:)
gtj: так тот редактор делает все что надо для прогера там тебе и хекс и зреномекс и все что надо есть
tutubalin: если ты не знаешь математику и алгоритмы, асм тебе не поможет
tutubalin: у нас на первом курсе было суеверие, что чтобы оптимизировать программу, её надо написать на асме. с опытом это проходит.
vrabosh: gtj , webasm попробуй, будешь в браузере крутые штуки рисовать. показывать нам..
vrabosh: чтоб оптимизировать программу надо знать математику)
gtj: не ну вообщето она работает
gtj: кинь исходники откуда ты взял это
tutubalin: gtj понятное дело, что в памяти строка есть, если ты через db её добавил. ты можешь вообще весь код удалить и db оставить, и строчка в памяти будет
Uljahn: webasm - он же wasm - преемник asm.js, на wasm много крутых штук уже сделано (и можно легко сделать - в wasm можно компилить из плюсов и раста), он специально заточен под производительные вычисления в браузере
Uljahn: https://github.com/iodide-project/pyodide/ - питон с либами в браузере, например
gtj: я щас читаю как разлок сделать
gtj: ее добавлять надо в опр регистр
gtj: я наверно каретку какуюнибудь забыл
gtj: просто ребят на асме можно паралелить и через ++ в атом пихать
gtj: а атомы в таск можно засунуть
Uljahn: gtj: тебя уже предупреждали, чтобы не флудил? приучайся писать развёрнутые сообщения, а не отрывки, ты не в чате линейки
gtj: кк вот видимо но тут про иа https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html
mykeich: очуметь, в питоне нет констант
Uljahn: в питоне и переменных нет
Uljahn: есть объекты и имена, которые привязаны к ним в пределах области видимости, или типа того
mykeich: какой странный контраст с java где пишешь тучу кода, лиж бы не дать доступ к данным объекта, а тут бери ломай все что хочешь
Uljahn: читал такое выражение, что питон - для взрослых людей, которые понимают, что делают)
mykeich: ну не знаю... наверное у тех кто в продуктиве на питоне пишет в команде полно историй на тему поиска бага из-за того что кто то что то где то в рантаме меняет объект
mykeich: как си искать место где вышел за придела массива и пытаешься понять почему у тебя мусор в переменных:)
vrabosh: mykeich , а что ломать, тыже не самовредитель же)
BorisZ: есть условно приватные поля - начинаются с __
gtj: нашел интерапты и тут все по другому не то чему меня учили:disappointed: простите что вмешался)
gtj: тоесть я могу спалить по незнанке свой комп
gtj: надо найти юзерспейс интерапты
Uljahn: а что плохого в изменении объекта в рантайме? есть даже такой приём - monkey patching, иногда может применяться, а то, что между членами команды не налажено взаимодействие и следование гайдлайнам - это проблема команды, а не языка
Uljahn: то же самое с eval(), exec() и compile() - сами по себе команды не плохие и не хорошие, но применение не к месту может повлечь неприятные последствия
Uljahn: а где-то могут сэкономить кучу времени
wlesavo: хехе, обошел юркова, не велика заслуга конечно в офлайне то, но все таки, с этого рана должен в 10ку долезть
Uljahn: gtj: зачем тебе прерывания? не лучше ли с кэшами разбираться? толку от твоих супербыстрых программ, если они 90% времени ждут, когда придут данные
gtj: с кешем опасно тут знать надо наверняка там милион своих прерываний и к кешу и к памяти напрямую и прочее
tutubalin: Uljahn ну всё-таки полезно, когда помимо человека, который по сути просто нейронка, есть ещё беспристрастный строгий компилятор. а если его не хватает, то ещё и линтер в придачу.
tutubalin: gtj прерывание к кэшу? чтааа?
Uljahn: https://habr.com/ru/company/vdsina/blog/515660/ хорошая статья про кэши, как раз читаю
Uljahn: он наверное про такты
gybson_samara: может про кэш процессора речть
tutubalin: дооптимизировался до 3% в Optimization. 100 очков не хватает до квеста.
gtj: щас я тебе скину погоди тут специальный раздел про прерывания
gtj: но я подозреваю это микрокод
gtj: тоесть асм но другого уровня
gtj: https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-system-programming-manual-325384.html
gtj: тут почти весь спич про прерывания
gtj: да прерывания к кешу есть и к дд3
tutubalin: то, что они есть, не означает, что ты обязан ими пользоваться
tutubalin: просто разберись, как работает кэш. почему важно, чтобы твой код влезал в кэш, и какой буст производительности это даёт
gtj: все работает кароче но будет строка в памяти потомучто я забыл чото
gtj: вот отладил так же работает
gtj: http://chat.codingame.com/pastebin/20e45715-d33d-48c1-936e-5ef740518d83
gtj: я его кинул в масм32 и отладил
gtj: и что пиши ему в 32 что в 16 петрушка одинаковая
Uljahn: вопрос-то в чём? в гугле искал? на специализированных форумах спрашивал?
Uljahn: сходи на https://wasm.in/
Uljahn: там анекдоты прикольные https://wasm.in/threads/anekdot.32247/ :smiley:
tutubalin: ух-ты! он ещё существует!
tutubalin: помню, прям выкачивал телепортом статейки оттуда
tutubalin: сейчас, похоже, только форум остался?
tutubalin: помню, там была отличная дискуссия про то, как присвоить ноль в eax. типа, xor eax, eax - это слишком банально. и каких там только вариантов не было! в том числе искать в таблице системных вызовов, пока не наткнёмся на null
gtj: http://chat.codingame.com/pastebin/15bb3eda-072f-4bc6-8a8a-f8f6f7b9adf0
gtj: не хочу сишню в асемблере в 2020
gybson_samara: Uljahn в пазле бинарная сеть, в чем фишка может быть, что половина тестов проходит, а другая нет?
Uljahn: там в порядке обновления весов можно запутаться
mykeich: https://www.codingame.com/ide/puzzle/target-firing это точно простой пазл? На питоне скорости не хватает перебирать все варианты. А сортировкой чет не удается найти сочетание параметров
Uljahn: в комментах пишут, что скорее средний
mykeich: Получается пишем на си локальный перебор чтоб выяснить есть ли какой-то порядок в убивании кораблей инопланетян,а потом спокойно делаем сортировку на питоне:) Легкий пазл
tutubalin: а жадный алгоритм не годится?
wlesavo: по любому не нужен перебор, нужен простой жадный алгоритм какой-то и все
input.txt: перебор при n=50 так и так не сделать
tutubalin: для каждого корабля считаем сколько ходов нужно, чтобы его убить, и сколько урона он наносит. сперва выносим те, которые наиболее опасные, но проще всего убиваемые
wlesavo: там названия тесткейсов какбы намекают даже
input.txt: похоже на динамику по количеству ходов
tutubalin: DP - это уже не easy
gsomix: Деды с ассемблером захватили чат. :)
tutubalin: проверил - жадным решается
gtj: блин ну придется либо такой фигней заниматься с библиотеками и псевдо асемблером либо ставить виртуалку ради линукса(
tutubalin: gtj убедительная просьба уважать других участников сообщества и не использовать чат в качестве личного дневника
YurkovAS: wlesavo тоже ушел в офлайн, добавил 7 тестов
wlesavo: YurkovAS хорош, я ушел, оставил считаться по 20 минут на тест, вечером думаю уже буду менять что-то
wlesavo: а есть гайд нормальный по внешним клиентам, чет не понимаю че куда писать из faq'а
Uljahn: на форуме темы попадаются
wlesavo: ща поищу
Uljahn: https://forum.codingame.com/t/feature-update-chat-rework/1556/20?u=uljahn
Uljahn: wlesavo
Uljahn: там ещё дальше по теме есть скрины
wlesavo: да, увидел уже в вопросике тож
Uljahn: я смог 4 клиента настроить: psi+, pidgin, gajim и miranda
Uljahn: возможна проблема с загрузкой списка каналов - подгружает тысячи сгенерированных каналов для клэшей, её лучше не запускать, а заходить сразу на конкретный канал
wlesavo: а с мобильными клиентами можешь посоветовать что-то?
Uljahn: мэд и ещё кто-то вроде с мобильного клиента (типа pidgin) сидели какое-то время, но я ничего не нашёл на андроид
Uljahn: там ещё трафик улетает гигами, нужен анлим
wlesavo: горячая битва за топ 10 сейчас начнется в sg, раз уж юрков ушел в офлайн видимо придется илледана выбивать или даже кови :slight_smile:
YurkovAS: ну немного поулучшаю - оффлайн версию. точнее там 2 в одном, через переключалки пока сделано. алгоритм тот же МС, только таймауты и параметры разные.
tutubalin: я какой-то мобильный клиент ставил, но так и не понял, как залогиниться и плюнул
wlesavo: ну я поставил штук 5-6, ни в одном не смог залогиниться и плюнул
tutubalin: придётся свой писать!
wlesavo: YurkovAS ну я сильно упарываться не хочу тоже, но попробую немного рандомных отключений добавить, и чего-т в этом духе. может попробую воспроизвести то что вестиклс делал +-
wlesavo: вот его pm 8ми летней давности
wlesavo: http://chat.codingame.com/pastebin/14e6d306-4cb6-4fb1-ae1d-2cd4284c6814
wlesavo: но там есть сложноватые места, думаю таки чето попроще оставить
gtj: https://play.google.com/store/apps/details?id=org.yaxim.androidclient&hl=ru
gtj: https://play.google.com/store/search?q=xmpp%20jabber&c=apps&hl=ru
Uljahn: у тебя работает? какие настройки ставить?
Dmitry_Mandzyuk: всем привет
Dmitry_Mandzyuk: jiki: привет, ты здесь?
mykeich: У меня на телефоне xabber работает. минус только жрет инет активно
mykeich: Из https://www.codingame.com/faq логин взять может быть не очивидно
Uljahn: mykeich: сервер chat.codingame.com?
Uljahn: порт 5222?
mykeich: да
Uljahn: econnrefused, через другой вайфай попробую попозже
mykeich: MCTS напиши:)
wlesavo: https://imgur.com/dACQ2cX
wlesavo: видимо в новых версиях уже нету, разве только на 4pda взять старую
Uljahn: mykeich: скинь версию клиента, плз
Uljahn: такое ощущение, что всех согнали в вайбер, ватсап и телегу, выпилив альтернативы
Uljahn: а, дискорд ещё есть
mykeich: 2.6.6.645
mykeich: Это наверное под iOS выпилили
Uljahn: даже в аську привязку к номеру телефона внедрили
wlesavo: в сторе 3.02 уже версия
wlesavo: мож я не то качал
mykeich: так и есть, там beta приписка, старая версия не доступна чтоль
Uljahn: на 4pda есть, качаю
mykeich: поставьте им минус и скачайте другой клиент:)
Uljahn: и что нажимать в самом начале? "вход" или "регистрация"?
mykeich: Во времена irc никто не ныл что протокол плохой, а тут более современный xmpp оказывается проблемный. странно
Uljahn: у меня 10-й андроид, может из-за этого не коннектит
mykeich: добавить учетную запись наверное
mykeich: у меня тоже 10 арнольд:)
Uljahn: ввожу в новую учётку имя: номер_из_faq@chat.codingame.com и пароль от акка с CG...
mykeich: и что пишет или показывет?
Uljahn: Ошибка подключения и портянка на весь экран
tutubalin: может быть у кого-то ещё на CG пароль 12345678?
Uljahn: the following adress failed: 'chat.codingame.com:5222' ... unable to resolve host
mykeich: я на днях потратил под дня чтоб гугл перестал ругаться на плохие пароли и для всего сгенерил случайные пароли и зашел на каждый сервер из списка. некоторые сайты оказалось давно умерли
Uljahn: может порты на рабочем вайфае заблочены, дома попробую ещё...
mykeich: chat.codingame.com [52.203.27.118] он не пингуется но DNS возвращает ip
gtj: 3928632@chat.codingame.com
gtj: Your CodinGame password MUC Server conference.codingame.com
gtj: Login 3928632@chat.codingame.com
mykeich: Uljahn да, скорей всего сервер другой, после настройки я его не вижу, но вроде я тоже на этом попадался conference.codingame.com
gtj: http://chat.codingame.com/pastebin/bd98262d-7a6b-417d-bdd8-4d6f48dbf274
mykeich: gtj пароль еще нам скинь, мы будем проверять
gtj: там свой пароль подставить надо
gtj: вот написано же что писать
mykeich: gtj реально не могу решить https://www.codingame.com/ide/puzzle/target-firing Поможешь?:)
Uljahn: 75% набрал, надо думать, как сортировать
Uljahn: с интегральными суммами что-то мутить
mykeich: она уровня easy ничего сложного
gtj: у меня тут ламповые посиделки
mykeich: вот tutubalin решил, наверное пока обедал в телефоне накидал решение:)
gtj: https://youtu.be/KplTjtDQx90?list=PLtz4hzJDq7ZzJYNJVX6NghM5bIKFBs-ud
gtj: щас не смогу переключится)
tutubalin: gtj кстати правильно подметил - вместо chat.codingame.com надо conference.blablabla
735487: Uljahn: the following adress failed: 'chat.codingame.com:5222' ... unable to resolve host, возможно порт не надо. можетон его как часть адреса пробует резолвить
tutubalin: Uljahn mykeich я там выше идею озвучивал. опасность корабля равна damage/ttk, где ttk - сколько ходов надо, чтобы его убить
Uljahn: а, я пропустил это
tutubalin: те, кто много дамажат и убиваются за один ход становятся первыми целями. танки, которые почти не дамажат, но фиг пробьёшь - последними
tutubalin: задача о рюкзаке по сути
735487: как в ММО одни танкуют другие дамажат ))
mykeich: tutubalin так работает, не люблю пазлы где надо что то подбирать
Uljahn: видимо, у меня баг в расчёте ttk :/
mykeich: округлять пробовал?
Uljahn: ceil заюзал
mykeich: Тогда баг
wlesavo: хех, изи топ10 :smiley:
mykeich: wlesavo в чем?
wlesavo: всего-то 4 часа стояло считало
wlesavo: в sg
wlesavo: samegame
wlesavo: чтобы тысячу очков апнуть 4 часа счета, так себе прогресс конечно, надо ща поковыряться нормально уже
735487: что то мне не нравится тенденция ухода в оффлайн уже в который раз
tutubalin: зато от языка меньше зависимости
735487: от языка меньше а от количества арендованных датацентров больше :)))
Uljahn: в NS можно руками было набить норм)
tutubalin: ну тогда это хобби по затратности сравнится с гольфом (настоящим)
tutubalin: Uljahn не руками, а используя нейронные сети на основе углерода!
tutubalin: Uljahn вместо ceil попробуй целочисленное деление
Uljahn: пробовал, то же самое получается - 5 и 7 тесты фейлит
mykeich: у меня они тоже самые проблемные
Uljahn: целочисленное даёт доп. ход, когда hp кратно урону
Uljahn: или даёт 0, когда урон больше hp, хз как корректировать, всякие единички прибавлял, 0.5 вычитал из hp, max(1, ...) юзал :upside_down:
input.txt: (hp + damage - 1) / damage
input.txt: целочисленное деление конечно
Uljahn: хм, то же самое, 5 и 7 не проходит... может, бага в другом месте...
wlesavo: amurushkin мне наоборот нравится что можо разойтись и попробовать разное в оффлайне, NS этим запил прямо
735487: Uljahn: а делить нацело + 1 если остаток есть?
735487: wlesavo: я может не прав но мне кажется это приведет к тому что в лидерборде в топе будут те кто первей сможет найти лучшее решение за счет больших мощностей
735487: и никто уже не сможет обогнать. как в гольфе
tutubalin: Uljahn если соотношение урона к живучести равное, то надо сперва валить того, кто менее живуч
tutubalin: а, хотя не... одинаково получается
735487: а вы считаете сколько вам дамага наносят? надо же еще наверное учитывать и сколько ты наносишь
735487: надо наверное тоже пазл этот что ли попробовать
tutubalin: свой дамаг учитывается в ttk
Uljahn: wlesavo: обе версии xabber'а через домашний вайфай подключились
Uljahn: только в новой версии нельзя конференцию добавить, а в старой можно :/
Uljahn: логи подгружаются, а сообщения не отправляются, ужс
Uljahn: test
Uljahn: а, надо было ник ввести правильный
Uljahn: mykeich: как победил 5 и 7?
Pyhesty: что такое CLASH OF CODE?
Uljahn: 15-минутные задачки
Uljahn: в трёх разных режимах
Pyhesty: а откуда они берутся? кто их пишет? или из какого-то пула?
Uljahn: да, из пула. пишут пользователи
Pyhesty: спасибо
Pyhesty: а есть задачи на русском языке? или все на одном языке?
Pyhesty: у меня ребенок хочет тут покодить, но ему 12 лет... желания много, а с инглишем он не очень
Uljahn: stepik не пробовали смотреть?
Uljahn: https://welcome.stepik.org/ru
tutubalin: Pyhesty заодно и инглиш подтянет!
Pyhesty: он доэтого на acmp.ru кодил, но там скучно и не так ярко...
Pyhesty: спасибо за ссылку на обучение =) может заинтересуется) всегда полезно)
Uljahn: там и задачки есть, правда на питоне
tutubalin: Pyhesty или можно автоперевод в браузере включить
Uljahn: лучше уж сразу инглиш учить
735487: в любом случае если кодить то инглиш будет нужен
wlesavo: amurushkin в NP проблемах всетаки просто больших мощностей недостаточно, и до оптимального решения так просто не доберешься, на js-games люди с этим тестсетом годами бились, и даже там почти нет одинаковых скоров у людей
wlesavo: Uljahn ну у меня тоже подключались, просто не мог конференцию добавить потому что их открутили в новой версии
Uljahn: я качал с 4pda версию, которую mykeich указал
Uljahn: кое-как запинал пазл :sweat_smile:
Uljahn: а его, смотрю, в медиум уже перенесли
gsomix: Что за паззл?
Uljahn: да этот, с PEWPEW
Uljahn: https://www.codingame.com/training/medium/target-firing
Pyhesty: в некоторых контестах есть ограничение по времени, а разве все языки одинаковые по производитьности? или накидываю коэффициент?
Uljahn: ограничения одинаковые для всех языков
Uljahn: если хочешь в топы и в ботах, и в клэшах - придётся учить разные языки
Uljahn: во многих bot programming мультиплеерах важна производительность, т.е. очевиден выбор компилируемых языков типа c\c++\rust\D, в клэшах часто попадаются режимы кратчайшего кода (codegolf) - тут выбор в пользу ruby, bash, python, perl
Uljahn: в среднем можно неплохо выступать на одном питоне
Pyhesty: да ну... кратчайший код... дичь жеж...
Pyhesty: еспд тихо плачет в сторонке...
Uljahn: главное - не принимать близко к сердцу, тут сайт развлекательно-образовательный
Pyhesty: =)))
Uljahn: а если по фану - то можно и в гольф порубиться, увлекает как головоломка, особенно когда в лидерборд смотришь на чужие результаты
Uljahn: когда там лучший результат раз в 10 короче твоего решения, возникает вопрос "Как?" А потом уже трудно остановиться :)
wlesavo: такс, пойду ваши кораблики посмотрю пока считается
wlesavo: чет изи сортировкой по damage/time
wlesavo: как обычно у всех решения одинаковые
gsomix: А вы публикуете свои решения паззлов? Или забиваете? :)
Uljahn: у меня там 5 и 7 тесты фейлились, потому что имена перепутал, надо осторожнее с областями видимости
Uljahn: gsomix: когда не очень похоже на остальные, то публикую
BorisZ: я публикую всегда, пусть смеются
BorisZ: хотя по уму надо бы тратить немного времени чтобы причесать
BorisZ: опять таки если код станет понятнее - еще больше народу его прочитает и будет смеяться )
gsomix: На популярные задачи там столько решений (даже на непопулярных языках), что вряд ли кто-то будет их все смотреть. :)
BorisZ: согласен, не самый принципиальный вопрос
wlesavo: я иногда заглядываю чтобы убедиться что все примерно одинаково нарешали
BorisZ: если задача простая то у всех примерно одно и то же, если сложная - замучаешься разбираться, тем более сам уже решил только что
tutubalin: там часто самые заплюсованные решения - какие-нибудь недогольфы
tutubalin: когда читабельности уже нет, а до максимальной краткости ещё пилить и пилить
tutubalin: но почему-то люди тащаться от однострочников
ZloyLosyash: а куда тыкать, чтобы открыть список всех решенных тобой пазлов?
gtj: выйди в раздел сайта где идут перечисления сложностей изи, медиум хард(PRACTICE кнопка=раздел сайта), под каждой группой есть серое слово VIEW ALL
gtj: чтобы посмотреть галочки на решенных задачах потом надо промотать в самый низ
Dmitry_Mandzyuk: ребята, подскажите, алгоритм, есть осциллограф, он читает массив данных, потом программа отрисовывает это, проблема в том, что пока прога рисует, осц простаивает, соответственно синусоида сети кусками рисуется
Uljahn: тебе надо читать и рисовать? ring buffer, может, заюзать?
Dmitry_Mandzyuk: что за ринг буфер?
Dmitry_Mandzyuk: то есть типа кольцевой, но как это понимать?
Dmitry_Mandzyuk: у меня эт массив
Dmitry_Mandzyuk: из 4096 элементов
Uljahn: массив заполнился и отрисовка начинается? кусок синусоиды выводится и снова к чтению переходит?
Uljahn: а если два массива использовать по очереди или на два потока разбить?
Dmitry_Mandzyuk: да
Dmitry_Mandzyuk: графический движок у меня не дружит с потоками
Dmitry_Mandzyuk: а что за идея с двумя массивами?
Uljahn: в один пишем, из другого рисуем, потом меняемся
Dmitry_Mandzyuk: ну так он очищается
Dmitry_Mandzyuk: просто рисование не в отдельном потоке
Dmitry_Mandzyuk: каким чем?
Dmitry_Mandzyuk: буфер обычный динамический двумерный массив
Pyhesty: про осциллограф - реальный осциллограф посмотри как работает, у него нет памяти, он рисует текущие данные, в общем случае буферризация не нужна
Dmitry_Mandzyuk: а если программа не успевает за осциллографом?
Dmitry_Mandzyuk: у меня просто не обычный, а юсб, а отрисовка на экране компа
Pyhesty: если программа не успела за осциллографом - то пропускает точки, старые данные никому не нужны
Pyhesty: посмотри как реальный осцилл работает
gtj: тогда надо установить временные рамки сессии замера забуферизировать
gtj: не выводить пока буферизует
gtj: и когда забуферизовал выводить
gtj: например 5 милисикунд задержка
Pyhesty: у тебя есть входной поток стрим, ты знаешь частоту дискретизации, разворачиваешь по ОХ, выводишь точки из стрима - стрим может быть хоть юсб, хоть уарт, хоть езернет... как будут появляться данные выводишь их по ОХ
Dmitry_Mandzyuk: то что она пропускает точки я знаю, мне надо этого пропускания избежать
Dmitry_Mandzyuk: ну хорошо, появляются вывожу, но пока он читает, я все вижу, пока вывожу он не читает и как раз тогда пропускает
Pyhesty: если у тебя частота дискретизации 100кГц, ты получаешь 100 000 точек в секунду из стрима, если данные где-то потеряются, хотя бы один отсчет, этот осциллограф никому не нужен и в утиль... либо у тебя в потоке данных отсчет и временная метка
gtj: пишешь в файл блок например 10 секунд когда блок считался выводишь и удаляешь с начала файла
Dmitry_Mandzyuk: максимальная частота дискретизации 250МГц на четыре канала
Dmitry_Mandzyuk: что за конвеер?
gtj: который пока ты выводишь символ который ты вывел удаляет
Pyhesty: одним потоком принимай по USB и переклыдывай в стрим, другим потоком читай из этого стрима
Pyhesty: и приоритет у потока который ожидает по USB максимум
gtj: считал символ вывел удалил из файла этот символ
gtj: в файле будет конвеер символов
Dmitry_Mandzyuk: а стрим это ж ведь поток
Pyhesty: stream да поток, и thread то же как быпоток
gtj: командная строка не успеет в конечном итоге за осцилографом
Pyhesty: а процесс, блин оговорился, одним процессом читай и перекладывай в поток, вторым процессом вычитывай
Pyhesty: а вообще 500МБайт в секунду перелопатить процессором довольно запаристо... думай как использовать что-то типа DMA
Dmitry_Mandzyuk: так, это значит надо замутить что-то типа непрерывного чтения, а отдельно это все рисовать
gtj: http://chat.codingame.com/pastebin/abcdfeed-f5da-434e-a419-0ee69d7e8a06
Pyhesty: и что за проц?
gtj: да надо либо посимвольно либо задержку делать чтобы у тебя не было большой нагрузки
gtj: ты просто ответ будет получать не моментально
Dmitry_Mandzyuk: в моем случае i7-4700HQ
Pyhesty: по моему опыту 500МБайт протащить через ядро побайтно - это гемор, нужно искать другой способ DMA или укрупнять до 64-128 бит
gtj: так мобжно не побайтно а блоком по строке и удалять строку
Pyhesty: читай описание API или драйвера под твоё USB устройство, что бы оно сразу клало в память минуя проц
Dmitry_Mandzyuk: хм, инструкция которая есть только функции описывает и то очень скупо
Pyhesty: а USB чип какой fx3?
Pyhesty: на осцилле?
gtj: 250 мегагерц на проц ой не знаю на юсб тем более)
Pyhesty: 250Мбайт - это USB3.0 валит видимо... если 16бит на отсчет то как бы 500Мбайт...
gtj: в конечном счете консоль не позволит таких скоростей и будет баг
gtj: консоль ограничивает поток
gtj: я сканирую весь жесткий диск на 1 скорости с консолью 10 20 секунд
Pyhesty: если по гамбургскому счету, то USB шляпа для таких задач, если в потоке нет синхронизирующих импульсов, то потеря пакета приведёт к сбою... можно схитрить и сказать, что у тебя выборка не более 1Мсемпла и тогда выделяешь буфера по 1Мбайту, захватываешь из USB и отдельно анализируешь этот буфер на остальные забиваешь...
Dmitry_Mandzyuk: что за гамбургский счет?
gtj: да можно проще если ты в бесконечности хочешь смотреть результат в консоле
Dmitry_Mandzyuk: например?
gtj: сам факт присутсвия консоли в вывод это ограничение
Dmitry_Mandzyuk: ну вообще оно без консоли
gtj: вывод в консоль ограничивает потоки
Dmitry_Mandzyuk: уже в dll оно в вектор загоняет
Pyhesty: что за гамбургский счет? ну типа по чесноку, короче тебе нужно посмотреть как работают реальные осциллогарфы, они не анализируют весь поток а работают окном
gtj: ядро ограничивает консолью поток
gtj: тебе надо писать в файл считывать строку и удалять строку которую считал тогда ты в бесконечности получишь не растущий файл
Dmitry_Mandzyuk: ну я видел реальные осциллографы, но внутрь не залазил и то что они не запоминают это я в курсе
gtj: потомучто вывод на екран осцилографа еще сильнее сделает задержку
Pyhesty: он записывает в быстрый кэш который может захватыавть хоть на 10Ггерцах, но кэш обычно маленький (у крутых даже 4096 семпла текрониксах), так же и ты главное что бы захваченное окно было непрерывным и обрабатывай его а потом выводи, остальные пропускай
gtj: теперь я знаю как горят конденсаторы)
Pyhesty: при необходимости проводить обработку данных типа пикдетектора, фильтрации, fft и тп...но всю обработку только по небольшому (до мегасемпла) окне
Dmitry_Mandzyuk: мегасемпл это сколько элементов массива?
gtj: тоесть ты хочешь без буферизации сделать
Pyhesty: что делать с низкачастотными сигналами (герцами) я хз, тк на аппаратном уровне должно быть суммирование семплов или прореживание по идее
gtj: так хорошо звучит а консоль то
Pyhesty: да нет консоли, есть только отображение на виртуальном осциллографе
gtj: а если порежет вывод в консоль поток порежется изза скорости вывода в консоль
gtj: он смотреть в консоле хочет ответ в реальном времени
Dmitry_Mandzyuk: да не в консоли я хочу смотреть
Pyhesty: ответ чего? это же не игра... это прикладная я так понял задача
Dmitry_Mandzyuk: отрисовывать хочу
Dmitry_Mandzyuk: просто сейчас такая ерунда, что пока рисую, осциллограф ждет
Pyhesty: короче кури usb драйвер, если это cypress fx3 - то там решаемо через кольцо буферов
Dmitry_Mandzyuk: а я вряд-ли смогу что-то с драйвером сделать, у осца sdk свое
gtj: могу сказать решение но меня сразу моментально забанят)
gtj: предположительное решение)
Pyhesty: тогда отдельным процессом захыватываей данные из sdk, не должно быть пропусков, а рисуй другим процессом
Dmitry_Mandzyuk: это типа матом? осц в форточку?)))
gtj: рисовать тогда асемблером не? сразу из регистра?
gtj: есть масм там есть директ 9(и 8)
Pyhesty: да не ассемблер прошлый век, я осциллограф для нашего завода делал в 2003 это был борлад С++ с асм вставками - жесть ... сейчас уже 2020 на дворе
Dmitry_Mandzyuk: масм?))) это повеситься можно
gtj: ну окай асамблер прошлый век хорошо) но вот я смотрю на его возможности и балдею)
gtj: да нет там все вроде логично
Dmitry_Mandzyuk: ох, ладно у меня три часа ночи, спасибо за подсказки, я наверное спать пойду
Dmitry_Mandzyuk: про потоки понял, надо подумать
Pyhesty: добрых, добейся стабильного приёма в одном процессе и будет счастье
gtj: ты все таки юзал асемблер)
gtj: но пишешь что он прошлый век)
Dmitry_Mandzyuk: ну стабильно это я так понимаю непрерывный цикл
Pyhesty: https://youtu.be/Nlw-08O7XwE
Dmitry_Mandzyuk: а оно будет успевать в файл писать кстати?
Pyhesty: в мае на карантине на асме наваял под 8080
Pyhesty: в файл не будет, только если файл не виртуальный в памяти, не пиши такие потоки в файл, только для отладки и только на SSD
Pyhesty: это проц 8080
Dmitry_Mandzyuk: вот это ты написал))) ужас просто, я про видео на ютубе
Dmitry_Mandzyuk: а если не в файл, то куда?
Pyhesty: да, апогей - 300к операций в секунду ещё тот калькулятор...
Pyhesty: если для отладки записать - пиши в память несколько секунд
tutubalin: классный видос
gtj: у меня ай7-7700 я сейчас изучаю 32 битный режим полет нормальный, по возможностям докладываю возможности теже
tutubalin: скинь в #world тоже, пусть народ порадуется
Pyhesty: а и то как работает реальный осцилл =) вот видео https://youtu.be/yxNRV7LD8dQ =) на ту же тему =)
tutubalin: очень круто!
gtj: класс) дело мастера боится)
gtj: http://chat.codingame.com/pastebin/0794cbcd-88d1-4e8b-a7a3-5f4e6ab66fcb