퀴즈
[퀴즈_20] 4글자 퍼즐 만들기
이런 4X4 퍼즐 영단어 퍼즐을 만들어 주세요
풀이 도구는 어떤 것이든 됩니다. M365, 파이썬, VBA, 스크립트, ... 기타등등..
아래는 예시 4개를 보였습니다.
풀이 도구는 어떤 것이든 됩니다. M365, 파이썬, VBA, 스크립트, ... 기타등등..
아래는 예시 4개를 보였습니다.
마
삐
황
오
더
댓글 5
F9를 누를 때마다 랜덤으로 추출되며, 랜덤 추출결과가 실패할 경우 "Press F9"가 나오도록 했습니다.
=LET(D, A2:A190, L,SORTBY(D, RANDARRAY(ROWS(D),1)), fRS, LAMBDA(d,n, TAKE(SORTBY(d, RANDARRAY(ROWS(d),1)),n)), S, LEFT(fRS(L,1),1), F, RIGHT(fRS(L,1),1), LA, FILTER(L, RIGHT(L,1) = F), LB, FILTER(L, LEFT(L,1) = RIGHT(TAKE(LA,1),1)), LAa, UNIQUE(LEFT(LA,1)), LAb, BYROW(LAa, LAMBDA(r, ROWS(FILTER(LA, LEFT(LA,1)=r)))), LAf, DROP(REDUCE("",FILTER(LAa, LAb>1),LAMBDA(t,r, VSTACK(t, FILTER(LA, LEFT(LA,1)=r)))),1), LBa, UNIQUE(RIGHT(LB,1)), LBb, BYROW(LBa, LAMBDA(r, ROWS(FILTER(LB, RIGHT(LB,1)=r)))), LBf, DROP(REDUCE("",FILTER(LBa, LBb>1),LAMBDA(t,r, VSTACK(t, FILTER(LB, RIGHT(LB,1)=r)))),1), TS, TAKE(UNIQUE(LEFT(LAf,1)),1), TF, TAKE(UNIQUE(RIGHT(LBf,1)),1), WA, FILTER(LAf, LEFT(LAf,1)=TS), WB, FILTER(LBf, RIGHT(LBf,1)=TF), RST, VSTACK(HSTACK(MID(INDEX(WA,1),SEQUENCE(1,4),1)), HSTACK(MID(INDEX(WA,2),SEQUENCE(2,1,2),1),{"","";"",""},MID(INDEX(WB,1),SEQUENCE(2,1,2),1)), HSTACK(MID(INDEX(WB,2),SEQUENCE(1,4),1))), LET(Sum,SUM(IF(ISERROR(RST),1,0)),IF(Sum>0,"Press F9",RST)))=LET(Da, A2:A190, Db, DROP(REDUCE("",Da, LAMBDA(t,r, VSTACK(t, (r&","& FILTER(Da, (LEFT(Da,1) = RIGHT(r,1))*(Da<>r)))))),1), Dc, TAKE(SORTBY(Db, RANDARRAY(ROWS(Db),1)),1), Dd, FILTER(Db, (LEFT(Db,1)=LEFT(Dc,1))*(RIGHT(Db,1)=RIGHT(Dc,1))*(ISERROR(SEARCH(TEXTBEFORE(Dc,","),Db)))*(ISERROR(SEARCH(TEXTAFTER(Dc,","),Db)))), De, VSTACK(Dc,TAKE(SORTBY(Dd, RANDARRAY(ROWS(Dd),1)),1)), RT, VSTACK(MID(TAKE(De,1),SEQUENCE(1,4),1), HSTACK(MID(TAKE(De,-1),SEQUENCE(2,1,2),1), {"","";"",""}, MID(TAKE(De,1),SEQUENCE(2,1,7),1)), MID(TAKE(De,-1), SEQUENCE(1,4,6),1)), PT, IF(COUNT(IFERROR(RT,1)),"Press F9", RT), PT )아래는 4꼭지 알파벳이 모두 랜덤.
원조백수님의 코드 최적화 b^^) 짱입니다..
=LET(Da,TrimRange($A$2:$A$1000), Data,DROP(REDUCE("",Da,LAMBDA(t,r,VSTACK(t,(r&"/"&FILTER(Da,(LEFT(Da,1)=RIGHT(r,1))*(Da<>r)))))),1), FE,HSTACK(Data,LEFT(Data)&RIGHT(Data)), uData,UNIQUE(INDEX(FE,,2)), 문자갯수, SORT(HSTACK(uData,MAP(uData,LAMBDA(m,ROWS(FILTER(INDEX(FE,,2),INDEX(FE,,2)=m))))),1), 가능한문자,FILTER(INDEX(문자갯수,,1),INDEX(문자갯수,,2)>=2), 가능한단어,FILTER(INDEX(FE,,1),ISNUMBER(MATCH(INDEX(FE,,2),가능한문자,0))), 위쪽오른쪽단어,INDEX(SORTBY(가능한단어,RANDARRAY(ROWS(가능한단어))),1,1), skey,LEFT(위쪽오른쪽단어)&RIGHT(위쪽오른쪽단어), 왼쪽아래쪽단어,INDEX(FILTER(INDEX(FE,,1),(INDEX(FE,,2)=skey)*(LEFT(INDEX(FE,,1),4)<>LEFT(위쪽오른쪽단어,4))*(RIGHT(INDEX(FE,,1),4)<>RIGHT(위쪽오른쪽단어,4))),1,1), wd,TEXTSPLIT(위쪽오른쪽단어&"/"&왼쪽아래쪽단어,,"/"), vd,IFNA(VSTACK(HSTACK(MID(INDEX(wd,3),SEQUENCE(3),1),MID(INDEX(MID(wd,2,2),1),SEQUENCE(,2),1),MID(INDEX(wd,2),SEQUENCE(3),1)),MID(INDEX(wd,4),SEQUENCE(,4),1)),""), IF(COUNT(IFERROR(vd,1)),"Press F9",vd))저도 다시 앞쪽것보다는 덜 버벅이네요..
=LET(Da,TrimRange($A$2:$A$1000), Data,DROP(REDUCE("",Da,LAMBDA(t,r,VSTACK(t,(r&"/"&FILTER(Da,(LEFT(Da,1)=RIGHT(r,1))*(Da<>r)))))),1), FEP,HSTACK(Data,LEFT(Data)&RIGHT(Data)),FE,SORTBY(FEP,RANDARRAY(ROWS(FEP))), uData,UNIQUE(INDEX(FE,,2)),문자갯수,HSTACK(uData,MAP(uData,LAMBDA(m,ROWS(FILTER(INDEX(FE,,2),INDEX(FE,,2)=m))))), 처음과끝문자,INDEX(FILTER(INDEX(문자갯수,,1),INDEX(문자갯수,,2)>=2),1,1),fData,FILTER(INDEX(FE,,1),INDEX(FE,,2)=처음과끝문자,""), hData, HSTACK(INDEX(fData,1,1),INDEX(FILTER(fData,(LEFT(fData,4)<>LEFT(INDEX(fData,1,1),4))*(RIGHT(fData,4)<>RIGHT(INDEX(fData,1,1),4))),1,1)), RD, TEXTSPLIT(TEXTJOIN("/",1,hData),"/"), RS, HSTACK(MID(INDEX(RD,3),SEQUENCE(4),1),VSTACK(EXPAND(MID(INDEX(RD,1),SEQUENCE(,2,2),1),3,2,""),MID(INDEX(RD,4),SEQUENCE(,2,2),1)),MID(INDEX(RD,2),SEQUENCE(4),1)), IF( COUNT(IFERROR(RS,1)), "Press F9", RS) )