БлогNot. Блог ПерСа

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

личное пол маразм история софт ретро графика алгоритм c++ поиск форматы studio шахматы памятка учебное список плакат россия политика ссылки qt программирование числа математика фото быт игра дата бюрократизм закон сервер php fb2 xml чат эзотерика javascript сервис преступление символ статистика браузеры картинка абстракция люди rip философия образ книги интернет все теги все комментарии поиск!


[1-15] [16-30] [31-45] ... [1936-1950] [1951-1958]


Как онлайн перевернуть список строк?

Не могу поверить, что такого простого скрипта нет под рукой, там же 3 строки кода.

Не определять количество слов в документе, не сливать строки текста в одну и не сортировать с удалением дублей и другими опциями, даже не преобразовывать переводы строк в тег <br> - то есть, там-то нужная опция есть, но абзацы с непустым содержимым изначально должны быть разделены ещё и пустыми строками.

А если нужно просто тупо перевернуть список строк, разделённый обычными переводами строки \n?

Был читаемым снизу вверх, а стал сверху вниз? И плевать на пустые строки, фильтрацию разделителей и проч.?

Не нашёл, а может, заблудился в собственном бложеке.

Быстрее такое за пару минут написать, не стану даже проверять скрипт, мой список он перевернул, пусть тут остаётся :)

Введите или вставьте текст:

Результат:

Страница статьидалее...
03.04.2018, 19:18 [76]


Задача алкоголика :)

Вот, именно 5 бутылок лимонада по 27 копеек и можно было купить в СССР на рубль. И 25 копеек сдачи оставалось. Потому что выпив первые три бутылки, можно было сдать их по 12 копеек и купить на 19+24=55 копеек ещё две, которые тоже потом сдаются :)

Проще всего подобную задачу решить с помощью рекурсии:

#include <iostream>
using namespace std;

int count(int money,int price,int refund) {
    if (money<price) return 0;
    int cnt = money / price;
    //cout << endl << cnt << ", " << money-cnt*price
    //<< ", " << cnt*refund << ", " << money-cnt*price+cnt*refund;
    return cnt + count(money-cnt*price+cnt*refund,price,refund);
}

int main() {
    int money = 100; //сумма, коп.
    int price = 27; //стоимость за единицу, коп.
    int refund = 12; //стоимость возврата с покупки, коп.
    //cout << endl << "Количество, сдача, возврат, сдача+возврат";
    cout << endl << "N=" << count (money,price,refund);
    cin.get();
    return 0;
}
Страница статьидалее...
02.04.2018, 18:10 [76]


Ад кемеровский

У одного френда я сейчас в ленте слушала запись, в которой кричат дети, сгоревшие в Кемерово.
Это п****ц.
Это лютый п****ц, которого не пожелаешь ни одному врагу...
Послушайте запись, на которой кричат сгорающие заживо в запертом кинозале дети. Она появилась в Сети. Многое поймёте об РФ, а может, и не поймёте ничего, если раньше не поняли.

- типичное из сети последних 3 дней.

А в самую точку, как обычно, сечёт один Логинов.

Правда, как бы этот перец не оказался круче:

План иудеев не состоялся. А за то, что они не согласовали свои действия со мной, с Великим Магистром Священного Космического Ордена Рыцарей Круглого стола, и напали на суверенную Молдову, я, Святослав Мазур, Царь Царей, посланник Господа, Великий Магистр приказываю начать планомерное уничтожение всех людей, организаций и государств посмевших ослушаться моего приказа создать на Земле новый мировой порядок комфортный и справедливый для всех жителей планеты.
Святослав Мазур

