From b59827746e80647f6c2ecfc8916f4b0021e6a126 Mon Sep 17 00:00:00 2001
From: peteyboy
Date: Thu, 10 Feb 2022 07:17:11 +0000
Subject: [PATCH] Added the main perl cgi file
---
wordle-life.cgi | 205 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 205 insertions(+)
create mode 100755 wordle-life.cgi
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 Conway's Life with your Wordle Score
+
+
+
+Wordle->Life
+
+
+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
+
+
+
+
+
+
+
+
+
+
+Click "Submit" and and RLE format file for Conway's Game of Life will appear below.
+
+
+
+Your wordle as Conway Life RLE file:
+
+<%= $rle %>
+
+
+
+ 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:
+
+copy the contents of the Conway Life box above
+ go to a Conway's Life site, such as this one at copy.sh or this one at lazyslug.com and load and run your file.
+
+ specifically for the one at copy.sh:
+ Press the [Import] button at the top
+ paste in your Life file contents in the box and press [Import]
+ It will put up a box telling you it loaded your Wordle, press [OK]
+ Press the [Run] button and watch your Wordle score play LIFE!
+
+
+ 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!
+
+
+
+
+
+
+
+Disclaimer: I made this! People and/or corporations may own their marks or copyrights, etc, on words mentioned on this page I don't claim to
+
+
+Questions, kudos or comments, mail me @sdf.org
+
+Thanks to hankchizljaw for making his basic css publicly available
+
+
+
+Hosted by SDF.org
+
+
+