Boo! Tantangan Golf Kode Halloween

15

Tulis sebuah program yang mengambil string input dengan panjang 2 atau lebih karakter dan menambahkan string ~BOO!~ (string itu memiliki ruang awal dan akhir) di tempat acak yang seragam dalam string yang tidak di kedua ujungnya.


Input sampel yang dilarang : 2atau (input kosong)

Output sampel yang dilarang : Hello ~BOO!~ atau ~BOO!~ Hellountuk inputHello

Input sampel :Hello, World!

Keluaran sampel : Hel ~BOO!~ lo, World!atauHello, Worl ~BOO!~ d!


Ini kode golf, kawan. Aturan standar berlaku. Kode terpendek dalam byte menang.


Selamat kepada Dennis karena memiliki program tersingkat dan seram! Selamat Halloween!

Arcturus
sumber
Apakah argumen baris perintah baik-baik saja, atau harus stdin?
DLosc
Apa pun yang mengambil input dan mencetak output dengan modifikasi itu dapat diterima. Saya menggunakan STDIN secara default karena itu satu-satunya istilah yang saya kenal.
Arcturus

Jawaban:

6

Pyth, 19 18 byte

j" ~BOO!~ "cz]OtUz

Berkat @Jakube untuk bermain golf 1 byte!

Cobalah online.

