Codegolf - С Энтузиазмом Русифицируем Струну

  • Автор темы Reroerydayhef
  • Обновлено
  • 23, Oct 2024
  • #1

Многие из вас, возможно, в какой-то момент общались в Интернете с людьми из России, и некоторые из вас, возможно, заметили немного странный метод их самовыражения.

например

 
 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))))
 

где "codegolf" 125 = codegolf)))))))))) "codegolf" 75 = codegolf)))))) "noob team omg" 0.5 = noob team omg)))))) "hi!" 4.99 = hi!))))))))))))))) are added for emphasis on the previous statement, I have been working on a theory that the ratio of ) к остальной части строки прямо пропорциональна величине подразумеваемого выделения, однако мне часто бывает трудно вычислить соотношение на лету, так как я также пытаюсь справиться с множеством злоупотреблений, поэтому мне бы хотелось, чтобы максимально короткий код, который поможет мне вычислить, какой должна быть результирующая строка, для значения энтузиазма от 0 до 500%, учитывая исходную, без энтузиазма строку, это очень поможет моим исследованиям, поскольку мне не придется каждый раз печатать громоздкие сценарии Я хочу проверить свою гипотезу.

Итак, задача:

напишите полную программу или функцию, которая при наличии двух аргументов, строки неизвестной длины и числа в целочисленном формате (от 0 до 500) или в десятичном формате (от 0 до 5, с точностью до 2 баллов) будет

  • вернуть/отобразить исходную строку с суффиксом ) 's
  • число будет рассчитываться как отношение входного числа к длине строки.
  • поэтому, если было указано число 200 или 2,00, 200% строки должны быть дополнены суффиксом как ) 's
  • количество скобок, округленных до десятичной дроби, не имеет значения.
  • скрипт необходим для поддержки печатаемых символов ASCII.
  • должен поддерживать только один формат ввода чисел по вашему выбору.

Примеры:

)))

Пример кода (PowerShell) (с десятичным вводом):

удали игру нуб)))

Это настолько короткий код, который выигрывает!

#код-гольф #код-гольф #строка

Reroerydayhef


Рег
23 Sep, 2011

Тем
77

Постов
182

Баллов
587
  • 26, Oct 2024
  • #2

Перл 6, 21 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 (fn [s n] (print (str s (reduce str (repeat (* n (count s)) ")")))))
 
||answer||

Желе, 7 байты

f=->(s,n){s+')'*(s.size*n)} f.("codegolf", 1.5) # => "codegolf))))))))))))" f.("hi!", 4.99) # => "hi!))))))))))))))"

Попробуйте онлайн!

Использует десятичный формат.

Как?

->(s,n){s+')'*(s.size*n)} ||answer||

Общий Лисп, 59 52 50

Круглые скобки? Я внутри.

<?= // print ... str_pad( // pad $s=$argv[1], // string=argument 1 strlen($s)*++$argv[2], // to string length*(1+argument 2) ")" // using ")" as padding string );

Подробности

-r

Строка управления форматом

  • <?=str_pad($s=$argv[1],strlen($s)*++$argv[2],")"); : pretty print argument (here the given string)
  • H : iteration block, limited to V iteration, where V is taken as an argument, namely the r выражение. Предполагается, что итерация перебирает список, но когда вы добавляете R 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).

Поскольку ни один элемент в списке не используется форматом, цикл бесконечен, но, к счастью, он также ограничен V, то есть количеством скобок, которые нужно напечатать.


Изменить: спасибо Майклу Версу за указание на то, что нет необходимости округлять числовой аргумент (вопрос позволяет обрезать/округлять, как мы хотим, поэтому здесь работает поведение по умолчанию).

 

Jarecek


Рег
08 Sep, 2009

Тем
87

Постов
199

Баллов
644
  • 26, Oct 2024
  • #7

Пиф, 8 байт

INPUT S$,N?S$;")"*(LEN(S$)*N)

Онлайн-тест! Сначала берется коэффициент возбуждения, а затем струна, которая вызывает восторг.

Объяснение:

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||

PowerShell, 33 байта

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

Попробуйте онлайн!

Поддерживает десятичный формат.

 

Trafik


Рег
16 Nov, 2014

