Appending String Lengths

51

Challenge:

Given a string s on the characters a-z, A-Z, 0-9, append the length of s to itself, counting the additional character(s) in the length as part of the total length of s.

Input:

Just a string of arbitrary length (can be empty).

Output:

The same string, but with its length appended to the end. The characters that represent the length should also be counted as part of the length. In cases where there are multiple valid lengths to append, choose the smallest one possible (see test cases for examples).

Test Cases:

INPUT     -> OUTPUT       // Comment
aaa       -> aaa4
          -> 1            // Empty string
aaaaaaaa  -> aaaaaaaa9    // aaaaaaaa10 would also normally be valid, but violates using the smallest number rule mentioned above
aaaaaaaaa -> aaaaaaaaa11
a1        -> a13          // Input can contain numbers at the end of the string, you do not have to handle the fact that it looks like 13 rather than 3.

Longer test case(s):

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa101
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa102

Rules:

This is , so shortest code in bytes wins. Standard loopholes are forbidden. Submissions may be an entire program or a function, and you may either print the result to stdout or return it as a variable from a function.

Yodle

Posted 2016-12-16T21:30:01.147

Reputation: 2 378

What characters can appear in the input? – Martin Ender – 2016-12-16T21:48:18.747

@MartinEnder Alphanumerical characters only, 0-9 and A-Z/a-z. So yes, you can have strings with numbers at the end. I'll add a test case for one. – Yodle – 2016-12-16T22:42:37.613

Answers

4

Pyth - 7 bytes

+Qfql+Q

Try it online here.

Maltysen

Posted 2016-12-16T21:30:01.147

Reputation: 25 023

18

JavaScript (ES6), 32 bytes

f=(s,n=0)=>(s+n)[n]?f(s,n+1):s+n

How it works

f = (s, n = 0) =>   // given a string 's' and starting with n = 0:
  (s + n)[n] ?      // if the Nth character of (s + n) exists:
    f(s, n + 1)     //   try again with n + 1
  :                 // else
    s + n           //   return s + n

Starting with N=0, we test the Nth character (0-based) of the string made of the concatenation of the original input string and the decimal representation of N. We increment N until this character doesn't exist anymore.

Example:

N =  0 : abcdefghi0
         ^
N =  1 : abcdefghi1
          ^
N =  2 : abcdefghi2
           ^
...
N =  8 : abcdefghi8
                 ^
N =  9 : abcdefghi9
                  ^
N = 10 : abcdefghi10
                   ^
N = 11 : abcdefghi11    -> success
                    ^

Test cases

f=(s,n=0)=>(s+n)[n]?f(s,n+1):s+n

console.log(f("aaa"));       // -> aaa4
console.log(f(""));          // -> 1
console.log(f("aaaaaaaa"));  // -> aaaaaaaa9
console.log(f("aaaaaaaaa")); // -> aaaaaaaaa11
console.log(f("a1"));        // -> a13

Arnauld

Posted 2016-12-16T21:30:01.147

Reputation: 111 334

Wow, JS is much terser than Python for this. – mbomb007 – 2016-12-16T22:57:01.993

@Arnauld I cannot get my head around this. Do you mind explaining how this code works? – Gowtham – 2016-12-18T15:46:06.647

12

LaTeX, 108/171

\newcounter{c}\def\s#1#2]{\stepcounter{c}\def\t{#2}\ifx\empty\t\arabic{c}\else#1\s#2]\fi}\def\q[#1]{\s#10]}

\q[] //1

C5H8NNaO4

Posted 2016-12-16T21:30:01.147

Reputation: 1 340

Whoa, I don't think I've ever seen a latex answer on ppcg before. – pajonk – 2016-12-17T16:02:54.813

5

JavaScript (ES6), 37 bytes

f=(s,t=s,u=s+t.length)=>t==u?t:f(s,u)
<input oninput=o.textContent=f(this.value)><pre id=o>

Neil

Posted 2016-12-16T21:30:01.147

Reputation: 95 035

When I clicked on Run Code Snippet I get to see an error message. I have no knowledge of Javascript - I was just trying – Prasanna – 2016-12-17T08:42:55.023

@Prasanna Works for me in Firefox; which browser are you using? – Neil – 2016-12-17T10:54:31.653

@Prasanna Works on latest Google Chrome. Are you sure you aren't using IE11 or older, Opera or anything that doesn't support ES6? – Ismael Miguel – 2016-12-17T20:41:08.320

I'm using an old good chrome (Version 48.0.2564.97). I will try this with IE too. Can't update my chrome - office security issues – Prasanna – 2016-12-19T08:38:25.530

