Size: a a a

Kotlin Community

2021 January 06

AM

Andrew Mikhaylov in Kotlin Community
LevT
Exercise 1.6.2.2 An integer n is called a “3-factor” if it is divisible by only three different integers j
such that 2 ≤ j < n. Compute the set of all “3-factor” integers n among n ∈ [1, ..., 1000] .

- сделано

fun solution(seq: Sequence<Int>) = seq.filter {(2..it).count { j -> it % j == 0 } == 3}
solution((1..1000).asSequence()).toList()

Exercise 1.6.2.3 Given a function f: Int => Boolean, an integer n is called a “3- f ” if there are only
three different integers j ∈ [1, ..., n] such that f (j) returns true. Define a function that takes f as an
argument and returns a sequence of all “3- f ” integers among n ∈ [1, ..., 1000]. What is the type of that
function? Implement Exercise 1.6.2.2 using that function.
Давайте поставим себе задачу в первом решении абстрагировать "трёхфакторность".

Сначала просто выделим это в функцию:
fun is3Factor(number: Int): Boolean = (2..number).count { j -> number % j == 0 } == 3
fun solution(seq: Sequence<Int>) = seq.filter(::is3Factor)
println(solution((1..1000).asSequence()).toList())

Потом сделаем так, чтобы наш solution снова стал чистым, явно передав эту функцию в качестве параметра:
fun is3Factor(number: Int): Boolean = (2..number).count { j -> number % j == 0 } == 3
fun solution(seq: Sequence<Int>, f: (Int) -> Boolean) = seq.filter(f)
println(solution((1..1000).asSequence(), ::is3Factor).toList())
источник

AM

Andrew Mikhaylov in Kotlin Community
Я, к сожалению, не знаю, как ещё можно было подвести к этому намёками, не давая ответ на следующую задачу. Но у вас там впереди, я полагаю, ещё много других задач, на которых вы сможете самостоятельно одерживать победы :)
источник

⋑ 404 ⋐ in Kotlin Community
Здравствуйте!
Подскажите как запретить нажатие кнопки назад и вывести определённый фрагмент с подтверждением выхода?
источник

AM

Andrew Mikhaylov in Kotlin Community
⋑ 404 ⋐
Здравствуйте!
Подскажите как запретить нажатие кнопки назад и вывести определённый фрагмент с подтверждением выхода?
источник

⋑ 404 ⋐ in Kotlin Community
Кнопкой back с лева
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
Я, к сожалению, не знаю, как ещё можно было подвести к этому намёками, не давая ответ на следующую задачу. Но у вас там впереди, я полагаю, ещё много других задач, на которых вы сможете самостоятельно одерживать победы :)
Благодарю за реальную помощь

Насчёт же остального:

 я горжусь не количеством (творчески, за неопределённое время) решённых задач (уникальных и кем-то мне поставленных)
,
а уровнем проблем (типичных для людей в сходных обстоятельствах), которые умею решать гарантированно (за константное время и механически ).

Моя задача - поднять этот уровень неважно как.
Чтобы применять сэкономленные творческие когнитивные способности в более интересных областях
источник

⋑ 404 ⋐ in Kotlin Community
Запретить выход из приложения
источник

AM

Andrew Mikhaylov in Kotlin Community
⋑ 404 ⋐
Запретить выход из приложения
Я вам уже написал, куда идти с этим вопросом. Будете продолжать оффтоп разводить — придётся применять санкции.
источник

AM

Andrew Mikhaylov in Kotlin Community
LevT
Благодарю за реальную помощь

Насчёт же остального:

 я горжусь не количеством (творчески, за неопределённое время) решённых задач (уникальных и кем-то мне поставленных)
,
а уровнем проблем (типичных для людей в сходных обстоятельствах), которые умею решать гарантированно (за константное время и механически ).

Моя задача - поднять этот уровень неважно как.
Чтобы применять сэкономленные творческие когнитивные способности в более интересных областях
Ну, не вопрос :) Я точно знаю, что есть люди, которые расстраиваются, получив ответ вместо той самой подсказки, после которой сами последний шаг делают, потому и оговорку эту написал. Если вы не огорчены — тем лучше!
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
Ну, не вопрос :) Я точно знаю, что есть люди, которые расстраиваются, получив ответ вместо той самой подсказки, после которой сами последний шаг делают, потому и оговорку эту написал. Если вы не огорчены — тем лучше!
Ага, мой "адреналин" не тут
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
Давайте поставим себе задачу в первом решении абстрагировать "трёхфакторность".