Тем
54

Постов
197

Баллов
487
  • 26, Oct 2024
  • #8

Р, 62 46 42 байта

Анонимная функция, принимающая строку python3 main.py "code here" and decimal iɢ291tʃɪðθœ<)>ɲqɶo , выводит вывод на стандартный вывод.

integer ||answer||

Пиф, 9 байт

string

Принимает две строки ввода: строку и соотношение (десятичное).

Попробуйте на pyth.herokuapp.com.

Объяснение

ɪ{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) denotes a function's first argument, ɪ{100}viħɖf0ɑ")"x1esøɒʕo его второй аргумент.

é┴eó¡µf ||answer||

TI-Basic, 33 байта

Принимает десятичный ввод.

string r(string s,int p)=>s+new string(')',(int)(s.Length*p/100d)); ||answer||

Перл 5, 29 байт

{@callstrlen intoL argv.0}{@set*Y argv.1,L}{@callstr_repeat intoO")",Y}{@echoargv.0,O}

(Число — это первый аргумент, строка — второй.)

Попробуйте онлайн!

 

Killerosik


Рег
12 Apr, 2014

Тем
85

Постов
188

Баллов
663
  • 26, Oct 2024
  • #9

CJam, 9 байт

{@echo argv.0} {@call strlen into length argv.0} {@set* ratio argv.1, length} {@call str_repeat into parenthesis ")", ratio} {@echo parenthesis}

Попробуйте онлайн!

Входная строка в первой строке, коэффициент выделения в диапазоне от 0 до 5 во второй.

Объяснение

{echo} ||answer||

MATL, 11 10 8 байт

{@echoargv.0}{@callstrlen intoL argv.0}{@set*Y argv.1,L}{@callstr_repeat intoO")",Y}{@echoO}

В этом решении используется десятичная форма второго ввода.

Попробуйте онлайн!

Объяснение

nth ||answer||

сБ~, 17 байт

(a (a) ((a)) (((a))) ... )

Объяснено:

list

Круглые скобки закрываются автоматически

Вот вывод компилятора, если вам интересно:

#(.replace(str(nth(iterate list(symbol %))(*(count %)%2)))"(""")

Эта версия компилятора была написана 27 января 2017 года в 23:12, что могло произойти через несколько минут после публикации этого вопроса. str (22 bytes)

Итак, вот версия, которая работает на самой старой версии компилятора, написанной часом ранее:

 

Максс


Рег
15 Apr, 2014

Тем
81

Постов
192

Баллов
607
  • 26, Oct 2024
  • #10
#(reduce str %(repeat(*(count %)%2)")"))

PostgreSQL, 102 байта

Подробности

Использует целочисленный формат ввода.

func[a b][append/dup a")"b * length? a]

Это просто дополняет входную строку скобками вправо до целевой длины.

def f = {s,r->s+')'*(s.length()*r)} println f("hi!", 4.99) println f("noob team omg", 0.5) ||answer||

Позвонили с Баш

{s,r->s+')'*(s.length()*r)}

+ coreutils, 45 байт

Попробуйте онлайн!

Целочисленный ввод.

 

Ярослав Громов


Рег
23 Oct, 2020

Тем
83

Постов
216

Баллов
671
  • 26, Oct 2024
  • #11

Отличный, 27 байт

echo $1`seq -s\) $[${#1}*$2/100+1]|tr -cd \)`

Простое решение

select q('codegolf', 125), q('codegolf', 75); select q('noob team omg', 50), q('hi!', 499); ||answer||

Тестовая программа:

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 ||answer||

Ребол, 39 байт

Кложур, 40 байт

create function q(text,int)returns text as $$select rpad($1,(100+$2)*length($1)/100,')')$$language sql

Довольно скучное решение: iS$,N?S$;')'*(N*l(S$)) function on a list of closing parentheses with a string as initial parameter.

Просто уменьшает https://ideone.com/5jEgWS

Посмотрите онлайн:

INPUT S$ ,N? S$ ;")"*(N* LEN( S$ ))