5

C, 67 65 61 bytes

x;f(*v){printf("%d",(int)log10(x=-~printf(v))*-~(x%10>8)+x);}

Wandbox

o79y

Posted 2016-12-16T21:30:01.147

Reputation: 509

1Ohh, yeah, I shoulda printf'd... Anyways, congrats on having the shorter C solution :D +1 – cat – 2016-12-17T16:05:44.480

4

Lua 5.2, 32 Bytes

a=arg[1]print(a..#a+#(''..#a+1))

Where the variable a is the input string.

resin

Posted 2016-12-16T21:30:01.147

Reputation: 41

3

Pyke, 8 bytes (old version)

.f+liq)+

Explanation:

.f    )  -  first where (i++)
  +      -    input + i
   l     -    len(^)
    iq   -   ^ == i
       + - input + ^

Try it here! (New version, 9 bytes)

Blue

Posted 2016-12-16T21:30:01.147

Reputation: 26 661

It always confuses me how buried the actual output is among warnings or other messages :-) – Luis Mendo – 2016-12-16T23:28:02.717

2I should really get around to fixing the web bug in the copy link that automatically disables the warnings switch – Blue – 2016-12-16T23:31:42.937

3

Python 2, 54 48 46 bytes

Simple solution. Recursion ended up being shorter.

f=lambda s,n=0:f(s,n+1)if(s+`n`)[n:]else s+`n`

Try it online

mbomb007

Posted 2016-12-16T21:30:01.147

Reputation: 21 944

1I think you can do (s+`n`)[n:] for n<len(s+`n`). – xnor – 2016-12-16T22:48:37.253

3

Haskell, 46 bytes

f s=[l|i<-[0..],l<-[s++show i],length l==i]!!0

Usage example: f "aaaaaaaa" -> "aaaaaaaa9".

Simply try all numbers starting with 0 and take the first that fits.

nimi

Posted 2016-12-16T21:30:01.147

Reputation: 34 639

3

Mathematica, 57 bytes

#<>ToString[(a=Length@#)+(i=IntegerLength)[a+i@a]~Max~1]&

Unnamed function taking an array of characters as input and returning a string. Uses the fact that if a is the length of the input, then the number to append to the input is a plus the number of digits in (a + the length of a), rather than just a plus the number of digits of a. Unfortunately it wouldn't give the right answer for the empty-string input without the ~Max~1 special case.

Greg Martin

Posted 2016-12-16T21:30:01.147

Reputation: 13 940

3

Brachylog, 13 bytes

l<L$@:?rc.lL,

Try it online!

Explanation

Basically a description of the problem. It will try every value of L bigger than the length of the input until it finds one for which, when concatenated to the input, is the length of that concatenation.

l<L              length(Input) < L
  L$@            Convert L to a string
     :?rc.       The Output is the concatenation of the Input with L as string
         .lL,    The length of the Output is L itself

Fatalize

Posted 2016-12-16T21:30:01.147

Reputation: 32 976

3

Brainfuck, 258 bytes

,>+<----------[++++++++++>+[>+<-],----------]<[<]>[.>]>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]

The input must be terminated by a linefeed (LF). Only works for inputs with a length lesser than 256 (including the LF).

Try it online!

Explanation

# read first char and add one to cell #1
# the cell after the input will contain the length
,>+<
# subtract 10 to check for LF
----------
# while the input is not 10 (LF)
[
# restore the input to its original value
++++++++++
# add one to the length
>+
# cut and paste the length to the next cell, then read the input
[>+<-],
# subtract 10 to check for LF
----------
]
# for input abc, the tape here would be: a b c *0* 4
# rewind to the beginning of the input
<[<]>
# print the input string
[.>]>
# convert the length to ascii chars and output them
>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-
<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++
<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]

Note: I used code from this SO answer to convert the length to ascii output; I hope this is acceptable on PPCG. This is my first Codegolf submission, and my second BF program. Feedback is welcomed.

Forcent Vintier

Posted 2016-12-16T21:30:01.147

Reputation: 103

1This isn't valid then, it must pass all test cases – cat – 2016-12-17T16:05:01.470

So supporting a length up to 999 would be enough? – Forcent Vintier – 2016-12-17T16:10:56.787

The spec says "arbitrary length" which means "as long as your language is capable of handling or without running out of memory" – cat – 2016-12-17T16:11:55.213

The brainfuck interpreter you're using has 8-bit cells, so as long as your algorithm works for strings of arbitrary length, it should be fine if it fails for strings of length 256 or higher. The C and JavaScript submissions will also fail once the strings get too long. – Dennis – 2016-12-17T16:17:08.880

