@ProLua

Страница 75 из 307
Vlad
09.04.2017
00:05:05
начну с https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE

Snusmumriken
09.04.2017
00:11:48
На самом деле, есть различные способы организации порядка в таких структурах. Например: function ohash() local hash = {} local order = {} local mt = {} function mt:__newindex(key, value) rawset(self, key, value) order[#order] = key end function iter() local i, shift = 0, 0 return function() i = i + 1 if i < #hash then while not hash[order[i+shift]] do shift = shift + 1 end return i, order[i+shift], hash[order[i+shift]] end end end return = setmetatable(hash, mt), iter end Ну, это одно из нетривиальных решений. Не тестил, но должно работать примерно так: h, h_iter = ohash() h.data = 'value' h.key = 'some_data' for i, key, value in h_iter() do print(i, key, value) end

Vlad
09.04.2017
00:12:19
вообще много чему стоит поучиться в целом это я говорю о самых основах основ не идя еще в дебри

Snusmumriken
09.04.2017
00:19:07
Это более чем нормально. Есть замечательная книжка Вирта - "Алгоритмы и структуры данных". С 89 года мало что поменялось :3 Прошу прощения за такой линк, просто кому-то удобнее читать в сети. http://tka4.org/materials/lib/Articles-Books/Numerical%20Algorithms/%D0%92%D0%B8%D1%80%D1%82%20%D0%9D.%20%D0%90%D0%9B%D0%93%D0%9E%D0%A0%D0%98%D0%A2%D0%9C%D0%AB%20%D0%98%20%D0%A1%D0%A2%D0%A0%D0%A3%D0%9A%D0%A2%D0%A3%D0%A0%D0%AB%20%D0%94%D0%90%D0%9D%D0%9D%D0%AB%D0%A5.%20%D0%9C.%D0%9C%D0%B8%D1%80%201989.pdf

Google
Vlad
09.04.2017
00:20:26
спасибо, скачал

Snusmumriken
09.04.2017
00:28:15
На самом деле, есть несколько книжек, которые стоит прочитать даже будь ты пхп/делфи-кодером, который раз в месяц пишет маленькую программку/кусочек сайта. Хотя бы для того чтобы корректно понимать учебные материалы от "нормальных программистов", которые эту литературу читали. Книги выполняют куда большую роль чем образовательную, ибо задают стандарт мышления. Когда мышление людей относительно стандартизировано, коммуникация между ними значительно быстрее и точнее. Ну, и тупо понимаешь, почему этот человек написал код в примере именно так а не иначе. Сюда входит Совершенный Код Макконнелла, кучка книг Вирта, и, в идеале - Кернигана и Риччи (сишка), чтобы примерно представлять, что происходит на "низком уровне".

Vlad
09.04.2017
00:29:23
вообще спасибо за информацию, надеюсь хоть малую часть буду в состоянии понять во время изучения, а пока уже пора спать идти, удачи

Snusmumriken
09.04.2017
00:29:33
Йоу, давай удачки. Напоследок, держи восхитительную штуку от Джоеля Спольски (сейчас - глава компании разработки трелло и стаковерфлоу). Он в забавной форме жалуется на то, что нельзя абстрагироваться от всего на свете :3 http://russian.joelonsoftware.com/Articles/LeakyAbstractions.html Как раз ты столкнулся с дырявой абстракцией хеш-таблиц. Это оно самое.

Philipp
09.04.2017
10:41:37
Ну и разговрчивые вы тут, однако

Либо молчите месяц

Либо начинаете кидаться сообщениями по паре сотен символов

Психи

Alexander
09.04.2017
10:49:44
чего? разговариваем, когда есть о чем осмысленно говорить. а для разговора ради флуда и счетчика сообщений есть другие места

Vlad
09.04.2017
11:28:48
Кстати пока временами страдаю думаю мож написать каких то мелких штук каких нет в луне, нпр щас думаю как бы реализовать свич =)

