diff --git a/wordle-life.cgi b/wordle-life.cgi new file mode 100755 index 0000000..acd55bb --- /dev/null +++ b/wordle-life.cgi @@ -0,0 +1,205 @@ +#!/usr/pkg/bin/perl +use strict; +use warnings; +use utf8; +use lib qw( /usr/pkg/lib/perl5/5.24.0 /meta/p/peteyboy/perl5/lib/perl5 ); +#make request for all of the following +use CGI::Tiny; +use Mojo::Template; +use Mojo::Loader 'data_section'; +#use Routes::Tiny; +use Readonly; + + my $ORIGIN_PAGE = "/wordle-life.cgi"; + my $defaulttext = "Paste your wordle share here"; + + cgi { + my $cgi = $_; + + $cgi->set_error_handler(sub { + my ($cgi, $error, $rendered) = @_; + warn $error; + unless ($rendered) { + if ($cgi->response_status_code == 413) { + $cgi->render(json => {error => 'Request body limit exceeded'}); + }elsif ($cgi->response_status_code == 400) { + $cgi->render(json => {error => 'Bad request'}); + } else { + $cgi->render(json => {error => 'Internal server error'}); + } + } + }); + + my $wordle; + my $method = $cgi->method; + my $rle = ""; + + if ($method eq 'GET' or $method eq 'HEAD') { + $wordle = $defaulttext; + } elsif ($method eq 'POST') { + $wordle = $cgi->body_param('wordle-result'); #textarea name + if ($wordle =~ /\Q$defaulttext\E/){ + + }else{ + $rle = generate_rle($wordle); + } + + } else { + $cgi->set_response_status(405)->render; + exit; + } + + die "Invalid wordle parameter" unless length $wordle; + my $mt = Mojo::Template->new(auto_escape => 1, vars => 1); + my $template = data_section __PACKAGE__, 'index.html.ep'; + my $output = $mt->render($template, { ORIGIN_PAGE =>$ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle }); + #my $output = $mt->render($template, {wordle => $wordle}); + + $cgi->render(html => $output ); + + }; + + +sub generate_rle { + + my $headline = ""; + my $rleline; + my $rowcount; + my $myline; + + Readonly my $headline_prefix => "#C "; #Part of RLE spec https://conwaylife.com/wiki/Run_Length_Encoded + Readonly my $row_prefix => "x = 5"; #for wordle always 5 + Readonly my $col_prefix => ",y = "; + + my $wordle = shift; # this is how you get variables in your function call! + $rowcount = 0; + + my @lines = split /^/, $wordle; + foreach $myline (@lines) { + chomp($myline); + if ($headline eq "" && $myline =~ /Wordle/){ + $headline = $headline_prefix . $myline; + }else{ + + #in case of text mode + $myline =~ s/\R//; + $myline =~ s/^(.*)$/$1\$/; + $myline =~ s/:yellow_square:/o/g; + $myline =~ s/:green_square:/o/g; + $myline =~ s/:[a-z-]*square:/b/g; + # for normal unicode + $myline =~ s/\N{U+1f7e8}/o/g; #yellow + $myline =~ s/\N{U+1f7e9}/o/g; #green + + $myline =~ s/\N{U+2B1B}/b/g; #black + $myline =~ s/\N{U+2B1C}/b/g; #white + + #broken copy/paste text + $myline =~ s/black_large_square/b/g; + $myline =~ s/white_large_square/b/g; + $myline =~ s/yellow_square/o/g; + $myline =~ s/green_square/o/g; + + + + if(length($myline) > 1){ + $rowcount += 1; + $rleline= $rleline . $myline; + } + } + } + + return "$headline\n$row_prefix$col_prefix$rowcount\n$rleline"; + } + + + +__DATA__ +@@ index.html.ep + +
+Play your Wordle Share score in Conway's Life!
++
Hey, nerds, isn't it funny how the Wordle Scores can look like a glider in that old computer programming exercise, Conway's Life?
Paste your wordle share below and submit to convert it to a Conway's Life file so you can run it.
+To learn more about Conway's Life, read this +
+ + +
if there is extra text or lines in your paste, you might not get a valid file here, so look and make sure it looks like a proper RLE file, for example: +
+
+#C Wordle 235 3/6 +x = 5,y = 3 +boobo$bobbo$ooooo$ ++ +
For details about the Life RLE file format above, read this. + +
+Next steps: +
This should work with the share/copy button in wordle, or copy/pasting your friends' wordles out of Discord or wherever as well. See whose Wordle Score looks coolest! +
+ + +
+
+ +
+Questions, kudos or comments, mail me @sdf.org +
+Thanks to hankchizljaw for making his basic css publicly available + +
+