Pull to refresh
14
0
Artem Chepurnyi @AChep

A software engineer

Send message

Хм, можно и одним проходом:

class Solution {
    private data class Head(
        val direction: Int,
        var index: Int,
        var value: Int = 0,
    ) : Comparable<Head> {
        override fun compareTo(other: Head): Int = value.compareTo(other.value)
    }

    fun trap(data: IntArray): Int {
        var sum = 0

        val ltr = Head(
            direction = 1,
            index = -1,
        )
        val rtl = Head(
            direction = -1,
            index = data.size,
        )
        do {
            val smallestHead = minOf(ltr, rtl)

            val nextIndex = smallestHead.index + smallestHead.direction
            val nextValue = data
                .getOrElse(nextIndex) { 0 }
            when {
                nextValue > smallestHead.value -> {
                    smallestHead.value = nextValue
                }
                else -> {
                    val rem = smallestHead.value - nextValue
                    sum += rem
                }
            }

            smallestHead.index = nextIndex
        } while (ltr.index != rtl.index)
        return sum
    }
}
Еще одна новая функция ransomware — использование модуля машинного обучения, что позволяет зловреду определять необходимые размеры окна сообщения, адаптируя его под размеры экрана и другие особенности устройства. Поскольку моделей планшетов и телефонов на Android великое множество, то для ransomware это крайне полезное «умение».


А при чем здесь какое-то машинное обучение, если система никак не скрывает размеры экрана?
Странно что сразу не нашли связку LineageOS + MicroG.
По содержанию статья похожа на написанную человеком, который до Kotlin видел только Java.

Очень странный момент — возможность не указывать возвращаемый тип метода (особенно публичного).

fun width() = right - left

Цепочки вроде ?.let { foo(it); }?.let { bar(it); } — это вообще ад и должны быть запрещены в декларации о правах человека.

В конкретно этом примере правильнее скорее будет ?.let(::foo)?.let(::bar).

Хотел проехать по всем пунктам, но не стал. Напишу лучше только что мне самому не нравится в этом языке:
1. Такая форма записи не сработает val color: Int = 0xFFFFFFFF.
2. Наличие type-erasure доставшееся от того же JVM.
3. Ограничения с наследованием data class-ов.
3. Конфликты с методами-сеттерами и обычными полями с сеттерами.
open class Foo {
fun setValue(value: int) {}
}
class Bar: Foo() {
var value = 10
}


После Java язык как глоток свежего воздуха.
Иллидан где-то здесь!
«Вырезать», наверное.
С Новым годом!)
Это, наверное, был намек на то, что скриншоты нужно делать с полным уровнем заряда)
Нашел проблему. Оказывается, при включенной опции Offline work и доступном интернете Gradle не ищет репозитории онлайн. :/Отключил опцию и все заработало.
Не получается импортировать в проект: (Android Studio 0.9.3 / Gradle 0.14.+)
Error:Failed to find: com.github.andkulikov:transitions-everywhere:1.2.0
Скорее всего имеется ввиду удаление приложения с Маркета.
Заголовок «Google Play Книги стали доступны в Беларуси»
Когда пишу проэкт-хобби, то не заморачиваюсь поддержкой разных версий Андроид.
Также, для отображения загрузки было бы неплохо использовать стандартный Progress Bar без поясняющего текста.

И хотелось бы PullDownToRefresh из стандартной библиотеки, А не собственной реализации.
На Android обычно иконки залитые, а не полые, как сейчас.
Добавлю сюда еще:
— От иконок веет связью с iOS;

Information

Rating
Does not participate
Registered
Activity