Snusmumriken
09.04.2017
13:34:16
Свитч чего? Типа, ретранслятор сообщений? Или свитч-кейс?

Vlad
09.04.2017
13:35:17
switch-case

Snusmumriken
09.04.2017
13:35:20
Во.

Google
Snusmumriken
09.04.2017
13:39:14
Кстати, у меня есть забавная реализация луа-массивов. Там есть типа стрелочные функции. А свитч-кейс - это довольно просто. Функция, которой передаём табличку: a = case{ a > 0, 10, b > 0, b, c > 0, c } Функция проверяет каждый нечётный элемент, до тех пор пока он не окажется истинным, и возвращает следующий чётный. Правда, как ты понимаешь, это не очень быстро.

Vlad
09.04.2017
13:41:01
я тугенький как оно работает? a = case{ a > 0, 10, b > 0, b, c > 0, c }

Vlad
09.04.2017
13:42:02
ааа

я просто люблю писать максимально понятно и разжевано, буквально что б по названиям переменных было понятно работу целой программы, не говоря о функциях и тд, что б было максимально понятно для таких вроде меня

Snusmumriken
09.04.2017
13:43:52
function case(t) if #t%2 ~= 0 then error('Case got '..#t..' args') end for i = 1, #t, 2 do if t[i] then return t[i+1] end end end Применение как раз: a = case{ a > 0, 10, b > 0, b, c > 0, c }

Vlad
09.04.2017
13:46:47
а вроде понял тут идет типа case-do элементы таблицы идут и как условие и как ответ я просто хотел разделять по максимуму

Snusmumriken
09.04.2017
13:48:39
Да, только что созданные таблицы и строки можно передавать в функции без скобок: print'Wowow' = print('Wowow') table.concat{a, b, c, d} = table.concat({a, b, c, d}) Этот вариант прост и наиболее быстр. Если ты будешь делать что-то вроде: case{ {sw = a > b, state = b}, {sw = a < b, state = a}, } То будет плодиться охрененно много таблиц. Слишком много лишних действий. Мой вариант, конечно, требует соответствующего форматирования, но во-первых, это форматирование оправдано в любом случае, а во-вторых - работает быстрее всего остального. Кроме кучи if-else. Да, если что, в lua есть тернарники. То же самое можно написать: a = a > 0 and 10 or b > 0 and b or c > 0 and c or 10 И я регулярно их использую. Функционал тот же что у свитч-кейсов. Любой другой самописный свитчкейс будет медленнее, хотя бы по причине ленивости этих тернарников, которые выполняют условие только если оно нужно. Например: state = case{ Fast_Function(), 'yo', Slow_Function(), 'yoyo', WerySlowFunction(). 'yoyoyo' } перед выполнением выполнит все три функции, (которые очевидно возвращают true/false или какое-то значение и nil). А эта штука: state = Fast_Function() and 'yo' or Slow_Function() and 'yoyo' or WerySlowFunction() and 'yoyoyo' Будет выполнять, например, Slow_Function только если Fast_Function не выполнилась. Догадываешься о последствиях?

Philipp
09.04.2017
13:58:45
Я пока так и не научился их читать

Snusmumriken
09.04.2017
14:02:43
Смари: a = a and b —> если a == true то b, в противном случае - nil a = a or b —> если a == true то a, в противном случае - b Комбинируем: a = a and b or c —> если a == true то b, в противном случае - c. a = a and b or c and d —> если a == true то b, в противном случае - если c == true то d, а в случае если не a и не c - nil. Карочи, условие-следствие между and, альтернативные варианты - между or. Прочитай примеры которые я давал как свитч-кейс.

О, вот тебе задачка. Чему будет равна a? a = true, b = 'yo', c = nil a = b and c and 10 or 20

Vlad
09.04.2017
14:07:08
nil?

