Бу! Хеллоуин код гольф-вызов


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

Спасибо @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);

Достаточно просто - получить строку, вставить в нее подстроку, вывести строку. Выполнено.


Никогда не думал, что увижу GML на Codegolf.
Штефан Донал

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
@ Денис Бывший. Кавычки предназначены для предотвращения расширения оболочки и предотвращения обработки содержимого с пробелами как нескольких аргументов командной строки.
DLosc

1

Юлия, 70 байт

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 байт

{(-⌽' ~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

Витси, 19 байт

Обратите внимание, что zи Zбыли отредактированы сегодня, но не для этого вызова.

I1-R1 + \ i "~ OOB ~" zZ
I1 - получить длину ввода, минус 1
   R Нажмите случайное число от 0 до верхнего элемента стека.
    1+ Добавить один к нему - теперь это случайное число от 1 до ввода
                      длина - 1.
      Я получаю столько элементов ввода.
        "~ OOB ~" Нажмите '~ BOO ~' в стек.
                 Получите остальную часть ввода.
                  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!~ "));}}

Expanded:

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:

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

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

(смотрите комментарии, аргументы в порядке) static void Main(string[] x) {Console.Write(x[0].Insert (...) x[0].Length (...)сократит ваш код
Ян 'сплит' К.

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

Попробуй это здесь.

РЕДАКТИРОВАТЬ: только теперь чтение программы вместо функции / программы по умолчанию в описании задачи. Так что добавили bordercode с интерфейсом и основным методом.

Если бы функция была разрешена, это было бы ( 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в конце строки, вам также нужно( до этого mr. Но тогда он идентичен этому ответу: codegolf.stackexchange.com/a/62355/8478
Мартин Эндер

Я использую q (читает все вводные данные, включая перевод строки), он использует l (читает только 1 строку)
username.ak

Ну ладно, тогда вы должны указать, что ваш код ожидает, что ввод будет иметь завершающий перевод строки (потому что он не обязательно должен иметь один, в этом случае qи lявляется синонимом).
Мартин Эндер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.