leaving vertical space for respondents...

it prints out every substring with two or more characters

indeed...

$ perl -le ' "abcd" =~ /.{2,}(?{print $&})(*FAIL)/ ' abcd abc ab bcd bc cd $ perl -le ' "abcdefg" =~ /.{2,}(?{print $&})(*FAIL)/ ' abcdefg abcdef abcde abcd abc ab bcdefg bcdef bcde bcd bc cdefg cdef cde cd defg def de efg ef fg $

Alright, well I used 4.say.pl to look at values as they occur in this part of the script. I realize it takes me forever and a day to get through this, but I only get windows of opportunity to do a proper write-up, for example. This one is conditioned on everyone else being asleep. With the dirge of the carol music, it makes a fine perl moment.

$board =~ /(?<!\w).{2,}(?!\w)(?{ push @pat, [ $-[0], $& ] })(*FAIL +)/; #dd @pat; @pat = map expand($_), @pat; @pat = sort { length $b->[1] <=> length $a->[1] } @pat; say "patterns----------------"; dd @pat;

Typical output is:

default is 71 d. old is d. highs is 10 under is d underpat is (?^u:[^db e h i n n o]) words are de do changed is 21 --------------------three choses: 1 38 vibe score: 20 20 .......... 0000000000 .......... 0000000000 .......... 0000000000 .......... 0000000000 ....m..... 0000100000 ..avoid... 0011111000 ...it..... 0001100000 ...bi..... 0001100000 ...ef..... 0001100000 ....s..... 0000100000 /home/bob/4.scripts/distro/games/29-11-2019-16-37-01.txtmove is 2 end of move, continue?

I needed another little helper program to see how the match variables worked:

$ ./1.perlvar.pl 10 15 This is a Hello World program World $

Source:

#!/usr/bin/perl use 5.016; use warnings; my $str="This is a Hello World program"; $str=~/Hello/; say $-[0]; # $-[0] is the offset of the start of the last successful m +atch. say $+[0]; # $+[0] is the offset into the string of the end of the ent +ire match. $str=~/(This)(.*?)Hello(.*?)program/; say $str; say $+; # This returns the last bracket result

I understand the above line in question now and wanted to move down to where I lose my grip again, which is here:

my $newmask = ( $old ^ $word ) =~ tr/\0/\xff/cr; $flip and ( $board, $heights ) = flip $board, $heights; substr $board, $pos, length $word, $word; #say "new mask is $newmask"; substr $heights, $pos, length $highs, ( $highs & $newmask ) =~ tr/0-4/1-5/r | ( $highs & ~$newmask ); $flip and ( $board, $heights ) = flip $board, $heights; my $tiles = join '', @tiles; say "word is $word"; $tiles =~ s/$_// for split //, $word & $newmask;

I still haven't penetrated the logic for this masking. (?) It's similar to the logic used in two of the subroutines, with this as the shorter and more transparent:

sub matchrule { my ( $old, $highs, $word ) = @_; $old eq $word and return 0; my $newmask = ( $old ^ $word ) =~ tr/\0/\xff/cr; ( $newmask & $highs ) =~ tr/5// and return 0; my $tiles = "@tiles"; $tiles =~ s/$_// or return 0 for ( $newmask & $word ) =~ /\w/g; return 1; }

I believe the logic of this routine is that it returns zero if not a legal match and one if it is. I don't understand the relevance of character \xff to any of this, for example. What is the methodology that the use of ^ followed by & ? It would seem to me that the truth value is ^'ed to every bit in $newmask, and the bits correspond to whether the letter in that position matches the one below it. It then meets the logic of where it tests whether it is 5 high, and there it loses me.

As for where I'm going with this, the first "direction" is to get games logged in a reasonable way so that one can manage the output. Any look at the small workings of this program is accompanied by a flood of data, as it is trying out the entire lexicon. I have struggled immensely with Path::Tiny to serialize data that easily shows in STDOUT.

Latest version of working script has a naive way to measure time, but witness these failures:

#my $return2=$save_file->append_utf8(@players); #say "return2 is $return2"; #my $return2=$save_file->append_utf8(@{players}); #say "return2 is $return2"; #my $return2=$save_file->append_utf8($players); #say "return2 is $return2"; #my $return2=$save_file->append_utf8(`dd @players`); #say "return2 is $return2"; #my $return2=$save_file->append_utf8({@players}); #say "return2 is $return2";

, where @player was thus defined:

@ARGV or @ARGV = qw( one two three four ); # for testing # ... my @players; my $maxname = ''; for (@ARGV) { $maxname |= $_; push @players, { name => $_, score => 0, tiles => [ sort splice @drawpile, 0, $maxtiles ] }; }

To see this on STDOUT, all I do is

dd @pat

Similarly, I seek a syntax for printing the time prettily:

# initiate time my $start = [gettimeofday]; #print qq|$time{'yyyymmdd hh:mm:ss.mmm', $start}\n|; #$save_file->append_utf8("$time{'yyyymmdd hh:mm:ss.mmm', $start}\n");

Typical output:

... Duration of move 4 is 27.942196 Current player is 0 Board is .......... .......... .......... .......... .......... .gridders. .......... .......... .......... .......... Heights is 0000000000 0000000000 0000000000 0000000000 0000000000 0324441110 0000000000 0000000000 0000000000 0000000000 patterns---------------- Board is .......... .....g.... .....r.... .....i.... .....d.... .....d.... .....e.... .....r.... .....s.... .......... Heights is 0000000000 0000030000 0000020000 0000040000 0000040000 0000040000 0000010000 0000010000 0000010000 0000000000 patterns---------------- Duration of move 5 is 31.07824 Current player is 1

As the grid fills up in complexity, so does the time for each move. There would need to be a ceiling time of something like 2 minutes. What I would like is a listing of the best 5 words every ten seconds or so.

I have had some successes, as with this related facility for help for wordscapes: find all english words with seven letters or less given their input as a word on ARGV. I've tested it on my phone, and it's a significant tool. I'd like to thank all those who contribute to such mild successes, and in particular tybalt89.

Thanks for your comment,


In reply to Re^4: implementing a scrabble-esque game on Termux III and Path::Tiny output by Aldebaran
in thread implementing a scrabble-esque game on Termux III by Aldebaran

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.