네트워크 가위바위보 플그림

p_teto의 이미지

서버가 있고 클라이언트가 있습니다.

서버에 5~무한 의 사람들이 접속을 하면 가위바위보 게임을 시작합니다.

즉, 가위바위보를 하는 사람의 수에 상관이 없는 알고리즘을 구현하고자

합니다. if문으로 모든 경우의 수를 표현할려고 하니;; 난감하더군요.

접속한 사람들에게 순위도 매겨야 하고.. 결국 생각해낸 방법이

0(가위),1(바위),2(보)를 낸 사람의 카운트를 세고, 0 or 1 or 2에 대한 카운터값이

0이 있을경우 투팀(이긴팀,진팀)으로 나뉘게 됩니다. 그렇게 두팀으로 나누고, 다시 그팀들끼리

가위바위보를 하고 카운터를 세서 0일 경우 다시 두팀으로 ... 이런식으로 하면

가능할것 같은데;; 진정 이런 방법뿐인가요? ㅠㅠ

다른 방법이 혹시 있나 궁금해서 이렇게 글을 올려 봅니다 :)

bugiii의 이미지

모든 사람이 한꺼번에 손가락을 내밀면 승부 나기가 거의 하늘에 별따기 아닐까요? 그런 것하고는 상관없다 승부날 때까지 밤새워서 수백명이 이기고 지는 것을 가리겠다... 그러면, p_teto님의 의견도 아주 좋은 방법이라고 생각합니다. (물론 일정 시간에 한번씩의 입력을 받아야겠죠)

하지만, 플레이하는 사람의 고충을 생각한다면, 조를 짜서 하는게 더 현실적이지 않을까요? 보통 실제 상황에서는 사람이 많아지면 가위바위보 할 때 나눠서 하듯이...

아, 그리고 최종 승자 1명을 가리는 것입니까? 아니면 1등부터 꼴등까지 죽 세우는 것입니까?

게임 방식을 먼저 결정하시면 답이 보일 것 같은데요...

p_teto의 이미지

bugiii wrote:

하지만, 플레이하는 사람의 고충을 생각한다면, 조를 짜서 하는게 더 현실적이지 않을까요? 보통 실제 상황에서는 사람이 많아지면 가위바위보 할 때 나눠서 하듯이...

아, 그리고 최종 승자 1명을 가리는 것입니까? 아니면 1등부터 꼴등까지 죽 세우는 것입니까?

게임 방식을 먼저 결정하시면 답이 보일 것 같은데요...

1등부터 꼴등까지 쭉~ 나열을 하는겁니다. :)

1만번 반복하여야 합니다. 1등부터 꼴등까지 정해지면 한판이 끝나는겁니다.

그렇게 1만번 반복.. 현실에서이루어 진다면 끝이 나지 않는 게임일것 같습니다.

컴퓨터를 사용하여 연산을 해서 가능한 플그림이라고 생각합니다.

만약에 100명이 가위바위보를 해서 1게임이 끝나는데 걸리는 횟수와 시간을

생각해보면 왠지 재미가 있을듯 하네요.

랜덤넘버(3)을 사용하여 100개의 값이 동시에 발생했을경우 위의 알고리즘을

사용하면 어떤 결과가 발생할지 ;; 컴터가 버틸수 있을지 궁금합니다. :)

교수님 말씀으로는 10명이서 했을경우 1초만에 결과값이 나오구 27번의

가위바위보를 했다고 하시던데 도저히 어떤 알고리즘인지 파악이 안돼네요

스스로 생각하라고 하는데 과연 가능할련지 ㅠㅠ

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

bugiii의 이미지

10명이라면.... 확률상 어떻게 될까요? 랜덤이 아주 균일한 임의의 손가락을 출력해준다면... 확률로 횟수가 나올테구요...

모든 사람의 등수를 뽑아내야 한다면, 1등 뽑고 다시 나머지 9명이서 가위바위보 하게 하고 또 그중에 1등 뽑고.. 그런식으로 마지막 2명까지 처리하면 되는 것 아닌가요?

saxboy의 이미지

좀 다른 얘기지만 "혹시라도" 도박묵시록 카이지를 읽어보셨다면 여기에 있는 가위바위보를 만들어주시면 어떨까요... :-)

bugiii의 이미지

모든 사람이 동시에 가위바위보를 해야 한다는 조건이 없다면 좀 더 빠른 시간안에 승부를 낼 수 있게 조를 짤 수도 있을 것 같습니다.

먼저 적절히 사람들을 3~4명 정도로 잘라서 조를 짜서 플레이를 한다면 비기는 경우를 많이 없앨 수 있지 않을까요? 각 조에서 등수를 매긴 후에 1,2,3,4 등끼리 다시 모으고 각 등수끼리 조를 다시짜서 그중에 또 등수를 가리고... 그러면 주루룩 1열로 설텐데요...

p.s. 저는 impelliteri 의 somewhere over the rainbow 를 아주 아주 좋아합니다. saxboy 님은요?

p_teto의 이미지

