1

"PHP" / Говнокод #26870 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 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);
    }

Код для вычисления длины данного гамнакода.

3_dar 3_dar, (Updated )

Комментарии (12, +12)

"PHP" / Говнокод #26866 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
В боте @GovnokodBot обновление:

Теперь говнокоды отправляются скриншотами.
Также создан канал "Говнокода" в "Telegram": https://t.me/GovnokodChannel

Баги и пожелания можно писать сюда.

Зеркала Говнокода и полезные ресурсы:
* https://govnokod.xyz/
* https://gcode.space/
* индекс оффтопов: https://index.gcode.space/
* https://t.me/GovnokodBot
* https://pethu.ru

guest8 guest8, (Updated )

Комментарии (32, +32)

"PHP" / Говнокод #16

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
Тестовый оффтоп на хузе #1

$args["reply_markup"] = json_encode(array("inline_keyboard" => array(array(
                array("text" => "Обсудить", "url" => get_the_permalink($comment)),
            ))));

Перекат!

admin admin,

Комментарии (0)

"PHP" / Говнокод #26855 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 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>

vasily2808 vasily2808, (Updated )

Комментарии (136, +136)

"PHP" / Говнокод #26849 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 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);

Кажуть - шота сторінка довго грузиться :)

silverreve23 silverreve23, (Updated )

Комментарии (8, +8)

"PHP" / Говнокод #26846 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 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

6a6yuH 6a6yuH, (Updated )

Комментарии (10, +10)

"PHP" / Говнокод #26842 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
while (true) {
  if ($current === $requested) {
     break;
  }
  if (! in_array($requested, $available)) {
     break;
  }
  session()->put('locale', $requested);
  break;
}

Edd Edd, (Updated )

Комментарии (10, +10)

"PHP" / Говнокод #26829 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 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.

gost gost, (Updated )

Комментарии (4, +4)

 

"PHP" / Говнокод #26781 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 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, который не дали.

Какой блокчейн )))

Fike Fike, (Updated )

Комментарии (137, +137)

"PHP" / Говнокод #26754 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 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;
    }

FireDemonru FireDemonru, (Updated )

Комментарии (81, +81)

"PHP" / Говнокод #26749 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
<?php 
	$bool1 = false;
	$bool2 = true;
	
	$info = '';
	
	if ($bool1 || function () {
		if ($bool2)
		{
			$info = 'Привет мир!';
		}
	})
	{
		echo 'Код выполнен';
	}
	
	echo $info . "\n";

?>

Еще бы работало:D

A1mDev A1mDev, (Updated )

Комментарии (49, +49)

"PHP" / Говнокод #26746 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 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/
>>> Как должны выглядеть модели?

gost gost, (Updated )

Комментарии (297, +297)

"PHP" / Говнокод #26718 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 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 прайс ?

phpBidlokoder2 phpBidlokoder2, (Updated )

Комментарии (0)

"PHP" / Говнокод #26698 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 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>

Сделал вещь

bodix bodix, (Updated )

Комментарии (37, +37)

"PHP" / Говнокод #26675 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 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/

gost gost, (Updated )

Комментарии (20, +20)
 
 

"PHP" / Говнокод #26674 Ссылка на оригинал

0

  1. 1
  2. 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 быстрый. Да. Могу по слогам: бы-стрый. Для своей простоты и задач он божественно быстрый.

j123123 j123123, (Updated )

Комментарии (83, +83)

"PHP" / Говнокод #26668 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 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
Рекурсивный говнокод.

gost gost, (Updated )

Комментарии (9, +9)

"PHP" / Говнокод #26664 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 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);

Получение списка всех говнокодов, комментарии к которым можно восстановить.

ropuJIJIa ropuJIJIa, (Updated )

Комментарии (23, +23)

"PHP" / Говнокод #26663 Ссылка на оригинал

+1

  1. 1
https://t.me/GovnokodBot

Напомню, или может кто не знал.
P.S. Кстати, guest8 достаточно раскрученный, поэтому здесь может быть ваша реклама.

guest8 guest8, (Updated )

Комментарии (8, +8)

