Редагувати: головоломка Баунті в кінці запитання.
Враховуючи набір одноцифрових чисел, слід визначити, наскільки високу вежу вони можуть побудувати.
Цифри живуть на горизонтальній площині з рівнем землі, де вони можуть стояти. Жодну цифру не хочеться плутати з багатоцифровим числом, тому у них завжди є порожнє місце з обох сторін.
4 2 1 9 6 8
Цифра може бути поверх іншої:
2
6
або може підтримуватися двома іншими діагонально під ним:
9
5 8
Нижній повинен підтримувати вагу, верхній - (якщо такий є), плюс вага верхнього - завжди 1 . Якщо є два прихильники, вони розподіляють загальну вагу верхньої частини рівномірно (50% -50%).
Вага кожної цифри 1 незалежно від її значення.
Якщо одна цифра підтримує дві інші, вона повинна мати можливість підтримувати суму відповідної ваги. Цифра може підтримувати максимум її числове значення.
Деякі діючі вежі (з висотою 4, 3і 5):
0
7 1
5 1 1 1 9 supports a total weight of 1.5 = (1+1/2)/2 + (1+1/2)/2
2 5 4 5 5
3 5 9 5 5 6 3 6 supports a total weight of 3 = 1.5 + 1.5 = (2*1+(2*1/2))/2 + (2*1+(2*1/2))/2
Деякі недійсні вежі:
1 5 The problems with the towers are (from left to right):
1 12 2 3 8 1 can't support 1+1; no space between 1 and 2;
1 5 6 1 1 1 9 1 can't support 1.5 = (1+1/2)/2 + (1+1/2)/2; 8 isn't properly supported (digits at both bottom diagonals or exactly below the 8)
Ви повинні написати програму або функцію, яка надає список цифр як вихідних виходів або повертає висоту найвищої конструкції вежі, використовуючи деякі (можливо, всі) з цієї цифри.
Вхідні дані
- Список невід’ємних одноцифрових чисел щонайменше з одним елементом.
Вихідні дані
- Єдине додатне ціле число, висота найвищої сконструйованої вежі.
- Ваше рішення має вирішити будь-який приклад тестового випадку за хвилину на моєму комп’ютері (я перевіряю лише тісні випадки. У мене ПК нижче середнього рівня).
Приклади
Формат - Input list => Output numberце можлива вежа на наступних рядках, яка не є частиною результату.
[0] => 1
0
[0, 1, 1, 1, 1, 1] => 3
0
1
1 1
[1, 1, 1, 1, 1, 2, 2] => 4
1
1
1 1
1 2 2
[0, 0, 2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9] => 9
0
2
2
5
5
5
7
7
9
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] => 9
1
2
2
3
4
5
3 3
4 4 4
5 5 5 5
[0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9] => 11
0
1
2
3
4
5
3 3
4 5
5 5
3 7 3
2 7 9 2
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] => 12
0
1
2
3
4
5
6
7
4 5
6 7
8 8
9 9
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9] => 18
0
1
2
3
4
5
6
7
8
9
5 5
6 6
7 7
4 8 4
3 7 7 3
2 6 8 6 2
2 5 8 8 5 2
3 9 9 9 9 3
Це код-гольф, тому найкоротший запис виграє.
Баунті
Я присуджу 100 банальних репутацій (не пов'язаних з уже присудженими) за вирішення розширеної проблеми нижче за багаточлен (зважаючи на довжину вхідного списку) або доводячи, що це неможливо (якщо вважати P! = NP). Деталі розширеної проблеми:
- Вхідними числами можуть бути будь-які невід’ємні цілі числа, а не просто цифри
- багатоцифрові числа займають те саме місце, що і одноцифрові числа
- багатоцифрові числа можуть підтримувати їх числове значення, наприклад,
24підтримувати24
Пропозиція щедрої дати не закінчується. Я додаю і винагороду, якщо з’явиться доказ.
3-2-5-7вежа мене бентежить. Ви говорите, що "Нижній (-ла) повинен підтримувати" вагу "," Верхній "(якщо такий є), плюс вага" Верхній ", який завжди є". 'його числове значення' - якщо вага кожної цифри одна, то який сенс мати різну кількість?