2009년 04월 07일
로또 번호 생성기 in J
J를 이용한 첫 프로그램.
J가 어떤 건지 위키피디아에서 훑어본 후 J language로 구글 검색을 하다가 아래와 유사한 코드 발견. 이걸로 로또 번호 생성기를 만들어 봄.
v=: ?. 6 ? 56
v
6 35 18 12 4 27
1부터 56까지 중에서 6개 숫자.
개선할 점
1. v를 반복 입력해서 출력해보면 숫자가 바뀌지 않는다.
2. 0도 나온다.
3. 숫자가 중복해서 나오는 경우도 있다.
4. 오름차순 정렬이 되었으면 좋겠다.
불편하지만 지금 상태로 사용하는 법
5. 다시 v=: ?. 6 ? 56 에서 엔터를 쳐서 입력한 후에
6. 1부터 56까지 중에서 중복되지 않게 결과가 나온 경우에 채택, 아니면 5번으로.
일단 이 정도로 해보고 다음에 더.
7. 왠지 프로그래머의 "밤을 새더라도 끝장을 본다."와 같은 정신 자세는 없는 듯.
"정신 자세는 없다."라고 쓰고 보니 마음 속에 조금 남아 있던 듯.
8. v 대신 lotto 로 변수명(?) 변경
lotto=: ?. 6 ? 56
9. 왠지 lotto+1를 쓰면 0이 나오는 문제가 해결될 것 같음
lotto=: ?. 6 ? 55
lotto+1
31 18 30 33 11 1
10. 혹시? 싶어서 아래처럼 해보니까 이건 안 됨.
lotto-1=: ?. 6? 57
lotto
11. 일단 여기까지.
다음 날 일어나서. 혹시 sort() 라고 하면 되지 않을까?
12. 상당히 직관적이다. sort(2 3 1) 은 1 2 3.
lotto=: ?. 6 ? 55
sort(lotto+1)
4 5 6 7 15 18
기왕 해본 김에 random 함수를 구글에서 찾아봄.
13. http://www.jsoftware.com/help/dictionary/d640.htm 를 참고하여
lotto=: 6 ? 56
sort(lotto+1)
이렇게 수정. 근데 lotto=: ?. 6 ? 55 에서 ?. 는 뭘까? 그리고 x ? y 의 경우는 0부터 y-1까지 1개씩 permutation. 근데 한줄 한줄 실행해야 랜덤하게 나온다.
14. "한줄 한줄 실행해야" 에서 아이디어를 얻어서 아래와 같이 코드 완성
sort((6 ? 56 ) + 1)
3 6 10 18 29 47
기념으로 오늘 로또 하나 사야지.
15. 추가. 여기 로또는 숫자 5개 고르고 1개 특별한 숫자를 하나 고른다. 제일 큰 숫자가 스페셜 볼이 되면 안 되는. 그냥 차라리 정렬 안 한 상태에서 맨 마지막을 스페셜 볼로 쓰는 것이 더 나을 듯.
J가 어떤 건지 위키피디아에서 훑어본 후 J language로 구글 검색을 하다가 아래와 유사한 코드 발견. 이걸로 로또 번호 생성기를 만들어 봄.
v=: ?. 6 ? 56
v
6 35 18 12 4 27
1부터 56까지 중에서 6개 숫자.
개선할 점
1. v를 반복 입력해서 출력해보면 숫자가 바뀌지 않는다.
2. 0도 나온다.
3. 숫자가 중복해서 나오는 경우도 있다.
4. 오름차순 정렬이 되었으면 좋겠다.
불편하지만 지금 상태로 사용하는 법
5. 다시 v=: ?. 6 ? 56 에서 엔터를 쳐서 입력한 후에
6. 1부터 56까지 중에서 중복되지 않게 결과가 나온 경우에 채택, 아니면 5번으로.
일단 이 정도로 해보고 다음에 더.
7. 왠지 프로그래머의 "밤을 새더라도 끝장을 본다."와 같은 정신 자세는 없는 듯.
"정신 자세는 없다."라고 쓰고 보니 마음 속에 조금 남아 있던 듯.
8. v 대신 lotto 로 변수명(?) 변경
lotto=: ?. 6 ? 56
9. 왠지 lotto+1를 쓰면 0이 나오는 문제가 해결될 것 같음
lotto=: ?. 6 ? 55
lotto+1
31 18 30 33 11 1
10. 혹시? 싶어서 아래처럼 해보니까 이건 안 됨.
lotto-1=: ?. 6? 57
lotto
11. 일단 여기까지.
다음 날 일어나서. 혹시 sort() 라고 하면 되지 않을까?
12. 상당히 직관적이다. sort(2 3 1) 은 1 2 3.
lotto=: ?. 6 ? 55
sort(lotto+1)
4 5 6 7 15 18
기왕 해본 김에 random 함수를 구글에서 찾아봄.
13. http://www.jsoftware.com/help/dictionary/d640.htm 를 참고하여
6 ? 6 NB. A random permutation라고 되어 있어서
0 1 5 4 3 2
lotto=: 6 ? 56
sort(lotto+1)
이렇게 수정. 근데 lotto=: ?. 6 ? 55 에서 ?. 는 뭘까? 그리고 x ? y 의 경우는 0부터 y-1까지 1개씩 permutation. 근데 한줄 한줄 실행해야 랜덤하게 나온다.
14. "한줄 한줄 실행해야" 에서 아이디어를 얻어서 아래와 같이 코드 완성
sort((6 ? 56 ) + 1)
3 6 10 18 29 47
기념으로 오늘 로또 하나 사야지.
15. 추가. 여기 로또는 숫자 5개 고르고 1개 특별한 숫자를 하나 고른다. 제일 큰 숫자가 스페셜 볼이 되면 안 되는. 그냥 차라리 정렬 안 한 상태에서 맨 마지막을 스페셜 볼로 쓰는 것이 더 나을 듯.
# by | 2009/04/07 15:59 | J language | 트랙백 | 덧글(7)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
45개 구슬 중 6개 맞추기 입니다.
넹..진지 먹었습니다.^^;
집 나가면 고생이라는데, 요즘은 외국이 더 살기 어렵다지여?