@Fsharp_chat

Страница 625 из 772
Evgeniy
30.06.2018
09:21:53
https://sergeytihon.com/2018/06/30/f-weekly-26-2018-guide-to-f-async-and-common-hazards

Roman
30.06.2018
11:47:00
Hi

mute
30.06.2018
11:47:24
+

я настоящий. не баньте)

Google
Vasily
30.06.2018
11:59:03
Замьютить можем

Roman
30.06.2018
12:01:45
Замьютить можем
Всмысле? Зачем?)

Vasily
30.06.2018
12:10:56
Шутка осталась непонятой :)

Vlad
30.06.2018
12:11:19
Всмысле? Зачем?)
ник посмотри)

Roman
30.06.2018
22:02:40
Привет!

евроневидимка
30.06.2018
22:03:21
Здарова

Andrew
30.06.2018
22:04:42
И вам привет )

Vladimir
01.07.2018
08:24:43
Кажется я нашел идеальную задачу чтобы разносить в пух сишарпистов)

Write some code, that will flatten an array of arbitrarily nested arrays of integers into a flat array of integers. e.g. [[1,2,[3]],4] -> [1,2,3,4].

Vladimir
01.07.2018
08:47:22
В том то и фишка, надо сделать свой тип чтобы натянулись)

в итоге на фшарпе выходит 6 строк кода + еще 6 чтобы в консольке пример запустить

Google
Vladimir
01.07.2018
08:49:44
а на сишарпе страшно представить

Kirill
01.07.2018
08:50:30
а динамики?

тоже, конечно, мало не будет

Vladimir
01.07.2018
08:51:49
ага, плюс потеряется типизация

Ayrat
01.07.2018
09:01:05
а в каком виде предполагается инпут?

если для F# предполагается сразу массив DU (а DU = массив или число), то нечестно опять к C#

если строкой и надо парсить, то ваще забей. Если массив объектов, то туда сюда

Vladimir
01.07.2018
09:03:00
не указано в задаче, должен придумать, возможно ты его сам генеришь в рантайме

ну или да - откуда-то приходит строка

Vasily
01.07.2018
09:05:33
На c# через рефлексию делается

Ayrat
01.07.2018
09:06:55
да не

Vladimir
01.07.2018
09:07:21
Ayrat
01.07.2018
09:07:47


а не, не хватит. но мысль понятна

хардкастами приводить к int[]

даже без проверок

упадёт - значит инпут плохой) надо в начале пытаться привести к int[], потом к int, затем уже к object[]

Vladimir
01.07.2018
09:10:53
инпут же есть ([[1,2,[3]],4] -> [1,2,3,4]), можешь сразу вместе с кодом консольки выложить на гист

Ayrat
01.07.2018
09:11:52
в сишарпе так инпут нельзя сделать

там надо new[] {1,2,3}

Google
Vladimir
01.07.2018
09:12:18
new obj[]

Ayrat
01.07.2018
09:14:38


вот этого должно хватить ещё и генерик

Vladimir
01.07.2018
09:15:12
Но по-хорошему там надо сделать интерфейс и две имплементации

Friedrich
01.07.2018
09:15:30
Не, слишком срамное решение. Я бы и C#-программисту предложил сделать свой тип для элемента массива.

Ayrat
01.07.2018
09:16:11
работает и тоже 4 строчки)

единственное унижение здесь - стак оверфлоу на рекурсии

Vladimir
01.07.2018
09:19:13
нужен гист чтобы сравнить)

Ayrat
01.07.2018
09:19:41
что сравнить?)

Vladimir
01.07.2018
09:20:25
имплементации) и запустить же хочется тоже)

Ayrat
01.07.2018
09:20:44
public static T[] Flatten<T>(object[] arr) => arr.SelectMany(o =>{ if (o is T t) return new[] {t}; try { return (T[]) o; } catch { return Flatten<T>((object[]) o); }}) .ToArray(); так пойдёт?

Vladimir
01.07.2018
09:20:57
хотя бы так

Ayrat
01.07.2018
09:21:24
инпут я не осилил сделать

Friedrich
01.07.2018
09:24:18
Предлагаю в качестве входных данных давать obj[] и заодно сравнить, насколько хорошо будет выглядеть паттерн-матчинг в обоих языках для разбора в пользовательский тип.

Vladimir
01.07.2018
09:25:12
инпут я не осилил сделать
new object[] { new object[] { 1, 2, new object[] { 3 } }, 4 };

Anna
01.07.2018
09:31:01
На racket ещё проще такую задачу решать :)

Ну или на любом лиспе

Friedrich
01.07.2018
09:32:06
Ну или на любом лиспе
Кроме наггума! Потому что там честная система типов.

Ayrat
01.07.2018
09:47:26
шарплаб с моей имплементацией и инпутом от Vladimir справляется.

Google
Ayrat
01.07.2018
09:47:50
так что задача на унижение C# не катит