В общем, я совсем ничего не хотел на эту страшную тему писать, но, получается, уже пару строк написал :( Страница статьидалее...
29.03.2018, 01:11 [126]


PHP: как просто перебрать все комбинации n исходов для k событий

На самом деле, ответ есть в предыдущей заметке об исходах шахматных партий. С точки зрения комбинаторики, при решении задачи о переборе всех вариантов исходов для k событий, каждое из которых может совершиться только одним из n способов, мы имеем размещения с повторениями, но никаких ручных перестановок элементов в массивах или рекурсий выдумывать не нужно, достаточно перебрать все числа от 0 до nk в системе счисления с основанием n, сохраняя лидирующие нули.

Тогда, например, при n=3 и k=5 значение 00012 будет соответствовать случаю, когда первые три события завершились первым исходом, четвёртое событие - вторым исходом, а пятое - третьим.

Вот воплощение этой несложной идеи в коде: Страница статьидалее...
28.03.2018, 21:01 [94]


Шахматы: считаем вероятность победы каждого игрока в турнире

Идея, подсмотренная на форуме, была такой:

Обережний герой: Интересно написать программу, которая бы делила все исходы на множества, в которых выигрывает тот или иной шахматист

Речь, конечно, шла о турнире претендентов-2018, который входит в решающую фазу (осталось 2 тура).

Данные о прошедших партиях взял просто со страницы турнира, только переписал их в массив $tournament (его можно было не делать двумерным) и избавился от длинных тире между фамилиями игроков, заменив их дефисом. Символ слэша "/" отделяет фамилии от результата партии, ещё не состоявшиеся партии также помечены в исходных данных дефисом.

Скрипт обсчитывает результаты прошедших партий в массив $players, заодно проверяя единообразие написания всех фамилий. Потом на основе массива $comb, содержащего пары игроков, которые ещё не сыграли, считается и выводится массив $table, содержащий фамилии и очки возможных победителей.

Если ставить скрипт на локальный хост вроде Denwer'а, то лучше разместить его файл во вложенную папку в кодировке Юникод (UTF-8) и в этой же папке создать файл .htaccess со строкой

AddDefaultCharset utf-8

Ниже приводится полный текст скрипта на момент без 2 сыгранных туров, может пригодиться для других турниров. Страница статьидалее...
26.03.2018, 19:02 [121]


Пишем на Javascript putpixel, getpixel и алгоритм Брезенхэма для окружности

В этом блоге есть несколько статей по рисованию средствами Javascript на канве HTML5, в основном, оно выполнялось с помощью готовых методов для вывода геометрических примитивов. Намного ли сложнее работать с отдельными пикселами?

Функции, которые приведены в показанном ниже листинге, помогут решить Вам эту задачу:

Также из кода видно, как правильно подготовить рисунок по размерам канвы и не забывать обновлять канву методом putImageData. Вот полный код примера (файл .html в кодировке Юникод/UTF-8) и результат его выполнения: Страница статьидалее...
22.03.2018, 15:07 [106]


QT: о контейнерах – просто

Более краткое, чем эта статья введение в тему контейнеров QT – для чего они предназначены и какие основные возможности имеют. На самом деле, тему вряд ли имеет смысл рассматривать отдельно от действий с QStringList и обеими группами стандартных виджетов, рассчитанных на работу с контейнерными данными.

Задача любых контейнеров, в сущности, проста – это организация обработки групп элементов. Мы кратко расскажем обо всех основных контейнерах QT и приведём примеры, такие же, как везде, только сделаем их законченными мини-приложениями.

Для демонстрации примеров нам будет достаточно консольного приложения QT с совсем простым шаблоном. Выберем в QT Creator меню Файл, Новый файл или проект…, затем шаблон "Консольное приложение QT" и проделаем те же шаги, что в этой заметке, не будет только 4-го шага, так как нам не нужен отдельный класс-виджет.

Всё содержимое файла main.cpp можно удалить, заменив его на такое:

#include <QtCore>
int main()  {
 //Сюда вставлять код
 return 0;			
}

В заголовочном файле QtCore все контейнеры уже прописаны, а "остановку" перед завершением консольного приложения QT обеспечит сам. Весь вывод будем выполнять с помощью стандартной функции qDebug(), например, так: Страница статьидалее...
22.03.2018, 11:32 [146]


Организуем список из объектов класса с помощью std::vector

В этой заметке мы уже делали стандартный вектор std::vector из разнотипных объектов классов, а в лекции про полиморфизм не самым удачным образом организовывали статический массив указателей на объекты класса.

Между тем, в ситуации, когда часть объектов класса (и, возможно, классов-потомков) должна заноситься в некий список, для этого вполне можно приспособить тот же std::vector, который мы сделаем статическим свойством класса и будем хранить там указатели на нужные экземпляры класса:

static vector <Student *> vec;

Правда, при удалении адресов из списка нам придётся сравнивать адреса, а не значения, но будем исходить из того при 32- или 64-разрядной архитектуре и "плоской" адресации оперативки это действие корректно (в DOS, к примеру, из-за сегментной адресации сравнивать указатели было некорректно, а только значения).

Ниже показан пример с теми же возможностями, что в лекции, но с применением std::string вместо char * для свойства Name, что заметно упростило код, и с вектором для хранения списка.

По сути, нам пришлось только не забыть инициализировать статический вектор вне всех функций и модифицировать деструктор базового класса, чтобы он проверял, нет ли адреса удаляемого объекта в списке, и если он там есть, удалял соответствующий элемент списка.

Для простоты весь код приведён в одном файле .cpp, выполнялся он в консоли QT 5.X. Страница статьидалее...
21.03.2018, 14:12 [92]


Какие браузеры лидируют в мире...

Как вам вот эта жуткая картинка на март 18-го?

самые популярные браузеры в мире, март 2018-го
самые популярные браузеры в мире, март 2018-го

Против убийцы дисков держится только центральная Африка :)