Snusmumriken
09.04.2017
14:08:04
Не а, 20. Первое условие b and c and 10 не выполняется, ибо c - nil (false). Так что 20. Если бы c выдавало true и выполнилось - было бы 10.

Google
Alexander
09.04.2017
14:08:37
я тоже так решил что 20

Vlad
09.04.2017
14:09:17
думал как то так ( (b and c) and 10 ) or 20

Snusmumriken
09.04.2017
14:09:22
На самом деле, это обычная матлогика которую проходят на первом курсе, с коньюнкцией-дизьюнкцией.

Ща покажу. a = (b and c and 10) or (20) В первом блоке - если все варианты до последнего - true - то вытаскивается последний. Если цепочка прерывается - через or переходим к следующей цепочке. a = 10 and 20 and 30 and 40 print(a) --> 40 a = 10 and 20 and false and 40 print(a) --> nil, ибо блок 'or' с альтернативами отсутствует

Советую побаловаться, в общем, и примерно понять как работает. А тернарники, которые я выдал, типа этих: a = a > 0 and 10 or b > 0 and b or c > 0 and c or 10 Можно использовать и без дословного понимания как они работают. Главное чтобы было понятно что куда пихать, и соблюдение форматирования.

Можно и вообще без них, но это чудовищно муторно: local a = n if a > 0 then a = 10 elseif b > 0 then a = b elseif c > 0 then a = c else a = 10 end Меня как раз жавы/шарпы жутко раздражают многословностью, а тут получается апогей бессмысленного многословия.

Vlad
09.04.2017
14:18:00
чета сложна

вродь всегда думал что nil, false == false и на and'e должен либо идти первый false либо дальше

Snusmumriken
09.04.2017
14:19:58
Экспериментируй ёпта. Пробуй и с nil и с false в условиях, строить и разбирать сложные штуки. Но начни с простых.

Alexander
09.04.2017
14:20:51
так and же коммутативен

Snusmumriken
09.04.2017
14:21:44
чета сложна
Хех, Саш, тут уже ответили : ) Чуть меньше умных слов, если можно. Объясняй лучше простыми, на всякий случай.

Alexander
09.04.2017
14:22:30
от перемены andуемых местами - сумма тысячи истин не меняется!

Vlad
09.04.2017
14:23:16
но ведь результат зависит от участников не?

Alexander
09.04.2017
14:23:29
*me достал Меч тысячи истин

но ведь результат зависит от участников не?
от участников - да. хотя бы одно слабое звено - и все, прощай истина.

а от перестановки их местами не меняется ничего, какая разница, где слабое звено, если цепь порвалась? )))

Snusmumriken
09.04.2017
14:25:06
Малацом :3

Последний вариант в цепочке истин - истина к которой мы приходим. Ой, последний элемент этой цепи не может быть false. Хм.

Vlad
09.04.2017
14:26:33
вродь и не страшно но пока сложно чет принять факт такой свободной перестановки

Google
Alexander
09.04.2017
14:27:34
if ( 0 != some_dangerous_variable) ....

Vlad
09.04.2017
14:28:04
https://www.youtube.com/watch?v=NOW4QiOD-oc

Snusmumriken
09.04.2017
14:28:35
a = b and c and d and true and 100500 or c and d and 100499 Цепи истины!

Если хоть один элемент цепи не истинен - это не цепь истины! Переходим к следующей, авось она будет цепью истины.

Vlad
09.04.2017
14:31:45
а, тоисть прощи говоря вне зависимости от количества все считается как одно целое, а если воткнуть где то or то он идет как разделитель?

Snusmumriken
09.04.2017
14:32:06
Угу. А переменной присваивается последний элемент цепи. Если все цепи ложны - возвращается nil.

Snusmumriken
09.04.2017
14:34:22
Если элементы цепи - функции, которые возвращают true/false, то стоит первыми выставлять быстрые функции, чтобы не совершалось лишних действий. Да, я даже так делаю: j = data and json.decode(data) if not j then return false end, как-то так. Увы, ключевые слова в тернарники не пихнёшь, в отличии от if-then-else.

