З ентузіазмом росіянизуйте струну


57

Багато хто з вас, можливо, спілкувався з людьми з Росії в Інтернеті в якийсь момент, і підмножина з вас, можливо, помітила дещо дивний метод вираження себе.

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

де )))додано для наголосу на попередньому твердженні, я працюю над теорією, що відношення )'s до решти рядка прямо пропорційне кількості наголошених наголосів, однак мені часто важко обчислити коефіцієнт на ходу, тому що я також намагаюся впоратися з великою кількістю зловживань, тому я хотів би, щоб якомога коротший код міг допомогти мені обчислити, якою має бути результат, для рівня ентузіазму від 0 до 500%, враховуючи оригінал , не захоплений рядок, це значно допоможе моїм дослідженням, оскільки мені не доведеться друкувати об'ємні сценарії кожного разу, коли я хочу перевірити свою гіпотезу.

Отже, завдання:

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

  • повернути / відобразити початковий рядок, суфікс із числом )s
  • число буде обчислено як відношення вхідного числа до довжини рядка.
  • тож якщо було вказано число 200, або 2.00, 200% рядка повинно бути суфіксовано як )'s
  • кількість дужок, округлених до десяткових ситуацій, значення не має.
  • сценарій необхідний для підтримки друкованих символів ASCII.
  • має підтримувати лише один формат вхідного номера на ваш вибір.

Приклади:

"codegolf" 125      = codegolf))))))))))
"codegolf" 75       = codegolf))))))
"noob team omg" 0.5 = noob team omg))))))
"hi!" 4.99          = hi!)))))))))))))))

Приклад коду (PowerShell) (з десятковим введенням):

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

Це тому найкоротший виграш коду!


2
Я розгублений, чи справді росіяни використовують )для наголосу як !? Це якась проблема кодування?
Людина капітана

2
@CaptainMan Я вважаю, що це більше схоже на усміхнені обличчя, ніж на !s, але вони набирають їх так, як є, це не надто часто, але це досить знаково.
colsw

30
@CaptainMan Ні )- це зменшений смайлик :). Наскільки я знаю, він використовується дуже часто серед молоді.
talex

4
)це не акцент, це просто смайлик. Наскільки мені відомо, важче набирати текст :під час використання російської розкладки клавіатури, тому вони посміхаються без очей.
Джуріс

18
@Juris так само важко писати :на російському макеті (ЙЦУКЕН), як і набирати ^на QWERTY. Але дійсно, )це скорочена версія :). Набагато простіше натискати і утримувати Shift-0, ніж кілька разів чергувати клавіші.
Руслан

Відповіді:


16

Желе , 7 байт

ȮL×Ċ”)x

Спробуйте в Інтернеті!

Використовує десятковий формат.

Як?

Ȯ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

@ConnorLSW Я щойно помітив, що це надрукує необхідний рядок як повноцінну програму, але специфікація зазначає "return" - це добре?
Джонатан Аллан


не хвилюйтесь - це мій перший виклик, тому є кілька цих речей, які я пропустив, я оновив це питання, щоб бути більш зрозумілим - дякую за запитання.
colsw


16

Лисп звичайний, 59 52 50

Круглі скобки? Я в.

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

Деталі

