Boo! Una sfida di golf con codice di Halloween


15

Scrivi un programma che accetta una stringa di input di lunghezza 2 o più caratteri e aggiunge la stringa ~BOO!~ (quella stringa ha uno spazio iniziale e finale) in un punto uniformemente casuale nella stringa che non si trova su nessuna delle due estremità.


Input di esempio non consentiti : 2oppure (input vuoto)

Output di esempio non consentiti : Hello ~BOO!~ o ~BOO!~ Helloper l'inputHello

Input di esempio :Hello, World!

Output di esempio : Hel ~BOO!~ lo, World!oHello, Worl ~BOO!~ d!


Questo è il codice golf, ragazzi. Si applicano le regole standard. Vince il codice più breve in byte.


Congratulazioni a Dennis per avere il programma più breve e spaventoso! Felice Halloween!


Un argomento da riga di comando va bene o deve essere stdin?
— DLosc,

Tutto ciò che accetta un input e lo stampa con la modifica è accettabile. Uso STDIN di default perché è l'unico termine con cui ho familiarità.
— Arturo il

Risposte:


6

Pyth, 19 18 byte

j" ~BOO!~ "cz]OtUz

Grazie a @Jakube per giocare a golf a 1 byte!

Provalo online.

Come funziona

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

Abbastanza semplice: ottieni una stringa, inserisci la sottostringa al suo interno, genera la stringa. Fatto.


Non avrei mai pensato di vedere GML su codegolf.
— Steffan Donal,

3

Python 3, 60 byte

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

Nota:

Il modulo di hash()sarà distribuito uniformemente sulla lunghezza della stringa. Se pensi che questo stia piegando le regole, nota che a causa della randomizzazione dell'hash di Python, questo è in realtà casuale: esecuzioni ripetute con lo stesso input daranno risultati diversi.


2

CJam, 20 byte

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

Provalo online

Spiegazione:

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

Riceve input dalla riga di comando. Se l'input ha spazi o altri caratteri speciali, dovrà essere inserito tra virgolette.

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

Spiegazione:

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

Vuoi dire che l'input deve essere passato come un singolo argomento della riga di comando o devi effettivamente passare le virgolette a Pip?
— Dennis,

1
@Dennis Il primo. Le virgolette servono per impedire l'espansione della shell e per impedire che roba con spazi venga trattata come argomenti multipli da riga di comando.
— DLosc,

1

Julia, 70 byte

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 byte

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

APL non ha una funzione di inserimento, quindi ruotiamo la stringa.

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

Esempio di input su TryAPL


1

Vitsy, 19 byte

Si noti che ze Zsono state pubblicate oggi, ma non per questa sfida.

I1-R1 + \ i "~ OOB ~" zZ
I1- Ottieni la lunghezza dell'input, meno 1
   R Spingere un numero casuale da 0 all'elemento in cima alla pila.
    1+ Aggiungine uno: questo è ora un numero casuale da 1 a input
                      lunghezza - 1.
      \ i Ottieni così tanti elementi di input.
        "~ OOB ~" Premi '~ BOO ~' nello stack.
                 z Ottieni il resto dell'input.
                  Z Emette tutto.

1

Lua, 75 byte

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

1

Python 3, 79 byte

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

Provalo online

Abbastanza autoesplicativo: leggi una stringa, scegli un numero intero casuale compreso tra 1 e la lunghezza della stringa e stampa la stringa con ' ~BOO!~ 'inserito.


La mia soluzione esattamente . Per la lettera .
— Arturo il

@Mego Vedere un <code> ~ BOO! ~ </code> casuale mostrato nel tuo programma è piuttosto spaventoso.
— Arturo il

Poiché più argomenti da printstampare vengono separati da spazi, è possibile tagliare gli spazi con print(s[:n],'~BOO!~',s[n:]).
— xnor

1

Perl, 35 byte

Codice 34 byte + riga comandi 1 byte

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

Uso:

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

Allargato:

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

Questa soluzione presuppone che la stringa sia passata come primo parametro della riga di comando. Questo non è normale per C # (stdin è più normale), quindi ho incluso anche una soluzione che utilizza stdin normale:

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

Allargato:

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

(vedi commenti, gli argomenti sono ok) static void Main(string[] x) {Console.Write(x[0].Insert (...) x[0].Length (...)abbrevia il tuo codice
— Jan 'splite' K.

0

MATLAB, 69 byte

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

Inserire una stringa a metà stringa in un determinato indice in MATLAB è costoso in termini di byte. Se ci fosse un modo semplice per farlo, potrei risparmiare un bel po 'passando a una funzione anonima, ma non riesco a trovarne uno. Ah bene.

Fondamentalmente ottiene un numero casuale compreso tra 1 e la lunghezza della stringa meno 1. Quindi visualizza tutto fino all'indice incluso, seguito da ~Boo!~, quindi tutto dopo l'indice fino alla fine.


Funziona anche con Octave , quindi puoi provarlo online qui .


0

Bash / GNU, 61 byte

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

Accetta la stringa di input come argomento



0

JavaScript, 79

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

È per la console del browser; divertiti a farlo scoppiare.


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

Provalo qui.

EDIT: Solo ora legge il programma anziché la funzione / programma predefinito nella descrizione della sfida. Quindi ha aggiunto il codice di bordo con interfaccia e metodo principale.

Se una funzione fosse consentita sarebbe ( 99 95 byte )

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

Provalo qui.

Spiegazione:

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)

Molto semplice.


-1

CJam, 19 byte

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

Questo fallirà quando mrritorna 0o 1, perché né -1né 0sono validi per dividere una stringa con /.
— Martin Ender,

Quindi deve essere)
— username.ak il

Ora può essere inserito BOOalla fine della stringa. Avresti anche bisogno di un (prima mr. Ma poi è identico a questa risposta: codegolf.stackexchange.com/a/62355/8478
— Martin Ender,

Io uso q (legge tutti gli input, incluso newline), usa l (legge solo 1 riga)
— username.ak

Oh okay, allora dovresti specificare che il tuo codice si aspetta che l'input abbia un avanzamento riga finale (perché non ne ha necessariamente uno, nel qual caso qe lsono anche sinonimi).
— Martin Ender,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.