Извлекайте буквы и заполняйте пятна слова

Вы также можете создать модуль timer manager , который будет отслеживать текущие таймеры и позволит вам получать, добавлять, останавливать и останавливать все таймеры.

var timers = (function() {
  //
  var timers = []

  //
  const getIndex = (array, attr, value) => {
      for (let i = 0; i < array.length; i += 1) {
          if (array[i][attr] === value) {
              return i
          }
      }
      return -1
  };

  // add
  const add = (callback, time) => {
    var id = setTimeout(() => {
      let index = getIndex(timers, 'id', id)
      timers.splice(index, 1)
      callback()
    }, time)
    timers.push({
      id: id,
      time: time,
      debug: callback.toString()
    })
  };

  // get all active timers
  const all = () => timers

  // stop timer by timer id
  const stop = (id) => {
    if (!isNaN(id)) {
      let index = getIndex(timers, 'id', id)
      if (index !== -1) {
        clearTimeout(timers[index].id)
        timers.splice(index, 1)
      }
    }
  };

  // stop all timers
  const stopAll = () => {
    for (let i = 0; i < timers.length; i++) {
      clearTimeout(timers[i].id)
    }
    timers = []
  };

  return {
    add: add,
    all: all,
    stop: stop,
    stopAll: stopAll,
  };
})();

//
timers.add(function() {
  console.log("timeout 1 fired");
}, 1000)

timers.add(function() {
  console.log("timeout 2 wont get fired");
}, 2000)

timers.add(function() {
  console.log("timeout 3 fired");
}, 3000)

timers.add(function() {
  console.log("timeout 4 fired, timers", timers.all());
}, 4000)

timers.add(function() {
  console.log("timeout 5 fired");
}, 5000)

console.log('All timers', timers.all())

console.log("kill timer 2")
timers.stop(2)

Запустите фрагмент, чтобы увидеть его в действии.

1
задан Carl 18 March 2019 в 16:30
поделиться

2 ответа

Вам не нужен дикт, чтобы сопоставить индексы с буквами. Сама строка уже может быть проиндексирована по буквенным индексам. Вы должны перетасовать индексы вместо букв, чтобы можно было перебирать перетасованные индексы, чтобы разоблачить соответствующие буквы одну за другой:

import time
import random

word = 'administrator'

indices_shuffled = list(range(len(word)))
random.shuffle(indices_shuffled)
letters = ['_'] * len(word)
for i in indices_shuffled:
    letters[i] = word[i]
    print(''.join(letters))
    time.sleep(1)

Пример вывода:

_d___________
_d_____t_____
_dm____t_____
_dm__i_t_____
_dm__ist_____
_dm__ist_a___
_dm__ist_a_o_
adm__ist_a_o_
admi_ist_a_o_
admi_istra_o_
admi_istra_or
administra_or
administrator
0
ответ дан blhsing 18 March 2019 в 16:30
поделиться

Другое решение:

import random

word = 'administrator'
result = [[x, '_'] for x in word]
for i in result:
    res = random.choice([x for x in result if x[1] == '_'])
    index = result.index(res)
    result[index][1] = result[index][0]
    print(''.join([x[1] for x in result]))

Вывод:

____n________
____n___r____
____n_s_r____
____n_s_r__o_
____n_s_r__or
___in_s_r__or
a__in_s_r__or
a__in_str__or
ad_in_str__or
ad_in_stra_or
ad_inistra_or
ad_inistrator
administrator
0
ответ дан Alderven 18 March 2019 в 16:30
поделиться
Другие вопросы по тегам:

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