1. JavaScript / Говнокод #26475

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    var ER={}, x=new TextDecoder('KOI8-R').decode(Uint8Array.from( Array.apply(0,new Uint8Array(64).map( (_,b)=>b&1 ? 128+0x61+b/2 : 65+b/2 ))))
    for (var i=0;i<64;i+=2){
       if (i<52)
       ER[x[ i ]] = x[i+1], ER[ x[i].toLowerCase() ] = x[i+1].toLowerCase()
       ER[x[i+1]] = x[ i ], ER[x[i+1].toLowerCase()] = x[ i ].toLowerCase();
    }
    text=`<Налог>
        <Наименование>НДС</Наименование>
        <УчтеноВСумме>false</УчтеноВСумме>
    </Налог>`
    text.replace(/./g,(char,offset,text) =>  ER[char] || char);

    Из юзерскрипта для транслитерации в обоих направлениях.

    Запостил: 3.14159265, 07 Марта 2020

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

    • Забавно что код генерилки пар, в итоге занял в 2 раза больше места чем сгенерённая им строка:
      x="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З[Ш\\Э]Щ^Ч_Ъ`\u0000"
      x=new TextDecoder('KOI8-R').decode(Uint8Array.from( Array.apply(0,new Uint8Array(64).map( (_,b)=>b&1 ? 128+0x61+b/2 : 65+b/2 ))))
      Ответить
      • Упростил в 4 строки:
        var ER={},x="AАBБCЦDДEЕFФGГHХIИYЙJЖKКLЛMМNНOОPПQЯRРSСTТUУVЖWВXЬZЗŞШÉЭŞЩÇЧÜЮĪЫ";
        x+=x.toLowerCase();
        for (var i=0;i<128;i+=2) ER[x[i]] = x[i+1], ER[x[i+1]] = x[i];
        text.replace(/./g,(char) =>  ER[char] || char);

        Ответить
        • Procedura ObrabotkaZapolneniq(DannīeZapolneniq, StandartnaqObrabotka)
          	
          	Organizaciq1 = Sprawoçniki.Organizacii.PustaqSsīlka();
          	Organizaciq1 = Sprawoçniki.Organizacii.NaytiPoNaimenowaniü(\"HHHHH Andrey Aleksandrowiç IP\");
          	Organizaciq = Organizaciq1;
          	OrganizaciqŞapka = Organizaciq1;
          	Sklad = Sprawoçniki.Skladī.NaytiPoNaimenowaniü(\"Serwis centr\");
          	Kontragent = Sprawoçniki.Partnerī.NaytiPoNaimenowaniü(\"Rozniçnīy pokupatelx\");
          	WidOperacii = Pereçisleniq.WidRemonta.PlatnīyRemont;
          	
          KonecProcedurī;
          Ответить
          • Ешче Польска не сгинела?
            Ответить
            • >Şapka
              Вот это по-турецки «головной убор». Инфа сотка.
              Ответить
              • https://en.wiktionary.org/wiki/şapka

                From Ottoman Turkish شاپقه‎ (şapka), borrowed from Russian ша́пка (šápka).

                Кстати, русское слово произошло из французского.

                Ultimately from the Old French chape, since the 14th century.

                А уже из русского кто только не заимствовал.

                Descendants:
                → Kurdish:
                Central Kurdish: شەپکە‎ (şepke), شەبکە‎ (şebke)
                → Persian: شابگا‎ (šâbgâ)
                → Ottoman Turkish: شاپقه‎ (şapka)
                Turkish: şapka
                → Armenian: շափխա (šapʿxa)
                → Uyghur: شەپكە‎ (shepke)/шәпкә (shepke)
                Ответить
                • Я просто когда-то будучи в Турции кепку забыл.
                  Прихожу и долго по-английски пытаюсь объяснить что мне надо.
                  И hat, и cap.
                  Ответить
                • хттпс://ен.виктионарй.орг/вики/шапка

                  Фром Оттоман Туркисх شاپقه‎ (шапка), борровед фром Руссиан şápka (šáпка).

                  Kstati, russkoe slowo proizoşlo iz francuzskogo.

                  Ултимателй фром тхе Олд Френцх цхапе, синце тхе 14тх центурй.

                  A uje iz russkogo kto tolxko ne zaimstwowal.

                  Десцендантс:
                  → Курдисх:
                  Централ Курдисх: شەپکە‎ (шепке), شەبکە‎ (шебке)
                  → Персиан: شابگا‎ (šâбгâ)
                  → Оттоман Туркисх: شاپقه‎ (шапка)
                  Туркисх: шапка
                  → Армениан: շափխա (šапʿьа)
                  → Уйгхур: شەپكە‎ (схепке)/şәpkә (схепке)"
                  Ответить
            • показать все, что скрытоvanished
              Ответить
    • <KommerчeskaqInformaciq WersiqShemy=\"2.03\" DataFormirowaniq=\"2016-08-11\">
      	<PaketPredlovenij>
      		<Id>0ф6ацф08-0501-11е5-а1ед-000еа6ф880ф2#</Id>
      		\ufeff<Naimenowanie>Paket predlovenij</Naimenowanie>
      		<IdKataloga>0ф6ацф08-0501-11е5-а1ед-000еа6ф880ф2</IdKataloga>
      		<IdKlassifikatora>0ф6ацф08-0501-11е5-а1ед-000еа6ф880ф2</IdKlassifikatora>
      		<TipyCen>
      			<TipCeny>
      				<Id>0ф6ацф0е-0501-11е5-а1ед-000еа6ф880ф2</Id>
      				<Naimenowanie>Розн</Naimenowanie>
      				<Walюta>УАХ</Walюta>
      				<Nalog>
      					<Naimenowanie>NDS</Naimenowanie>
      					<UчtenoWSumme>фалсе</UчtenoWSumme>
      				</Nalog>
      			</TipCeny>
      			<TipCeny>
      				<Id>0ф6ацф0д-0501-11е5-а1ед-000еа6ф880ф2</Id>
      				<Naimenowanie>Закуп</Naimenowanie>
      				<Walюta>УАХ</Walюta>
      				<Nalo\ufeffg>
      					<Naimenowanie>NDS</Naimenowanie>
      					<UчtenoWSumme>фалсе</UчtenoWSumme>
      				</Nalog\ufeff>
      			</TipCeny>
      		</TipyCen>
      		<Predloveniq>
      			<Predlovenie>
      				<Id>1еб6ад86-а729-11е2-бе44-000а5е5фа127</Id>
      				<Artikul>0084</Artikul>
      				<Artikull>00000002839</Artikull>
      				<Naimenowanie>ЦОЛОРПЛАСТ   Awtobus \"Busik №1\"</Naimenowanie>
      				<BazowaqEdinica Kod=\"2009\" NaimenowaniePolnoe=\"Шtuka\" MevdunarodnoeSokraщenie=\"\">шt</BazowaqEdinica>
      				<Ceny>
      					<Cena>
      						<Predstawlenie>61,88 УАХ za шt</Predstawlenie>
      						<IdTipaCeny>0ф6ацф0е-0501-11е5-а1ед-000еа6ф880ф2</IdTipaCeny>
      						<CenaZaEdinicu>61.88</CenaZaEdinicu>
      						<Walюta>УАХ</Walюta>
      						<Edinica>шt</Edinica>
      						<Koэfficient>1</Koэfficient>
      					</Cena>
      					<Cena>
      						<Predstawlenie>44,2 УАХ za шt</Predstawlenie>
      						<IdTipaCeny>0ф6ацф0д-0501-11е5-а1ед-000еа6ф880ф2</IdTipaCeny>
      						<CenaZaEdinicu>44.2</CenaZaEdinicu>
      						<Walюta>УАХ</Walюta>
      						<Edinica>шt</Edinica>
      						<Koэfficient>1</Koэfficient>
      					</Cena>
      				</Ceny>
      				<Koliчestwo>24</Koliчestwo>
      			</Predlovenie>		
      		<SodervitTolxkoIzmeneniq>фалсе</SodervitTolxkoIzmeneniq>
      	</PaketPredlovenij>
      </KommerчeskaqInformaciq>
      Ответить
    • WYBRATX RAZLI^NYE
      	WYRAZITX(Raboty.Ssylka KAK Dokument.ZakazNarqd) KAK SsylkaZN,
      	DC.Ssylka KAK DilerskijCentr
      IZ
      	Dokument.ZakazNarqd.Raboty KAK Raboty
      		LEWOE SOEDINENIE Sprawo^nik.ЦРМ_DilerskieCentry KAK DC
      		PO (LOVX)
      GDE
      	Raboty.Ssylka.DataZakrytiq >= &DataNa^ala
      	I Raboty.Ssylka.DataZakrytiq < &DataOkon^aniq
      	I DC.Ssylka.PometkaUdaleniq = LOVX
      ;
      
      ProizwedenaRabota = Istina;
      	
      Esli Zapra[iwatxTrudozatraty I Ne WypolnqetsqPerenaprawlenie Togda
      	ProizwedenaRabota = Istina;
      KonecEsli;
      Ответить
    • Какие вореции )))
      Ответить
    • То же решение https://govnokod.ru/26475#comment532156, но в 2 строчки.
      var R="AАBБCЦDДEЕFФGГHХIИYЙJЖKКLЛMМNНOОPПQЯRРSСTТUУVЖWВXЬZЗŞШÉЭŞЩÇЧÜЮĪЫaаbбcцdдeеfфgгhхiиyйjжkкlлmмnнoоpпqяrрsсtтuуvжwвxьzзşшéэşщçчüюīы";
      `pituz багор`.replace(/./g,(char) =>  R[R.indexOf(char) ^ 1] || char);
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Во-первых мой код сохраняет регистр текста, а не инвертирует его.
        Во-вторых, не херит спец. символы выше 0x7F.
        В-третьих, он работает в обе стороны, с ингриша на русский тоже создавая приятный шизоэффект.
        Ответить
      • >>> ''.join((chr(c & 0x7F) for c in 'А я за Питон.'.encode('KOI8-R')))
        'a Q ZA pITON.'


        Ну ладно, ладно, вложенные функциональные вызовы Питона сосут.
        Ответить
        • >>> ''.жоин((цхр(ц & 0ь7Ф) фор ц ин 'A q za Piton.'.енцоде('КОИ8-Р')))
          'а Я ЗА пИТОН.'

          Nu ladno, ladno, wlojennīe funkcionalxnīe wīzowī Pitona sosut.
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • Кажется, Гвидо где-то вовсю топил за генераторы и * comprehensions, а функциональщину объявил нинужной.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Справедливости ради, питухи без функционального бекграунда не поймут и
                petuhi.filter(petuh => petuh.name == 'syoma').map(petuh => petuh.iq)
                .
                А так-то, ИМХО, на самых простых операциях, вроде этой, *comprehensions выглядят более читабельными: «(что for где if когда)». А вот когда надо сделать несколько .map.filter.map.filter — там да, генераторы сосать начинают.

                А ещё вложенные *comprehensions — это пиздец:
                arr = [[1,2,3], [4,5,6], [7,8,9]]
                [x for y in arr for x in y]  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                • >на самых простых операциях, вроде этой, *comprehensions выглядят более читабельными: «(что for где if когда)»

                  Нет. Это самая гавняная фича питона.
                  Хотя код вроде компактнее и более похож на английский текст.
                  Ответить
                  • > Нет. Это самая гавняная фича питона.
                    Хм?
                    Ответить
                    • Меня comprehensions в ступор поначалу очень сильно ставили.
                      Мой парсер подвисал, когда натыкался на такие конструкты.
                      Ответить
                      • Ну хз, мне тоже пришлось поРТФМить сначала, а потом понял всю минималистичную прелесть таких коньструкций.
                        Ответить
                        • 1. Неконсистентно.
                          2. Спец. конструкт языка, для узкой задачи. То есть Синтаксический сахар.
                          3. Нарушает There's Only One Way
                          4. Нельзя написать своё или как-то переиначить. С фунциональщиной могу написать свой [1,2,x=>x+1]).forEachData() который при итерации, например, будет игнорить функции.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                          • 1. Разве? Оно вполне сочетается с обычным «for x in y» циклом.
                            2. Создание списков/генераторов/словарей по простейшим критериям — очень распространённая задача. Создание отдельной коньструкции для неё уместно.
                            3. TOOWTDI — эфемерная питушня, которую нарушает чуть ли не любая коньструкция в Питоне.
                            4. Потому что *comprehensions нужны для простых задач, сводящихся к простому arr.filter().map(). Ну и да, а почему не (x for x in arr if type(x) == int)?

                            А вот по поводу
                            > слишком много слов подряд без разделителей
                            пожалуй, соглашусь.
                            Ответить
                            • Пытхон
                              (petuh.iq for petuh in petuhi if petuh.name == 'syoma')
                              
                              ЙажаСцрипт №1
                              petuhi.filter(petuh=>petuh.name == 'syoma').map(petuh=>petuh.iq)
                              
                              ЙажаСцрипт №2
                              petuhi.koko(petuh=>(petuh.name == 'syoma') ? petuh.iq : SKIP);


                              Да сахар это, причём не оч. удачный. С ФП можно своё настрогать. Не намного длинее.
                              Ответить
                              • Ну да, сахар, а что такого? Стрелочные функции, кстати, тоже классический сахар (ладно, более удачный, чем *c).
                                petuhi.filter(function(petuh) { return petuh.name == 'syoma'; }).map(function(petuh) { return petuh.iq; });
                                Ответить
                                • >Стрелочные функции, тоже классический сахар
                                  100%

                                  >более удачный
                                  Притом намного. Поскольку функции в ФП повсеместны. Этот сахар заметно снижает синтаксическую переголову.

                                  C ними мне гораздо проще стало говнячить js-однострочники.
                                  https://govnokod.ru/26475#comment532191
                                  Ответить
                                • Вообще мысль была, что если я захочу расширить comprehensions всякими group by или count, то не смогу это сделать.
                                  Ответить
                                  • Ну да, *c — это, в сущности, частный случай ФП-цепочки — x.filter().map() (причём с порезанными лямбдами, за которые Гвидо надо выпороть). Расширять частный случай нинужно, нужно просто использовать общий инструмент (которого в Пистоне и нет, гы-гы-гы).
                                    Ответить
                                    • > с порезанными лямбдами, за которые Гвидо надо выпороть
                                      +1. То ли дело Mr Eich. У него один и тот же синтаксис успешно служил долгие годы как для лямбд, так и для обычных функций без СМС и регистрации как один способ сделать абстракцию.
                                      Ответить
                                      • У Mr. Eich ещё есть мозговзрывающая конструкция x = new Function();
                                        Ответить
                            • >а почему не (x for x in arr if type(x) == int)

                              Смысл в том, что если в языке-конструкторе когда какой-то родной конструкт не устраивает это можно починить. Сделав свой.

                              Взять негодный for~in в js. Написал свой $.each.
                              Или хранение данных вперемешку с кодом.
                              Написал свой forEach, который итерируется только по значениям не являющимся функциями.

                              Благодаря ФП можно настрогать себе аналогов любых императивных конструктов на любой вкус.

                              >(x for x in arr if type(x) == function)
                              А такое говно придётся везде копипастить.

                              Или пилить отдельный метод. Но тогда comprehension будут использованы всего один раз. В том методе.
                              Ответить
                              • Ещё раз повторяю, что я не противопоставляю *comprehensions функциональщине и не заявляю, что *c в принципе лучше ФП.

                                > если в языке-конструкторе когда какой-то родной конструкт не устраивает
                                Починить != сделать новый. Написание $.each никак не исправляет говёный for~in.

                                >>> Потому что *comprehensions нужны для простых задач, сводящихся к простому arr.filter().map().
                                Именно на таких задачах они выглядят просто и нативно («pythonic»).
                                Ответить
                                • > я не противопоставляю *comprehensions функциональщине
                                  Иначе это было бы глупо.
                                  Это же декларативные описания множеств из математики. Математический синтаксиальный сахарок. Такой питушне самое место в функциональном питухе.

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

                                  Я эту питушню использовал по большей части из-за параноидальности питона, когда хотел вывести массив через запятую.
                                  Божественный JS:
                                  console.log(xs.join(', '));

                                  Анскильный python:
                                  print(', '.join([str(x) for x in xs]))
                                  Ответить
                          • Ну и добавлю, что я ни в коем случае не говорю, что функциональщина нинужна. Наоборот, ящитаю, что отсутствие классическихх chain call'ов в Питоне — это очень большой проёб Гвидо.
                            Ответить
                            • > не говорю, что функциональщина нинужна
                              > отсутствие классическихх chain call'ов — проёб
                              А точно ли это функциональщина? Мне всегда казалось, что цепочкушня - признак ООП-питушни, и в реальном мире чаще занята ООПитухами, чем ФПитухами.

                              Цепочкушня легче соответствует парадигме порче this. Чтобы испортить свой аргумент, его надо передать по ссылке. В C++ это может быть объект чужого класса, автор которого сделал его const. А this - всегда свой и по умолчанию меняется.

                              Кстати, смотрите, какой анскилл в JS:
                              xs
                                .map (x => x+1) // OK, pure
                                .filter(x => x > 0) // OK, pure
                                .sort ((x,y) => (x%10) - (y%10)) // massiv popirdoliło
                              ;


                              P.S. Хорошо, xs не изменился сам, функциональная чистота осталась за счёт того, что попердолили временнушню. Но на месте временнушни мог бы быть и xs. Напьёшься - будешь!
                              Ответить
              • >(petuh.iq FOR petuh IN petuhi IF petuh.name == 'syoma')
                Чуть лучше. Но тоже хуйня
                Проблема в том что слишком много слов подряд без разделителей.
                Ответить
                • То ли дело «SQL» или «Кобол».
                  Ответить
                  • Там хотя бы консистентно.
                    А тут идут скобочки, точечки, двоеточия, запятые и тут хуяк скобка открылась, предложение из кучи текста и опять привычный код с разделителями.
                    Ответить
                • petuhi
                      .Where(petuh => petuh.name == "syoma")
                      .Select(petuh => petuh.iq);


                  или

                  from petuh in petuhi
                      where petuh.name == "syoma"
                      select petuh.iq;
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • Нужны менее многословные лямбды:
                    petuhi
                        .Sort(*1.iq - *2.iq)
                        .Where(*.name == "syoma")
                        .Select(*.iq)
                    Ответить
                    • В бусте есть что-то в духе _1 < _2 (эквивалент [](auto a, auto b) { return a < b; }). Но у этих "лямбд" ограничений дохрена и функции вызывать неудобно.
                      Ответить
                      • Да, я пока писал, вдохновлялся boost::lambdой. Однако, выбрал *1 и *, т.к. выглядит красивее, чем _1 и $1.

                        > В бусте
                        Видел, что ДОБРОЕ ИМЯ ДОБРАЯ СЛАВА ИМЯ ИМЯРЕК В ЧЕСТИ gost недавно писал какую-то лямбдушню с std::. Вероятно, эта питушня уже и в Стандарте.
                        Ответить
                        • > Вероятно, эта питушня уже и в Стандарте.
                          Не, это очень покоцанное говно, только для бинда.
                          int add(int a, int b) { return a + b; }
                          // ...
                          using namespace std::placeholders;
                          auto add42 = std::bind(add, 42, _1);
                          
                          std::cout << add42(5); // 47
                          Ответить
      • 'Koneçno rubi u wseh opqtx lopotnul'.енцоде('КОИ8-Р').бйтес.мап{|б|б & 0ь7Ф}.пацк('ц*')
        Ответить
    • Переведи на "PHP".
      Ответить
    • Пи, тебе идею для вореции подвезли, пи.
      http://govnokod.ru/26689#comment549551
      Ответить

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