bugiii wrote:
10명이라면.... 확률상 어떻게 될까요? 랜덤이 아주 균일한 임의의 손가락을 출력해준다면... 확률로 횟수가 나올테구요...

모든 사람의 등수를 뽑아내야 한다면, 1등 뽑고 다시 나머지 9명이서 가위바위보 하게 하고 또 그중에 1등 뽑고.. 그런식으로 마지막 2명까지 처리하면 되는 것 아닌가요?

10명의 사람이 동시에 가위바위보를 할경우를 생각하면 됩니다.

가위바위보에 대한 경우의 수는 3^x(사람의수)가 됩니다. 10명이면

3의 10승에 대한 경우의 수가 나오겠네요 :) 59049라는 경우의 수가 나옵니다.

여기에서 비기는 경우는 모두가 같은것을 내는 경우 3/59049의 확률
가위 바위 보가 동시에 나와 있는 경우 ?/59049의 확률.. 엄청많겟네요 :)
이긴팀과 진팀이 구분이 되어야 다음 단계로 넘어 갈수 있습니다.
비기면 두팀다 0점 이긴팀에게는 1점을 진팀에는 0점을 주고 이긴팀따로 진팀따로 다시 가위바위보를하고
다시 이긴팀에게 1점 진팀에게 0점을 주는 형식을 반복하게 되면
총9점을 얻은사람은 1등 8점을 얻은사람은 2등 0점은 10등 이렇게 등수를
나눌수가 있을듯 합니다.

100명이면? 어마어마한 경우의수가 발생하겟네요 3의 100승?

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

bugiii의 이미지

그런식이라면 첫번째 비기지 않는 경우가 나올 때까지가 계산의 대부분을 차지 하겠네요?

p_teto의 이미지

bugiii wrote:
그런식이라면 첫번째 비기지 않는 경우가 나올 때까지가 계산의 대부분을 차지 하겠네요?

비기면 다시 가위바위보, 비기면 다시 가위바위보, 이런식으로 무한반복하게 됩니다.

그러다가 비기지 않는 경우가 발생할경우에 다음단계로 넘어갈수 있습니다.

비기는 경우를 아예 빼버릴경우 2진트리의 모양을 가지게 됩니다. 진팀/이긴팀

다시 진팀/이긴팀 이렇게 할경우 엄청빠른 결과값을 가지게 되지만 결국에는

이플그림은 가위바위보가 아닌 플그림이 되더군요 그냥 승자와 패자구분게임이

되어 버렸습니다. 가위바위보의 묘미는 비기는것에 있는것 같습니다. :)

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

bugiii의 이미지

교수님의 27번이라는 것은... 아마도 2명씩 조를 짜서 최종 계산한 거라고 밖에는 생각이 되지 않습니다...

p_teto의 이미지

bugiii wrote:
교수님의 27번이라는 것은... 아마도 2명씩 조를 짜서 최종 계산한 거라고 밖에는 생각이 되지 않습니다...

넵!! 저두 그렇게 생각하고 싶습니다. ㅠㅠ

아니면 무조건 이긴팀과 진팀을 구분하는 승자/패자 게임일지도 모른다는 생각도 해보구 있습니다.

이거라면 27번만에도 가능할것 같습니다. :)

전 bugiii님의 이와 같은 답변을 원하고 있던것일지도 모르겠습니다. :)

p.s 속이 시원하네요 ^^

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

bugiii의 이미지

문제의 조건이 분명하지 않다면 결국 1등부터 꼴찌까지 나열만 하면 되므로 조를 짜서 실행해도 문제가 되지 않는다고 봅니다... 결국 등수 구분하는 거니까요... 만약 조를 짜서 했는데 잘못이다 그러면 문제를 잘못 낸 교수님 잘못 아닌가요!!!

만약, 교수님의 다른 획기적인 방법이 있다면 꼭 알려주세요. 어떤 것인지 정말 궁금합니다.

p.s. saxboy 님은 주무시나요...??? 곡이 좋아서 위치를 그렇게 하신 것 아닌가요? (혼자 오버한건가...)

nanosec의 이미지

궁금한게 있는데요,
위에서 말씀하신 방법으로 한다면, 순위는 어떻게 매기나요?

일정한 승점 으로는 할 수는 없을꺼 같구요..

처음 게임엔 100점의 승점, 다음 게임엔 99.9의 승점을 배정하고 이런식으로 승점을 줄여 나가는 방법을 쓴거나,
아니면 이기면 1, 지면 0을 적어 넣어서 다 1로 되면 1등, 그다음 다 1이다가 0인 사람이 2등 이런 방식도 생각이 나구요..
어떤 방식으로 등수를 매기는지... 궁금합니다. ^^

0x2B | ~0x2B
- Hamlet

p_teto의 이미지

nanosec wrote:

처음 게임엔 100점의 승점, 다음 게임엔 99.9의 승점을 배정하고 이런식으로 승점을 줄여 나가는 방법을 쓴다면, 되지 않을까 싶은데요..

어떤 방식으로 등수를 매기는지... 궁금합니다. ^^