Thank you Dennis, I will modify my submission accordingly – Forcent Vintier – 2016-12-17T23:11:50.807

I modified the submission, hopefully it is valid now. Is it acceptable to "borrow" code from an SO answer like I did here? – Forcent Vintier – 2016-12-17T23:41:09.193

2

Retina, 22 bytes

\G`
.
x
+r`\d*$
$._
x

Try it online!

Ah well, if it wasn't for digits appearing in the input, this would be merely 11 bytes:

+r`\d*$
$._

Martin Ender

Posted 2016-12-16T21:30:01.147

Reputation: 184 808

2

Haskell, 61 60 bytes

e=length
l%n|s<-show$l+1,n>e s=s|m<-n+1=(l+1)%m
c s=s++e s%2

Try it online!

Recursive solution. Usage:

Prelude> c "aaaaaaaaa"
"aaaaaaaaa11"

Laikoni

Posted 2016-12-16T21:30:01.147

Reputation: 23 676

2

Ruby, 62 58 56 bytes

s=gets.chomp;p s+"#{(s+"#{(s+"#{s.size}").size}").size}"

Tested in irb.

There's probably a better way to do this, but this was the first thing I came up with. Any help in golfing would be appreciated.

edit: I realized my use of parentheses was excessive.

Elenian

Posted 2016-12-16T21:30:01.147

Reputation: 71

You only use l in one place. If you inline that, you will save 3 bytes l=;. But your solution will still be longer than mine ;) – DepressedDaniel – 2016-12-17T01:59:47.620

2

Perl 6,  46  35 bytes

{$_~(.chars,*.chars+.chars...{$^a==$^b})[*-1]}
{$_~(.chars,*.chars+.chars...*)[2]}

Try it

Expanded:

{   # bare block lambda with implicit parameter 「$_」

  $_  # the input

  ~   # concatenated with

  (  # sequence generator

    .chars,  # the number of chars in 「$_」 (seed the generator)


    *\      # Whatever lambda input (represents previous value)
    .chars  # number of chars in that
    +       # plus
    .chars  # the number of chars in 「$_」


    ...     # keep doing that until

    *       # indefinitely

  )[2] # get the value at index 2 of the sequence
}

Brad Gilbert b2gills

Posted 2016-12-16T21:30:01.147

Reputation: 12 713

2

05AB1E, 11 bytes

[¹¾JDg¾Q#¼\

Pretty straightforward bruteforce:

            Implicit i = 0
[           while true
 ¹¾J        Concatenate input and i -> str
    Dg¾Q#   Break if length(str) == i
         ¼\ Else, i += 1

Try it online!

Osable

Posted 2016-12-16T21:30:01.147

Reputation: 1 321

2

Python, 39 bytes

lambda a:eval('a+str(len('*3+'a))))))')

Longer form:

lambda a:a+str(len(a+str(len(a+str(len(a))))))

Iteratively in Python 2 (41 bytes):

x=a=input();exec"x=a+`len(x)`;"*3;print x

Starting with x as the input string a, applies the transformation x -> a + str(len(x)) three times. I'm still not clear why three applications are needed to always reach the fixed point.

xnor

Posted 2016-12-16T21:30:01.147

Reputation: 115 687

Why 3 times? First to append the length of text, second to adjust the length to include the number, third in case that adjustment added an extra digit. – Tom Viner – 2017-01-19T21:53:19.793

2

PHP, 42 bytes

while(++$n<strlen($a=$argv[1].$n));echo$a;

Run with -r. Test at OnlinePHPfunctions.

Titus

Posted 2016-12-16T21:30:01.147

Reputation: 13 814

2

bash, 47 bytes

 for((n=-1;${#s} != $n;));{ s=$1$[++n];};echo $s

Save this as a script, and pass the input string as an argument.

It's a brute force implementation: try each number in turn until you find one which works.

Mitchell Spector

Posted 2016-12-16T21:30:01.147

Reputation: 3 392

2

><> (Fish) 35 bytes

i:1+?!v:o
ln;v9l<  >
*9+>:&)?!^1l&a

Takes input onto the stack, checks the length against values 9,99,999... and if the length is larger than add 1 to the stack length.

Teal pelican

Posted 2016-12-16T21:30:01.147

Reputation: 1 338

1

MATL, 11 bytes

`G@Vhtn@>]&

Try it online! Or verify all test cases.

