Преобразование основного -числа 6 в основание -2 (двоичного )с помощью команд или программы

Если это единица измерения пользователя, используйте опцию--user-unit:

.

journalctl -f --user-unit=test_unit@random_arguments

В противном случае отфильтруйте блок с помощью _SYSTEMD_UNIT:

.

sudo journalctl -f _SYSTEMD_UNIT=test_unit@random_arguments

1
27.03.2020, 21:03
3 ответа

Как намекает Джефф в комментариях, вы можете использовать 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;
}

Вывод в десятичном формате, вы можете изменить это, изменив значение obaseвыше. Или вы можете использовать десятичное число для другой арифметики.

2
19.03.2021, 02:32

Вручную

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

Программное обеспечение

См. другие ответы и комментарии

0
19.03.2021, 02:32

Существует несколько инструментов POSIX для преобразования базы 6 в базу 2.

Тем не менее, символы в игральных костях равны 1 2 3 4 5 6, в то время как целое число с основанием -6 должно использовать только символы 0 1 2 3 4 5, разница составляет 1. Любой используемый инструмент должен учитывать это. Для одной цифры это не проблема:

Самый простой — bc (или dc ). Преобразование одной цифры может быть выполнено как:

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

Но для нескольких бросков в одной струне,как и 31256, его нужно ввести как десятичное число и вычесть 1 из каждой цифры (11111, в данном случае ), а затем повторно -ввести как базовое -6 число.

$ 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
0
19.03.2021, 02:32

Теги

Похожие вопросы