if (mode == 0)
{
for (int j = 0; j < ly; j++)
{
for (int i = 0; i < lx; i++)
{
index = i + lx * j;
if (map[index] != 1)
{
for (int n = 0; n < 9; n++)
{
ax = i + (int)ex[n];
ay = j + (int)ey[n];
bx = ((ax % lx) + lx) % lx;
by = ((ay % ly) + ly) % ly;
output[n + 9 * (bx + lx * by)] = fout[n + 9 * index];
}
}
}
}
}
else if (mode == 1)
{
for (int j = 0; j < ly; j++)
{
for (int i = 0; i < lx; i++)
{
index = i + lx * j;
if (map[index] == 1)
{
for (int n = 0; n < 9; n++)
{
ax = i + (int)ex[n];
ay = j + (int)ey[n];
bx = ((ax % lx) + lx) % lx;
by = ((ay % ly) + ly) % ly;
output[n + 9 * (bx + lx * by)] = fout[n + 9 * index];
}
}
}
}
}
map[index] 가 1이냐? 1이 아니냐? 에 따라 다른건데 일단은 mode 파라메터를 만들고 0, 1 값에 따라 바뀌는걸로 했는데
좀 더 괜찮은 방법이 있읍니까
}}}}}}... 공포...
함수 분리를 해라
분리하는게 나음?
근데 보니까 내부 내용은 똑같은데 논리합 논리곱 이용하면 하나로 합칠수는 있지 않을까
이건 처음부터 다시 짜야함 안그럼 노답
지렷다...
걍 분리함
음 뭐에 쓰는건지 모르겠지만 모드 0, 1로 나누지 말고 If(map 어쩌고가 분기문으로 나누면 되는거 아닌가
공책에 그려가면서 다시짜셈 그리고 for문으로 1부터 9까지 채워넣는 짓은 하지말고 std::fill이나 std::iota 이용
함수 분리는 이미 나왔군...
??? 뭘 채워 넣지 말라는거지;;
map[] 배열의 값에 따라 계산해야되는게 달라서 그럼...
근데 저거 일차원 배열을 이차원 배열처럼 쓸라고 한거?
ㅇㅇ 쿠다 적용할 때 1차원 배열로 넘기는게 편해서 그냥 저렇게 쓰고 있음
음... 모르겠다 머 알아서 하겠징
bx = ((ax % lx) + lx) % lx; 이건 따로 의미가 있음? ax % lx이랑 차이 없어 보이는데
c#이 모듈러 계산할때 음수를 리턴할때도 있어서...
bx = ((ax % lx) + lx) % lx;는 진짜 ax % lx이네
아 c#이셨구나
비전공자라 ㅜㅜ 편한 언어 찾다보니 c#을;
양수만 필요하면 절대값으로 바꾸는 메크로나 함수 쓰고 abs던가
그리고 이중 반복문은 하나로 바꿔서 i % lx으로 인덱스값 뽑아내
근데 내가 말한 방식으로 하면 코드 싹다 고쳐야하네
그러면 속도상의 장점이 있습니까?
-1을 모듈러 계산하면 lx-1을 받아야되는 로직이라 일부러 저렇게 함
이중for 는 고치는게 보기도 편할듯싶습니당
속도상의 장점을 생각하시면 새로 짜셔야됨요
큰 차이는 없슴다 그냥 나중에 봐도 이해하기 편하라고
헉?
컴파일러가 매우 똑똑해서 사람이 코드를 한계까지 쥐어짜는 시간에 비해 읽기 편하고 적당히 빠른게 좋다고 봄니다
내가 말을 너무 이상하게 썼네
이해함 ㅋㅋㅋ 걍 고치기쉽고 만들기 쉽게 만들면 장땡이라고
안겹치는부분 if (map[index] != 1) 여기밖에없는거 아님? 저 로직만 함수로 분리하면 되잖아 ? 모드값 주고 t/f 리턴하게
헉! 외칠 천재인듯