From a6180cd9e375d5f36d77f7a2aac2650d5c642058 Mon Sep 17 00:00:00 2001 From: Abigail Date: Tue, 29 Jun 2021 00:07:16 +0200 Subject: AWK, C, Perl solutions for week 119, part 2. --- challenge-119/abigail/awk/ch-2.awk | 43 +++++++++++++++++++++++++++++ challenge-119/abigail/c/ch-2.c | 56 ++++++++++++++++++++++++++++++++++++++ challenge-119/abigail/perl/ch-2.pl | 39 ++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 challenge-119/abigail/awk/ch-2.awk create mode 100644 challenge-119/abigail/c/ch-2.c create mode 100644 challenge-119/abigail/perl/ch-2.pl diff --git a/challenge-119/abigail/awk/ch-2.awk b/challenge-119/abigail/awk/ch-2.awk new file mode 100644 index 0000000000..c0f502e082 --- /dev/null +++ b/challenge-119/abigail/awk/ch-2.awk @@ -0,0 +1,43 @@ +#!/usr/bin/awk + +# +# See ../README.md +# + +# +# Run as: awk -f ch-2.awk < input-file +# + +function next_num (prev_num, tail) { + match (prev_num, /3*$/) + tail = substr (prev_num, RSTART) + gsub (/3/, 1, tail) + if (RLENGTH == length (prev_num)) { + prev_num = 1 tail + } + else { + prev_num = substr (prev_num, 1, RSTART - 2) \ + (substr (prev_num, RSTART - 1, 1) + 1) \ + tail + } + + # + # Replace the trailing 1s with 1212... + # + if (match (prev_num, /1+$/)) { + tail = substr (prev_num, RSTART) + gsub (/11/, "12", tail) + prev_num = substr (prev_num, 1, RSTART - 1) tail + } + + return prev_num +} + + +{ + n = 0 + for (i = 0; i < $1; i ++) { + n = next_num(n) + } + print (n) +} diff --git a/challenge-119/abigail/c/ch-2.c b/challenge-119/abigail/c/ch-2.c new file mode 100644 index 0000000000..45effb48c5 --- /dev/null +++ b/challenge-119/abigail/c/ch-2.c @@ -0,0 +1,56 @@ +# include +# include +# include + +/* + * See ../README.md + */ + +/* + * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o < input-file + */ +# define BUF_SIZE 32 +int main (void) { + int num; + char number [BUF_SIZE + 1]; + + number [BUF_SIZE] = '\0'; + + while (scanf ("%d", &num) == 1) { + /* + * Set the string to all 0s + */ + for (int i = 0; i < BUF_SIZE; i ++) { + number [i] = '0'; + } + while (num --) { + int i; + /* + * All trailing 3s will be turned into 1s + */ + for (i = BUF_SIZE - 1; i > 0 && number [i] == '3'; i --) { + number [i] = '1'; + } + /* + * Increment the digit before the trailing 3s + */ + number [i] ++; + /* + * Replace every second 1 into a 2 of the trailing 1s + */ + for (i = BUF_SIZE - 1; i > 0 && number [i] == '1'; i --); + i += 2; + for (;i < BUF_SIZE; i += 2) { + number [i] = '2'; + } + } + /* + * Print the number, without the leading 0s + */ + int i; + for (i = 0; i < BUF_SIZE && number [i] == '0'; i ++); + printf ("%s\n", number + i); + } + + return (0); +} diff --git a/challenge-119/abigail/perl/ch-2.pl b/challenge-119/abigail/perl/ch-2.pl new file mode 100644 index 0000000000..b53a827411 --- /dev/null +++ b/challenge-119/abigail/perl/ch-2.pl @@ -0,0 +1,39 @@ +#!/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-2.pl < input-file +# + +sub next_num ($prev_num) { + # + # First, replace any trailing 3's with 1's, incrementing the + # digit which comes before. + # Then replace any trailing sequence of 1s with 12121... of the same + # length. + # Note we prepend the incoming number with "00" so we can anchor + # against it; we remove any leading 0s at the end. + # + "00$prev_num" =~ + s!([012])(3*)$!($1 + 1) . (1 x length $2)!re =~ + s!([023])((?:11)+)(1?)$!$1 . (12 x ((length $2) / 2)) . $3!re =~ + s!^0+!!r; +} + +while (<>) { + my $n = 0; + $n = next_num $n for 1 .. $_; + say $n; +} -- cgit From 0fadd390f0c5b8b1421c9acb8467db4cf199d819 Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 1 Jul 2021 21:59:35 +0200 Subject: Python solution for week 119, part 2 --- challenge-119/abigail/python/ch-2.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 challenge-119/abigail/python/ch-2.py diff --git a/challenge-119/abigail/python/ch-2.py b/challenge-119/abigail/python/ch-2.py new file mode 100644 index 0000000000..a8d72eb708 --- /dev/null +++ b/challenge-119/abigail/python/ch-2.py @@ -0,0 +1,25 @@ +#!/opt/local/bin/python + +# +# See ../README.md +# + +# +# Run as: python ch-2.py < input-file +# + +import re +import fileinput + +def next_num (prev_num): + match = re . match ('^(.*)([012])(3*)$', "0" + prev_num) + return (re . sub ('^0', '', \ + re . sub ('11', '12', match . group (1) + \ + str (int (match . group (2)) + 1) + \ + re . sub ('3', '1', match . group (3))))) + +for num in fileinput . input (): + number = "0" + for _ in range (int (num)): + number = next_num (number) + print (number) -- cgit From 41a4c746045ace71c5d5ec026345809adbe4275f Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 2 Jul 2021 22:18:56 +0200 Subject: Ruby solution for week 119, part 2 --- challenge-119/abigail/ruby/ch-2.rb | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 challenge-119/abigail/ruby/ch-2.rb diff --git a/challenge-119/abigail/ruby/ch-2.rb b/challenge-119/abigail/ruby/ch-2.rb new file mode 100644 index 0000000000..55ac672fca --- /dev/null +++ b/challenge-119/abigail/ruby/ch-2.rb @@ -0,0 +1,27 @@ +#!/usr/bin/ruby + +# +# See ../README.md +# + +# +# Run as: ruby ch-2.rb < input-file +# + +def next_num (prev_num) + ("0" + prev_num) . match (/^(.*)([012])(3*)$/) do + |match| + return (match [1] + (1 + match [2] . to_i) . to_s + + match [3] . gsub(/3/, "1")) . gsub(/11/, "12") . gsub(/^0/, "") + end +end + + +ARGF . each_line do + |num| + number = "0" + for i in 1 .. num . to_i do + number = next_num (number) + end + puts (number) +end -- cgit From 12472454215b6ad971dc79d86a7c7b9129f878b1 Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 2 Jul 2021 22:43:13 +0200 Subject: Bash solution for week 119, part 2 --- challenge-119/abigail/bash/ch-2.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 challenge-119/abigail/bash/ch-2.sh diff --git a/challenge-119/abigail/bash/ch-2.sh b/challenge-119/abigail/bash/ch-2.sh new file mode 100644 index 0000000000..3357e22cd7 --- /dev/null +++ b/challenge-119/abigail/bash/ch-2.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +# +# See ../README.md +# + +# +# Run as: bash ch-2.sh < input-file +# + +set -f + +function next_number () { + [[ 0$1 =~ ^(.*)([012])(3*)$ ]] + next_num=${BASH_REMATCH[1]}$((BASH_REMATCH[2] + 1))${BASH_REMATCH[3]//3/1} + next_num=${next_num//11/12} + next_num=${next_num/0/} +} + + +while read num +do number="0" + for ((i = 0; i < num; i ++)) + do next_number $number + number=$next_num + done + echo $number +done -- cgit From e9715ed6ad5a025c509a5592c62a8e14cbdb9841 Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 2 Jul 2021 22:44:56 +0200 Subject: Blog post for week 119, part 1 --- challenge-119/abigail/blog.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 challenge-119/abigail/blog.txt diff --git a/challenge-119/abigail/blog.txt b/challenge-119/abigail/blog.txt new file mode 100644 index 0000000000..b0b6be697f --- /dev/null +++ b/challenge-119/abigail/blog.txt @@ -0,0 +1 @@ +https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-119-1.html -- cgit From 7418418b85a99f948471dd7c3d961d1eec589979 Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 2 Jul 2021 23:50:42 +0200 Subject: bc solution for week 119, part 1 --- challenge-119/abigail/README.md | 1 + challenge-119/abigail/bc/ch-1.bc | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 challenge-119/abigail/bc/ch-1.bc diff --git a/challenge-119/abigail/README.md b/challenge-119/abigail/README.md index 03cfcb7919..6c491e6a05 100644 --- a/challenge-119/abigail/README.md +++ b/challenge-119/abigail/README.md @@ -33,6 +33,7 @@ decimal `33`. ### Solutions * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) +* [bc](bc/ch-1.bc) * [C](c/ch-1.c) * [Go](go/ch-1.go) * [Java](java/ch-1.java) diff --git a/challenge-119/abigail/bc/ch-1.bc b/challenge-119/abigail/bc/ch-1.bc new file mode 100644 index 0000000000..caeeb31b24 --- /dev/null +++ b/challenge-119/abigail/bc/ch-1.bc @@ -0,0 +1,15 @@ +# +# See ../README.md +# + +# +# Run as: bc ch-1.bc < input-file +# + +while (1) { + num = read () + if (num == 0) { + break + } + num - (num % 256) + (num % 16) * 16 + (num % 256) / 16 +} -- cgit From ac23884cde4169225c5d7a31f967afaebb1b8566 Mon Sep 17 00:00:00 2001 From: Abigail Date: Sat, 3 Jul 2021 01:23:08 +0200 Subject: Befunge-93 solution for week 119, part 1 --- challenge-119/abigail/README.md | 1 + challenge-119/abigail/befunge-93/ch-1.bf93 | 1 + challenge-119/abigail/t/ctest.ini | 3 +++ 3 files changed, 5 insertions(+) create mode 100644 challenge-119/abigail/befunge-93/ch-1.bf93 diff --git a/challenge-119/abigail/README.md b/challenge-119/abigail/README.md index 6c491e6a05..e84efb15aa 100644 --- a/challenge-119/abigail/README.md +++ b/challenge-119/abigail/README.md @@ -34,6 +34,7 @@ decimal `33`. * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) * [bc](bc/ch-1.bc) +* [Befunge-93](befunge-93/ch-1.bf93) * [C](c/ch-1.c) * [Go](go/ch-1.go) * [Java](java/ch-1.java) diff --git a/challenge-119/abigail/befunge-93/ch-1.bf93 b/challenge-119/abigail/befunge-93/ch-1.bf93 new file mode 100644 index 0000000000..f8bc20d14e --- /dev/null +++ b/challenge-119/abigail/befunge-93/ch-1.bf93 @@ -0,0 +1 @@ +> & :1+!#@_ : 44* % 44** \ 44*/ + . 55+, diff --git a/challenge-119/abigail/t/ctest.ini b/challenge-119/abigail/t/ctest.ini index 204106ba9b..8158e9b492 100644 --- a/challenge-119/abigail/t/ctest.ini +++ b/challenge-119/abigail/t/ctest.ini @@ -7,3 +7,6 @@ 1-1 = Given Examples 1-2 = First 255 positive integers 2-1 = Given Examples + +[challenges/1/bc] +add_to_input = 0 -- cgit From ae86b7bbd623028dd4d6b15f456e92201e06a83c Mon Sep 17 00:00:00 2001 From: Abigail Date: Sat, 3 Jul 2021 01:24:53 +0200 Subject: Pascal solution for week 119, part 1 --- challenge-119/abigail/README.md | 1 + challenge-119/abigail/pascal/ch-1.p | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 challenge-119/abigail/pascal/ch-1.p diff --git a/challenge-119/abigail/README.md b/challenge-119/abigail/README.md index e84efb15aa..c2ba036a3f 100644 --- a/challenge-119/abigail/README.md +++ b/challenge-119/abigail/README.md @@ -40,6 +40,7 @@ decimal `33`. * [Java](java/ch-1.java) * [Lua](lua/ch-1.lua) * [Node.js](node/ch-1.js) +* [Pascal](pascal/ch-1.p) * [Perl](perl/ch-1.pl) * [Python](python/ch-1.py) * [Ruby](ruby/ch-1.rb) diff --git a/challenge-119/abigail/pascal/ch-1.p b/challenge-119/abigail/pascal/ch-1.p new file mode 100644 index 0000000000..3d8be93535 --- /dev/null +++ b/challenge-119/abigail/pascal/ch-1.p @@ -0,0 +1,23 @@ +Program XXX; + +(* *) +(* See ../README.md *) +(* *) + +(* *) +(* Run as: fpc -och-1.out ch-1.p; ./ch-1.out < input-file *) +(* *) + +var num: integer; + +begin + while true do begin + readln (num); + if num = 0 then begin + break; + end; + writeln ((num and not $FF) or + (num and $0F) shl 4 or + (num and $F0) shr 4); + end +end. -- cgit