KTUG마당은 KTUG를 방문하는 모든 이용자가 대화를 나누고 소식을 전하는 곳입니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- Team Blog의 글을 이곳 게시판의 "정보글"로 모았습니다. Team blog는 기고자가 올린 글에 질문을 받는 부담을 줄이기 위하여 댓글을 허용하지 않았습니다. 그러나 이곳 게시판으로 모으면서 댓글을 달 수 있습니다. 게시물을 작성하실 때 댓글을 원하지 않으시면 댓글을 허용하시지 않으시기를 바랍니다. 또한 불필요한 소모성 댓글을 달지 않도록 주의하여 주시기를 바랍니다.
- TeX과 관련된 질문이나 답변은 QnA 마당을 이용하십시오. TeX과 관련된 질문은 지웁니다
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- 사용하는 편집기는 CKeditor입니다. 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한줄을 비웁니다. 글줄만 바꾸려면 shift-enter 를 누르시면 <BR>가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
자유글 [luatex] 행운의 번호는?
2018.11.23 18:59
\documentclass{article}
\usepackage{xparse, expl3}
\usepackage{luacode}
\usepackage{tikz}
\newcommand\DrawBalls{
\luaexec{
balls = {}
while \#balls < 6 do
used = false
ball = math.random(1, 45)
for i=1, \#balls do
if balls[i] == ball then
used = true
end
end
if not used then
table. insert(balls, ball) % 금칙어에 걸려서 띄어쓰기
end
end
table.sort(balls)
for i=1, \#balls do
tex.print("\\LottoBall{", balls[i], "}")
end
}
}
\newcommand*\LottoBall[1]{%
\tikz\node[%
circle,shade,draw=white,thin,inner sep=1pt,%
ball color=red,%
text width=1em,%
font=\sffamily,text badly centered,white%
]{#1};}%
\ExplSyntaxOn
\NewDocumentCommand \lotto { O{5} }
{
\int_step_inline:nnnn {1}{1}{#1}
{
\DrawBalls\\
}
}
\ExplSyntaxOff
\setlength\parindent{0pt}
\begin{document}
\lotto[10]
\end{document}
댓글 13
-
작나
2018.11.24 07:53
-
yihoze
2018.11.25 06:33
계속 들여다 보니 좀 이해됩니다. 뽑은 수가 이미 있으면, 그걸 버리는 게 아니라 그 인덱스를 뽑은 수로 삼는 거군요. 그래서 딱 여섯 번만 뽑으면 끝나게 되고요. 반복 범위를 40부터 45까지 잡아서 random 범위를 하나씩 늘려가는 게 절묘하군요. 고맙습니다.
-
작나
2018.11.28 15:56
네, 그렇습니다. Floyd 랜덤 샘플링 알고리즘의 핵심은 "함수 randint()의 호출의 횟수를 정확히 표본 갯수 만큼만 하자." 입니다. 그렇다면 저 알고리즘으로 만들어진 표본이 확률적으로도 아무런 문제가 없는가? 인데, 그게 수학적으로도 그렇답니다.
-
likesam
2018.11.24 11:37
yihoze님과 작나님중 어느분의 code에 따른 신탁을 믿고 로또를 사러 가면 됩니까?
-
yihoze
2018.11.25 06:29
작나님 코드가 더 영험해 보이지 않습니까?
-
Progress
2018.11.24 14:49
24번 포함될 때까지 돌려야겠습니다 -
yihoze
2018.11.25 06:29
24는 왜요?
-
Progress
2018.11.25 15:53
별거 없슴다. 24일이라... (어차피 로또잖아요)
-
noname
2018.11.28 11:41
expl3 버전:
위의 작나님께서 보여주신 코드를 expl3로 옮긴 것입니다. 원래 코드가 예사롭지 않은 데다가 텍신의 강림까지 기대해볼 수 있지 않을까요?
expl3의 슈도랜덤넘버제네레이터는 pdftex/luatex의 경우 metapost에 기반한 \pdfuniformdeviate 또는 \uniformdeviate (luatex) 프리미티브에 의한 것이라고 합니다. xetex 엔진으로는 expl3의 이 함수들을 처리할 수 없으므로 여기서는 pgfmath의 random 함수가 사용하도록 했습니다. 어느 것이 더 *영험*할지는...
\NewDocumentCommand \DrawBalls { } { \clist_clear:N \l_tmpa_clist \int_step_inline:nnn { 40 } { 45 } { \sys_if_engine_xetex:TF { \pgfmathparse{ random (##1) } \tl_set:No \l_tmpa_tl { \pgfmathresult } } { \tl_set:Nx \l_tmpa_tl { \int_rand:n { ##1 } } } \clist_if_in:NVTF \l_tmpa_clist \l_tmpa_tl { \clist_put_right:Nn \l_tmpa_clist { ##1 } } { \clist_put_right:NV \l_tmpa_clist \l_tmpa_tl } } \clist_sort:Nn \l_tmpa_clist { \int_compare:nTF { ##1 > ##2 } { \sort_return_swapped: } { \sort_return_same: } } \clist_map_inline:Nn \l_tmpa_clist { \LottoBall { ##1 } \space } }
-
yihoze
2018.11.28 11:57
\clist_sort:Nn이 실제 어떻게 작동할지 궁금합니다. 한 번만 비교해서 뒤바꾸는 것으로는 충분하지 않을 텐데요. \sort_return_swapped:가 더 이상 호출되지 않을 때까지 비교를 계속 반복할까요?
-
noname
2018.11.28 12:32
급하게 대강 훑어본 바로는 리스트가 길면 쪼개서 각각의 블럭을 quick sort하고 블럭들을 merge sort하는 식으로 되는 것처럼 보이는데요. 아무튼 swapped나 same은 사용자 입장에서는 단순히 순서를 주는 것이라고 이해해도 되지 싶습니다.
-
yihoze
2018.11.28 17:17
\int_rand:nn을 이용하여 공 색도 무작위로 바뀌게 해봤습니다.
\NewDocumentCommand \GetBallColor { }
{
\tl_set:Nx \l_R_tl { \int_rand:nn {0}{255} }
\tl_set:Nx \l_G_tl { \int_rand:nn {0}{255} }
\tl_set:Nx \l_B_tl { \int_rand:nn {0}{255} }
\definecolor{ball}{RGB}{\l_R_tl, \l_G_tl, \l_B_tl}
}
-
noname
2018.11.28 18:17
일부 색상에 따라 숫자가 잘 안 보이는 경우가 있지만... 예쁘네요. :)
XeLaTeX에서도 되도록 조금 수정해봤습니다.
\clist_set:Nn \l_tmpb_clist { R, G, B } \NewDocumentCommand \GetBallColor { } { \sys_if_engine_xetex:TF { \clist_map_inline:Nn \l_tmpb_clist { \pgfmathparse { random ( 0, 255 ) } \tl_set:co { l_ ##1 _tl } { \pgfmathresult } } } { \clist_map_inline:Nn \l_tmpb_clist { \tl_set:cx { l_ ##1 _tl } { \int_rand:nn {0}{255} } } } \definecolor{ball}{RGB}{\l_R_tl, \l_G_tl, \l_B_tl} }
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
471 | 상용로그표 : 루아텍 버전 | DohyunKim | 2011.07.14 | 5233 |
470 | MiKTeX 이나 TeXLive 에서 biber.exe 설치나 업데이트 에러 [1] | 쿠피 | 2014.10.09 | 5224 |
469 | 문서 중간에서 판면 배치 바꾸기 | yihoze | 2011.03.30 | 5211 |
468 | 목록 라벨 형식 바꾸기 [2] | yihoze | 2016.03.28 | 5206 |
467 | 디자인하우스체 [1] | 에드 | 2019.10.14 | 5203 |
466 | pdftex에서 truetype을 써보자 | DohyunKim | 2015.08.07 | 5180 |
465 | 하이픈과 페널티 | DohyunKim | 2012.11.05 | 5169 |
464 | 문자열의 삽입정렬 | karnes | 2012.10.08 | 5153 |
463 | 상용로그표 | karnes | 2011.07.13 | 5149 |
462 | [참가신청-수정] 문서작성 워크숍 2014 A & B [8] | ischo | 2014.10.03 | 5126 |
461 | [잡담] 키보드가 마우스보다 빠르다 [6] | yihoze | 2016.03.22 | 5111 |
460 | 아무도 관심은 없으시겠지만...-.-; [6] | 불량양파 | 2016.03.07 | 5090 |
459 | 옛한글, pua 폰트를 활용해보자 [5] | noname | 2021.04.07 | 5079 |
458 | 전자책 전용 글꼴 리디바탕 | 에드 | 2019.10.16 | 5067 |
457 | 정확한(!) 크기의 네모 박스 그리기 | DohyunKim | 2013.03.13 | 5067 |
456 | [TIP] Sumatrapdf에서 texmaker로 inverse search | karnes | 2011.09.29 | 5065 |
455 | 철자 검사 사전에 단어 추가하기 [1] | yihoze | 2016.03.10 | 5053 |
454 | 게임 트리 그리기: istgame 패키지 [7] | ndh | 2015.09.02 | 5048 |
453 | [새 위키] 주제별 분류에 의한 텍 및 관련 문서 | Progress | 2014.11.15 | 5038 |
452 | lualatex으로 cp949 문서를 컴파일 | karnes | 2014.03.16 | 5035 |
\DrawBalls에 사용된 루아 코드가 1부터 45까지의 수 중에서 6개를 중복 없이 뽑은 후, 그 6개를 오름차순으로 정렬하여 출력하는 것 같은데요, 모집단의 크기가 45가 아니라 좀 큰 수이고 표본의 크기가 모집단의 크기와 거의 같으면 실행시간이 좀 오래 걸릴것 같고, 랜덤 함수가 잘못 작성된 경우면 실행이 끝나지 않을 수도 있답니다. 자세한 설명은 https://bit.ly/2Qm4jIa 에 있고, 그 설명에 따라 약간 수정해 봤습니다.