Ещё лучше сделаль: https://sharplab.io/#v2:EYLgZgpghgLgrgJwgZwLRIMaOQSwG4SoAOsMECAdsgDQAmIA1AD4ACADAAQsCMA3ALAAodl24A6ADI4KARwHCAzKIBsXAEyiA7BwDeQjgY77DPVQHtgAKwgYYAbQC6HMshgcAvBwoQA7hwvWto66Xr7+Vjb2Tjoc3NQcavHefgGRwTFKAL4cmfEALDnyhkaCxSxKplwFPAAcABQAlLrGxQZ4UAgcSMgezigwYgDKEAA2kQCyUBQAnnUAYiOkEBQAPNIwAHwNYgAqZgCCCAhQsw1FrQY8AJx13WctOQ8PlTvBC0urOxt1qbb+Te4Nv4OMgfDgYBgABYPPSlC4cHbODxA5LpGC5B7FV5OGA9QHOGiYwy/KL+PFAszIIajCZTWbvGBkT5bXYHI4nRrUIkGAD6yOckIQZj8yQ4AFEAB4YCBEGA4MwUOoAIh8QooAHMONIiHAYEqGg9MvJMkA



Vladimir
01.07.2018
10:11:14
тут создается слишком много массивов, на каждый элемент массив

Ayrat
01.07.2018
10:11:51
это мелочи

Dmitry
01.07.2018
10:13:48
А у меня концептуальный вопрос про эту задачу - а каким способом надо было прийти к наличии такой структуру на входе (что её породило) и к необходимости её "разгладить"? Т.е. может проще было бы концептуально поправить в другом месте? (я так понимаю, мы что-то парсим, но если мы имеем контроль над тем, что парсится, может не порождать такие форматы данных?)

Vladimir
01.07.2018
10:20:17
Ayrat
01.07.2018
10:21:14
можно пример?)
замени T[] -> IEnumerable<T> ToArray() удали

Vladimir
01.07.2018
10:22:53
Не компилится

Ayrat
01.07.2018
10:24:44
Не компилится
https://sharplab.io/#v2:EYLgZgpghgLgrgJwgZwLRIMaOQSwG4SoAOsMECAdsgDQAmIA1AD4ACADAAQsCMA3ALAAodl24A6ADI4KARwHDOPACzyWAZlEA2LgCZRAdg4BvIRzMdT5ntoD2wAFYQMMANoBdDmWQwOAXg4UEADuHHaOzu7GAcGhDk6uHkYc3NQcOqmBIWHxkUkaAL4c+alKRfLmFoIV6lpcpTwAHAAUAJTGlhVmeFAIHEjIfp4oMGIAyhAANvEAslAUAJ5NAGITpBAUADzSMAB8LWIAKjYAgggIUIst5Z1mPACcTf1XHUUvL9aiahsHOxwra5sfk1ss5Qm1fL8bBxkEEcDAMAALF4mKo3DgHTx+X6ZXIwYovCoHSIwAYQzw0AnmEEJUKkyHIMaTGZzRb/GBkQF7aiUswAfSxngRCBsIUyHAAogAPDAQIgwHA2ChNABEQWFFAA5hxpEQ4DBlS0Xvl5PkgA==

Pavel
01.07.2018
10:31:26
все равно же массив на каждый элемент создается)
static IEnumerable<object> flatten(object x) { if (x is object[] xs) foreach (var e in xs.SelectMany(flatten)) yield return e; else yield return x; }

Ayrat
01.07.2018
10:31:35
а, я понял о чём ты, ну собсно и чо? yield и погнали

вон @deexpp уже сделал

ты к мелочам придираешься)

ты сказал что это задача на унижение C#

я чот не нашёл унижения

Vladimir
01.07.2018
10:38:47
я чот не нашёл унижения
ты вынужден делать динамическую типизацию

Ayrat
01.07.2018
10:39:00
обожемой

Google
Ayrat
01.07.2018
10:39:17
Это внутренности метода

Снаружи вполне дженерик функция. А инпут объектный потому что, извините. в F# такая же бодяга

Vladimir
01.07.2018
10:42:32
а должна быть функция которая принимает вложенные массивы интов

а не что угодно еще

Ayrat
01.07.2018
10:46:13
Это звучит не очень, т.к. ты затачиваешь инпут под свой тип, который ты объявил в F#.

и потом говоришь что теперь задачу решать проще. Я согласен проще, но это абсолютно нечестно

Pavel
01.07.2018
10:47:05
а должна быть функция которая принимает вложенные массивы интов
ну ты тип то в f# объяви сначала и желательно без DU

Vladimir
01.07.2018
10:48:22
static IEnumerable<object> flatten(object x) { if (x is object[] xs) foreach (var e in xs.SelectMany(flatten)) yield return e; else yield return x; }
вот такой инпут уже не прокатывает var x = new object[] { 0, new object[] { 1, 2, new object[] { 3 } }, 4, new int[] { 6, 7 } };

Pavel
01.07.2018
10:49:13
ну с DU объяви. съэконосмь пару строк

вообще нарисовал бы сначала полный пример на эфе

а то на ходу условия меняешь

Vladimir
01.07.2018
10:51:50
https://gist.github.com/Lanayx/43265b03e5cf5aa31baaca3a1126def9

Ayrat
01.07.2018
10:51:58
а то на ходу условия меняешь
соглашусь. Если это типа ката на кодирование, то инпут для всех языков должен быть одинаковым

ну вот ты себе тестовый массив сделал вида, который только в F# и будет доступен

Vladimir
01.07.2018
10:53:08
так я и говорил что инпут можешь сам себе создать

Pavel
01.07.2018
10:53:26
т.е. ты сишников решил унизить примером использования List<_> в F# :)

Страница 625 из 772