🦋 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