Не такое уж и скучное решение (64 байта): i\,N input a string and a number ?\; print the string ')'* also print ) multiplied by... (N*l(\ the number times the string length. on it generating infinite sequence like this: i\,N?\;')'*(N*l(\ Преобразует входную строку в символ (чтобы избавиться от кавычек) и повторно применяет функцию % 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 element converts it to string and replaces all opening parentheses with nothing.

. Берет https://ideone.com/C8JmaU

Посмотрите онлайн:

 

Мозг+1


Рег
22 Dec, 2006

Тем
71

Постов
178

Баллов
553
  • 26, Oct 2024
  • #12

SimpleTemplate, 92 байта
Принимает строку в качестве первого параметра и «соотношение» в качестве второго.

yn*:"41h

Соотношение находится в диапазоне от 0 до 5 с двумя десятичными знаками.
Как видите, это неоптимально. l e# Read input string. _, e# Duplicate, get length. ld e# Read emphasis ratio. * e# Multiply by length. ')* e# Get that many parentheses. there could be reduced to 1.
2


Из-за ошибки в компиляторе этот код невозможно сократить дальше.

l_,ld*')*

Негольфед:

sub{($_=pop).')'x(y///c*pop)} ||answer||

Если бы ошибки не было, код выглядел бы так, 86 байт: С# интерактивный,

Prompt Str1,A ") For(I,0,9 Ans+Ans End Str1+sub(Ans,1,AI

77 67 байт

Интерактивный язык C# — это здорово.

 

Александр Рус


Рег
17 Oct, 2015

Тем
77

Постов
171

Баллов
566
  • 26, Oct 2024
  • #13
, 7 Стакс *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

байты

Запустите и отладьте его

 

TapRoyath32


Рег
23 May, 2011

Тем
68

Постов
204

Баллов
604
  • 26, Oct 2024
  • #14
Международный фонетический эзотерический язык

, 24 байта

B

Повторная реализация старого ответа в новой спецификации. Сначала вводится положительное целое число, а затем строка.

A

Объяснение:Международный фонетический эзотерический язык

, 18 байт (язык WIP) (СТАРЫЙ) *s*lpzE") then pryr::f(cat(a,rep(")",n*nchar(a)),sep="")) .

n

Из-за этой проблемы я обнаружил некоторые ошибки в своем интерпретаторе. Принимает ввод как a .

$a,$b=$args;$a+')'*($b*$a.Length)

Интерпретатора TIO пока нет, но его можно запустить, клонировав указанный выше репозиторий и вызвав

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||

Примеры случаев:

*\)s*lpz ||answer||

SmileBASIC, 29 байт Гол><>

lambda s,r:s+')'*int(len(s)*r)

(Гольфиш), 17 байт.

Попробуйте здесь f(String, Double) ) until it finds a newline (ASCII 10, g* # Length, multiplied by emphasis. ï')× # Covnerted to an integer, push that many parenthesis. ¹ì # Prepend original string. Верхняя строка читает символы ( g*ï')×¹ì ).

), затем опускается ( lambda s,p:s+len(s)*p/100*')' , push the length of the stack ( f=s=>n=>s+')'.repeat(s.length*n) console.log(f("hi!")(4.99)) Затем мы отбрасываем один символ (новую строку) с помощью s=>n=>s+')'.repeat(s.length*n) ), multiply the two, and repeatedly ( @ ), прочитать число с плавающей запятой ( (* ...) ), output it and halt ( ~v@{...~} ).

) нажмите символ ")" столько раз. Наконец, переверните стек (

 

Dmitriy Ovchinnikov


Рег
18 Dec, 2020

Тем
69

Постов
201

Баллов
566
  • 26, Oct 2024
  • #15
~a

PHP, 50 байт (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 ;

принимает строку и десятичное число в качестве аргументов командной строки; режет прокладку. Беги с

(lambda(s n)(format()"~a~v@{)~}"s(*(length s)n)0)) ||answer||

авария

Ȯ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

Рубин, 25 байт я используюлямбды

ȮL×Ċ”)x ||answer||

. Тестовая программа будет выглядеть примерно так:

Кложур, 68 байт

{$^a~")"x$^b*$a.comb}

Анонимная функция, принимающая десятичные значения.

 

Wapynefefarma28


Рег
25 Oct, 2024

Тем
72

Постов
190

Баллов
570
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно