Класно, запис Inform7. :) Мені просто довелося спробувати це.
Я майже впевнений, що це рішення, задумане:
R is a room.
To f (n - number): say "[n * n * real square root of n]".
Зауважте, що це рішення працює лише в тому випадку, якщо його компілюють із зворотним процесом Glulx, завдяки використанню real square root of
функції.
До речі, подвійні лапки та квадратні дужки насправді непотрібні; просто say n * n * real square root of n
працювало б так само добре. Періоди в кінці команд теж можуть бути пропущені; інакше ми могли б зберегти перший період і замість цього позбутися нових рядків. Інші частини коду, які ми могли б відрізати, включають статтю "а" перед "кімнатою" та пробіли перед дужками та після двокрапки. На щастя, оскільки у нас є запасна пара дужок, ми завжди можемо використовувати їх для коментування всіх цих зайвих символів. ;) Отож, це і правильне рішення:
R is room.To f(n - number):say n * n * real square root of n[
" a . "
]
Для інтерактивного тестування цього рішення зручно додати до коду щось на зразок наступного тестового ременя:
Effing is an action applying to one number.
Understand "f [number]" as effing.
Carry out effing: f the number understood.
Після компіляції та запуску програми ви можете ввести напр f 4. f 6. f 9. f 25
. >
Підказку та отримати щось на зразок наступного виводу:
Welcome
An Interactive Fiction
Release 1 / Serial number 170404 / Inform 7 build 6L38 (I6/v6.33 lib 6/12N) SD
R
>f 4. f 6. f 9. f 25
32.0
88.18164
243.0
3125.0
>
До речі, я щойно помітив, що Inform (або, мабуть, скоріше, Glulx) округляє останнє десяткове місце f 6
неправильно: правильне значення набагато ближче до 88.18163, ніж до 88.18164. На щастя, я не думаю, що це впливає на правильність рішення (-ів), тим більше, що у виклику вказано "будь-який механізм округлення на ваш вибір". :)