Sum \$\text{Square}^2\$

17

2

Let \$n=42\$ (Input)

Then divisors are : 1, 2, 3, 6, 7, 14, 21, 42

Squaring each divisor : 1, 4, 9, 36, 49, 196, 441, 1764

Taking sum (adding) : 2500

Since \$50\times 50=2500\$ therefore we return a truthy value. If it is not a perfect square, return a falsy value.

Examples :

42  ---> true
1   ---> true
246 ---> true
10  ---> false
16  ---> false

This is so shortest code in bytes for each language wins

Thanks to @Arnauld for pointing out the sequence : A046655

Any3nymous user

Posted 2018-09-10T18:18:55.173

Reputation: 539

2Can the program output 0 if the result is true, and any other number if the result is false? – JosiahRyanW – 2018-09-11T00:25:14.113

Answers

6

JavaScript (ES7),  46 44  42 bytes

Saved 1 byte thanks to @Hedi

n=>!((g=d=>d&&d*d*!(n%d)+g(d-1))(n)**.5%1)

Try it online!

Commented

n =>             // n = input
  !(             // we will eventually convert the result to a Boolean
    (g = d =>    // g is a recursive function taking the current divisor d
      d &&       //   if d is equal to 0, stop recursion 
      d * d      //   otherwise, compute d²
      * !(n % d) //   add it to the result if d is a divisor of n
      + g(d - 1) //   add the result of a recursive call with the next divisor
    )(n)         // initial call to g with d = n
    ** .5 % 1    // test whether the output of g is a perfect square
  )              // return true if it is or false otherwise

Arnauld

Posted 2018-09-10T18:18:55.173

Reputation: 111 334

1You can save one byte with d going from n to 0 instead of 2 to n like this: n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1) – Hedi – 2018-09-11T22:17:42.763

6

R, 39 37 bytes

!sum((y=1:(x=scan()))[!x%%y]^2)^.5%%1

Try it online!

Uses the classic "test if perfect square" approach, taking the non-integral part of the square root S^.5%%1 and taking the logical negation of it, as it maps zero (perfect square) to TRUE and nonzero to FALSE.

Thanks to Robert S for saving a couple of bytes!

Giuseppe

Posted 2018-09-10T18:18:55.173

Reputation: 21 077

1Could you use scan() to save a few bytes? – Robert S. – 2018-09-10T18:31:32.523

3@RobertS. doh! I've been doing too much "real" R coding lately! – Giuseppe – 2018-09-10T18:33:25.843

5

05AB1E, 5 bytes

ÑnOŲ

Try it online!

How?

ÑnOŲ
Ñ     - divisors
 n    - square
  O   - sum
   Ų - is square?

Jonathan Allan

Posted 2018-09-10T18:18:55.173

Reputation: 67 804

5

Shakespeare Programming Language, 434 428 415 bytes

,.Ajax,.Ford,.Puck,.Act I:.Scene I:.[Enter Ajax and Ford]Ford:Listen tothy.Scene V:.Ajax:You be the sum ofyou a cat.Ford:Is the remainder of the quotient betweenyou I worse a cat?[Exit Ajax][Enter Puck]Ford:If soyou be the sum ofyou the square ofI.[Exit Puck][Enter Ajax]Ford:Be you nicer I?If solet usScene V.[Exit Ford][Enter Puck]Puck:Is the square ofthe square root ofI worse I?You zero.If notyou cat.Open heart

Try it online!

-13 bytes thanks to Jo King!

Outputs 1 for true result, outputs 0 for false result.

JosiahRyanW

Posted 2018-09-10T18:18:55.173

Reputation: 2 600

415 bytes with a third character – Jo King – 2018-09-11T01:39:38.560

4

Python 2, 55 bytes

lambda n:sum(i*i*(n%i<1)for i in range(1,n+1))**.5%1==0

Try it online!

Chas Brown

Posted 2018-09-10T18:18:55.173

Reputation: 8 959

3

C (gcc), 67 63 60 59 bytes

-1 bytes thanks to @JonathanFrech

i,s;f(n){for(s=i=0;i++<n;)s+=n%i?0:i*i;n=sqrt(s);n=n*n==s;}

Try it online!

cleblanc

Posted 2018-09-10T18:18:55.173

Reputation: 3 360

1Can ++i<=n be i++<n? – Jonathan Frech – 2018-09-10T22:01:34.407

@JonathanFrech that seems to work, thanks. – cleblanc – 2018-09-11T13:36:00.480

3

Neim, 5 bytes

ᛦq

Explanation:

      Factors
 ᛦ      Squared
       Summed
       is in?
   q    infinite list of square numbers

Try it online!

Okx

Posted 2018-09-10T18:18:55.173

Reputation: 15 025

3

Brachylog, 12 8 bytes

f^₂ᵐ+~^₂

-4 bytes thanks to Fatelize cause i didn't realize brachylog has a factors functions

explanation

f^₂ᵐ+~^₂            #   full code
f                   #       get divisors
 ^₂ᵐ                #           square each one
    +               #       added together
      ~^₂           #       is the result of squaring a number

Try it online!

Kroppeb

Posted 2018-09-10T18:18:55.173

Reputation: 1 558