쿨럭~ 제가 생각한 등수 매기는것에서 중대한 오류를 발견했습니다. ㅋ..

승점을 줄려 나가는 방법을 쓸경우에 계속 져서 마지막에 게임을 하는 두사람의

점수가 가장 크게 되는 경우가 발생할수도 있게 됩니다. 이것을 방지하기 위해서는

승점의 간격의 차이를 많이 벌려 놓아야 합니다. 하지만 승점에 대해서 자세히 따져가면서

승점의 간격을 벌리는것을 계산하는것은 많은 힘이 든다고 봅니다. (플그림으로

구현은 쉽지만, 연습장과 연필을 많이 사용해야하는 경우)

이진 트리를 사용하여 이긴경우와 진경우를 구분을 하고 다시 거기서 이긴팀과

진팀을 구분하는 형식을 취하여 링크의 위치를 바꿔주는 방법을 사용하는것이

좋을것 같습니다. (구현은 어렵지만, 연습장과 연필이 별로 필요 없는경우)

다른 방법도 지금 생각이 날듯 말듯하네요. 좀더 연구해봐야 겠습니다.

점수를 주어서 마지막에 sort하는 방법과 순위 테이블을 구현해 놓고 링크시키는방법

다른 방법도 한번 생각해 봐야겠네요 :)

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

nanosec의 이미지

이기면 1 지면 0을 넣고

시합이 끝난 후에, 마지막 부터 읽고, 1인 사람이 1등, 그리고 그사람 제외 하고, 다음 번이 1인 사람이 2등 이런식으로 하면 되지 않을가요?

ㅋ 생각하고 나니, 빗트 필드에서 사람들 권한을 설정해놓고, 가져와 쓰는 프로그램을 만들어서 그런지 그런쪽으로만 생각이 나네요 ^^;;

하지만 어차피 트리로 관리하게되면, 순위는 자연히 나오게 되는군요.. ^^

0x2B | ~0x2B
- Hamlet

p_teto의 이미지

nanosec wrote:
이기면 1 지면 0을 넣고

시합이 끝난 후에, 마지막 부터 읽고, 1인 사람이 1등, 그리고 그사람 제외 하고, 다음 번이 1인 사람이 2등 이런식으로 하면 되지 않을가요?

ㅋ 생각하고 나니, 빗트 필드에서 사람들 권한을 설정해놓고, 가져와 쓰는 프로그램을 만들어서 그런지 그런쪽으로만 생각이 나네요 ^^;;

10명이서 할경우 5명이 이기고 5명이 질경우 이긴쪽에 1 진쪽에 0을 줄경우
이긴쪽 5명이 전부 걸러지는 효과가 발생할듯 하네요 ^^;;
이플그림을 작성하면서 사람이 생각하고 있는것을 플그림으로 옴기는것의 어려움을 엄청 느끼고 있습니다.
가까운 시일에 사람이 생각하는 것을 그대로 플그림을 작성해주는 툴이 나왓으면
좋겟다는 생각을 해봅니다. :)

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

nanosec의 이미지

:oops: 10명에서, 5명이 이기고 5명이 지면
0, 1 그리고 다음 개임에서 이긴 사람은
0 || 1
00, 01 || 11, 10
000, 001,,010,011 || 110,111 ,,, 100,101

을 말한건데..... 안되는군요..
:oops: :oops:

0x2B | ~0x2B
- Hamlet

p_teto의 이미지

nanosec wrote:
:oops: 10명에서, 5명이 이기고 5명이 지면
0, 1 그리고 다음 개임에서 이긴 사람은
0 || 1
00, 01 || 11, 10
000, 001,,010,011 || 110,111 ,,, 100,101

을 말한건데..... 안되는군요..
:oops: :oops:

홋~ 제가 잘못생각 했었네요 :oops:
2진수라고 생각하고 sort시켯을경우에 순위를 정할수 있을것 같습니다. :)

좋은 참고가 된듯 하네요 ^^

창조는 괴로움의 구원인 동시에 삶의 위로인 것이다.
그러나 창조하기 위해서는 그 자신의 괴로움이 따르면서
많은 변화가 요구되는 것이다. -니체

saxboy의 이미지

Quote:

p.s. 저는 impelliteri 의 somewhere over the rainbow 를 아주 아주 좋아합니다. saxboy 님은요?

p.s. saxboy 님은 주무시나요...??? 곡이 좋아서 위치를 그렇게 하신 것 아닌가요? (혼자 오버한건가...)

아직 안자고 있답니다. :-)

임펠리테리 버전을 처음 들었을 때의 쇼킹한 느낌도 잊을 수 없지만 역시 압권은 Judy Garland 의 울먹이는 오리지널이 아닐까싶어요. 사실은 이 노래 자체를 그렇게 좋아하는 편은 아니랍니다.

하지만 제가 가지고 있는 임텔리테리는 한장 뿐인데, 이 곡 때문에 샀으니 그 연주는 꽤 좋아한다고 해야겠지요. :-)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.