!万圣节守则高尔夫挑战赛


15

编写一个程序,该程序接受长度为2个或更多字符的输入字符串,并将该字符串 ~BOO!~ (该字符串具有开头和结尾的空格)添加到该字符串中不在两端的一致随机点中。


不允许的样本输入2 (空输入)

不允许的样本输出Hello ~BOO!~ ~BOO!~ Hello用于输入Hello

样本输入Hello, World!

样本输出Hel ~BOO!~ lo, World!Hello, Worl ~BOO!~ d!


这是代码高尔夫,伙计们。适用标准规则。以字节为单位的最短代码获胜。


祝贺Dennis拥有最短,最诡异的程序!万圣节快乐!


命令行参数可以吗,还是必须是stdin?
DLosc

接受带有修改的所有输入并打印输出的任何内容都是可以接受的。我默认使用STDIN,因为它是我唯一熟悉的术语。
2015年

Answers:


6

Pyth,19 18字节

j" ~BOO!~ "cz]OtUz

感谢@Jakube打高尔夫球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
@丹尼斯前者。引号用于防止shell扩展,并防止带有空格的内容被视为多个命令行参数。
DLosc 2015年

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

请注意,zZ今天已进行了编辑,但并非针对此挑战。

I1-R1 + \ i“〜OOB〜” zZ
I1-获取输入的长度,减去1
   R将随机数从0推送到堆栈的顶部。
    1+加一个-这是一个从1到输入的随机数
                      长度-1。
      \ i获得那么多输入项。
        “〜OOB〜”将'〜BOO〜'推入堆栈。
                 z获取其余输入。
                  Z全部输出。

1

Lua,75个字节

s=io.read()m=math.random(2,#s/2);return s:sub(1,m).." ~BOO!~ "..s:sub(m,#s)

1

Python 3,79个字节

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

在线尝试

不言而喻-读取一个字符串,选择一个介于1和字符串长度之间的随机整数,并打印' ~BOO!~ '插入的字符串。


我的解决方案正是。至
Arcturus

@Mego在程序中看到随机出现的<code>〜BOO!〜</ code>很奇怪。
Arcturus

由于to的多个参数以print空格分隔打印,因此可以使用剪切空格print(s[:n],'~BOO!~',s[n:])
xnor 2015年

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

爪哇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));}}

在这里尝试。

编辑:现在只读取程序,而不是质询描述中的默认功能/程序。.因此添加了带有接口和main方法的边界代码。

如果允许使用功能,则将为(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

TeaScript,30个字节

xh(j=N(xn-1)+1)+' ~BOO!~ '+xS(j)

非常简单。


-1

CJam,19个字节

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

This will fail when mr returns 0 or 1, because neither -1 nor 0 are valid for splitting a string with /.
Martin Ender

Then it must be )
username.ak

Now it can put BOO at the end of the string, You'd also need a ( before mr. But then it's identical to this answer: codegolf.stackexchange.com/a/62355/8478
Martin Ender

I use q (reads all input, including newline), he uses l (reads only 1 line)
username.ak

Oh okay, then you should specify that your code expects the input to have a trailing linefeed (because it doesn't necessarily have one, in which case q and l are synonymous).
Martin Ender
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.