뇽뇨뇽
대표칭호 없음
Sierra_24 9e02e0e56c084821b3ba3c02f36edb71
이해도 | 1.12 |
---|---|
게임버전 (JE) | 모드버킷 |
스크립트 버전 | 입문자(아무것도 몰라요) |
스크립트 애드온 | skript 2.2 dev-37c |
숫자를 &k12345 이런식으로 랜덤으로 보이게 한 후 뒤에서 한 글자씩 공개하고 싶은데 방법을 모르겠습니다.
set {_split::*} to {_money} split at ""
set {_length} to length of {_money}
여기까지는 생각 했는데 루프를 어떻게 해야 할지를 잘 모르겠습니다. 조언 부탁드립니다.
스크립터브혼
2020.12.29모든 글자를 난독화 하려면 &k12345 입니다.
마지막 글자만 보이게 하려면 난독화를 해제하면 되므로 &k1234&r5 입니다.
마찬가지로 두글자를 보이게 하려면 &k123&r45 입니다.
규칙이 보이시나요?
뇽뇨뇽님이 만들어야 하는 알고리즘은 아래 여섯개의 텍스트를 순서대로 출력 해야합니다.
&k12345&r
&k1234&r5
&k123&r45
&k12&r345
&k1&r2345
&k&r12345
규칙은 간단하죠. 전체 문자열에서 뒤에서부터 한칸씩 앞으로 &r을 이동시키기만 하면 됩니다.
{_split::*}리스트에 각 글자들을 나누어 담았습니다.
이제 이 변수에 &r을 원하는 "위치"에 넣고 한줄로 합치면 되죠.
글자의 총 개수는 5개이므로 &r의 위치는 6에서 시작해서 1까지 가야합니다.
즉, 첫번째 루프는 &r의 위치값입니다. 6부터 시작해서 1씩 감소하며 1까지 가야하죠.
이 위치값을 토대로 {_split::*}리스트에 &r을 추가 하기만 하면 되죠.
스크립트에서는 리스트 변수에서 연속 되는 두 변수 사이에 값을 넣는 간편한 방법이 없습니다.
그래서 {_split::*}리스트에 있는 값을 순서대로 꺼내서 새로운 리스트에 넣는 과정에 필요한 값을 추가하는 방법을 씁니다.
예를들어 12&r345를 생성한다고 하면, 위치값은 3일겁니다.
첫번째 루프에서 1이 오고 루프 횟수와 위치값이 다르므로 새로운 리스트에 추가만 합니다.
두번째 루프에서 2가 오고 루프 횟수와 위치값이 다르므로 새로운 리스트에 추가만 합니다.
세번째 루프에서 3이 오는데, 루프 횟수와 위치값 둘 다 3이므로 새로운 리스트에 &r을 먼저 추가한 후에 3을 추가합니다.
나머지 루프도 루프 횟수와 위치값이 다르므로 새로운 리스트에 추가만 합니다.
정리하자면 두번째 루프는 {_split::*}변수 변수이고,
이 루프는 루프 횟수가 필요하므로 루프마다 1씩 증가하는 카운트 변수를 두어야 한다는 것입니다.
이렇게 최종적으로 만들진 &r을 포함하는 리스트 변수는 [Join & Split]익스프레션의 join 패턴으로 글자를 합쳐주면 됩니다.
첫번째 루프는 &r의 이동, 두번째 루프는 글자생성을 담당합니다.
뇽뇨뇽
2020.12.30감사합니다 공부가 되었습니다. 제가 배열 변수로 split 한걸 한 변수로 융합 하는것을 해본적도 없고 본적도 없어서.. 혹시 예시구문 가능할까요??
스크립터브혼
2020.12.30[Join & Split]익스프레션의 join 패턴은
(concat[enate]|join) %texts% [(with|using|by) [[the] delimiter] %text%] 입니다.
> join %texts% [with %text%]
정도로 요약 할 수 있습니다.