熱心にストリングをロシア化する


57

あなたの多くは、ある時点でインターネットでロシアの人々と交流したことがあり、あなたのサブセットは、彼らが自分自身を表現するわずかに奇妙な方法に気づいたかもしれません。

例えば удали игру нуб)))

インクルードがどこ)))前回の声明を重視するために添加されて、私はの比率という理論に取り組んできた)が、私はしばしばそれが困難な比率を計算するために見つけ、残りの文字列へのs」は暗黙の強調の量に正比例します多数の乱用にも対処しようとしているので、元々の0から500%の間の熱意の値に対して、結果の文字列がどうあるべきかを計算するのに役立つ最短のコードが欲しい、熱狂的な文字列、これは私の仮説をテストするたびにかさばるスクリプトを入力する必要がないので、これは私の研究を大いに助けます。

したがって、課題:

完全なプログラムまたは関数を作成します。これは、2つの引数、未知の長さの文字列、および数値を、整数形式(0〜500)または10進形式(0〜5、2つの精度)で提供します。

  • 末尾に)「」が付いた元の文字列を返す/表示する
  • 数値は、文字列の長さに対する入力数値の比率として計算されます。
  • したがって、数値200または2.00が提供された場合、文字列の200%に)'s として接尾辞を付ける必要があります
  • 10進数の状況で丸められた括弧の数は重要ではありません。
  • 印刷可能なASCII文字をサポートするにはスクリプトが必要です。
  • あなたが選択した1つの入力数値形式のみをサポートする必要があります。

例:

"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
私は混乱しています、ロシア人は本当に)強調のために使ってい!ますか?エンコードの問題ですか?
キャプテンマン

2
@CaptainManそれは!s よりもスマイリーフェイスに似ていると思いますが、彼らはそのままタイプします。
-colsw

30
@CaptainManいいえ)は絵文字を縮小し:)ます。私の知る限り、若者の間では非常によく使われています。
タレックス

4
)強調ではなく、単に笑顔です。私の知る限り、:ロシア語のキーボードレイアウトを使用する場合、入力するのが難しいため、目が見えないように微笑んでいます。
ジュリス

18
@Juris :^、QWERTYで入力するのと同じくらいロシア語のレイアウト(ЙЦУКЕН)で書くのは難しいです。しかし、実際には、)はの縮小版です:)。キーを繰り返し交互に押すよりも、Shift-0を押したままにする方がはるかに簡単です。
ルスラン

回答:


16

ゼリー、7 バイト

ȮL×Ċ”)x

オンラインでお試しください!

10進形式を使用します。

どうやって?

Ȯ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」と記載されていることに気付いた-これでいいのか?
ジョナサンアラン

1
標準で受け入れられている出力形式はすべて問題ありません
-colsw

心配しないでください-これが私の最初の挑戦なので、私が見逃したこれらの事柄のいくつかがあります。
colsw


16

Common 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は引数、つまり(* ...)式として使用されます。反復はリストを反復処理することになっていますが、@修飾子を追加すると、リストはformat関数の引数の残りのリストになります。反復リストには少なくとも1つの要素がなければなりません(そうでなければ、Vを無視して終了します)。これが、フォーマット(0)に追加の引数がある理由です。

リスト内の要素はフォーマットによって消費されないため、ループは無限ですが、幸いなことに、V、つまり印刷される括弧の数によって制限されます。


編集:数値引数を丸める必要がないことを指摘してくれたMichael Vehrsに感謝します(質問は、必要に応じて切り捨て/丸めることができるため、デフォルトの動作がここで機能します)。


12
(())/ 10不十分な括弧
-BgrWorker

この言語が良いアイデアだと思ったのは誰ですか?
downrep_nation

Schemeはにformat10進引数を受け入れますv。Common Lispもそうでしょうか?
マイケルヴェール

@MichaelVehrs確かに、どうもありがとう。
コアダンプ

1
@coredump実際にはformat、標準のScheme formatはサポートしていないため~r、「Guile's accepts ...」と言うべきでした。そしてGuile formatはCommon Lispの例に従います。
マイケル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
いいですね、これが最短だと思います。カリー化によってバイトを保存できます:(s=>n=>s+')'.repeat(s.length*n)その後、次のように呼び出されますf("hi!")(4.99)
-ETHproductions


7

05AB1E9 8バイト

g*ï')×¹ì

オンラインでお試しください!

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

整数と小数の両方で機能し、引数の順序: f(String, Double)


-1 05AB1Eの新バージョンではïのために暗黙的に行われている×float引数を持ちます。
ケビンクルイッセン

そして、ここに、レガシーとモダンの両方の05AB1Eで機能する7バイトがあります: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、出力を標準出力に出力します。

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

4

Pyth、9バイト

*s*lpzE")

入力の2行を取ります:文字列と比率(10進数)。

pyth.herokuapp.comで試してください

説明

A関数の最初の引数、B2番目の引数を示します。

*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バイト

10進数の入力を取ります。

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



3

MATL、11 10 8バイト

yn*:"41h

このソリューションでは、2番目の入力の10進数形式を使用します

オンラインでお試しください!

説明

        % 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

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))) ... )。受け取りnth要素が文字列に変換し、何もすべて開く括弧を置き換えます。

オンラインで見る:https : //ideone.com/C8JmaU


1
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")1バイト少ない(はい)。コンプをやりたかったのですが、70バイト未満にできません。
マイケルM

を変更")"\)て、バイトを保存できます。
clismique

2

SimpleTemplate、92バイト

文字列を最初のパラメーターとして受け取り、「比率」を2番目のパラメーターとして受け取ります。
比率は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#Interactive、 77 67バイト

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

C#interactiveは便利です。


1
C#Interactiveを使用している場合は、ヘッダーに含める必要があります。C#では、を含めるusing System;か、完全修飾する必要がありますMath。また、インタラクティブに実行できるかどうかはFunc<string, Func<int, string>>s=>p=>s+new...
わかり

1
また、おそらくshouldにMath.Roundキャストするだけの呼び出しは必要なく、OPはどちらかを言うか、問題ありませんintFloorFloorCeiling
-TheLethalCoder

1

SmileBASIC、29バイト

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

以来3*4.99= 14.97、唯一の14または1529バイトのバージョンは申し訳ありませんが、しかし正常に動作する必要があり、答えとして受け入れられるだろう!
colsw

1

Gol> <>(Golfish)、17バイト

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

ここで試してみてください

一番上の行iは、改行(ASCII 10、a)が見つかるまで文字()を読み取り、次に下に移動(v)します。

次に、で1文字(改行)を破棄し~、スタックの長さ(l)をプッシュし、フロート(I)を読み取り、2を掛け、繰り返し(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)}

私はラムダを使用しています。テストプログラムは次のようになります。

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

1

Clojure、68バイト

10進数の入力を受け入れる匿名関数。

(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バイト

入力を変更する名前のないラムダとして、仮定sstd::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.