"конец текстовых заданий на дом, LLM всё порешала".
Скриншот
You
напиши функцию по перевороту порядка следования слов в строке in place оптимально по big O
Assistant Llama-3.2-3B-Instruct-Q8_0-GGUF
Функция по переворotu порядка следования slov в строке в-place, также известная как "переворот слов" или "инверсия слова", — это сложный задача с высоким количеством возможных решений. Однако, если мы рассматриваем только строку характеров (сtring из символов), мы можем найти оптимальное решение с time complexity O(n).
Нам нужно переворотить порядок следования slov в-place, поэтому не существует необходимости создавать новый массив или использовать extra space. Мы можем сделать это с помощью двух-pointerов, одного для начала и одного для конца строки.
Следуюя алгоритму:
Начнем с двух指еров: left и right, которые указывают на начало и конец строки соответственно.
Начнем переворот из середины вправо, используя pointers left и right.
В каждом этапе мы обменяем элементы на left и right местах.
Мы продолжаем этот процесс, пока left не достигнет середины.
Однако, чтобы переворотить порядок следования слов, нам нужно учитывать разделение слов в строке. Поэтому мы можем использовать следующий алгоритм:
Найдите первый символ слова (пunctuation или espacio).
Обменяйте символы между left и right.
Продолжайте этот процесс, пока не найдете следующий символ слова.
Вот примеры кода на C:
void reverseWords(char* s) {
int length = strlen(s);
char* left = s;
char* right = s + length - 1;
while (left < right) {
// Find the first symbol of a wordif (*left != ' ') {
break;
}
// Move to the next word
left++;
right--;
// Swap symbols between left and rightchar temp = *left;
*left = *right;
*right = temp;
while (left < right && *left == ' ') {
left++;
}
}
}
В этом коде мы используем два pointers left и right, которые начиная с нулевого значения, движутся вwards от конца строки. В каждом этапе мы обмениваем символы между left и right, что приводит к перевороту слова. Мы также учитываем разделение slov, найдя первый символ слова и moving to the next word.
Время Complexity: O(n)
Простота Implementation: High
Примечание: Этот алгоритм работает только для строкового представления (сtringа характеров).
Проверяем на cpp.sh
// Example program#include <iostream>
#include <string>
void reverseWords(char* s) {
int length = strlen(s);
char* left = s;
char* right = s + length - 1;
while (left < right) {
// Find the first symbol of a wordif (*left != ' ') {
break;
}
// Move to the next word
left++;
right--;
// Swap symbols between left and rightchar temp = *left;
*left = *right;
*right = temp;
while (left < right && *left == ' ') {
left++;
}
}
}
int main()
{
std::string text;
std::cout << "Enter your text? ";
getline (std::cin, text);
char buffer[256];
sprintf(buffer, "%s", text.c_str());
reverseWords(buffer);
std::cout << "Hello, " << buffer << "!\n";
}
Выполнение:
Enter your text? one two three
Hello, one two three!
Llama ожидаемо укакалась, на банальной, тупой задачке на разворот строки. Какие-то есть предложения, что вопрос задан некорректно, чи что?
"конец текстовых заданий на дом, LLM всё порешала". Аё>Llama ожидаемо укакалась, на банальной, тупой задачке на разворот строки. Какие-то есть предложения, что вопрос задан некорректно, чи что?
Здравствуйте, Слава, Вы писали:
С>Возьмите https://huggingface.co/bartowski/DeepSeek-V2.5-GGUF/tree/main/DeepSeek-V2.5-Q8_0 и запустите его на 4 H100 на runpod.
У меня лаптоп на райзене и 32г рамы... 48г не влезет целиком. Или оно умеет мапить файл на память? Вон на "AI" лаптопах вообще 16г рамы кушайте не подавитесь.
С>Ну и — обычно люди не на тупой локальной LLM пытаются работать, а на каком-нибудь Claude Sonnet.
В смысле в облаке? Но там наверное, с смс и регистрацией?
Здравствуйте, Артём, Вы писали:
С>>Возьмите https://huggingface.co/bartowski/DeepSeek-V2.5-GGUF/tree/main/DeepSeek-V2.5-Q8_0 и запустите его на 4 H100 на runpod. Аё>У меня лаптоп на райзене и 32г рамы... 48г не влезет целиком. Или оно умеет мапить файл на память? Вон на "AI" лаптопах вообще 16г рамы кушайте не подавитесь.
Ни в какой лаптоп это не влезет, для запуска такой модели потребуется 320 гигабайт VRAM, как раз 4 H100. На runpod это делается за деньги, будет примерно 12 долларов в час + примерно 40 минут на первоначальную загрузку модели в их хранилище + минут 10-15 на загрузку модели в GPU при каждом старте + ежедневная плата за хранилище, но там немного.
С>>Ну и — обычно люди не на тупой локальной LLM пытаются работать, а на каком-нибудь Claude Sonnet. Аё>В смысле в облаке? Но там наверное, с смс и регистрацией?
"конец текстовых заданий на дом, LLM всё порешала". Аё>Llama ожидаемо укакалась, на банальной, тупой задачке на разворот строки. Какие-то есть предложения, что вопрос задан некорректно, чи что?
ты валет, 3B от 3T не отличаешь ?
какое отношение ChatGPT o1-3T имеет к твоему локальному Llama-3.2-3B высеру ?
уровень ChatGPT o1 всё ещё недостижим локально, да и нахер надо бы (4 H100) — когда o1 скока там 20$ в мес ? (подписка) С>Ну и — обычно люди не на тупой локальной LLM пытаются работать, а на каком-нибудь Claude Sonnet.
Здравствуйте, sergey2b, Вы писали:
S>использовать chatGPT для анализа юридических документов
В Confluence есть фича "сформулировать коротко". Формулирует правдоподобно, хотя added value я не увидел. Так и с юридическими документами- может правдоподобно галлюцинировать.
"конец текстовых заданий на дом, LLM всё порешала".
Там всё таки был новый ChatGPT, который не сравнить с твоей Ламой.
Если брать локальную модельку для кодинга, то посмотри на Qwen2.5-Coder-7B-Instruct.
Твой вопрос она сразу сделала на Питоне:
def reverse_words_in_place(s: list):
def reverse_substring(subs, start, end):
while start < end:
subs[start], subs[end] = subs[end], subs[start]
start += 1
end -= 1
# Переворот всей строки
reverse_substring(s, 0, len(s) - 1)
start = 0
for end in range(len(s) + 1):
if end == len(s) or s[end] == " ":
# Переворот каждого слова
reverse_substring(s, start, end - 1)
start = end + 1
# Пример использования
s = list("Hello World")
reverse_words_in_place(s)
result = ''.join(s)
print(result) # Выведет "World Hello"
Потом попросил на С++:
#include <iostream>
#include <vector>
void reverse_substring(std::vector<char>& subs, int start, int end) {
while (start < end) {
std::swap(subs[start], subs[end]);
++start;
--end;
}
}
void reverse_words_in_place(std::vector<char>& s) {
// Переворот всей строки
reverse_substring(s, 0, s.size() - 1);
int start = 0;
for (int end = 0; end <= s.size(); ++end) {
if (end == s.size() || s[end] == ' ') {
// Переворот каждого слова
reverse_substring(s, start, end - 1);
start = end + 1;
}
}
}
int main() {
std::vector<char> str = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'};
reverse_words_in_place(str);
for (char c : str) {
std::cout << c;
}
return 0;
}
Здравствуйте, Артём, Вы писали:
Аё>В обзоре на хабре клода просят сочинить стихи. Почему стихи? Все гики вдруг заторчали от стихов?
Стихи писать сложно, на них и тестируют. В стихах форма зависит от содержания (в прозе такое есть в "Улиссе", например). Нужна рифма (не обязательно в конце строк, можно и в середине строк), размер, ритм, аллитерации — вот это всё требует лексикона, синонимов, вдобавок представлять, как оно будет звучать вживую. Стихи — это устный жанр, а не письменный. Для того, чтобы они звучали, можно и сломать некоторые правила (см. Маяковский). А ещё добавить эпитетов, сравнений, олицетворений и всего того, что мы любим в классике.
Потом ещё появляются символисты типа Блока и говорят нам, что можно изобрести свой язык символов и писать на нём, вспомним школьное стихотворение о России, где нет упоминания России: "Летит, летит степная кобылица и мнёт ковыль..."
Далее в современной поэзии становится и этого мало, надо подбирать смыслы словами, слышимыми также, созвучными. Похоже на аллитерации, но более общно.
Наступает постмодернизм, приходится подхватывать знамя символистов, но брать не свой словарь символов, а использовать его из масскульта, ссылаться на фильмы, клипы, книги, которые у всех на слуху: скучаю — Хатико, против всего мира — Бони и Клайд, настоящая любовь — Леннон и Оно и т.д.
Метамодернизм — тут добавляется ещё и настроение.
Классно добавить двусмысленностей, когда строка может передать сразу много чего — "почитай старших" у Нойза (тут "почитай" сразу и про чтение, и про почитание).
При всё при этом поэты (прозаики тоже, конечно) всё равно могут придумывать свой язык, свои слова, если они красиво и к месту звучат. Тут мне нравятся новые слова у Полозковой:
край у нас широк, изобилен,
бесконечно сакрален
сколько у нас древних зубодробилен,
вековых душераздирален
перед путешественником, где чёрен,
где еще промышленно не освоен,
целый горизонт лежит живодёрен
и предателебоен
всяк у нас привит, обезболен,
власти абсолютно лоялен,
это слышно с каждой из колоколен,
изо всех шапкозакидален
и сладкоголосый, как сирин,
и красивый, как сталин
нами правит тот, кто всесилен
и идеален
от восторга мы не ругаемся больше матом,
не ебёмся, не курим,
нас по выходным только к банкоматам
выпускают из тюрем
в школе, без вопросов и встречных реплик,
наши детки, краса-отрада,
собирают нам из духовных скрепок
макеты ада
судя по тому, как нас вертухаи обходят хмуро,
и на звук подаются, дрогнув, —
скоро снова грянет большая литература
и кинематограф
И вот это усложнение формы в современной поэзии не должно быть большим препятствием к мелодичности, чтению и пониманию. Короче, всё сложно.
Для переворота порядка следования слов в строке "in place" на C++, можно использовать алгоритм с двумя указателями, который имеет временную сложность
O(n) и пространственную сложность O(1). Этот подход позволяет изменять исходную строку без создания дополнительных копий.
Функция для переворота слов в строке
Вот пример реализации такой функции:
#include <iostream>
#include <string>
#include <algorithm>
void reverseWords(std::string& str) {
// Шаг 1: Перевернуть всю строку
std::reverse(str.begin(), str.end());
// Шаг 2: Перевернуть каждое слово в строке
size_t start = 0;
for (size_t end = 0; end <= str.length(); ++end) {
// Если достигнут конец слова или конец строкиif (end == str.length() || str[end] == ' ') {
std::reverse(str.begin() + start, str.begin() + end);
start = end + 1; // Переход к следующему слову
}
}
}
int main() {
std::string input = "Hello World from C++";
reverseWords(input);
std::cout << "Reversed words: " << input << std::endl;
return 0;
}
Объяснение кода
Переворот всей строки: Сначала мы переворачиваем всю строку, чтобы слова оказались в обратном порядке.
Переворот каждого слова: Затем мы проходим по строке и переворачиваем каждое слово обратно, используя два указателя (start и end). Когда мы встречаем пробел или конец строки, это означает, что мы достигли конца слова.
Примечания
Использование std::reverse из заголовка <algorithm> позволяет эффективно переворачивать диапазон символов, что делает код простым и понятным125.
Временная сложность данного алгоритма составляет O(n), где n — длина строки, так как каждый символ обрабатывается не более двух раз.
Пространственная сложность составляет O(1), так как мы не используем дополнительные структуры данных для хранения результата.
Здравствуйте, Артём, Вы писали:
Аё>Здравствуйте, xma, Вы писали:
xma>>Что умеет новая модель Claude 3.5 Sonnet? xma>>https://habr.com/ru/companies/bothub/articles/823580/
Аё>В обзоре на хабре клода просят сочинить стихи. Почему стихи? Все гики вдруг заторчали от стихов?
Я там написал телегу о том, как сложно писать стихи и почему нейронкам они недоступны.
Упс! Статья в Nature говорит, что в слепом тестировании ИИ выигрывает у людей и в этом плане. Забавно, не ожидал.
Остаётся пока одно утешение: всё таки ИИ стихи писать не научился сам, а научился подражать.
Здравствуйте, Nuzhny, Вы писали:
N>Стихи писать сложно, на них и тестируют.
Стихи не нужны. Что-то полезное сделать с достаточно хорошим качеством — с этим проблемы.
BE>Для переворота порядка следования слов в строке "in place" на C++, можно использовать алгоритм с двумя указателями, который имеет временную сложность
BE>O(n) и пространственную сложность O(1). Этот подход позволяет изменять исходную строку без создания дополнительных копий.
BE>Функция для переворота слов в строке
BE>Вот пример реализации такой функции:
BE>
BE>#include <iostream>
BE>#include <string>
BE>#include <algorithm>
BE>void reverseWords(std::string& str) {
BE> // Шаг 1: Перевернуть всю строку
BE> std::reverse(str.begin(), str.end());
BE> // Шаг 2: Перевернуть каждое слово в строке
BE> size_t start = 0;
BE> for (size_t end = 0; end <= str.length(); ++end) {
BE> // Если достигнут конец слова или конец строки
BE> if (end == str.length() || str[end] == ' ') {
BE> std::reverse(str.begin() + start, str.begin() + end);
BE> start = end + 1; // Переход к следующему слову
BE> }
BE> }
BE>}
BE>int main() {
BE> std::string input = "Hello World from C++";
BE> reverseWords(input);
BE> std::cout << "Reversed words: " << input << std::endl;
BE> return 0;
BE>}
BE>
BE>Объяснение кода
BE>Переворот всей строки: Сначала мы переворачиваем всю строку, чтобы слова оказались в обратном порядке.
BE>Переворот каждого слова: Затем мы проходим по строке и переворачиваем каждое слово обратно, используя два указателя (start и end). Когда мы встречаем пробел или конец строки, это означает, что мы достигли конца слова.
BE>Примечания
BE>Использование std::reverse из заголовка <algorithm> позволяет эффективно переворачивать диапазон символов, что делает код простым и понятным125.
BE>Временная сложность данного алгоритма составляет O(n), где n — длина строки, так как каждый символ обрабатывается не более двух раз.
BE>Пространственная сложность составляет O(1), так как мы не используем дополнительные структуры данных для хранения результата.
Какая модель?
Вот я локально запустил phi3 mini
LMStudio Phi-3.1-mini-128k-instruct-GGUF
You
You are C++ developer.
Assistant
Phi-3.1-mini-128k-instruct-GGUF
As a proficient C++ Developer, I am skilled in crafting efficient and robust software applications utilizing the features of modern C++ standards such as C++17 or above. My expertise spans various aspects including object-oriented programming principles for designing modular code, template metaprogramming to generate type-safe generic components, exception handling mechanisms that ensure program stability and reliability under unexpected scenarios, multi-threading support using concurrency libraries such as <thread> or std::async, memory management techniques involving smart pointers (e.g., std::unique_ptr, std::shared_ptr) to prevent leaks while maintaining performance efficiency, file I/O operations through streams and filesystem APIs for data persistence needs, graphical user interface development with libraries such as Qt or wxWidgets if necessary, network programming using sockets API (e.g., Boost Asio) to enable communication between different parts of an application across a network, along with database interaction capabilities by integrating SQL databases through the use of ODBC drivers and ORM frameworks like Entity Framework Core for more complex data-driven applications. Moreover, I am committed to leveraging C++17's structured bindings in algorithms or std::variant containers where polymorphic behavior is required without resorting to traditional inheritance hierarchies. My portfolio of work includes developing game engines that showcase realistic physics simulations with the aid of libraries like Box2D, implementing artificial intelligence for non-player characters utilizing neural networks and reinforcement learning algorithms, as well as contributing codebases in open source projects enhancing software quality through community collaboration.
5.06 tok/sec
•
351 tokens
•
1.13s to first token
•
Stop: eosFound
You
Write a function in C++ that reverts words in text in-place. Text stored in memory as a char[].
Assistant
Phi-3.1-mini-128k-instruct-GGUF
#include <iostream>
#include <algorithm> // For std::reverse
void ReverseWordsInPlace(char* text, int length) {
auto last = (text + length — 1);
for (int i = 0; i <= length && *text != '\0'; ++i) {
// Skip spaces to find the start of a word.
while (*(last) == ' ') --last;
if (*text != ' ') break;
}
last--; // One past-the-end character for std::reverse algorithm.
auto it = text; // Iterator to the start of a word or end array position.
while (it < last) {
if (*(it++) == ' ') ++it; // Skip spaces within words during reversal.
std::reverse(&*text, &*(++it)); // Reverse characters from text to it excluding the space itself.
}
}
int main() {
char sampleText[] = "Hello world! This is a test.";
int length = sizeof(sampleText) — (sizeof(" ") /* for null terminator */ ; // Calculate string length without the extra space character.
ReverseWordsInPlace(sampleText, length);
std::cout << "Reversed words in-place:\n" << sampleText; // Outputs: ".tset a si sihT !dlrow olleH\0" (including the null terminator)
main.cpp:41:78: error: expected ')' int length = sizeof(sampleText) — (sizeof(" ") /* for null terminator */ ; // Calculate string length without the extra space character. ^ main.cpp:41:39: note: to match this '(' int length = sizeof(sampleText) — (sizeof(" ") /* for null terminator */ ; // Calculate string length without the extra space character. ^ 1 error generated.
Дальше я пытался запретить std::reverse, запретить комментарии в коде, но всё тщётно- бредогенератор генерил бред в комментариях и бред в коде. Код ни разу не скомпилился.