Boo! การแข่งขันกอล์ฟรหัสฮัลโลวีน


15

เขียนโปรแกรมที่รับสายป้อนข้อมูลที่มีความยาว 2 ตัวอักษรขึ้นไปและเพิ่มสตริง ~BOO!~ (สตริงนั้นมีพื้นที่นำหน้าและส่วนท้าย) ในจุดสุ่มที่สม่ำเสมอในสตริงที่ไม่ได้อยู่ที่ปลายทั้งสอง


ตัวอย่างอินพุตที่ไม่อนุญาต : 2หรือ (อินพุตว่าง)

ตัวอย่างผลลัพธ์ที่ไม่อนุญาต : Hello ~BOO!~ หรือ ~BOO!~ HelloสำหรับอินพุตHello

ตัวอย่างอินพุต :Hello, World!

ตัวอย่างผลลัพธ์ : Hel ~BOO!~ lo, World!หรือHello, Worl ~BOO!~ d!


นี่คือรหัสกอล์ฟ, fellas ใช้กฎมาตรฐาน รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


ขอแสดงความยินดีกับเดนนิสที่มีโปรแกรมที่สั้นและน่ากลัวที่สุด! สุขสันต์วันฮาโลวีน!


อาร์กิวเมนต์บรรทัดคำสั่งจะใช้ได้หรือไม่หรือต้องเป็น stdin
DLosc

สิ่งใดก็ตามที่รับอินพุตและพิมพ์เอาต์พุตที่มีการแก้ไขจะยอมรับได้ ฉันใช้ STDIN เป็นค่าเริ่มต้นเพราะเป็นคำศัพท์เดียวที่ฉันคุ้นเคย
Arcturus

คำตอบ:


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
Steffan Donal

3

Python 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

Pip, 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 อดีต คำพูดคือเพื่อป้องกันการขยายตัวของเปลือกและเพื่อป้องกันสิ่งที่มีช่องว่างจากการได้รับการปฏิบัติเป็น args บรรทัดคำสั่งหลายรายการ
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

Vitsy, 19 ไบต์

โปรดทราบว่าzและZถูกแก้ไขในวันนี้ แต่ไม่ใช่สำหรับความท้าทายนี้

I1-R1 + \ i "~ OOB ~" zZ
I1- รับความยาวของอินพุตลบ 1
   R ดันตัวเลขสุ่มจาก 0 ถึงรายการด้านบนของสแต็ก
    1+ เพิ่มเข้าไป - ตอนนี้เป็นตัวเลขสุ่มจาก 1 ถึงอินพุต
                      ความยาว - 1
      \ i รับอินพุตหลายรายการ
        "~ OOB ~" กด '~ BOO ~' ไปยังสแต็ก
                 รับส่วนที่เหลือของอินพุต
                  เอาท์พุทมันทั้งหมด


1

Python 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

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!~และจากนั้นทุกอย่างหลังจากดัชนีไปยังจุดสิ้นสุด


นอกจากนี้ยังทำงานร่วมกับคู่เพื่อให้คุณสามารถลองออนไลน์ที่นี่




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 /
Martin Ender

ต้องเป็น)
username.ak

ตอนนี้ก็สามารถใส่BOOในตอนท้ายของสตริงนอกจากนี้คุณยังจะต้องมีก่อน( mrแต่มันก็เหมือนกับคำตอบนี้: codegolf.stackexchange.com/a/62355/8478
Martin Ender

ฉันใช้ q (อ่านอินพุตทั้งหมดรวมถึงบรรทัดใหม่) เขาใช้ l (อ่านเพียง 1 บรรทัด)
username.ak

โอเคคุณควรระบุว่ารหัสของคุณคาดว่าอินพุตจะมีตัวป้อนบรรทัดต่อท้าย (เพราะไม่จำเป็นต้องมีหนึ่งรายการในกรณีนี้qและlมีความหมายเหมือนกัน)
Martin Ender
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.