f^₂ᵐ is 4 bytes shorter than ḋ{⊇×^₂}ᵘ – Fatalize – 2018-09-12T07:14:14.357

3

MathGolf, 5 4 bytes

─²Σ°

Try it online!

Explanation

─     Get all divisors as list (implicit input)
 ²    Square (implicit map)
  Σ   Sum
   °  Is perfect square?

Very similar to other answers, compared to 05AB1E I gain one byte for my "is perfect square" operator.

maxb

Posted 2018-09-10T18:18:55.173

Reputation: 5 754

You know, something called "MathGolf" really should have a norm operator... that would have gotten you down to 3 bytes :) – Misha Lavrov – 2018-10-06T16:26:25.640

@MishaLavrov that's not a bad idea! Right now I don't have as many vector operations as I'd like, one of these days I'll change that – maxb – 2018-10-06T19:55:37.697

3

MATL, 9 bytes

Z\UsX^tk=

Try it online!

As simple as it gets

Z\ % Divisors of (implicit) input
U  % Square
s  % Sum
X^ % Square root
t  % Duplicate this value
k= % Is it equal to its rounded value?

Sanchises

Posted 2018-09-10T18:18:55.173

Reputation: 8 530

2

Japt, 11 9 7 bytes

-2 bytes from @Giuseppe and another -2 from @Shaggy

â x²¬v1

â x²¬v1             Full program. Implicity input U
â                   get all integer divisors of U
  x²                square each element and sum
    ¬               square root result
     v1           return true if divisible by 1

Try it online!

Luis felipe De jesus Munoz

Posted 2018-09-10T18:18:55.173

Reputation: 9 639

-2 more bytes – Shaggy – 2018-09-10T19:42:30.027

2

Matlab, 39 37 bytes

@(v)~mod(sqrt(sum(divisors(v).^2)),1)

Unfortunately, it doesn't work on Octave (on tio) so no tio link.

Note As @LuisMendo stated, divisors() belongs to Symbolic Toolbox.

DimChtz

Posted 2018-09-10T18:18:55.173

Reputation: 916

1It looks like divisors belongs to the Symbolic Toolbox. You should state that in the title. Also, you can use ~··· instead of ···==0 – Luis Mendo – 2018-09-10T21:39:39.143

You can shorten this by using sum(...)^.5 instead of sqrt(sum(...)) – Sanchises – 2018-12-11T14:56:14.453

2

PowerShell, 68 56 bytes

param($n)1..$n|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}

Try it online!

Seems long ...
-12 bytes thanks to mazzy

Does exactly what it says on the tin. Takes the range from 1 to input $n and multiplies out the square $_*$_ times whether it's a divisor or not !($n%$_). This makes divisors equal to a nonzero number and non-divisors equal to zero. We then take the sum of them with our accumulator $a. Next, we loop again from 1 up to $a and pull out those numbers where |?{...} it squared is -equal to $a. That is left on the pipeline and output is implicit.

Outputs a positive integer for truthy, and nothing for falsey.

AdmBorkBork

Posted 2018-09-10T18:18:55.173

Reputation: 41 581

the rare case where $args[0] is shorter :) 1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a} – mazzy – 2018-09-10T19:00:47.240

1@mazzy It's not, because you need $n inside the loop for !($n%$_). But, your rewrite of the sum saved 12 bytes, so thanks! – AdmBorkBork – 2018-09-10T19:11:02.470

what a shame. so I would like to find a case where $args[0] is shorter :) – mazzy – 2018-09-10T19:18:21.107

2

K (oK), 26 25 22 bytes

Solution:

{~1!%+/x*x*~1!x%:1+!x}

Try it online!

Explanation:

{~1!%+/x*x*~1!x%:1+!x} / the solution
{                    } / lambda taking x as input
                   !x  / range 0..x-1                        \
                 1+    / add 1                               |
              x%:      / x divided by and save result into x |
            1!         / modulo 1                            | get divisors
           ~           / not                                 |
         x*            / multiply by x                       /
       x*              / multiply by x (aka square)          > square
     +/                / sum up                              > sum up
    %                  / square root                         \  
  1!                   / modulo 1                            | check if a square
 ~                     / not                                 / 

Notes:

  • -1 bytes taking inspiration from the PowerShell solution
  • -3 bytes taking inspiration from the APL solution

streetster

Posted 2018-09-10T18:18:55.173

Reputation: 3 635

2

APL (Dyalog Unicode), 18 bytes

0=1|.5*⍨2+.*⍨∘∪⍳∨⊢

Try it online!

Anonymous lambda. Returns 1 for truthy and 0 for falsy (test cases in TIO are prettified).

Shoutouts to @H.PWiz for 4 bytes!

How:

0=1|.5*⍨2+.*⍨∘∪⍳∨⊢   ⍝ Main function, argument ⍵ → 42
                ∨⊢   ⍝ Greatest common divisor (∨) between ⍵ (⊢)
               ⍳      ⍝ and the range (⍳) [1..⍵]
              ∪      ⍝ Get the unique items (all the divisors of 42; 1 2 3 6 7 14 21 42)
             ∘        ⍝ Then
            ⍨         ⍝ Swap arguments of
        2+.*          ⍝ dot product (.) of sum (+) and power (*) between the list and 2 
                      ⍝ (sums the result of each element in the vector squared)
       ⍨              ⍝ Use the result vector as base
    .5*               ⍝ Take the square root
  1|                  ⍝ Modulo 1
