문자열을 열정적으로 러시아어 화


57

많은 사람들이 언젠가 인터넷에서 러시아 사람들과 교류했을 수도 있고, 일부 사람들은 자신을 표현하는 약간 이상한 방법을 발견했을 수도 있습니다.

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

어디에 )))이전 문에 대한 강조를 위해 추가, 나는의 비율 있다는 이론에 노력하고있다 )그러나 나는 자주 어려운 비율을 계산하기 위해 찾을 문자열의 나머지들 '묵시적 강조의 양에 비례 나는 또한 많은 남용에 대처하려고 노력하고 있으므로 가능한 한 가장 짧은 코드를 사용하여 결과 문자열이 무엇인지 계산하는 데 도움이됩니다. 원본을 감안할 때 0에서 500 % 사이의 열정에 대한 값 , 열의없는 문자열, 내 가설을 테스트 할 때마다 부피가 큰 스크립트를 입력 할 필요가 없으므로 연구에 큰 도움이 될 것입니다.

따라서 도전은 :

정수 형식 (0-500) 또는 10 진수 형식 (0-5, 2 점 정확도)의 두 인수 (알 수없는 길이의 문자열)와 숫자를 제공하는 전체 프로그램 또는 함수를 작성합니다.

  • 리턴 /의 번호와 접미사 원래 문자열 표시 )'들
  • 숫자는 입력 길이와 문자열 길이의 비율로 계산됩니다.
  • 수 (200), 또는 2.00를 제공 한 경우이므로, 문자열은 200 %로 붙는해야 )
  • 소수 상황에서 반올림 된 대괄호 수는 중요하지 않습니다.
  • 인쇄 가능한 ASCII 문자를 지원하려면 스크립트가 필요합니다.
  • 하나의 입력 숫자 형식 만 지원하면됩니다.

예 :

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

예제 코드 (PowerShell) (10 진수 입력) :

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
혼란 스러워요. 러시아인들은 정말로 )강조처럼 사용 !합니까? 인코딩 문제입니까?
Captain Man

2
@CaptainMan 나는 그것이 s보다 웃는 얼굴과 같다고 생각 !하지만, 그들은 그대로 입력합니다. 매우 일반적이지는 않지만 꽤 상징적입니다.
colsw

30
@CaptainMan 아니요 )이모티콘이 줄어 듭니다 :). 내가 아는 한 젊은이들 사이에서 매우 일반적으로 사용됩니다.
talex

4
)강조하지 않고 단순히 웃는 것입니다. 내가 아는 한 :러시아어 키보드 레이아웃을 사용할 때 타이핑하기가 어려워서 눈이없이 미소 짓습니다.
Džuris

18
@Juris QWERTY :를 입력 ^하는 것만 큼 ​​러시아어 레이아웃 (ЙЦУКЕН) 을 작성 하는 것은 어렵습니다 . 그러나 실제로 )는의 축소 버전입니다 :). 반복적으로 키를 번갈아 돌리는 것보다 Shift-0을 누르고있는 것이 훨씬 쉽습니다.
Ruslan

답변:


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"이라고 표시되어 있음을 알았습니다. 괜찮습니까?
Jonathan Allan

1
모든 표준 허용 출력 형식 은 괜찮습니다
colsw

걱정하지 마십시오-이것은 첫 번째 도전이므로 내가 놓친 몇 가지가 있습니다. 질문에서 더 명확하게 업데이트했습니다.
colsw

17

펄 6, 21 바이트

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

16

일반적인 Lisp, 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에 의해 제한됩니다.


편집 : 숫자 인수를 반올림 할 필요가 없음을 지적 해 주신 Michael Vehrs에게 감사드립니다 (질문은 원하는대로 자르거나 돌릴 수 있으므로 기본 동작은 여기에서 작동합니다).


12
(()) / 10 충분하지 않은 괄호
BgrWorker

누가이 언어가 좋은 생각이라고 생각 했습니까?
downrep_nation

Scheme format은에 대한 십진 인수를 허용합니다 v. 커먼 리스프도 그래?
Michael Vehrs 17

