- 1
IT Оффтоп #78
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
IT Оффтоп #78
#49: https://govnokod.ru/26750 https://govnokod.xyz/_26750
#49: https://govnokod.ru/26776 https://govnokod.xyz/_26776
#50: https://govnokod.ru/26804 https://govnokod.xyz/_26804
#51: https://govnokod.ru/26809 https://govnokod.xyz/_26809
#52: https://govnokod.ru/26817 https://govnokod.xyz/_26817
#53: https://govnokod.ru/26833 https://govnokod.xyz/_26833
#54: https://govnokod.ru/26840 https://govnokod.xyz/_26840
#55: https://govnokod.ru/26844 https://govnokod.xyz/_26844
#56: https://govnokod.ru/26862 https://govnokod.xyz/_26862
#57: https://govnokod.ru/26890 https://govnokod.xyz/_26890
#58: https://govnokod.ru/26916 https://govnokod.xyz/_26916
#59: https://govnokod.ru/26934 https://govnokod.xyz/_26934
#60: https://govnokod.ru/26949 https://govnokod.xyz/_26949
#61: https://govnokod.ru/26980 https://govnokod.xyz/_26980
#62: https://govnokod.ru/26999 https://govnokod.xyz/_26999
#63: https://govnokod.ru/27004 https://govnokod.xyz/_27004
#64: https://govnokod.ru/27020 https://govnokod.xyz/_27020
#65: https://govnokod.ru/27027 https://govnokod.xyz/_27027
#66: https://govnokod.ru/27040 https://govnokod.xyz/_27040
#67: https://govnokod.ru/27049 https://govnokod.xyz/_27049
#68: https://govnokod.ru/27061 https://govnokod.xyz/_27061
#69: https://govnokod.ru/27071 https://govnokod.xyz/_27071
#70: https://govnokod.ru/27097 https://govnokod.xyz/_27097
#71: https://govnokod.ru/27115 https://govnokod.xyz/_27115
#72: https://govnokod.ru/27120 https://govnokod.xyz/_27120
#73: https://govnokod.ru/27136 https://govnokod.xyz/_27136
#74: https://govnokod.ru/27160 https://govnokod.xyz/_27160
#75: https://govnokod.ru/27166 https://govnokod.xyz/_27166
#76: https://govnokod.ru/27168 https://govnokod.xyz/_27168
#77: https://govnokod.ru/27186 https://govnokod.xyz/_27186
0
format PE64 GUI 5.0
include 'win64a.inc'
entry $
xor rdi,rdi
push rdi
push rdi
push rdi;$400000
push rdi
push rdi
mov rax,CW_USEDEFAULT
push rax
push rax
push rax
push rax
push rdi
push rdi
push rdi
push rdi
mov r9,WS_VISIBLE+WS_OVERLAPPEDWINDOW
mov r8,_title
mov rdx,_class
mov rcx,rdi
call [CreateWindowEx]
mov r8,WindowProc
mov rdx,-4
mov rcx,rax
call [SetWindowLongPtrA]
mov qword[_title],rax
pop rdi
mov rsi,rsp
xor rbx,rbx
mov bl,40
@@:sub rsp,rbx
xor r9,r9
xor r8,r8
xor rdx,rdx
mov rcx,rsi
call [GetMessage]
mov rcx,rsi
call [DispatchMessage]
add rsp,rbx
jmp @b
WindowProc:
push r9
cmp rdx,WM_CLOSE
je app_close
defwndproc:
push rdi
push rdi
push rdi
push rdi
mov r9,r8
mov r8,rdx
mov rdx,rcx
mov rcx,qword[_title]
call [CallWindowProc]
pop rdi
pop rdi
pop rdi
pop rdi
pop rdi
ret
app_close:
call [exit]
_title db '1KBytex64',0
_class db '#32770',0
data import
library\
user32,'USER32.DLL',\
msvcrt,'msvcrt.dll'
include 'api\user32.inc'
import msvcrt,\
exit,'_exit'
end data
Ничего интересного, просто извращённый 1KBytex64
−4
format pe console
include 'win32ax.inc'
macro call1 f,p1{
mov ebx,p1
call f}
macro call2 f,p1,p2{
mov ecx,p2
call1 f,p1}
macro call3 f,p1,p2,p3{
mov edx,p3
call2 f,p1,p2}
.data
lead_time dd ?
handle_input dd ?
handle_output dd ?
byte_read_write dd ?
.code
string db 'govnokod.ru ',13,10,0
array_procs dd __strlen,_strlen,strlen,0
putdword:;ebx-handle,ecx-byte
mov eax,esp
mov esi,eax
sub esp,16
xchg eax,ecx
mov edi,10
@@:xor edx,edx
div edi
add dl,'0'
dec ecx
mov [ecx],dl
test eax,eax
jnz @b
sub esi,ecx
mov edx,esi
invoke WriteFile,ebx,ecx,edx,byte_read_write,0
add esp,16
ret
align 4
strlen:;ebx-array of char
mov eax,12
ret
align 4
_strlen:;ebx-array of char
clc
xor ecx,ecx
dec ecx
mov edi,ebx
xor al,al
repne scasb
not ecx
dec ecx
mov eax,ecx
ret
align 4
__strlen:;ebx-array of char
xor eax,eax
dec eax
@@:inc eax
cmp byte[ebx+eax],0
jne @b
ret
start:
invoke GetStdHandle,STD_INPUT_HANDLE
mov [handle_input],eax
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov [handle_output],eax
mov ebp,array_procs
next_step:
call [GetTickCount]
mov [lead_time],eax
xor ecx,
@@:push ecx
mov ebx,string
call dword[ebp]
pop ecx
loop @b
push eax
call [GetTickCount]
sub eax,[lead_time]
mov ecx,1000
xor edx,edx
div ecx
push edx
call2 putdword,[handle_output],eax
invoke WriteFile,ebx,string+8,1,byte_read_write,0
pop ecx
call2 putdword,[handle_output],ecx
invoke WriteFile,ebx,string+11,1,byte_read_write,0
pop ecx
call2 putdword,[handle_output],ecx
invoke WriteFile,[handle_output],string+12,2,byte_read_write,0
add ebp,4
cmp dword[ebp],0
jne next_step
call [GetTickCount]
mov [lead_time],eax
invoke SetConsoleMode,[handle_input],0
invoke ReadFile,[handle_input],byte_read_write,1,byte_read_write,0
invoke ExitProcess,0
.end start
Поговнокодим однако.
Зачем в процессоре занимают место команды типа repne scasb и прочее, если простые аналоги быстрее компактнее и проще встраивать в алгоритм без отдельной подпрограммы да и регистров в разы меньше требуется. Пустая подпрограмма для понимания сколько времени занимает лишний код. Есть предположение что раньше на заре развития они работали шустрее, но это только предположение.
−1
includelib C:\Irvine\User32.Lib
includelib C:\Irvine\Kernel32.Lib
includelib D:\masm32\lib\Irvine32.lib
include \masm32\include\Irvine32.inc
.data
data_1 dword 45
data_2 dword 29
msg byte ?
.code
main PROC
xor ebx, ebx
xor eax, eax
xor edx, edx
xor esi, esi
mov cl ,31
mov eax, data_1
mov esi , data_2
lm:
shl esi, 1
jnc one
cmp msg, 1
je two
shl eax, cl
mov msg, 1
mov ebx, data_1
jmp one
two:
shl ebx, cl
mov msg, 0
add eax, ebx
add edx , eax
mov eax, data_1
one:
loop lm
mov eax , edx
call WriteInt
Call CrLf
exit
main ENDP
END main
Hey, Mr. Tambourine Man, play a song for me
I'm not sleepy and there is no place I'm going to
Hey, Mr. Tambourine Man, play a song for me
In the jingle jangle morning I'll come following you
Though I know that evening's empire has returned into sand
Vanished from my hand
Left me blindly here to stand, but still not sleeping
My weariness amazes me, I'm branded on my feet
I have no one to meet
And the ancient empty street's too dead for dreaming
Hey, Mr. Tambourine Man, play a song for me
I'm not sleepy and there is no place I'm going to
Hey, Mr. Tambourine Man, play a song for me
In the jingle jangle morning I'll come following you
Take me on a trip upon your magic swirling ship
My senses have been stripped
My hands can't feel to grip
My toes too numb to step
Wait only for my boot heels to be wandering
I'm ready to go anywhere, I'm ready for to fade
Into my own parade
Cast your dancing spell my way, I promise to go under it
Hey, Mr. Tambourine Man, play a song for me
I'm not sleepy and there is no place I'm going to
Hey, Mr. Tambourine Man, play a song for me
In the jingle jangle morning I'll come following you
−2
procedure ProgramRestart(Sender: TObject);
begin
Application.Terminate;
ShellExecute(0,'open',Application.ExeName,'','',SW_NORMAL); // ))
end;
Неделю когда-то пытался понять почему этот код не работает: "Я же программу вырубил? - вырубил... Я же ее запускаю? - запускаю... А че она не запускается?)))..."
0
'x'.repeat(a).concat('x'.repeat(b)).length
Сложение чисел a и b без использования операторов + и -
0
# ------------------- fUnicodeToUTF8----------------------
:global fUnicodeToUTF8
:if (!any $fUnicodeToUTF8) do={ :global fUnicodeToUTF8 do={
:global fByteToEscapeChar
# :local Ubytes [:tonum $1]
:local Nbyte
:local EscapeStr ""
:if ($1 < 0x80) do={
:set EscapeStr [$fByteToEscapeChar $1]
} else={
:if ($1 < 0x800) do={
:set Nbyte 2
} else={
:if ($1 < 0x10000) do={
:set Nbyte 3
} else={
:if ($1 < 0x20000) do={
:set Nbyte 4
} else={
:if ($1 < 0x4000000) do={
:set Nbyte 5
} else={
:if ($1 < 0x80000000) do={
:set Nbyte 6
}
}
}
}
}
:for i from=2 to=$Nbyte do={
:set EscapeStr ([$fByteToEscapeChar ($1 & 0x3F | 0x80)] . $EscapeStr)
:set $1 ($1 >> 6)
}
:set EscapeStr ([$fByteToEscapeChar (((0xFF00 >> $Nbyte) & 0xFF) | $1)] . $EscapeStr)
}
:return $EscapeStr
}}
угадай язык
0
if (condition)
{
return result;
}
for (let i = 0; i < 5; i++)
{
console.log(i)
}
Зачастую у многих программистов, который пишут на джаваскрипте, наблюдаю следующую картину - вероятно, унаследованную из какого-нибудь си шарпа.
Можно ли назвать это говнокодом, в рамках JS?
0
#include <iostream>
#include <vector>
template <typename T>
struct Vec {
T x, y;
Vec& operator /=(const T& d) {
x /= d;
y /= d;
return *this;
}
};
Найдите баг в коде.
Посмотрел этот видос: https://www.youtube.com/watch?v=4M1MlW0sP0Q
0
// https://www.linux.org.ru/forum/development/16099510/
// c++ шаблон zip-like итератора?
// В python есть крайне полезные функции zip, enumerate, range. Мне нужно что-то подобное для cpp/cuda (c++17).
// Если c range и enumerate более менее понятно, то как реализовать zip не соображу. Семантически это должно быть variadic template
template<typename t, typename... ts>
class zip : zip<ts...>{
zip(t arg, ts... args);
struct iterator;
begin() -> iterator;
end() -> iterator;
};
// Где итератор возвращает кортеж ссылок на элементы что с контейнерами можно было работать как:
for(auto [x,y,z] : zip(xs,ys,zs))
// Рекурсивное наследование должно быть ограничено тривиальным случаем одного аргумента.
//Но, кажется, я думаю не в правильную сторону, в частности, не соображу как рекурсивно вывести тип возвращаемых итератором кортежей:
using ret_type = tuple<decltype(begin(declval<t>())), decltype(???)>
Блять, как всё сложно. Какие-то рекурсивные выводы типов возвращаемых итераторов кортежей блядь.
Вот если б вместо ущербного триждыблядского типодрочерского шаблоноговна сделали что-то помощнее...