🦋 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.
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
guifa never knew that it was called a scan until reading the article 01:00
I efinitely would have related scan with something else
coldpress guifa: fair enough 02:00
tellable6 coldpress, I'll pass your message to guifa
tbrowder .tell jmerelo "you da man!" 02:16
tellable6 tbrowder, I'll pass your message to jmerelo
moon-child m: print [\-] ^6 04:17
camelia 0 -1 -3 -6 -10 -15
coldpress today's advent of raku is cute and I love it 04:48
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
notandinus i just added .Array to the map and it works fine 05:56
coldpress notandinus: are you doing AoC? 06:15
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
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
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
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
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
coldpress guifa2: thanks for letting me know, I'll just do a 1D array for now 08:07
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
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
guifa2 moon-child++ 09:41
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
moon-child you can also use eq, although if you're worried about performance that's probably an even worse idea 09:50
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
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
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
jmerelo lizmat: ah. But a container by any other NAME... 11:14
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
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
notandinus coldpress: can you share your solution for today's AoC ? 12:14
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:
notandinus will hashes be better for memoization ? 12:52
compared to arrays
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
[Coke] wonders what the origins of .rotor are. 13:09
[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)
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
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
lizmat join them and then .comb('#').elems ? 14:51
notandinus lizmat: thanks, direct .comb('#).elems also works fine 14:55
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
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
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
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
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
notandinus hmm i searched for dim array in docs, didn't find it, can you link to what it is? 16:09
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
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
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
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
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?
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
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
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
notandinus tobs: makes sense, thanks 18:09
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
tadzik notandinus: hah, interesting 18:27
'night!
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
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
tadzik bbkr: it gets a lot better in firefox's reader mode, fwiw :) 21:10
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
RaycatWhoDat Hmm 21:53
RaycatWhoDat What language do people normally use for NativeCall? 23:45