Boo! Thử thách chơi gôn Halloween Code


15

Viết chương trình lấy một chuỗi đầu vào có độ dài từ 2 ký tự trở lên và thêm chuỗi ~BOO!~ (chuỗi đó có khoảng trắng ở đầu và cuối) vào một vị trí ngẫu nhiên thống nhất trong chuỗi không nằm ở hai đầu.


Đầu vào mẫu không được phép : 2hoặc (một đầu vào trống)

Đầu ra mẫu không được phép : Hello ~BOO!~ hoặc ~BOO!~ Hellocho đầu vàoHello

Đầu vào mẫu :Hello, World!

Đầu ra mẫu : Hel ~BOO!~ lo, World!hoặcHello, Worl ~BOO!~ d!


Đây là mã golf, fellas. Quy tắc tiêu chuẩn áp dụng. Mã ngắn nhất trong byte thắng.


Xin chúc mừng Dennis vì đã có chương trình ngắn nhất, ma quái nhất! Halloween vui vẻ!


Một đối số dòng lệnh sẽ ổn, hay nó phải là stdin?
DLosc

Bất cứ điều gì có một đầu vào và in ra đầu ra với sửa đổi đều được chấp nhận. Tôi sử dụng STDIN theo mặc định vì đó là thuật ngữ duy nhất tôi quen thuộc.
Arcturus

Câu trả lời:


6

Pyth, 19 18 byte

j" ~BOO!~ "cz]OtUz

Cảm ơn @Jakube đã chơi golf 1 byte!

Hãy thử trực tuyến.

