— Неужели эти отвратительные великаны разгуливают по всему свету?! — изумилась Софи. — Во все страны, кроме Гренландии, наведываются. Гренками сыт не будешь, а белых медведей побаиваются — вредные они, что твои собачонки! Вообще-то выбор страны зависит от настроения. Если великану станет жарко, он помчится на север, чтобы слопать эскимоса и охладиться. Эскимос для него, как для тебя эскимо. — Охотно верю! — воскликнула Софи. — Если же великан замёрзнет и задрожит от холода, то, скорее всего, навострит лыжи и помчится в Турцию, чтобы сходить в турецкую баню, самому погреться да заодно проглотить пару горяченьких турок прямо с пылу с жару. — Какой ужас! — испугалась Софи. Напишите программу, которая разберется в великанских диетах. Формат ввода Вводятся три строки. В первой слова разделены пробелами, во второй символами -::- и в третьей символами }{. Формат вывода Для каждого слова из первой строки выбрать: из второй строки те слова, которые по алфавиту идут позже проверяемого слова (без учета регистра) и длина которых меньше, чем у него, хотя бы на два символа; из третьей строки слова, в которых есть только буквы, нет ни цифр, ни знаков препинания, но есть хотя бы две буквы из проверяемого слова, если опять же привести к одному регистру. Выводить в формате: <Проверяемое слово>: <слова из второй строки> с большой буквы (остальные маленькие) через запятую и пробел; <слова из третьей строки> через вторую букву проверяемого слова в верхнем регистре, окруженную пробелами Если каких-то слов не оказалось, выводить пустую строку.
ответ:Для начала в onCreate() уберите эту строку:
chatContainer.clear()
Нет смысла чистить только созданный пустой список. Дальше я бы вам советовал следующим образом. Для начала при объявлении адаптера не нужно сразу ему передавать список:
lateinit var adapter: RecyclerChatAdapter
Дальше как только ваш список заполнен вы это проверяете в цикле и инициализируете адаптер:
when {
documentSnapshot != null -> {
for (dc in documentSnapshot.documentChanges) {
when (dc.type) {
DocumentChange.Type.ADDED -> {
val chat = dc.document.toObject(Chat::class.java)
chatContainer.add(chat) // Добавление данных в Recycler
if(chatContainer.size == documentSnapshot.documentChanges)
{
adapter = RecyclerChatAdapter(chatContainer)
}
}
}
}
}
}
и дальше сеттинг адаптера как и было у вас в вашем примере. Так же второй вариант как решить вашу проблему, но не уверен что получится, можно в цикле там где вы выводите сообщение в лог обновлять адаптер:
for (i in chatContainer) {
adapter.notifyDataSetChanged()
}
Если создать шаблон строки с автозаполнением, то можно немного у код:
import sys
num_steps = int(sys.argv[1])
fmt_template = '{}.{:>%d}' % num_steps
for x in range(1, num_steps + 1):
print(fmt_template.format(x, '#' * x))
При num_steps = 4:
1. #
2. ##
3. ###
4.
Объяснение:
Все аргументы функции print, указанные через запятую, выводятся разделенные пробелом, отсюда и нестыковка.
Можно так попробовать:
for x in range(1, c+1):
print('{0}{1}{2}'.format(x, " " * (c - x), '#' * x))
Для c = 3:
1 #
2 ##
3###
Либо заменить запятую конкатенацией (знак +):
print(str(x) + " " * (c - x) + '#' * x)