Единственное верная оценка это O(N * L * log L), где L это длина строки.
А дальше в зависимости от соотношения N и L можно эту оценку как-то упрощать и переоценивать. Может это O(N) если на самом деле L ограничено константой. Или наоборот O(L * log L), если N константа и т. п., но нам для такой оценки не хватает данных.
А во втором примере у вас вообще не эквивалентный код.
В оригинале TS понимает, что если первый аргумент строка, то функция вернёт строку, а если число, то вернёт число. Ваш же код всегда возвращает строку-или-число.
Т.е. у вас выражение SumOrConcat(1, 2) * 3 не скомпилируется с ошибкой, что строки нельзя умножать.
Вернее даже, а вы поняли что вообще поизошло в первом присваивании?
Рекомендую после него написать console.log(arnold, code, academy) и осознать что именно поменялось.
nginx должен слушать порт 80. Не нужно это менять.
Приложение на asp должно слушать порт 5000. Судя по ошибке так и есть.
На всякий случай — nginx и приложение должны быть запущены на одном сервере.