"PHP" / Говнокод #26660 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 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 первой версии

cypherpunks cypherpunks, (Updated )

Комментарии (0)

"PHP" / Говнокод #26659 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 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>';

Уууъъъъъ пыхомразь

phpBidlokoder2 phpBidlokoder2, (Updated )

Комментарии (19, +19)

"PHP" / Говнокод #26607 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 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)

govnokoduser2000 govnokoduser2000, (Updated )

Комментарии (4, +4)

"PHP" / Говнокод #26606 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 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, так вот зачем это было нужно

phpBidlokoder2 phpBidlokoder2, (Updated )

Комментарии (18, +18)

"PHP" / Говнокод #26602 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 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/

gost gost, (Updated )

Комментарии (19, +19)
 
 

HTML / Говнокод #5

0

  1. 1
 <textarea required="required"></textarea>

порт <textarea required></textarea> на html5.

Придумали больные ублюдки из W3C.

Сначала один ублюдок придумал атрибуты без значения. Если атрибут отсутствует, то он равен false, если присутствует, то он равен true. Примеры такого говна — атрибуты элементов форм, например, уже упомянутый required, после которого знак = не ставился.

Потом, когда придумали xhtml и это всё гов великолепие нужно было портировать на xml, в котором атрибуты без значения недопустимы, другой ублюдок (или тот же?) придумал синтаксис required="required" вместо required="true" или чего-то похожего.

Добро пожаловать в world wide web!

bugment bugment,

Комментарии (15, +15)
 
 

Koko / Говнокод #26591 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 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"

        }
    }
}

MAKAKA MAKAKA, (Updated )

Комментарии (44, +44)

Koko / Говнокод #26408 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 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

Gorr Gorr, (Updated )

Комментарии (48, +48)

Koko / Говнокод #25919 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 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

Lorip1971 Lorip1971, (Updated )

Комментарии (45, +45)

Koko / Говнокод #25734 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 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'ом

pasha3103 pasha3103, (Updated )

Комментарии (34, +34)

Koko / Говнокод #25394 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 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()
	}

jadedolej jadedolej, (Updated )

Комментарии (15, +15)
 
 

Goвно / Говнокод #26743 Ссылка на оригинал

0

  1. 1
https://m.vk.com/wall-30666517_1672469

Из исходников и документации Go убрали фразы whitelist/blacklist и master/slave.
Всё из-за протестов, которые сейчас проходят в Америке.

Фразы «blacklist» и «whitelist» заменили на «blocklist» и «allowlist», а «master» и «slave»
в зависимости от контекста на «process», «pty», «proc» и «control».

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

OlegUP OlegUP, (Updated )

Комментарии (76, +76)

Goвно / Говнокод #26716 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 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
}

Проверка заполненности имени пользователя хотя - бы на одном из языков.

anon007 anon007, (Updated )

Комментарии (54, +54)

Goвно / Говнокод #26599 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 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

Fike Fike, (Updated )

Комментарии (15, +15)

Goвно / Говнокод #26349 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 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

gostinho gostinho, (Updated )

Комментарии (15, +15)

Goвно / Говнокод #25729 Ссылка на оригинал

0

  1. 1
Ьут оказывается go есть

TOPT TOPT, (Updated )

Комментарии (20, +20)
 
 

Хламидомонада / Говнокод #26241 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ

СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ

xyu_100cm xyu_100cm, (Updated )

Комментарии (0)

Хламидомонада / Говнокод #26239 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ

xyu_100cm xyu_100cm, (Updated )

Комментарии (0)

Хламидомонада / Говнокод #26238 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ

xyu_100cm xyu_100cm, (Updated )

Комментарии (0)

Хламидомонада / Говнокод #25323 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 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»

silvesterdrago silvesterdrago, (Updated )

Комментарии (70, +70)

Хламидомонада / Говнокод #24452 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 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