Vlad
09.04.2017
14:38:40
тогда... ну не знаю вопрос : а что такое цепь и\или чем она является? в том ключе что не идет nil, а выходит значение, именно что последнее

Admin
ERROR: S client not available

Vlad
09.04.2017
14:40:49
что то такое должно дать nil при условии то все ложное? ( b and c and d and e ) or ( b1 and c1 and d1 and e1 )

все простите, последнее и на этом остановлюсь : так?

я тут немного говнокода привез о чем то примерно таком говорил, но может и case отдельно сделать function switch( values, caseValues, results ) for i = 1, #values do for j = 1, #caseValues do if(values[i] == caseValues[j]) then results[j] else -- default masage end end end end потому как с результатами кеисов каша пока

Snusmumriken
09.04.2017
15:23:44


Это выдуманная терминология, для простоты понимания. Если ты кому-то скажешь "цепочка истин" - он тебя не поймёт.

Если хоть одно звено в текущей цепи окажется ложным - мы смотрим следующую цепь.

Ну, твоя интерпретация тоже работает, только в ней мы выбираем первое истинное звено из цепи. Если всё выражение принять за цепь, а выражения с and'ами - за звенья. Звено в таком случае истинно если все его компоненты истинны. Но это уже не цепи истины, а цепи поиска истинного звена. Чувствую себя властелином колец, с "одним истинным кольцом".

Во, во! Воскресное развлекалово! Я вам пиписькомерку принёс! http://nazva.net/logic_test1/ Можно проходить забавный тест и хвастаться результатами!

Vlad
09.04.2017
15:42:32
19

Snusmumriken
09.04.2017
15:43:18
Хех, а теперь то же самое, но задумываясь над ответами :3 У меня стабильно 29, не знаю где косячу, но это один и тот же вопрос. Возможно, в котором "не надо трогать уззку"

Google
Vlad
09.04.2017
15:52:15
21

сложна карочи

Snusmumriken
09.04.2017
15:53:16
Нормуль. У тебя скорее всего проблемы с двойными отрицаниями и запутанными условиями. Тренируйся.

Vlad
09.04.2017
15:54:56
если не чесать угубка за ухом, то молоко поблизости не скиснет; если почесать угубка за ухом, молоко поблизости скиснет; что то такое ломает меня

Snusmumriken
09.04.2017
15:56:20
Если почесать - зашипит. Если зашипит - молоко скиснет. Вывод - если почесать - скиснет. Фактически, упрощение цепочки.

Philipp
09.04.2017
15:56:55
О

Vlad
09.04.2017
15:56:57
а если не чесать - не скиснет

Philipp
09.04.2017
15:57:18
У меня там 26 кажется было, если я правильно помню

Snusmumriken
09.04.2017
15:57:28
Не факт. Ты же не знаешь других условий скисания молока. Например, время.

Philipp
09.04.2017
15:57:35
Или 25

Либо 25, либо 26

Snusmumriken
09.04.2017
15:57:49
Малацом, отличный тест :3

Philipp
09.04.2017
15:57:56
Угу

Мне чаще было его лениво проходить

Чем он был сложным

XD

Snusmumriken
09.04.2017
15:59:16
Карочи, все условия в которых может быть одно, а может быть другое - ложны по умолчанию, потому что есть шанс ложного вывода. Проверяйте факты :3

В классической науке, за счёт слишком большого количества факторов которые не всегда возможно учесть, за истину принимается факт который срабатывает в 95% случаев. Если меньше (даже 94%) - оно уже ложно. А если невозможно даже посчитать шанс - точно ложно. Собственно, по этой причине, исключения не подтверждают правило, а медленно ломают его.

Vlad
09.04.2017
16:03:52
22, пойду поем ну его

черт его знает, и как натаскать себя на понимание и решение запутаных условий?

Страница 75 из 307