ЙажаСценарий / Говнокод #25364 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
//We want to create a range of N elements (from 0 to N-1 for simplicity)

const N = 10;

const res1 = Array.apply(null, {length: N}).map(Number.call, Number);

const res2 = [...Array(N).keys()];

const res3 = Array.from({length: N}, (val, i) => i); 

const res4 = Array(N).fill().map((e,i)=>i);

Давайте создавать числовые последовательности.
Бонусные баллы если в Вашем языке возможно также задать начальное значение и шаг.

Запостил: bootcamp_dropout bootcamp_dropout, (Updated )

Комментарии (130) RSS

  • все сосут у руби
    (42..100400).step(16).first(4) # [42, 58, 74, 90]
    Ответить
      • иди отсюда со своим J. Из за его дурацких непарных скобочек сломался .xyz (((
        Ответить
          • Смени аву. Ты напоминаешь мне докторинхо.
            Ответить
          • Ебанутая библиотека по парсингу HTML пыталась вырезать "smarty" и "PHP".
            Ответить
                • зачем нужен dumby?
                  почему вот так писать плохо
                  <?=$petix;?>

                  а вот так хорошо
                  {{ petix }}

                  ?
                  Ответить
                  • Может, тут работает теория зашквара?
                    https://cs8.pikabu.ru/post_img/big/2018/03/25/7/1521974068128958990.jpg
                    PHP был зашкварен теми, кто предал учение MVC и генерировал HTML вместе с логикой. Ввели Smarty, который был пока ещё не зашкварен.
                    Когда на Smarty появляется смешение логики и интерпейсов, Smarty зашкваривается, и на его место должно прийти что-то другое (то же самое, но с другим названием), что будут использовать для шаблонизации до следующего зашквара.
                    Ответить
                    • можно написать шоблонезатор на смарти?
                      Ответить
                    • Строго говоря любой пацан, который хоть раз в жизни написал "<", и "?" уже зашкварен
                      Ответить
                    • Придумал мысленный эксперимент.

                      На глагне «ГК» всплывают говнокоды на разных языках. Просмотр говнокода на «PHP» мгновенно зашкваривает зрителя. Ваши родные знают, что вы бываете на «ГК», но через плечо к вам не заглядывают, поэтому не знают, видели ли вы код на «PHP» или ещё нет. Получается, что для них вы одновременно зашкварены и ещё нет.
                      Ответить
      • Давайте сравнивать честно

        питон
        range(42, 100400, 16)[:4]


        руби
        (42..100400).step(16).first(4)


        питон короче, но руби читаемей
        Ответить
          • прости, я не знаю языка для гостевых книг
            Ответить
            • It's English. Being the language of international community, English could be used while leaving your comments on the Internet.
              Ответить
            • коко вам в ленту
              print((0..200 step 5).filter{it % 3 == 0}.toList()[2])



              итого: соснули более всех JS и PHP. У Kotlin, Ruby и Python дела примерно одинаково хорошо.

              Почему я не увдивлен?
              Ответить
              • В «PHP» есть array_filter:
                array_filter(range(0,200,5), function($x){return $x % 3 == 0;})


                В «ES6» вроде много чего добавили, но я им не владею (нужно позвать 1024--).
                Ответить
                • Давайте немного сжульничаем:
                  const _ = require('lodash');
                  
                  const res = _(_.range(0,200,5))
                    .filter(x => !(x % 3))
                    .take(4)
                    .shuffle()
                    .value()

                  На ES6 декларативно выразить "сделай мне массив значений от х до у" невозможно, будем костылить:
                  const pituh = (a,b, di) => 
                  Array(Math.floor(Math.abs((b-a)/di)))
                  .fill()
                  .map((_, i) => a+ i*di)
                  
                  const res = pituh(0,200,5)
                  .filter(x => !(x % 3))
                  .slice(0,4)
                  //хуевый shuffle для веб-макак
                  .sort(() => 0.5 - Math.random())
                  Ответить
                  • То-есть создатели самого популярного языка тужились-тужились, но так и не смогли сделать то, что в других языках реализовано уже 25 лет назад?
                    Ответить
                      • Это были его последние слова?

                        Думаю что в аду для него есть специальная сковородочка, рядом со сковородочкой для Расмуса
                        Ответить
                          • Люди собираются вокруг инструмента:)
                            По какой-то причине на OCaml, C++ и JavaScript пишут разные люди.

                            Я ничего не имею против JS как против языка для несложных скриптов.

                            Но кажется что на нем уже начали писать IDE, и это как-то пугает
                            Ответить
                            • >Люди собираются вокруг инструмента:)
                              Я довольно часто слышу такое мнение и полностью с ним согласен.

                              >Но кажется что на нем уже начали писать IDE, и это как-то пугает
                              https://www.reddit.com/r/emacs/comments/ahjfpk/wouldnt_it_be_nice_if_emacs_rewrote_in_o op/

                              JS удивителен в этом плане: язык прошел огромный путь, развился и разросся за такое малое время. Если так на это смотреть, то стандартная библиотека js без range, но с wannabe-метапрограммированием с помощью Object и Function методов полностью такой порядок дел вокруг отображает.
                              Ответить
                              • JS довольно древний язык. Тот же C# прошел за меньшее время куда больше изменений и даже плюсы прошли;)


                                Просто пинок JS получил в конце нулевых, когда война за rich client application закончилась его победой.

                                И поскольку им занимается не одна компания, то у нас классический design by committee:)

                                А в целом пора бы уже начать хоронить скриптовые языки.
                                Это в 1995 году статическая типизация мешала, а теперь помогает. Я правда не понимаю чем JS лучше того же Kotlin
                                Ответить
                      • >> Считайте, что JavaScript (пожалуйста, только не «JScript») спас вас от VBScript.

                        А интересно, как бы выглядели сайты в альтернативной вселенной, где основным языком является VBScript.
                        Ответить
                        • MS не Sun, они соплей не жуют.
                          Скорее всего они взяли бы всё в свои руки, заставили бы производителей браузеров платить им fee, в итоге VBS ни в каких попен сурс системах бы не работал, и W3C с ноля разработал бы что-то более внятное.

                          зы: почему вообще надо выбирать между двух стульев?
                          Ответить
                    • А в C++ числа Пи нет. 40 лет тужились, но так и не выдавили.

                      Главное - есть все возможности для реализации в библиотеках.
                      Начиная с ??? работает r = range(1, 10); while((x = r.next()) !== null) ...
                      Начиная с ES5 работает range(1, 10).forEach(...).
                      Начиная с ES2016 работает for(const x of range(1, 10)), причём range - ленивый питух.
                      Начиная с ES2018 работает for await (const x of range(1, 10)), причём range - ленивый асинхронный питух.

                      JS - хороший низкоуровневый язык, на основе которого можно легко создавать свои выразительные диалекты.
                      Ответить
                      • > пи
                        Причём они даже завезли variable templates, через которые можно описать это пи... Но пи как не было так и нет. Зато есть функции бесселя.
                        Ответить
                      • Это все конечно змечательно, но в 2019 если я хочу
                        дождаться выполнения операции над массивом, выполнить другую операцию и сохранить результат, я пишу что-то вроде
                        const res = await Promise.all(
                          range()
                            .map(async (x) => /**/))
                        .then(arr => /**/)

                        Как вышло что в ES5 нам дают array методы, а в ES2016-2018 мы снова откатываемся к for?
                        Ответить
                        • map ведь никто не убирал, можно пользоваться. Ну и асинхронный вариант добавить. Хотя, тут придётся либо несколько вариантов, либо подумать. Иногда нам нужно будет подождаь асинхронные элементы массива, обработать асинхронными функциями и вернуть массив промисов явно, иногда - подождать асинхронные элементы, обработать асинхронными функциями и посчитать результирующий массив и т.д., и эти действия должны быть разделены. Динамическая питуизация будет только мешать, когда результат станет непредсказуемым.
                          Ответить
                          • На самом деле, нам нужен только
                            Uniform Function Call Syntax:
                            const res = range()
                              .map(async x => /**/)
                            //handle each promise
                              .map(async promise => /**/)
                            //now unify and await them
                              .(await Promise.all)
                            //now do other shit and return promise
                              .map(async (resolved) => /**/)
                              .(Promise.all)
                            //...and maybe other spaghetti
                              .then(arr => 'kukareku')

                            Но комитету такие смелые дизайнерские решения не нужны, поэтому лучше они накидают блочной императивной хуйни чтобы индусам, которые получают карри за кол-во строк кода, было на что жить.
                            Ответить
              • Поэтому я и за "PHP", что там такой хуйни нет (и не нужна).
                Ответить
                • Просто не нужно использовать "PHP" для разработки софта, и не будет никаких проблем
                  Ответить
        • Запомнить 3 аргумента не сложно, и мне кажется, что питно здесь читаемей.
          Ответить
          • Не знаю, мне проще ничего не запоминать а получать комплишен в RubyMine.

            Кроме того в руби можно выстраивать постфиксные цепочки, а в питоне нельзя
            p (0..200)
                  .step(3)
                  .select {|n| n % 5 == 0}
                  .first(4)
                  .shuffle


            письника мне такое на питоне чтобы читаемо легко и приятно
            Ответить
            • С фильтрами некрасиво, но можно письковым генератором:
              from random import shuffle
              
              a = [i for i in range(0, 200, 3) if i % 5 == 0][:4]
              shuffle(a)
              print(a)
              Ответить
              • много б-квенно

                кста не лучше ли генератор вместо лист компрхжн?
                Ответить
  • Именно для такой хуйни языки и создавались, ага.
    Ответить
    • Тебе-то конечно виднее.
      Опустим Wolfram language или тот же R, которые ты, очевидно, посчитаешь хуйней для задротов, приведу тебе пример из моей практики веб-макаки:
      В reactjs если надо создать много (относительно) одинаковых элементов, нужно каждому присвоить уникальный key, и если элементы чисто визуальные(например, затычки), то присвоить каждому компоненту элемент натурального ряда чисел - первое, что приходит в голову.
      К слову, костыльный вариант ES6 отлично с этим справляется, так как позволяет отрендерить элементы "не отходя от кассы":
      render(){
      return (<>
        {Array.from({length:N}, (_,i) =>
          (<p key={i+1}>govno</p>))}
      </>)
      }
      Ответить
      • Не, такая простая хуйня и в питоне делается в момент: range(x)
        Ответить
  • Кстати, перл. ДРЕВНИЙ перл. Даже в нём это легко
    my @range = map { 10 * $_ } 1..20;
    print join ", ", @range;
    Ответить
    • #include <stdio.h>
      
      int main()
      {
          for (int i = 3; i < 100; i += 16) {
              printf("%d, ", i);
          }
          puts("\b\b  ");
      
          return 0;
      }


      А «Ideone» не поддерживает «\b». Ну и говно!
      Ответить
          • На матричном принтере "A\bA" выведет жирную букву «A», потому что второй проход не совсем точно совпадает с первым. А "I\bХУЙ" выведет «ЖУЙ». Можно вообще новые буквы составлять таким приёмом.
            Ответить
              • А ведь таким приёмом можно русифицировать принтер, не загружая в него новые шрифты и не переходя в графический режим. А ещё так можно печатать на АЦПУ, у которых не иголочки, как у матричных принтеров, а молоточки с готовыми буквами (ромашки, барабаны), как у пишущих машинок.

                Кроссплатформенность!
                Ответить
    • <# 0 50 do bl hold [char] , hold i s>d #s -5 +loop #> 2 chars - type
      В S" Forth" можно использовать циклы внутри форматирования. Именно поэтому я за S" Forth".
      Ответить
      • Ну это всё-таки не "внутри форматирования". Это ближе к крестовому std::stringstream.
        Ответить
        • Только задом наперёд, и ещё нужно помнить что никаких распределений памяти внутри <# #> а то распидорасит строку.
          Ответить
          • В форте всё задом-наперёд. Так что консистентненько.
            Ответить
  • Именно поэтому я за «C++17».
    #include <iostream>
    
    template<typename T>
    struct range {
    public:
        struct iterator {
        public:
            ~iterator() = default;
    
            T operator*()
            {
                return cur;
            }
    
            bool operator==(const iterator & other)
            {
                return cur == other.cur;
            }
    
            bool operator!=(const iterator & other)
            {
                return !operator==(other);
            }
    
            iterator & operator++()
            {
                cur += step;
                if (cur > stop) {
                    cur = stop;
                }
                return *this;
            }
    
            iterator & operator++(int)
            {
                return operator++();
            }
    
            friend struct range;
        private:
            iterator(T cur, T stop, T step) :
                cur(cur),
                stop(stop),
                step(step)
            {}
            
            T cur = T{};
            T stop = T{};
            T step = T{};
        };
    
        range(T start, T stop, T step) :
            start(start),
            stop(stop),
            step(step)
        {}
        ~range() = default;
    
        iterator begin()
        {
            return iterator(start, stop, step);
        }
    
        iterator end()
        {
            return iterator(stop, stop, step);
        }
    
        T start = T{};
        T stop = T{};
        T step = T{};
    };
    
    int main()
    {
        for (int x : range(3, 100, 16)) {
            std::cout << (x == 3 ? "" : ", ") << x;
        }
        std::cout << std::endl;
    
        return 0;
    }

    https://wandbox.org/permlink/5jKwmvNFmQxCs0De
    Ответить
    • Хм, в "APL" йота работает по-другому:
      ⍳ 2 3 4
      
      ┌─────┬─────┬─────┬─────┐
      │1 1 1│1 1 2│1 1 3│1 1 4│
      ├─────┼─────┼─────┼─────┤
      │1 2 1│1 2 2│1 2 3│1 2 4│
      ├─────┼─────┼─────┼─────┤
      │1 3 1│1 3 2│1 3 3│1 3 4│
      └─────┴─────┴─────┴─────┘
      ┌─────┬─────┬─────┬─────┐
      │2 1 1│2 1 2│2 1 3│2 1 4│
      ├─────┼─────┼─────┼─────┤
      │2 2 1│2 2 2│2 2 3│2 2 4│
      ├─────┼─────┼─────┼─────┤
      │2 3 1│2 3 2│2 3 3│2 3 4│
      └─────┴─────┴─────┴─────┘
      Надо так:
      2 3 4 ⍴ ⍳ 2 × 3 × 4
      
       1  2  3  4
       5  6  7  8
       9 10 11 12
                 
      13 14 15 16
      17 18 19 20
      21 22 23 24
      Ответить
    • Что за питушарский заумный язык?

      То ли дело Haskell:
      main = print [111, 222 .. 999]
      Ответить
  • все это бред. Давайте лучше так. Напишем кусок кода на любимом вами языке который нельзя написать на другом языке программирования. И тогда вы все поймете - что это все "тлен"
    Ответить
    • Кусок кода на "верилоге" подойдет?

      З.Ы. Ну хотя ты его на "vhdl" перепишешь. Так что и правда тлен.
      Ответить
      • любой язык (аболютно) упрощается до уровня if/then ... Даже гребаный prolog и lisp это все реализуется на if/then
        Ответить
          • > jz
            if + goto же.

            А вот какой-нибудь mov cr3, page_table уже хер перепишешь.
            Ответить
            • Почему хер?
              Ты просто пишешь в регистр указатель на таблицу странц в памяти, какая разница на каком язвке?
              Ответить
              • Вероятно, проблема в том, что во многих языках без асмовставки или без инъекции кода не обойтись, ибо нет средств для доступа к отладочным регистрам.
                Ответить
                • Это не особенность языка, но его библиотеки и среды выполнения
                  Ответить
                  • То есть если я для конкретного языка напишу библиотеку в нативных кодах, которая может в произвольный регистр записывать произвольное значение, то задача будет решена?
                    Ответить
                    • Вероятно да

                      В борланд си например был API доступа к регнистрам
                      cr3 там конечно не было, но всякие AX были
                      Ответить
        • always @(posedge clk) begin
              a <= b;
              c <= d;
          end
          Это операторы параллельного присваивания. Они выполняются одновременно по фронту сигнала clk. Удачной реализации на обычном языке 😉

          З.Ы. Само собой, для верилога и вхдл есть симуляторы которые работают на последовательной машине через эти ваши if/then. Но они пригодны только для отладки и юнит-тестов.
          Ответить
          • Встроенные средства для поролонизации даже в "Algol-68" есть. Или я чего-то недопоняу?
            Ответить
            • Твой последовательный проц всё равно не выполнит эти 2 оператора одновременно. Как не крути.
              Ответить
                • Ну вот написал я процессор на верилоге. У него там тысячи этих параллельных присваиваний каждый такт крутятся.

                  Ты можешь симулировать всё это даже на одном ядре. Но такты растянутся во времени и, скорее всего, нормально взаимодействовать с внешним миром эта симуляция уже не сможет. Резиновая женщина, в общем.
                  Ответить
                  • Понятно.

                    Давай, чтобы не оскорблять ничьи религиозные чувства, будем считать "Verilog" не языком программирования, а языком для описания схем.
                    Ответить
                    • З.Ы. Ну, с другой стороны, если ты успел поправить все выходы и уложиться в тайминги до следующего переключения clk, то никто ничего не заметит. В синхронной схеме в общем-то всем похуй на параллельность. Т.е. таки можно описать поведение схемы на обычном языке. И это даже будет работать если твой проц намного быстрее симулируемой схемы.

                      И раз уж у нас есть машина тьюринга с бесконечной памятью, то пусть она будет ещё и очень быстрой.
                      Ответить
          • В обработчик прерывания пишем инструкции VLIW («Итаниум» позволял выполнить параллельно три совершенно разные инструкции).
            Ответить
            • Джва i/o порта одновременно эти ваши vliw прочитают за один такт? Что-то я сомневаюсь.

              З.Ы. Прочитают джва - один хер не прочитают 200.
              Ответить
              • Кстати, как на x86 работают инструкции IN/OUT, когда аргументом является не байт, а слово (два, четыре, восемь байтов)?

                P.S. Я понял, чем плохи мультибайтовые инструкции IN/OUT. Можно отправлять данные только в смежные порты, а не в произвольные.
                Ответить
                • Это не смежные порты... Это один большой. И кусками его обычно писать нельзя. Да и джва смежных байтовых порта скорее всего охуеют от записи слова сразу в оба.
                  Ответить
                  • Так а что будет физически-то, если я OUT QWORD туда?
                    Положим, у меня древнепроц и шина 16 бит. Будет последовительно писнуто 2 байта и еще 2 байта итд?
                    Ответить
        • Можно упрощать не только до императивных if/then, есть ещё такая хрень как правила переписывания, ещё можно упрощать до операций над множествами, до кобенаторной логики, до клеточных автоматов и хз ещё чего можно придумать. Короч, до чего угодно "тюринг-полного". Просто if/then в железе проще реализуется.

          ЗЫ. Мне всегда CA нравились. Интересно, есть ли какие-нибудь каптуперы на их основе?
          Ответить
              • А они в железе легко реализуются. Тот же life на циклоняшке всего 4 ячейки на клетку занимал.
                Ответить
                • Я так думаю, это говно обладает высокой степенью поролонизации и ограничений по количеству клеток нет, потому что нет адресов. Только вот кажется что 2 состояния это слишком примитивно, слишком много пердолинга с таким программированием, надо бы иметь несколько состояний, может даже раздельно иметь состояние и данные.
                  Ответить
    • Квайны - кандидаты в такие программы.
      Хотя, даже если писать на HQ9+, придёт человек со знанием HQ9++ и напишет такой же квайн на другом языке.
      Хотя, тут как с самым большим числом: всегда можно придумать свой язык, который делает то же самое.
      Ответить
  • Pawn:
    // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    new a[10] = [0, 1, ...]
    // 3, 8, 13, 18, 23, 28, 33, 38, 43, 48
    new b[10] = [3, 8, ...]
    Ответить
    • Это шарп? Тогда селект не тот. Надо i => i *4 в аргумент
      Ответить
  • "use strict";
    const wu = require("wu");
    
    console.log(wu(wu.count(1)).take(20).toArray());


    создал
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8