function cal(y,m) {
let[t,r,d,w,l]=[v=>~~v,[],1,0,y%4],c=(t(23*m/9)+(m<3?y--:y-2)+5+t(y/4)-t(y/100)+t(y/400))%7;
for(;d<29+(62648012+16*!l>>m*2&3);++d,c=++c%7,w+=!c)(r[w]||(r[w]=[,,,,,,,]))[c]=d;return r
}
console.log(cal(2020,8));
[
[ , , , , , , 1 ],
[ 2, 3, 4, 5, 6, 7, 8 ],
[ 9, 10, 11, 12, 13, 14, 15 ],
[ 16, 17, 18, 19, 20, 21, 22 ],
[ 23, 24, 25, 26, 27, 28, 29 ],
[ 30, 31, , , , , ]
]
function cal(y,m) {
let[t,r,d,w,l]=[v=>~~v,[],1,0,y%4],c=(t(23*m/9)+(m<3?y--:y-2)+5+t(y/4)-t(y/100)+t(y/400))%7||7;
for(;d<29+(62648012+16*!l>>m*2&3);++d,c=++c%7||7,w+=!(c-1))(r[w]||(r[w]=[,,,,,,,]))[c-1]=d;return r
}
console.log(cal(2020,8));
[
[ , , , , , 1, 2 ],
[ 3, 4, 5, 6, 7, 8, 9 ],
[ 10, 11, 12, 13, 14, 15, 16 ],
[ 17, 18, 19, 20, 21, 22, 23 ],
[ 24, 25, 26, 27, 28, 29, 30 ],
[ 31, , , , , , ]
]
function cal(y,m) {
const t = v => ~~ v;
const l = y%4;
const r = [];
let c=(t(23*m/9)+(m<3?y--:y-2)+5+t(y/4)-t(y/100)+t(y/400))%7;
const e = 29+(62648012+16*!l>>m*2&3);
for(let d =1, w = 0; d < e; ++d){
if(!r[w]) {
r[w] = [,,,,,,,];
}
r[w][c]=d;
c = ++c%7;
w += !c;
}
return r;
}
То, что вы не используете математические операции, говорит только об одном - для вас это слишком сложно
function cal ( year, month ) {
const { trunc, pow } = Math;
const leap = year % 4;
const result = new Array ( );
let weekCounter = ( trunc ( 23 * month / 9 ) + ( month < 3 ? year -- : year - 2 ) + 5 + trunc ( year / 4 ) - trunc ( year / 100 ) + trunc ( year / 400 ) ) % 7;
const monthEnd = 29 + trunc ( ( 62648012 + pow ( 2, 2 * 2 ) * ! leap ) / pow ( 2, month * 2 ) ) % pow( 2, 2 );
for ( let day = 1, week = 0; day < monthEnd; ++ day ) {
if ( ! result [ week ] ) {
result [ week ] = new Array ( 7 );
}
result [ week ] [ weekCounter ] = day;
weekCounter = ++ weekCounter % 7;
week += ! weekCounter;
}
return result;
}
m >> n * 2
куда понятнее, чем Math.trunc ( m / Math.pow ( 2, n * 2 ) )
. Аналогично этому, если бы, например, я не знал таблицу умножения и категорически избегал таких операций как m = x * y
, реализуя циклом let res = 0; for(let i = 0; i < y; i ++) res = res + x
. Вы смеётесь, а такое я встречаю постоянно. Там тоже самое: простая формула в одну операцию с логарифмом заменена целой программой разными циклами. У кого-то вызывает сложности безопасный арктангенс Math.atan2()
[ссылку добавлю чуть позже]. Что тут сказать?! И среди программистов порой случаются гуманитарии. решение стало на 100% не читаемым.
Представьте, если бы математики вместо x и i использовали бы counter и incrementor
Видите ли, мой код написан с точки зрения ФП приблизительно идеально
Я честн попробовал оптимизировать код тремя инструментами: WebPack, Babel, Google Closure Compiler
Мой же код будет работать также быстро, как будто я его написал на чистом си.
Похоже, действительно, боженька не всех одарил математикой
>>
- это ПОБИТОВЫЙ СДВИГ ВПРАВО, каким хером это относится к математике? Никаким, это вообще не имеет ничего общего с математикой, так как в математике вообще нет понятия битов.Вечером опубликую сравнительные тесты производительности, параметры оптимизаций WebPack, Babel и GCC. Будет занятно детально проанализировать огромную разницу в производительности.
>>
- такая же математическая операция как +
, ~
, /
, %
, &
или |
или даже **
.2) почему new Array()? = []; - не?
[,,,,,,,]
а не new Array(7)
.console.log(cal(2020,8));
[
[ , , , , , , 1 ],
[ 2, 3, 4, 5, 6, 7, 8 ],
[ 9, 10, 11, 12, 13, 14, 15 ],
[ 16, 17, 18, 19, 20, 21, 22 ],
[ 23, 24, 25, 26, 27, 28, 29 ],
[ 30, 31, , , , , ]
]
Причем тут ФП?
Math.trunc
, Math.pow
- это и есть побочные эффекты. потратил 10 минут на разбор
for(B=i=y=u=b=i=5-5,x=10,I=[],l=[];B++<304;I[B-1]=B%x?B/x%x<2|B%x<2?7:B/x&4?0:l[i++]="ECDFBDCEAAAAAAAAIIIIIIIIMKLNJLKM@G@TSb~?A6J57IKJT576,+-48HLSUmgukgg OJNMLK IDHGFE".charCodeAt(y++)-64:7);function X(c,h,e,s){c^=8;for(var o,S,C,A,R,T,G,d=e&&X(c,0)>1e4,n,N=-1e8,O=20,K=78-h<<9;++O<99;)if((o=I[T=O])&&(G=o^c)<7){A=G--&2?8:4;C=o-9?l[61+G]:49;do if(!(R=I[T+=l[C]])&&!!G|A<3||(R+1^c)>9&&G|A>2){if(!(R-2&7))return K;n=G|(c?T>29:T<91)?o:6^c;S=(R&&l[R&7|32]*2-h-G)+(n-o?110:!G&&(A<2)+1);if(e>h||1<e&e==h&&S>2|d){I[T]=n;I[O]=0;S-=X(c,h+1,e,S-N);if(!(h||e-1|B-O|T-b|S<-1e4))return W(),c&&setTimeout("X(8,0,2),X(8,0,1)",75);I[O]=o;I[T]=R}if(S>N||!h&S==N&&Math.random()<.5)if(N=S,e>1)if(h?s-S<0:(B=O,b=T,0))break}while(!R&G>2||(T=O,(G||A>2|(c?O>78:O<41)&!R)&&++C*--A))}return-K+768<N|d&&N}function W(){i="<table>";for(u=18;u<99;document.body.innerHTML=i+=++u%x-9?"<th width=60 height=60 onclick='I[b="+u+"]>8?W():X(0,0,1)'style='font-size:50px'bgcolor=#"+(u-B?u*.9&1||9:"d")+"0f0e0>&#"+(I[u]?9808+l[67+I[u]]:160):u++&&"<tr>")B=b}W()
>> - такая же математическая операция как +, ~, /, %, & или | или даже **.
А до этого спрашивал почему [,,,,,,,] а не new Array(7).
Понимаешь, в этой функции кроме базового использования for нет алгоритма, есть только формула. И вообще, что может быть непонятно, если написать тот-же комментарий в коде?
Зачем это вообще поддерживать, если это и так работает?
Хочешь исправить - напиши по своему.
Прочитайте страницу википедии еще раз. И в частности про чистоту функции и побочные эффекты.
Использование Math.trunc, Math.pow - это и есть побочные эффекты.
А у вас реально проблемы с разбором чужого кода.
Интересно сколько бы ушло времени на разбор, например, вот такого. Поиграйте на этой страничке, и расслабьтесь, там нет отмены хода.
Аргументируй... покажи в реальной математике операцию побитового сдвига вправо. Жду ссылку.
Не собираюсь я на это тратить и секунды.
и вообще причем тут бизнес?
Интересно, а как вы ассемблерный код писать будете?
а у меня много денег, мне не важен бизнес.
А понимание ассемблерного кода необходимо хотя бы для реверс-инжениринга любого софта
2) Незнание правил игры в шахматы.
3) Незнание школьного курса дискретной математики.
4) Постановка своих фантазий выше того, чтобы прочитать статью в википедии.
А что в этой википедии вообще полезного? Туда ж не идут, туда посылают. Кроме того, любой маломальский задрот может написать в любой статье любой бред и прикрываться этим. Правда?
Прикрутите кнопку отмены последних трех ходов к тому алгоритму.
У меня на это потребовалось не больше 7 минут и я сократил код еще на 60 байт.
Но это в первую очередь будет полезным для вас. Мне не надо ничего доказывать. Докажите себе, что вы на это способны!
Поздравляю. Как это относится к теме? Задачи в программировании в 99% ставятся именно бизнесом, а не любителем пооптимизировать массивы в JS.
Нет, не любого, только софта, написанного на C/C++. И даже тот намного проще реверсить утилитами, генерирующими подобие реального C/C++ кода и читая именно его. А другие языки, в т.ч. и java, реверсятся обычной деобфускацией.
В школе не учат дискретную математику, к слову.
Впрочем, чего я ожидаю от человека, который еще три года назад не знал, что такое nginx и как им пользоваться. Сомневаюсь, что с тех пор ты побывал хоть на одном реальном коммерческом проекте. Только календари и шахматы пилил на JS.
Дак ты может процитируешь, или продолжишь трепаться?)
трепитесьпро rust, хотя не написали на нём никогда.
С/С++может только девочки из HR. На вашем уровне это как если бы вы употребляли, например, CSS/sqlite. Ся и плюсы решают разные задачи.
Что мне доказывать то? Сейчас работаю над крупным проектом, каждый месяц выкатываем по 5-6 фич и это командой всего в 12 девов, включая фронт. Есть и мидлы и синиоры. Если бы тут каждый разбирал подобный твоему говнокод каждый день, пытаясь чето поменять, то мы бы выкатывали не по 5-6 фич в месяц, а одну в пол года.
генерирующими подобие реального C/C++ кода?
А другие языки, в т.ч. и java, реверсятся обычной деобфускацией.
Какой бизнес? Что есть бизнес?
Да будет вам известно, компьютеры, контроллеры и прочие вычислительные станции умеют выполнять только байт-код, код самого низкого уровня. Ассемблер и байт-код транслируются друг-в-друга самым простым способом. По-сути, компьютер не умеет выполнять вообще ничего кроме байт-кода. И ему пополам на каком языке писалась программа.
Такие люди как вы - не учат. А нормальные ученики учат.
С чего вы это вообще взяли? Я начинал программировать на JS в 1997, это было еще до появления CSS. О чем вы говорите? В nginx есть и мой код лично, пусть всего несколько строк, но я писал тот патч больше 10 лет назад.
Вы так и не прочитали статьи по тем ссылкам на википедию.
У вас свои понятия "побочного эффекта" и "чистой функции".
От того вы фантазёр.
про rust, хотя не написали на нём никогда.
А так же вы не знаете ни ся, ни плюсы.
Это два разных языка программирования, у них абсолютно разные назначения. Разные как самосвал и автобус. Употреблять их в форме
Друг, а ради чего ты живешь на этом свете? Что тебе надо? К чему ты стремишься? К бизнесу? А нужен ли он тебе будет в 50 лет?
Где ты там работаешь?
Что ты разрабатываешь?
Если бы там каждый мог бы написать движок шахмат в 1кб яваскрипта, то вы бы там точно не были нужны...
Дайте ссылочку хоть на одну.
Тоже поделитесь ссылочкой. Деобфускация... Звучит как что-то для PHP.
Вы уверены, что это про Java?
Java хранится в скомпилированных файлах, но никак не в байт-коде, потому что для его выполнения нужна, блять, java.
Ага, и именно поэтому ты статику раздавал php? Если бы ты РЕАЛЬНО знал как использовать nginx, то тебе бы никогда даже в голову не пришло так делать, из чего я и сделал вывод, что с nginx'ом ты не был знаком. Даже если ты знал, что это, то не имел никакого представления о том, как его юзать в реальных проектах.
https://www.hex-rays.com/products/ida/
Ты б хоть не позорился..
https://github.com/java-deobfuscator/deobfuscator
1) https://ru.wikipedia.org/wiki/Java
2) https://ru.wikipedia.org/wiki/Java_Virtual_Machine
3) https://ru.wikipedia.org/wiki/JIT-%D0%BA%D0%BE%D0%...
4) https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D...
A Java class file is a file (with the .class filename extension) containing Java bytecode
Друг. Этот вопрос, я еще задавал лет 10 назад, еще до появления tostera как отдельного сайта. В те года вопросы на хабре были вперемешку со статьями. И кто тебе сказал что это я сделал решение статику отдавать php? Я то как раз в те года писал на плюсах и perl, а php чтобы ты понимал, особо и не знал, и сейчас не знаю. Он мне не был нужен никогда. Я просто решал проблему с резко увеличившейся посещалкой сайта.
Друг, идой я не пользовальзовался лет 15. И что сейчас она выдаёт С++ код?
А то, на что ты скинул ссылку - в заголовке большими буквами написано It didn't work.
Этот вопрос ты задал три-четыре года назад: Возможно ли оптимизировать отдачу web-сервером статики используя PHP?
Как будешь это разгребать, читая байт-код?
Друг, я не знаю как тебе объяснить, что выполняет программу реальный компьютер, а не виртуальная Java-машина. И этот реальный компьютер ничего про Java не знает.
Мне то как раз никакие дизассемблеры не нужны.
Мне хватает hex-режима в mcview/mcedit.