From 38ab6a4d0f05b3ee63080c497e486d1b9e2591d8 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 14:40:19 +0100 Subject: Add challenge descriptions to README. --- challenge-004/abigail/README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 challenge-004/abigail/README.md diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md new file mode 100644 index 0000000000..d7378888c0 --- /dev/null +++ b/challenge-004/abigail/README.md @@ -0,0 +1,21 @@ +# Solutions by Abigail + +## [Challenge 1](https://perlweeklychallenge.org/blog/perl-weekly-challenge-004/#challenge-1) + +Write a script to output the same number of PI digits as the size +of your script. Say, if your script size is `10`, it should print +`3.141592653`. + +### Solutions + + +## [Challenge 2](https://perlweeklychallenge.org/blog/perl-weekly-challenge-004/#challenge-2) + +You are given a file containing a list of words (case insensitive +1 word per line) and a list of letters. Print each word from the +file that can be made using only letters from the list. You can use +each letter only once (though there can be duplicates and you can +use each of them once), you don't have to use all the letters. +(Disclaimer: The challenge was proposed by Scimon Proctor) + +### Solutions -- cgit From 19cd4867730b8c76e680e0424da12fb247cab325 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 14:40:53 +0100 Subject: Renamed directory. --- challenge-004/abigail/README | 1 - challenge-004/abigail/perl/ch-1.pl | 1 + challenge-004/abigail/perl/ch-2.pl | 26 ++++++++++++++++++++++++++ challenge-004/abigail/perl5/ch-1.pl | 1 - challenge-004/abigail/perl5/ch-2.pl | 26 -------------------------- 5 files changed, 27 insertions(+), 28 deletions(-) delete mode 100644 challenge-004/abigail/README create mode 100644 challenge-004/abigail/perl/ch-1.pl create mode 100644 challenge-004/abigail/perl/ch-2.pl delete mode 100644 challenge-004/abigail/perl5/ch-1.pl delete mode 100644 challenge-004/abigail/perl5/ch-2.pl diff --git a/challenge-004/abigail/README b/challenge-004/abigail/README deleted file mode 100644 index 5f0d73ae16..0000000000 --- a/challenge-004/abigail/README +++ /dev/null @@ -1 +0,0 @@ -Solution by Abigail diff --git a/challenge-004/abigail/perl/ch-1.pl b/challenge-004/abigail/perl/ch-1.pl new file mode 100644 index 0000000000..b6b556b801 --- /dev/null +++ b/challenge-004/abigail/perl/ch-1.pl @@ -0,0 +1 @@ +say 2 * atan2 (1,0) diff --git a/challenge-004/abigail/perl/ch-2.pl b/challenge-004/abigail/perl/ch-2.pl new file mode 100644 index 0000000000..7d252aa886 --- /dev/null +++ b/challenge-004/abigail/perl/ch-2.pl @@ -0,0 +1,26 @@ +use 5.026; + +use strict; +use warnings; +no warnings 'syntax'; + +# +# Assume the list of letters are the arguments. Read the list +# of words from STDIN +# +my %letters; +$letters {$_} ++ for "@ARGV" =~ /[a-z]/g; + +WORD: while () { + chomp; + next if /[^a-z]/; + my %l; + $l {$_} ++ for split //; + foreach my $c (keys %l) { + no warnings 'uninitialized'; + next WORD if $letters {$c} < $l {$c}; + } + say; +} + +__END__ diff --git a/challenge-004/abigail/perl5/ch-1.pl b/challenge-004/abigail/perl5/ch-1.pl deleted file mode 100644 index b6b556b801..0000000000 --- a/challenge-004/abigail/perl5/ch-1.pl +++ /dev/null @@ -1 +0,0 @@ -say 2 * atan2 (1,0) diff --git a/challenge-004/abigail/perl5/ch-2.pl b/challenge-004/abigail/perl5/ch-2.pl deleted file mode 100644 index 7d252aa886..0000000000 --- a/challenge-004/abigail/perl5/ch-2.pl +++ /dev/null @@ -1,26 +0,0 @@ -use 5.026; - -use strict; -use warnings; -no warnings 'syntax'; - -# -# Assume the list of letters are the arguments. Read the list -# of words from STDIN -# -my %letters; -$letters {$_} ++ for "@ARGV" =~ /[a-z]/g; - -WORD: while () { - chomp; - next if /[^a-z]/; - my %l; - $l {$_} ++ for split //; - foreach my $c (keys %l) { - no warnings 'uninitialized'; - next WORD if $letters {$c} < $l {$c}; - } - say; -} - -__END__ -- cgit From c71959578d1da8183c6c963ae0bfb700e707f2c6 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 19:16:39 +0100 Subject: Test input for week 4, part 1 (Perl) --- challenge-004/abigail/t/ctest.ini | 6 ++++++ challenge-004/abigail/t/input-1-1 | 0 challenge-004/abigail/t/output-1-1.exp | 1 + 3 files changed, 7 insertions(+) create mode 100644 challenge-004/abigail/t/ctest.ini create mode 100644 challenge-004/abigail/t/input-1-1 create mode 100644 challenge-004/abigail/t/output-1-1.exp diff --git a/challenge-004/abigail/t/ctest.ini b/challenge-004/abigail/t/ctest.ini new file mode 100644 index 0000000000..cc54efbe63 --- /dev/null +++ b/challenge-004/abigail/t/ctest.ini @@ -0,0 +1,6 @@ +[names] +1-1 = Pi + + +[1-1] +no_input = 1 diff --git a/challenge-004/abigail/t/input-1-1 b/challenge-004/abigail/t/input-1-1 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/challenge-004/abigail/t/output-1-1.exp b/challenge-004/abigail/t/output-1-1.exp new file mode 100644 index 0000000000..dc711c55be --- /dev/null +++ b/challenge-004/abigail/t/output-1-1.exp @@ -0,0 +1 @@ +3.1415926535897932384626433832795028841971693993751058209749445923078164628620899862803482534211706798214808651328230664793844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607262491412737245870066631558817488152092096282925409171536436789259036011330530548820466521384146951941511609433057270365759591953921861173819326117931051185487446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277539217176293176752384674818467669405132568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019523530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925560400927716711390098488240128583616035637076601047101819429555961989467678374494482553797747268471404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927264269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955 -- cgit From 76a84a5b39330aa3a911eb7bccb1402503557072 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 19:18:02 +0100 Subject: Rewrite of the Perl solution This solution can be run direction, not requiring any options (the previous solution required an undocumented -M5.010 option). Instead of using atan2(), we now use a base-60 encoded list of digts of pi (after the decimal dot). The source code is 1485 characters, including white space. The output is 1487 characters, of which 1485 digits (the others are a decimal dot, and a new line). --- challenge-004/abigail/perl/ch-1.pl | 57 +++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/challenge-004/abigail/perl/ch-1.pl b/challenge-004/abigail/perl/ch-1.pl index b6b556b801..c6333723dd 100644 --- a/challenge-004/abigail/perl/ch-1.pl +++ b/challenge-004/abigail/perl/ch-1.pl @@ -1 +1,56 @@ -say 2 * atan2 (1,0) +#!/opt/perl/bin/perl + +use 5.032; + +use strict; +use warnings; +no warnings 'syntax'; + +use experimental 'signatures'; +use experimental 'lexical_subs'; + +# +# See ../README.md +# + +# +# Run as: perl ch-1.pl +# + +my $first_ord = 1 + ord ('"'); +my $range = 60; + +print "3."; +while () { + foreach (/.{6}/g) { + my $out = 0; + foreach (/./g) { + $out *= $range; + $out += ord () - $first_ord; + } + print $out; + } +} +print "\n" + +# +# Encoded digits of PI below __DATA__ +# Encoding is in base-60; from character '#' +# + +__DATA__ +$T2/ZF.CU[H=&:\X*^)?$KCV+Z@7<-*@+\@'*H$J@;#SA3Y^.(OG7<':]P.6 +-DVB4B'02VUR$/;J?2)A4L^C)XC'?S).0\8M-S[=,X-\@DP^+4:J5,*&UN[G +(LNP32+DU2*L&JN-0N'W.;/P&@2II.(W0FOW'>#*[U(UDI?%$N7OIQ#606[J+'-NC2%KD,L-KB>?C +/IQ2[%(K#Q0U.&ON.E+0>B5\%>+S3I*U1KH\#LG9C[&Q/^W&-X854=,VQA5W +##=5*V(T28+%-#P12M,OMV+.,?.4./$X572$%XEAI8(^-O%4$8'QOJ+VU+*2 +(;0L#.%O3E^7.)LFG8*LB@M\)+,:WK)K108X)L:-Z'>KE-=(?)20P'5'J-F&9)=I$,*Z#(0-'UB8=*D7GL:-?1NSH,VP5LN +*LGZ2'&LWN$0$@?7RN.7TMOF/&:L%]%:7U+W%/*-$)$K6;JR+A*:5@%Q^>0, +'X[LF7$9/S4N&F->G$)VXSD3-F&1^/#>17M,+W9@3%&7E6;V&/L.FW-O*OPV +*-,B>9(U<@MJ)C/.?B+T>2AZ.=#X&&-AT9,))8*0*F#QG784#/XKBK/J[;=W +.%5\R2+.E40A)&=:W9/47DX,)#VQFO/,$Z9^,\Q^$.#B0VB'*^#\;O&6X\?C +/##QF%.DG=LO,K96%T+@=LGN-?W9IB&2AK(#'EFPDO,I Date: Thu, 28 Jan 2021 20:20:09 +0100 Subject: Example for week 4, part 1. Example for source code of 1978 characters. --- challenge-004/abigail/t/ctest.ini | 12 ++++++++++-- challenge-004/abigail/t/input-1-2 | 0 challenge-004/abigail/t/output-1-2.exp | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 challenge-004/abigail/t/input-1-2 create mode 100644 challenge-004/abigail/t/output-1-2.exp diff --git a/challenge-004/abigail/t/ctest.ini b/challenge-004/abigail/t/ctest.ini index cc54efbe63..c3ee0bbf5e 100644 --- a/challenge-004/abigail/t/ctest.ini +++ b/challenge-004/abigail/t/ctest.ini @@ -1,6 +1,14 @@ [names] -1-1 = Pi +1-1 = Pi, 1485 digits +1-2 = Pi, 1978 digits -[1-1] +[1-1,1-2] no_input = 1 + + +[1-1/c] +skip = Program size is different + +[1-2/perl] +skip = Program size is different diff --git a/challenge-004/abigail/t/input-1-2 b/challenge-004/abigail/t/input-1-2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/challenge-004/abigail/t/output-1-2.exp b/challenge-004/abigail/t/output-1-2.exp new file mode 100644 index 0000000000..5be82f04d1 --- /dev/null +++ b/challenge-004/abigail/t/output-1-2.exp @@ -0,0 +1 @@ +3.14159265358979323846264338327950288419716939937510582097494459230781646286208998628034825342117067982148086513282306647938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072624914127372458700666315588174881520920962829254091715364367892590360113305305488204665213841469519415116094330572703657595919539218611738193261179310511854874462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702775392171762931767523846748184676694051325681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499515973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195235301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255604009277167113900984882401285836160356370766010471018194295559619894676783744944825537977472684714047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272642699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559623648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332397394143334547762416862518983569485562099219222184272550254256887671794946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848968412848862694560424196528502221066118636744278622039194945471237137869609563643719172874677646575739624138986583264599581339047802759009 -- cgit From 8505fb6674c1f5b06ec0563146978db4e58138af Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 20:21:26 +0100 Subject: Link to Perl solution --- challenge-004/abigail/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index d7378888c0..a1f3db92c6 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -7,6 +7,7 @@ of your script. Say, if your script size is `10`, it should print `3.141592653`. ### Solutions +* [Perl](perl/ch-1.pl) ## [Challenge 2](https://perlweeklychallenge.org/blog/perl-weekly-challenge-004/#challenge-2) -- cgit From b815fb60bba7f4a991ec8db7129ce40adda4d6d9 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 20:22:25 +0100 Subject: C solution for week 4, part 1 --- challenge-004/abigail/README.md | 1 + challenge-004/abigail/c/ch-1.c | 49 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 challenge-004/abigail/c/ch-1.c diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index a1f3db92c6..9913133e26 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -7,6 +7,7 @@ of your script. Say, if your script size is `10`, it should print `3.141592653`. ### Solutions +* [C](c/ch-1.c) * [Perl](perl/ch-1.pl) diff --git a/challenge-004/abigail/c/ch-1.c b/challenge-004/abigail/c/ch-1.c new file mode 100644 index 0000000000..ef1a11aa53 --- /dev/null +++ b/challenge-004/abigail/c/ch-1.c @@ -0,0 +1,49 @@ +# include +# include +# include + +/* + * See ../README.md + */ + +/* + * Run as: cc -o ch-1.o ch-1.c; ./ch-1.o + */ + +int main (void) { + char fst = '"' + 1; + + /* Pi, base-60, encoded. '\' is escaped. */ + char * pi = + "$T2/ZF.CU[H=&:\\X*^)?$KCV+Z@7<-*@+\\@'*H$J@;#SA3Y^.(OG7<':]P.6" + "-DVB4B'02VUR$/;J?2)A4L^C)XC'?S).0\\8M-S[=,X-\\@DP^+4:J5,*&UN[G" + "(LNP32+DU2*L&JN-0N'W.;/P&@2II.(W0FOW'>#*[U(UDI?%$N7OIQ#606[J+'-NC2%KD,L-KB>?C" + "/IQ2[%(K#Q0U.&ON.E+0>B5\\%>+S3I*U1KH\\#LG9C[&Q/^W&-X854=,VQA5W" + "##=5*V(T28+%-#P12M,OMV+.,?.4./$X572$%XEAI8(^-O%4$8'QOJ+VU+*2" + "(;0L#.%O3E^7.)LFG8*LB@M\\)+,:WK)K108X)L:-Z'>KE-=(?)20P'5'J-F&9)=I$,*Z#(0-'UB8=*D7GL:-?1NSH,VP5LN" + "*LGZ2'&LWN$0$@?7RN.7TMOF/&:L%]%:7U+W%/*-$)$K6;JR+A*:5@%Q^>0," + "'X[LF7$9/S4N&F->G$)VXSD3-F&1^/#>17M,+W9@3%&7E6;V&/L.FW-O*OPV" + "*-,B>9(U<@MJ)C/.?B+T>2AZ.=#X&&-AT9,))8*0*F#QG784#/XKBK/J[;=W" + ".%5\\R2+.E40A)&=:W9/47DX,)#VQFO/,$Z9^,\\Q^$.#B0VB'*^#\\;O&6X\\?C" + "/##QF%.DG=LO,K96%T+@=LGN-?W9IB&2AK(#'EFPDO,I73.(B=&Z+[,1A,.V8F&'&A5'%9*5[X)6#I,T7X)#.7B=&A*Q=5*TEZJN" + "-IVV%Q-?A0YZ'^K@CK/0C\\\\9&0W%8V,A=QY[$'YU1Q&>YT#;%BICA9%MCT\\N" + "#W%8'9%H7N%<#G8J/4.-^M*3(H78?*)#ZQ32,ALV@T$)S@'(/S9?5;-%&X&@"; + printf ("3."); + size_t l = strlen (pi); + for (size_t i = 0; i < l; i += 6) { + long number = 0; + for (size_t j = i; j < i + 6; j ++) { + number *= 60; + number += pi [j] - fst; + } + printf ("%ld", number); + } + printf ("\n"); +} -- cgit From 29d7e0a587708fcfe15b6f1c5b16caeb1c82b01f Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 28 Jan 2021 20:45:58 +0100 Subject: AWK solution for week 4, part 1 --- challenge-004/abigail/README.md | 1 + challenge-004/abigail/awk/ch-1.awk | 47 ++++++++++++++++++++++++++++++++++++++ challenge-004/abigail/t/ctest.ini | 2 +- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 challenge-004/abigail/awk/ch-1.awk diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index 9913133e26..daf44cedce 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -7,6 +7,7 @@ of your script. Say, if your script size is `10`, it should print `3.141592653`. ### Solutions +* [AWK](awk/ch-1.awk) * [C](c/ch-1.c) * [Perl](perl/ch-1.pl) diff --git a/challenge-004/abigail/awk/ch-1.awk b/challenge-004/abigail/awk/ch-1.awk new file mode 100644 index 0000000000..090ab7b2dc --- /dev/null +++ b/challenge-004/abigail/awk/ch-1.awk @@ -0,0 +1,47 @@ +#!/usr/bin/awk + +# +# See ../README.md +# + +# +# Run as: awk -f ch-1.awk +# + +BEGIN { + for (o = 35; o < 35 + 60; o ++) { + c = sprintf ("%c", o) + ord [c] = o - 35 + } + # Pi, encoded in base-60 + l = "$T2/ZF.CU[H=&:\\X*^)?$KCV+Z@7<-*@+\\@'*H$J@;#SA3Y^.(OG7<':]P.6" \ + "-DVB4B'02VUR$/;J?2)A4L^C)XC'?S).0\\8M-S[=,X-\\@DP^+4:J5,*&UN[G" \ + "(LNP32+DU2*L&JN-0N'W.;/P&@2II.(W0FOW'>#*[U(UDI?%$N7OIQ#606[J+'-NC2%KD,L-KB>?C" \ + "/IQ2[%(K#Q0U.&ON.E+0>B5\\%>+S3I*U1KH\\#LG9C[&Q/^W&-X854=,VQA5W" \ + "##=5*V(T28+%-#P12M,OMV+.,?.4./$X572$%XEAI8(^-O%4$8'QOJ+VU+*2" \ + "(;0L#.%O3E^7.)LFG8*LB@M\\)+,:WK)K108X)L:-Z'>KE-=(?)20P'5'J-F&9)=I$,*Z#(0-'UB8=*D7GL:-?1NSH,VP5LN" \ + "*LGZ2'&LWN$0$@?7RN.7TMOF/&:L%]%:7U+W%/*-$)$K6;JR+A*:5@%Q^>0," \ + "'X[LF7$9/S4N&F->G$)VXSD3-F&1^/#>17M,+W9@3%&7E6;V&/L.FW-O*OPV" \ + "*-,B>9(U<@MJ)C/.?B+T>2AZ.=#X&&-AT9,))8*0*F#QG784#/XKBK/J[;=W" \ + ".%5\\R2+.E40A)&=:W9/47DX,)#VQFO/,$Z9^,\\Q^$.#B0VB'*^#\\;O&6X\\?C" \ + "/##QF%.DG=LO,K96%T+@=LGN-?W9IB&2AK(#'EFPDO,I73.(B=&Z+[,1A,.V8F&'&A5'%9*5[X)6#I,T7X)#.7B=&A*Q=5*TEZJN" \ + "-IVV%Q-?A0YZ'^K@CK/0C\\\\9&0W%8V,A=QY[$'YU1Q&>YT#;%BICA9%MCT\\N" \ + "#W%8'9%H7N%<#G8J/4.-^M*3(H78?*)#ZQ32,ALV@T$)S@'(/S9?5;-%&X&@" + printf ("3.") + for (i = 1; i <= length (l); i += 6) { + out = 0 + for (j = i; j < i + 6; j ++) { + out *= 60 + out += ord [substr (l, j, 1)] + } + printf (out) + } + printf ("\n") +} diff --git a/challenge-004/abigail/t/ctest.ini b/challenge-004/abigail/t/ctest.ini index c3ee0bbf5e..110f4abcc4 100644 --- a/challenge-004/abigail/t/ctest.ini +++ b/challenge-004/abigail/t/ctest.ini @@ -7,7 +7,7 @@ no_input = 1 -[1-1/c] +[1-1/awk,c] skip = Program size is different [1-2/perl] -- cgit From 17d17263bfcdfc85ca719911a0141bc5fecae050 Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 1 Feb 2021 22:51:48 +0100 Subject: Changed the number of digits of Pi generated. --- challenge-004/abigail/t/output-1-1.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-004/abigail/t/output-1-1.exp b/challenge-004/abigail/t/output-1-1.exp index dc711c55be..574e7ee129 100644 --- a/challenge-004/abigail/t/output-1-1.exp +++ b/challenge-004/abigail/t/output-1-1.exp @@ -1 +1 @@ -3.1415926535897932384626433832795028841971693993751058209749445923078164628620899862803482534211706798214808651328230664793844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607262491412737245870066631558817488152092096282925409171536436789259036011330530548820466521384146951941511609433057270365759591953921861173819326117931051185487446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277539217176293176752384674818467669405132568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019523530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925560400927716711390098488240128583616035637076601047101819429555961989467678374494482553797747268471404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927264269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955 +3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590099465764078951269468398352595709825822620522489407726719478268482601476990902640136394437455305068203496252451749399651431429809190659250937221696461515709858387410597885959772975498930161753928468138268683868942774155991855925245953959431049972524680845987273644695848653836736222626099124608051243884390451244136549762780797715691435997700129616089441694868555848406353422072225828488648158456028506016842739452267467678895252138522549954666727823986456596116354886230577456498035593634568174324112515076069479451096596094025228879710893145669136867228748940560101503308617928680920874760917824938589009714909675985261365549781893129784821682998948722658804857564014270477555132379641451523746234364542858444795265867821051141354735739523113427166102135969536231442952484937187110145765403590279934403742007310578539062198387447808478489683321445713868751943506430218453191048481005370614680674919278191197939952061419663428754440643745123718192179998391015919561814675142691239748940907186494231961567945208095146550225231603881930142093762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002132434088190710486331734649651453905796268561005508106658796998163574736384052571459 -- cgit From 04aec5adde93ec92d8f6ce17b849648864a5284a Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 1 Feb 2021 22:52:26 +0100 Subject: Test to compare the size of the program with the size of the (expected) output. --- challenge-004/abigail/t/Check_Program_Size.pm | 23 +++++++++++++++++++++++ challenge-004/abigail/t/ctest.ini | 5 ++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100755 challenge-004/abigail/t/Check_Program_Size.pm diff --git a/challenge-004/abigail/t/Check_Program_Size.pm b/challenge-004/abigail/t/Check_Program_Size.pm new file mode 100755 index 0000000000..30369444d6 --- /dev/null +++ b/challenge-004/abigail/t/Check_Program_Size.pm @@ -0,0 +1,23 @@ +package Check_Program_Size; + +use 5.032; + +use strict; +use warnings; +no warnings 'syntax'; + +use experimental 'signatures'; +use experimental 'lexical_subs'; + +use Test::More; + +my $output = "t/output-1-1.exp"; + +sub test ($self, %args) { + my $source = $args {source}; + is -s $source, (-s $output) - 1, "Program size"; +} + +1; + +__END__ diff --git a/challenge-004/abigail/t/ctest.ini b/challenge-004/abigail/t/ctest.ini index 110f4abcc4..738fce6d3f 100644 --- a/challenge-004/abigail/t/ctest.ini +++ b/challenge-004/abigail/t/ctest.ini @@ -1,5 +1,5 @@ [names] -1-1 = Pi, 1485 digits +1-1 = Pi, 3242 digits 1-2 = Pi, 1978 digits @@ -12,3 +12,6 @@ skip = Program size is different [1-2/perl] skip = Program size is different + +[challenges/1] +extra_tests = Check_Program_Size -- cgit From 5a1fd9e0764ce3f758a8f202b2b8f09592d611f7 Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 1 Feb 2021 22:59:29 +0100 Subject: Use base-91 instead of base-60. We're now using base-91, which is from character '#' to '~', excluding the backslash. --- challenge-004/abigail/perl/ch-1.pl | 79 +++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/challenge-004/abigail/perl/ch-1.pl b/challenge-004/abigail/perl/ch-1.pl index c6333723dd..a36eb78e42 100644 --- a/challenge-004/abigail/perl/ch-1.pl +++ b/challenge-004/abigail/perl/ch-1.pl @@ -17,40 +17,75 @@ use experimental 'lexical_subs'; # Run as: perl ch-1.pl # +################################################################################ +# +# We have encoded the digits of perl. We're grouping the digits (after +# the decimal dot), in groups of 9, considering this as a base-10 number, +# and then we turn this into a base-91 number. To represent the base-91 +# number, we are using ASCII characters, starting from "#", up to "~", +# *BUT* skipping "\". +# +# We can encode a 9 digit base-10 number with 5 characters in base-91, +# giving us a 44.44% reduction in size. +# +################################################################################ + my $first_ord = 1 + ord ('"'); -my $range = 60; +my $skip_ord = ord ("\\"); +my $last_ord = ord ("~"); +my $range = $last_ord - $first_ord; +my $in_size = 5; +my $out_size = 9; print "3."; while () { - foreach (/.{6}/g) { + my $pat = ".{$in_size}"; + foreach (/$pat/g) { my $out = 0; foreach (/./g) { $out *= $range; - $out += ord () - $first_ord; + my $n = ord (); + $n -- if $n >= $skip_ord; + $out += $n - $first_ord; } - print $out; + printf "%0${out_size}d" => $out; } } -print "\n" +print "\n"; # -# Encoded digits of PI below __DATA__ -# Encoding is in base-60; from character '#' +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER # __DATA__ -$T2/ZF.CU[H=&:\X*^)?$KCV+Z@7<-*@+\@'*H$J@;#SA3Y^.(OG7<':]P.6 --DVB4B'02VUR$/;J?2)A4L^C)XC'?S).0\8M-S[=,X-\@DP^+4:J5,*&UN[G -(LNP32+DU2*L&JN-0N'W.;/P&@2II.(W0FOW'>#*[U(UDI?%$N7OIQ#606[J+'-NC2%KD,L-KB>?C -/IQ2[%(K#Q0U.&ON.E+0>B5\%>+S3I*U1KH\#LG9C[&Q/^W&-X854=,VQA5W -##=5*V(T28+%-#P12M,OMV+.,?.4./$X572$%XEAI8(^-O%4$8'QOJ+VU+*2 -(;0L#.%O3E^7.)LFG8*LB@M\)+,:WK)K108X)L:-Z'>KE-=(?)20P'5'J-F&9)=I$,*Z#(0-'UB8=*D7GL:-?1NSH,VP5LN -*LGZ2'&LWN$0$@?7RN.7TMOF/&:L%]%:7U+W%/*-$)$K6;JR+A*:5@%Q^>0, -'X[LF7$9/S4N&F->G$)VXSD3-F&1^/#>17M,+W9@3%&7E6;V&/L.FW-O*OPV -*-,B>9(U<@MJ)C/.?B+T>2AZ.=#X&&-AT9,))8*0*F#QG784#/XKBK/J[;=W -.%5\R2+.E40A)&=:W9/47DX,)#VQFO/,$Z9^,\Q^$.#B0VB'*^#\;O&6X\?C -/##QF%.DG=LO,K96%T+@=LGN-?W9IB&2AK(#'EFPDO,I7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z +0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb} +%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`] +&*M#'1wg +-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD +#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p +&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r +#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J +*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI} +(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt +%{(NN&Kn$]*e0, +$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t +-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[ +(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi +,S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a& +&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z +,:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA +/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C +'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S +)-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>- ++mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH +%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB -- cgit From 918ecd8e1462c4f75ed11e81f182651fa7176aaf Mon Sep 17 00:00:00 2001 From: Abigail Date: Tue, 2 Feb 2021 01:26:16 +0100 Subject: We're now using base-91 instead of base-60 for the encoding. --- challenge-004/abigail/awk/ch-1.awk | 83 +++++++++++++++++++++++++------------- challenge-004/abigail/t/ctest.ini | 4 +- 2 files changed, 57 insertions(+), 30 deletions(-) diff --git a/challenge-004/abigail/awk/ch-1.awk b/challenge-004/abigail/awk/ch-1.awk index 090ab7b2dc..2264ee94d1 100644 --- a/challenge-004/abigail/awk/ch-1.awk +++ b/challenge-004/abigail/awk/ch-1.awk @@ -9,39 +9,66 @@ # BEGIN { - for (o = 35; o < 35 + 60; o ++) { + for (o = 0; o <= 127; o ++) { c = sprintf ("%c", o) - ord [c] = o - 35 + ord [c] = o } - # Pi, encoded in base-60 - l = "$T2/ZF.CU[H=&:\\X*^)?$KCV+Z@7<-*@+\\@'*H$J@;#SA3Y^.(OG7<':]P.6" \ - "-DVB4B'02VUR$/;J?2)A4L^C)XC'?S).0\\8M-S[=,X-\\@DP^+4:J5,*&UN[G" \ - "(LNP32+DU2*L&JN-0N'W.;/P&@2II.(W0FOW'>#*[U(UDI?%$N7OIQ#606[J+'-NC2%KD,L-KB>?C" \ - "/IQ2[%(K#Q0U.&ON.E+0>B5\\%>+S3I*U1KH\\#LG9C[&Q/^W&-X854=,VQA5W" \ - "##=5*V(T28+%-#P12M,OMV+.,?.4./$X572$%XEAI8(^-O%4$8'QOJ+VU+*2" \ - "(;0L#.%O3E^7.)LFG8*LB@M\\)+,:WK)K108X)L:-Z'>KE-=(?)20P'5'J-F&9)=I$,*Z#(0-'UB8=*D7GL:-?1NSH,VP5LN" \ - "*LGZ2'&LWN$0$@?7RN.7TMOF/&:L%]%:7U+W%/*-$)$K6;JR+A*:5@%Q^>0," \ - "'X[LF7$9/S4N&F->G$)VXSD3-F&1^/#>17M,+W9@3%&7E6;V&/L.FW-O*OPV" \ - "*-,B>9(U<@MJ)C/.?B+T>2AZ.=#X&&-AT9,))8*0*F#QG784#/XKBK/J[;=W" \ - ".%5\\R2+.E40A)&=:W9/47DX,)#VQFO/,$Z9^,\\Q^$.#B0VB'*^#\\;O&6X\\?C" \ - "/##QF%.DG=LO,K96%T+@=LGN-?W9IB&2AK(#'EFPDO,I73.(B=&Z+[,1A,.V8F&'&A5'%9*5[X)6#I,T7X)#.7B=&A*Q=5*TEZJN" \ - "-IVV%Q-?A0YZ'^K@CK/0C\\\\9&0W%8V,A=QY[$'YU1Q&>YT#;%BICA9%MCT\\N" \ - "#W%8'9%H7N%<#G8J/4.-^M*3(H78?*)#ZQ32,ALV@T$)S@'(/S9?5;-%&X&@" + first_ord = ord ["\""] + 1 + skip_ord = ord ["\\"] + last_ord = ord ["~"] + range = last_ord - first_ord + in_size = 5 + out_size = 9 + line = "%(uP7+Y`ME)gy(7')v?;%s^qc(Mj1}16idp'ONGs'2m.o,1HLY'}~P61@@Y-" \ + "*O/.v,Jc~D+ttA'&EPjR(zXxD$dr,M$P=-f*YQqe,GIZ`0x5oL1(mpl17en`" \ + ")Q$ge,L6_5.I;hj%yy6n,L_t')dtyy)[ugS&-3(c&lC:a&~8SP#+iis+WR&8" \ + "*Y;V3/+JD@-J>7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z" \ + "0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb}" \ + "%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`]" \ + "&*M#'1wg" \ + "-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD" \ + "#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p" \ + "&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r" \ + "#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J" \ + "*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI}" \ + "(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt" \ + "%{(NN&Kn$]*e0," \ + "$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t" \ + "-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[" \ + "(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi" \ + ",S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a&" \ + "&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z" \ + ",:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA" \ + "/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C" \ + "'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S" \ + ")-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>-" \ + "+mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH" \ + "%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB" printf ("3.") - for (i = 1; i <= length (l); i += 6) { + format = "%0" out_size "d" + for (i = 1; i <= length (line); i += in_size) { out = 0 - for (j = i; j < i + 6; j ++) { - out *= 60 - out += ord [substr (l, j, 1)] + for (j = i; j < i + in_size; j ++) { + out *= range + n = ord [substr (line, j, 1)] + if (n >= skip_ord) { + n -- + } + out += n - first_ord } - printf (out) + printf (format, out) } printf ("\n") } + +# +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER? +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER! +# diff --git a/challenge-004/abigail/t/ctest.ini b/challenge-004/abigail/t/ctest.ini index 738fce6d3f..fdbdfa7461 100644 --- a/challenge-004/abigail/t/ctest.ini +++ b/challenge-004/abigail/t/ctest.ini @@ -7,10 +7,10 @@ no_input = 1 -[1-1/awk,c] +[1-1/c] skip = Program size is different -[1-2/perl] +[1-2/awk,perl] skip = Program size is different [challenges/1] -- cgit From 93542f2af1fbdf11fcdb75429826cc563f76c0fa Mon Sep 17 00:00:00 2001 From: Abigail Date: Tue, 2 Feb 2021 01:53:51 +0100 Subject: Switch from base-60 to base-91 --- challenge-004/abigail/c/ch-1.c | 81 ++++++++++++++++++++++------------ challenge-004/abigail/t/ctest.ini | 12 ----- challenge-004/abigail/t/input-1-2 | 0 challenge-004/abigail/t/output-1-2.exp | 1 - 4 files changed, 53 insertions(+), 41 deletions(-) delete mode 100644 challenge-004/abigail/t/input-1-2 delete mode 100644 challenge-004/abigail/t/output-1-2.exp diff --git a/challenge-004/abigail/c/ch-1.c b/challenge-004/abigail/c/ch-1.c index ef1a11aa53..21131ffb53 100644 --- a/challenge-004/abigail/c/ch-1.c +++ b/challenge-004/abigail/c/ch-1.c @@ -11,39 +11,64 @@ */ int main (void) { - char fst = '"' + 1; + char first_ord = '"' + 1; + char skip_ord = '\\'; + char last_ord = '~'; + int range = last_ord - first_ord; + size_t in_size = 5; + size_t out_size = 6; - /* Pi, base-60, encoded. '\' is escaped. */ char * pi = - "$T2/ZF.CU[H=&:\\X*^)?$KCV+Z@7<-*@+\\@'*H$J@;#SA3Y^.(OG7<':]P.6" - "-DVB4B'02VUR$/;J?2)A4L^C)XC'?S).0\\8M-S[=,X-\\@DP^+4:J5,*&UN[G" - "(LNP32+DU2*L&JN-0N'W.;/P&@2II.(W0FOW'>#*[U(UDI?%$N7OIQ#606[J+'-NC2%KD,L-KB>?C" - "/IQ2[%(K#Q0U.&ON.E+0>B5\\%>+S3I*U1KH\\#LG9C[&Q/^W&-X854=,VQA5W" - "##=5*V(T28+%-#P12M,OMV+.,?.4./$X572$%XEAI8(^-O%4$8'QOJ+VU+*2" - "(;0L#.%O3E^7.)LFG8*LB@M\\)+,:WK)K108X)L:-Z'>KE-=(?)20P'5'J-F&9)=I$,*Z#(0-'UB8=*D7GL:-?1NSH,VP5LN" - "*LGZ2'&LWN$0$@?7RN.7TMOF/&:L%]%:7U+W%/*-$)$K6;JR+A*:5@%Q^>0," - "'X[LF7$9/S4N&F->G$)VXSD3-F&1^/#>17M,+W9@3%&7E6;V&/L.FW-O*OPV" - "*-,B>9(U<@MJ)C/.?B+T>2AZ.=#X&&-AT9,))8*0*F#QG784#/XKBK/J[;=W" - ".%5\\R2+.E40A)&=:W9/47DX,)#VQFO/,$Z9^,\\Q^$.#B0VB'*^#\\;O&6X\\?C" - "/##QF%.DG=LO,K96%T+@=LGN-?W9IB&2AK(#'EFPDO,I73.(B=&Z+[,1A,.V8F&'&A5'%9*5[X)6#I,T7X)#.7B=&A*Q=5*TEZJN" - "-IVV%Q-?A0YZ'^K@CK/0C\\\\9&0W%8V,A=QY[$'YU1Q&>YT#;%BICA9%MCT\\N" - "#W%8'9%H7N%<#G8J/4.-^M*3(H78?*)#ZQ32,ALV@T$)S@'(/S9?5;-%&X&@"; + "%(uP7+Y`ME)gy(7')v?;%s^qc(Mj1}16idp'ONGs'2m.o,1HLY'}~P61@@Y-" \ + "*O/.v,Jc~D+ttA'&EPjR(zXxD$dr,M$P=-f*YQqe,GIZ`0x5oL1(mpl17en`" \ + ")Q$ge,L6_5.I;hj%yy6n,L_t')dtyy)[ugS&-3(c&lC:a&~8SP#+iis+WR&8" \ + "*Y;V3/+JD@-J>7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z" \ + "0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb}" \ + "%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`]" \ + "&*M#'1wg" \ + "-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD" \ + "#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p" \ + "&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r" \ + "#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J" \ + "*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI}" \ + "(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt" \ + "%{(NN&Kn$]*e0," \ + "$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t" \ + "-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[" \ + "(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi" \ + ",S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a&" \ + "&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z" \ + ",:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA" \ + "/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C" \ + "'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S" \ + ")-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>-" \ + "+mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH" \ + "%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB"; printf ("3."); size_t l = strlen (pi); - for (size_t i = 0; i < l; i += 6) { - long number = 0; - for (size_t j = i; j < i + 6; j ++) { - number *= 60; - number += pi [j] - fst; + for (size_t i = 0; i < l; i += in_size) { + long out = 0; + for (size_t j = i; j < i + in_size; j ++) { + out *= range; + char n = pi [j]; + if (n >= skip_ord) { + n --; + } + out += n - first_ord; } - printf ("%ld", number); + printf ("%09ld", out); } printf ("\n"); } + +/* + * FODDER FODDER FODDER FODDER FODDER FODDER FODDER + * FODDER FODDER FODDER FODDER FODDER FODDER FODDER. + * FODDER FODDER FODDER FODDER FODDER FODDER FODDER. + * FODDER FODDER FODDER FODDER FODDER FODDER FODDER. + */ diff --git a/challenge-004/abigail/t/ctest.ini b/challenge-004/abigail/t/ctest.ini index fdbdfa7461..0383d4c587 100644 --- a/challenge-004/abigail/t/ctest.ini +++ b/challenge-004/abigail/t/ctest.ini @@ -1,17 +1,5 @@ [names] 1-1 = Pi, 3242 digits -1-2 = Pi, 1978 digits - - -[1-1,1-2] -no_input = 1 - - -[1-1/c] -skip = Program size is different - -[1-2/awk,perl] -skip = Program size is different [challenges/1] extra_tests = Check_Program_Size diff --git a/challenge-004/abigail/t/input-1-2 b/challenge-004/abigail/t/input-1-2 deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/challenge-004/abigail/t/output-1-2.exp b/challenge-004/abigail/t/output-1-2.exp deleted file mode 100644 index 5be82f04d1..0000000000 --- a/challenge-004/abigail/t/output-1-2.exp +++ /dev/null @@ -1 +0,0 @@ -3.14159265358979323846264338327950288419716939937510582097494459230781646286208998628034825342117067982148086513282306647938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072624914127372458700666315588174881520920962829254091715364367892590360113305305488204665213841469519415116094330572703657595919539218611738193261179310511854874462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702775392171762931767523846748184676694051325681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499515973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195235301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255604009277167113900984882401285836160356370766010471018194295559619894676783744944825537977472684714047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272642699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559623648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332397394143334547762416862518983569485562099219222184272550254256887671794946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848968412848862694560424196528502221066118636744278622039194945471237137869609563643719172874677646575739624138986583264599581339047802759009 -- cgit From 2cf23d56635af6ce7adf743b7019c06c72927c01 Mon Sep 17 00:00:00 2001 From: Abigail Date: Tue, 2 Feb 2021 15:02:55 +0100 Subject: Add notes to README for part 1 --- challenge-004/abigail/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index daf44cedce..05dfde6689 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -6,6 +6,20 @@ Write a script to output the same number of PI digits as the size of your script. Say, if your script size is `10`, it should print `3.141592653`. +### Notes +We're going to encode the digits (after the decimal dot) in groups +of 9 in base-91. 9 base-10 digits need 5 base-91 digits. We represent +the base-91 digits as ASCII characters, from '#' (0) to '~' (90). +Now, '#' to '~' covers a range of 92; however, when encoding, we +will be skipping '\'. Choosing a range from '#' to '~' while skipping +'\' means we can easily use this in double quoted strings (for languages +which don't do interpolation). + +This gives a reduction of 44% (9 decimals encoded in 5 characters). By +using 3242 digits of Pi, we decidate 1800 characters to the encoding +of Pi, which gives us plenty of room to write code to do the decoding +and printing. We may even need to filler comments to make it all work out. + ### Solutions * [AWK](awk/ch-1.awk) * [C](c/ch-1.c) -- cgit From 6d6e9763d6af2c0cee2e079468f5b803f8cbe7ab Mon Sep 17 00:00:00 2001 From: Abigail Date: Wed, 3 Feb 2021 00:47:15 +0100 Subject: Bash solution for week 4, part 1 --- challenge-004/abigail/README.md | 1 + challenge-004/abigail/bash/ch-1.sh | 79 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 challenge-004/abigail/bash/ch-1.sh diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index 05dfde6689..0f0f6a2a17 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -22,6 +22,7 @@ and printing. We may even need to filler comments to make it all work out. ### Solutions * [AWK](awk/ch-1.awk) +* [Bash](bash/ch-1.sh) * [C](c/ch-1.c) * [Perl](perl/ch-1.pl) diff --git a/challenge-004/abigail/bash/ch-1.sh b/challenge-004/abigail/bash/ch-1.sh new file mode 100644 index 0000000000..1740f2d690 --- /dev/null +++ b/challenge-004/abigail/bash/ch-1.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +# +# See ../README.md +# + +# +# Run as: bash ch-1.sh +# + +in_size=5 +out_size=9 +printf -v first_ord "%d" "'#" +printf -v skip_ord "%d" "'\\" +printf -v last_ord "%d" "'~" +range=$(($last_ord - $first_ord)) + +printf "3." +while read line +do length=${#line} + for ((i = 0; i < $length; i += $in_size)) + do out=0 + for ((j = $i; j < $i + $in_size; j ++)) + do char="${line:$j:1}" + out=$(($out * $range)) + printf -v n "%d" "'$char" + if [ $n -ge $skip_ord ] + then n=$(($n - 1)) + fi + out=$(($out + $n - $first_ord)) + done + printf "%09d" $out + done +done <<'--' +%(uP7+Y`ME)gy(7')v?;%s^qc(Mj1}16idp'ONGs'2m.o,1HLY'}~P61@@Y- +*O/.v,Jc~D+ttA'&EPjR(zXxD$dr,M$P=-f*YQqe,GIZ`0x5oL1(mpl17en` +)Q$ge,L6_5.I;hj%yy6n,L_t')dtyy)[ugS&-3(c&lC:a&~8SP#+iis+WR&8 +*Y;V3/+JD@-J>7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z +0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb} +%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`] +&*M#'1wg +-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD +#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p +&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r +#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J +*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI} +(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt +%{(NN&Kn$]*e0, +$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t +-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[ +(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi +,S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a& +&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z +,:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA +/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C +'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S +)-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>- ++mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH +%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB +-- +echo + +# +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER? +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER: +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER! +# -- cgit From 66765a2a985836b816d0704dcfa33ee931abc8d2 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 4 Feb 2021 16:24:07 +0100 Subject: Lua solution for week 4, part 1 --- challenge-004/abigail/README.md | 1 + challenge-004/abigail/lua/ch-1.lua | 71 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 challenge-004/abigail/lua/ch-1.lua diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index 0f0f6a2a17..eabaa266df 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -24,6 +24,7 @@ and printing. We may even need to filler comments to make it all work out. * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) * [C](c/ch-1.c) +* [Lua](lua/ch-1.lua) * [Perl](perl/ch-1.pl) diff --git a/challenge-004/abigail/lua/ch-1.lua b/challenge-004/abigail/lua/ch-1.lua new file mode 100644 index 0000000000..03a06fd74b --- /dev/null +++ b/challenge-004/abigail/lua/ch-1.lua @@ -0,0 +1,71 @@ +#!/opt/local/bin/lua + +-- +-- See ../README.md +-- + +-- +-- Run as: lua ch-1.lua +-- + +local pi = "%(uP7+Y`ME)gy(7')v?;%s^qc(Mj1}16idp'ONGs'2m.o,1HLY'}~P61@@Y-" .. + "*O/.v,Jc~D+ttA'&EPjR(zXxD$dr,M$P=-f*YQqe,GIZ`0x5oL1(mpl17en`" .. + ")Q$ge,L6_5.I;hj%yy6n,L_t')dtyy)[ugS&-3(c&lC:a&~8SP#+iis+WR&8" .. + "*Y;V3/+JD@-J>7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z" .. + "0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb}" .. + "%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`]" .. + "&*M#'1wg" .. + "-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD" .. + "#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p" .. + "&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r" .. + "#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J" .. + "*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI}" .. + "(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt" .. + "%{(NN&Kn$]*e0," .. + "$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t" .. + "-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[" .. + "(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi" .. + ",S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a&" .. + "&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z" .. + ",:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA" .. + "/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C" .. + "'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S" .. + ")-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>-" .. + "+mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH" .. + "%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB"; + +local in_size = 5 +local out_size = 9 +local first_ord = string . byte ("#") +local skip_ord = string . byte ("\\") +local last_ord = string . byte ("~") +local range = last_ord - first_ord +local format = string . format ("%%0%dd", out_size) + +io . write ("3.") +for i = 1, pi : len (), in_size do + local out = 0 + for j = i, i + 4, 1 do + out = out * range + local n = pi : byte (j, j) + if n >= skip_ord + then n = n - 1 + end + out = out + n - first_ord + end + io . write (string . format (format, out)) +end +io . write ("\n") + + +-- +-- FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +-- FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +-- FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +-- FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER! +-- -- cgit From 7ae7154aef240d5f9d68c0848808a756f55efb5e Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 4 Feb 2021 17:24:24 +0100 Subject: Node.js solution for week 4, part 1 --- challenge-004/abigail/README.md | 1 + challenge-004/abigail/node/ch-1.js | 75 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 challenge-004/abigail/node/ch-1.js diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index eabaa266df..2881e61d13 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -25,6 +25,7 @@ and printing. We may even need to filler comments to make it all work out. * [Bash](bash/ch-1.sh) * [C](c/ch-1.c) * [Lua](lua/ch-1.lua) +* [Node.js](node/ch-1.node) * [Perl](perl/ch-1.pl) diff --git a/challenge-004/abigail/node/ch-1.js b/challenge-004/abigail/node/ch-1.js new file mode 100644 index 0000000000..aba62f0098 --- /dev/null +++ b/challenge-004/abigail/node/ch-1.js @@ -0,0 +1,75 @@ +#!/usr/local/bin/node + +// +// See ../README.md +// + +// +// Run as: node ch-1.js < input-file +// + +let pi = "%(uP7+Y`ME)gy(7')v?;%s^qc(Mj1}16idp'ONGs'2m.o,1HLY'}~P61@@Y-" + + "*O/.v,Jc~D+ttA'&EPjR(zXxD$dr,M$P=-f*YQqe,GIZ`0x5oL1(mpl17en`" + + ")Q$ge,L6_5.I;hj%yy6n,L_t')dtyy)[ugS&-3(c&lC:a&~8SP#+iis+WR&8" + + "*Y;V3/+JD@-J>7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z" + + "0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb}" + + "%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`]" + + "&*M#'1wg" + + "-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD" + + "#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p" + + "&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r" + + "#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J" + + "*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI}" + + "(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt" + + "%{(NN&Kn$]*e0," + + "$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t" + + "-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[" + + "(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi" + + ",S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a&" + + "&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z" + + ",:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA" + + "/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C" + + "'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S" + + ")-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>-" + + "+mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH" + + "%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB"; + + +let printf = require ('printf') +let in_size = 5 +let out_size = 9 +let first_ord = "#" . codePointAt (0) +let skip_ord = "\\" . codePointAt (0) +let last_ord = "~" . codePointAt (0) +let range = last_ord - first_ord +let format = printf ("%%0%dd", out_size) + +process . stdout . write ("3.") + +for (let i = 0; i < pi . length; i += in_size) { + let out = 0 + for (let j = i; j < i + in_size; j ++) { + out *= range + let n = pi . codePointAt (j) + if (n >= skip_ord) { + n -- + } + out += n - first_ord + } + printf (process . stdout, format, out) +} +process . stdout . write ("\n") + + +// +// FODDER FODDER FODDER FODDER FODDER FODDER FODDER +// FODDER FODDER FODDER FODDER FODDER FODDER FODDER +// FODDER FODDER FODDER FODDER FODDER FODDER FODDER +// FODDER FODDER FODDER FODDER FODDER FODDER FODDER +// FODDER FODDER FODDER FODDER FODDER FODDER FODDER +// -- cgit From 8297114a684efc916c987bece1566b256abfe123 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 4 Feb 2021 18:22:11 +0100 Subject: Python solution for week 4, part 1 --- challenge-004/abigail/README.md | 1 + challenge-004/abigail/python/ch-1.py | 76 ++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 challenge-004/abigail/python/ch-1.py diff --git a/challenge-004/abigail/README.md b/challenge-004/abigail/README.md index 2881e61d13..3499359165 100644 --- a/challenge-004/abigail/README.md +++ b/challenge-004/abigail/README.md @@ -27,6 +27,7 @@ and printing. We may even need to filler comments to make it all work out. * [Lua](lua/ch-1.lua) * [Node.js](node/ch-1.node) * [Perl](perl/ch-1.pl) +* [Python](python/ch-1.py) ## [Challenge 2](https://perlweeklychallenge.org/blog/perl-weekly-challenge-004/#challenge-2) diff --git a/challenge-004/abigail/python/ch-1.py b/challenge-004/abigail/python/ch-1.py new file mode 100644 index 0000000000..0f7f8bf725 --- /dev/null +++ b/challenge-004/abigail/python/ch-1.py @@ -0,0 +1,76 @@ +#!/opt/local/bin/python + +# +# See ../README.md +# + +# +# Run as python ch-1.py +# + +import sys + +pi = "%(uP7+Y`ME)gy(7')v?;%s^qc(Mj1}16idp'ONGs'2m.o,1HLY'}~P61@@Y-" + \ + "*O/.v,Jc~D+ttA'&EPjR(zXxD$dr,M$P=-f*YQqe,GIZ`0x5oL1(mpl17en`" + \ + ")Q$ge,L6_5.I;hj%yy6n,L_t')dtyy)[ugS&-3(c&lC:a&~8SP#+iis+WR&8" + \ + "*Y;V3/+JD@-J>7u0$Nh<#2&:@+#=`/*YtP-0t8uf+tf/V&yjx>+]S=&%d}7z" + \ + "0YXa9$SOyt$*mzv1&X(W(.{0G-Vya`0a}KI0pQD2,nV0:,WE0+#?F[>(iMb}" + \ + "%k(tB/UO0m.8R'x%Vys_-|IgL.y-n6(v[*#+/-J1#[`]" + \ + "&*M#'1wg" + \ + "-}+B}*jWDi)/2&k,h|/)+eu-3)9{mU-`:]M/YF$a.O0SF0{~2C.EjkZ&>|lD" + \ + "#%UmL+w)$V&14Ty0arq+%xnAo/XX/y0_=Bl/)f*}'Gc88'GV;X1RG~<+gJ8p" + \ + "&^E~A'/3N=*R2|j&SgD@-0St?*jL@'-ZsbD$+_hy.#HkF0cO_[#t0wL-8._r" + \ + "#0)@p#4(ha+lyD6,[|1w%_K//+c2#j.4xl2)SpX=.>)gp$R)ZP,IS%@,}%#J" + \ + "*1zj[,sIw#%6pwl%D'fk#Bx6'%4?.0&c9'?#R7P|&ZJ;M&q6q&&|h9?0LVI}" + \ + "(2lq>#/G+<,Bv`l+U'K?'2i}q+,J8W/7dU++X(l51R>#T&)fV0'I%FC%HHkt" + \ + "%{(NN&Kn$]*e0," + \ + "$K`U.%bSL*&dG^f,lN@.+jGbU.g8,s&FwUP$9p3S/)f(4,y>{*/L)t" + \ + "-Oi$Y*&I1x1Kyk#$}~i|)^4uG%|&sU)XNR-,PLl/.lmT'&_~it-16U9-B~A[" + \ + "(}s.a0~]Zj*<*~%-~N27%$O,*/a,,c%<#@60On3z0~3@B13UOG/A^&K,GRHi" + \ + ",S_:*&9I{_$nCM9&U^*9)WmPj+$TL8.]WpP)CWDR$u#7])K/Bi+,[B9(0~a&" + \ + "&=aag,L-UG#HoAx/=@p,&ux{:0($3X*[J<4,eh{E1F&tE$cGo.&C}15*:u{Z" + \ + ",:*H^'f,=~$,z%B)WZbL$DjA;/oFKa%.>ig/^o.90e/P=*Auex0TD}p/hncA" + \ + "/%d87#/u19,r&sM(A+4V0%4u$.}F+P0o|4e.g(<[#5yy*]3@5%II741/XZ>)Lm6e0``3L%.JF[+Z?8b(tj7C" + \ + "'S/z}#vS|i)S9[=*/nCG)PMaY-{pML);vN?%kRcr#*.Tg,x;42'(1w.0dA)S" + \ + ")-us%.#1$R-rkwf%m%B-(ctK8+4Sn^%*C1Y-wqsr%eNg11%$De&&07q+%1>-" + \ + "+mCl2%)V#w%#y:[,?t*D$64`9.U+{`-SBX-+gi/o)0B$q#V$tW+#lmM)';EH" + \ + "%yFPZ/Gy(~,dl@h)A&ju-Co2,-du++)[Awk&wE}p*H;._.[]4W+Eb7K#iiKB"; + + +in_size = 5 +out_size = 9 +first_ord = ord ("#") +skip_ord = ord ("\\") +last_ord = ord ("~") +ord_range = last_ord - first_ord +format = "{:0" + str (out_size) + "d}" + + +sys . stdout . write ("3.") + +for i in range (0, len (pi), in_size): + out = 0 + for j in range (i, i + in_size, 1): + out = out * ord_range + n = ord (pi [j]) + if n >= skip_ord: + n = n - 1 + out = out + n - first_ord + sys . stdout . write (format . format (out)) + +sys . stdout . write ("\n") + +# +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER? +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER +# FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER FODDER! +# -- cgit From 2237d53c685470f88deff3612da8b0fa825b1451 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 4 Feb 2021 19:26:36 +0100 Subject