0=                    ⍝ Equals 0

J. Sallé

Posted 2018-09-10T18:18:55.173

Reputation: 3 233

Can you do the equivalent of not rather than 0= to save a byte? – streetster – 2018-09-11T06:58:51.017

@streetster unfortunately, I cannot for 2 reasons. First, APL's not operator (~), when used monadically, only works with booleans (either 0 or 1). Since any number modulo 1 never equals 1, if I used ~ instead of 0=, I'd get a domain error on any number that's not a perfect square, since decimal values are out of ~'s domain. Furthermore, I cannot simply omit the 0=, since APL's truthy value is 1, not 0, and it wouldn't have a consistent output for falsy values. – J. Sallé – 2018-09-11T12:55:32.053

2

Pyt, 7 bytes

ð²ƩĐř²∈

Try it online!

Explanation

            Implicit input
ð           Get list of divisors
 ²          Square each element
  Ʃ         Sum the list [n]
   Đ        Duplicate the top of the stack
    ř²      Push the first n square numbers
      ∈     Is n in the list of square numbers?
            Implicit output

ð²Ʃ√ĐƖ=

Try it online!

Explanation

            Implicit input
ð           Get list of divisors
 ²          Square each element
  Ʃ         Sum the list [n]
   √        Take the square root of n
    Đ       Duplicate the top of the stack
     Ɩ      Cast to an integer
      =     Are the top two elements on the stack equal to each other?
            Implicit output

ð²Ʃ√1%¬

Try it online!

Explanation

            Implicit input
ð           Get list of divisors
 ²          Square each element
  Ʃ         Sum the list [n]
   √        Take the square root of n
    1%      Take the square root of n modulo 1
      ¬     Negate [python typecasting ftw :)]
            Implicit output

mudkip201

Posted 2018-09-10T18:18:55.173

Reputation: 833

2

Haskell, 78 64 53 bytes

-14 bytes thanks to Ørjan Johansen. -11 bytes thanks to ovs.

f x=sum[i^2|i<-[1..x],x`mod`i<1]`elem`map(^2)[1..x^2]

Try it online!

Hey, it's been a while since I've... written any code, so my Haskell and golfing might a bit rusty. I forgot the troublesome Haskell numeric types. :P

totallyhuman

Posted 2018-09-10T18:18:55.173

Reputation: 15 378

1

It's shorter (but slower) to avoid those conversions by searching for the square root with another list comprehension. Try it online!

– Ørjan Johansen – 2018-09-11T02:36:40.607

1Shorter: f x|s<-sum[i^2|i<-[1..x],mod x i<1]=round(sqrt$toEnum s)^2==s – Damien – 2018-09-11T09:22:43.347

2

Building up on Ørjan Johansen's suggestion, this should work for 53 bytes.

– ovs – 2018-09-11T13:16:01.533

2

Pari/GP, 23 bytes

n->issquare(sigma(n,2))

Try it online!

alephalpha

Posted 2018-09-10T18:18:55.173

Reputation: 23 988

1

Jelly, 6 bytes

ÆD²SƲ

Try it online! Or see the test-suite.

How?

ÆD²SƲ - Main Link: integer
ÆD     - divisors
  ²    - square
   S   - sum
    Ʋ - is square?

Jonathan Allan

Posted 2018-09-10T18:18:55.173

Reputation: 67 804

1

Husk, 6 bytes

£İ□ṁ□Ḋ

Try it online!

Explanation

£İ□ṁ□Ḋ  -- example input 12
     Ḋ  -- divisors: [1,2,3,4,6,12]
   ṁ    -- map the following ..
    □   -- | square: [1,4,9,16,36,144]
        -- .. and sum: 210
£       -- is it element of (assumes sorted)
 İ□     -- | list of squares: [1,4,9,16..196,225,..

ბიმო

Posted 2018-09-10T18:18:55.173

Reputation: 15 345

1

Proton, 41 bytes

a=>sum(q*q for q:1..a+1if a%q<1)**.5%1==0

Try it online!

Similar approach to the Python answer.

HyperNeutrino

Posted 2018-09-10T18:18:55.173

Reputation: 26 575

1

Mathematica, 32 bytes

IntegerQ@Sqrt[2~DivisorSigma~#]&

Pure function. Takes a number as input and returns True or False as output. Not entirely sure if there's a shorter method for checking perfect squares.

LegionMammal978

Posted 2018-09-10T18:18:55.173

Reputation: 15 731

1

Octave / MATLAB, 43 bytes

@(n)~mod(sqrt(sum(find(~mod(n,1:n)).^2)),1)

Try it online!

Luis Mendo

Posted 2018-09-10T18:18:55.173

Reputation: 87 464

1

Perl 6, 34 bytes

-1 byte thanks to nwellnhof

{grep($_%%*,1..$_)>>².sum**.5%%1}

Try it online!

Jo King

Posted 2018-09-10T18:18:55.173

Reputation: 38 234

**.5 is one byte shorter than .sqrt. – nwellnhof – 2018-09-11T14:42:17.950

1

Scala, 68 67 bytes

def j(s:Int)=Math.sqrt((1 to s).filter(s%_<1).map(a=>a*a).sum)%1==0

Try it online!

Varon

Posted 2018-09-10T18:18:55.173

Reputation: 119

1

Java 8, 75 70 bytes

n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}

-5 bytes thanks to @archangel.mjj.

Try it online.

Explanation:

n->{             // Method with integer parameter and boolean return-type
  int s=0,       //  Sum-integer, starting at 0
      i=0;       //  Divisor integer, starting at 0
  for(;++i<=n;)  //  Loop `i` in the range [1, n]
    s+=n%i<1?    //   If `n` is divisible by `i`:
        i*i      //    Increase the sum by the square of `i`
       :         //   Else:
        0;       //    Leave the sum the same by adding 0
  return Math.sqrt(s)%1==0;}
                 //  Return whether the sum `s` is a perfect square

Kevin Cruijssen

Posted 2018-09-10T18:18:55.173

Reputation: 67 575

1Hi, you can cut 5 bytes by removing the t variable (do the eval and assignment within the body of the for loop), like so: n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;} – archangel.mjj – 2018-09-13T08:26:58.057

