Ми працюємо в компанії, яка створює багатокористувацьку онлайн-гру під назвою Lexiconia.
Щоб грати, кожен гравець отримує 13 літер, які потрібно переставити, щоб скласти слова. Різні літери приносять різну кількість очок, адже з одними літерами складати слова легше, ніж з іншими.
Спочатку гра вийшла англійською, але вона дуже популярна, і тепер компанія хоче розширитися й на інші мови.
Різні мови потребують різної кількості очок за літери. Кількість очок визначається тим, як часто вживаються літери порівняно з іншими літерами цієї мови.
Наприклад, літера «C» досить поширена в англійській, і за неї дають лише 3 очки. А в норвезькій вона дуже рідкісна, і за неї дають 10 очок.
Щоб було легше додавати нові мови, нашій команді потрібно змінити те, як у грі зберігаються літери та їхня кількість очок.
Змініть формат даних про літери та їхні очки в грі.
Зараз літери зберігаються групами за кількістю очок, у звʼязку один-до-багатьох.
Це потрібно змінити так, щоб кожна окрема літера зберігалася разом зі своєю кількістю очок у звʼязку один-до-одного.
У межах цієї зміни команда також вирішила перевести літери в нижній регістр замість верхнього.
Якщо ми хочемо подивитися, як дані були структуровані раніше і як їх потрібно змінити, погляньмо на приклади в наборі тестів.
jq
Ця вправа про те, щоб узяти вхідний обʼєкт і перетворити його на новий обʼєкт. Кілька вбудованих функцій, які можуть допомогти:
to_entries
{"key": "K", "value": V}
K є ключем із вхідного обʼєктаV є відповідним значенням K.from_entries
{"key": K, "value": V} і будує обʼєктПриклад:
jq -n '
{
"username": "glennj",
"tracks": ["bash", "awk", "jq"],
"reputation": 123
}
| to_entries
'
виводить
[
{
"key": "username",
"value": "glennj"
},
{
"key": "tracks",
"value": ["bash", "awk", "jq"]
},
{
"key": "reputation",
"value": 123
}
]
Зареєструйтеся на Exercism, щоб вивчати й опановувати jq, а також 12 концепцій75 вправ та справжнє наставництво від людей, і все це безкоштовно.