요청한 “100 SET 후” 노란색 배열 결과는 이거예요 👇 [ 1 444 44 4 222 333 22 555 111 55 5 33 2 3 11 ] (설명 요약: 한 SET은 행 우측 순환 이동(오렌지: 1,4,3칸) → 열 아래 순환 이동(하늘: 2,1,2,2,1칸) 순서로 진행되며, 이를 100번 반복한 결과입니다.) 원하면, 범위만 지정하면 N회를 한 번에 계산해서 시트에 뿌려주는 짧은 VBA/365 수식도 바로 만들어 드릴게요. ChatGPT 결과입니다.. 엑셀로 한번 해결해봐야겠네요.ㅎㅎ
2025.08.08
좋아요
더블유에이Lv.30
100 SET 후 노란색 배열 출력 # Let's compute the mapping as described. k = [1,4,3] # row shifts right d = [2,1,2,2,1] # column shifts down defT(pos): r,c = pos cprime = (c + k[r]) % 5 rprime = (r + d[cprime]) % 3 return (rprime, cprime) # Labels for initial matrix labels = [ [1,2,3,4,5], [11,22,33,44,55], [111,222,333,444,555] ] # simulate 1 set defapply_once(matrix): # construct mapping for each position and place labels accordingly out = [[None]*5for _ inrange(3)] for r inrange(3): for c inrange(5): r2,c2 = T((r,c)) out[r2][c2] = matrix[r][c] return out # simulate 100 sets mat = labels for i inrange(100): mat = apply_once(mat) mat
첫 번째 세트에서 Row1은 [22,444,44,55,222], Row2는 [333,1,555,111,4], Row3는 [5,33,2,3,11]로 보이네요. 계산 방식과 100번 반복 적용을 위한 Excel 수식을 간단히 제시할 수 있을 것 같습니다. 간단한 VBA 루프도 첨부하여 제공하고, 사용자 수준에 맞춰 공식도 제공할게요.
@마법의손 님
22번 VBA처럼 exit 코드가 없으므로 일단 N을 100으로 처리. fTT 함수로 배열을 텍스트로 결합 SCAN 함수로 텍스트를 배열로 나누어 시프트한다음 다시 텍스트로 결합하여 원본과 같은지 확인하고 같으면 계속 그대로 누적 -> Unique로 중복제거후 확인
[ 1 444 44 4 222
333 22 555 111 55
5 33 2 3 11 ]
(설명 요약: 한 SET은 행 우측 순환 이동(오렌지: 1,4,3칸) → 열 아래 순환 이동(하늘: 2,1,2,2,1칸) 순서로 진행되며, 이를 100번 반복한 결과입니다.)
원하면, 범위만 지정하면 N회를 한 번에 계산해서 시트에 뿌려주는 짧은 VBA/365 수식도 바로 만들어 드릴게요.
ChatGPT 결과입니다.. 엑셀로 한번 해결해봐야겠네요.ㅎㅎ
# Let's compute the mapping as described.
k = [1,4,3] # row shifts right
d = [2,1,2,2,1] # column shifts down
defT(pos):
r,c = pos
cprime = (c + k[r]) % 5
rprime = (r + d[cprime]) % 3
return (rprime, cprime)
# Labels for initial matrix
labels = [
[1,2,3,4,5],
[11,22,33,44,55],
[111,222,333,444,555]
]
# simulate 1 set
defapply_once(matrix):
# construct mapping for each position and place labels accordingly
out = [[None]*5for _ inrange(3)]
for r inrange(3):
for c inrange(5):
r2,c2 = T((r,c))
out[r2][c2] = matrix[r][c]
return out
# simulate 100 sets
mat = labels
for i inrange(100):
mat = apply_once(mat)
mat
간단한 VBA나 수식 접근법으로 반복 처리를 제공할 수 있을 것 같네요. 간결한 결과를 원하시면 3x5 그리드로 최종 배열을 제시하고, 빠른 체크로 하나의 세트를 시뮬레이션하여 정의에 맞게 매핑되는지 확인해 볼게요.
시뮬레이션 후 100세트 결과 배열
# check one step result for sanity
once = apply_once(labels)
once
첫 번째 세트에서 Row1은 [22,444,44,55,222], Row2는 [333,1,555,111,4], Row3는 [5,33,2,3,11]로 보이네요. 계산 방식과 100번 반복 적용을 위한 Excel 수식을 간단히 제시할 수 있을 것 같습니다. 간단한 VBA 루프도 첨부하여 제공하고, 사용자 수준에 맞춰 공식도 제공할게요.
=LET(M,C3:G5,RS,B3:B5,CS,C2:G2,N,100, LET( r, ROWS(M),c, COLUMNS(M), shiftRow, LAMBDA(A, MAKEARRAY(r,c, LAMBDA(i,j,INDEX(A, i, 1+MOD(j-1 - INDEX(RS,i), c)))) ), shiftCol, LAMBDA(A, MAKEARRAY(r,c, LAMBDA(i,j, INDEX(A, 1+MOD(i-1 - INDEX(CS,j), r), j))) ), REDUCE(M,SEQUENCE(N),LAMBDA(arr,k,shiftCol(shiftRow(arr))))) )fHS=1개행의 가로시프트, fHA=배열의 가로시프트,
fVS=1개열의 세로시프트, fVA=배열의세로시프트,
fSH=배열의 가로세로시프트
VBA처럼 exit 코드가 없으므로 일단 N을 100으로 처리.
fTT 함수로 배열을 텍스트로 결합
SCAN 함수로 텍스트를 배열로 나누어 시프트한다음 다시 텍스트로 결합하여 원본과 같은지 확인하고 같으면 계속 그대로 누적 -> Unique로 중복제거후 확인
=LET(DT, C3:G5, HS, B3:B5, VS, C2:G2, N, 100, fHS, LAMBDA(ar,h, HSTACK(TAKE(ar,,-h), TAKE(ar,,COLUMNS(ar)-h))), fHA, LAMBDA(ar,hh, DROP(REDUCE("",SEQUENCE(ROWS(ar)), LAMBDA(t,r, VSTACK(t, fHS(INDEX(ar,r,0), INDEX(hh,r))))),1)), fVS, LAMBDA(ar,v, VSTACK(TAKE(ar,-v), TAKE(ar,ROWS(ar)-v))), fVA, LAMBDA(ar,vv, DROP(REDUCE("",SEQUENCE(COLUMNS(ar)), LAMBDA(t,c, HSTACK(t, fVS(INDEX(ar,0,c), INDEX(vv,c))))),,1)), fSH, LAMBDA(ar,hh,vv, fVA(fHA(ar,hh),vv)), fTT, LAMBDA(ar,TEXTJOIN(";",,BYROW(ar,LAMBDA(r,TEXTJOIN(",",,r))))), RST, SCAN(fTT(fSH(DT,HS,VS)),SEQUENCE(N),LAMBDA(b,c,IF(b=fTT(DT),b,fTT(fSH(TEXTSPLIT(b,",",";"),HS,VS))))), ROWS(UNIQUE(RST))+1)수미수님의 수식은 볼 때마다
무협소설에서의 천외천의 느낌이네요.