- 1
0871 jmp 0x0871
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+253.5
0871 jmp 0x0871
Прислали после дизассемблирования:))
−512
Public Function MakeShort(Parametr As String) As String
Dim temp As String
Dim f1index As Integer
Dim Lastindex As Integer
If (Parametr <> "") Then
temp = Strings.Replace(Parametr, "\", " ")
temp = Strings.Replace(temp, "/", " ")
temp = Strings.Replace(temp, ":", " ")
temp = Strings.Replace(temp, "*", " ")
temp = Strings.Replace(temp, "?", " ")
temp = Strings.Replace(temp, "<", " ")
temp = Strings.Replace(temp, ">", " ")
temp = Strings.Replace(temp, "|", " ")
f1index = Strings.InStr(temp, Strings.Chr(34))
Lastindex = Strings.InStrRev(temp, Strings.Chr(34))
temp = Strings.Mid(temp, f1index, Lastindex)
MakeShort = Strings.Replace(temp, Strings.Chr(34), "")
Else
MakeShort = ""
End If
End Function
Что то типа парсера... или точнее готовится так из строки имя файла
+22
typedef struct tagRECT{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
typedef const RECT FAR* LPCRECT;
typedef struct _RECTL{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECTL, *PRECTL, *LPRECTL;
typedef const RECTL FAR* LPCRECTL;
Вот так тайпдефятся абсолютно одинаковые структуры в windef.h
0
const ttfMeta = require('ttfmeta');
const fs = require('fs');
let oldName = process.argv[2];
ttfMeta.ttfInfo(oldName, (err, result) => {
if (err) {
console.log('error', err)
} else {
let newName = result.tables.name[6];
if(newName.charCodeAt(0) === 0) {
let buf = new ArrayBuffer(newName.length);
let bufView = new Uint16Array(buf);
for (let i = 0, strLen = newName.length / 2; i < strLen; i++) {
bufView[i] = (newName.charCodeAt(2 * i) << 8) + newName.charCodeAt(2 * i + 1);
}
newName = String.fromCharCode.apply(null, bufView);
}
newName = 'renamed/' + newName + '.ttf';
fs.createReadStream(oldName).pipe(fs.createWriteStream(newName));
}
});
Дано: 100500 ttf-файлов с рандомными именами файла (цифры, гуиды, что угодно, но только не название шрифта).
Требуется: переименовать файлы так, чтобы название хоть как-то было похоже на имя шрифта.
Решение: есть 100500 библиотек на сишке для вытаскивания метушни из ttf-файлов, но мы же извращенцы, поэтому напишем на скриптушне.
Багор: пакет «ttfmeta» из «npm» иногда возвращает нормальные текстовые строки, а иногда хуйню (детектируемую условием newName.charCodeAt(0) === 0), когда пара соседних «символов» — это на самом деле половинки кодпоинта из кодировки utf16be. «Нода» умеет только в toString('utf16le'), а кодировку с большим индейцем ('utf16be') не знает.
0
// https://github.com/gcc-mirror/gcc/blob/ec03862f809e544a9b7d28067e51597dc92a0244/libstdc%2B%2B-v3/include/bits/forward_list.tcc#L391-L411
template<typename _Tp, typename _Alloc>
bool
operator==(const forward_list<_Tp, _Alloc>& __lx,
const forward_list<_Tp, _Alloc>& __ly)
{
// We don't have size() so we need to walk through both lists
// making sure both iterators are valid.
auto __ix = __lx.cbegin();
auto __iy = __ly.cbegin();
while (__ix != __lx.cend() && __iy != __ly.cend())
{
if (!(*__ix == *__iy))
return false;
++__ix;
++__iy;
}
if (__ix == __lx.cend() && __iy == __ly.cend())
return true;
else
return false;
}
из стандартной библиотеки крестоговна от GCC
+1
// https://github.com/gcc-mirror/gcc/blob/b0c83d59f44bf677c8d74acae228acf32719acb3/libstdc%2B%2B-v3/include/bits/regex_compiler.tcc#L446
template<typename _TraitsT>
template<bool __icase, bool __collate>
bool
_Compiler<_TraitsT>::
_M_expression_term(pair<bool, _CharT>& __last_char,
_BracketMatcher<_TraitsT, __icase, __collate>& __matcher)
{
if (_M_match_token(_ScannerT::_S_token_bracket_end))
return false;
const auto __push_char = [&](_CharT __ch)
{
if (__last_char.first)
__matcher._M_add_char(__last_char.second);
else
__last_char.first = true;
__last_char.second = __ch;
};
const auto __flush = [&]
{
if (__last_char.first)
{
__matcher._M_add_char(__last_char.second);
__last_char.first = false;
}
};
if (_M_match_token(_ScannerT::_S_token_collsymbol))
{
auto __symbol = __matcher._M_add_collate_element(_M_value);
if (__symbol.size() == 1)
__push_char(__symbol[0]);
else
__flush();
}
else if (_M_match_token(_ScannerT::_S_token_equiv_class_name))
{
__flush();
__matcher._M_add_equivalence_class(_M_value);
}
else if (_M_match_token(_ScannerT::_S_token_char_class_name))
{
__flush();
__matcher._M_add_character_class(_M_value, false);
}
else if (_M_try_char())
__push_char(_M_value[0]);
// POSIX doesn't allow '-' as a start-range char (say [a-z--0]),
// except when the '-' is the first or last character in the bracket
// expression ([--0]). ECMAScript treats all '-' after a range as a
// normal character. Also see above, where _M_expression_term gets called.
//
// As a result, POSIX rejects [-----], but ECMAScript doesn't.
// Boost (1.57.0) always uses POSIX style even in its ECMAScript syntax.
// Clang (3.5) always uses ECMAScript style even in its POSIX syntax.
//
// It turns out that no one reads BNFs ;)
else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
{
if (!__last_char.first)
{
if (!(_M_flags & regex_constants::ECMAScript))
{
if (_M_match_token(_ScannerT::_S_token_bracket_end))
{
__push_char('-');
return false;
}
__throw_regex_error(
regex_constants::error_range,
"Unexpected dash in bracket expression. For POSIX syntax, "
"a dash is not treated literally only when it is at "
"beginning or end.");
}
__push_char('-');
}
else
{
if (_M_try_char())
{
__matcher._M_make_range(__last_char.second, _M_value[0]);
__last_char.first = false;
}
else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
{
__matcher._M_make_range(__last_char.second, '-');
__last_char.first = false;
}
else
{
if (_M_scanner._M_get_token()
!= _ScannerT::_S_token_bracket_end)
__throw_regex_error(
regex_constants::error_range,
"Character is expected after a dash.");
__push_char('-');
}
}
}
Читаю тут реализацию стандартной говнокрестовой библиотеки из GCC
Какой багор )))
0
impl Drop for FileDesc {
fn drop(&mut self) {
// Note that errors are ignored when closing a file descriptor. The
// reason for this is that if an error occurs we don't actually know if
// the file descriptor was closed or not, and if we retried (for
// something like EINTR), we might close another valid file descriptor
// opened after we closed ours.
let _ = unsafe { libc::close(self.fd) };
}
}
https://github.com/rust-lang/rust/blob/master/library/std/src/sys/unix/fd.rs#L294
Похуй на ошибки возврата, да? Ведь из деструктора вернуть код ошибки нельзя, а исключения... А, это ж Раст, хуй с ними с исключениями короче.
Для ШЫНДОШЫ такая же хуйня, но тут они даже камент написать постыдились: https://github.com/rust-lang/rust/blob/master/library/std/src/sys/windows/handle.rs#L54
Вручную скинуть буфер на диск - тоже нечем, потому что функция, которой я пользовался в сишке, тут бесполезна:
https://github.com/rust-lang/rust/blob/master/library/std/src/sys/unix/fs.rs#L861
https://github.com/rust-lang/rust/blob/master/library/std/src/sys/windows/fs.rs#L438
Короче, мне тут продакшон код надо писать за зарплату, а я не знаю, как вернуть юзеру информацию о неудачном закрытии. Что делать-тоа?!
+1
//Попробуйте программно смоделировать разговор людей.Всего есть 10 людей.Каждый человек имеет имя(строку) и возраст(число).
//Возраст каждого человека генерируется рандомно из диапазона от 20 до 40, а имена состоят из следующего списка:
//Александр, Андрей, Анастасия, Ирина, Наталья, Павел, Роман, Светлана, Сергей, Татьяна.
//Любой человек способен выполнять два действия :
//-здороваться с другим человеком;
//-рассказывать о себе.
//Люди делятся на 3 типа(разные классы) :
// Тип №1 : Формалисты.Здороваются со всеми следующим образом : Здравствуйте, <имя>!, где <имя> — это имя человека, с которым он здоровается.
// Тип №2 : Неформалы.Со всеми здороваются : Привет, <имя>!.
// Тип №3 : Реалисты.Если возраст собеседника меньше / равен или не больше, чем на 5 лет, то здороваются следующим образом : Привет, <имя>!, в противном случае — Здравствуйте, <имя>!.
// В программной реализации приветствие должно быть реализовано как полиморфный метод, принимающий человека в качестве параметра и возвращающий строку.
// Рассказ о человеке является строкой формата "Меня зовут Вася, мой возраст 21 лет и я неформал" (вместо Вася используется имя любого другого человека,
// вместо 21 возраст этого человека, вместо неформал может быть формалист, либо реалист).Как видите у людей с грамматикой не всё в порядке,
// и они говорят лет после любого числа — непорядок, это нужно обязательно исправить.
// Программа должна показать информацию обо всех людях.Затем все люди должны поздороваться друг с другом в следующем порядке :
// первый здоровается со вторым, затем второй с первым, а затем первый с третьим, третий с первым и т.д.Например :
// Петя : Привет, Вася!
// Вася : Здравствуйте, Петя!
// Петя : Привет, Женя!
// Женя : Привет, Петя!
unique_ptr<Person>& createPerson()
{
switch (getRandomNumber(0, 2))
{
case 0:
{
unique_ptr<Person> person = make_unique<Formalist>(RANDNAME_0_10, RANDAGE_20_40);
return person;
}
case 1:
{
unique_ptr<Person> person = make_unique<Neformal>(RANDNAME_0_10, RANDAGE_20_40);
return person;
}
case 2:
{
unique_ptr<Person> person = make_unique<Realist>(RANDNAME_0_10, RANDAGE_20_40);
return person;
}
default:
{
unique_ptr<Person> person = nullptr;
return person;
}
};
}
void createGroup(vector<unique_ptr<Person>>& group, int8_t size)
{
unique_ptr<Person> tempPerson = nullptr;
for (int i = 0; i < size; ++i)
{
tempPerson = std::move(createPerson());
group.push_back(tempPerson);
}
}
Не могу понять как инициализировать массив в createGroup() через unique_pointers. Нужно ли было изначально возвращать shared pointers из createPerson()? Или использовать перемещения с unique_pointers? И куда по правильному впихивать using namespace std; если не в global scope? Спасибо заранее
Полный код
https://repl.it/@radionnazmiev/Ravesli#Ravesli_12_H/main.cpp
+1
func (svc *UserSvc) isEmptyName(name model.User_Name) bool {
if name.First.RU == "" {
if name.First.EN == "" {
if name.First.TR == "" {
if name.First.IT == "" {
if name.Last.RU == "" {
if name.Last.EN == "" {
if name.Last.TR == "" {
if name.Last.IT == "" {
return true
}
}
}
}
}
}
}
}
return false
}
Проверка заполненности имени пользователя хотя - бы на одном из языков.
0
Я год не писал на C++. И вот пришло тестовое задание, сижу решаю.
И сссссс(ка, как же меня штырит.
Я наркоман.
Испытываю смесь эйфории с тревогой.
Принять миртазапин чтоли?