Я не уверен, почему Вы хотели бы сделать это во-первых. Получающийся набор для любых умеренно больших значений X и Y будет огромен, и вырастет экспоненциально как x, и/или y становятся больше.
Позволяет, говорят, что Ваш набор возможных символов является 26 строчными буквами алфавита, и Вы просите, чтобы Ваше приложение генерировало все перестановки где длина = 5. Принятие Вас не исчерпывает память, которую Вы получите 11,881,376 (т.е. 26 к питанию 5) строки назад. Удар, что длина до 6, и Вы вернете 308 915 776 строк. Эти числа становятся крайне большими, очень быстро.
Вот решение, которое я соединил в Java. Необходимо будет обеспечить два аргумента во время выполнения (соответствующий X и Y). Весело провести время.
public class GeneratePermutations {
public static void main(String[] args) {
int lower = Integer.parseInt(args[0]);
int upper = Integer.parseInt(args[1]);
if (upper < lower || upper == 0 || lower == 0) {
System.exit(0);
}
for (int length = lower; length <= upper; length++) {
generate(length, "");
}
}
private static void generate(int length, String partial) {
if (length <= 0) {
System.out.println(partial);
} else {
for (char c = 'a'; c <= 'z'; c++) {
generate(length - 1, partial + c);
}
}
}
}
Думаю, я понял это: если в чьем-то манифесте кеша есть ошибка (скажем, указанный файл не существует) , то Firefox полностью перестанет обрабатывать все, что связано с applicationCache. Это означает, что он не будет ничего обновлять в вашем кэше, включая кешированный манифест кеша.
Чтобы выяснить, что это была проблема, я позаимствовал некоторый код из Mozilla и поместил его в новый (не -cached) HTML-файл в моем приложении. В последнем зарегистрированном сообщении говорилось, что в моем манифесте кеша могла быть проблема, и, конечно же, там был (отсутствующий файл).
// Convenience array of status values
var cacheStatusValues = [];
cacheStatusValues[0] = 'uncached';
cacheStatusValues[1] = 'idle';
cacheStatusValues[2] = 'checking';
cacheStatusValues[3] = 'downloading';
cacheStatusValues[4] = 'updateready';
cacheStatusValues[5] = 'obsolete';
// Listeners for all possible events
var cache = window.applicationCache;
cache.addEventListener('cached', logEvent, false);
cache.addEventListener('checking', logEvent, false);
cache.addEventListener('downloading', logEvent, false);
cache.addEventListener('error', logEvent, false);
cache.addEventListener('noupdate', logEvent, false);
cache.addEventListener('obsolete', logEvent, false);
cache.addEventListener('progress', logEvent, false);
cache.addEventListener('updateready', logEvent, false);
// Log every event to the console
function logEvent(e) {
var online, status, type, message;
online = (isOnline()) ? 'yes' : 'no';
status = cacheStatusValues[cache.status];
type = e.type;
message = 'online: ' + online;
message+= ', event: ' + type;
message+= ', status: ' + status;
if (type == 'error' && navigator.onLine) {
message+= ' There was an unknown error, check your Cache Manifest.';
}
log('
'+message);
}
function log(s) {
alert(s);
}
function isOnline() {
return navigator.onLine;
}
if (!$('html').attr('manifest')) {
log('No Cache Manifest listed on the tag.')
}
// Swap in newly download files when update is ready
cache.addEventListener('updateready', function(e){
// Don't perform "swap" if this is the first cache
if (cacheStatusValues[cache.status] != 'idle') {
cache.swapCache();
log('Swapped/updated the Cache Manifest.');
}
}
, false);
// These two functions check for updates to the manifest file
function checkForUpdates(){
cache.update();
}
function autoCheckForUpdates(){
setInterval(function(){cache.update()}, 10000);
}
return {
isOnline: isOnline,
checkForUpdates: checkForUpdates,
autoCheckForUpdates: autoCheckForUpdates
}
Это, безусловно, было полезно, но я определенно должен запросить у Mozilla функцию, которая распечатывает искаженные кеш-манифесты по крайней мере в консоли ошибок. Не требуется специального кода для присоединения к этим событиям для диагностики такой тривиальной проблемы, как переименованный файл.
Отказ от ответственности: мой опыт с манифестами и кешем - это все, что Safari и FF могут обрабатывать некоторые вещи по-другому.
Вы совершенно правы. Если в манифесте есть какие-либо файлы, которые не могут быть найдены, кэширование не произойдет.
Даже если вы в сети, браузер проверит только файл манифеста. В ожидании файла манифеста он продолжит загрузку сайта из кеша - таким образом, это не задержит рендеринг - но это означает, что вы не увидите никаких изменений при первой загрузке.
В следующий раз сайт загружен, если манифест был изменен при предыдущей загрузке, будут загружены новые файлы.
ВСЕГДА НЕОБХОДИМО ПЕРЕЗАГРУЗИТЬ ДВАЖДЫ, чтобы увидеть какие-либо изменения. По факту, Мне иногда приходилось 3 раза перезагружать, чтобы увидеть обновление. Понятия не имею, почему.
При отладке я генерирую свой файл манифеста на лету с помощью php, поэтому нет никаких шансов на опечатку в имени файла. Я также генерирую номер версии случайным образом каждый раз, чтобы принудительно обновить, но все еще имею автономное веб-приложение для тестирования.
После завершения файл php может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш .
Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.
Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.
Я генерирую свой файл манифеста на лету с помощью php, поэтому нет никаких шансов на опечатку в имени файла. Я также генерирую номер версии случайным образом каждый раз, чтобы принудительно выполнить обновление, но у меня все еще есть автономное веб-приложение для тестирования.После завершения файл php может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш .
Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.
Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.
Я генерирую свой файл манифеста на лету с помощью php, поэтому нет никаких шансов на опечатку в имени файла. Я также генерирую номер версии случайным образом каждый раз, чтобы принудительно выполнить обновление, но у меня все еще есть автономное веб-приложение для тестирования.После завершения файл php может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш .
Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.
Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.
После завершения php-файл может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш.
Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.
Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.
После завершения php-файл может просто отображать сохраненные данные манифеста с постоянным номером версии, и всегда будет использоваться кеш.
Просто некоторые вещи, которые я недавно узнал, играя с манифестом и кешем. Он отлично работает, но может сбивать с толку.
Нет срока годности. Чтобы отключить кэш, вы должны изменить файл манифеста, чтобы в нем ничего не было, и выполнить перезагрузку. В Safari очистка пользовательского кеша приводит к удалению всех кешированных файлов.
Хм, я только что вызвал update () в кеше, после внесения изменения редактирования в файл манифеста, и получил полную последовательность проверки / загрузки / готовности, сделал одну перезагрузку и изменение текста. сделал в одном из моих js-файлов, который появляется на начальной странице моего приложения, тут же появился.
Кажется, мне нужна только одна перезарядка.