(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

Формат управління рядком

  • ~a : досить аргумент друку (тут заданий рядок)
  • ~v@{...~}: блок ітерації, обмежений V ітерацією, де V береться як аргумент, а саме (* ...)вираз. Ітерація повинна повторюватися над списком, але коли ви додаєте @модифікатор, цей список залишається списком аргументів функції формату. У ітераційному списку повинен бути принаймні один елемент (інакше ми виходимо, не зважаючи на V). Ось чому є додатковий аргумент для форматування (0).

Оскільки формат не використовує жоден елемент у списку, цикл нескінченний, але, на щастя, він також обмежений V, також числом круглих дужок для друку.


Редагувати: дякую Майклу транспортному засобу, який вказав, що немає необхідності округляти числовий аргумент (питання дозволяє усікати / кругляти, проте ми хочемо, тому поведінка за замовчуванням працює тут).


12
(()) / 10 недостатньо дужок
BgrWorker

Хто вважав цю мову гарною ідеєю?
downrep_nation

Схема formatприймає десятковий аргумент до v. Може, і звичайні Ліспи теж?
Michael Vehrs

@MichaelVehrs Дійсно, велике спасибі
coredump

1
@coredump Насправді я мав би сказати "Гіле formatприймає ...", оскільки стандартна схема formatне підтримує ~r; а Гейле formatслідує прикладу звичайного Ліспа.
Michael Vehrs

9

JavaScript ES6, 38 31 30 байт

s=>n=>s+')'.repeat(s.length*n)

f=s=>n=>s+')'.repeat(s.length*n)

console.log(f("hi!")(4.99))


1
Приємно, я думаю, що це найкоротше. Ви можете зберегти байт за допомогою currying: s=>n=>s+')'.repeat(s.length*n)(це тоді б називалося так f("hi!")(4.99))
ETHproductions


7

05AB1E , 9 8 байт

g*ï')×¹ì

Спробуйте в Інтернеті!

g*       # Length, multiplied by emphasis.
  ï')×   # Covnerted to an integer, push that many parenthesis.
      ¹ì # Prepend original string.

Працює як для цілого, так і для десяткового порядку, порядку аргументів: f(String, Double)


-1 у новій версії 05AB1E , де ïце робиться неявно за ×допомогою float аргументу.
Кевін Кройсейсен

І ось 7-байт, який працює як у спадщині, так і в сучасному 05AB1E: sg * F ') « .
Grimmy


7

Pyth, 8 байт

*\)s*lpz

Інтернет-тест! Спершу приймає коефіцієнт збудження, потім струну, про яку захоплюється.

Пояснення:

      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.


5

R, 62 46 42 байт

Анонімна функція, яка приймає рядок aі десятковий n, друкує вихід у stdout.

pryr::f(cat(a,rep(")",n*nchar(a)),sep=""))

4

Pyth, 9 байт

*s*lpzE")

Бере два рядки введення: рядок і відношення (десятковий).

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

Пояснення

Aпозначає перший аргумент функції, Bйого другий аргумент.

*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

4

TI-Basic, 33 байти

Бере десяткове введення.

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


3

CJam , 9 байт

l_,ld*')*

Спробуйте в Інтернеті!

Рядок введення на першому рядку, коефіцієнт наголосу в діапазоні від 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.

3

MATL, 11 10 8 байт

yn*:"41h

Для цього рішення використовується десяткова форма другого вводу

Спробуйте в Інтернеті!

Пояснення

        % 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

3

sB ~, 17 байт