roman-kashitsyn roman-kashitsyn, (Updated

 

 

Хламидомонада / Говнокод #23859 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 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

CHayT CHayT, (Updated )

Комментарии (31, +31)

Хламидомонада / Говнокод #23446 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 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

roman-kashitsyn roman-kashitsyn, (Updated )

Комментарии (6, +6)

Хламидомонада / Говнокод #22737 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 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

Пишем на декларативном языке

CHayT CHayT, (Updated )

Комментарии (7, +7)

Хламидомонада / Говнокод #21424 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 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: лаба с фейспука

roman-kashitsyn roman-kashitsyn, (Updated )

Комментарии (39, +39)

Хламидомонада / Говнокод #20430 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
███████                                                                                                                         
██   ██                                                                                                                         
██   ██                                                                                                                         
██   ██  █████     ████ ██   ██ ██████  █████  ██████  ████        ██   ██  █████       ██   ██ ██   ██ ██ █ ██ ██   ██  ████   
██   ██ ██   ██   ██ ██ ██   ██ █ ██ █ ██   ██ █ ██ █     ██       ██   ██ ██   ██      ██   ██ ██   ██ ██ █ ██ ██   ██     ██  
██   ██ ██   ██  ██  ██ ██  ███   ██   ██   ██   ██    █████       ██   ██ ██   ██      ██   ██ ██   ██  █ █ █  ██   ██  █████  
██   ██ ██   ██  ██  ██ ██ █ ██   ██   ██   ██   ██   ██  ██       ███████ ███████      ███████ ██   ██  █████  ███████ ██  ██  
██   ██ ██   ██  ██  ██ ███  ██   ██   ██   ██   ██   ██  ██       ██   ██ ██           ██   ██ ██   ██  █ █ █  ██   ██ ██  ██  
██   ██ ██   ██  ██  ██ ██   ██   ██   ██   ██   ██   ██  ██       ██   ██ ██   ██      ██   ██  ██████ ██ █ ██ ██   ██ ██  ██  
██   ██  █████  ███  ██ ██   ██  ████   █████   ████   ███ ██      ██   ██  █████       ██   ██      ██ ██ █ ██ ██   ██  ███ ██ 
                                                                                                     ██                         
                                                                                                ██   ██                         
                                                                                                 █████

███████                                                                                                                         
██   ██                                                                                                                         
██   ██                                                                                                                         
██   ██  █████     ████ ██   ██ ██████  █████  ██████  ████        ██   ██  █████       ██   ██ ██   ██ ██ █ ██ ██   ██  ████   
██   ██ ██   ██   ██ ██ ██   ██ █ ██ █ ██   ██ █ ██ █     ██       ██   ██ ██   ██      ██   ██ ██   ██ ██ █ ██ ██   ██     ██  
██   ██ ██   ██  ██  ██ ██  ███   ██   ██   ██   ██    █████       ██   ██ ██   ██      ██   ██ ██   ██  █ █ █  ██   ██  █████  
██   ██ ██   ██  ██  ██ ██ █ ██   ██   ██   ██   ██   ██  ██       ███████ ███████      ███████ ██   ██  █████  ███████ ██  ██  
██   ██ ██   ██  ██  ██ ███  ██   ██   ██   ██   ██   ██  ██       ██   ██ ██           ██   ██ ██   ██  █ █ █  ██   ██ ██  ██  
██   ██ ██   ██  ██  ██ ██   ██   ██   ██   ██   ██   ██  ██       ██   ██ ██   ██      ██   ██  ██████ ██ █ ██ ██   ██ ██  ██  
██   ██  █████  ███  ██ ██   ██  ████   █████   ████   ███ ██      ██   ██  █████       ██   ██      ██ ██ █ ██ ██   ██  ███ ██ 
                                                                                                     ██                         
                                                                                                ██   ██                         
                                                                                                 █████

TEPAnEBT TEPAnEBT, (Updated )

Комментарии (10, +10)

Хламидомонада / Говнокод #20287 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 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, ворециируем любой из них. Вверх идём просто, ничего не ворецируя, ибо нужную кобенацию важно сохранить, а вот сбоку идём вниз, тут уж можно любую кобенацию брать.

CHayT CHayT, (Updated )

Комментарии (12, +12)

Хламидомонада / Говнокод #20195 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 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

CHayT CHayT, (Updated )

Комментарии (82, +82)

Хламидомонада / Говнокод #20153 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 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

CHayT CHayT, (Updated )

Комментарии (156, +156)

Хламидомонада / Говнокод #20068 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 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

CHayT CHayT, (Updated )

Комментарии (18, +18)
 
 

Хламидомонада / Говнокод #20004 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 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 не проходит по таймауту.

Yuuri Yuuri, (Updated )

Комментарии (20, +20)

Хламидомонада / Говнокод #19959 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 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
    , ..
    }

CHayT CHayT, (Updated )

Комментарии (6, +6)

Хламидомонада / Говнокод #19672 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 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 | mw 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)

выкладываю перед выпиливанием этого говна

CHayT CHayT, (Updated )

Комментарии (329, +329)

Хламидомонада / Говнокод #19670 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 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

Abbath Abbath, (Updated )

Комментарии (94, +94)

Хламидомонада / Говнокод #18739 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 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
я вас скажу, это просто ад и Израль, глад и мор, и семь казней египетских

CHayT CHayT, (Updated )

Комментарии (71, +71)

Хламидомонада / Говнокод #17746 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 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
[сарказм]
Как я могу идти против моды - не заливать этих французских лаб и не выпивать чаю?

Выкладываю, что бы порадовать своего кота Барсика. Барсик, покойся с миром.

А спонсор этого говна - компания "Потролль препода". "Потролль препода" - пиши лабы на хаскелле
[/сарказм]

kegdan kegdan, (Updated )

Комментарии (60, +60)

Хламидомонада / Говнокод #16405 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 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

kegdan kegdan, (Updated )

Комментарии (17, +17)

Хламидомонада / Говнокод #15821 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 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

jkhne4pijgberg jkhne4pijgberg, (Updated )

Комментарии (34, +34)
 
 

Хламидомонада / Говнокод #14343 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 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/)

Yuuri Yuuri, (Updated )

Комментарии (8, +8)

Хламидомонада / Говнокод #13849 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 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 был и без объяснений очевиден даже мне. Автор хоть бы одно значение сокращения потрудился объяснить. Впрочем сокращениями стандартная библиотека хаскеля любит страдать...

HaskellGovno HaskellGovno, (Updated )

Комментарии (5, +5)

Хламидомонада / Говнокод #13780 Ссылка на оригинал

0

  1. 1
http://rosettacode.org/mw/index.php?title=MD5/Implementation&diff=166456&oldid=164374

Haskell. Вероятно, смутила раскраска для одинарной кавычки: внизу еще заметно. // до правки код был рабочий

unu-foja unu-foja, (Updated )

Комментарии (10, +10)

Хламидомонада / Говнокод #12976 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 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

Abbath Abbath, (Updated )

Комментарии (1, +1)

Хламидомонада / Говнокод #12738 Ссылка на оригинал

0

  1. 1
  2. 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

HaskellGovno HaskellGovno, (Updated )

Комментарии (14, +14)

Хламидомонада / Говнокод #12262 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 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

Fai Fai, (Updated )

Комментарии (40, +40)

Хламидомонада / Говнокод #12056 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 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-го элемента списка.

Fai Fai, (Updated )

Комментарии (104, +104)

Хламидомонада / Говнокод #11976 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 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.

bormand bormand, (Updated )

Комментарии (43, +43)

Хламидомонада / Говнокод #11510 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 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

zim zim, (Updated )

Комментарии (20, +20)

Хламидомонада / Говнокод #11478 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 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.: Когда уже хаскель в подсветку говнокода добавят?

HaskellGovno HaskellGovno, (Updated )

Комментарии (58, +58)
 

Хламидомонада / Говнокод #10205 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 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

bormand bormand, (Updated )

Комментарии (15, +15)

Хламидомонада / Говнокод #9598 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 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

wvxvw wvxvw, (Updated )

Комментарии (65, +65)

Хламидомонада / Говнокод #6765 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 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

resettik resettik, (Updated )

Комментарии (49, +49)

Комментарии

Популярные сообщения из этого блога

8

Kiev