Бу! Challenge Golf Halloween Code Challenge


15

Напишіть програму, яка приймає рядок вводу довжиною 2 або більше символів і додає рядок ~BOO!~ (цей рядок має провідний і закінчуючий пробіл) в рівномірно випадковому місці в рядку, який не знаходиться ні на одному кінці.


Заборонені вибіркові введення : 2або (порожній вхід)

Заборонені вибіркові виходи : Hello ~BOO!~ або ~BOO!~ Helloдля введенняHello

Зразок введення :Hello, World!

Вибіркові виходи : Hel ~BOO!~ lo, World!абоHello, Worl ~BOO!~ d!


Це код гольфу, хлопців. Діють стандартні правила. Виграє найкоротший код у байтах.


Вітаємо Денніса за найкоротшу, найгучнішу програму! Веселого Хелоуіну!


Чи буде добре аргумент командного рядка, чи він повинен бути stdin?
DLosc

Все, що бере вхід і друкує, що виводиться з модифікацією, є прийнятним. Я використовую STDIN за замовчуванням, тому що це єдиний термін, з яким я знайомий.
Арктур

Відповіді:


6

Піт, 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 на кодегольфі.
Steffan Donal

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
@Dennis Колишній. Цитати повинні запобігати розширенню оболонки та запобігання трактуванню матеріалів із пробілами як декількох аргументів командного рядка.
DLosc

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

Віци, 19 байт

Зверніть увагу , що zі Zбули відредаговані сьогодні, але не для цього завдання.

I1-R1 + \ i "~ OOB ~" zZ
I1- Отримайте довжину введення, мінус 1
   R Натисніть випадкове число від 0 до верхнього елемента стека.
    1+ Додати до нього - це тепер випадкове число від 1 до введення
                      довжина - 1.
      \ i Отримайте так багато елементів введення.
        "~ OOB ~" Push '~ BOO ~' до стеку.
                 z Отримайте решту вводу.
                  Z Виведіть все це.


1

Пітон 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!~ "));}}

Розширено:

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

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

Спробуйте тут.

EDIT: Тільки тепер програма читання замість функції / програми за замовчуванням в описі виклику. Тож додали код кордону з інтерфейсом та основним методом.

Якщо функція буде дозволена, вона буде ( 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.