#!/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