Крихка королева
Неміцна квінка - це лайка, яка задовольняє властивість створення кожної підрядки шляхом видалення одного символу, коли оцінюється, створює помилку.
Наприклад. Якщо ваша програма asdf
є кволою, такі програми повинні бути помилковими:
sdf
adf
asf
asd
Ваша програма (і всі її підрядки) повинні бути повністю детермінованими та мати однакову мову. Програма, що потрапляє в нескінченний цикл (тобто не вдається припинити), навіть якщо в кінцевому підсумку не призведе до помилки, вважається "помилкою" для цілей цього виклику.
Застосовуються стандартні лазівки, включаючи звичайні обмеження для квин (наприклад, не в змозі прочитати власний вихідний код).
Наприклад, print("foo")
не тендітний. Усі ці підрядки повинні мати помилку:
rint("foo")
pint("foo")
prnt("foo")
prit("foo")
prin("foo")
print"foo")
print(foo")
print("oo")
print("fo")
print("fo")
print("foo)
print("foo"
Ті, що не помиляються:
print("oo")
print("fo")
print("fo")
Тож воно не тендітне.
Важлива примітка про лайках
За консенсусом , будь-яка можлива квітка повинна задовольняти цьому:
Повинно бути можливим визначити розділ програми, який кодує іншу частину програми. ("Різне" означає, що обидві частини відображаються в різних положеннях.)
Крім того, квітка не повинна мати прямий чи опосередкований доступ до власного джерела.
Приклад
Оскільки я вважаю функцію # toString JavaScript "читанням власного вихідного коду", я забороняю її. Однак, якщо я не заборонив його, ось тендітна лайка у JavaScript:
f=(n=b=`f=${f}`)=>(a=(n)==`f=${f}`,n=0,a)&(n!=b)?b:q
Тестер
Ось програма, яка з урахуванням вихідного коду вашої програми генерує всі програми, які повинні помилитися.
let f = (s) =>
[...Array(s.length).keys()].map(i =>
s.slice(0, i) + s.slice(i + 1)).join("\n");
let update = () => {
output.innerHTML = "";
output.appendChild(document.createTextNode(f(input.value)));
};
input.addEventListener("change", update);
update();
#output {
white-space: pre;
}
#input, #output {
font-family: Consolas, monospace;
}
<input id="input" value="print('foo')">
<div id="output"></div>