Сначала просто выделим это в функцию:
fun is3Factor(number: Int): Boolean = (2..number).count { j -> number % j == 0 } == 3
fun solution(seq: Sequence<Int>) = seq.filter(::is3Factor)
println(solution((1..1000).asSequence()).toList())

Потом сделаем так, чтобы наш solution снова стал чистым, явно передав эту функцию в качестве параметра:
fun is3Factor(number: Int): Boolean = (2..number).count { j -> number % j == 0 } == 3
fun solution(seq: Sequence<Int>, f: (Int) -> Boolean) = seq.filter(f)
println(solution((1..1000).asSequence(), ::is3Factor).toList())
Перевёл обратно на скалу:

def is3Factor(number: Int): Boolean = (2 to number).count(j => number % j == 0) == 3
def solution (list: List[Int]) = list.filter(is3Factor)
solution((1 to 1000).toList)

def is3Factor(number: Int): Boolean = (2 to number).count(j => number % j == 0) == 3
def solution(list: List[Int], f: Int => Boolean): List[Int] = list.filter(f)
solution((1 to 1000).toList, is3Factor)

1) Котлиновские рефакторинги в идее пока что глюкодром, по сравнению со скальными.
2) В скале оставил перебор списка а не сиквенса - как в учебнике.
3) Наглядно вижу, что скала толерантна к двум одинаковым функциям
is3Factor
(умееет переопределять?), для котлин компилера это двусмысленность

Прошу подсказать, чему тут ещё можно поучиться. Котлиновская идиоматика? Оптимизации?
источник

L

LevT in Kotlin Community
Да, переписать лямбды с it / _ я и сам могу.
Котлиновская идиоматика - я имею в виду ресиверы например
источник

AM

Andrew Mikhaylov in Kotlin Community
LevT
Перевёл обратно на скалу:

def is3Factor(number: Int): Boolean = (2 to number).count(j => number % j == 0) == 3
def solution (list: List[Int]) = list.filter(is3Factor)
solution((1 to 1000).toList)

def is3Factor(number: Int): Boolean = (2 to number).count(j => number % j == 0) == 3
def solution(list: List[Int], f: Int => Boolean): List[Int] = list.filter(f)
solution((1 to 1000).toList, is3Factor)

1) Котлиновские рефакторинги в идее пока что глюкодром, по сравнению со скальными.
2) В скале оставил перебор списка а не сиквенса - как в учебнике.
3) Наглядно вижу, что скала толерантна к двум одинаковым функциям
is3Factor
(умееет переопределять?), для котлин компилера это двусмысленность

Прошу подсказать, чему тут ещё можно поучиться. Котлиновская идиоматика? Оптимизации?
2) В принципе фиолетово, сиквенсы там или списки будут. Можно при желании хоть iterable взять, тогда можно будет передать Int progression без to*
3) Вы в скале это в REPL делаете? Если нет, я плохо понимаю, за счёт чего там нет конфликта -- у функций идентичные сигнатуры.
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
2) В принципе фиолетово, сиквенсы там или списки будут. Можно при желании хоть iterable взять, тогда можно будет передать Int progression без to*
3) Вы в скале это в REPL делаете? Если нет, я плохо понимаю, за счёт чего там нет конфликта -- у функций идентичные сигнатуры.
В скратче делаю, да, наверное репл
источник

AM

Andrew Mikhaylov in Kotlin Community
Какую идиоматику вы тут хотите увидеть, я не берусь судить. Ресиверы, как я писал уже, тут выглядят не к месту, что ещё можно было бы подсказать -- не знаю.
источник

AM

Andrew Mikhaylov in Kotlin Community
Когда доберётесь до монад в котлине -- можно на библиотеку Arrow посмотреть, она тайпклассы помогает эмулировать.
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
Когда доберётесь до монад в котлине -- можно на библиотеку Arrow посмотреть, она тайпклассы помогает эмулировать.
Знаю )
Но вы правы: нефиг забегать вперёд батьки-учебника
источник

DK

Denis Kalinochkin in Kotlin Community
Andrew Mikhaylov
Когда доберётесь до монад в котлине -- можно на библиотеку Arrow посмотреть, она тайпклассы помогает эмулировать.
А зачем нужны тайпклассы, когда есть интерфейсы?
источник

с#

саша сок #KotlinGang... in Kotlin Community
Denis Kalinochkin
А зачем нужны тайпклассы, когда есть интерфейсы?
кек.
источник

L

LevT in Kotlin Community
Denis Kalinochkin
А зачем нужны тайпклассы, когда есть интерфейсы?
Чтобы узнавать не только итерабле, но и гораздо более абстрактное поведение
Которое уже много людей узнаёт и умеет припрячь - а мы ещё в потёмках
источник