수동

수동

물리적인 6면 주사위를 굴려서 생성된 기본 6 숫자가 있고 이를 기본 2/이진으로 변환하고 싶습니다.

이 작업을 수행할 수 있는 내장 명령이나 프로그램이 있습니까?

그렇지 않은 경우 숫자를 수동으로 변환하는 방법은 무엇입니까?

답변1

Jeff가 주석에서 암시했듯이 이를 bc기본 변환에 사용할 수 있습니다. 실제 주사위의 경우 숫자는 일반적으로 1~6인 반면 bc(및 수학)에는 0~5의 숫자가 필요하므로 이를 수동으로 처리하거나 비슷한 것을 사용하여 처리해야 합니다 tr.

111예를 들어, 이 함수는 ->0, 112->1, 121->6 등을 매핑합니다 .

f() { 
    echo "obase=10; ibase=6; $(echo $1 | tr 1-6 0-5)" | bc;
}

출력은 10진수로 표시되며 obase위의 값을 변경하여 변경할 수 있습니다. 또는 십진수를 사용하여 다른 산술을 수행할 수도 있습니다.

답변2

수동

Set total to 0
Repeat until no more roles:
  multiply total by 6 #this has no effect the first time around the loop
  role dice
  add (number on dice -1) to total

소프트웨어

다른 답변 및 의견 보기

답변3

16진수를 2진수로 변환할 수 있는 여러 POSIX 도구가 있습니다.

그러나 주사위의 부호와 1 2 3 4 5 616진수 정수는 0 1 2 3 4 5부호만 달라야 하며 둘 사이의 차이는 1입니다. 사용되는 모든 도구는 이를 고려해야 합니다. 한 자리 숫자의 경우 이는 큰 문제가 되지 않습니다.

가장 간단한 것은 bc(또는 dc)입니다. 단일 숫자의 변환은 다음과 같이 수행할 수 있습니다.

digit=5; echo "n=$digit - 1; obase=2; n" | bc

하지만 문자열로 된 여러 권의 경우에는 3125610진수로 입력하고 각 숫자에서 1을 뺀 다음( 11111이 경우) 16진수로 다시 입력해야 합니다.

$ echo "ibase=6; obase=2; $(echo "31256-11111" | bc)" | bc
101001100001

또는 텍스트로 6에서 5로, 5에서 4로 등으로 변환할 수 있습니다.

$ echo "ibase=6; obase=2; $(echo "31256" | tr 123456 012345)" | bc
101001100001

또 다른 옵션은 awk입니다.

awk -v n=31256 '
            function roll2dec(str,    ret, i, c){
        for (i = 1; i <= length(str); i++) {
                    c = substr(str, i, 1)
                ret = ret * 6 + index("23456", c)
            }
            return ret
        }
            function dec2bin(dec,    bin){
                while (dec>0){ 
                    bin = dec%2 bin;
                    dec=int(dec/2) 
                };
                return bin
            }
  BEGIN{

  print dec2bin(roll2dec(n))

  }'

101001100001

관련 정보