i\,N?\;')'*(N*l(\

Пояснили:

i\,N    input a string and a number
?\;     print the string
')'*    also print ) multiplied by...
(N*l(\  the number times the string length.

Дужки закриваються автоматично

Ось вихід компілятора, якщо ви зацікавлені:

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

Ця версія компілятора була написана 27.01.2017 о 23:12, що могло пройти через кілька хвилин після опублікування цього питання. Ось ось версія, яка працює на найстарішій версії компілятора, написаній на годину раніше: iS$,N?S$;')'*(N*l(S$))(22 байти)


3

PostgreSQL, 102 байти

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

Деталі

Використовує цілий формат введення.

Це просто праворуч прошиває вхідний рядок з паролями до цільової довжини.

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

Подзвонив с

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


2

Groovy, 27 байт

Безпосереднє рішення

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

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

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

println f("hi!", 4.99)
println f("noob team omg", 0.5)


2

Clojure, 40 байт

Досить нудне рішення:

#(reduce str %(repeat(*(count %)%2)")"))

Просто знижує strфункцію у списку закритих дужок із рядком як початковим параметром.

Дивіться це в Інтернеті: https://ideone.com/5jEgWS

Не дуже нудне рішення (64 байти):

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

Перетворює рядок введення в символ (щоб позбутися від лапок) і повторно застосовує функцію listна ньому генерації нескінченної послідовності , як це: (a (a) ((a)) (((a))) ... ). Element nthElement перетворює його в рядок і замінює всі відкриті дужки нічим.

Дивіться це в Інтернеті: https://ideone.com/C8JmaU


1
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")На 1 байт менше (так). Я хотів зробити комп, але не можу отримати його нижче 70 байт.
Майкл М

Ви можете змінити , ")"щоб \)зберегти байти.
клісмік

2

SimpleTemplate, 92 байти

Приймає рядок як перший параметр, а "співвідношення" - як другий.
Співвідношення між 0 і 5, з 2 знаками після коми.

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

Як бачите, це неоптимально.
2 {echo}там можна зменшити до 1.
Через помилку у компіляторі цей код не можна значно зменшити.


Безголівки:

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

Якщо б не існувало помилки, код виглядав би так, 86 байт:

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

2

C # Інтерактив, 77 67 байт

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

C # інтерактив - це солодко.


1
Якщо ви використовуєте C # Interactive, який повинен бути в заголовку в іншому випадку, в C # ви повинні включити using System;або повністю кваліфікувати Math. Крім того, не впевнений, чи можна це робити в інтерактивному режимі, але ви можете скласти його Func<string, Func<int, string>>до збереження байтів, тобтоs=>p=>s+new...
TheLethalCoder

1
Також вам, мабуть, не потрібен виклик, щоб Math.Roundпросто зателефонувати на intвиклик, Floorі ОП сказав, що це Floorабо Ceilingдобре
TheLethalCoder

1

SmileBASIC, 29 байт

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

оскільки 3*4.99= 14.97, тільки 14або 15буде прийнятним як відповідь, версія з 29 байтами повинна працювати нормально, вибачте!
colsw

1

Gol> <> (Golfish), 17 байт

i:a=?v
R*Il~/Hr)`

Спробуйте тут .

Верхній рядок читає символи ( i), поки не знайде новий рядок (ASCII 10, a), а потім спуститься вниз ( v).

Тоді ми відкидаємо один символ (новий рядок) с ~, висуваємо довжину стека ( l), читаємо флоат ( I), множимо два та кілька разів ( R) натискаємо символ ")", що багато разів. Нарешті, переверніть стек ( r), виведіть його та зупиніть ( H).


1

PHP, 50 байт

<?=str_pad($s=$argv[1],strlen($s)*++$argv[2],")");

приймає рядок і десятковий номер як аргументи командного рядка; ріже оббивка. Бігати з -r;

зламатися

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

1

Рубін, 25 байт

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

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

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

1

Clojure, 68 байт

Анонімна функція, яка приймає десяткове введення.

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

Буквально перша програма Lisp, яку я коли-небудь писав! Мені вже весело.


Ласкаво просимо у світ Лісп! : P У Clojure ви можете використовувати стиснуту форму анонімних функцій #(...), і ви можете позбутися print(оскільки повернення функції має бути прийнятним). Ви можете змінити , reduceщоб applyдля strфункції, і ви можете змінити ")"до \), який робить те ж саме. Таким чином, остаточний код повинен бути: #(str %(apply str(repeat(*(count %)%2)\))))).
клісмік

Крім того, поточний стан вашого коду не працює, він (#(...) "codegolf" 125)повинен додати 125 відсотків довжини "codegolf" замість 125 разів більше довжини "codegolf". Отже, фіксованою програмою було б:, #(str %(apply str(repeat(*(count %)%2 1/100)\))))що становить 49 байт.
клісмік

1

C ++ 14, 43 байти

Як безіменна лямбда, що модифікує свій вхід, передбачається, що sвона аналогічна std::string(має .append(int,char)та припускає, pщо має тип з плаваючою комою:

[](auto&s,auto p){s.append(s.size()*p,41);}

Використання:

#include<string>
#include<iostream>

auto f=
[](auto&s,auto p){s.append(s.size()*p,41);}
;


int main() {
 std::string s = "abcdefghijk";
 f(s,0.75);
 std::cout << s << std::endl;
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.