우우! 할로윈 코드 골프 도전


15

길이가 2 자 이상인 입력 문자열을 사용 하고 양쪽 끝에 있지 않은 문자열 ~BOO!~ 균일 한 임의의 지점에 문자열 (앞에 공백과 끝 공백이있는 문자열)을 추가하는 프로그램을 작성하십시오 .


허용되지 않는 샘플 입력 : 2또는 (빈 입력)

허용되지 않는 샘플 출력 : Hello ~BOO!~ 또는 ~BOO!~ Hello입력Hello

샘플 입력 :Hello, World!

샘플 출력 : Hel ~BOO!~ lo, World!또는Hello, Worl ~BOO!~ d!


이것은 코드 골프입니다. 표준 규칙이 적용됩니다. 바이트 단위의 짧은 코드가 이깁니다.


가장 짧고 가장 신기한 프로그램 으로 데니스 에게 축하를 전합니다 ! 해피 할로윈!


명령 줄 인수가 문제가되지 않습니까, 아니면 stdin해야합니까?
DLosc

입력을 받아서 수정 한 출력을 인쇄하는 것은 허용됩니다. STDIN은 내가 알고있는 유일한 용어이기 때문에 기본적으로 사용합니다.
Arcturus

답변:


6

Pyth, 19 18 바이트

j" ~BOO!~ "cz]OtUz

1 바이트로 골프를 해준 @Jakube에게 감사드립니다!

온라인으로 사용해보십시오.

작동 원리

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

충분히 간단합니다-문자열을 가져 와서 하위 문자열을 삽입하고 문자열을 출력하십시오. 끝난.


codegolf에서 GML을 볼 수 있다고 생각하지 않았습니다.
Steffan Donal

3

파이썬 3, 60 바이트

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

노트 :

모듈러스 hash()는 스트링의 길이에 걸쳐 균일하게 분포 될 것이다. 그것이 규칙을 구부린다 고 생각한다면, 파이썬의 해시 무작위 화로 인해 이것은 실제로 무작위입니다. 동일한 입력으로 반복 실행하면 다른 결과가 나타납니다.


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에 따옴표를 전달해야합니까?
Dennis

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에서 입력까지의 난수입니다.
                      길이-1.
      \ i 많은 입력 항목을 가져옵니다.
        "~ OOB ~"스택에 '~ BOO ~'를 밉니다.
                 z 나머지 입력을받습니다.
                  Z 모두 출력합니다.

1

루아, 75 바이트

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

1

파이썬 3, 79 바이트

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

온라인으로 사용해보십시오

매우 자명 한 설명-문자열을 읽고 1과 문자열 길이 사이의 임의의 정수를 선택한 다음 ' ~BOO!~ '삽입 하여 문자열을 인쇄하십시오 .


내 솔루션은 정확히 . 받는 편지 .
Arcturus

@Mego 프로그램에 임의의 <code> ~ BOO! ~ </ code>가 표시되는 것은 꽤 짜증납니다.
Arcturus

print공백으로 여러 개의 인수를 인쇄하므로을 사용하여 공백을자를 수 있습니다 print(s[:n],'~BOO!~',s[n:]).
xnor

1

펄, 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

배쉬 / GNU, 61 바이트

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

입력 문자열을 인수로 사용



0

자바 스크립트, 79

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

브라우저 콘솔 용입니다. 그냥 터지는 재미가 있습니다.


0

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

여기에서 시도하십시오.

편집 : 지금 도전 설명에서 기본 기능 / 프로그램 대신 프로그램을 읽고 만. 그래서 인터페이스와 주요 방법으로 국경 코드를 추가했습니다.

함수가 허용되면 ( 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

티 스크립트, 30 바이트

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

매우 직설적입니다.


-1

CJam, 19 바이트

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

이 때 실패합니다 mr반환 0또는 1둘 다 있기 때문에, -10분할 문자열을위한 유효하지 않습니다 /.
Martin Ender

그런 다음)이어야합니다.
username.ak

이제 BOO문자열 끝에 넣을 수 있습니다 . (before 가 필요합니다 mr. 그러나 다음 답변과 동일합니다 : codegolf.stackexchange.com/a/62355/8478
Martin Ender

나는 q (개행을 포함한 모든 입력을 읽음)를 사용하고, l (한 줄만 읽음)을 사용합니다
username.ak

좋아 아, 당신은 당신의 코드가 (이 반드시 하나를 가지고 있지 않기 때문에이 경우, 입력이 뒤에 줄 바꿈이 예상 지정해야 ql동의어이다).
Martin Ender
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.