@archangel.mjj Ah, of course. Not sure how I missed that. Thanks! :) – Kevin Cruijssen – 2018-09-13T08:36:20.603

1

Red, 67 bytes

func[n][s: 0 repeat d n[if n % d = 0[s: d * d + s]](sqrt s)% 1 = 0]

Try it online!

Galen Ivanov

Posted 2018-09-10T18:18:55.173

Reputation: 13 815

1

F#, 111 bytes

let d n=Seq.where(fun v->n%v=0){1..n}
let u n=
 let m=d n|>Seq.sumBy(fun x->x*x)
 d m|>Seq.exists(fun x->x*x=m)

Try it online!

So d gets the divisors for all numbers between 1 and n inclusive. In the main function u, the first line assigns the sum of all squared divisors to m. The second line gets the divisors for m and determines if any of them squared equals m.

Ciaran_McCarthy

Posted 2018-09-10T18:18:55.173

Reputation: 689

1

Perl 5, 47 bytes

$a+=$_*$_*!($n%$_)for 1..$n;$a=!($a**.5=~/\D/); 

Returns 1 for true and nothing for false.

Explanation:

$a+=              for 1..$n;                      sum over i=1 to n
    $_*$_                                         square each component of the sum
         *!($n%$_)                                multiply by 1 if i divides n.
                            $a=                   a equals
                                ($a**.5           whether the square root of a
                               !       =~/\D/);   does not contain a non-digit.

user591898

Posted 2018-09-10T18:18:55.173

Reputation: 11

1

Groovy, 47 bytes

A lambda accepting a numeric argument.

n->s=(1..n).sum{i->n%i?0:i*i}
!(s%Math.sqrt(s))

Explanation

(1..n) creates an array of the values 1 to n

n%i is false (as 0 is falsy) if i divides n without remainder

n%i ? 0 : i*i is the sum of the square of the value i if it divides n without remainder, otherwise is 0

sum{ i-> n%i ? 0 : i*i } sums the previous result across all i in the array.

s%Math.sqrt(s) is false (as 0 is falsy) if the sqrt of s divides s without remainder

!(s%Math.sqrt(s)) returns from the lambda (return implicit on last statement) !false when the sqrt of s divides s without remainder

Try it online!

archangel.mjj

Posted 2018-09-10T18:18:55.173

Reputation: 81

1

Stax, 10 9 bytes

▀ùj╦┬44eR

Run and debug it at staxlang.xyz!

Unpacked (11 bytes) and explanation:

