ブー!ハロウィーンコードゴルフチャレンジ


15

長さ2文字以上の入力文字列を受け取り、文字列 ~BOO!~ (その文字列の先頭と末尾にスペースがある)を、両端にない文字列の一様にランダムな場所に追加するプログラムを作成します。


許可されていないサンプル入力2または (空の入力)

許可されていないサンプル出力Hello ~BOO!~ または ~BOO!~ Hello入力用Hello

サンプル入力Hello, World!

サンプル出力Hel ~BOO!~ lo, World!またはHello, Worl ~BOO!~ d!


これはコードゴルフです。標準ルールが適用されます。バイト単位の最短コードが優先されます。


最短でスプーキーなプログラムをお持ちいただき、デニスにおめでとうございます!ハッピーハロウィン!


コマンドライン引数は大丈夫ですか、それとも標準入力である必要がありますか?
DLosc

入力を受け取り、変更を加えて出力を出力するものはすべて受け入れられます。STDINは、私がよく知っている唯一の用語であるため、デフォルトで使用します。
アークトゥルス

回答:


6

Pyth、19 18バイト

j" ~BOO!~ "cz]OtUz

1バイトのゴルフをしてくれた@ジャクベに感謝します!

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

使い方

                    (implicit) Store the input in z.
                Uz  Compute [0, ... len(z)-1].
               t    Remove the first element.
              O     Select an integer, pseudo-randomly.
             ]      Wrap it in an array.
           cz       Split the input string at that point.
j" ~BOO!~ "         Join the split string, using " ~BOO!~ " as separator.

4

GML、91バイト

