diff options
| author | Abigail <abigail@abigail.be> | 2021-11-14 19:04:39 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-11-14 19:05:04 +0100 |
| commit | 522e70815e8a79ccd7f628768e6699bf54747dd5 (patch) | |
| tree | d8e23b976fee0c9e07c5636d3acd1e0619f223fa /challenge-138 | |
| parent | c1db8bac0eaafcc7e7c94d712ce24dc69b776c53 (diff) | |
| download | perlweeklychallenge-club-522e70815e8a79ccd7f628768e6699bf54747dd5.tar.gz perlweeklychallenge-club-522e70815e8a79ccd7f628768e6699bf54747dd5.tar.bz2 perlweeklychallenge-club-522e70815e8a79ccd7f628768e6699bf54747dd5.zip | |
Solutions for week 138, part 2 in 14 languages.
Diffstat (limited to 'challenge-138')
| -rw-r--r-- | challenge-138/abigail/awk/ch-2.awk | 29 | ||||
| -rw-r--r-- | challenge-138/abigail/bash/ch-2.sh | 51 | ||||
| -rw-r--r-- | challenge-138/abigail/c/ch-2.c | 39 | ||||
| -rw-r--r-- | challenge-138/abigail/go/ch-2.go | 46 | ||||
| -rw-r--r-- | challenge-138/abigail/java/ch-2.java | 42 | ||||
| -rw-r--r-- | challenge-138/abigail/lua/ch-2.lua | 40 | ||||
| -rw-r--r-- | challenge-138/abigail/node/ch-2.js | 34 | ||||
| -rw-r--r-- | challenge-138/abigail/pascal/ch-2.p | 51 | ||||
| -rw-r--r-- | challenge-138/abigail/perl/ch-2.pl | 2 | ||||
| -rw-r--r-- | challenge-138/abigail/python/ch-2.py | 34 | ||||
| -rw-r--r-- | challenge-138/abigail/r/ch-2.r | 41 | ||||
| -rw-r--r-- | challenge-138/abigail/ruby/ch-2.rb | 39 | ||||
| -rw-r--r-- | challenge-138/abigail/scheme/ch-2.scm | 40 | ||||
| -rw-r--r-- | challenge-138/abigail/tcl/ch-2.tcl | 34 |
14 files changed, 521 insertions, 1 deletions
diff --git a/challenge-138/abigail/awk/ch-2.awk b/challenge-138/abigail/awk/ch-2.awk new file mode 100644 index 0000000000..b0fca5ffc4 --- /dev/null +++ b/challenge-138/abigail/awk/ch-2.awk @@ -0,0 +1,29 @@ +#!/usr/bin/awk + +# +# See ../README.md +# + +# +# Run as: awk -f ch-2.awk < input-file +# + +function can_split (target, number, pow_10) { + if (target > number || target < 0) {return 0} + if (target == number) {return 1} + + pow_10 = 10 + + while (pow_10 <= number) { + if (can_split(target - (number % pow_10), int (number / pow_10))) { + return 1 + } + pow_10 *= 10 + } + + return 0 +} + +{ + print ($1 > 1 && can_split(sqrt ($1), $1) ? 1 : 0) +} diff --git a/challenge-138/abigail/bash/ch-2.sh b/challenge-138/abigail/bash/ch-2.sh new file mode 100644 index 0000000000..f8de32c814 --- /dev/null +++ b/challenge-138/abigail/bash/ch-2.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +# +# See ../README.md +# + +# +# Run as: bash ch-2.sh < input-file +# + +set -f + +function can_split () { + local target=$1 + local number=$2 + + if ((target > number)) + then can_split=0; return + fi + if ((target < 0)) + then can_split=0; return + fi + if ((target == number)) + then can_split=1; return + fi + + local pow_10=10 + + while ((pow_10 <= number)) + do can_split $((target - (number % pow_10))) $((number / pow_10)) + if ((can_split == 1)) + then return + fi + ((pow_10 *= 10)) + done + + can_split=0 +} + + +while read num +do sqrt=$(echo "sqrt($num)" | bc) + if ((num > 1)) + then can_split $sqrt $num + if ((can_split == 1)) + then echo 1 + else echo 0 + fi + else echo 0 + fi +done diff --git a/challenge-138/abigail/c/ch-2.c b/challenge-138/abigail/c/ch-2.c new file mode 100644 index 0000000000..2b92934899 --- /dev/null +++ b/challenge-138/abigail/c/ch-2.c @@ -0,0 +1,39 @@ +# include <stdlib.h> +# include <stdio.h> +# include <string.h> +# include <stdbool.h> +# include <math.h> + +/* + * See ../README.md + */ + +/* + * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o < input-file + */ + +bool can_split (long long target, long long number) { + if (target > number || target < 0) {return false;} + if (target == number) {return true;} + + long long pow_10 = 10; + + while (pow_10 <= number) { + if (can_split (target - (number % pow_10), number / pow_10)) { + return true; + } + pow_10 *= 10; + } + + return false; +} + +int main (void) { + long long number; + + while (scanf ("%lld", &number) == 1) { + printf ("%d\n", number > 1 && + can_split ((long long) sqrt (number), number) ? 1 : 0); + } + return (0); +} diff --git a/challenge-138/abigail/go/ch-2.go b/challenge-138/abigail/go/ch-2.go new file mode 100644 index 0000000000..981efe77ee --- /dev/null +++ b/challenge-138/abigail/go/ch-2.go @@ -0,0 +1,46 @@ +package main + +// +// See ../README.md +// + +// +// Run as: go run ch-2.go < input-file +// + +import ( + "fmt" + "math" +) + +func can_split (target int, number int) bool { + if target > number || target < 0 {return false} + if target == number {return true} + + pow_10 := 10 + + for pow_10 <= number { + if can_split (target - (number % pow_10), number / pow_10) { + return true + } + pow_10 *= 10 + } + + return false +} + +func main () { + for { + var number, sqrt int + n, err := fmt . Scanf ("%d", &number) + if (n != 1 || err != nil) { + break + } + sqrt = int (math . Round (math . Sqrt (float64 (number)))) + if number > 1 && can_split (sqrt, number) { + fmt . Println (1) + } else { + fmt . Println (0) + } + } +} diff --git a/challenge-138/abigail/java/ch-2.java b/challenge-138/abigail/java/ch-2.java new file mode 100644 index 0000000000..065fd97f4f --- /dev/null +++ b/challenge-138/abigail/java/ch-2.java @@ -0,0 +1,42 @@ +// +// See ../README.md +// + +// +// Run as: ln ch-2.java ch2.java; javac ch2.java; java ch2 < input-file +// + +import java.util.*; +import java.lang.*; + +public class ch2 { + public static boolean can_split (long target, long number) { + if (target > number || target < 0) {return false;} + if (target == number) {return true;} + + long pow_10 = 10; + + while (pow_10 <= number) { + if (can_split (target - (number % pow_10), number / pow_10)) { + return true; + } + pow_10 *= 10; + } + + return false; + } + + public static void main (String [] args) { + Scanner scanner = new Scanner (System . in); + while (scanner . hasNextInt ()) { + int number = scanner . nextInt (); + int sqrt = (int) Math . round (Math . sqrt (number)); + if (number > 1 && can_split (sqrt, number)) { + System . out . println (1); + } + else { + System . out . println (0); + } + } + } +} diff --git a/challenge-138/abigail/lua/ch-2.lua b/challenge-138/abigail/lua/ch-2.lua new file mode 100644 index 0000000000..fa7fbe87b6 --- /dev/null +++ b/challenge-138/abigail/lua/ch-2.lua @@ -0,0 +1,40 @@ +#!/opt/local/bin/lua + +-- +-- See ../README.md +-- + +-- +-- Run as: lua ch-2.lua < input-file +-- + +function can_split (target, number) + if target > number or target < 0 then + return false + end + if target == number then + return true + end + + local pow_10 = 10 + + while pow_10 <= number do + if can_split (target - (number % pow_10), + math . floor (number / pow_10)) then + return true + end + pow_10 = pow_10 * 10 + end + + return false +end + +for number in io . lines () do + number = tonumber (number) + if number > 1 and + can_split (math . floor (math . sqrt (number)), number) then + print (1) + else + print (0) + end +end diff --git a/challenge-138/abigail/node/ch-2.js b/challenge-138/abigail/node/ch-2.js new file mode 100644 index 0000000000..571e5ff5f2 --- /dev/null +++ b/challenge-138/abigail/node/ch-2.js @@ -0,0 +1,34 @@ +#!/usr/local/bin/node + +// +// See ../README.md +// + +// +// Run as: node ch-2.js < input-file +// + +function can_split (target, number) { + if (target > number || target < 0) {return false} + if (target == number) {return true} + + let pow_10 = 10 + + while (pow_10 <= number) { + if (can_split (target - (number % pow_10), + Math . floor (number / pow_10))) { + return true + } + pow_10 *= 10 + } + + return false +} + + + require ('readline') +. createInterface ({input: process . stdin}) +. on ('line', number => { + console . log (number > 1 && can_split + (Math . trunc (Math . sqrt (number)), number) ? 1 : 0) +}) diff --git a/challenge-138/abigail/pascal/ch-2.p b/challenge-138/abigail/pascal/ch-2.p new file mode 100644 index 0000000000..cb5790803a --- /dev/null +++ b/challenge-138/abigail/pascal/ch-2.p @@ -0,0 +1,51 @@ +Program ch2; + +(* *) +(* See ../README.md *) +(* *) + +(* *) +(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out < input-file *) +(* *) + +function can_split (target: longint; number: longint): boolean; + var + pow_10: longint; + begin + if (target > number) or (target < 0) then begin + can_split := false; + exit; + end; + if (target = number) then begin + can_split := true; + exit; + end; + + pow_10 := 10; + + while pow_10 <= number do begin + if can_split (target - (number mod pow_10), + number div pow_10) then begin + can_split := true; + exit; + end; + + pow_10 := pow_10 * 10; + end; + + can_split := false; + exit; + end; + +var + number: longint; + +begin + while not eof do begin + readln (number); + if (number > 1) and can_split (round (sqrt (number)), number) then + writeln (1) + else + writeln (0) + end +end. diff --git a/challenge-138/abigail/perl/ch-2.pl b/challenge-138/abigail/perl/ch-2.pl index b9169688ee..236868a59a 100644 --- a/challenge-138/abigail/perl/ch-2.pl +++ b/challenge-138/abigail/perl/ch-2.pl @@ -47,7 +47,7 @@ sub can_split ($target, $number) { # and division we can trivially port to other language solutions, # while taking substrings requires more work. # - while ($pow_10 < $number) { + while ($pow_10 <= $number) { use integer; return 1 if can_split ($target - ($number % $pow_10), $number / $pow_10); diff --git a/challenge-138/abigail/python/ch-2.py b/challenge-138/abigail/python/ch-2.py new file mode 100644 index 0000000000..4f8b64186f --- /dev/null +++ b/challenge-138/abigail/python/ch-2.py @@ -0,0 +1,34 @@ +#!/opt/local/bin/python + +# +# See ../README.md +# + +# +# Run as: python ch-2.py < input-file +# + +import fileinput +import math + +def can_split (target, number): + if target > number or target < 0: + return 0 + if target == number: + return 1 + + pow_10 = 10 + + while pow_10 <= number: + if can_split (target - (number % pow_10), number // pow_10): + return 1 + pow_10 = 10 * pow_10 + + return 0 + +for number in fileinput . input (): + number = int (number) + if number > 1 and can_split (int (math . sqrt (number)), number): + print (1) + else: + print (0) diff --git a/challenge-138/abigail/r/ch-2.r b/challenge-138/abigail/r/ch-2.r new file mode 100644 index 0000000000..4443c358fa --- /dev/null +++ b/challenge-138/abigail/r/ch-2.r @@ -0,0 +1,41 @@ +# +# See ../README.md +# + +# +# Run as: Rscript ch-2.r < input-file +# + + +can_split <- function (target, number) { + if (target > number || target < 0) {return (0)} + if (target == number) {return (1)} + + pow_10 <- 10 + + while (pow_10 <= number) { + if (can_split (target - (number %% pow_10), number %/% pow_10)) { + return (1) + } + pow_10 <- pow_10 * 10 + } + + return (0) +} + + + +stdin <- file ('stdin', 'r') +repeat { + number <- readLines (stdin, n = 1) + if (length (number) == 0) { + break + } + number = as.integer (number) + if (number > 1 & can_split (sqrt (number), number)) { + cat ("1\n") + } + else { + cat ("0\n") + } +} diff --git a/challenge-138/abigail/ruby/ch-2.rb b/challenge-138/abigail/ruby/ch-2.rb new file mode 100644 index 0000000000..16eeec5a8e --- /dev/null +++ b/challenge-138/abigail/ruby/ch-2.rb @@ -0,0 +1,39 @@ +#!/usr/bin/ruby + +# +# See ../README.md +# + +# +# Run as: ruby ch-2.rb < input-file +# + +def can_split (target, number) + if target > number || target < 0 then + return false + end + if target == number then + return true + end + + pow_10 = 10 + + while pow_10 <= number do + if can_split(target - (number % pow_10), number / pow_10) then + return true + end + pow_10 *= 10 + end + + return false +end + +ARGF . each_line do + | number | + number = number . to_i + if number > 1 && can_split((Math . sqrt(number)) . to_i, number) then + puts (1) + else + puts (0) + end +end diff --git a/challenge-138/abigail/scheme/ch-2.scm b/challenge-138/abigail/scheme/ch-2.scm new file mode 100644 index 0000000000..5164184903 --- /dev/null +++ b/challenge-138/abigail/scheme/ch-2.scm @@ -0,0 +1,40 @@ +;;; +;;; See ../README.md +;;; + +;;; +;;; Run as: guile --no-auto-compile ch-2.scm +;;; + +(define (can-split target number) + (define r #f) + (cond ((> target number) #f) + ((< target 0) #f) + ((= target number) #t) + (else + (begin + (do ((pow_10 10 (* 10 pow_10))) + ((or (> pow_10 number) r)) + (set! r (can-split (- target (modulo number pow_10)) + (quotient number pow_10)))) + r))) +) + + +(define (main) + (define number (read)) + (define ssqq) + (if (not (eof-object? number)) + (begin + (set! ssqq (inexact->exact (round (sqrt number)))) + (if (and (> number 1) (can-split ssqq number)) + (display 1) + (display 0)) + (newline) + (main) + ) + ) +) + +(main) + diff --git a/challenge-138/abigail/tcl/ch-2.tcl b/challenge-138/abigail/tcl/ch-2.tcl new file mode 100644 index 0000000000..70c212d31e --- /dev/null +++ b/challenge-138/abigail/tcl/ch-2.tcl @@ -0,0 +1,34 @@ +# +# See ../README.md +# + +# +# Run as: tclsh ch-2.tcl < input-file +# + +proc can_split {target number} { + if {$target > $number} {return 0} + if {$target < 0} {return 0} + if {$target == $number} {return 1} + set pow_10 10 + while {$pow_10 < $number} { + if {[can_split [expr $target - ($number % $pow_10)] \ + [expr $number / $pow_10]]} {return 1} + set pow_10 [expr $pow_10 * 10] + } + return 0 +} + + +while {[gets stdin number] >= 0} { + set sqrt [expr isqrt ($number)] + if {$number > 1} { + if {[can_split $sqrt $number]} { + puts 1 + } { + puts 0 + } + } { + puts 0 + } +} |
