Комбинаторика из Unicode, как сделать?

144
13 апреля 2019, 15:40

Есть такой код:

function  generate() { 
 document.getElementById("myTable").innerHTML = ""; 
      const numbers = (new Array(25)).fill(1).map((a, i) => a + i); 
      let resultSet = new Map(); 
      while (resultSet.size < 1000) { 
        let nums = shuffle(numbers).slice(0, 5); 
        let key = (nums.sort() + ''); 
        resultSet.set(key, nums); 
      } 
      resultSet.forEach(val => { 
        const main = createTableWithContent(val.join('-'), "one"); 
        const additional = createTableWithContent(randInt(), "two"); 
        main.append(additional); 
        document.getElementById("myTable").append(main); 
      }) 
    } 
     
    function shuffle(arr) { 
      return arr.map(el => { 
        return { 
          item: el, 
          sort: Math.random() 
        } 
      }).sort((a, b) => a.sort - b.sort).map(el => el.item); 
    } 
     
    function randInt(min = 1, max = 4) { 
      return Math.floor(Math.random() * (max - min + 1)) + min; 
    } 
     
    function createTableWithContent(content, className) { 
      const tableEl = document.createElement("TABLE"); 
      tableEl.className = className || ""; 
      tableEl.append(content); 
      return tableEl; 
       
    }
<input class="annoying-btn" type="button" value="Получить комбинацию" onclick="generate()" /> 
<div id="myTable"></div>

Как переделать код так, чтобы вместо чисел составлялись комбинации из unicode символов из этого раздела:

https://unicode-table.com/ru/blocks/playing-cards/

Не понимаю, как сделать массив генерированных Unicode символов.

Answer 1

Существует N = С(52, 8) = 752538150 комбинаций карт.

Можно сгенерировать 1000 неповторяющихся случайных чисел в этом диапазоне и сопоставить каждому числу комбинацию.

В данном случае количество комбинаций очень мало по сравнению с диапазоном, поэтому можно не заморачиваться с хитрыми подходами, а просто проверять, есть ли уже такое число в наборе (map) сгенерированных.

Пусть комбинация представлена 64-битным числом. Тогда один набор можно сгенерировать, проверяя, что очередной генерируемый случайный бит не совпадает с уже имеющимся, пока не наберётся 8 установленных битов (выбрано 8 карт).
А комбинация записывается в мап с проверкой, не было ли ещё такой, пока не наберётся 1000 комбинаций

пример на Python с уменьшенными числами (в комментах - что должно быть):

import random
combs = {}
while len(combs) < 10:  #1000
    cardset = 0
    cnt = 0
    while cnt < 4:      #8
        r = 1 << random.randrange(8)  # 52
        if (cardset & r) == 0:
            cardset = cardset | r
            cnt += 1
    if not(cardset in combs):
        combs[cardset] = 0
for x in combs:
    print(bin(x))
 0b1101100
 0b11101
 0b1001101
 0b1011010
 0b110011
 0b10111
 0b110101
 0b10001101
 0b10001011
 0b10101001
READ ALSO
как проверить на отрицательное число

как проверить на отрицательное число

Помогите пожалуйста, как на JavaScript проверить отрицательное числоПри введение отрицательного число проверить в условии при строгом равенстве

168
Подскажите модульную систему js

Подскажите модульную систему js

Начал программировать на js, но опыта малоХотелось бы как на php иметь аналогию с классами

159
Проверка наличия файла в директории с помощью jQuery в приложении Flask

Проверка наличия файла в директории с помощью jQuery в приложении Flask

Есть приложение FlaskВ части Python происходит обработка файла

168
Ajax. Как получить идентификатор?

Ajax. Как получить идентификатор?

Подскажите как добавить в код id, я так понимаю дело в нём, потому что редактирование происходит только после перезагрузки страницыСпасибо)

151