|
|
|
|
|
|
Вернуться
1 Березин Дмитрий, 25 марта 2024 г. 11:17:38 | |
Удалось-таки запустить вариант 3 из "Работа в системе". Да, он действительно делает то, что мне нужно. Когда я впервые его просматривал, то увидел fs.readSync и решил, что он читает из файла. Но тут, оказывается, все намного хитрее. Есть, правда, пара вопросов к нему, но я создам отдельную тему. А вообще, я, пока думал, пришел к такому варианту: async function solve(read) { const a = await read(Number); const b = await read(Number); return a + b; } (async function run() { const connectTo = stream => { let input = []; const receive = () => new Promise(resolve => { const consume = () => { input = stream.read().toString().trim().split(/\s+/); // 16kib stream.removeListener('readable', consume); resolve(input.shift()); }; stream.on('readable', consume); }); return async Type => Type(input.length ? input.shift() : await receive()); } console.log(await solve(connectTo(process.stdin))); process.exit(); })(); Это пока черновик, не тестировал на скорость, но, думаю, идея понятна: нужны данные - открываем поток, читаем - закрываем поток. Не знаю, правда, что будет, если размер данных больше буфера stdin. Ну и нет проверки на внезапное завершение потока, но это не должно быть критично для олимпиадных задач. В остальном пока, вроде, работает.
|
|
|
2 Меньшиков Фёдор Владимирович, 23 марта 2024 г. 23:30:53 | |
Вариант 3, кстати, не только работает с терминалом, его ещё и для интерактивных задач можно применять, где только исключительно консольный ввод и нужно ответить на строчку ввода до чтения следующей.
|
|
|
3 Меньшиков Фёдор Владимирович, 23 марта 2024 г. 23:27:20 | |
На странице "Работа в системе" варианты 1 и 3 для node.js работают с консолью, не с файлами. И все 3 варианта принимаются acmp. У Вас дома может не работать, если у Вас версия Node.js меньше, чем на acmp.
|
|
|
4 Березин Дмитрий, 22 марта 2024 г. 16:59:58 | |
В общем, да, я увидел проблему. Буду думать, напишу здесь решение, когда найду. Спасибо, Фёдор Владимирович, без Вашей помощи я бы не сдвинулся с места.
|
|
|
5 Березин Дмитрий, 21 марта 2024 г. 23:49:38 | |
Стандартный windows prompt ничего не пишет. Но я работаю через git bash, и он пишет: "stdin is not a tty" Про рабочие варианты я в курсе (один из них, кстати, почему-то не работает. Возможно, не только у меня). НО они все предполагают работу с файлами, а это неудобно. Моя идея заключалась в том, чтобы создать рабочий js-шаблон, которому был бы нужен только терминал. И все было хорошо, пока не попалась задача, где надо считать 2 строки вместо одной.
|
|
|
6 Меньшиков Фёдор Владимирович, 21 марта 2024 г. 14:18:06 | |
А посмотрите, что у Вас дома получается при таком запуске: node 1.js < input.txt Также отмечу, что на странице "Работа в системе" приведены рабочие варианты решения A+B на всех языках.
|
|
|
7 Березин Дмитрий, 20 марта 2024 г. 19:17:09 | |
Самое интересное, что оба(!) варианта считывания из файла (синхронный и асинхронный) работают. Та же задача при - синхронном чтении: https://acmp.ru/index.asp?main=source&id=21268498 - асинхронном чтении: https://acmp.ru/index.asp?main=source&id=21273400 То есть проблема даже не в асинхронности как таковой, а именно в чтении из командной строки нескольких строк данных. И проявляется только на сервере.
|
|
|
8 Березин Дмитрий, 20 марта 2024 г. 5:39:12 | |
Аналогичная ситуация: https://acmp.ru/index.asp?main=source&id=21268941 Как и прежде, все работает локально. В чем может быть разница между тем, как я подаю строки на ввод, и тем, как это делает скрипт на сервере?
|
|
|
9 Березин Дмитрий, 19 марта 2024 г. 18:40:40 | |
Задача: 1116 Решения: https://acmp.ru/index.asp?main=source&id=21267134 https://acmp.ru/index.asp?main=source&id=21267150 Работают локально (проверял только https://acmp.ru/index.asp?main=source&id=21267150, но они должны быть эквивалентны). Предполагаю, что проблема в способе подачи построчных данных на сервере. Что можно сделать, чтобы исправить и избежать проблем в будущем?
|
|
|
Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!
| | | |