1
"PHP" / Говнокод #26870
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
private function _postPhotoWidth($post) {
$raw_code = rtrim(str_replace("\r", '', $post->post_content));
$lines = explode("\n", $raw_code);
if (count($lines) <= 1) {
return -1;
}
$text_width = 0;
foreach ($lines as $line) {
$text_width = max($text_width, mb_strlen($line) + substr_count($line, "\t") * 7);
}
return (int)(max(20 + $text_width, 60) * 18.5);
}
Код для вычисления длины данного гамнакода.
"PHP" / Говнокод #26866
0
- 1
- 2
- 3
- 4
- 5
- 6
В боте @GovnokodBot обновление:
Теперь говнокоды отправляются скриншотами.
Также создан канал "Говнокода" в "Telegram": https://t.me/GovnokodChannel
Баги и пожелания можно писать сюда.
Зеркала Говнокода и полезные ресурсы:
* https://govnokod.xyz/
* https://gcode.space/
* индекс оффтопов: https://index.gcode.space/
* https://t.me/GovnokodBot
* https://pethu.ru
"PHP" / Говнокод #16
0
- 1
- 2
- 3
- 4
- 5
Тестовый оффтоп на хузе #1
$args["reply_markup"] = json_encode(array("inline_keyboard" => array(array(
array("text" => "Обсудить", "url" => get_the_permalink($comment)),
))));
Перекат!
"PHP" / Говнокод #26855
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
<?php
/* -= Developed by <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="54357a277a20273138212d3f3b143339353d387a373b39">[email protected]</a> =- */
// -= О П Ц И И =-
require("config.php");
// Технические настройки скрипта
header('Content-Type: text/html; charset=utf-8');
ini_set('memory_limit', '-1');
// -=-=-=-=-=-=-=-
// -= Функции инкапсуляции технических аспектов =-
// Функция печати логов, добавляет "date n time now" и перенос строки
function printLog($text) { echo sprintf("[%s] %s", date("Y-m-d H:i:s"), $text) . "\n"; }
// Функция преобразования текста в ключ индекса, убирает пробелы, переводит в верхний регистр и добавляет префикс "_"
function str2idx($str) { return "_" . strtoupper( str_replace(' ', '', (string)$str) ); }
// Функция генерации ассоциативного массива индексов, использует str2idx
function genIdxs($array, $val_key, $idx_keys, $filter_func=NULL) {
$idxs = [];
foreach ($array as $item) {
if ($filter_func && !$filter_func($item)) { continue; }
if (is_string($idx_keys)){
foreach (preg_split("/\s?;\s?/", $item[$idx_keys]) as $idx) {
if ($idx) { $idxs[str2idx($idx)] = str2idx((string)$item[$val_key]); }
} unset($idx);
} else {
foreach ($idx_keys as $idx_key) {
foreach (preg_split("/\s?;\s?/", $item[$idx_key]) as $idx) {
if ($idx) { $idxs[str2idx($idx)] = str2idx((string)$item[$val_key]); }
}
} unset($idx_key);
}
} unset($item);
return $idxs;
}
// Функция сравнения изображений
function compareImages($image1, $image2) {
$compare_result = $image1->compareImages($image2, IMAGICK_METRIC);
return (int)$compare_result[1] > THRESHOLD_SIMILARITY_VALUE;
}
// Функция исполнения SQL-запросов в БД, инкапсулирующая все ужасы взаимодействия с БД MySQL на PHP
function execSQL($sql, $mode="fetch_assoc") {
// Проверяем коннект к БД, в случае проблем - пытаемся переподключ
if (!$GLOBALS["mysqli"] || $GLOBALS["mysqli"]->connect_errno) {
$GLOBALS["mysqli"] = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($GLOBALS["mysqli"]->connect_errno) {
throw new Exception("Can't connect to DB: (".$GLOBALS["mysqli"]->connect_errno.") ".$GLOBALS["mysqli"]->connect_error);
}
printf("default charset: %s\n", $GLOBALS["mysqli"]->character_set_name());
/* изменение набора символов на utf8 */
if (!$GLOBALS["mysqli"]->set_charset("utf8")) {
throw new Exception("set charset utf8 error: %s\n", $GLOBALS["mysqli"]->error);
} else { printf("current charset: %s\n", $GLOBALS["mysqli"]->character_set_name()); }
}
$_result = $GLOBALS["mysqli"]->query($sql);
if (!$_result) { printLog("SQL ERROR: ". $GLOBALS["mysqli"]->error . "\n executable SQL: " . $sql . "\n\n"); }
if (is_bool($_result)) { return $_result; }
elseif ($mode==="num_rows") { return $_result->num_rows; }
elseif ($mode==="fetch_assoc") {
$result = [];
while($row = $_result->fetch_assoc()) {
reset($row);
$key = str2idx($row[key($row)]);
$result[$key] = $row;
} unset($row);
return $result;
}
throw new Exception("Recieved unexpected mode (".$mode.") or query result by execute SQL: ".$sql );
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// -= Старт работы скрипта =-
$start = microtime(true);
printLog("Updater script started");
// Инициализация глобальных переменных, счетчиков
$GLOBALS["mysqli"] = NULL;
$kingsilk_offers_count = 0;
// Проверка хранилища фотографий
if (!is_dir(IMAGES_PATH)) throw new Exception("ERROR: images path not found!");
$IMAGES_FULL_PATH = IMAGES_PATH . IMAGE_PATH_PREFIX;
if (!is_dir($IMAGES_FULL_PATH)) mkdir($IMAGES_FULL_PATH);
// -=-=-=-=-=-=-=-=-=-=-=-=-=-
// -= Получение YML-данных от поставщика Кингсилк, формирование индексов =-
$yml_catalog = new SimpleXMLElement(
file_get_contents(YML_URL_KINGSILK)
);
// Формирование индекса импортируемых категорий по id'шнику категории поставщика
$GLOBALS['cats_outer_idxs'] = [];
foreach ($yml_catalog->categories->category as $cat){
$GLOBALS['cats_outer_idxs'][str2idx((string)$cat["id"])] = $cat;
} unset($cat);
// Группировка предложений поставщика по схожести картинок,
// формирование древовидного индекса по md5 хэшу картинок
$offers_groups_idxs = [];
foreach ($yml_catalog->offers->offer as $offer) {
// Отсеиваем не опубликованные товары
if ((string)$offer["available"] != "true"){
continue;
}
$kingsilk_offers_count++;
$hash = NULL;
- = А ЧО ТУТ НЕЛЬЯ ПОСТИТЬ ПОЛНЫЙ КОД = - ???
===~ ТАМ ДОХРЕНА ЕЩЁ ~==
P.S - вот как кодят питонисты на php
продолжение: <a
href="https://raw.githubusercontent.com/Siyet/goods-updater-oc3-php7/master/updater.php">Перейти</a>
"PHP" / Говнокод #26849
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
$data = [];
$firstGenreId = Genre::where('homepage_filter_band', 1)->first()->id;
$bandSearch = [
'limit' => request('limit') ?? 6,
'genre' => $firstGenreId,
'category' => BandCategory::where('homepage_filter', 1)->first()->id,
'status' => 1
];
$subGenres = Genre::getGenresByCategory($bandSearch['genre']);
$bandSearch['genre'] = [$bandSearch['genre']];
foreach ($subGenres as $subGenre){
array_push($bandSearch['genre'], $subGenre->id);
}
$data['bandsGenre']['bands'] = Band::getBandsLimitListByGenre($bandSearch);
$data['bandsGenre']['filters'] = Genre::isExistGenreByBandFilter();
$data['bandsGenre']['active_filter'] = $firstGenreId;
$data['bandsGenre']['type'] = 'genre';
$data['bandsCategories']['bands'] = Band::getBandsLimitListByCategory($bandSearch);
$data['bandsCategories']['filters'] = BandCategory::isExistCategoryByBandFilter();
$data['bandsCategories']['active_filter'] = $bandSearch['category'];
$data['bandsCategories']['type'] = 'category';
$data['bandsStatus']['bands'] = Band::getBandsLimitListByStatus($bandSearch);
$data['bandsStatus']['active_filter'] = 1;
$data['bandsStatus']['filters'] = (object)[
0 => [
'id' => 1,
'name' => trans('validation-custom.newest')
],
1 => [
'id' => 2,
'name' => trans('validation-custom.lastUpdated')
]
];
$data['bandsStatus']['type'] = 'status';
$firstGenreId = Genre::where('homepage_filter_musician', 1)->first()->id;
$firstInstrumentId = Instrument::where('homepage_filter', 1)->first()->id;
$musicianSearch = [
'limit' => request('limit') ?? 6,
'genre' => $firstGenreId,
'instrument' => $firstInstrumentId,
'status' => 1
];
$subGenres = Genre::getGenresByCategory($musicianSearch['genre']);
$musicianSearch['genre'] = [$musicianSearch['genre']];
foreach ($subGenres as $subGenre){
array_push($musicianSearch['genre'], $subGenre->id);
}
$subInstruments = Instrument::getInstrumentsByCategory($musicianSearch['instrument']);
$musicianSearch['instrument'] = [$musicianSearch['instrument']];
foreach ($subInstruments as $subInstrument){
array_push($musicianSearch['instrument'], $subInstrument->id);
}
$data['musiciansGenre']['musicians'] = User::getMusiciansLimitListByGenre($musicianSearch);
$data['musiciansGenre']['filters'] = Genre::isExistGenreByFilter();
$data['musiciansGenre']['active_filter'] = $firstGenreId;
$data['musiciansGenre']['type'] = 'genre';
$data['musiciansInstrument']['musicians'] = User::getMusiciansLimitListByInstrument($musicianSearch);
$data['musiciansInstrument']['filters'] = Instrument::isExistInstrumentByFilter();
$data['musiciansInstrument']['active_filter'] = $firstInstrumentId;
$data['musiciansInstrument']['type'] = 'instrument';
$data['musiciansStatus']['musicians'] = User::getMusiciansLimitListByStatus($musicianSearch);
$data['musiciansStatus']['active_filter'] = 1;
$data['musiciansStatus']['filters'] = (object)[
0 => [
'id' => 1,
'name' => trans('validation-custom.newest')
],
1 => [
'id' => 2,
'name' => trans('validation-custom.lastUpdated')
]
];
$data['musiciansStatus']['type'] = 'status';
return response()->json($data, 200);
Кажуть - шота сторінка довго грузиться :)
"PHP" / Говнокод #26846
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
class MyEvents extends \Event\EventsHandler {
static $key = 1;
public function BeforeQuery() {
Timer::start(self::$key);
}
public function AfterQuery() {
Timer::step(self::$key++);
if(Timer::$last['different'] > 1) {
$debug_backtrace = debug_backtrace();
foreach($debug_backtrace as $k=>$v) {
if($v['function'] == 'q') {
$error = "QUERY: ".$v['args'][0]."\n".
"file: ".$v['file']."\n".
"line: ".$v['line']."\n".
"date: ".date("Y-m-d H:i:s")."\n".
"===================================";
file_put_contents('./logs/slowquery.log',$error."\r\n",FILE_APPEND);
break;
}
}
}
}
public function ShutDownSystem() {
echo microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
}
}
Event::setEventHandler('MyEvents');
q("SELECT * FROM `table` ORDER BY RAND()");
q("SELECT NOW()");
echo Timer::result();
Измеряем время запросов и время загрузки страницы
https://school-php.com/tricks/23/dokumentatsiya-po-fw
"PHP" / Говнокод #26842
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
while (true) {
if ($current === $requested) {
break;
}
if (! in_array($requested, $available)) {
break;
}
session()->put('locale', $requested);
break;
}
"PHP" / Говнокод #26832
0
- 1
- 2
- 3
Именно поэтому я за «PHP» #3
#1: https://govnokod.ru/26462 https://govnokod.xyz/_26462
#2: https://govnokod.ru/26827 https://govnokod.xyz/_26827
"PHP" / Говнокод #26829
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
// Both set_time_limit(...) and ini_set('max_execution_time',...); won't count the time cost of sleep,
// file_get_contents,shell_exec,mysql_query etc, so i build this function my_background_exec(),
// to run static method/function in background/detached process and time is out kill it:
// my_exec.php:
<?php
function my_background_exec($function_name, $params, $str_requires, $timeout=600)
{$map=array('"'=>'\"', '$'=>'\$', '`'=>'\`', '\\'=>'\\\\', '!'=>'\!');
$str_requires=strtr($str_requires, $map);
$path_run=dirname($_SERVER['SCRIPT_FILENAME']);
$my_target_exec="/usr/bin/php -r \"chdir('{$path_run}');{$str_requires} \\\$params=json_decode(file_get_contents('php://stdin'),true);call_user_func_array('{$function_name}', \\\$params);\"";
$my_target_exec=strtr(strtr($my_target_exec, $map), $map);
$my_background_exec="(/usr/bin/php -r \"chdir('{$path_run}');{$str_requires} my_timeout_exec(\\\"{$my_target_exec}\\\", file_get_contents('php://stdin'), {$timeout});\" <&3 &) 3<&0";//php by default use "sh", and "sh" don't support "<&0"
my_timeout_exec($my_background_exec, json_encode($params), 2);
}
// ...
Шедевр (заплюсованный) из https://www.php.net/manual/ru/function.set-time-limit.php.
"PHP" / Говнокод #26827
0
- 1
Именно поэтому я за «PHP».
"PHP" / Говнокод #26781
0
- 1
- 2
- 3
https://github.com/moscow-technologies/blockchain-voting/tree/voting2020/elec2020/ballot
https://github.com/moscow-technologies/blockchain-voting/blob/voting2020/elec2020/ballot/public/js/forms/mgik/LeavingPageCheckerInit.js
https://github.com/moscow-technologies/blockchain-voting/blob/voting2020/elec2020/frontend-library-source/crypto-lib/src/util/numberFromLeBytes.js
Как и всё в этой стране, обнуление написано на PHP, jQuery и (да-да)
местами Rust, а управляется supervisord, ибо для редактирования юнитов
systemd нужно sudo, который не дали.
Какой блокчейн )))
"PHP" / Говнокод #26754
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
/**
* @param int $filterType
* @return int
*/
public static function performanceFarmerStatFilterTranslator(int $filterType): int
{
switch (true) {
case 1 === $filterType:
return Task::TYPE_PREPARE_ACCOUNTS_BY_REQUEST;
case 2 === $filterType:
return Task::TYPE_PREPARE_GOOGLE_ACCOUNTS_BY_REQUEST;
case 3 === $filterType:
return Task::TYPE_PREPARE_TWITTER_ACCOUNTS_BY_REQUEST;
case 4 === $filterType:
return Task::TYPE_PASSWORD_MATCHING;
case 6 === $filterType:
return Task::TYPE_ACCOUNT_MARKUP;
case 7 === $filterType:
return Task::TYPE_REPLACE_ACCOUNTS;
}
return 0;
}
"PHP" / Говнокод #26749
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
<?php
$bool1 = false;
$bool2 = true;
$info = '';
if ($bool1 || function () {
if ($bool2)
{
$info = 'Привет мир!';
}
})
{
echo 'Код выполнен';
}
echo $info . "\n";
?>
Еще бы работало:D
"PHP" / Говнокод #26748
0
- 1
https://webmakaka.ru/
"PHP" / Говнокод #26746
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
interface PostRepository
{
public function save(Post $model);
}
class Post
{
protected $id;
protected $title;
protected $content;
public function setId(int $id)
{
$this->id = $id;
}
public function getId(): ?int
{
return $this->id;
}
public function setTitle(string $title)
{
$this->title = $title;
}
public function getTitle(): string
{
return $this->title ?: '';
}
public function setContent(string $content)
{
$this->content = $content;
}
public function getContent(): string
{
return $this->content ?: '';
}
}
Блядь, до чего ж отвратительный код. Говёность «PHP», тщательно и с
извращённой любовью смешанная с ЙАЖАвским бойлерплейтом. Омерзительно.
https://habr.com/ru/post/505400/
>>> Как должны выглядеть модели?
"PHP" / Говнокод #26731
0
- 1
Error displaying the error page: Application Instantiation Error: Could not connect to MySQL.
МОЭК запустила дополнительный информационный сервис для москвичей о сроках отключения горячей воды
https://online.moek.ru
"PHP" / Говнокод #26718
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
if ($arItem['OFFERS_PROPS_DISPLAY']) {
foreach ($arItem['JS_OFFERS'] as $keyOffer => $arJSOffer) {
$strProps = '';
if (!empty($arJSOffer['DISPLAY_PROPERTIES'])) {
foreach ($arJSOffer['DISPLAY_PROPERTIES'] as $arOneProp) {
$strProps .= '<br>'.$arOneProp['NAME'].' <strong>'.(
is_array($arOneProp['VALUE'])
? implode(' / ', $arOneProp['VALUE'])
: $arOneProp['VALUE']
).'</strong>';
}
}
$arItem['JS_OFFERS'][$keyOffer]['DISPLAY_PROPERTIES'] = $strProps;
}
}
foreach ($arItem['JS_OFFERS'] as $keyOffer => $arJSOffer) {
if ($arItem['PROPERTIES']['OLD_PRICE']['VALUE'] > 0 &&
$arItem['PROPERTIES']['OLD_PRICE']['ACTIVE'] == 'Y' &&
($arItem['PROPERTIES']['OLD_PRICE']['VALUE'] * $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO']) > $arItem['JS_OFFERS'][$keyOffer]['PRICE']['VALUE']) {
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['VALUE'] = $arItem['PROPERTIES']['OLD_PRICE']['VALUE'] * $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRINT_VALUE'] = CCurrencyLang::CurrencyFormat($arItem['JS_OFFERS'][$keyOffer]['PRICE']['VALUE'], $arItem['JS_OFFERS'][$keyOffer]['PRICE']['CURRENCY']);
}
$maxItemPriceValue = ($arItem['JS_OFFERS'][$keyOffer]['PRICE']['VALUE'] > $maxBasisPriceValue) ? $arItem['JS_OFFERS'][$keyOffer]['PRICE']['VALUE'] : $maxBasisPriceValue;
$discount = $maxItemPriceValue - $arItem['JS_OFFERS'][$keyOffer]['PRICE']['DISCOUNT_VALUE'];
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['VALUE'] = $maxItemPriceValue;
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['ECONOMY'] = $discount;
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['VALUE'] = $maxItemPriceValue / $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['ECONOMY'] = $discount / $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['CATALOG_MEASURE_RATIO'] = $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
if ($isPriceMulty && count($arItem['OFFERS'][$keyOffer]['PRICES']) > 1 && (!$arParams['TAB_TYPE'] || ($arResult['IS_SHOW_LARGE_PREVIEW'] && !in_array('prodday', $itemType) && !in_array('action', $itemType)))) {
$iPrice = 0;
$maxBasisItemPriceValue = $maxBasisPriceValue / $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
foreach($arItem['OFFERS'][$keyOffer]['PRICES'] as $arPrice) {
$maxItemPriceValue = ($arPrice['VALUE'] > $maxBasisItemPriceValue) ? $arPrice['VALUE'] : $maxBasisItemPriceValue;
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRICES'][$iPrice]['TITLE'] = $arItem['OFFERS'][$keyOffer]['CATALOG_GROUP_NAME_' . $arPrice['PRICE_ID']];
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRICES'][$iPrice]['DISCOUNT_VALUE'] = $arPrice['DISCOUNT_VALUE'];
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRICES'][$iPrice]['VALUE'] = $maxItemPriceValue;
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRICES'][$iPrice]['ECONOMY'] = $maxItemPriceValue - $arPrice['DISCOUNT_VALUE'];
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRICES'][$iPrice]['CURRENCY'] = $arPrice['CURRENCY'];
$arItem['JS_OFFERS'][$keyOffer]['PRICE']['PRICES'][$iPrice]['CATALOG_MEASURE_RATIO'] = $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['PRICES'][$iPrice]['TITLE'] = $arItem['OFFERS'][$keyOffer]['CATALOG_GROUP_NAME_' . $arPrice['PRICE_ID']];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['PRICES'][$iPrice]['DISCOUNT_VALUE'] = $arPrice['DISCOUNT_VALUE'];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['PRICES'][$iPrice]['VALUE'] = $maxItemPriceValue;
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['PRICES'][$iPrice]['ECONOMY'] = $maxItemPriceValue - $arPrice['DISCOUNT_VALUE'];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['PRICES'][$iPrice]['CURRENCY'] = $arPrice['CURRENCY'];
$arItem['JS_OFFERS'][$keyOffer]['BASIS_PRICE']['PRICES'][$iPrice]['CATALOG_MEASURE_RATIO'] = $arItem['OFFERS'][$keyOffer]['CATALOG_MEASURE_RATIO'];
$iPrice++;
}
}
}
js прайс ?
"PHP" / Говнокод #26698
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
<?php
echo count($arr);
$i = count($arr) - 1;
for ($i; $i >= 0; $i--) {
?>
<div class="post" id="p<?php echo $arr[$i]->_id; ?>">
<div class="p_title"><?php echo $arr[$i]->title; ?></div>
<div class="p_content"><?php echo $arr[$i]->content; ?></div>
<div class="p_date"><?php echo $arr[$i]->date; ?></div>
<form id="<?php echo $arr[$i]->_id; ?>" action="index.php" method="get">
<!--<textarea rows="4" cols="50" name="removid" style="display: none;" ><?php echo $arr[$i]->_id; ?></textarea>-->
<input type="text" name="removid" form="<?php echo $arr[$i]->_id; ?>" value="<?php echo $arr[$i]->_id; ?>"/>
<input type="submit" class="p_remove" onclick="dele('<?php echo $arr[$i]->_id; ?>');" form="<?php echo $arr[$i]->_id; ?>" value="Удалить"/>
</form><!--</div>-->
<?php echo $arr[$i]->_id; ?>
</div>
<?php
}
?>
<script>
function dele(param){
var jsVar = "<?php
$removid = $_GET['removid'];
$bulk = new MongoDB\Driver\BulkWrite;
//$bulk->delete(['_id'=> new MongoDB\BSON\ObjectId($removid)]);
$query = new MongoDB\Driver\Query(['_id'=> new MongoDB\BSON\ObjectId($removid)]);
$bulk->delete(['_id'=> new MongoDB\BSON\ObjectId($removid)]);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
try {
$result = $manager->executeBulkWrite('forum.posts', $bulk, $writeConcern);
//header('Location: https://benar.wtf/index.php');
}
catch (MongoDB\Driver\Exception\BulkWriteException $e) {
$result = $e->getWriteResult();
}
?>";
}
</script>
Сделал вещь
"PHP" / Говнокод #26684
0
- 1
https://imgur.com/w4Dbg19
наймите @нормальных программистов
"PHP" / Говнокод #26675
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
// Вот код скрипта для отправки емейла:
mb_internal_encoding ("utf-8");
$from = "Иван Иванов <<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f8918e9996b8918e9996d68c9788">[email protected]</a>>";
$to = $name."<$email>";
$subject = "Подтверждение подписки";
$message = "текст письма здесь";
$headers = "From: ".$from."\nReply-To: ".$from."\nContent-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: 8bit";
mail ($to, $subject, $message, $headers);
// И что характерно, само тело письма приходит в правильной кодировке. А вот поля отправителя,
// получателя и сабж письма - в краказябинах. Сами тексты этих полей 100% написаны в utf-8, код скрипта тоже в utf-8.
// Вот что что я вижу в почте:
// Subject: РРѕРґСРІРµСждение РїРѕРґРїРёСРєРё
// From: Рван Рванов <<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="345d42555a745d42555a1a405b44">[email protected]</a>>
// Reply-To: Рван Рванов <<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="432a35222d032a35222d6d372c33">[email protected]</a>>
// ...
// Проблема решилась следующим образом:
$subject = "=?utf-8?B?" . base64_encode("Подтверждение подписки") . "?=";
// И так для каждого поля.
https://phpclub.ru/talk/threads/Нужна-помощь-битая-кодировка-в-письме.82881/
"PHP" / Говнокод #26674
0
- 1
- 2
https://habr.com/ru/post/501798/
> C++/Qt: пора валить?.
Выбор небогат – это PHP. Да, я сказал PHP. И мне не стыдно.
Ещё раз напомню, о каком типе приложений идёт речь: о тех, где сложная
логика, требующая вычислительной производительности, реализована на
C/C++, а к ним в пару нам нужен как можно более простой открытый
язык/экосистема для общения с внешним миром и связи компонентов между
собой. А если будет C-подобный синтаксис – вообще хорошо. И тут мы
ставим галочки напротив каждого пункта наших требований.
Главное – PHP прост. При том круге задач, которые он (и экосистема)
может решать — он божественно прост. И дело не только в когнитивной
нагрузке при кодинге и переключении контекста. Простота ещё и в
развёртывании, администрировании и минимальном количестве вариантов,
которыми можно решить одну задачу.
PHP медленно, без резких движений, ползёт в правильную сторону, от
увеличения производительности в 3 раза, до строгой типизации, решая
задачи простым способом. И обрастая по пути крутыми штуками типа Swoole.
PHP реализовал офигенский FFI (foreign function interface) к C.
Офигенский в том контексте, о котором идёт речь — сочетании простоты и
возможностей. Вы только наберите в гугле «PHP: Basic FFI usage».
В PHP кругом $, а кто по нынешнему курсу их не любит...
PHP быстрый. Да. Могу по слогам: бы-стрый. Для своей простоты и задач он божественно быстрый.
"PHP" / Говнокод #26668
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
public function isSpecial()
{
$special_ids = array(
2222,
3028,
3333,
5555,
5702,
6666,
6700,
7654,
7777,
8451,
11225
);
return in_array((int)$this->getId(), $special_ids);
//return $this->getId() == 2222 || $this->getId() == 3028 || $this->getId() == 3333 || $this->getId() == 5555 || $this->getId() == 5702;
}
https://github.com/wiistriker/govnokod_legacy/blob/master/modules/quoter/models/quote.php
Рекурсивный говнокод.
"PHP" / Говнокод #26664
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
<?php
function get_post_id($comment_list_id) {
$rawdata = file_get_contents("https://govnokod.ru/comments/$comment_list_id/post");
$rawdata='<?xml encoding="UTF-8">'.$rawdata;
$old_libxml_error = libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($rawdata);
libxml_use_internal_errors($old_libxml_error);
$xpath = new DOMXPath($dom);
$entries = $xpath->query('//*[@id="content"]/ol[@class="posts hatom"]/li[@class="hentry"]/h2/a');
foreach($entries as $entry) {
$href = $entry->getAttribute('href');
if(preg_match('#https://govnokod.ru/(\d+)#', $href, $matches)) {
$post_id = $matches[1];
break;
}
}
return $post_id;
}
$outf = fopen('postids.csv', 'w');
fputcsv($outf, array('post_id','comment_list_id'));
for($i = 1; $i <= 26663; $i++) {
fputcsv($outf, array(get_post_id($i), $i));
}
fclose($outf);
Получение списка всех говнокодов, комментарии к которым можно восстановить.
"PHP" / Говнокод #26663
+1
- 1
https://t.me/GovnokodBot
Напомню, или может кто не знал.
P.S. Кстати, guest8 достаточно раскрученный, поэтому здесь может быть ваша реклама.
"PHP" / Говнокод #26660
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
function check_license()
{
$m = 40141;
$p = 291;
$root_dir = dirname(__FILE__);
$fn = 'file_get_contents';
$lic = ($root_dir.'/license');
$d = split(' ', trim(file_get_contents($lic)));
$result = 1;
$max = count($d);
for ($j=0x0; $j<$max; $j++)
{
$b=base_convert($d[$j],36,10);
$result = 1;
for($i=0x0; $i<$p; $i++)
{
$result = ($result*$b) % $m;
}
$decoded .= chr($result);
}
$license = split('#', $decoded);
$hash = $license[1];
$data = $license[0];
$host = $host1 = $_SERVER['HTTP_HOST'];
$host2 = getenv('HTTP_HOST');
if(function_exists('apache_getenv'))
$host3 = apache_getenv('HTTP_HOST');
else
$host3 = $host1;
if(!($host1 == $host2 && $host1 == $host3))
return false;
$ip = getenv('REMOTE_ADDR');
if($_SERVER['REMOTE_ADDR'] == $ip && substr($ip,0,3)=='127' && strtoupper(substr(php_uname(), 0, 3)) === 'WIN' )
{
return true;
}
$l_array = split(';', $data);
$domain = $l_array[0];
if(isset($l_array[1]))
$start = $l_array[1];
else
return false;
if(isset($l_array[2]))
$end = $l_array[2];
else
return false;
if(isset($l_array[3]))
$comment = $l_array[3];
else
$comment = '';
$domns = split(',', $domain);
$ok = false;
foreach($domns as $d)
{
if(strtolower(trim($d)) == strtolower($host))
$ok = true;
}
if(!$ok)
return false;
if(strtotime($start)>time())
return false;
if(strtotime($end)<time())
return false;
return true;
}
Проверка лицензии в Simpla CMS первой версии
"PHP" / Говнокод #26659
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
$output = '<div class="catalog catalog-category">';
$query = db_select('taxonomy_term_data','td');
$query->innerJoin('field_data_field_category', 'fc', "fc.field_category_tid = td.tid");
$query->innerJoin('taxonomy_term_hierarchy', 'tth', "tth.tid = td.tid");
$query->innerJoin('node', 'n', "n.nid = fc.entity_id");
$query->condition('td.vid', 4);
$query->condition('n.status', 1);
$query->condition('tth.parent', 0);
$query->fields('td', array('tid', 'name'));
$query->groupBy('td.tid');
$query->orderBy('td.weight', 'ASC');
$terms = $query->execute()->fetchAll();
foreach ($terms as $term) {
$prod_out = '';
$query = db_select('field_data_field_product', 'fp');
// Выбираем товары текущего типа
$query->innerJoin('node', 'n', "n.nid = fp.entity_id");
$query->innerJoin('field_data_field_category', 'fc', "fc.entity_id = n.nid");
$query->condition('n.status', 1);
$query->condition('fc.field_category_tid', $term->tid);
// Заголовок товара
$query->innerJoin('commerce_product', 'cp', "cp.product_id = fp.field_product_product_id");
$query->condition('cp.status', 1);
$query->fields('cp', array('title'));
// Цена без скидки
$query->innerJoin('field_data_commerce_price', 'dcp', "dcp.entity_id = fp.field_product_product_id");
$query->fields('dcp', array('commerce_price_amount'));
// Размер скидки
$query->leftJoin('field_data_field_discount', 'dcpd', "dcpd.entity_id = fp.field_product_product_id");
$query->fields('dcpd', array('field_discount_value'));
// Цена со скидкой
$query->leftJoin('field_data_field_price_new', 'dcpn', "dcpn.entity_id = fp.field_product_product_id");
$query->fields('dcpn', array('field_price_new_value'));
// Первое изображение
$query->innerJoin('field_data_field_image', 'dfi', "dfi.entity_id = fp.field_product_product_id");
$query->condition('dfi.delta', 0);
$query->fields('dfi', array('field_image_fid'));
$query->innerJoin('field_data_field_weight', 'fw', "fw.entity_id = fp.field_product_product_id");
$query->addExpression("(SELECT GROUP_CONCAT(td.name SEPARATOR ', ') FROM field_data_field_season AS dfs INNER JOIN taxonomy_term_data AS td ON td.tid=dfs.field_season_tid WHERE dfs.entity_id=n.nid)","name");
// Маркер
$query->leftJoin('field_data_field_marker', 'dfm', "dfm.entity_id = fp.field_product_product_id");
$query->fields('dfm', array('field_marker_value'));
// Товар
$query->fields('fp', array('field_product_product_id'));
// Связанная с товаром нода
$query->fields('n', array('nid'));
$query->range(0, 4);
$query->orderBy('fw.field_weight_value', 'ASC');
$products = $query->execute()->fetchAll();
// $output .= '<h2>' . l($term->name, 'taxonomy/term/'.$term->tid) . '</h2>';
$output .= '<div class="product_items">';
$output .= '<div class="catalog_item"><div style="width: 225px; height: 340px;"><h2>' . l($term->name, 'taxonomy/term/'.$term->tid) . '</h2></div></div>';
foreach ($products as $product) {
$fid = $product->field_image_fid;
if ($fid != 0 && is_numeric($fid)) {
$file_picture = file_load($fid);
$imageUrl = image_style_url('catalog', $file_picture->uri);
$title = $product->title;
$photo = "<img class='lazy-image' data-src='{$imageUrl}' alt='{$title}' title='{$title}'>";
}
else $photo = '';
$prod_out .= '<div class="catalog_item">';
$prod_out .= '<div class="title">' . l($product->title . '<br><span>' . $product->name . '</span><div>XS S M L XL</div>', 'node/'.$product->nid, array('html' => TRUE, 'query' => array('id' => $product->field_product_product_id))).'</div>';
$prod_out .= '<div class="image">' . $photo . '</div>';
if (!empty($product->field_discount_value)) {
$prod_out .= '<div class="views-field-field-discount"><div class="field-content">Sale ' . $product->field_discount_value . ' %</div></div>';
}
if (!empty($product->field_marker_value)) {
$prod_out .= '<div class="views-field-field-marker"><div class="field-content field-content field-content-' . $product->field_marker_value . '">' . ($product->field_marker_value == 'new'?'Новинка':'Бестселлер') . '</div></div>';
}
if (!empty($product->field_price_new_value)) {
$price = '<s>' . number_format($product->commerce_price_amount/100,0,'',' ') . '</s> ' . number_format($product->field_price_new_value,0,'',' ') . ' Р';
}
else {
$price = number_format($product->commerce_price_amount/100,0,'',' ') . ' Р';
}
$prod_out .= '<div class="views-field-field-price-new">' . $price . '</div>';
$prod_out .= '</div>';
}
}
$output .= $prod_out;
$output .= '<div class="catalog_item" style="position: absolute;">' . l('<img src="/sites/all/themes/base/img/strelka.png" style="width: 10px; height: 17px;">', 'taxonomy/term/'.$term->tid, array('html' => true)) . '</div>';
$output .= '</div>';
Уууъъъъъ пыхомразь
"PHP" / Говнокод #26610
0
- 1
- 2
- 3
- 4
function reclstr($txt1) {//утилизировать текст
$util = sha1( $txt1 . rand(0,54424456));
return $util;
}
"PHP" / Говнокод #26607
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
<?php
function qes2_key ( $key = null ) {
$key = str_split( $key );
$keycount = count( $key );
$xspos = 1;
$summ = 0;
foreach( $key as $letter ) {
$summ += ord( $letter ) * 2 + $xspos + ( $keycount / $xspos );
$xspos++;
}
$summ = explode('.', $summ );
return $summ[0];
}
function qes2_encrypt ( $input, $key ) {
$input = str_split( $input );
$icount = count( $input );
$rsumm = qes2_key( $key );
$result = '';
$xspos = 1;
$xsdisp = 1;
foreach( $input as $letter ) {
$char = ord( $letter ) + ( $rsumm * $xspos ) - $xsdisp ;
$result .= chr( $char );
$xspos++;
$xsdisp += 1;
}
return $result;
}
function qes2_decrypt ( $input, $key ) {
$input = str_split( $input );
$icount = count( $input );
$rsumm = qes2_key( $key );
$result = '';
$xspos = 1;
$xsdisp = 1;
foreach( $input as $letter ) {
$char = ord( $letter ) - ( $rsumm * $xspos ) + $xsdisp ;
$result .= chr( $char );
$xspos++;
$xsdisp += 1;
}
return $result;
}
qes2a encryption (c)
"PHP" / Говнокод #26606
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
// file ceny.php
$МС_1А_t = '29 000'; //Отходы производства белой бумаги (кроме газетной)
$МС_1А_k = '29,0';
$МС_2А_t = '17 000'; //Отходы производства всех видов белой бумаги в виде обрезков с линовкой и черно-белой или цветной полосой
$МС_2А_k = '17,0';
$МС_5Б_1_t = '11 500'; //Отходы производства гофрированного картона и его компонентов
$МС_5Б_1_k = '11,5';
$МС_5Б_2_t = '10 500'; //Отходы потребления гофрированного картона
$МС_5Б_2_k = '10,5';
$МС_6Б_t = '7 500'; //Отходы производства и потребления картона всех видов с печатью (кроме гофрокартона)
$МС_6Б_k = '7,5';
$МС_6Б_1_t = '13 500'; //Отходы производства картона только из беленых волокнистых материалов
$МС_6Б_1_k = '13,5';
$МС_7Б_1_t = '16 500'; //Отходы белой бумаги с черно-белой печатью не более 20%
$МС_7Б_1_k = '16,5';
$МС_7Б_2_t = '11 500'; //Отходы бумаги (кроме газетной) с черно-белой и цветной печатью, в том числе крашеные в массе
$МС_7Б_2_k = '11,5';
$МС_7Б_3_t = '9 500'; //Книги, журналы, брошюры, проспекты, каталоги
$МС_7Б_3_k = '9,5';
$МС_8В_t = '12 000'; //Отходы производства и потребления газет и газетной бумаги
$МС_8В_k = '12,0';
$МС_9В_t = '7 500'; //Бумажные гильзы, шпули, втулки
$МС_9В_k = '7,5';
// некст файл
... какой-то шаблон с выводом текста
<?php
include_once "%ceny.php%";
if($page_code == 'ms1a') echo "<p>Цена: до {$МС_1А_t} руб. за тонну (до {$МС_1А_k} руб. за кг).</p>";
if($page_code == 'ms2a') echo "<p>Цена: до {$МС_2А_t} руб. за тонну (до {$МС_2А_k} руб. за кг).</p>";
if($page_code == 'ms5b-1') echo "<p>Цена: МС-5Б/1 - до {$МС_5Б_1_t} руб. за тонну (до {$МС_5Б_1_k} руб. за кг).</p>";
if($page_code == 'ms5b-2') echo "<p>Цена: МС-5Б/2 - до {$МС_5Б_2_t} руб. за тонну (до {$МС_5Б_2_k} руб. за кг).</p>";
if($page_code == 'ms6b') echo "<p>Цена: МС-6Б - до {$МС_6Б_t} руб. за тонну (до {$МС_6Б_k} руб. за кг).</p>";
if($page_code == 'ms6b-1') echo "<p>МС-6Б/1 - до {$МС_6Б_1_t} руб. за тонну (до {$МС_6Б_1_k} руб. за кг).</p>";
if($page_code == 'ms7b-1') echo "<p>Цена: МС-7Б/1 - до {$МС_7Б_1_t} руб. за тонну (до {$МС_7Б_1_k} руб. за кг).</p>";
if($page_code == 'ms7b-2') echo "<p>МС-7Б/2 - до {$МС_7Б_2_t} руб. за тонну (до {$МС_7Б_2_k} руб. за кг).</p>";
if($page_code == 'ms7b-3') echo "<p>МС-7Б/3 - до {$МС_7Б_3_t} руб. за тонну (до {$МС_7Б_3_k} руб. за кг).</p>";
if($page_code == 'ms8v') echo "<p>Цена: до {$МС_8В_t} руб. за тонну (до {$МС_8В_k} руб. за кг).</p>";
if($page_code == 'ms9v') echo "<p>Цена: до {$МС_9В_t} руб. за тонну (до {$МС_9В_k} руб. за кг).</p>";
if($page_code == 'ms13v') echo "<p>Цена: до {$МС_13В_t} руб. за тонну (до {$МС_13В_k} руб. за кг).</p>";
if($page_code == 'othod-poliehtilena') echo "<p>Цена: до {$П_Э_t} руб. за тонну (до {$П_Э_k} руб. за кг).</p>";
?>
Продолжение трилогии http://govnokod.ru/25730, так вот зачем это было нужно
"PHP" / Говнокод #26602
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
for ($cycle = 1; $cycle <= 6; $cycle++) {
$all_tasks = get_all_tasks();
if ($all_tasks) {
foreach($all_tasks as $one_task) {
$lock_file_abs = __DIR__.'/locks/run_'.$one_task['id'];
$fp = fopen($lock_file_abs,"w+");
if (flock($fp, LOCK_EX | LOCK_NB)) {
solve_one_task($one_task);
flock($fp, LOCK_UN);
}
else {
#не можем запускать обработку задачи
}
fclose($fp);
unlink($lock_file_abs);
}
}
sleep(10);
}
«Как запускать cron чаще, чем раз в минуту при помощи PHP»
https://habr.com/ru/post/498934/
HTML / Говнокод #5
0
- 1
<textarea required="required"></textarea>
порт <textarea required></textarea> на html5.
Придумали больные ублюдки из W3C.
Сначала один ублюдок придумал атрибуты без значения. Если атрибут
отсутствует, то он равен false, если присутствует, то он равен true.
Примеры такого говна — атрибуты элементов форм, например, уже упомянутый
required, после которого знак = не ставился.
Потом, когда придумали xhtml и это всё гов великолепие нужно было
портировать на xml, в котором атрибуты без значения недопустимы, другой
ублюдок (или тот же?) придумал синтаксис required="required" вместо
required="true" или чего-то похожего.
Добро пожаловать в world wide web!
Koko / Говнокод #26591
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
enum class Measures {
B, KB, MB, GB;
private val size = BigDecimal.valueOf(1024L).pow(ordinal)
companion object {
fun toHumanSize(value: Long): String {
val decValue = value.toBigDecimal()
val measure = values().reversed().find { it.size < decValue } ?: B
return "${decValue.divide(measure.size, 3, RoundingMode.UP)} $measure"
}
}
}
Koko / Говнокод #26408
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
data class User(
@Expose
@SerializedName("email")
val email: String? = null,
@Expose
@SerializedName("username")
val username: String? = null,
@Expose
@SerializedName("image")
val image: String? = null
) {
override fun toString(): String {
return "User(email=$email, username=$username, image=$image)"
}
}
JetBrains сделали прекрасный стандартный toString у дата классов, а
они всё равно пишут свой туСтринг, который выдаёт результат в точности
повторяющий стандартный.
https://github.com/mitchtabian/MVIExample/blob/master/app/src/main/java/com/codingwithmitch/mviexample/model/User.kt
Koko / Говнокод #25919
0
- 1
- 2
- 3
- 4
// One workaround is to approximate a namespace by using with a singleton object class.
object FooActions {
fun foo() {...}
}
Им дали возможность описывать функции на уровне пакета, без надобности
совать их в MyOhuennyeUtils, а они жалуются что нету неймспейсов и
пихают функци в класы. Долбоебы ¯\_(ツ)_/¯
https://medium.com/keepsafe-engineering/kotlin-the-good-the-bad-and-the-ugly-bf5f09b87e6f#3a98
Koko / Говнокод #25734
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
private fun getProviders(): List<Provider> =
applicationContext.getBeansOfType(Provider::class.java).values +
applicationContext.getBeansOfType(List::class.java).values.flatten().flatMap { bean ->
when (bean) {
is Provider -> listOf(bean)
else -> listOf()
}
}
Грамотная работа с applicationContext'ом
Koko / Говнокод #25394
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
private fun GetDeviceInfo(request: HttpServerRequest): HashMap<String, Info>
{
val deviceInfo = request.getParam(NAME_ID)?.let { id ->
(Ports.ById(id) ?: Ports.ByDeviceId(id))?.let(DeviceInfo.Companion::Create)
?: Files.FromPath(id)?.let { file ->
FileInfo.GetInfo(file)
} ?: (Core.GetTask(id) as? Scenario)?.SourceFile?.let(::FileInfo)
}
return deviceInfo?.let { hashMapOf(REQUEST_RESULT to it) } ?: hashMapOf()
}
Goвно / Говнокод #26841
0
- 1
- 2
- 3
- 4
- 5
- 6
switch platform {
case "Azure":
heartbeat = "500"
default:
heartbeat = "100"
}
Инфраструктуру для мимосервисов чай тоже люди пишут.
https://github.com/openshift/cluster-etcd-operator/blob/release-4.5/pkg/cmd/render/env.go#L52-L81
[size=8]там еще и табы[/size]
Goвно / Говнокод #26743
0
- 1
https://m.vk.com/wall-30666517_1672469
Из исходников и документации Go убрали фразы whitelist/blacklist и master/slave.
Всё из-за протестов, которые сейчас проходят в Америке.
Фразы «blacklist» и «whitelist» заменили на «blocklist» и «allowlist», а «master» и «slave»
в зависимости от контекста на «process», «pty», «proc» и «control».
Отмечается, что изменения не приведут к нарушению обратной совместимости и путанице, так как
большая часть исправлений приходится на комментарии, тесты и внутренние переменные.
Goвно / Говнокод #26717
0
- 1
- 2
- 3
- 4
- 5
- 6
func GetUser() *User {
defer func() {
time.Sleep(100 * time.Millisecond)
}()
return &User{}
}
Паттерн: поработал - отдохни.
Pattern: worked hard - have a rest
Goвно / Говнокод #26716
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
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
}
Проверка заполненности имени пользователя хотя - бы на одном из языков.
Goвно / Говнокод #26599
0
- 1
- 2
- 3
- 4
Currently, we're ignoring failures to mlock signal stacks in the
workaround for #35777. This means if your mlock limit is low, you'll
instead get random memory corruption, which seems like the wrong
trade-off.
самый лучший язык на свете продолжает шпарить, отказались от free after use - получили «забыл сделать if (err != nil)»
https://github.com/golang/go/commit/69614c0d0e05787c8203bdc364c3293e1cf5094a
Goвно / Говнокод #26520
0
- 1
- 2
- 3
- 4
// sumEqual reports whether u + v == w exactly.
func sumEqual(u, v, w float64) bool {
return (u+v == w) && (u == w-v) && (v == w-u)
}
https://github.com/golang/geo/blob/a8523298cefedcf7b70bbbf4eeef24cbb3258376/s2/edge_clipping.go#L182
походу питух-затейник опять сбежал
Goвно / Говнокод #26349
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
// GostServer is the type that contains all of the relevant information to set
// up the GOST HTTP Server
type GostServer struct {
host string // Hostname for example "localhost" or "192.168.1.14"
port int // Port number where you want to run your http server on
api *models.API // SensorThings api to interact with from the HttpServer
https bool
httpsCert string
httpsKey string
httpServer *http.Server
}
// CreateServer initialises a new GOST HTTPServer based on the given parameters
func CreateServer(host string, port int, api *models.API, https bool, httpsCert, httpsKey string) Server {
setupLogger()
a := *api
router := CreateRouter(api)
return &GostServer{
host: host,
port: port,
api: api,
https: https,
httpsCert: httpsCert,
httpsKey: httpsKey,
httpServer: &http.Server{
Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(port)),
Handler: PostProcessHandler(RequestErrorHandler(LowerCaseURI(router)), a.GetConfig().Server.ExternalURI),
ReadTimeout: 30 * time.Second,
WriteTimeout: 30 * time.Second,
},
}
}
// Start command to start the GOST HTTPServer
func (s *GostServer) Start() {
t := "HTTP"
if s.https {
t = "HTTPS"
}
logger.Infof("Started GOST %v Server on %v:%v", t, s.host, s.port)
var err error
if s.https {
err = s.httpServer.ListenAndServeTLS(s.httpsCert, s.httpsKey)
} else {
err = s.httpServer.ListenAndServe()
}
if err != nil {
logger.Panicf("GOST server not properly stopped: %v", err)
}
}
// Stop command to stop the GOST HTTP server
func (s *GostServer) Stop() {
if s.httpServer != nil {
logger.Info("Stopping HTTP(S) Server")
s.httpServer.Shutdown(context.Background())
}
}
Нашёл ГостСервер го
https://github.com/gost/server/blob/master/http/gostserver.go
Goвно / Говнокод #25839
0
- 1
TOCTOU race condition in Docker allows root access to the filesystem of the host platform.[4]
Goвно / Говнокод #25729
0
- 1
Ьут оказывается go есть
Хламидомонада / Говнокод #26241
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
Хламидомонада / Говнокод #26239
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
Хламидомонада / Говнокод #26238
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
Хламидомонада / Говнокод #26230
0
- 1
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
Хламидомонада / Говнокод #26227
0
- 1
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
Хламидомонада / Говнокод #26021
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
module Voretion.Kobenation (
trySort
, natalyze
, toBase64
, fromBase64
, dbgKob
) where
https://github.com/k32/zenmaster
Чей петух, кто знает?
Хламидомонада / Говнокод #25996
0
- 1
- 2
- 3
- 4
f :: [Int] -> [Int]
f [] = []
f [a] = []
f (a:b:lst) = b: f lst
Как вытащить каждый второй элемент из массива.
Хламидомонада / Говнокод #25851
0
- 1
http://hackage.haskell.org/package/haskelldb-2.1.1/docs/Database-HaskellDB-BoundedList.html#t:N94
Хламидомонада / Говнокод #25323
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
doit({txs, [Tx]}) ->
X = tx_pool_feeder:absorb(Tx),
Y = case X of
ok -> hash:doit(testnet_sign:data(Tx));
_ -> <<"error">>
end,
{ok, Y};
Прекраснейший код на Erlang из великолепнейшей криптовалюты AMOVEO
Здесь мы видим эндпоинт для отправки транзакций в сеть, возвращающий в случае ошибки ["ok","ZXJyb3I="]
Приглядевшись можно увидеть закодированное в base64 слово «error»
Хламидомонада / Говнокод #24452
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
instance Arbitrary ProjectConfig where
arbitrary =
ProjectConfig
<$> (map getPackageLocationString <$> arbitrary)
<*> (map getPackageLocationString <$> arbitrary)
<*> shortListOf 3 arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> (MapMappend . fmap getNonMEmpty . Map.fromList
<$> shortListOf 3 arbitrary)
-- package entries with no content are equivalent to
-- the entry not existing at all, so exclude empty
shrink ProjectConfig { projectPackages = x0
, projectPackagesOptional = x1
, projectPackagesRepo = x2
, projectPackagesNamed = x3
, projectConfigBuildOnly = x4
, projectConfigShared = x5
, projectConfigProvenance = x6
, projectConfigLocalPackages = x7
, projectConfigSpecificPackage = x8
, projectConfigAllPackages = x9 } =
[ ProjectConfig { projectPackages = x0'
, projectPackagesOptional = x1'
, projectPackagesRepo = x2'
, projectPackagesNamed = x3'
, projectConfigBuildOnly = x4'
, projectConfigShared = x5'
, projectConfigProvenance = x6'
, projectConfigLocalPackages = x7'
, projectConfigSpecificPackage = (MapMappend
(fmap getNonMEmpty x8'))
, projectConfigAllPackages = x9' }
| ((x0', x1', x2', x3'), (x4', x5', x6', x7', x8', x9'))
<- shrink ((x0, x1, x2, x3),
(x4, x5, x6, x7, fmap NonMEmpty (getMapMappend x8), x9))
]
В хачкеле мало бойлерплейта, говорили они. Это ещё далеко не самый длинный список, см. x43 ниже.
https://github.com/haskell/cabal/blob/4e0c701a2feb520d369ef506a18288c47f64b06a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs
Хламидомонада / Говнокод #23859
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
data Foo a = Foo {a :: a, b :: Int}
| Bar {b :: Int}
foo :: (a -> b) -> Foo a -> Foo b
foo f <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2951696f4646">[email protected]</a>{a = a} = x{a = f a}
foo _ <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="562e16143724">[email protected]</a>{} = x -- error: Couldn't match type ‘a’ with ‘b’
foo _ <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5c241c1e3d2e">[email protected]</a>{} = x{} -- error: Empty record update
Рекорды всё-таки дубовые
cast @HaskellGovno
Хламидомонада / Говнокод #23446
0
- 1
- 2
- 3
- 4
- 5
-- https://haskell-lang.org/library/http-client
let request = setRequestBodyFile "people.yaml"
$ setRequestHeader "Content-Type" ["application/x-yaml"]
$ "PUT https://httpbin.org/put"
response <- httpJSON request
Товарищ Снойман, конечно, молодец, но его творчество мне зачастую
больше напоминает жабу, чем хачкель. У меня одного такое ощущение?
(Неявное) преобразование "PUT https://httpbin.org/put" в значение Request — это, кмк, какой-то ⊥(bottom)
#нытьё #CHayT
Хламидомонада / Говнокод #22737
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
topSort :: V.Vector ([Int], [Int])
-> Either String [Int]
topSort kob =
let
sup u k = do
let max i = (i,) . head . snd <$> k `MV.read` i
l <- mapM max u
case filter (uncurry (==)) l of
[(a,_)] -> return $ Right a
x -> return $ Left "Topology error"
rewrite k s (i, j) = do
let f x | x == s && j < 0 = []
| x == s = [j]
| otherwise = [x]
when (j>=0) $ MV.modify k (_1 %~ (i:)) j
MV.modify k (_2 %~ (>>= f)) i
go u k =
readSTRef u >>= \case
[a] -> return $ Right [a]
u_ -> sup u_ k >>= \case
Right s -> do
modifySTRef' u $ Data.List.delete s
s_d <- fst <$> MV.read k s
mapM_ (rewrite k s) $ zip s_d (tail s_d ++ [-1])
tail <- go u k
return $ (s:) <$> tail
Left err ->
return $ Left err
in runST $ do
u <- newSTRef $ [0..V.length kob-1]
k <- V.thaw kob
liftM reverse <$> go u k
Пишем на декларативном языке
Хламидомонада / Говнокод #21818
0
- 1
- 2
- 3
- 4
- 5
- 6
sign' ← case sign of
'-' → return '-'
'+' → return ' '
_ → Nothing
hh ← (readMaybe [sign',h1,h2]) :: Maybe Integer
mm ← (readMaybe mm) :: Maybe Integer
Парсим значение со знаком.
Хламидомонада / Говнокод #21424
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
-- GUESS THE NAME OF "algorithmX":
import qualified Data.List as DL
infinity = 1/0
adjacencyMatrix =
[[0,3,1,6,0,0],
[3,0,5,0,3,0],
[1,5,0,5,6,4],
[6,0,5,0,0,2],
[0,3,6,0,0,6],
[0,0,4,2,6,0]] :: [[Double]]
replaceZerosWithInfinity matrix =
map (map (\e -> if e == 0 then infinity else e)) matrix
type Edge = (Int,Int,Double)
algorithmX adjacencyMatrix initialVertex = (minimumTotalCost,minimumEdges)
where
third (_,_,t) = t
minimumTotalCost = sum $ map third minimumEdges
(_,minimumEdges) = foldl iterate ([initialVertex],[]) [1..n-1]
matrix = replaceZerosWithInfinity adjacencyMatrix
n = length matrix
getIndexes visited =
filter (\(i,j) -> not $ elem j visited) [(i,j) | i <- visited, j <- [0..n-1]]
iterate :: ([Int],[Edge]) -> Int -> ([Int],[Edge])
iterate (visited,edges) iteration = (newVisited:visited,minimumEdge:edges)
where
(_,newVisited,_) = minimumEdge
minimumEdge = DL.minimumBy compareEdges $ map newEdge (getIndexes visited)
newEdge (i,j) = (i,j,matrix !! i !! j)
compareEdges e0 e1 = compare (third e0) (third e1)
WARN: лаба с фейспука
Хламидомонада / Говнокод #20430
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
███████
██ ██
██ ██
██ ██ █████ ████ ██ ██ ██████ █████ ██████ ████ ██ ██ █████ ██ ██ ██ ██ ██ █ ██ ██ ██ ████
██ ██ ██ ██ ██ ██ ██ ██ █ ██ █ ██ ██ █ ██ █ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ █ █ █ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ █ ██ ██ ██ ██ ██ ██ ██ ███████ ███████ ███████ ██ ██ █████ ███████ ██ ██
██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █ █ █ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██ █ ██ ██ ██ ██ ██
██ ██ █████ ███ ██ ██ ██ ████ █████ ████ ███ ██ ██ ██ █████ ██ ██ ██ ██ █ ██ ██ ██ ███ ██
██
██ ██
█████
███████
██ ██
██ ██
██ ██ █████ ████ ██ ██ ██████ █████ ██████ ████ ██ ██ █████ ██ ██ ██ ██ ██ █ ██ ██ ██ ████
██ ██ ██ ██ ██ ██ ██ ██ █ ██ █ ██ ██ █ ██ █ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ █ █ █ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ █ ██ ██ ██ ██ ██ ██ ██ ███████ ███████ ███████ ██ ██ █████ ███████ ██ ██
██ ██ ██ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █ █ █ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██ █ ██ ██ ██ ██ ██
██ ██ █████ ███ ██ ██ ██ ████ █████ ████ ███ ██ ██ ██ █████ ██ ██ ██ ██ █ ██ ██ ██ ███ ██
██
██ ██
█████
Хламидомонада / Говнокод #20287
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
kobenate :: (MonadVoretion m)
=> Config
-> Disjunct
-> RuleZipper
-> m Disjunct
kobenate cfg d₀ z = uphill d₀ z
where
climb t x =
case parent x of
Just x' -> uphill t x'
Nothing -> return t
uphill t x =
case label <$> parent x of
Just (LinkAnd{}) -> do
i <- downhill' cfg $ reverse $ before x
j <- downhill' cfg $ after x
climb (i \++/ t \++/ j) x
_ ->
case label x of
MultiConnector{} -> do
m <- downhill cfg (tree x)
let t' = t \++/ m
climb t' x
_ ->
climb t x
downhill' :: (MonadVoretion m)
=> Config
-> [Link]
-> m Disjunct
downhill' cfg x = foldl (\++/) ([], []) <$> mapM (downhill cfg) x
downhill :: (MonadVoretion m)
=> Config
-> Link
-> m Disjunct
downhill cfg <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1b772b5b">[email protected]</a>(Node label subforest) =
case label of
Optional _ ->
ifR (_decay_optional cfg)
{-then-} (downhill cfg $ head subforest)
{-else-} (return ([], []))
MultiConnector _ ->
ifR (_decay_multi cfg)
{-then-} (do
a <- downhill cfg l0
b <- downhill cfg $ head subforest
return $ a \++/ b)
{-else-} (return ([], []))
LinkOr{} ->
downhill cfg =<< pickRandom subforest
LinkAnd{} ->
downhill' cfg subforest
Cost{} ->
downhill' cfg subforest
EmptyLink ->
return ([], [])
Link{_link=i} -> do
case _linkDirection i of
Plus -> return ([], [Left i])
Minus -> return ([Left i], [])
Метод вореции дерева методом вниз, вверх и опять вниз, но сбоку. В индексе храним смещение бата правил, зожатых в отдельный файл. Ворециируем любое подходящее правило из индекса и розжимаем дерево в зиппер. Находим пачку подходящих зипперов, см. http://govnokod.ru/20195, ворециируем любой из них. Вверх идём просто, ничего не ворецируя, ибо нужную кобенацию важно сохранить, а вот сбоку идём вниз, тут уж можно любую кобенацию брать.
Хламидомонада / Говнокод #20195
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
findConnections :: LinkID
-> Link
-> [RuleZipper]
findConnections x = go . fromTree
where go z =
case label z of
Link {_link=l}
| x' =*= l -> [z]
| True -> []
_ ->
go' (firstChild z) ++ go' (next z)
go' x = (toList x) >>= go
x' = flipLink x
1) создаём кучу почти полных копий дерева (не совсем полных, т.к. есть какой-никакой tail sharing)
2) но это фиксится тем, что обход дерева заканчивается преждевременно из-за ошибки!
изящный код, который можно породить только в 3 ночи под Sabaton
Хламидомонада / Говнокод #20153
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
-- | @'resetT' m@ delimits the continuation of any 'shiftT' inside @m@.
--
-- * @'resetT' ('lift' m) = 'lift' m@
--
resetT :: (Monad m) => ContT r m r -> ContT r' m r
resetT = lift . evalContT
{-# INLINE resetT #-}
-- | @'shiftT' f@ captures the continuation up to the nearest enclosing
-- 'resetT' and passes it to @f@:
--
-- * @'resetT' ('shiftT' f >>= k) = 'resetT' (f ('evalContT' . k))@
--
shiftT :: (Monad m) => ((a -> m r) -> ContT r m r) -> ContT r m a
shiftT f = ContT (evalContT . f)
{-# INLINE shiftT #-}
.... Usage:
Prelude Control.Monad.Trans.Cont> evalCont $ callCC (\done -> reset (done "Ok") >> return "Fuck you!" )
"Fuck you!"
говно прямо в transformers
плохо зделали, тупо
хочу, чтобы возвращалось Ok
Хламидомонада / Говнокод #20068
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
data TTree k v =
TNode {
_key :: !k
, _val :: !(Maybe v)
, _eq :: !(TTree k v)
, _left :: !(TTree k v)
, _right :: !(TTree k v)
, _height :: !Int
}
| TTNil
deriving (Show, Generic)
instance (Binary k, Binary v) => Binary (TTree k v)
insertWith' :: (Ord k)
=> (v -> v -> v) -- ^ Conflict resolution function
-> [k] -- ^ Key
-> Int -- ^ Length of the key
-> v -- ^ Value
-> TTree k v -- ^ Tree
-> TTree k v
insertWith' f k1@(k:kt) h v t =
case t of
TTNil ->
insertWith' f k1 h v $ TNode {
_key = k
, _eq = TTNil
, _left = TTNil
, _right = TTNil
, _val = Nothing
, _height = h
}
node@TNode{_key=k0, _height=h0, _val=v0, _eq=eq0, _left=left0, _right=right0} ->
case compare k0 k of
EQ | null kt ->
node {
_val = Just $ maybe v (flip f $ v) v0
}
| True ->
node {
_eq = insertWith' f kt (h-1) v eq0
, _height = max h h0
}
GT ->
node {
_left = insertWith' f k1 h v left0
, _height = max h h0
}
LT ->
node {
_right = insertWith' f k1 h v right0
, _height = max h h0
}
{-# SPECIALIZE insertWith' :: (v -> v -> v)
-> [Char]
-> Int
-> v
-> TTree Char v
-> TTree Char v
#-}
а почему бы не использовать несбалансированное тернанрое дерево для индекса
вроде ничего стра
Out of memory: Kill process 2987 (govno) score 265 or sacrifice child
Хламидомонада / Говнокод #20004
0
- 1
- 2
- 3
- 4
- 5
- 6
import qualified Data.ByteString.Lazy.Char8 as BS
readLineOfInts :: BS.ByteString -> [Int]
readLineOfInts str = case BS.readInt str of
Nothing -> []
Just (i, rest) -> i : if BS.null rest then [] else readLineOfInts (BS.tail rest)
То чувство, когда map read . words не проходит по таймауту.
Хламидомонада / Говнокод #19959
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
instance Applicative (Sample m) where
pure a = Val a
Val{_unVal=f} <*> a = fmap f a
Fork{..} <*> a = Fork {
_next = \x -> (_next x) <*> a
, ..
}
Zero <*> _ = Zero
Random{..} <*> a = Random { -- Crazy-ass weirdo haskeller, why did you define instance Random for ->?!!
_next = \x -> (_next x) <*> a
, ..
}
Хламидомонада / Говнокод #19913
0
- 1
import Control.Lens
то неловкое чувство, когда долго боролся с искушением, и таки добавил эту строчку
https://ro-che.info/ccc/23
Хламидомонада / Говнокод #19679
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
refactorMe ∷ (Monad m) ⇒ (a → b) → Producer a m r → Producer b m r
refactorMe f p = do
n ← lift $ next p
case n of
Left r → return r
Right (x, p') → do
yield $ f x
refactorMe f p'
ниасилил pipes
Хламидомонада / Говнокод #19672
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
module Control.Monad.Warning (
errorToWarning
, errorsToWarnings
, justW
, rightW
, WarningT(..)
, MonadWarning(..)
, module Control.Monad.Except
, module Control.Monad.Writer
)
where
import Control.Applicative
import Control.Monad.Except
import Control.Monad.Writer
import Control.Monad.Reader
import Data.Monoid
newtype WarningT w e m a = WarningT { runWarningT ∷ w → m (w, Either e a) }
class (Monad m) ⇒ MonadWarning w e m | m → w e where
warning ∷ w → m ()
throwW ∷ e → m a
catchW ∷ m a → (e → m a) → m a
instance (Functor m) ⇒ Functor (WarningT w e m) where
fmap f a = WarningT $ \w → let f' (w', a') = (w', (fmap f) a')
in fmap f' $ runWarningT a w
instance (Applicative m) ⇒ Applicative (WarningT w e m) where
pure a = WarningT $ \w → pure (w, Right a)
f <*> a = WarningT $ \w → runWarningT f w
(w', f') =
(w'', a') = runWarningT a w'
in case (f', a') of
(Right f'', Right a'') → undefined --runWarningT (f'' a'') w''
(Left l, _) → pure (w', Left l)
(_, Left l) → pure (w'', Left l)
instance (Monad m, Monoid w) ⇒ Monad (WarningT w e m) where
return a = WarningT $ \w → return (w, Right a)
a >>= b = WarningT $ \w → do
(w', e) ← runWarningT a w
case e of
Right r → runWarningT (b r) w'
Left l → return (w', Left l)
fail = WarningT . fail
instance (Monad m, Monoid w) ⇒ MonadWarning w e (WarningT w e m) where
warning w' = WarningT $ \w → return (w `mappend` w', Right ())
throwW e = WarningT $ \w → return (w, Left e)
catchW a f = WarningT $ \w → do
(w', e) ← runWarningT a w
case e of
Right e' → return (w', Right e')
Left e' → runWarningT (f e') w'
instance (MonadWarning w e m) ⇒ MonadError e m where
throwError = throwW
catchError = catchW
instance (Monoid w, MonadWarning w e m) ⇒ MonadWriter w m where
tell = warning
instance MonadTrans (WarningT w e) where
lift a = WarningT $ \w → do
a' ← a
return $ (w, Right a')
instance (Monoid w, MonadIO m) ⇒ MonadIO (WarningT w e m) where
liftIO = lift . liftIO
instance (MonadReader r m, Monoid w) ⇒ MonadReader r (WarningT w e m) where
ask = lift ask
-- TODO: Check and test it.
local f a = WarningT $ \w → local f $ runWarningT a w
errorToWarning ∷ (Monoid w, MonadWarning w e m) ⇒ (e → w) → (e → m a) → m a → m a
errorToWarning f g a = catchW a (\e → warning (f e) >> g e)
errorsToWarnings ∷ (Monoid w, MonadWarning w e m) ⇒ (e → w) → [m a] → m [a]
errorsToWarnings f = foldl go (return [])
where go r a = errorToWarning f (const r) $ do
a' ← a
r' ← r
return $ a' : r'--
justW ∷ (MonadWarning w e m) ⇒ e → Maybe a → m a
justW _ (Just x) = return x
justW e Nothing = throwW e
rightW ∷ (MonadWarning w e m) ⇒ (e' → e) → Either e' a → m a
rightW _ (Right x) = return x
rightW f (Left e) = throwW (f e)
выкладываю перед выпиливанием этого говна
Хламидомонада / Говнокод #19670
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
{-# LANGUAGE FlexibleInstances #-}
module Connect where
import Data.List
data Color = Black | White deriving (Show, Eq)
data Start = Begin | End deriving (Show, Eq)
data Tree a = Node a [Tree a] deriving (Eq)
instance Show (Tree (Int,Int)) where
show = showTree 0
showTree :: Int -> Tree (Int,Int) -> String
showTree n (Node a s) = show a ++ "\n" ++ replicate n ' ' ++ concatMap (showTree (n+1)) s
elemTree :: Eq a => a -> Tree a -> Bool
elemTree e (Node a []) = if a == e then True else False
elemTree e (Node a s) = if a == e then True else any (e `elemTree`) s
resultFor :: [String] -> Maybe Color
resultFor = check
charToColor :: Char -> Color
charToColor 'X' = Black
charToColor 'O' = White
charToColor _ = error "Bad data!"
check :: [[Char]] -> Maybe Color
check s = if (null iob || null ioe) && (null ixb || null ixe)
then Nothing
else let whb = any (\t -> any (`elemTree` t) ioe) $ map (go White Begin s []) iob
whe = any (\t -> any (`elemTree` t) iob) $ map (go White End s []) ioe
blb = any (\t -> any (`elemTree` t) ixe) $ map (go Black Begin s []) ixb
ble = any (\t -> any (`elemTree` t) ixb) $ map (go Black End s []) ixe
in if whb || whe then Just White else if blb || ble then Just Black else Nothing
where
iob = map (\y -> (0,y)) $ elemIndices 'O' (s !! 0)
ioe = map (\y -> (length s,y)) $ elemIndices 'O' (last s)
ixb = map (\x -> (x,0)) $ elemIndices 'X' (map head s)
ixe = map (\x -> (x,length (s!!0))) $ elemIndices 'X' (map last s)
search :: Foldable t =>
Color
-> [[Char]] -> t (Int, Int) -> (Int, Int) -> Maybe [(Int, Int)]
search color arr from (cx, cy) = (\x -> if null x then Nothing else Just x) $ map fst $ filter snd $ concatMap
(\x -> map
(\y -> testCell color arr from (cx, cy) (x,y))
(filter (\yy -> yy >= 0 && yy < length (arr!!0)) [cy-1, cy, cy+1]))
(filter (\xx -> xx >= 0 && xx < length arr) [cx-1,cx,cx+1])
testCell :: Foldable t =>
Color
-> [[Char]]
-> t (Int, Int)
-> (Int, Int)
-> (Int, Int)
-> ((Int, Int), Bool)
testCell color arr from (cx, cy) (x,y)
|x == cx && y == cy = ((x,y),False)
|cx - x == 1 && cy - y == 1 = ((x,y),False)
|x - cx == 1 && y - cy == 1 = ((x,y),False)
|(x,y) `elem` from = ((x,y),False)
|arr !! x !! y /= '.' && color == charToColor (arr !! x !! y) = ((x,y),True)
|otherwise = ((x,y),False)
go :: Color
-> Start
-> [[Char]]
-> [(Int, Int)]
-> (Int, Int)
-> Tree (Int, Int)
go c s arr from (x,y)
|(c,s) == (White, Begin) && x == length arr - 1 = Node (x,y) []
|(c,s) == (White, End) && x == 0 = Node (x,y) []
|(c,s) == (Black, Begin) && y == length (arr !! 0) -1 = Node (x,y) []
|(c,s) == (Black, End) && y == 0 = Node (x,y) []
|otherwise = let f = search c arr from (x,y)
in case f of
Nothing -> Node (x,y) []
Just r -> Node (x,y) $ map (go c s arr ((x,y):from)) r
Хламидомонада / Говнокод #18739
0
- 1
- 2
- 3
- 4
- 5
- 6
'(haskell-ask-also-kill-buffers nil)
'(haskell-interactive-popup-errors nil)
'(haskell-process-suggest-add-package nil)
'(haskell-process-suggest-language-pragmas nil)
'(haskell-process-suggest-no-warn-orphans nil)
'(haskell-process-suggest-overloaded-strings nil)
не говнокод, но говнофичи
дёрнуло меня обновить haskell-mode
я вас скажу, это просто ад и Израль, глад и мор, и семь казней египетских
Хламидомонада / Говнокод #17746
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
--Поиск минимальной выпуклой оболочки
import Data.List; import Data.Ord
--общие функции и типы
data Point = P{x::Float,y::Float}
deriving (Show,Eq)
getRotate a b c = baX * cbY - baY * cbX
where baX = x b - x a; baY = y b - y a;
cbX = x c - x b; cbY = y c - y b;
sortFunc a b c
|k < 0 = LT
|k == 0 = compare (long a c) (long a b)
|k > 0 = GT
where k = getRotate a b c
long a b = (x b - x a)*(x b - x a) + (y b - y a)*(y b - y a)
getLeftPoint = minimumBy (comparing x)
--Джарвис
getMBOJarvis l = mboJ fp l fp
where fp = getLeftPoint l
mboJ current list fp
|getRotate current next fp > 0 = []
|True = current : mboJ next listWOC fp
where listWOC = filter ((/=)current) list;
next = minimumBy (sortFunc current) listWOC;
--Грехем
getMBOGragam = tail.throwGraham.sortGraham
sortGraham list = fp:sortBy (sortFunc fp) list
where fp = getLeftPoint list
throwGraham (f:s:t) = mboG (s:f:[]) t
mboG <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dfb9ac9f">[email protected]</a>(f:s:st) <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="80f3eec0">[email protected]</a>(h:t)
|sortFunc s f h == GT = mboG (s:st) sn
|True = mboG(h:fs) t
mboG <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d0b6a390">[email protected]</a>(f:st) <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="76051836">[email protected]</a>(h:t) = mboG(h:fs) t
mboG l [] = l
--тесты
testList1 = [P 0 (-1), P (-1) 0, P 0 1,P 1 0,P (-0.5) (-0.5),P 0.5 (-0.5),P (-0.5) 0.5,P 0.5 0.5,P 0 0]
testList2 = [P 0 0, P 1 0, P 0 1,P 2 0,P 1 1,P 0 2,P 2 1,P 1 2,P 2 2]
testJ1 = mapM_ print $ getMBOJarvis testList1
testG1 = mapM_ print $ getMBOGragam testList1
testJ2 = mapM_ print $ getMBOJarvis testList2
testG2 = mapM_ print $ getMBOGragam testList2
Haskell
[сарказм]
Как я могу идти против моды - не заливать этих французских лаб и не выпивать чаю?
Выкладываю, что бы порадовать своего кота Барсика. Барсик, покойся с миром.
А спонсор этого говна - компания "Потролль препода". "Потролль препода" - пиши лабы на хаскелле
[/сарказм]
Хламидомонада / Говнокод #16405
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
map_of_enemy :: [[Int]] -> [[Int]]
map_of_enemy [] = []
map_of_enemy list = (iniciar (0) (0) (list))
iniciar :: Int -> Int -> [[Int]] -> [[Int]]
iniciar a b list = if(a == (length list)-1) then [rango a 0 list]
else [rango a 0 list]++[(iniciar (a+1) 0 list)]
rango :: Int -> Int -> [[Int]] -> [Int]
rango a b list = if (b==(length list)-1 && (((list!!a!!0)==(list!!b!!0)) && ((list!!a!!1)==(list!!b!!1)) && ((list!!a!!2)==(list!!b!!2))))
then [0]
else if (b==(length list)-1 && (((list!!a!!0)/=(list!!b!!0)) || ((list!!a!!1)/=(list!!b!!1)) || ((list!!a!!2)/=(list!!b!!2))))
then (rango2 a (list!!b) list)
else if (((list!!a!!0)==(list!!b!!0)) && ((list!!a!!1)==(list!!b!!1)) && ((list!!a!!2)==(list!!b!!2)))
then [0]++(rango a (b+1) list)
else (rango2 a (list!!b) list)++(rango a (b+1) list)
rango2 :: Int -> [Int] -> [[Int]] -> [Int]
rango2 a b list = if ((verif [(list!!a!!0)+(list!!a!!2),(list!!a!!1)+(list!!a!!2)] [(list!!a!!0)-(list!!a!!2),(list!!a!!1)-(list!!a!!2)] (b))) then [1]
else [0]
verif a b c = if (((c!!0) < (a!!0)) && ((c!!0) > (b!!0)) && ((c!!1) < (a!!1)) && ((c!!1) > (b!!1))) then True
else if (((c!!0) < (a!!0)) && ((c!!0) == (b!!0)) && ((c!!1) < (a!!1)) && ((c!!1) == (b!!1))) then True
else if (((c!!0) == (a!!0)) && ((c!!0) > (b!!0)) && ((c!!1) == (a!!1)) && ((c!!1) > (b!!1))) then True
else False
Haskell
OMG mode on
Хламидомонада / Говнокод #15821
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
import System.Exit
import Graphics.UI.GLUT
import Control.Monad
import Control.Applicative
import Control.Arrow
import Control.Concurrent
import Graphics.Rendering.OpenGL
import Data.IORef
import Data.List
import Data.Maybe
initial = ((0,0),(0.005,-0.03),(0,0),([(-0.4,-0.9),(-0.4,-0.85),(0.4,-0.85),(0.4,-0.9),(-0.4,-0.9)],(0,0)),liftM2 (,) [-0.9,-0.7..0.9] [0.5,0.7,0.9])
ws = dzip [(-1,-1),(-1,1),(1,1),(1,-1)] ; r = 0.1 :: GLfloat
main = initialWindowSize $= Size 777 777 >> initialWindowPosition $= Position 100 100 >> initialDisplayMode $= [DoubleBuffered] >> createWindow "ursula" >>
newIORef initial >>= \ior -> keyboardMouseCallback $= Just (kbd ior) >> displayCallback $= dlay ior >> idleCallback $= Just (anime ior) >> mainLoop
dlay ior = clearColor $= Color4 1 1 1 1 >> clear [ColorBuffer] >> readIORef ior >>= drawDoxyq >> swapBuffers
kbd _ (Char 'q') Down _ _ = exitWith ExitSuccess
kbd s (Char x) Down _ _ = modifyIORef' s $ \(a,b,t,(d,e),cs) -> (a,b,t,(d,(if x == '[' then -0.05 else if x == ']' then 0.05 else fst e,0)),cs)
kbd _ _ _ _ _ = return ()
draw c = renderPrimitive c . mapM_ (vertex . uncurry Vertex2)
touch xy s xy' = guard ((xy ==== xy') <= r+r && (s .*. (xy.-.xy')) <= 0) >> Just (xy.-.xy')
drawDoxyq ((x,y),_,(t,_),(bd,_),cs) = currentColor $= Color4 0.3 0.4 0.8 0 >> mapM_ (mapM_ (draw LineLoop) . sta) cs >>
currentColor $= Color4 0.7 0.1 0.2 1 >> mapM_ (draw LineStrip) swa >> currentColor $= Color4 0 0 0 1 >> draw Polygon bd where
swa = [[(x,y),(x + r/1.8*cos (th+pi/4),y + r/1.8*sin (th+pi/4)),(x + r/1.2*cos th,y + r/1.2*sin th)] | th <- [t,t+pi/2..t+1.6*pi]]
sta (x,y) = [[(x,y+r/2),(x-r/2,y-r/2),(x+r/2,y-r/2)],[(x+r/2,y+r/2-0.03),(x-r/2,y+r/2-0.03),(x,y-r/2-0.03)]]
frame (xy,v,(tt,tr),(b,s),cs) = if snd xy <= r-0.99 || null cs then error "GAME OVER" else (xy.+.v',v',(tt+tr',tr'),(b',s'),cs') where
v' = listy v (\us -> rV (2*negv v .>. foldl1' (.+.) us + tr/11) $ negv v) $ mapMaybe (cutSect xy v) (ws ++ dzip b') ++ mapMaybe (touch xy v) cs
s' = 0.93 *. if any ((1<=) . (*signum (fst s)) . fst) b then negv s else s
b' = map (.+.s') b ; cs' = filter (isNothing . touch xy v) cs
tr' = if v .=. v' then tr else (v' .>. v)/19
listy d f x = if null x then d else f x
rV t (x,y) = (x*cos t - y*sin t,y*cos t + x*sin t)
anime ior = modifyIORef' ior frame >> threadDelay 30000 >> postRedisplay Nothing
cutSect xy s <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a795a">[email protected]</a>(u,v) = guard (xy ./ l <= r && w `oncut` c && (s .*. (xy.-.w)) <= 0) >> Just (xy.-.w) where
l = ln u (u.-.v) ; w = xy .-| l
oncut u (v,w) = 0 <= (u.-.v) .*. (w.-.u) && 0 <= (u.-.w) .*. (u.-.w) && ((u.-.w) .<>. (v.-.w)) # 0
ln xy w = (snd w,-fst w,w.<>.xy)
(x,y) .-| (a,b,c) = ((b^2*x - a*c - a*b*y)/(a^2 + b^2),-(b*c + a*b*x - a^2*y)/(a^2 + b^2))
p ./ ln = p ==== p .-| ln ; pop f (a,b) (c,d) = (f a c,f b d)
(.+.) = pop (+) ; (.-.) = pop (-) ; (.=.) = (uncurry (&&) .) . pop (#)
(*.) = tmap . (*) ; (.*.) = (uncurry (+) .) . pop (*)
(.<>.) = (uncurry (-) .) . (. uncurry (flip (,))) . pop (*) ; v .>. u = atan2 (v .<>. u) (v .*. u)
norm = sqrt . join (.*.) ; a ==== b = norm $ a.-.b ; negv = tmap negate
infix 4 #,*. ; infix 3 .+.,==== ; infix 8 .>.
x # y = abs (x-y) < 0.00001 ; tmap = join (***)
dzipWith = (<*> drop 1) . zipWith ; dzip = dzipWith (,)
Вся суть выразительности Haskell
Хламидомонада / Говнокод #14343
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
setRegState :: RegisterStates -> M_Register -> Word8 -> RegisterStates
setRegState rs r n =
let (a, b, c, d, e, f, h, l, pc, sp) = rs in
case r of
M_A -> (n, b, c, d, e, f, h, l, pc, sp)
M_B -> (a, n, c, d, e, f, h, l, pc, sp)
M_C -> (a, b, n, d, e, f, h, l, pc, sp)
M_D -> (a, b, c, n, e, f, h, l, pc, sp)
M_E -> (a, b, c, d, n, f, h, l, pc, sp)
M_F -> (a, b, c, d, e, n.&.0xF0, h, l, pc, sp)
M_H -> (a, b, c, d, e, f, n, l, pc, sp)
M_L -> (a, b, c, d, e, f, h, n, pc, sp)
Haskell has no boilerplate.
Из исходников заброшенного эмулятора GameBoy (https://github.com/bitc/omegagb/)
Хламидомонада / Говнокод #13849
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
sel :: Int -> Int -> Expr
sel i n = lam [pvar "x"] (caseE (var "x") [alt])
where alt :: Match
alt = simpleM pat rhs
pat :: Patt
pat = ptup (map pvar as)
rhs :: Expr
rhs = var (as !! (i-1)) -- !! is 0 based
as :: [String]
as = ["a"++show i | i <- [1..n] ]
[quote]The code for sel is more verbose than that for printf because it
uses explicit constructors for expressions rather than implicit ones.[/quote]
Сообственно это все объяснение к данному коду:
http://research.microsoft.com/en-us/um/people/simonpj/papers/meta-haskell/meta-haskell.pdf
, так как и это все очень очевидно для автора, в то время как printf
был и без объяснений очевиден даже мне. Автор хоть бы одно значение
сокращения потрудился объяснить. Впрочем сокращениями стандартная
библиотека хаскеля любит страдать...
Хламидомонада / Говнокод #13780
0
- 1
http://rosettacode.org/mw/index.php?title=MD5/Implementation&diff=166456&oldid=164374
Haskell. Вероятно, смутила раскраска для одинарной кавычки: внизу еще заметно. // до правки код был рабочий
Хламидомонада / Говнокод #12976
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
module Main where
import Control.Monad
--import Data.Monoid
data State s a = State (s -> (a, s))
runState :: State s a -> s -> (a, s)
runState (State f) = f
instance Monad (State s) where
return a = State $ \s -> (a, s)
ma >>= mf = State $ \s0 -> let (b, s1) = runState ma s0
in runState (mf b) s1
type FSM s = State s s
fsm :: (ev -> s -> s) -> (ev -> FSM s)
fsm transition = \e -> State $ \s -> (s, transition e s)
data PN = NONZ | PONZ | POPZ | NOPZ deriving (Eq,Show)
parse :: Int -> FSM PN
parse = fsm $ trans
where trans 1 NONZ= PONZ
trans 1 NOPZ= POPZ
trans 1 POPZ= NOPZ
trans 1 PONZ= NONZ
trans 0 POPZ= PONZ
trans 0 PONZ= POPZ
trans 0 NONZ= NOPZ
trans 0 NOPZ= NONZ
conv [] = []
conv ('1':xs) = 1:(conv xs)
conv ('0':xs) = 0:(conv xs)
conv (_:xs) = error "parse error"
main =do
x <- getLine
print $ (snd $ runState (mapM parse (conv x)) POPZ) == POPZ
print $ runState (mapM parse (conv x)) POPZ
Конечный автомат на Haskell
Хламидомонада / Говнокод #12738
0
- 1
- 2
instance Show (a -> b)
main = print (*)
http://liveworkspace.org/code/17QAgf$23
stderr:
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Возможно это из-за того, что нет реализации show и я написать вменяемую
не смогу. Как заставить Haskell сгенерировать для меня show?
Хочется типа такого:
{-# LANGUAGE OverlappingInstances, FlexibleInstances, UndecidableInstances, StandaloneDeriving, DeriveFunctor #-}
deriving instance Show (a -> b)
main = print (*)http://liveworkspace.org/code/17QAgf$21
http://www.haskell.org/ghc/docs/6.12.1/html/users_guide/deriving.html
http://www.haskell.org/haskellwiki/GHC/Stand-alone_deriving_declarations
Хламидомонада / Говнокод #12262
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
by :: Int -> [a] -> [[a]]
by _ [] = []
by n xs = take n xs: by n (drop n xs)
words2 :: String -> (String, String)
words2 str = conc $ words str where
conc (x:xs) = (x, concat xs)
groupTemplates :: String -> [(String, String)]
groupTemplates xs = map (words2) (lines xs)
decodeOne :: String -> [(String, String)] -> String
decodeOne _ [] = ""
decodeOne str (x:xs) | str == fst x = fst x ++ " " ++ snd x ++ "\n"
decodeOne str (_:xs) = decodeOne str xs
decode :: [String] -> [(String, String)] -> String
decode bs ts = concat $ map (\b -> decodeOne b ts) bs
main = do
bits <- readFile "bits.txt"
templates <- readFile "templates.txt"
writeFile "out.txt" $ decode (by 4 bits) (groupTemplates templates)
http://www.cyberforum.ru/haskell/thread723767.html
Хламидомонада / Говнокод #12056
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
only :: (Integral nt) => nt -> [Bool]
only n = [ x `mod` n == 0 | x <- [0..] ]
each :: (Integral nt) => nt -> [a] -> [a]
each n xs = [ snd x | x <- filter fst $ zip (only n) xs ]
main = do print $ each 2 [1,2,3,4,5,6,7,8,9]
Haskell. Получение каждого n-го элемента списка.
Хламидомонада / Говнокод #11976
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
{-# LANGUAGE ExistentialQuantification,
DeriveDataTypeable,
PatternSignatures #-}
import Data.Typeable
import Control.Concurrent
import Control.Concurrent.MVar
import Control.Concurrent.Chan
-- Core data types
data Message = forall t . Typeable t => Message t | StopMessage
deriving Typeable
data Handler = forall t . Typeable t => Handler (t -> IO ())
-- Worker thread
data Worker = Worker (Chan Message) (MVar ())
workerThread :: [Handler] -> Chan Message -> MVar () -> IO ()
workerThread handlers chan finish = loop where
loop = do
message <- readChan chan
case message of
StopMessage -> putMVar finish ()
Message val -> do
foldr (tryHandler val) (putStrLn "Unhandled message") handlers
loop
tryHandler val (Handler h) rest = maybe rest h (cast val)
startWorker :: [Handler] -> IO Worker
startWorker handlers = do
chan <- newChan
finish <- newEmptyMVar
forkIO (workerThread handlers chan finish)
return $ Worker chan finish
send :: Typeable m => Worker -> m -> IO ()
send (Worker chan _) message = do
writeChan chan $ Message message
stopWorker :: Worker -> IO ()
stopWorker (Worker chan finish) = do
writeChan chan $ StopMessage
takeMVar finish
-- Some tests
data Test = Test Bool String deriving Typeable
intHandler :: Int -> IO ()
intHandler val = putStrLn $ "Int: " ++ show (val * 2)
strHandler :: String -> IO ()
strHandler val = putStrLn $ "String: " ++ reverse val
testHandler :: Test -> IO ()
testHandler (Test b s) = putStrLn $ "Test: " ++ show b ++ " " ++ show s
main = do
w <- startWorker [
Handler intHandler,
Handler (\(val::Char) -> putStrLn $ "Char: " ++ show val),
Handler strHandler,
Handler testHandler]
send w (5::Int)
send w False
send w 'a'
send w "foo"
send w (Test True "bar")
stopWorker w
putStrLn "Finished!"
Вот такая вот портянка была написана под влиянием дискуссии с HaskellGovno http://govnokod.ru/11968, и недавней его просьбой рассказать об общении потоков в хаскеле.
Код запускает тред, в который можно передавать различные сообщения
(ограничение только одно - тип сообщения должен быть инстансом
тайпкласса Typeable). В треде исполняются указанные хендлеры, каждый из
которых ловит свой тип сообщений.
P.S. Для неимеющих хаскеля, но желающих посмотреть на работу кода: http://ideone.com/OMVamc.
Хламидомонада / Говнокод #11510
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
t = 40000 -- количество итераций, чтобы выполнялось примерно 1 миллисекунду
-- экспериментальным путем определено, что для ideone'вских машин это значение ~40000
sleep x = (apply (t*x) id x) `seq`
("I've waited ~" ++ show x ++ " milliseconds to tell this: 'pipisiunchik'.")
-- apply применяет ф-цию f к x n раз
apply 0 _ !x = x
apply !n !f !x = apply (n - 1) f (f x)
main = putStrLn $ sleep 1000
Спешу представить вам плод моего безделья: чистая ф-ция sleep на Haskell!
Тесты:
1sec - http://ideone.com/sLxRx
3.5sec - http://ideone.com/vn4Fd
10sec - http://ideone.com/U8s36
Хламидомонада / Говнокод #11478
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
fibs = 0:1:zipWith (+) fibs (tail fibs)
fib = (fibs !!)
main = let
a = [fib 250000..]
b = a!!0
c = 1
in b `seq` print c
Haskell не может в not used expression elimination. Не используемые константы a и b не убрал из вычисления.
В результате видим пустую трату времени time: 13.15s :
http://ideone.com/41Q8D
И это то ленивом языке, не смотря на то, что эти вычисления не нужны. Можно писать в багтреккер.
P.S.: Когда уже хаскель в подсветку говнокода добавят?
Хламидомонада / Говнокод #10205
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
data (,) a b = (,) a b
deriving Generic
data (,,) a b c = (,,) a b c
deriving Generic
data (,,,) a b c d = (,,,) a b c d
deriving Generic
.......
data (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p q r s t u v w x y z a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ a__ b__ c__ d__ e__ f__ g__ h__ i__ j__
= (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p q r s t u v w x y z a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ a__ b__ c__ d__ e__ f__ g__ h__ i__ j__
-- deriving Generic
{- Manuel says: Including one more declaration gives a segmentation fault.
Вот такая вот реализация туплов:
http://www.haskell.org/ghc/docs/7.4.1/html/libraries/ghc-prim-0.2.0.0/src/GHC-Tuple.html
Хламидомонада / Говнокод #9598
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-- | The unit datatype @()@ has one non-undefined member, the nullary
-- constructor @()@.
data () = () deriving Generic
data (,) a b = (,) a b
. . .
data (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p q r s t u v w x y z a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ a__ b__ c__ d__ e__ f__ g__ h__ i__ j__
= (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p q r s t u v w x y z a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ a__ b__ c__ d__ e__ f__ g__ h__ i__ j__
-- deriving Generic
{- Manuel says: Including one more declaration gives a segmentation fault.
. . .
*тяжелый вздох*
http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim-0.2.0.0/src/GHC-Tuple.html#%28%29
Хламидомонада / Говнокод #6765
0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
chislo :: String -> Bool
chislo []=True
chislo (x:xs) =if (x=='1') then chislo xs
else if (x=='2') then chislo xs
else if (x=='3') then chislo xs
else if (x=='4') then chislo xs
else if (x=='5') then chislo xs
else if (x=='6') then chislo xs
else if (x=='7') then chislo xs
else if (x=='8') then chislo xs
else if (x=='9') then chislo xs
else if (x=='0') then chislo xs
else if (x=='.') then chislo xs
else False
haskell
Хламидомонада / Говнокод #3942
0
- 1
- 2
fac 1 = 1
fac n = fac (n-1) * n
Вычисления факторила advanced-нубами с луркмора(с) на Haskell
Комментарии
Отправить комментарий