본문 바로가기
이미지맥스 그리고 루아(lua)/루아(lua)

[lua] 랜덤한 문자열 생성하기 -1- (기본편)

by 위치결정 2021. 4. 24.
반응형

2021.04.26 - [이미지맥스, lua/루아 lua] - [lua] 루아에서 랜덤한 문자열 생성하기 -2- (함수화)

 

1. 루아에서 문자열 합치기

루아에서는 문자열과 문자열 사이에 .. 를 넣어주면 문자열이 합쳐집니다.

다음과 같이 테이블에 'a', 'b', 'c', 'd' 라는 문자열이 있다고 가정하고 이를 합쳐보겠습니다.

 

chars = {'a', 'b', 'c', 'd'}
new_string = chars[1]..chars[2]..chars[3]..chars[4]
print(new_string)
-- > 'abcd'

 

테이블의 1, 2, 3, 4번 인덱스 문자을 불러와 문자열로 합친것입니다. 각각 문자들이 합쳐져 abcd 가 리턴되는 것을 알 수 있습니다.

 

2. 테이블의 문자열을 합치기

그럼 테이블에 저장되어있는 캐릭터(문자)들을 스트링(문자열)으로 합쳐보겠습니다.

fo 루프문을 이용하면 쉽게 할 수 있을거 같습니다.

새로운 문자열을 만들기 위해 new_string 이라는 빈 문자열 변수를 만들어놓고 for문 안에서 캐릭터들을 합쳐봅니다.

chars = {'a', 'b', 'c', 'd'}
new_string = ''

for i = 1, 4, 1 do
    new_string = new_string..chars[i]
end
print(new_string)
-- > 'abcd'

 

3. 루아에서 랜덤으로 캐릭터(문자) 생성하기

루아에서 랜덤 함수는 math.random() 입니다. 인수에 범위를 설정하면 원하는 범위내에서 랜덤한 리턴값을 얻을수 있습니다.

랜덤으로 문자 'A' ~ 'Z' 까지 얻기위해서 아스키코드에서 A~Z 문자 캐릭터에 해당하는 0x41 ~ 0x5A를 인수로 지정하여 리턴을 받아보겠습니다.

혹은 소문자 'a' ~ 'z' 까지 얻고 싶다면 아스키코드 a~z 문자 캐릭터에 해당하는 0x61 ~ 0x7A를 인수로 지정하거나, 다른 방법으로는 대문자 아스키코드에 32를 더하면 소문자가 됩니다.

또 랜덤으로 숫자 '0' ~ '9' 까지 얻고 싶다면 아스키코드에서 0~9 숫자 캐릭터에 해당하는 0x30 ~ 0x39 를 인수로 지정하면 됩니다.

local random_char = string.char(math.random(0x41, 0x5A))
print(random_char)
-- > 'C'(리턴값은 랜덤하게 들어옵니다)

 

4. 랜덤 캐릭터(문자)를 테이블 형태로 만들기

그럼 이제 랜덤으로 문자를 생성하여 테이블화 해서 for문으로 합치기만 하면 되겠네요.

다음과 같이 하면 4글자의 랜덤으로 생성된 캐릭터가 테이블화 됩니다.

random_chars = {}
for i = 1, 4, 1 do
    local random_char = string.char(math.random(0x41, 0x5A))
    table.insert(random_chars, random_char)
end

print(table.unpack(random_chars))
-- > X T E P (리턴값은 랜덤하게 들어옵니다.)

 

5. 알파벳10자 + 숫자3자의 문자열 생성하기

그럼 이제 이렇게 만든 테이블을 위 2번방법으로 했듯이 스트링 형태로 합친 뒤에 활용하시면 되겠습니다.

이를 정리해서 10글자 정도 되는 문자열 테이블을 만들고, 생성된 문자열을 키보드 함수로 타이핑을 하셔도 좋을것 같네요.

if문을 이용하거나 하셔서 알파벳과 숫자를 섞으셔도 좋을것같네요.

 

방법1. 테이블에 문자를 생성후 합성

-- 샘플1: 대문자 10 + 숫자 3 생성하기

random_chars = {}
for i = 1, 10, 1 do
    local random_char = string.char(math.random(0x41, 0x5A))
    table.insert(random_chars, random_char)
end

for i = 1, 3, 1 do
    local random_char = string.char(math.random(0x30, 0x39))
    table.insert(random_chars, random_char)
end

new_string = ''
for i = 1, #random_chars, 1 do
    new_string = new_string..random_chars[i]
end
print(new_string)

 

방법2. 문자끼리 합성하여 문자열 생성

-- 샘플2 : 대문자 10 + 숫자 3 랜덤하게 생성하기

new_string = ''
for i = 1, 10, 1 do
    new_string = new_string..string.char(math.random(0x41, 0x5A))
end
for i = 1, 3, 1 do
    new_string = new_string..string.char(math.random(0x30, 0x31))
end
print(new_string)

 

참 재밌습니다

반응형

댓글