🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku Set by ChanServ on 14 October 2019. |
|||
00:13
pecastro left
00:15
xelxebar left,
tejr left
00:17
redhands_001 left
|
|||
coldpress | guifa: thanks again, that's very helpful. I just wish the Raku docs mentioned the more common term "scan", instead of "triangular reduce" | 00:21 | |
00:22
tejr joined,
xelxebar joined
00:32
frost-lab joined
|
|||
guifa never knew that it was called a scan until reading the article | 01:00 | ||
I efinitely would have related scan with something else | |||
01:01
guifa left
01:25
wamba left
01:26
wamba joined
01:30
lucasb left
01:37
BenGoldberg joined,
klapperl_ joined
01:39
klapperl left
01:40
MasterDuke left
01:51
jmchael left
01:57
wamba left
|
|||
coldpress | guifa: fair enough | 02:00 | |
tellable6 | coldpress, I'll pass your message to guifa | ||
02:07
Black_Ribbon joined
|
|||
tbrowder | .tell jmerelo "you da man!" | 02:16 | |
tellable6 | tbrowder, I'll pass your message to jmerelo | ||
03:07
evalable6 left,
linkable6 left,
tellable6 left,
tellable6 joined
03:10
linkable6 joined,
evalable6 joined
03:28
leont left
|
|||
moon-child | m: print [\-] ^6 | 04:17 | |
camelia | 0 -1 -3 -6 -10 -15 | ||
04:22
maggotbrain joined
04:29
guifa2 joined
|
|||
coldpress | today's advent of raku is cute and I love it | 04:48 | |
05:29
evalable6 left,
linkable6 left
05:31
linkable6 joined
05:32
evalable6 joined
05:35
jcallen left
05:36
hobbs left
|
|||
notandinus | oof raku is coming too much in my way today | 05:36 | |
how do i make a list mutable? | 05:37 | ||
i'm taking it from a file with IO.lines.map(*.comb.cache) | |||
it is a list within a list | 05:38 | ||
05:39
jcallen joined
05:40
hobbs joined,
hobbs left,
hobbs joined
05:45
Ben_Goldberg joined,
BenGoldberg left,
Ben_Goldberg is now known as BenGoldberg
05:47
rindolf joined
|
|||
notandinus | i just added .Array to the map and it works fine | 05:56 | |
06:14
jmerelo joined
|
|||
coldpress | notandinus: are you doing AoC? | 06:15 | |
06:15
ufobat joined
|
|||
guifa2 | Lists are unmutable, Arrays are mutable. | 06:15 | |
tellable6 | 2020-12-11T02:00:53Z #raku <coldpress> guifa: fair enough | ||
guifa2 | coldpress: I kind of regret not giving my article thisyear more of a Christmas theme | 06:24 | |
But tbrowder++ for today's advent calendar post | |||
notandinus | coldpress: yeah | 06:28 | |
i feel i would've finished earlier if i knew about lists and arrays | |||
guifa2 | Basically, Lists/Maps are unmutables, and Arrays/Hashes are the mutable equivalents | 06:29 | |
(Lists/Maps also don't containerize, and that's technically the difference — if you add a scalar container to a List, that particular item *is* mutable) | 06:30 | ||
06:53
aluaces joined
|
|||
notandinus | i see, i'll read up on it | 06:58 | |
coldpress: i'm andinus on advent-of-raku repository that you have | 06:59 | ||
i have my own repo so i add solutions at once after a few days | 07:00 | ||
07:02
BenGoldberg left,
Ben_Goldberg joined,
Ben_Goldberg is now known as BenGoldberg
|
|||
notandinus | is there a shorthand for "if $x and $x == 1" ? | 07:04 | |
coldpress | notandinus: I'm wondering how mutable arrays solve today's AoC. I thought the solution requires immutable arrays | ||
notandinus | coldpress: you need to change the seat position to occupied/unoccupied right? | ||
coldpress | yes, but you need to change all of them at once | 07:05 | |
so mutating only one element in the array of seats will give you the wrong result | |||
notandinus | yeah, my solution is very messy. what i did was to copy the input in other array (@hi) and check if seat is occupied/unoccupied with @hi and reflect the changes in @input | ||
^ loop this again till @hi eq @input | 07:06 | ||
my part 2 is still running, been 7 minutes since i started it. | |||
coldpress | oh, right, the other array has to be mutable | 07:07 | |
jmerelo | notandinus: Well, $x == 1 will do pretty much the same. You can precede it with "with $x" if you want. | ||
tellable6 | 2020-12-10T23:23:36Z #raku <tbrowder> jmerelo the latest source is here: github.com/tbrowder/advent2020/blo...dvent.html | ||
2020-12-10T23:25:14Z #raku <tbrowder> jmerelo same title: Santa Claus TWEAKs with a Class | |||
2020-12-11T02:16:52Z #raku <tbrowder> jmerelo "you da man!" | |||
coldpress | just realized I have a huge performance penalty with a 2D array | ||
notandinus | jmerelo: how would you use it in postfix, like so "say 'hi' if $x and $x == 1"? | 07:08 | |
coldpress: i see, 2d array meaning @input[$y][$x] thing? | 07:09 | ||
07:09
parabolize left
|
|||
notandinus | m: my $x; say 'hi' if $x == 1; | 07:11 | |
camelia | Use of uninitialized value of type Any in numeric context in block <unit> at <tmp> line 1 |
||
notandinus | m: my $x; say 'hi' if $x and $x == 1; | ||
camelia | ( no output ) | ||
notandinus | ^ this thing i want to shorten | ||
07:22
guifa2 left,
guifa2 joined
|
|||
guifa2 | 'and' has an extremely low precedence | 07:23 | |
so you have | |||
(say 'hi' if $x) and ($x == 1) | 07:24 | ||
coldpress: lizmat improved performance on 2D arrays a lot if you're building from source -- 60x improvements I believe she said | |||
notandinus | ah i see, that's why it wasn't working | 07:25 | |
guifa2 | && has higher | ||
no-n | and has low blood pressure | ||
it needs to eat something salty | |||
notandinus | guifa2: what would be a better way to write: | ||
m: say 'hi' if ($x and $x == 1) | 07:26 | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Variable '$x' is not declared at <tmp>:1 ------> 3say 'hi' if (7⏏5$x and $x == 1) |
||
guifa2 | m: my $x; say 'hi' if $x && $x == 1 | ||
camelia | ( no output ) | ||
notandinus | ^ yeah this, is there something that shortens 'if $x && $x == 1' to 'something $x == 1' ? | ||
guifa2 | Unfortuantely precedence of with is too high to use "if $x == 1 with $x" | 07:29 | |
If you're going to use it a lot | |||
notandinus | i see, i think i'll just use && then, i thought there will be something in base | 07:30 | |
issue is that you'll have to change the variable at 2 places | |||
guifa2 | sub infix:<=?=> (\a, \b) { a && a == b }; my $x; my $y = 1; say "hi" if $x =?= 1; say "hello" if $y =?= 1; | ||
evalable6 | hello | ||
guifa2 is afk | 07:32 | ||
notandinus | i see, this is nice, thanks | ||
jmerelo | guifa2: cool | 07:34 | |
07:40
patrickb joined
07:52
sena_kun joined,
webstrand left
07:54
domidumont joined
08:01
wamba joined
08:07
sjm_uk joined
|
|||
coldpress | guifa2: thanks for letting me know, I'll just do a 1D array for now | 08:07 | |
08:09
pecastro joined
08:11
stoned75 joined
08:14
pecastro left
08:24
Sgeo left
08:30
BenGoldberg left
08:32
BenGoldberg joined
08:35
stoned75 left
08:36
abraxxa left
08:37
abraxxa joined
08:51
stoned75 joined
09:06
BenGoldberg left
09:07
Altai-man joined
09:09
BenGoldberg joined
09:10
sena_kun left
09:11
pecastro joined
|
|||
guifa2 | notandinus: oh, I thought of another way you could do it | 09:12 | |
Can't believe I didn't think of it sooner | |||
my $x; say "hi" if $x ~~ 1 | |||
m: my $x; say "hi" if $x ~~ 1; $x = 1; say "hi" if $x ~~ 1 | 09:13 | ||
camelia | hi | ||
notandinus | guifa2: ah i see, that's nice thanks | 09:14 | |
guifa2++ | |||
guifa2 | ~~ is the smartmatcher, the idea is each class will do what makes the most sense (not sure if you've come across it too much yet) | 09:16 | |
notandinus | ~~ was discouraged in perl so i don't use it much | 09:20 | |
so @t ~~ @h will do what i want? | 09:21 | ||
09:21
poga left
|
|||
notandinus | m: my @t = ^2; my @h = 0, 1, 2; say @t ~~ @h; | 09:21 | |
camelia | False | ||
notandinus | m: my @t = ^2; my @h = ^2; say @t ~~ @h; | 09:22 | |
camelia | True | ||
notandinus | m: my @t = ^2; my @h = 0, 1; say @t ~~ @h; | 09:23 | |
camelia | True | ||
notandinus | m: my @t = ^2; my @h = 1,0; say @t ~~ @h; | ||
camelia | False | ||
notandinus | oh nice | ||
i saw a literate programming article for raku with ob-raku, does anyone have a link for it? can't find it | 09:25 | ||
ah i found it, was on raku-advent blog raku-advent.blog/2020/12/03/day-3-...with-raku/ | 09:29 | ||
guifa2 | notandinus: yeah, smartmatching definitely had some issues in perl | 09:33 | |
notandinus | guifa2: will ~~ have speed penatly ? | 09:35 | |
guifa2 | notandinus: probably minimal | 09:36 | |
it might involve a single extra method call | |||
$a ~~ $b is the same as doing $b.ACCEPTS($a) | |||
ACCEPTS(Any:D: Any:U) is, I believe always false | 09:37 | ||
moon-child | you can also use | 09:38 | |
m: my $x; say 'a' if $x eqv 3; $x = 3; print 'b' if $x eqv 3; | |||
camelia | b | ||
guifa2 | ACCEPTS(Numeric:D $a: Numeric:D $b) is probably just defined as { $a == $b } | ||
moon-child | which has the (arguable advantage that) | 09:39 | |
which has the (arguable) advantage that | |||
m: say <a b c> ~~ 3, <a b c> eqv 3 | |||
camelia | TrueFalse | ||
09:41
BenGoldberg left
|
|||
guifa2 | moon-child++ | 09:41 | |
09:41
BenGoldberg joined
|
|||
notandinus | i see, i'll use eqv then, it also works on lists | 09:44 | |
m: say ^2 | |||
camelia | ^2 | ||
notandinus | m: my @t = ^2; my @p = ^2; say @t eqv @p | ||
camelia | True | ||
moon-child | m: say (^2).eager | 09:46 | |
camelia | (0 1) | ||
moon-child | m: say (^2).eager eqv ^2 | 09:47 | |
camelia | False | ||
moon-child | gotta be careful | ||
notandinus | yeah it says that on docs, | 09:49 | |
m: say (^2).eager ~~ (^2) | |||
camelia | True | ||
notandinus | hmm i see | ||
09:50
lizmat_ joined
|
|||
moon-child | you can also use eq, although if you're worried about performance that's probably an even worse idea | 09:50 | |
09:53
lizmat left
10:10
BenGoldberg left
|
|||
notandinus | is Int and int different? | 10:31 | |
i was reading this raku-advent.blog/2020/12/10/day-10...formances/ and they call int as Native type and Int as explicit object type, what's the difference?? | 10:32 | ||
tadzik | Int is an int in a scalar container, which allows you to modify it | 10:41 | |
(as in: modify its contents rather than reassign it) | 10:42 | ||
...or something like that :P My Raku's a bit rusty these days, I may be messing something up | |||
10:42
brtastic1 joined
10:45
brtastic1 is now known as brtastic
10:46
asymptotically joined
10:49
lizmat_ is now known as lizmat
10:56
literal_ is now known as literal
|
|||
jmerelo | tadzik notandinus int is a native container, which is mapped to the architecture int. Int is a Raku int, which has infinite precision. Both are containers, unlike the intxx, which don't, as tadzik says. | 10:59 | |
11:01
brtastic left
|
|||
tadzik | ah, I almost got it :P | 11:02 | |
lizmat | except that native ints are only conceptual containers, they don't actually have a container, they're essentially just memory somewhere | ||
with objects pointing to them | 11:03 | ||
m: sub a(\a) { say a.VAR.name }; my $i = 42; a $i # a proper container with a name | 11:06 | ||
camelia | $i | ||
lizmat | m: sub a(\a) { say a.VAR.name }; my int $i = 42; a $i # NOT a container | ||
camelia | No such method 'name' for invocant of type 'Int'. Did you mean any of these: 'base', 'none', 'note', 'Num'? in sub a at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
11:13
squashable6 left
|
|||
jmerelo | lizmat: ah. But a container by any other NAME... | 11:14 | |
11:14
squashable6 joined
|
|||
jmerelo | lizmat: sorry, couldn't help it. | 11:14 | |
coldpress | damn, I think the biggest overhead in today's AoC is using functional programming to calculate the neighbors' indices | 11:21 | |
guifa2 | Also, working with native ints can sometimes be tricky. I would recommend against using them unless you reach a point where speed is worth the extra trouble of strict typing and and dealing with some of the other oddities of native ints | 11:33 | |
11:37
guifa2 left
|
|||
lizmat | what guifa2 said | 11:47 | |
tbrowder | hi, diff subject: wordpress, advent, Pod::To::HTML, question: | 11:50 | |
does anyone have a mustache template, css, etc. setup for Pod::To::HTML that would do nicely on the raku advent wordpress site? | 11:53 | ||
11:53
ufobat_ joined
11:56
ufobat left
11:59
leont joined
12:00
cgfbee joined
|
|||
notandinus | coldpress: can you share your solution for today's AoC ? | 12:14 | |
12:20
abraxxa left
12:21
asymptotically left
12:24
asymptotically joined
12:26
Altai-man left,
Altai-man joined
12:27
jmchael joined,
squashable6 left
12:30
squashable6 joined
12:35
wamba left
|
|||
tadzik | I can show you mine, but it's in Rust :) | 12:39 | |
notandinus | sure, i just want to see how others solved it, mine is too slow | 12:44 | |
tadzik: | |||
12:47
orinthe9 joined
12:48
orinthe left,
orinthe9 is now known as orinthe
|
|||
notandinus | will hashes be better for memoization ? | 12:52 | |
compared to arrays | |||
12:52
frost-lab left
|
|||
lizmat | notandinus: if your lookup key can be in integer, then yes | 13:03 | |
notandinus | i see, also how do i do the deepcopy thing? | ||
tadzik | notandinus: git.tadzik.net/tadzik/aoc2020/src/...n/day11.rs | 13:05 | |
I don't uses any sort of memoization in there, fwiw | |||
the first two functions in there are the interesting bits | |||
notandinus | yeah i was talking about memoization in relation to yesterday's puzzle | 13:06 | |
tadzik | I now see that I could actually refactor it to use raycasting in both cases, just shorter in the first | ||
oh, I solved it in a very hacky way D: | |||
git.tadzik.net/tadzik/aoc2020/src/...y10.rs#L33 | 13:07 | ||
13:08
sena_kun joined
|
|||
[Coke] wonders what the origins of .rotor are. | 13:09 | ||
13:10
Altai-man left
|
|||
[Coke] | m: say (1..50).rotor(1,2=>-1,3=>-2, :partial) | 13:10 | |
camelia | ((1) (2 3) (3 4 5) (4) (5 6) (6 7 8) (7) (8 9) (9 10 11) (10) (11 12) (12 13 14) (13) (14 15) (15 16 17) (16) (17 18) (18 19 20) (19) (20 21) (21 22 23) (22) (23 24) (24 25 26) (25) (26 27) (27 28 29) (28) (29 30) (30 31 32) (31) (32 33) (33 34 35) (3… | ||
lizmat | [Coke]: you mean the name? | ||
[Coke] | name & functionality. first time I'd seen it was Raku | 13:11 | |
I find it a useful tool for solving certain types of problems, but never would have thought to put it in the toolbox. | 13:12 | ||
is it from Enigma? | 13:13 | ||
lizmat | first commit mentioning " rotor" is a29614c54bb5e96 | ||
linkable6 | (2015-04-23) github.com/rakudo/rakudo/commit/a29614c54b shim in .rotor(Pair) for transition to gapishness | ||
lizmat | well, that's an association that I have as well | ||
(linking it to the Enigma machine) | |||
13:18
sacomo joined
13:31
brtastic1 joined
13:34
brtastic1 is now known as brtastic
13:48
orinthe2 joined
13:49
orinthe left,
orinthe2 is now known as orinthe
|
|||
notandinus | can i compile raku script like it does with the modules? | 13:54 | |
moritz | last I tried it, you could compile it, but then couldn't run the result :/ | 13:56 | |
notandinus | i see, i wanted to see how much faster it becomes | 13:57 | |
tadzik | a common hack is putting it all in the module and just importing that in a file | 14:07 | |
github.com/ugexe/zef/blob/master/bin/zef | |||
the startup will get faster, but I don't think it will improve the actual runtime | |||
14:09
brtastic left
14:19
Sgeo joined
14:21
brtastic joined
14:39
jmerelo left
14:42
codesect` joined
14:44
brtastic left,
hal99999 joined
14:47
codesections left
|
|||
notandinus | how could i count the number of '#' characters in an array of arrays? | 14:49 | |
i know i could always loop over it, are there better ways? | 14:50 | ||
14:51
orinthe4 joined
|
|||
lizmat | join them and then .comb('#').elems ? | 14:51 | |
14:51
cpan-raku left
14:52
cpan-raku joined,
cpan-raku left,
cpan-raku joined,
orinthe left,
orinthe4 is now known as orinthe
|
|||
notandinus | lizmat: thanks, direct .comb('#).elems also works fine | 14:55 | |
14:55
hal99999 left
|
|||
notandinus | m: my @a = (1, 3), (1, 2); say @a.comb(1).elems; | 14:55 | |
camelia | 7 | ||
tadzik | huh | ||
notandinus | m: my @a = (1, 3), (1, 2); say @a.comb(1) | ||
camelia | (1 3 1 2) | ||
notandinus | hmm | 14:56 | |
maybe it works fine with strings | |||
lizmat | notandinus: yeah, but that may actually get a warning in the future :) | ||
notandinus | m: my @a = ('#', 'l'), ('#'); say @a.comb('#').elems; | ||
camelia | 2 | ||
lizmat | see: github.com/rakudo/rakudo/issues/4098 | ||
notandinus | lizmat: i see, i'll join them before then | ||
tadzik | what's it doing with ints? | ||
ah | |||
14:57
hal99999 joined
|
|||
notandinus | yeah what is it doing with ints? is it treating 1 as true or something? | 14:57 | |
lizmat | it's stringifying the ints before applying the .comb | ||
14:58
ggoebel left
|
|||
notandinus | m: my @a = (1, 3), (1, 2); say @a.comb('1') | 14:58 | |
camelia | (1 1) | ||
notandinus | i see | 14:59 | |
what is RSC? | 15:00 | ||
tyil | Raku Steering Council | ||
notandinus | so it steers the way raku goes? | 15:01 | |
i see,nvm | 15:02 | ||
tyil | we discuss (and optionally vote) on things if the community can't reach concensus | 15:03 | |
notandinus | i see, thanks | 15:05 | |
15:14
brtastic joined
15:17
brtastic left
15:18
brtastic joined
|
|||
notandinus | is 7% time spent of GC fine? | 15:32 | |
it says 1250 collections occured + 7 full collections | 15:33 | ||
lizmat | that feels... not very optimal | 15:35 | |
but it all really depends | |||
15:41
parabolize joined
|
|||
notandinus | if there is an array that i declare on every subroutine call, should i make it a global var so that the over head of creating the array doesnt slow down my program? | 15:43 | |
the array is same for all function calls | |||
or is there another way to do this? | 15:44 | ||
tyil | notandinus: there's always another way to do it :) | ||
notandinus | maybe this causes high GC calls thing | ||
i see, how could i do it? global variables are bad right? | 15:45 | ||
tyil | I generally avoid them, yes | ||
can you show your code? | |||
tadzik | a state variable may help you | 15:46 | |
those are probably smart enough to only be allocated once, for obvious reasons :) Though it probably wouldn't be a state per se in your case | |||
notandinus | here: it's AoC day-11 part 1, i'll add part 2 code later on | ||
paste.debian.net/hidden/d086afa3/ | |||
i see, i'll checkout state thing | 15:47 | ||
tyil | I presume you're talking about my @directions? | ||
notandinus | tyil: right | ||
can that be causing high GC calls? | 15:48 | ||
tyil | yeah, iirc it's just making it `state @directions` to use a state variable instead, alternatively you can declare my @directions outside of the sub, and pass it as an argument | ||
notandinus: I don't know the core well enough to make a statement on whether it'll improve the GC situation | |||
lizmat | if the @directions array is lexically visiible for the sub, you don't need to pass it as an argument | 15:49 | |
notandinus | i see, thanks, i'll profile it again & see if there's any improvements | 15:50 | |
tyil | lizmat: that would require it being a global variable here, right? | ||
lizmat | m: my @foo = ^10; sub a($value) { @foo.push($value) }; a 42; dd @foo | ||
camelia | Array @foo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 42] | ||
notandinus | oh i see, thats nice | ||
lizmat | I would consider an "our" variable a global one, as it would be accessible from other scopes by name | 15:51 | |
notandinus | but i'm writing the code under sub MAIN, does that change anything? | ||
lizmat | the above @foo is just a lexical at the "global" level if you will | ||
but it could well be within another scope, as long as the sub lives inside that scope | 15:52 | ||
tadzik | if you don't want it to really be global then there's a Perl 5 trick that could come in handy... | ||
lizmat | m: { my @foo = ^10; sub a($value) { @foo.push($value) }; a 42; dd @foo } | ||
camelia | Array @foo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 42] | ||
notandinus | red call frames = bad and green call frames = good right? talking about the profiler | ||
lizmat | yeah, read means unoptimized | ||
tadzik | m: { my @not-global; our sub foo { @not-global.gist.say } }; foo | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared routine: foo used at line 1 |
||
tadzik | oh, that's not a thing anymore? :( | ||
notandinus | ttm.sh/dCU.png and what is Scalar and BootHash here? | ||
lizmat | BOOThashes are the implicit *%_ that method calls have, usually | 15:53 | |
the Scalar allocations are just that: you seem to create a lot of variables | |||
or elements in an array or hash :-) | 15:54 | ||
notandinus | i see, yeah i change it a lot of times, does that count too? | ||
changing hash would be faster than changing array right? | |||
ttm.sh/dCl.png | 15:55 | ||
lizmat | well, changing the value of an element in a hash requires a hash lookup | ||
which is inherently more expensive than indexing into an array | |||
tadzik | indexing arrays may be one of the only things faster than indexing hashes ;) | ||
notandinus | i clicked on Scalar view allocations and it shows this ^, i'm not using any push statement | ||
i see, | 15:56 | ||
lizmat | hmmm... odd... Array.push should optimize | ||
notandinus | is that push interal raku thing? because i'm not doing any pushing | 15:58 | |
lizmat | ah? | ||
tadzik | you are growing your @changed array by adding things to it, which presumably does pushes under the hood | ||
lizmat | guess I do need to look at your code :) | ||
tadzik | I wonder if cloning it first and then editing it later would perform better | ||
notandinus | tyil: the state thing made the whole thing faster | ||
tadzik: i'll test that | 15:59 | ||
The profiled code ran for 410946.37ms. Of this, 36202.65ms were spent on garbage collection (that's 8.81%). | |||
tadzik | though it's probably not a continous blob in memory, so it may turn out similar | ||
notandinus | ^ state thing | ||
The profiled code ran for 600864.29ms. Of this, 47310.08ms were spent on garbage collection (that's 7.87%). | |||
without state thing ^ | |||
tadzik | oh wow, it's taking its sweet time, innit | ||
notandinus | GC went from 1248 to 1220 | 16:00 | |
lizmat | notandinus: my Int ($x-max, $y-max) = (@seats[0].end, @seats.end); looks like dead code to me ? | ||
notandinus | lizmat: ah dead as in i should move it out of the loop right? | ||
makes sense | 16:01 | ||
lizmat | you're setting $x-max and $y-max but not using it ? | ||
notandinus | i'm using it in line 15 and 18 | 16:02 | |
lizmat | I meant inside of adjecent-occupied sub | ||
notandinus | oh right that is dead for now, i think i added it for part 2 | 16:03 | |
lizmat | also: I would separate the x and Y directions into separate "global" arrays | 16:04 | |
actually, you know the size of the matrix, right ? | |||
notandinus | yeah, it's fixed | ||
also, i just put it outside the subs to make it global right? | 16:05 | ||
i did tha | |||
lizmat | yeah | ||
you could actually think of using a 1 dim array for this | |||
notandinus | also just by doing the 'state' thing number of red frame calls decreased by half | 16:06 | |
lizmat: i see, i'lll checkout dim arrays | |||
lizmat | then the check for adjacentness would be a single integer value | ||
and if you'd make the array allow for an empty slot at each side of the "line" | 16:07 | ||
you wouldn't even need to test boundaries | |||
16:08
brtastic left
|
|||
notandinus | hmm i searched for dim array in docs, didn't find it, can you link to what it is? | 16:09 | |
16:09
brtastic joined
|
|||
tadzik | I think lizmat means a one dimensional array: (1, 2, 3, 4, 5, 6) rather than ((1, 2, 3), (4, 5, 6)) | 16:09 | |
but then you need to calculate what your offsets need to be depending on the number of elements in each row | 16:10 | ||
notandinus | ah i see, yeah ^ | 16:11 | |
lizmat | yeah, but they'd just depend on the dimensions | ||
notandinus | is there a way to get it 2 by 2? | ||
tadzik | 2 by 2? | ||
notandinus | lizmat: so you're saying i do it my @dimensions = ( -1, 0, -1, +1 ..) etc? | ||
tadzik | the element directly above would be offset by $row-length rather than by (0, -1) | 16:12 | |
notandinus | tadzik: i mean if i can iterate over 2 elems of array instead of only 1 then i can make it a dim array | ||
ah | |||
tadzik | (if we're thinking about the same thing) | ||
notandinus | i get it, so you want me to make the whole thing dim array? | ||
so i just remove the .comb thing? | 16:13 | ||
makes sense | |||
lizmat | he... reminds me of the days I was working on a DoD maze :-) | 16:14 | |
notandinus | whats DoD maze? | 16:15 | |
wow making it global array completed the thing in just 4m instead of 6min | |||
i'll profile it to see what changed | |||
lizmat | basically a game where you walk around in a maze and encounter dragons and other monsters | 16:16 | |
notandinus | ttm.sh/dCo.png | ||
m6locks | nethack ftw | 16:17 | |
notandinus | this is allocations thing when i changed it to state ^ | ||
all red became green + yellow | |||
lizmat | yup, and you got rid of the dead code in the sub > | ||
? | |||
notandinus | lizmat: i see, nice | ||
tadzik | notandinus: well, to be honest, I'm not sure if a 1-dim array (the 1 is crucial: all arrays have dimensions, your have two so far :)) would actually make it faster | ||
it could be an interesting experiment thoughu :) | |||
notandinus | lizmat: dead code is there in this profile, next profile won't have dead code | ||
i profiled this before you told me of that | 16:18 | ||
tadzik: i see, i'll test it | |||
m6locks | 1 dim array of 8, the top 3, the one left, the one right, the bottom 3, then sum elements to see if >3 | 16:20 | |
notandinus | yeah i'll do that after this profile completes, | 16:21 | |
16:22
orinthe left
|
|||
notandinus | wait, does profiling slow down raku? | 16:22 | |
tadzik | oooh, I thought you meant the entire thing as a one-dim array | ||
notandinus | without profiling it took 3 min, with it took 6min | ||
tadzik | I'm confused, I'll now shut up :D | 16:23 | |
notandinus: yeah, it does have an overhead | |||
notandinus | tadzik: yeah 1 dmin array of entire thing right? | ||
tadzik | it needs to spend some time counting all these stats :) | ||
notandinus | wait, i too understood that | ||
tadzik | notandinus: I'm not sure what's the idea anymore :D | ||
notandinus | m6locks: you mean 1 dmin array of the whole thing right? | ||
tony-o | .tell patrickb sent you an email | ||
tellable6 | tony-o, I'll pass your message to patrickb | ||
16:25
cpan-raku left,
cpan-raku joined,
cpan-raku left,
cpan-raku joined
|
|||
m6locks | notandinus: yes, if the whole thing is the 3x3 square to be checked | 16:26 | |
notandinus | ok making @directions global made 1095 gc calls | ||
red calls increased by a bit | |||
16:26
orinthe joined
|
|||
notandinus | tadzik: see, it's the whole thing | 16:26 | |
m6locks: yeah that | 16:27 | ||
however the overall frame calls decreased | |||
hmm and allocations decreased by lot | 16:28 | ||
i'll now implement 1 dim array thing | |||
16:31
ufobat_ left
16:33
orinthe6 joined
16:35
orinthe left,
orinthe6 is now known as orinthe
16:36
kensanata joined
16:47
jmerelo joined
|
|||
notandinus | ok i finally implemented 1 dim thing | 16:51 | |
here is the code: paste.debian.net/hidden/80478d0f/ | 16:52 | ||
anything that should be changed on first glance? | |||
woah the code is lot faster, it completed in 1m 23s | 16:53 | ||
tadzik | wow, nice :) | ||
notandinus | i'm profiling it now | ||
codesect` | is there a decent way to dwim in this code: | ||
m: my @a[2;2] = (1,2;3,4); my @b[2;2] = (4,5;6,7); @a «+» @b # want [[5,7], [9,11]] | |||
camelia | Potential difficulties: Useless use of «+» in sink context at <tmp>:1 ------> 3= (1,2;3,4); my @b[2;2] = (4,5;6,7); @a 7⏏5«+» @b # want [[5,7], [9,11]] |
||
codesect` | m: my @a[2;2] = (1,2;3,4); my @b[2;2] = (4,5;6,7); say @a «+» @b # want [[5,7], [9,11]] | ||
camelia | Type check failed in binding to parameter '@dims'; expected Positional but got Any (Any) in block <unit> at <tmp> line 1 |
||
codesect` | that is, to use «+» or similar to add each element of shaped arrays | 16:54 | |
tadzik | notandinus: I wonder if passing arrays to adjacent-occupied() like you do isn't making a copy of them each time: probably a shallow copy, but still. It could give you some wins if you pass it, um, differently, but my raku knowledge eludes me now and I don't know what to suggest you | 16:55 | |
but from what I see, you only use @directions in adjacent-occupied(), not in MAIN(). So you could try making it global and using that global in the adjacent-occupied(), just to see if there'll be some savings | 16:56 | ||
notandinus | tadzik: to compute @directions, i need $row-length which is bound to MAIN sub | ||
tadzik | notandinus: oh, right | ||
notandinus | should i make both global? | ||
tadzik | well, you won't know the value until main runs :) | 16:57 | |
that's a silly idea after all | |||
notandinus | i see, yeah, can i make @directions global from whitin main sub? | ||
tadzik | but I don't remember the name or the syntax for this "pass by reference" thing that I have in mind, for the lack of a better term | ||
well, you could define your own sub inside the main sub | |||
notandinus | oh wait, or should i just put adjacent-thigng in main sub? | ||
tadzik | and then it'll have access to its locals, yes | ||
notandinus | hah i'll do that then | 16:58 | |
tadzik | not sure if it's worth it, but maybe worth trying :) | ||
notandinus | red frames went down from 13106524 to 104217 | ||
tadzik | also, `@seats eqv @changed;` probably involves a lot of looping and checking: have you considered a `my Bool $changed = False` that you set to true if anything changes? | ||
notandinus | GC was havled | 16:59 | |
tadzik: i see, i'll implement that too | |||
should i make a post compiling all of this? | |||
16:59
maggotbrain left
|
|||
tadzik | like a blog post? That would be quite interesting | 16:59 | |
notandinus | also is sharing profiler data safe? does it include sensitive information that i might now want to share? | 17:00 | |
tadzik | not unless you have passwords in your code, I think :P | ||
or sensitive file/directory names, possible | |||
notandinus | i see, ok then i'll put the profiler output too, i'll now make those changes | 17:01 | |
tadzik | another potential GC saving, not sure how effective it'll be though: instead of copying the whole @seats immediately, build a list of changes, and then apply them all to the existing array. This could give you a win, but most likely only if the amount of changes per step is quite small, which will probably not be the case here | 17:02 | |
notandinus | inling the sub sped it up by a bit, not much | 17:04 | |
i'll implement the checking now & then this thing you shared ^ | 17:05 | ||
17:07
Altai-man joined
|
|||
notandinus | tadzik: it would still make it little faster right? if instead of copying whole @seats, i just apply the changes | 17:08 | |
surprisiingly there is not much change after changing 'eqv' to a Bool '$change' variable | |||
^ i'm saying this by comparing `time' output | |||
tadzik | notandinus: I guess so: although you'll still need to allocate space for the list of changes, which will also need a copy of all the coordinates to apply these changes to | ||
I guess eqv is smarter than I thought :) | 17:09 | ||
17:10
sena_kun left,
MasterDuke joined
|
|||
notandinus | tadzik: i meant @changed will only contain the changes and i'll loop over it with it's index to apply the changes to @seats | 17:14 | |
wouldn't that be abit faster because @changed will be smaller | 17:15 | ||
tadzik: maybe `time' is not able to mesaure that small change, i'll profile 'eqv' vs bool later | |||
also looks like there is some issue with the code, it contains ' ' in between | 17:16 | ||
i mean the arrays are seperated by ' ' | |||
tadzik | notandinus: depends on how much smaller it'd be :) | ||
if every cell changes, or almost every cell, it'll probably be a waste of time | 17:17 | ||
notandinus | i see, yeah, how do i remove these stray ' ' that entered my @seats? | ||
it's repeating after every row | |||
tadzik | did it? Or is it just how it's printed? | ||
notandinus | yeah it did, i checked it with .raku | ||
tadzik: yeah also the seats change by large margins so i think it might not be much helpful | 17:18 | ||
ok i checked @inputs, doesn't have stray ' ', looks like .comb introduces them | 17:19 | ||
m: my @t = "hi", "b", "y"; my @l = @t.comb; say @l.raku; | 17:21 | ||
camelia | ["h", "i", " ", "b", " ", "y"] | ||
notandinus | look ^^ | ||
what is causing this? | 17:22 | ||
hmm wait or am i using the wrong fucntion? | |||
hmm .flat.comb too doesnt fix it, looks like it's comb's behaviour | 17:23 | ||
.join.comb should fix it | |||
m: my @t = "hi", "b", "y"; my @l = @t.join.comb; say @l.raku; | |||
camelia | ["h", "i", "b", "y"] | ||
notandinus | yeah | 17:24 | |
oof the logic is wrong, i need to do some more checking | 17:28 | ||
tobs | notandinus: comb is a stringy method. If you apply it to an array, that array will be stringified first, which adds spaces between the elements. That's why you saw the additional space earlier between "b" and "y". | 17:31 | |
17:31
wamba joined
17:34
orinthe6 joined
17:35
orinthe left,
orinthe6 is now known as orinthe
17:36
domidumont left
18:02
melezhik joined
18:05
guifa2 joined
|
|||
notandinus | tobs: makes sense, thanks | 18:09 | |
18:15
melezhik left
|
|||
notandinus | tadzik: eqv is very smart, it works better than recording change in Bool | 18:16 | |
i compared the profiler outputs | |||
oof but this 1 dim array is too hard, it prints correct output for sample but fails on actual input | 18:23 | ||
i think i'll go back to arrays of arrays later, night 0/ | |||
notandinus going awa | 18:24 | ||
18:24
wamba left
18:26
maggotbrain joined
18:27
maggotbrain left
|
|||
tadzik | notandinus: hah, interesting | 18:27 | |
'night! | |||
18:39
wamba joined
18:51
webstrand joined
18:54
jmerelo left
19:04
aindilis` joined,
sjm left
19:05
aindilis left
19:18
sjm joined
19:46
sjm_uk left
20:06
aindilis` left
20:07
aindilis joined
20:39
Kaiepi left,
Kaiepi joined
|
|||
coldpress | notandinus: I can't share my AoC solution now that I realized most of my performance loss is because I did too many unnecessary computations | 20:47 | |
it's my fault for writing the code wrongly, not the languages fault of 1D/2D arrays | |||
but I'll show you once I fixed it | 20:48 | ||
20:49
bbkr joined
|
|||
bbkr | Hi. Can someone make Advent Calendar main column wider? Currently 2/3 of screen space is wasted and also some code sections do not fit in narrow column (must be scrolled horizontally). Thanks! | 20:53 | |
21:04
kensanata left
21:08
sena_kun joined
21:09
Altai-man left
|
|||
tadzik | bbkr: it gets a lot better in firefox's reader mode, fwiw :) | 21:10 | |
21:41
RaycatWhoDat joined
|
|||
RaycatWhoDat | Howdy. Do you think it's possible to learn more than 3 programming languages to proficiency? | 21:43 | |
guifa2 | If people can learn 3+ human languages to proficiency, I think three PLs isn't too much :-) | 21:45 | |
RaycatWhoDat | that's fair | ||
Grinnz | as with most things, it depends how much effort you want to expend and how intuitive you find each language | 21:46 | |
guifa2 | Of course, the question of defining proficiency comes up too. I can read C and C++ code, and can muck with them, but I wouldn't start my next big project in them, just like I'm not going to write a novel in Mirandese, though I can read it just fine lol | ||
21:51
MasterDuke left
21:52
hal99999 left
|
|||
RaycatWhoDat | Hmm | 21:53 | |
21:56
rindolf left
21:59
wamba left,
wamba joined
22:10
sena_kun left
22:21
asymptotically left
22:26
patrickb left,
Geth left,
Geth joined
22:29
wamba left
22:39
brtastic left
22:40
webstrand left
22:43
hal99999 joined
23:02
hal99999 left
23:11
ape666 joined
23:14
ape666 left
23:23
ape666 joined
23:27
rir left
23:31
stoned75 left
|
|||
RaycatWhoDat | What language do people normally use for NativeCall? | 23:45 |