Boo! Bir Cadılar Bayramı Kodu Golf Mücadelesi


15

Uzunluğunda 2 veya daha fazla karakterden oluşan bir giriş dizesi alan ve dizeyi ~BOO!~ (bu dizenin ön ve bitiş boşluğu vardır) her iki ucunda olmayan dizede eşit olarak rastgele bir noktaya ekleyen bir program yazın .


İzin verilmeyen örnek girişleri : 2veya (boş bir giriş)

İzin verilmeyen örnek çıkışları : Hello ~BOO!~ veya ~BOO!~ Hellogiriş içinHello

Örnek giriş :Hello, World!

Örnek çıktılar : Hel ~BOO!~ lo, World!veyaHello, Worl ~BOO!~ d!


Bu kod golf, beyler. Standart kurallar geçerlidir. Bayt cinsinden en kısa kod kazanır.


En kısa, en spooki programına sahip olduğu için Dennis'i tebrik ediyoruz ! Mutlu Cadılar Bayramı!


Bir komut satırı argümanı iyi olur mu, yoksa stdin mi olmalı?
DLosc

Değişiklikle girdi alan ve çıktı alan her şey kabul edilebilir. STDIN'i varsayılan olarak kullanıyorum çünkü aşina olduğum tek terim bu.
Arcturus

Yanıtlar:


6

Pyth, 19 18 bayt

j" ~BOO!~ "cz]OtUz

1 bayt golf için @ Jakube için teşekkürler!

Çevrimiçi deneyin.

Nasıl çalışır

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

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

Yeterince basit - bir dize alın, alt dizeyi içine yerleştirin, dizeyi çıkarın. Bitti.


Codegolf'ta GML göreceğimi hiç düşünmemiştim.
Steffan Donal

3

Python 3, 60 bayt

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

Not:

Modülo hash()ipin uzunluğu boyunca eşit olarak dağıtılacaktır. Kuralların büküldüğünü düşünüyorsanız, python'un karma randomizasyonu nedeniyle bunun aslında rastgele olduğunu unutmayın: aynı girişle tekrarlanan yürütmeler farklı sonuçlar verecektir.


2

CJam, 20 bayt

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

Çevrimiçi deneyin

Açıklama:

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 bayt

Komut satırından girdi alır. Girişte boşluk veya başka özel karakterler varsa, tırnak işaretleri içine alınması gerekir.

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

Açıklama:

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

Girişin tek bir komut satırı bağımsız değişkeni olarak geçirilmesi mi gerektiği, yoksa aslında Pip'e tırnak işaretleri iletmeniz mi gerekiyor?
Dennis

1
@Dennis Eski. Alıntılar kabuk genişlemesini önlemek ve boşlukları olan öğelerin birden fazla komut satırı argümanı olarak ele alınmasını önlemek içindir.
DLosc

1

Julia, 70 bayt

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

Ungolfed:

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

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

APL'nin bir ekleme işlevi yoktur, bu nedenle dizeyi döndürürüz.

{                          }    ⍝ 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'deki örnek giriş


1

Vitsy, 19 Bayt

Unutmayın zveZ bugün düzenlendi, ancak bu meydan okuma için değil.

I1-R1 + \ i "~ OOB ~" zZ
I1- Eksi 1 giriş uzunluğunu alın
   R 0'dan rastgele bir sayıyı yığının en üst öğesine itin.
    1+ Birini ekleyin - bu artık 1'den girişe rastgele bir sayıdır
                      uzunluk - 1.
      \ i Bu kadar girdi girdisi alın.
        "~ OOB ~" Yığına "~ BOO ~" itin.
                 z Girişin geri kalanını alın.
                  Z Hepsinden çıktı alın.

1

Lua, 75 bayt

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

1

Python 3, 79 bayt

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

Çevrimiçi deneyin

Oldukça açıklayıcı - bir dize okuyun, 1 ve dizenin uzunluğu arasında rastgele bir tamsayı seçin ve dizeyi ' ~BOO!~ 'eklenen ile yazdırın .


Benim çözüm tam . To harfi .
Arcturus

@Mego Programınızda rastgele bir <code> ~ BOO! ~ </code> gösterisi görmek oldukça ürkütücü.
Arcturus

Birden fazla argüman printboşlukla ayrılmış olarak yazdırıldığından boşlukları kesebilirsiniz print(s[:n],'~BOO!~',s[n:]).
xnor

1

Perl, 35 bayt

34 bayt kodu + 1 bayt komut satırı

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

Kullanımı:

perl -p entry.pl

1

C #, 125 bayt

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

Expanded:

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

Bu çözüm, dizenin ilk komut satırı parametresi olarak iletildiğini varsayar. Bu C # için normal değildir (stdin daha normaldir), bu yüzden normal stdin kullanan bir çözüm de ekledim:

C #, 139 bayt

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

Expanded:

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

(yorumlara bakın, argümanlar tamam) static void Main(string[] x) {Console.Write(x[0].Insert (...) x[0].Length (...)kodunuzu kısaltacak
Jan 'splite' K.

0

MATLAB, 69 bayt

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

MATLAB içinde belirli bir dizine orta bir dize eklemek baytlar açısından maliyetlidir. Bunu yapmanın basit bir yolu olsaydı, anonim bir işleve geçerek adil bir miktar biriktirebilirdim, ama bir tane bulamıyorum. Ah güzel.

Temel olarak, 1 ile dize eksi 1 uzunluğu arasında rastgele bir sayı alır. Ardından, bu dizine kadar olan ve bu dizini içeren her şeyi görüntüler, ardından ~Boo!~ve ardından dizinden sonuna kadar olan her şeyi görüntüler.


Ayrıca Octave ile de çalışır , böylece buradan çevrimiçi olarak deneyebilirsiniz .


0

Bash / GNU, 61 bayt

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

Girdi dizesini bağımsız değişken olarak alır



0

JavaScript, 79

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

Tarayıcı konsolu içindir; eğlenin sadece içinde haşhaş.


0

Java 8, 158156 bayt

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

Burada deneyin.

EDIT: Sadece şimdi okuma programı yerine varsayılan işlev / program meydan okuma açıklaması .. Yani arabirim ve ana yöntem ile sınır kodu ekledi.

Bir işleve izin verilirse, ( 99 95 bayt )

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

Burada deneyin.

Açıklama:

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 bayt

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

Çok düz ileri.


-1

CJam, 19 bayt

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

Bu, mrdöndürüldüğünde başarısız olur 0veya bir dizeyi bölmek için ne geçerli 1ne -1de 0geçerlidir /.
Martin Ender

O zaman olmalı)
username.ak

Şimdi BOOdizenin sonuna koyabilir , Daha (önce de ihtiyacınız olacak mr. Ama sonra bu cevapla aynı: codegolf.stackexchange.com/a/62355/8478
Martin Ender

Ben q (satırsonu dahil tüm girdileri okur), l (sadece 1 satır okur) kullanır
username.ak

Oh tamam, o zaman kodunuzun girdinin sondaki bir satır beslemesine sahip olmasını beklediğini belirtmelisiniz (çünkü mutlaka bir tane yoktur, bu durumda qve leşanlamlıdır).
Martin Ender
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.