[Question]
  [
Many of you may have interacted with people from Russia on the internet at some point, and a subset of you may have noticed the slightly odd method they have of expressing themselves.
e.g. `удали игру нуб)))`
where the `)))` are added for emphasis on the previous statement, I have been working on a theory that the ratio of `)`'s to the rest of the string is directly proportional to the amount of implied emphasis, however I oftentimes find it difficult to compute the ratio on the fly, as I am also trying to cope with a slew of abuse, so I would like the shortest possible code to help me calculate what the resulting string should be, for a value of enthusiasm between 0 and 500%, given the original, unenthusiastic string, this will aid my research greatly as I will not have to type out bulky scripts every time I wish to test my hypothesis.
So, the challenge:
write a full program or function, which, provided two arguments, a string of unknown length, and a number, in either integer format (between 0 and 500) or in decimal format (between 0 and 5, with 2 points of accuracy) will
* return/display the original string, suffixed with a number of `)`'s
* the number will be the calculated as a ratio of the input number to the string length.
* so if the number 200, or 2.00 was provided, 200% of the string must be suffixed as `)`'s
* the number of brackets rounded to in decimal situations does not matter.
* script is required to support Printable ASCII characters.
* only has to support one input number format, of your choice.
Examples:
```
"codegolf" 125      = codegolf))))))))))
"codegolf" 75       = codegolf))))))
"noob team omg" 0.5 = noob team omg))))))
"hi!" 4.99          = hi!)))))))))))))))
```
Example code (PowerShell) (with decimal input):
```
Function Get-RussianString ([string]$InputStr,[decimal]$Ratio){
    $StrLen = $InputStr.Length
    $SuffixCount = $StrLen * $Ratio
    $Suffix = [string]::New(")",$SuffixCount)
    return $InputStr + $Suffix
}
Get-RussianString "codegolf" 0.5
codegolf))))
```
This is [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'") so shortest code wins!
  
[Answer]
# Perl 6, 21 bytes
```
{$^a~")"x$^b*$a.comb}
```
[Answer]
# [Jelly](https://github.com/DennisMitchell/jelly), 7 [bytes](https://github.com/DennisMitchell/jelly/wiki/Code-page)
```
ȮL×Ċ”)x
```
**[Try it online!](https://tio.run/nexus/jelly#@39inc/h6Ue6HjXM1az4//9/RqbifxM9S0sA "Jelly – TIO Nexus")**
Uses the decimal format.
### How?
```
ȮL×Ċ”)x - Main link: string, decimal
Ȯ       - print string
 L      - length(string)
  ×     - multiply by the decimal
   Ċ    - ceiling (since rounding method is flexible)
    ”)  - a ')' character
      x - repeated that many times
        - implicit print
```
[Answer]
## Common Lisp, ~~59~~ ~~52~~ 50
Parentheses? I am in.
```
(lambda(s n)(format()"~a~v@{)~}"s(*(length s)n)0))
```
### Details
```
(lambda(s n)               ; two arguments (string and ratio)
  (format ()               ; format as string
          "~a~v@{)~}"      ; control string (see below)
          s                ; first argument (string)
          (* (length s) n) ; second argument (number of parens)
          0))              ; one more element, the value does not matter
```
### Format control string
* `~a` : pretty print argument (here the given string)
* `~v@{...~}` : iteration block, limited to V iteration, where V is taken as an argument, namely the `(* ...)` expression. The iteration is supposed to iterate over a list, but when you add the `@` modifier, the list is the remaining list of arguments to the format function. There must be at least one element in the iterated list (otherwise we exit, disregarding V). That is why there is an additional argument to format (0).
Since no element in the list is consumed by the format, the loop is infinite but fortunately, it is also bounded by V, a.k.a. the number of parentheses to be printed.
---
Edit: thanks to Michael Vehrs for pointing out that there is no need to round the numerical argument (the question allows to truncate/round however we want, so the default behavior works here).
[Answer]
# JavaScript ES6, 38 31 30 bytes
```
s=>n=>s+')'.repeat(s.length*n)
```
```
f=s=>n=>s+')'.repeat(s.length*n)
console.log(f("hi!")(4.99))
```
[Answer]
# [Python 2](https://docs.python.org/2/), 29 bytes
```
lambda s,p:s+len(s)*p/100*')'
```
**s** in the string, **p** is the percentage (integer).
[Try it online!](https://tio.run/nexus/python2#VcxBDoIwEEDRtZ5iXE0HJ7EYiYGEm7gp0mKTttNQ7l8VV27fT76DER41mDjNBgrnoZyDTapQky@t1g0SVifrN4FPoPAps10kOOT22hH/yf0HSWSCzZoIEhdk6PTOL39CvvU9DcdDXn3awKnPluob "Python 2 – TIO Nexus")
[Answer]
# [05AB1E](https://github.com/Adriandmen/05AB1E), ~~9~~ 8 bytes
```
g*ï')×¹ì
```
[Try it online!](https://tio.run/nexus/05ab1e#@5@udXi9uubh6Yd2Hl7z/39yfkpqen5OGpeJngEA "05AB1E – TIO Nexus")
```
g*       # Length, multiplied by emphasis.
  ï')×   # Covnerted to an integer, push that many parenthesis.
      ¹ì # Prepend original string.
```
Works for both integer and decimal, arguments order: `f(String, Double)`
[Answer]
# Python, 30 bytes
```
lambda s,r:s+')'*int(len(s)*r)
```
Uses the decimal input.
[Try it online!](https://tio.run/nexus/python3#S1OwVYj5n5OYm5SSqFCsU2RVrK2uqa6VmVeikZOap1GsqVWk@b@gCMRP01BKzk9JTc/PSVPSUTDUMzLV1OTCJmWgZ44ilZefn6RQkpqYq5Cfmw6WR5HOyFQECproWVpqav4HAA "Python 3 – TIO Nexus")
[Answer]
# Pyth, 8 bytes
```
*\)s*lpz
```
[Online Test!](http://pyth.herokuapp.com/?code=%2a%5C%29s%2alpz&input=0.5%0Anoob+team+omg&debug=0) Takes the excitement ratio first, then the string to be enthused about.
Explanation:
```
      pz  print out the enthused string
     l    ... and get its length
    *...Q multiply that by the ratio
   s      floor to get an integer, let's call this S
 \)       single-character string ")"
* ")" S   multiply that integer by the string, which gives a string of )s of length S.
          implicitly print that string of S )s.
```
[Answer]
# [PowerShell](https://github.com/PowerShell/PowerShell), 33 bytes
```
$a,$b=$args;$a+')'*($b*$a.Length)
```
[Try it online!](https://tio.run/nexus/powershell#@6@SqKOSZKuSWJRebK2SqK2uqa6loZKkpZKo55Oal16Sofn///@MTMX/JnqWlgA "PowerShell – TIO Nexus")
Supports decimal format.
[Answer]
# R, ~~62~~ ~~46~~ 42 bytes
Anonymous function that takes string `a` and decimal `n`, prints output to stdout.
```
pryr::f(cat(a,rep(")",n*nchar(a)),sep=""))
```
[Answer]
# Pyth, 9 bytes
```
*s*lpzE")
```
Takes two lines of input: string and ratio (decimal).
[Try it on pyth.herokuapp.com](https://pyth.herokuapp.com/?code=%2as%2alpzE%22%29&input=%22hi%22%0A1.5&test_suite=1&test_suite_input=codegolf%0A1.25%0Acodegolf%0A0.75%0Anoob+team+omg%0A0.5%0Ahi%21%0A4.99&debug=1&input_size=2)
### Explanation
`A` denotes a function's first argument, `B` its second argument.
```
*s*lpzE")
    pz     # print the input string
   lAA     # take the length of the printed string
      E    # read the next line of input (the emphasis ratio)
  *AAAB    # multiply the length by the ratio
 sAAAAA    # floor the result
*AAAAAA")  # repeat ")" n times
           # implicit print
```
[Answer]
# TI-Basic, 33 bytes
Takes decimal input.
```
Prompt Str1,A
")
For(I,0,9
Ans+Ans
End
Str1+sub(Ans,1,AI
```
[Answer]
# Perl 5, 29 bytes
```
sub{($_=pop).')'x(y///c*pop)}
```
(Number is first arg, string is second.)
[Try it online!](https://tio.run/nexus/perl#Ky1OVSguKcpMLrHmKgWyyxOL8jLz0outubhyKxVU0hRs/xeXJlVrqMTbFuQXaOqpa6pXaFTq6@sna4H4tf@BCguKMvNKgGp17TQM9YxMdRTUDY2MTdQ1dRSUYvKUrP8DAA "Perl – TIO Nexus")
[Answer]
## [CJam](https://sourceforge.net/p/cjam), 9 bytes
```
l_,ld*')*
```
[Try it online!](https://tio.run/nexus/cjam#@58Tr5OToqWuqfX/f0BRfnpRYm5uZl66QkBpVVVOarFCYl6KgnN@SqqCe35OGpehnpEpAA "CJam – TIO Nexus")
Input string on the first line, emphasis ratio in range 0 to 5 on the second.
### Explanation
```
l    e# Read input string.
_,   e# Duplicate, get length.
ld   e# Read emphasis ratio.
*    e# Multiply by length.
')*  e# Get that many parentheses.
```
[Answer]
# MATL, ~~11~~ ~~10~~ 8 bytes
```
yn*:"41h
```
This solution uses the decimal form of the second input
[**Try it online!**](https://tio.run/nexus/matl#@1@Zp2WlZGKY8f@/enJ@Smp6fk6aOpehnpEpAA)
**Explanation**
```
        % Implicitly grab first input as a string
        % Implicitly grab the second input as a number
y       % Make a copy of the first input
n       % Compute the length of the string
*       % Multiply the decimal by the length to determine the # of )'s (N)
:       % Create the array [1...N]
"       % For each element in this array
  41    % Push 41 to the stack (ACSII for ")")
  h     % Horizontally concatenate this with the current string
        % Implicit end of for loop and display
```
[Answer]
# sB~, 17 bytes
```
i\,N?\;')'*(N*l(\
```
Explained:
```
i\,N    input a string and a number
?\;     print the string
')'*    also print ) multiplied by...
(N*l(\  the number times the string length.
```
Parentheses are closed automatically
Here's the output of the compiler, if you're interested:
```
 INPUT  S$ ,N? S$ ;")"*(N* LEN(  S$ ))
```
This version of the compiler was written on 1/27/2017 at 11:12 pm, which might have been a few minutes after this question was posted.
So here's a version which works on the oldest version of the compiler, written an hour earlier: `iS$,N?S$;')'*(N*l(S$))` (22 bytes)
[Answer]
# PostgreSQL, 102 bytes
```
create function q(text,int)returns text as $$select rpad($1,(100+$2)*length($1)/100,')')$$language sql
```
### Details
Uses the integer input format.
This simply right-pads the input string with parens out to the target length.
```
create function q(text,int)
returns text as $$
    select rpad($1,             -- Pad the string input
        (100 + $2) *            -- to 100 + int input % ...
        length($1) / 100,       -- ...of the input string
        ')')                    -- with ) characters
$$ language sql
```
Called with
```
select q('codegolf', 125), q('codegolf', 75);
select q('noob team omg', 50), q('hi!', 499);
```
[Answer]
# [Bash](https://www.gnu.org/software/bash/) + coreutils, 45 bytes
```
echo $1`seq -s\) $[${#1}*$2/100+1]|tr -cd \)`
```
[Try it online!](https://tio.run/nexus/bash#@5@anJGvoGKYUJxaqKBbHKOpoBKtUq1sWKulYqRvaGCgbRhbU1KkoJucohCjmfD////k/JTU9PyctP/mpgA "Bash – TIO Nexus")
Integer input.
[Answer]
# Groovy, 27 bytes
Straightforward solution
```
{s,r->s+')'*(s.length()*r)}
```
Test program :
```
def f = {s,r->s+')'*(s.length()*r)}
println f("hi!", 4.99)
println f("noob team omg", 0.5)
```
[Answer]
# Rebol, 39 bytes
```
func[a b][append/dup a")"b * length? a]
```
[Answer]
# Clojure, 40 bytes
Quite boring solution :
```
#(reduce str %(repeat(*(count %)%2)")"))
```
Just reduces `str` function on a list of closing parentheses with a string as initial parameter.
See it online : <https://ideone.com/5jEgWS>
Not-so-boring solution (64 bytes) :
```
#(.replace(str(nth(iterate list(symbol %))(*(count %)%2)))"(""")
```
Converts input string to a symbol (to get rid of quotes) and repeatedly applies function `list` on it generating infinite sequence like this: `(a (a) ((a)) (((a))) ... )`. Takes `nth` element converts it to string and replaces all opening parentheses with nothing. 
See it online : <https://ideone.com/C8JmaU>
[Answer]
# SimpleTemplate, 92 bytes
Takes the string as the first parameter and the "ratio" as the second.  
The ratio is between 0 and 5, with 2 decimal places.
```
{@echoargv.0}{@callstrlen intoL argv.0}{@set*Y argv.1,L}{@callstr_repeat intoO")",Y}{@echoO}
```
As you can see, it is non-optimal.  
The 2 `{echo}` there could be reduced to 1.  
Due to a bug in the compiler, this code can't be reduced much further.
---
**Ungolfed:**
```
{@echo argv.0}
{@call strlen into length argv.0}
{@set* ratio argv.1, length}
{@call str_repeat into parenthesis ")", ratio}
{@echo parenthesis}
```
---
If no bug existed, the code would look like this, 86 bytes:
```
{@callstrlen intoL argv.0}{@set*Y argv.1,L}{@callstr_repeat intoO")",Y}{@echoargv.0,O}
```
[Answer]
## [C# Interactive,](http://csharppad.com/gist/67f46912a600cfecf2e99e537cdc913d) ~~77~~ 67 bytes
```
string r(string s,int p)=>s+new string(')',(int)(s.Length*p/100d));
```
C# interactive is sweet.
[Answer]
# [Stax](https://github.com/tomtheisen/stax), 7 [bytes](https://github.com/tomtheisen/stax/blob/master/docs/packed.md#packed-stax)
```
é┴eó¡µf
```
[Run and debug it](https://staxlang.xyz/#p=82c165a2ade666&i=%22codegolf%22+1.25%0A%22codegolf%22+0.75%0A%22noob+team+omg%22+0.5%0A%22hi%21%22+4.99&a=1&m=2)
[Answer]
# [International Phonetic Esoteric Language](https://github.com/bigyihsuan/International-Phonetic-Esoteric-Language), 24 bytes
A reimplementation of the old answer into the new specification. Input is as a positive integer first, then the string.
```
ɪ{100}viħɖf0ɑ")"x1esøɒʕo
```
Explanation:
```
ɪ{100}viħɖf0ɑ")"x1esøɒʕo
ɪ                        (push input int)
 {100}                   (push 100)
      v                  (divide int//100)
       iħ                (push input str, push len)
         ɖ               (rotate top 3 clockwise)
          f              (multiply int//100 * len)
           0             (push 0)
            ɑ            (begin loop, from 0 to int//100 * len)
             ")"         (push ")")
                x        (concat)
                 1esø    (increment index)
                     ɒ   (end loop)
                      ʕ  (list to str)
                       o (print)
```
---
# [International Phonetic Esoteric Language](https://github.com/bigyihsuan/International-Phonetic-Esoteric-Language), 18 bytes (WIP language) (OLD)
I discovered some bugs in my interpreter because of this challenge. Takes input as `string` then `integer`.
```
iɢ291tʃɪðθœ<)>ɲqɶo
```
No TIO interpreter yet, but is runnable by cloning the repository above, and calling `python3 main.py "code here"`.
```
iɢ291tʃɪðθœ<)>ɲqɶo
i                  ; push string input
 ɢ                 ; peek, push string length
  291tʃ            ; push (1 + 9)^2
       ɪ           ; push number input
        ðθ         ; push [num / 100 * len]
          œ        ; start loop: pop, run ceil(n) times
           <)>     ; push string ")"
              ɲ    ; swap top 2 elements of the stack
               q   ; pop, pop, push concatenated strings
                ɶ  ; end loop
                 o ; output
```
Sample cases:
```
python3 main.py "iɢ291tʃɪðθœ<)>ɲqɶo"
codegolf
125
codegolf))))))))))
python3 main.py "iɢ291tʃɪðθœ<)>ɲqɶo"
iɢ291tʃɪðθœ<)>ɲqɶo
300
iɢ291tʃɪðθœ<)>ɲqɶo))))))))))))))))))))))))))))))))))))))))))))))))))))))
python3 main.py "iɢ291tʃɪðθœ<)>ɲqɶo"
less than 1.00
50
less than 1.00)))))))
```
[Answer]
## SmileBASIC, 29 bytes
```
INPUT S$,N?S$;")"*(LEN(S$)*N)
```
[Answer]
# [Gol><>](https://github.com/Sp3000/Golfish/wiki) (Golfish), 17 bytes
```
i:a=?v
R*Il~/Hr)`
```
[Try it here](https://golfish.herokuapp.com/?code=i%3Aa%3D%3Fv%0AR%2aIl%7e%2FHr%29%60&input=hi%21%0A4.99).
The top line reads characters (`i`) until it finds a newline (ASCII 10, `a`), then goes down (`v`).
Then we discard one character (the newline) with `~`, push the length of the stack (`l`), read a float (`I`), multiply the two, and repeatedly (`R`) push the character ")" that many times. Finally, reverse the stack (`r`), output it and halt (`H`).
[Answer]
# PHP, 50 bytes
```
<?=str_pad($s=$argv[1],strlen($s)*++$argv[2],")");
```
takes string and decimal number as command line arguments; cuts padding. Run with `-r`;
**breakdown**
```
<?=                     // print ...
str_pad(                    // pad
    $s=$argv[1],            // string=argument 1
    strlen($s)*++$argv[2],  // to string length*(1+argument 2) 
    ")"                     // using ")" as padding string
);
```
[Answer]
# Ruby, 25 bytes
```
->(s,n){s+')'*(s.size*n)}
```
I'm using **lambdas**. The test program would be something like:
```
f=->(s,n){s+')'*(s.size*n)}
f.("codegolf", 1.5)        # => "codegolf))))))))))))"
f.("hi!", 4.99)            # => "hi!))))))))))))))"
```
[Answer]
# GNU AWK, 59 bytes
```
{t=sprintf("%"n*length(s)"s","");gsub(/ /,")",t);print s t}
```
Accepts arguments on command line (using the decimal form) like so:
```
: | awk -v s="codegolf" -v n=0.75 -f russianify.awk
```
Yes, AWK requires *something* to be attached to stdin, even if that something is 0 bytes returned by the no-op shell builtin. You could also use `echo | awk ...`, or really *anything* that doesn't contain a newline.
]