Вступ
Розглянемо сітку таких символів f A\/
, як
f f f
A
A / \
\ / A
A \/
/
\/
де:
f
являє собою кран, який виливає струмінь води внизA
роздвоює потік води вище, тому рівно половина йде вліво і рівно половина йде вправо\
зміщує потік води вправо на одну одиницю/
зміщує потік води вліво на одну одиницю- комбінації
\/
створюють корито з нескінченною ємністю, що збирає над ним потоки води [space]
порожній простір, ніж вода може просуватися
Виходячи з цього, ми можемо уявити шлях, який пройшла би вода ( *
), коли вона виходить зі змішувачів і потрапляє або в жолоби, або в зону сітки:
f f f <-- first second and third faucets
* * *A*
* *A*/ \*
\*/ * *A <-- a '*' is not drawn to the right of this A because it would be out of the 9×7 bounds
* *A*\/ <-- upper trough
**/ *
\/ * <-- lower trough
Якщо припустити, що три змішувачі виводять однакову кількість води одна за одною, ми можемо це бачити
- Вся вода першого крана йде до нижнього жолоба.
- Одна половина води другого крана йде до нижнього жолоба, а інша половина розділяється між нижньою жолобкою і падає з сітки.
- Одна чверть води третього крана йде до нижнього жолоба, одна чверть випадає з нижньої частини сітки, одна чверть йде у верхнє жолоб, а одна чверть випадає з сітки праворуч.
З цього можна сказати, що (1 + 3/4 + 1/4 + 1/4) / 3 = 75%
вода потрапляє в жолоби і (1/4 + 1/4 + 1/4) / 3 = 25%
випадає з сітки.
Виклики
Ви можете виконати будь-які або всі ці виклики, пов'язані з цією установкою потоку води ASCII. Усі вони - код-гольф, найкоротша відповідь на кожен виклик - переможець. Прийнятою відповіддю буде особа, яка виконає більшість проблем, із загальною довжиною коду як краватка.
Завдання 1
Напишіть програму, яка видає частину води, яка стікає в жолоби для заданої сітки. Вихід з прикладу вище був би просто 0.75
.
Завдання 2
Напишіть програму, яка, даючи сітку, малює *
місця в місцях течії води, як я це робив вище. Не слід перезаписувати нічого, крім символів пробілу, а сітка не повинна змінювати розмір. Тож на щось подібне
f
/A
нічого не потрібно робити, оскільки, хоча вода тече з обох боків А, її не можна витягнути ліворуч, не виймаючи, /
і її неможливо втягнути вправо, не зробивши сітку 2 × 2 більшою.
Завдання 3 (оновлено)
Напишіть програму, яка приймає дві невід’ємні цілі числа, загальну кількість T та кількість, яка має зберегти K (T> = K). Створіть та намалюйте сітку саме з такоюf
такою, що коли цей змішувач вилиє Т одиниці води, точно K перетече в жолоби. Якщо це неможливо зробити в кінцевій сітці для певної пари (T, K), тоді виведіть "Неможливо".
Роз'яснення (стосується всіх викликів)
- Введення може здійснюватися через stdin, або файл, або навіть функціональний виклик у рядковому представленні сітки. Просто дайте зрозуміти, як запускати різні входи.
- Вихід повинен перейти до stdout.
\A
іA/
іAA
також западини , як і слід було очікувати.- Сітка w by h завжди буде добре відформатованим прямокутником з w * h символів, не рахуючи нових рядків. Не буде пропущених пробілів і жодних подій
*
. - Розміри сітки можуть бути як 1 × 1, так і довільно великими. (Довільно велике в межах причини, int.maxValue або подібного є прийнятною межею. Те саме стосується T і K.)
f
Прямо через нього тече потік над потоком.- Змішувачі можуть бути де завгодно, не тільки у верхньому ряду.
A
завжди ділить кількість вилитої на нього води рівно навпіл.
Примітка. Такі речі подобаються /A
і //
цілком дійсні. Вода робить вільно перетікати між символами (хоча для завдання 2 там не вистачає місця , щоб зробити це).
Отже, в налаштуваннях
ff
/A
Лівий f
потік ллється вниз, б'є /
і зміщується вліво. Правий f
потік ллється вниз, б'є A
, половина йде праворуч, а половина йде ліворуч між A
і /
.
напр
ff
**
*/A*
** *
** *
/A
якщо вода потрапляє на воду A
. Для всіх викликів було б добре уточнити, чи \A
це корито. Для третього виклику, чи слід A
вважати , що 3 одиниці, що падають на припущення, розбиваються 1.5 / 1.5
(тож вхід є дійсно єдиним раціональним числом) чи це 2 / 1
, у такому випадку, яка сторона отримує 2
?
A
то обидві сторони отримують 1,5. Це залежить від кодера, щоб переконатися, що точність поплавця не є проблемою.)
f
с