Bagaimana itu bekerja

                    (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.
Dennis
sumber
4

GML, 91 byte

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

Cukup sederhana - dapatkan string, masukkan substring ke dalamnya, output string. Selesai

Niet the Dark Absol
sumber
Tidak pernah terpikir saya akan melihat GML pada codegolf.
Steffan Donal
3

Python 3, 60 byte

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

catatan:

Modulo dari hash()akan terdistribusi secara merata sepanjang string. Jika Anda berpikir itu menekuk aturan, perhatikan bahwa karena pengacakan hash python, ini sebenarnya acak: eksekusi berulang dengan input yang sama akan memberikan hasil yang berbeda.

Alexis
sumber
2

CJam, 20 byte

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

Cobalah online

Penjelasan:

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.
Reto Koradi
sumber
2

Pip, 19 byte

Mengambil input dari baris perintah. Jika input memiliki spasi atau karakter khusus lainnya, ia harus ditempatkan dalam tanda kutip.

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

Penjelasan:

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
DLosc
sumber
Apakah maksud Anda bahwa input harus diteruskan sebagai argumen baris perintah tunggal, atau apakah Anda benar-benar harus memberikan tanda kutip ke Pip?
Dennis
1
@ Dennis Mantan. Kutipan untuk mencegah ekspansi shell, dan untuk mencegah hal-hal dengan spasi diperlakukan sebagai beberapa argumen baris perintah.
DLosc
1

Julia, 70 byte

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

Tidak Disatukan:

# 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])
Alex A.
sumber
1

APL, 27 byte

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

APL tidak memiliki fungsi menyisipkan, jadi kami memutar string sebagai gantinya.

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

Contoh input pada TryAPL

lirtosiast
sumber
1

Vitsy, 19 Bytes

Perhatikan itu zdan Zdiedit hari ini, tetapi tidak untuk tantangan ini.

I1-R1 + \ i "~ OOB ~" zZ
I1- Dapatkan panjang input, minus 1
   R Tekan angka acak dari 0 ke item teratas tumpukan.
    1+ Tambahkan satu ke dalamnya - ini sekarang merupakan angka acak dari 1 hingga input
                      panjang - 1.
      \ i Dapatkan banyak item input.
        "~ OOB ~" Dorong '~ BOO ~' ke tumpukan.
                 z Dapatkan sisa input.
                  Z Keluarkan semuanya.
Addison Crump
sumber
1

Lua, 75 byte

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

Python 3, 79 byte

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

Cobalah online

Cukup jelas - baca string, pilih bilangan bulat acak antara 1 dan panjang string, dan cetak string dengan ' ~BOO!~ 'memasukkan.

Mego
sumber
Solusi saya tepatnya . Untuk surat itu .
Arcturus
@Mego Melihat <code> acak ~ BOO! ~ </code> yang muncul di program Anda sangat menyeramkan.
Arcturus
Karena banyak argumen printdicetak spasi-terpisah, Anda dapat memotong spasi dengan print(s[:n],'~BOO!~',s[n:]).
xnor
1

Perl, 35 byte

34 byte kode + 1 byte baris perintah

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

Pemakaian:

perl -p entry.pl
Jarmex
sumber
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!~ "));}}

Diperluas:

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

Solusi ini mengasumsikan bahwa string dilewatkan sebagai parameter baris perintah pertama. Ini tidak biasa untuk C # (stdin lebih normal), jadi saya juga menyertakan solusi yang menggunakan stdin normal:

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!~ "));}}

Diperluas:

using System;
class X
{
    static void Main()
    {
        var x = Console.In.ReadToEnd();
        Console.Write(x.Insert(new Random().Next(x.Length - 2) + 1, " ~BOO!~ "));
    }
}
Timwi
sumber
(lihat komentar, argumen tidak masalah) static void Main(string[] x) {Console.Write(x[0].Insert (...) x[0].Length (...)akan mempersingkat kode Anda
Jan 'splite' K.
0

MATLAB, 69 byte

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

Memasukkan string string tengah pada indeks yang diberikan dalam MATLAB adalah mahal dalam hal byte. Jika ada cara sederhana untuk melakukannya, saya bisa menghemat jumlah yang wajar dengan pindah ke fungsi anonim, tetapi saya tidak dapat menemukannya. Baiklah

Pada dasarnya ia mendapatkan angka acak antara 1 dan panjang string minus 1. Kemudian menampilkan semuanya hingga dan termasuk indeks itu, diikuti oleh ~Boo!~, dan kemudian semuanya setelah indeks sampai akhir.


Ini juga berfungsi dengan Oktaf , sehingga Anda dapat mencobanya online di sini .

Tom Carpenter
sumber
0

Bash / GNU, 61 byte

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

Mengambil string input sebagai argumen

Fabian Schmengler
sumber
0

Ruby, 46 byte

$><<gets.insert(rand(1..$_.size-2),' ~BOO!~ ')
Peter Lenkefi
sumber
0

JavaScript, 79

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

Ini untuk konsol browser; bersenang-senang hanya muncul di.

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

Coba di sini.

EDIT: Hanya sekarang membaca program alih-alih fungsi / program default dalam deskripsi tantangan .. Jadi tambahkan bordercode dengan antarmuka dan metode utama.

Jika suatu fungsi diizinkan, itu akan menjadi ( 99 95 byte )

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

Coba di sini.

Penjelasan:

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
Kevin Cruijssen
sumber
0

Chaîne , 23 byte

{il1-R1+`} ~BOO!~ {<$/}
Conor O'Brien
sumber
-1

TeaScript, 30 byte

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

Sangat lurus ke depan.

Downgoat
sumber
-1

CJam, 19 byte

q_,mr)/(" ~BOO!~ "@
username.ak
sumber
Ini akan gagal saat mrmengembalikan 0atau 1, karena keduanya -1tidak 0valid untuk memisahkan string /.
Martin Ender
Maka harus)
username.ak
Sekarang dapat diletakkan BOOdi akhir string, Anda juga perlu (sebelumnya mr. Tapi itu identik dengan jawaban ini: codegolf.stackexchange.com/a/62355/8478
Martin Ender
Saya menggunakan q (membaca semua input, termasuk baris baru), ia menggunakan l (hanya membaca 1 baris)
username.ak
Oh oke, maka Anda harus menentukan bahwa kode Anda mengharapkan input untuk memiliki linefeed trailing (karena tidak harus memiliki satu, dalam hal ini qdan lsinonim).
Martin Ender