s=get_string("","")
show_message(string_insert(" ~BOO!~ ",s,irandom(string_length(s)-2)+1);

簡単です-文字列を取得し、その中に部分文字列を挿入して、文字列を出力します。できた


codegolfでGMLを見るとは思わなかった。
ステファンドナル

3

Python 3、60バイト

s=input();n=1+hash(s)%(len(s)-1);print(s[:n],'~BOO!~',s[n:])

注意:

のモジュロはhash()、文字列の長さ全体に均一に分散されます。それがルールを曲げていると思うなら、Pythonのハッシュランダム化のために、これは実際にはランダムであることに注意してください:同じ入力で繰り返し実行すると異なる結果が得られます。


2

CJam、20バイト

l_,(mr)/(" ~BOO!~ "@

オンラインで試す

説明:

l       Get input.
_,      Calculate length.
(       Decrement, since the number of possible positions is 1 less than length.
mr      Generate random number between 0 and length-2
)       Increment, giving random number between 1 and length-1.
/       Split. Note that this splits repeatedly, but this will not do any harm.
        We will only really use the first split.
(       Peel off the first fragment after the split.
" ~BOO!~ "
        Push the magic string.
@       Rotate the list with the remaining fragments to the top.

2

ピップ、19バイト

コマンドラインから入力を取得します。入力にスペースまたはその他の特殊文字が含まれる場合、引用符で囲む必要があります。

a^@1RR#aJ" ~BOO!~ "

説明:

a                    Command-line arg
 ^@                  Split at index...
   1RR#a             ...random integer >= 1 and < length(a) (Python randrange)
        J" ~BOO!~ "  Join on that string and autoprint

入力を単一のコマンドライン引数として渡す必要があるということですか、それとも実際に引用符をPipに渡す必要がありますか?
デニス

1
@Dennis前者。引用符は、シェルの展開を防ぎ、スペースを含むものが複数のコマンドライン引数として扱われないようにするためのものです。
DLosc

1

ジュリア、70バイト

print((s=readline())[1:(r=rand(2:length(s)-2))]," ~BOO!~ ",s[r+1:end])

ゴルフをしていない:

# Read a line from STDIN
s = readline()

# Define a random integer within the bounds of s
r = rand(2:length(s)-2)

# Print to STDOUT with boo in there somewhere
print(s[1:r], " ~BOO!~ ", s[r+1:end])

1

APL、27バイト

{(-⌽' ~BOO!~ ',⍵⌽⍨⊢)?¯1+⍴⍵}

APLには挿入関数がないため、代わりに文字列を回転させます。

{                          }    ⍝ Monadic function:
                     ?¯1+⍴⍵     ⍝ Place to insert string, let's say it's X
 (                  )           ⍝ Monadic train:
               ⍵⌽⍨⊢            ⍝ Rotate input by X (⊢) to the left
    ' ~BOO!~ ',                 ⍝ Concatenate ' ~BOO!~ '
  -                             ⍝ -X
   ⌽                            ⍝ Rotate that by X to the right

TryAPLの入力例


1

Vitsy、19バイト

なお、z及びZ今日編集されたではなく、この挑戦のために。

I1-R1 + \ i "〜OOB〜" zZ
I1-入力の長さから1を引いた値を取得します
   R乱数を0からスタックの一番上のアイテムにプッシュします。
    1+ 1を追加-これは1から入力までの乱数になりました
                      長さ-1。
      \ i入力項目を取得します。
        "〜OOB〜"スタックに '〜BOO〜'をプッシュします。
                 z残りの入力を取得します。
                  Zすべてを出力します。


1

Python 3、79バイト

from random import*;s=input();n=randint(1,len(s)-1);print(s[:n],'~BOO!~',s[n:])

オンラインで試す

自明です-文字列を読み取り、1から文字列の長さまでのランダムな整数を選択し、' ~BOO!~ '挿入した文字列を出力します。


私の解決策を正確に手紙
アークトゥルス

@Megoプログラムにランダムな<code>〜BOO!〜</ code>が表示されるのはかなり不気味です。
アークトゥルス

への複数の引数printはスペースで区切られて出力されるため、でスペースをカットできますprint(s[:n],'~BOO!~',s[n:])
xnor

1

Perl、35バイト

34バイトのコード+ 1バイトのコマンドライン

$-=rand y///c-2;s/..{$-}\K/~BOO!~/

使用法:

perl -p entry.pl

1

C#、125バイト

using System;class X{static void Main(string[]a){Console.Write(a[0].Insert(new Random().Next(a[0].Length-2)+1," ~BOO!~ "));}}

拡張:

using System;
class X
{
    static void Main(string[] a)
    {
        Console.Write(a[0].Insert(new Random().Next(a[0].Length - 2) + 1, " ~BOO!~ "));
    }
}

このソリューションでは、文字列が最初のコマンドラインパラメーターとして渡されることを前提としています。これはC#では普通ではありません(stdinの方が通常です)ので、通常のstdinを使用するソリューションも含めました。

C#、139バイト

using System;class X{static void Main(){var x=Console.In.ReadToEnd();Console.Write(x.Insert(new Random().Next(x.Length-2)+1," ~BOO!~ "));}}

拡張:

using System;
class X
{
    static void Main()
    {
        var x = Console.In.ReadToEnd();
        Console.Write(x.Insert(new Random().Next(x.Length - 2) + 1, " ~BOO!~ "));
    }
}

(コメントを参照、引数は問題ありません)static void Main(string[] x) {Console.Write(x[0].Insert (...) x[0].Length (...)コードを短縮します
Jan 'splite' K.

0

MATLAB、69バイト

i=input('');a=randi(nnz(i)-1,1);disp([i(1:a) ' ~Boo!~ ' i(a+1:end)]);

MATLABの特定のインデックスに文字列の中央に文字列を挿入すると、バイトの点でコストがかかります。簡単な方法があれば、匿名関数に移行することでかなりの節約になりますが、見つけることができません。まぁ。

基本的には、1から文字列の長さから1を引いた数までの乱数を取得します。次に、そのインデックスまでのすべてを表示し、その後にが続き~Boo!~、その後にインデックス以降のすべてを表示します。


また、Octaveでも動作するため、ここでオンライン試すことができます




0

JavaScript、79

r=Math.random()*((x=prompt()).length-1)+1;x.substr(0,r)+" ~BOO!~ "+x.substr(r);

ブラウザコンソール用です。楽しんでください。


0

Java 8、158 154バイト

interface M{static void main(String[]a){int i=a[0].length()-2;System.out.println(a[0].substring(0,i=1+(i*=Math.random()))+" ~BOO!~ "+a[0].substring(i));}}

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

編集:チャレンジの説明でデフォルトの関数/プログラムの代わりにプログラムを読み取るようになりました。

関数が許可される場合、それは(99 95バイト

s->{int i=s.length()-2;return s.substring(0,i=1+(i*=Math.random()))+" ~BOO!~ "+s.substring(i);}

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

説明:

s->{                        // Method with String as both parameter and return-type
  int i=s.length()-2;       //  The length of the input - 2
  return s.substring(0,i=1  //  Return the first part of the input from index 0 to 1
    +(i*=Math.random()))    //    + a random integer between 0 and length-2
   +" ~BOO!~ "              //   appended with the literal " ~BOO!~ "
   +s.substring(i);         //   appended with the rest of the input-String
}                           // End of method



-1

CJam、19バイト

q_,mr)/(" ~BOO!~ "@

とき、これは失敗しますmr戻っ0たり1、なぜならどちら-1もが0して文字列を分割するために有効です/
マーティンエンダー

そして、それがなければなりません)
username.ak

これBOOで、文字列の最後に配置できます。また、(before も必要になりmrます。しかし、それはこの答えと同じです:codegolf.stackexchange.com/a/62355/8478
Martin Ender

私はqを使用し(改行を含むすべての入力を読み取ります)、彼はlを使用します(1行のみを読み取ります)
username.ak

(それは必ずしも、その場合には、1を持っていないので大丈夫ああ、あなたはあなたのコードを入力し、末尾の改行を持っていることを想定している指定する必要がありますql同義です)。
マーティンエンダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.