- 1
Объявляется неделя английского языка
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
Объявляется неделя английского языка
с воскресенья по субботу общаемся только по-английски; уклонившийся - вонючка
+1
#!/usr/bin/env python3
# -*- coding: UTF8 -*-
from datetime import date
from os import environ, mkdir, system
from os.path import dirname, exists, join as path_join
from time import time
def check_verbose():
return environ.get("DEBUG") in ("true", "True", "TRUE", True, "yes", "Yes", "YES")
class Timer:
def __init__(self):
"""
Объект добавляет в начале текста временные метки
"""
self.start_epoch = self.last_call = time()
@staticmethod
def __fully_scope(timer: int or str) -> str:
"""
Преобразует однозначные значения в двузначные.
:param timer: Время
:return: Двузначное значение
"""
if len(str(timer)) == 2:
return str(timer)
elif len(str(timer)) == 1:
return "0" + str(timer)
elif len(str(timer)) <= 0:
return "00"
elif len(str(timer)) >= 2:
return str(timer)[:2]
def __formatter(self, timestep: float) -> str:
"""
Форматирует время
:return: время hh:mm:ss
"""
_hours = int(timestep // 3600), int(timestep % 3600)
_minute = int(_hours[1] // 60), int(_hours[1] % 60)
_current_epoch = f"{self.__fully_scope(_minute[0])}:{self.__fully_scope(_minute[1])}"
if _hours[0] > 0:
_current_epoch = f"{_hours[0]}:" + _current_epoch
return _current_epoch
def __call__(self, fix_call: bool = True) -> str:
"""
Считает время с начала сценария + с последнего шага
:return: время hh:mm:ss(+hh:mm:ss)
"""
current_epoch = self.__formatter(time() - self.start_epoch)
timedelta_epoch = self.__formatter(time() - self.last_call)
if fix_call:
self.last_call = time()
return f"{current_epoch}(+{timedelta_epoch})"
def __bool__(self):
return True
class Logger:
def __init__(self, name: str):
self.start_time = time()
self.name = name.upper()
self.timer = Timer()
self.log_file = path_join(environ["RESULT_DIR"], name, f"{name}_{date.today().isoformat()}.log")
def check_file(self):
if not exists(self.log_file):
if not exists(dirname(self.log_file)):
mkdir(dirname(self.log_file))
system(f"echo {date.today().isoformat()}> {self.log_file}")
def save_log(self, msg: str):
self.check_file()
with open(self.log_file, "a+") as _log_file:
_log_file.write(msg + "\n")
def massage(self, msg: str):
print(f"{self.timer()}::{self.name}::{msg}")
self.check_file()
self.save_log(f"{self.timer()}::{self.name}::{msg}")
def multi_msg(self, level: str, msg: any):
if isinstance(msg, (str, int, float, bool)):
self.massage(f"{level.upper()}::{msg}")
elif isinstance(msg, (tuple, list, set)):
for _msg in msg:
self.multi_msg(level, _msg)
elif isinstance(msg, dict):
for _msg_key in msg:
Ну собственно самописный логгер, потому что "библиатечный логгер переусложнен НИНАДА!"
+1
class FileCheckError(Exception):
def __init__(self, check, file):
self.check = check
self.file = file
self.exceptions = ['не является файлом',
'не является .wav файлом',
'не находится в списке требуемых сэмплов',]
def __str__(self):
return f'{self.file} {self.exceptions[self.check]}'
def validate_pack(pack) -> list:
"""
Checks for invalid files in a pack folder
Makes a list of invalid files if found any or
makes a list of accepted samples
"""
accepted_samples = []
found_errors = []
for sample in listdir(pack):
checks = [isfile(join(pack, sample)),
fnmatch(sample, '*.wav'),
Path(pack / sample).stem in required_samples, ]
try:
for check in range(len(checks)):
if not checks[check]:
raise FileCheckError(check=check, file=sample)
except FileCheckError as E:
found_errors.append(str(E))
continue
accepted_samples.append(sample)
if len(found_errors) != 0:
return found_errors
else:
return accepted_samples
result = validate_pack(Path('drumpacks/rock'))
print(result, sep='\n')
+1
С днём программиста, питухи!
И курицы.
+1
Яндекс сгнил :(
+1
Конструктор по умолчанию?
Не, не слышали.
Рефлексией итерируемся по свойствам и вызываем функцию инициализации полей ))))))))))))))
+1
СТРЗАМЕНИТЬ(СОКРЛ(СТРЗАМЕНИТЬ(уатПутевойЛист.Номер, "0", " ")), " ", "0") КАК НомерПЛ,
Удаляет нули в номере документа для вывода на печатную форму
+1
/**
* @param string $login
* @return User
* @throws GuzzleException
*/
public function getExternalUser(string $login):FreeIpaUser{
return $this->UserFactory->createUser($login,$this->getUser($login));
}
+1
Из-за тебя ушел я, %username%!
Ня, пока.
+1
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
void swap(uint8_t *x, uint8_t *y)
{
uint8_t tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
// эту хуйню тоже можно нагенерировать
uint64_t cmp_bits(uint8_t a[restrict 9])
{
return
((uint64_t)(a[0] < a[1]) << 0) |
((uint64_t)(a[0] < a[2]) << 1) |
((uint64_t)(a[0] < a[3]) << 2) |
((uint64_t)(a[0] < a[4]) << 3) |
((uint64_t)(a[0] < a[5]) << 4) |
((uint64_t)(a[0] < a[6]) << 5) |
((uint64_t)(a[0] < a[7]) << 6) |
((uint64_t)(a[0] < a[8]) << 7) |
((uint64_t)(a[1] < a[2]) << 8) |
((uint64_t)(a[1] < a[3]) << 9) |
((uint64_t)(a[1] < a[4]) << 10) |
((uint64_t)(a[1] < a[5]) << 11) |
((uint64_t)(a[1] < a[6]) << 12) |
((uint64_t)(a[1] < a[7]) << 13) |
((uint64_t)(a[1] < a[8]) << 14) |
((uint64_t)(a[2] < a[3]) << 15) |
((uint64_t)(a[2] < a[4]) << 16) |
((uint64_t)(a[2] < a[5]) << 17) |
((uint64_t)(a[2] < a[6]) << 18) |
((uint64_t)(a[2] < a[7]) << 19) |
((uint64_t)(a[2] < a[8]) << 20) |
((uint64_t)(a[3] < a[4]) << 21) |
((uint64_t)(a[3] < a[5]) << 22) |
((uint64_t)(a[3] < a[6]) << 23) |
((uint64_t)(a[3] < a[7]) << 24) |
((uint64_t)(a[3] < a[8]) << 25) |
((uint64_t)(a[4] < a[5]) << 26) |
((uint64_t)(a[4] < a[6]) << 27) |
((uint64_t)(a[4] < a[7]) << 28) |
((uint64_t)(a[4] < a[8]) << 29) |
((uint64_t)(a[5] < a[6]) << 30) |
((uint64_t)(a[5] < a[7]) << 31) |
((uint64_t)(a[5] < a[8]) << 32) |
((uint64_t)(a[6] < a[7]) << 33) |
((uint64_t)(a[6] < a[8]) << 34) |
((uint64_t)(a[7] < a[8]) << 35);
}
void printshit(uint8_t a[restrict 9])
{
size_t i = 0;
while(*a != 4)
{
a++;
i++;
}
printf("arr[%" PRIu64 "] = %zu\n", cmp_bits(a), i);
}
void permute(char *a, size_t l, size_t r)
{
size_t i;
if (l == r)
printshit(a);
else
{
for (i = l; i <= r; i++)
{
swap((a+l), (a+i));
permute(a, l+1, r);
swap((a+l), (a+i));
}
}
}
int main()
{
uint8_t a[] = {0,1,2,3,4,5,6,7,8};
size_t n = 9;
permute(a, 0, n-1);
return 0;
}
https://govnokod.ru/24496#comment782476
Построение таблицы поиска для быстрого нахождения медианы. Там эту хуйню конечно можно улучшить, например запаковывать число от 0 до 8 в хуйни по 4 бита