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é -10sono 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.