Smooth vs Chunky vs Broken Squiggles


12

Dựa trên Chunky vs Smooth Chuỗi .

Squiggles /\_/\/\__/\/\/\/\_/\_/\là thú vị để thực hiện trên bàn phím khi bạn thực sự chán. Nhưng không phải tất cả các squiggles được tạo ra bằng nhau. Một số squiggles là mịn, như \___/, và một số là chunky, thích /\/\/\/\. Những người khác hoàn toàn bị phá vỡ, như////_\\\

Bên trong mỗi squiggle của các Nnhân vật, có N-1các mối nối squiggle. Mỗi ngã ba squiggle được phân thành một trong ba loại:

  • Mịn (góc> "90 độ"):

    \_ __ _/

  • Chunky (góc = "90 độ")

    /\ \/

  • Bị hỏng (bất cứ điều gì không kết nối)

    // \\ /_ _\

Chúng ta hãy định nghĩa độ mịn là tỷ lệ của các mối nối trơn tru, với độ chụmgãy được xác định tương tự. Mỗi giá trị nằm trong khoảng giữa 01 . Tổng độ mịn, độ chụm và độ gãy của squiggle luôn bằng 1.

Ví dụ, squiggle /\/\\_//\_có 3 mối nối trơn tru, 4 mối nối chunky và 2 mối nối bị hỏng. Nó là do đó 0.3333mịn màng, 0.4444chunky, và 0.2222bị hỏng.

Chuỗi rỗng và chuỗi chỉ có một ký tự có giá trị không xác định, tất cả đầu vào sẽ dài ít nhất 2 ký tự.

Thử thách

Viết một chương trình có độ dài tùy ý và đưa ra bất kỳ hai giá trị độ mịn, độ chụm và độ vỡ của nó.

  • Bạn có thể viết chương trình hoặc hàm, với đầu vào thông qua STDIN, dòng lệnh hoặc dưới dạng đối số chuỗi.
  • Bạn có thể giả sử đầu vào có độ dài ít nhất > = 2 và chỉ bao gồm các ký tự /\_có dòng mới tùy chọn.
  • In (hoặc trả lại nếu một chức năng) hai phao đến độ chính xác ít nhất là 4 số thập phân, được làm tròn hoặc cắt ngắn. Nếu giá trị thực là 2/3, các giá trị có thể chấp nhận bao gồm bất kỳ giá trị nào giữa 0.66660.6667thậm chí những thứ như 0.666637104. Nếu giá trị chính xác là 1/3, bất kỳ câu trả lời có chứa 0.3333là hợp lệ. Bạn có thể bỏ các số 0 ở cuối hoặc số 0 đứng đầu nếu giá trị nhỏ hơn một.
  • Xuất ra bất kỳ cặp nào trong ba giá trị mà bạn thích, chỉ cần chắc chắn nói rõ hai và theo thứ tự nào.

Mã ngắn nhất tính bằng byte thắng.

Ví dụ

/\/\\/\//\\0Độ mịn 0.7, độ đục , độ vỡ0.3

_/\\_/\\/__/\\\//_0.29411764705Độ mịn 0.29411764705, độ đục , độ vỡ0.41176470588

//\\__/_\/0.3333333Độ mịn 0.2222222, độ đục , độ vỡ0.4444444

Câu hỏi thưởng: Bạn thích loại nào, mịn hay chunky hoặc bị hỏng squiggles?


Có thể có một phần thưởng cho đầu ra cả ba, hoặc bạn có một lý do cụ thể để chỉ chọn hai?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@Callodacity 2 là đủ để xác định thứ 3 vì chúng tổng hợp thành 1
trichoplax

2
@trichoplax điểm tốt - rõ ràng tôi đã chơi golf quá lâu, tôi không thể hiểu những điều đơn giản nữa: P
Aᴄʜᴇʀᴏɴғᴀɪʟ

Câu trả lời:


2

Bình thường, 25 byte

mcl@.:d2.:z2tlzc2"\__//\/

Bộ kiểm tra

Đầu ra mịn màng, chunk. Về cơ bản, nó lấy chuỗi mã hóa cứng và cắt nó làm đôi. Mỗi nửa được phân tách thành 2 chuỗi ký tự của nó, và điều tương tự được thực hiện cho đầu vào. Chúng tôi đi qua ngã tư, kết quả là các cặp phía nam và chunky. Sau đó, chúng tôi lấy chiều dài, chia cho số lượng cặp và in.


2

Japt, 42 byte

U=U¬ä@2+"\\/\\__/"bX+Y)f2};[T2]£U¬fX l /Ul

Đầu ra bị vỡ, chunkyness. Hãy thử trực tuyến!

Làm thế nào nó hoạt động

            // Implicit: U = input string
U=UŠ@   }  // Set U to U split into chars, with each pair mapped by this function:
"..."bX+Y)  // Take the index in this string of the two chars concatenated.
            // This is 0-1 for chunky, 2-4 for smooth, and -1 for broken.
2+    f2    // Add two and floor to the nearest multiple of 2.
            // This is now 2 for chunky, 4 or 6 for smooth, and 0 for broken.
[T2]£       // Map each item X in [0,2] through this function:
U¬fX l      //  Count the occurances of X in U.
/Ul         //  Divide by U.length.
            // Implicit: output last expression

Phiên bản không cạnh tranh, 36 byte

U=Uä@2+"\\/\\__/"bZ)f2};[T2]£UèX /Ul

Hoạt động về cơ bản giống như cách khác, với một vài thay đổi nhỏ:

  • äBây giờ hoạt động trên chuỗi. Các ký tự được truyền vào hàm theo thứ tự(X, Y, X+Y) .
  • è đếm số lần xuất hiện của đối số trong chuỗi / mảng.

1

Python 3, 149 byte

Điều này tạo ra sự mượt mà và chunkyness.

def f(s):
 for i in"012":s=s.replace("\_/"[int(i)],i)
 a=len(s)-1;t=["bscbssbbc"[int(s[i:i+2],3)]for i in range(a)]
 for x in"sc":print(t.count(x)/a)

Ung dung:

def f(s):
    for i in "012":
        s = s.replace("\_/"[int(i)], i)
    a = len(s) - 1
    t = []
    for i in range(a):
        t.append("bscbssbbc"[int(s[i:i+2],3)])
    for x in "sc":
        print(t.count(x) / a)

1

Ruby, 71

Đầu ra mịn màng, chunk.

Lấy các chuỗi mịn và chunky tối thiểu và tìm kiếm chúng cho mỗi chuỗi hai ký tự trong chuỗi ban đầu.

Cảm ơn Kevin Lau cho EIGHT byte!

->x{%w{\\__/ /\\/}.map{|t|(0..n=x.size-2).count{|i|t[x[i,2]]}/(n+1.0)}}

1
(0..x.size-2).count{|i|t[x[i,2]]}tiết kiệm hơn 5 byte x.chars.each_cons(2).count{|i|t[i*'']}. Và bây giờ bạn đang sử dụng x.sizehai lần trong hàm, gán nó cho một biến và sử dụng để tiết kiệm thêm một byte.
Mực giá trị

@KevinLau Quản lý để lưu 8 byte bằng cách sử dụng phương pháp của bạn. Cảm ơn!
Không phải Charles
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.