Làm thế nào nó hoạt động

                    (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 byte

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

Đủ đơn giản - lấy một chuỗi, chèn chuỗi con vào nó, xuất chuỗi. Làm xong.


Không bao giờ nghĩ rằng tôi sẽ thấy GML trên codegolf.
Donffan Donal

3

Python 3, 60 byte

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

Ghi chú:

Các modulo của hash()sẽ được phân phối đồng đều theo chiều dài của chuỗi. Nếu bạn nghĩ rằng đó là bẻ cong các quy tắc, lưu ý rằng do ngẫu nhiên băm của python, điều này thực sự ngẫu nhiên: các lần thực hiện lặp lại với cùng một đầu vào sẽ cho kết quả khác nhau.


2

CJam, 20 byte

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

Dùng thử trực tuyến

Giải trình:

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

Pip, 19 byte

Lấy đầu vào từ dòng lệnh. Nếu đầu vào có khoảng trắng hoặc các ký tự đặc biệt khác, nó sẽ cần được đặt trong dấu ngoặc kép.

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

Giải trình:

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

Bạn có nghĩa là đầu vào phải được truyền dưới dạng một đối số dòng lệnh đơn, hoặc bạn thực sự phải truyền dấu ngoặc kép cho Pip?
Dennis

1
@Dennis Trước đây. Các trích dẫn là để ngăn chặn sự mở rộng shell và để ngăn các công cụ có khoảng trắng được coi là nhiều đối số dòng lệnh.
DLosc

1

Julia, 70 byte

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

Ung dung:

# 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 byte

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

APL không có chức năng chèn, vì vậy chúng tôi xoay chuỗi thay thế.

{                          }    ⍝ 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

Ví dụ đầu vào trên TryAPL


1

Vitsy, 19 byte

Lưu ý rằng zZđã được chỉnh sửa ngày hôm nay, nhưng không phải cho thử thách này.

I1-R1 + \ i "~ OOB ~" zZ
I1- Lấy độ dài của đầu vào, trừ đi 1
   R Đẩy một số ngẫu nhiên từ 0 đến mục trên cùng của ngăn xếp.
    1+ Thêm một vào nó - đây là số ngẫu nhiên từ 1 đến đầu vào
                      chiều dài - 1.
      \ i Nhận được nhiều mục đầu vào.
        "~ OOB ~" Đẩy '~ BOO ~' vào ngăn xếp.
                 z Lấy phần còn lại của đầu vào.
                  Z Xuất ra tất cả.


1

Python 3, 79 byte

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

Dùng thử trực tuyến

Khá tự giải thích - đọc một chuỗi, chọn một số nguyên ngẫu nhiên trong khoảng từ 1 đến độ dài của chuỗi và in chuỗi có ' ~BOO!~ 'chèn.


Giải pháp của tôi chính xác . Để thư .
Arcturus

@Mego Thấy một <code> ~ BOO! ~ </ Code> ngẫu nhiên hiển thị trong chương trình của bạn khá ma quái.
Arcturus

Vì nhiều đối số printđược in tách biệt không gian, bạn có thể cắt các khoảng trắng bằng print(s[:n],'~BOO!~',s[n:]).
xnor

1

Perl, 35 byte

Mã 34 byte + dòng lệnh 1 byte

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

Sử dụng:

perl -p entry.pl

1

C #, 125 byte

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

Mở rộng:

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

Giải pháp này giả định rằng chuỗi được truyền vào dưới dạng tham số dòng lệnh đầu tiên. Điều này không bình thường đối với C # (stdin là bình thường hơn), vì vậy tôi cũng đã bao gồm một giải pháp sử dụng stdin bình thường:

C #, 139 byte

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

Mở rộng:

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

(xem bình luận, lập luận đều ổn) static void Main(string[] x) {Console.Write(x[0].Insert (...) x[0].Length (...)sẽ rút ngắn mã của bạn
Jan 'splite' K.

0

MATLAB, 69 byte

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

Việc chèn một chuỗi giữa chuỗi tại một chỉ mục đã cho trong MATLAB rất tốn kém về mặt byte. Nếu có một cách đơn giản để làm điều đó, tôi có thể tiết kiệm một khoản tiền kha khá bằng cách chuyển sang một chức năng ẩn danh, nhưng tôi không thể tìm thấy. À

Về cơ bản, nó nhận được một số ngẫu nhiên trong khoảng từ 1 đến độ dài của chuỗi trừ 1. Sau đó, nó sẽ hiển thị mọi thứ lên đến và bao gồm chỉ mục đó, theo sau là ~Boo!~, và sau đó mọi thứ sau khi chỉ mục kết thúc.


Nó cũng hoạt động với Octave , vì vậy bạn có thể dùng thử trực tuyến tại đây .


0

Bash / GNU, 61 byte

echo $1|sed "s/.\{`shuf -i1-$((${#1}-1)) -n1`\}/\0 ~BOO!~ /"

Lấy chuỗi đầu vào làm đối số



0

JavaScript, 79

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

Nó dành cho bảng điều khiển trình duyệt; có niềm vui chỉ xuất hiện mà trong.


0

Java 8, 158 154 byte

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

Hãy thử nó ở đây.

EDIT: Chỉ bây giờ đọc chương trình thay vì chức năng / chương trình mặc định trong mô tả thử thách .. Vì vậy, đã thêm bordercode với giao diện và phương thức chính.

Nếu một chức năng sẽ được cho phép thì nó sẽ là ( 99 95 byte )

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

Hãy thử nó ở đây.

Giải trình:

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 byte

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

Rất thẳng về phía trước.


-1

CJam, 19 byte

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

Điều này sẽ thất bại khi mrtrả về 0hoặc 1, bởi vì cả hai đều -1không 0hợp lệ để tách một chuỗi với /.
Martin Ender

Sau đó, nó phải được)
tên người

Bây giờ nó có thể đặt BOOở cuối chuỗi, Bạn cũng cần một cái (trước đó mr. Nhưng sau đó, nó giống hệt với câu trả lời này: codegolf.stackexchange.com/a/62355/8478
Martin Ender

Tôi sử dụng q (đọc tất cả đầu vào, bao gồm cả dòng mới), anh ấy sử dụng l (chỉ đọc 1 dòng)
tên người

Ồ được rồi, sau đó bạn nên xác định rằng mã của bạn hy vọng đầu vào có một dòng cấp dữ liệu (vì nó không nhất thiết phải có một, trong trường hợp đó qlđồng nghĩa).
Martin Ender
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.