Ещё менее 6 лет назад картинка была совсем иной: Страница статьидалее...
21.03.2018, 14:06 [107]


Адамовы числа

Числа Адама (не нашёл ссылки на русском вообще, и в английской "Вики" тоже) - это такие натуральные числа, для которых квадрат числа с обратным порядком цифр имеет обратный порядок цифр по отношению к квадрату исходного числа :)

Если проще, то, например, 122=144, а 212=441, значит, 12 - число Адама.

Для небольших чисел, квадрат которых "влазит" в целый тип (например, для 4-байтового беззнакового целого предел - всего лишь корень(INT_MAX)==46341) можно посчитать парой строчек кода, если же числа нужны побольше, подойдёт умножение числа на массив цифр вот отсюда или другой подобный подход.

Приложенная ниже программка выводит в консоль и в текстовый файл numbers.txt все числа Адама до 10000000, впрочем, такая граница поиска была и не нужна, коль скоро они все состоят только из нулей, единиц, двоек и троек. Да и видно из получившегося ряда, что дальше. Проверено в консоли QT 5.X.

Есть мысль, где это пригодится, но, наверное, потом. Страница статьидалее...
19.03.2018, 10:23 [93]


Злые числа :)

Актуальная на сегодняшнее дебильное "2018 марта" задача :) Впрочем, дебильно оно только с виду, символика трёх шестёрок соблюдается в РФ трепетно.

Злым называют число, у которого чётное количество единиц в двоичной записи.

В инете везде для проверки числа на "злость" предлагаются странные решения, требующие перевести его в двоичную систему счисления, а затем ещё в одном цикле подсчитать количество единиц. Между тем, для подсчёта количества единичных бит в натуральном числе достаточно куда более простой функции countSetBits, которая приводится ниже. Также в консоль печатаются все злые числа от 0 до 2018, проверено в QT 5.X. Страница статьидалее...
18.03.2018, 10:43 [116]


Посчитать арифметическое среднее без переполнения?

Так как это не просто трюк, а может быть полезно, например, в таких вот случаях, кину отдельной заметкой.

Попытаемся посчитать арифметическое среднее от двух больших числовых значений, например, равных INT_MAX, обычным способом:

#include <iostream>
using namespace std;

int average(int a, int b) {
 return (a + b) / 2;
}

int main() {
    int a = INT_MAX, b = INT_MAX;
    cout << "a = b = : " << INT_MAX << endl;
    cout << "Average = " << average(a, b);

    cin.get(); return 0;
}

Мой QT на это выдал:

a = b = : 2147483647
Average = -1

А теперь примением в функции average "улучшенную формулу": Страница статьидалее...
18.03.2018, 10:07 [113]


Расстановка M элементов в кольцо размерности N

Требуется расставить M элементов, которые обозначены натуральными числами 1, 2,... ,M, в кольцо размерности N, начав с позиции номер K, номера позиций считаются с единицы.

Это не задача Иосифа Флавия, так как никто не выбывает. Но это и проще в решении, никакой массив не нужен, а функция lastPosition, определяющая позицию последнего из M поставленных в кольцо элементов, имеет вычислительную сложность O(1).

Вторая функция с названием printPositions печатает расстановку в консоль, в исходнике программки расстановка вот такая:

расстановка M элементов по кругу размерности N, начиная с элемента номер K
расстановка M элементов по кругу размерности N, начиная с элемента номер K

Реализация на C++ проверена в консоли QT 5.X. Страница статьидалее...
18.03.2018, 09:41 [96]


Вот так работают художники-абстракционисты дошкольного возраста :)

Что требуется для создания шыдевра:

Вот что может выйти в итоге: Страница статьидалее...
17.03.2018, 20:03 [115]


Дедукция по клетчатой тетрадке...

Опустим выводы, но всё-таки:

квадратики и прямоугольники в тетради в клеточку...
квадратики и прямоугольники в тетради в клеточку...

Сколько войдёт различных прямоугольников в квадратную сетку размерностью n*m?

То есть, как на рисунке слева, прямоугольники могут быть любого целого в клеточках размера. Вроде как, выходит

(m * n * (n + 1) * (m + 1)) / 4

Сколько различных квадратов в прямоугольнике размером n*m единичных квадратиков?

Как на рисунке справа. В нашей области 4*3, например, разместятся квадраты 1*1, 2*2 и 3*3. Формула пока такая: Страница статьидалее...
15.03.2018, 11:24 [95]


[1-15] [16-30] [31-45] ... [1936-1950] [1951-1958]

  свежие записипоиск по блогукомментариистатистика

Наверх Яндекс.Метрика
© PerS
вход