`      % Do...while
  G    %   Push input
  @    %   Push iteration index (1-based)
  V    %   Convert number to string
  h    %   Concatenate horizontally
  t    %   Duplicate
  n    %   Get length of concatenated string
  @    %   Push iteration index
  >    %   True if length of concatenated string exceeds iteration index
]      % End. Run next iteration if top of stack is true; else exit loop
&      % Specifiy that next function (implicit display) takes only one input
       % Implicitly display top of the stack. This is the concatenated string
       % that had a length equal to the iteration index

Luis Mendo

Posted 2016-12-16T21:30:01.147

Reputation: 87 464

1

C#, 77 bytes

n=>{int a=n.Length;int c=(a+1).ToString().Length-1;return(n+(n.Length+1+c));}

Alfie Goodacre

Posted 2016-12-16T21:30:01.147

Reputation: 321

1I don't now C#, but couldn't you use return(n+(a+1+c)) as a=n.Length ? – Laikoni – 2016-12-16T23:44:13.770

And also drop the -1 from int c=(a+1).ToString().Length-1 and the +1 from the return? – Laikoni – 2016-12-16T23:46:32.923

1Wait, does this handle the larger test cases correctly? It looks like it returns aa...a100 instead of aa...a101 for the 99a test case. – Laikoni – 2016-12-16T23:52:27.977

1

Ruby, 51 bytes (program)

Ruby, 49 bytes (function)

Program (last newline is not necessary and thus unscored):

x=gets.strip
i=0
i+=1 until(y=x+i.to_s).size==i
p y

Function (last newline is scored):

def f x
i=0
i+=1 until(y=x+i.to_s).size==i
y
end

DepressedDaniel

Posted 2016-12-16T21:30:01.147

Reputation: 311

1

R, 49 bytes

cat(a<-scan(,""),(t<-nchar(a))+nchar(t+1),sep='')

Pretty straightforward solution.

Frédéric

Posted 2016-12-16T21:30:01.147

Reputation: 2 059

This doesn't work for me: Read 1 item Error in nchar(x + 1) : object 'x' not found. I found that (t<-nchar(a))+... did work. – JAD – 2016-12-18T16:19:49.403

@JarkoDubbeldam : My bad ! – Frédéric – 2016-12-18T16:22:04.020

1

Factor, 55 bytes

It's a walk in the park! I came up with this in my head as soon as I read the question.

[ dup length dup log10 ⌈ + >integer 10 >base append ]

cat

Posted 2016-12-16T21:30:01.147

Reputation: 4 989

1

Clojure, 72 bytes

(defn f([s](f s 1))([s n](if(=(count(str s n))n)(str s n)(f s(inc n)))))

NikoNyrh

Posted 2016-12-16T21:30:01.147

Reputation: 2 361

1

Wolfram, 56

#<>ToString@Nest[l+IntegerLength@#&,l=StringLength@#,2]&

Given l = StringLength[x] it appends l + IntegerLength[l + IntegerLength[l]] to x.

swish

Posted 2016-12-16T21:30:01.147

Reputation: 7 484

1

Labyrinth, 48 45 41 bytes

)"   10/{:@!
.,;: _ { _ ;
   })"}) 10-9!@

Try it online!

Saved 4 bytes thanked to @Martin Ender

Robert Hickman

Posted 2016-12-16T21:30:01.147

Reputation: 661

1

ForceLang, 83 bytes

set s io.readln()
label 1
set n 1+n
set t s+n
if t.len=n
 io.write t
 exit()
goto 1

SuperJedi224

Posted 2016-12-16T21:30:01.147

Reputation: 11 342

1

awk, 37 bytes

{FS="";r=$0;$0=r NF;$0=r NF;$0=r NF}1

That will work in any awk that splits lines into characters when FS is NULL e.g. GNU awk and most others. WIth other awks you'd have to use the length() function instead of NF to calculate the number of characters in the record, e.g. awk '{r=$0;$0=r length;$0=r length;$0=r length}1' file.

Breakdown:

FS=""    # split the record at every character so NF is a count of characters in the record
r=$0     # save the original record
$0=r NF  # append the original length to the original record and cause awk to recalculate NF
$0=r NF  # append the new length to the original record and cause awk to recalculate NF again
$0=r NF  # append the final length to the original record for output
1        # a true condition invoking awks default action of printing the current record

Example:

$ awk '{FS="";r=$0;$0=r NF;$0=r NF;$0=r NF}1' file
aaa4
1
aaaaaaaa9
aaaaaaaaa11
a13
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa101
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa102

Ed Morton

Posted 2016-12-16T21:30:01.147

Reputation: 111

1

Jelly, 12 bytes

Many thanks to Dennis for his help in writing this answer. Golfing suggestions welcome. Try it online!

D;³L=
LÇ1#;@

Explanation

LÇ1#;@  Main link. Argument: s
          Runs the helper link until a suitable x is found.
L       Yields the length of s.
 Ç1#    Calls the helper link until one match is found.
    ;@  Appends the matching x to s.

D;³L=  Helper link. Argument: x
         Appends x to s and checks if its length is equal to x.
D      Convert x from integer to decimal.
 ;³    Append to our original string.
   L=  Check if the length of this new string is equal to x.

Sherlock9

Posted 2016-12-16T21:30:01.147

Reputation: 11 664

1

Perl, 31 bytes

Just going through all the numbers until one fits:

perl -lpe '1while++$n<length$_.$n;$_.=$n'

daniel

Posted 2016-12-16T21:30:01.147

Reputation: 11

1

Ruby, 43 36 bytes

Anonymous function, abusing the $. global.

->s{$.+=1while(t=s+"#$.").size>$.;t}

Call it like this:

f = ->s{$.+=1while(t=s+"#$.").size>$.;t}
f[""]          # => "1"
f["a"]         # => "a2"
f["aaaaaaa"]   # => "aaaaaaa8"
f["aaaaaaaa"]  # => "aaaaaaaa9"
f["aaaaaaaaa"] # => "aaaaaaaaa11"

daniero

Posted 2016-12-16T21:30:01.147

Reputation: 17 193

0

C, 75 bytes

Yes, there's another C answer but this (the same method as my Factor answer) is shorter:

i,z;f(char*s){i=strlen(s);z=1+log10(i);sprintf(realloc(s,i+z)+i,"%d",i+z);}

Ungolfed:

i, z;

g (char* s){
  i = strlen(s);
  z = 1 + log10(i);
  s = realloc(s, i + z);
  sprintf(s + i, "%d", i + z);
}

ceil(log10(n) is the number of digits in base 10 n, but 1+ is shorter than ceil().

Then, resize the string so we don't get a segfault, and format the number after the string part.

cat

Posted 2016-12-16T21:30:01.147

Reputation: 4 989

I don't believe this method works for 98 or 997 – Blue – 2016-12-17T16:37:47.597

0

Under review

Powershell V2.0, 64 bytes

$s=$args[0]
$s+[string]($s.length+([string]($s.length)).length)

Example

PS C:\Users\***\Downloads\golf> .\str-length.ps1 'This is my strin3333333333333333333333333333333333333333333333333333
33333333333333333333333333333333333333333g'
This is my strin333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333g113

Kieron Davies

Posted 2016-12-16T21:30:01.147

Reputation: 39

This outputs aaaaaaaaa10 when given input aaaaaaaaa, and not the correct aaaaaaaaa11. – AdmBorkBork – 2016-12-19T16:34:07.710

You're right, I missed that somehow. – Kieron Davies – 2016-12-20T08:34:23.910

0

Scala, 75 bytes

def a(b:String,c:Int=0):String=if((b+c).length>c)a(b,c+1)else b+c

Minimal

Posted 2016-12-16T21:30:01.147

Reputation: 131

0

awk, 27 bytes

$0=$0length($0length($0NF))

Test it:

$ awk -F '' '$0=$0length($0length($0NF))' file
7aaaaaa8
8aaaaaaa9
9aaaaaaaa11
97aaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa99
98aaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa10aaaaaaaa101

James Brown

Posted 2016-12-16T21:30:01.147

Reputation: 663

1You can change length($0) to just length for brevity. – Ed Morton – 2016-12-23T16:40:01.297

@EdMorton Been experimenting with awk -F '' '$0=NF' – James Brown – 2016-12-24T13:46:46.510

0

C# / CS Script 99 87 79 bytes

Saved a few bytes switching to a lambda. And a few more moving the try/catch out of the for loop.

F=a=>{int i=0,l;try{for(;;)l=(a+(a+a.Length).Length)[++i];}catch{}return a+i;};

Try it here

Expanded:

F => a
{
    // 'i' is for traversing the string
    // 'l' is just a placeholder
    int i = 0, l;

    // wrap the loop in a try/catch
    try
    {
        // loop forever
        for (;;)
            // assign to 'l' the char at position ++i
            // throws an IndexOutOfRangeException when it falls off the end
            l = (a + (a + a.Length).Length)[++i];
    }
    // empty catch block
    catch {}

    // returns a string concat of the input a and index i
    return a + i;
}

Erresen

Posted 2016-12-16T21:30:01.147

Reputation: 449

0

Java 7, 67 bytes

String y(String y){int i=0;for(;(y+i).length()!=i;i++);return y+i;}

Try it online!

Poke

Posted 2016-12-16T21:30:01.147

Reputation: 3 075