:d{J+kc|qJ=
:d             Implicit input. Make list of divisors.
  {  k         Reduce using block:
   J+            Square and add to the running total.
      c        Copy this sum of squares on the stack.
       |qJ     Take square root, rounding down. Square.
          =    Check for equality.

Khuldraeseth na'Barya

Posted 2018-09-10T18:18:55.173

Reputation: 2 608

1

C# (Visual C# Interactive Compiler), 141 137 135 131 61 bytes

Thanks ASCII-only.

a=>Math.Sqrt(Enumerable.Range(1,a).Sum(b=>a%b==0?b*b:0))%1==0

Explanation:

a => Math.Sqrt(                                                    ) % 1 == 0 //Square root, test for whole number
               Enumerable.Range(1, a).Sum(                        ) //Sum 1 through a with..
                                          b => a % b==0 ? b * b: 0 //b^2 if a modulo b = 0, else 0

Try it online!

Epicness

Posted 2018-09-10T18:18:55.173

Reputation: 81

Divide by zero exception because division by zero is undefined... – ASCII-only – 2019-01-13T05:38:01.997

Fixed? – ASCII-only – 2019-01-13T05:38:39.067

Wait... this isn't valid – ASCII-only – 2019-01-13T05:51:39.870

here – ASCII-only – 2019-01-13T05:54:34.583

using the implicit imports of the REPL (mostly for free LINQ) – ASCII-only – 2019-01-13T05:56:49.363

Thanks @ASCII-only! – Epicness – 2019-01-16T02:04:44.767

Note that REPL counts as a different language (well, different implementation) because it behaves differently to normal C# (mostly the imports) – ASCII-only – 2019-01-16T02:19:28.163

@ASCIIOnly - How about a%b==0 vs a%b<1 ? – dana – 2019-01-16T02:26:18.430

1

Pyth, 26 16 bytes

!%@s^R2*M{yPQ2 1

Try it online!

I'm new to Pyth (and golfing in general) so this is pretty bad. Pyth doesn't have a built-in to get divisors, so I had to do that. Up until the perfect-square check, it was pretty alright, but after that it became a bit cluttered because of the if statement. Criticism is welcome.

-10 bytes thanks to Sok

Explanation:

            Q               #get user input
       *M{yP                #get the divisors
    ^R2                     #square each divisor
   s                        #sum the list
  @          2              #get square root
 %             1            #check if sqrt is a whole number (mod 1)
!                           #invert (0 -> True, any other num -> False)

kungfushark

Posted 2018-09-10T18:18:55.173

Reputation: 61

A few savings for you - m^d2 can be ^R2, and @ functions as the root operator, so ^...c1h1 can be @...2. The return value is if the root mod 1 is non-zero - that is, should return True if the result of the mod is 0, and False otherwise - this means we can just use ! to invert the truthiness of the mod. Full program is then !%@s^R2*M{yPQ2 1 - demonstration

– Sok – 2018-10-09T08:26:26.783

1

Wolfram Language (Mathematica), 24 20 bytes

1∣Norm@Divisors@#&

Try it online!

Divisors finds all the divisors of a number, Norm takes the square root of the sum of squares, and then we test if this is divisible by 1 (i.e., is an integer).

Misha Lavrov

Posted 2018-09-10T18:18:55.173

Reputation: 4 846

1

C# (.NET Core), 115 74 bytes

Thanks to user Misha Lavrov for teaching me how to properly do code golf! :)

a=>{int s=0;for(int i=0;i++<=a;)s+=a%i==0?i*i:0;return Math.Sqrt(s)%1==0;}

Try it online!

Ungolfed:

a => {                              // reads input
    int s = 0;                      // holds sum of squares
    for(int i = 0; i++ <= a;)       // index from 1 to input, inclusive
    {
        s +=                        // add to sum
            a % i == 0 ?            // check if remainder of input divided by current index is zero
                i * i : 0;          // if true, add square of current index, else add zero
    }
    return Math.Sqrt(s) % 1 == 0;   // prints "True" if square root is whole number, "False" otherwise
}

Meerkat

Posted 2018-09-10T18:18:55.173

Reputation: 371

1

I think it's standard to do input and output via a pure function, something like this. So you don't have to count the length of Console.ReadLine() and such, that way.

– Misha Lavrov – 2018-10-05T20:26:52.027

Good to know, thank you. I'll keep this in mind for the future! – Meerkat – 2018-10-05T20:33:06.497

using the interpreter saves a bit, although i've already posted this link on the other C# answer, so not sure what to do – ASCII-only – 2019-01-13T05:58:56.477

Also, invalid, you need to use System.Math.Sqrt - the System import isn't free, so this is the cheapest alternative – ASCII-only – 2019-01-13T06:00:11.283

also, no need to convert input since this is a function – ASCII-only – 2019-01-13T06:00:57.070

Ok, still working on how it wants a link.. – Destroigo – 2019-01-16T15:00:30.537

70 bytes. a=>{int s=0,i=0;for(;i++<=a;)s+=a%i>0?0:i*i;return Math.Sqrt(s)%1==0;} – Destroigo – 2019-01-16T15:08:12.847

1

Ohm v2, 5 bytes

V²ΣƲ

Try it online! Explanation:

V²ΣƲ    
V      Pushes input's divisors
 ²     Squares
   Σ   Sum
    Ʋ Returns whether value is a proper square.

ThePlasmaRailgun

Posted 2018-09-10T18:18:55.173

Reputation: 383

1

Taxi, 4430 4305 bytes

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Cyclone.0 is waiting at Starchild Numerology.0 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 1 l 2 l.Pickup a passenger going to Rob's Rest.Pickup a passenger going to Addition Alley.Go to Rob's Rest:w 1 r 2 l 1 r.Go to Cyclone:s 1 l 1 l 2 l.[B]Pickup a passenger going to Divide and Conquer.1 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 r 3 l.Pickup a passenger going to Addition Alley.Go to Addition Alley:w 1 r 3 r 1 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l.Pickup a passenger going to Sunny Skies Park.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Cyclone.Go to Sunny Skies Park:e 1 l 1 l 2 l 1 l.Go to Zoom Zoom:n 1 r.Go to Cyclone:w.Pickup a passenger going to Sunny Skies Park.Pickup a passenger going to Equal's Corner.Pickup a passenger going to Trunkers.Go to Sunny Skies Park:n 1 r.Go to Trunkers:s 1 l.Pickup a passenger going to Equal's Corner.Go to Equal's Corner:w 1 l.Switch to plan C if no one is waiting.Pickup a passenger going to Riverview Bridge.Go to Sunny Skies Park:n.Pickup a passenger going to Sunny Skies Park.Pickup a passenger going to Cyclone.Go to Riverview Bridge:n 1 r 1 r.Go to Cyclone:w 2 l.Pickup a passenger going to Cyclone.Go to Sunny Skies Park:n 1 r.Go to Cyclone:n 1 l.Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to Addition Alley.Go to Rob's Rest:s 1 r 2 l 1 l 1 r 1 r.Pickup a passenger going to Addition Alley.Go to Addition Alley:s 1 l 1 l 2 r 1 r 1 r.Pickup a passenger going to Rob's Rest.Go to Rob's Rest:n 1 l 1 l 1 l 2 r 1 r.Go to Cyclone:s 1 l 1 l 2 l.Pickup a passenger going to Magic Eight.Go to Sunny Skies Park:n 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l.Pickup a passenger going to Cyclone.Pickup a passenger going to Magic Eight.Go to Magic Eight:s 1 l 2 r.Switch to plan D if no one is waiting.Pickup a passenger going to Addition Alley.Go to Cyclone:n 1 l 2 r.Switch to plan B.[C]Go to Sunny Skies Park:n.Pickup a passenger going to Cyclone.Pickup a passenger going to Addition Alley.Go to Cyclone:n 1 l.Switch to plan B.[D]Go to Cyclone:n 1 l 2 r.Pickup a passenger going to Sunny Skies Park.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 r.Go to Rob's Rest:s 2 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:s 1 l 1 l 2 l.Pickup a passenger going to Cyclone.Pickup a passenger going to Cyclone.Go to Zoom Zoom:n.Go to Cyclone:w.[E]Pickup a passenger going to Joyless Park.Pickup a passenger going to Divide and Conquer.Go to Joyless Park:n 2 r 2 r 2 l.Go to Cyclone:w 1 r 2 l 2 l.Pickup a passenger going to Cyclone.Pickup a passenger going to Joyless Park.Go to Joyless Park:n 2 r 2 r 2 l.Go to Cyclone:w 1 r 2 l 2 l.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Magic Eight.1 is waiting at Starchild Numerology.Go to Starchild Numerology:e 1 r 3 r 1 l 1 l 2 l.Pickup a passenger going to Magic Eight.Go to Magic Eight:w 1 r 2 r 1 r.Switch to plan F if no one is waiting.Pickup a passenger going to Riverview Bridge.Go to Joyless Park:e 2 l 4 r.Pickup a passenger going to Cyclone.Pickup a passenger going to The Underground.Go to The Underground:w 1 l.Pickup a passenger going to Cyclone.Go to Fueler Up:s.Go to Riverview Bridge:n 3 l.Go to Cyclone:w 2 l.Switch to plan E.[F]Go to Joyless Park:e 2 l 4 r.Pickup a passenger going to What's The Difference.Pickup a passenger going to Cyclone.Go to Cyclone:w 1 r 2 l 2 l.Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 2 l 1 r 3 l.Pickup a passenger going to Knots Landing.Go to Knots Landing:e 4 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:w 1 l.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

Try it online!

I went to a lot of places in Townsburg that I've never visited before for this program. Because this program is HUGE (mainly due to the fact that there isn't a one-stop way to take square roots; I still don't actually do that, though), I'm going to attempt to sketch out an explanation of this program.

Go to Post Office:w 1 l 1 r 1 l.

[Take an input line from STDIN.]

Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:s 1 l 1 r.

[Take it to The Babelfishery, which converts the string to a double.]
[If you were to give it a double, it gives back a string.]

Pickup a passenger going to Cyclone.

[We're going to clone this number by sending it to the Cyclone.]

0 is waiting at Starchild Numerology.

[In Taxi, numeric passengers are introduced once they wait at Starchild Numerology.]
[This passenger will be our running squares total.]

0 is waiting at Starchild Numerology.

[This passenger will be our counter, going from 1 to the inputted number.]
[Yes, it's starting at 0 here, but it is incremented at the start of our loop.]

Go to Starchild Numerology:n 1 l 1 l 1 l 2 l.
Pickup a passenger going to Rob's Rest.
Pickup a passenger going to Addition Alley.
Go to Rob's Rest:w 1 r 2 l 1 r.
Go to Cyclone:s 1 l 1 l 2 l.

[Drop off the squares total at Rob's Rest. We'll pick it back up later when we need it.]
[Also, do the actual cloning of the inputted number.]

[At the start of each loop, our only passenger is the counter, going to Addition Alley.]

[B]
Pickup a passenger going to Divide and Conquer.

[Pick up one of the clones of the inputted number.]
[We will leave the other clone here for later.]

1 is waiting at Starchild Numerology.
Go to Starchild Numerology:n 1 r 3 l.
Pickup a passenger going to Addition Alley.
Go to Addition Alley:w 1 r 3 r 1 r 1 r.
Pickup a passenger going to Cyclone.

[Pick up the number 1, and add it to the counter, then pick up the result.]
[This new passenger is our new counter.]

Go to Cyclone:n 1 l 1 l.
Pickup a passenger going to Sunny Skies Park.
Pickup a passenger going to Divide and Conquer.

[First we pick up the other clone of the inputted number, going to Sunny Skies Park.]
[Sunny Skies Park is basically a First-In-First-Out queue, where we will stick it for later.]
[Then we pick up a clone of the counter which we just dropped off, so we can divide the input by it.]
[We will leave the other clone here for later.]

Go to Divide and Conquer:n 2 r 2 r 1 r.
Pickup a passenger going to Cyclone.

[Divide the inputted number by the counter, and prepare to clone it.]

Go to Sunny Skies Park:e 1 l 1 l 2 l 1 l.

[Drop off our clone of the inputted number at Sunny Skies Park.]

Go to Zoom Zoom:n 1 r.

[Can't forget to get gas!]
[Zoom Zoom is a close gas station, and we have so many credits that one stop here every iteration fills us up completely.]

Go to Cyclone:w.
Pickup a passenger going to Sunny Skies Park.
Pickup a passenger going to Equal's Corner.
Pickup a passenger going to Trunkers.

[First we pick up the other clone of the counter, going to Sunny Skies Park for later.]
[Then we pick up a clone of the division result, going to Equal's Corner.]
[Equal's Corner takes multiple numeric passengers, and returns the value of one of them if they are equal, but otherwise it returns no one.]
[Finally we pick up the other clone of the division result, going to Trunkers.]
[Dropping off a passenger at Trunkers is equivalent to the floor function. We need it here because division results are "exact".]
[(Well, as exact as double precision arithmetic can be.)]
[We will compare the result of this to the exact result of the division.]

Go to Sunny Skies Park:n 1 r.

[Drop off our clone of the counter at Sunny Skies Park.]

Go to Trunkers:s 1 l.
Pickup a passenger going to Equal's Corner.
Go to Equal's Corner:w 1 l.

[Compare the exact division result with the floored division result.]
[If they are equal, then the value of one of them will be waiting.]
[This also means that the counter is a divisor of the input, and we should add the square of the counter to our running squares total.]
[If they are not equal, no one will be waiting, the counter is not a divisor of the input, and nothing should happen.]

Switch to plan C if no one is waiting.

[This is Taxi's only conditional operator.]
[It jumps to a bracketed label (in this case, C) if there is no one waiting at this stop.]
[Of course, there is an unconditional version of this, too.]

[If we are on this path, we are adding the square of the counter to our running squares total.]

Pickup a passenger going to Riverview Bridge.

[We don't actually need the passenger that's waiting here (and leaving it there will not work at all).]
[So what do you do when you have a pesky passenger you don't want? You take them to Riverview Bridge!]
[Riverview Bridge has a lovely view, but passengers dropped off there always seem to fall in the river.]
[This means you don't collect your fare for bringing them there, but at least the pesky passenger is gone.]

Go to Sunny Skies Park:n.
Pickup a passenger going to Sunny Skies Park.
Pickup a passenger going to Cyclone.

[We want to pick up the counter (so we can multiply it by itself). That dang input is in the way, but we still need it.]
[So what do we do? We just take it back to where it was waiting!]
[Yup, even though one would never do this in real life, a passenger's current location is a perfectly legal destination in Taxi.]

Go to Riverview Bridge:n 1 r 1 r.

[So long, Equal's Corner result!]

Go to Cyclone:w 2 l.
Pickup a passenger going to Cyclone.
Go to Sunny Skies Park:n 1 r.

[We clone the counter so we can still use it, then we drop the inputted number back at Sunny Side Park.]
[Again, we will leave the other clone here for later.]

Go to Cyclone:n 1 l.
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station:s 1 l 2 r 4 l.

[Square the counter.]

Pickup a passenger going to Addition Alley.
Go to Rob's Rest:s 1 r 2 l 1 l 1 r 1 r.
Pickup a passenger going to Addition Alley.
Go to Addition Alley:s 1 l 1 l 2 r 1 r 1 r.
Pickup a passenger going to Rob's Rest.
Go to Rob's Rest:n 1 l 1 l 1 l 2 r 1 r.

[Pick up the running squares total from Rob's Rest, add it to the square of the counter, then bring it back.]

Go to Cyclone:s 1 l 1 l 2 l.
Pickup a passenger going to Magic Eight.

[Pick up the counter, going to Magic Eight.]
[Magic Eight takes two numeric passengers, and returns the first passenger if it is less than the second, but otherwise it returns no one.]
[We will compare the counter to the inputted number...]

Go to Sunny Skies Park:n 1 r.
Pickup a passenger going to Cyclone.
Go to Cyclone:n 1 l.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Magic Eight.

[...who we take now, so we can make a clone of it and compare it to the counter.]

Go to Magic Eight:s 1 l 2 r.
Switch to plan D if no one is waiting.

[Compare.]
[If the counter is waiting here, the loop is to continue.]
[If not, switch to plan D, end the loop, and start detecting whether or not the running squares total is a square itself.]

Pickup a passenger going to Addition Alley.
Go to Cyclone:n 1 l 2 r.
Switch to plan B.

[Reset everything, and loop back to the start of plan B.]

[C]

[If we are on this path, the counter is not a divisor of the inputted number, but the loop should continue anyways.]

Go to Sunny Skies Park:n.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Addition Alley.
Go to Cyclone:n 1 l.
Switch to plan B.

[Reset everything, and loop back to the start of plan B.]

[D]

[We are finally out of the loop. Now it's time for the real fun.]

Go to Cyclone:n 1 l 2 r.
Pickup a passenger going to Sunny Skies Park.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park:n 1 r.

[We don't need the inputted number anymore, but we can't change its destination from the Cyclone.]
[So we go to the Cyclone, so we can take the two clones and bring them to Sunny Skies Park forever.]
[We could send them to Riverview Bridge, but that will take more bytes.]

Go to Rob's Rest:s 2 r 1 r.

[Pick up our running squares total from Rob's Rest, so it can go out and see the town.]

Pickup a passenger going to Cyclone.
Go to Cyclone:s 1 l 1 l 2 l.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Cyclone.
Go to Zoom Zoom:n.
Go to Cyclone:w.

[We need to end up with 4 clones of the total.]
[Two of them will actually be used as the counter in this loop.]

[At the start of each loop, we have no passengers.]

[E]
Pickup a passenger going to Joyless Park.
Pickup a passenger going to Divide and Conquer.
Go to Joyless Park:n 2 r 2 r 2 l.

[We will leave one clone of the total at Joyless Park (like Sunny Side Park, but on the opposite side of town).]
[The other clone will be used in a division.]

Go to Cyclone:w 1 r 2 l 2 l.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Joyless Park.
Go to Joyless Park:n 2 r 2 r 2 l.

[We will leave one clone of the counter at Joyless Park.]
[We will clone the other clone (clone-ception?).]

Go to Cyclone:w 1 r 2 l 2 l.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer:n 2 r 2 r 1 r.

[We will use both clones of the counter in a division.]
[Divide and Conquer can take 3 arguments, and the result here will be equivalent to total / counter^2 .]
[If the square of the counter is equal to the total, the result will be 1.]
[If the square of the counter is less than the total, the result will be greater than 1.]
[If the square of the counter is greater than the total, the result will be less than 1.]

Pickup a passenger going to Magic Eight.
1 is waiting at Starchild Numerology.
Go to Starchild Numerology:e 1 r 3 r 1 l 1 l 2 l.
Pickup a passenger going to Magic Eight.
Go to Magic Eight:w 1 r 2 r 1 r.
Switch to plan F if no one is waiting.

[We compare the result of the division against 1 to decide our next course of action.]
[If it is greater or equal, the loop should end, and the counter is equal to the floor of the square root.]
[If it is less, the loop should continue.]

Pickup a passenger going to Riverview Bridge.

[Whoops, we don't actually need this anymore.]

Go to Joyless Park:e 2 l 4 r.
Pickup a passenger going to Cyclone.

[We will clone the total later, so we can reuse it in the next loop iteration.]

Pickup a passenger going to The Underground.
Go to The Underground:w 1 l.

[Instead of taking the number 1 and subtracting it from the counter, we can do an optimization here.]
[The Underground is a destination that takes 1 passenger, and subtracts 1 from it.]
[If the result is positive, it returns the result. Otherwise, it returns no one.]
[The latter result will not happen for us, however.]

Pickup a passenger going to Cyclone.

[We will clone the counter later, so we can reuse it in the next loop iteration.]

Go to Fueler Up:s.

[Gotta remember to stop for gas!]

Go to Riverview Bridge:n 3 l.

[So long, Magic Eight result!]

Go to Cyclone:w 2 l.
Switch to plan E.

[Reset everything, and loop back to the start of plan E.]

[F]

Go to Joyless Park:e 2 l 4 r.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to Cyclone.

[Once we've figured out the square root of the total, we're still not done.]

Go to Cyclone:w 1 r 2 l 2 l.
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station:s 1 l 2 r 4 l.

[We actually square the square root...]

Pickup a passenger going to What's The Difference.
Go to What's The Difference:n 2 l 1 r 3 l.

[...and subtract it from the total at What's The Difference (which subtracts dropped-off passengers).]

Pickup a passenger going to Knots Landing.
Go to Knots Landing:e 4 r 1 l.

[If the result is 0, the total is a perfect square, and a truthy value should be output.]
[If the result is nonzero, the total is not a perfect square, and a falsy value should be output.]
[Luckily, Knots Landing does our work for us.]
[Knots Landing inverts the boolean logic of numeric passengers (i.e. 0 becomes 1, nonzero becomes 0).]

Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:w 1 l.

[Convert it to a string...]

Pickup a passenger going to Post Office.
Go to Post Office:n 1 l 1 r.

[...and output it.]

[We would exit the program by going to the Taxi Garage, but that takes bytes.]
[The boss fires us because we didn't bring the taxi back to the garage, but that gets output to STDERR, so that's OK.]

JosiahRyanW

Posted 2018-09-10T18:18:55.173

Reputation: 2 600

1

APL(NARS), 23 chars, 46 bytes

{0=1∣√+/×⍨(0=a∣⍵)/a←⍳⍵}

test:

   g←{0=1∣√+/×⍨(0=a∣⍵)/a←⍳⍵}     
   g¨ 42 1 246 10 16
1 1 1 0 0 

RosLuP

Posted 2018-09-10T18:18:55.173

Reputation: 3 036

0

Gaia, 5 bytes

ds¦Σụ

Try it online!

Mr. Xcoder

Posted 2018-09-10T18:18:55.173

Reputation: 39 774