@MichaelVehrs 정말 감사합니다.
coredump

1
@coredump 사실, format표준 체계 format가 지원하지 않기 때문에 "Guile 's accepts ..." 라고 말해야했다 ~r. Guile 's format는 Common Lisp의 예를 따릅니다.
Michael Vehrs 17

9

자바 스크립트 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
좋아, 나는 그것이 가장 짧은 것 같아요. 카레를 통해 바이트를 절약 할 수 있습니다 : 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)


05AB1E의 새 버전에서 -1 이며 여기서 float 인수 ï를 사용 ×하여 암시 적으로 수행됩니다 .
Kevin Cruijssen

그리고 여기에 레거시 및 현대 05AB1E : sg * F ')« 모두에서 작동하는 7 바이트가 있습니다 .
그리미


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 바이트

string a및 decimal을 사용 하는 익명 함수 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 기본, 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$ ))

이 컴파일러 버전은 2017 년 1 월 27 일 오후 11시 12 분에 작성되었으며이 질문이 게시 된 후 몇 분이 지났을 수 있습니다. 1 시간 전에 작성된 가장 오래된 버전의 컴파일러에서 작동하는 버전은 다음과 같습니다 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

그루비, 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

클로저, 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))) ... ). 소요 nth요소를 문자열로 변환하고 아무것도 모든 여는 괄호를 대체합니다.

온라인 참조 : https://ideone.com/C8JmaU


1
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")1 바이트 이하 (yay) 나는 comp를하고 싶었지만 70 바이트 미만으로는 얻을 수 없었다.
Michael M

당신은 변경할 수 있습니다 ")"\)바이트를 저장합니다.
clismique

2

SimpleTemplate, 92 바이트

문자열을 첫 번째 매개 변수로 사용하고 "비율"을 두 번째 매개 변수로 사용합니다.
비율은 0에서 5 사이이며 소수점 이하 두 자리입니다.

{@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 #에서 헤더에 있어야하는 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.9714또는 1529 바이트 버전은 죄송하지만 잘 작동합니다, 답변으로 허용 될 것입니다!
colsw

1

Gol> <> (Golfish), 17 바이트

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

여기에서 시도하십시오 .

맨 위 줄은 i개행 (ASCII 10, a)을 찾을 때까지 문자 ( )를 읽은 다음 아래로 내려갑니다 ( v).

그런 다음을 사용하여 한 문자 (개행 문자)를 버리고 ~스택 길이 ( l)를 푸시하고 float ( I)를 읽고 두 R문자를 곱한 다음 반복적으로 ( ) 문자 ")"를 여러 번 누릅니다. 마지막으로 스택 ( r)을 뒤집어 출력하고 정지 ( H)합니다.


1

PHP, 50 바이트

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

문자열과 10 진수를 명령 행 인수로 사용합니다. 패딩을 자릅니다. 로 실행 -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)}

lambdas 사용하고 있습니다. 테스트 프로그램은 다음과 같습니다.

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

1

클로저, 68 바이트

십진수 입력을 허용하는 익명 함수입니다.

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

문자 그대로 내가 쓴 최초의 Lisp 프로그램! 나는 이미 재미있다.


Lisp의 세계에 오신 것을 환영합니다! : P Clojure에서는 압축 된 익명 함수 형식 #(...)을 사용할 수 있으며 print(함수 리턴이 허용되어야하기 때문에) 제거 할 수 있습니다 . 당신은 변경할 수 있습니다 reduceapply에 대한 str기능, 당신은 변경할 수 있습니다 ")"\)같은 일을한다. 따라서 최종 코드는 다음과 같아야합니다 #(str %(apply str(repeat(*(count %)%2)\))))).
clismique

또한 현재 코드 상태가 작동하지 않으므로 "codegolf" 길이의 125 배가 아니라 "codegolf"길이의 (#(...) "codegolf" 125)125 % 를 추가해야합니다 . 따라서 고정 프로그램은 : 49 바이트입니다. #(str %(apply str(repeat(*(count %)%2 1/100)\))))
clismique

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.