부드러운 대 chunky 대 깨진 스 퀴글


12

Chunky vs. Smooth Strings 기반 .

스 쿼글 /\_/\/\__/\/\/\/\_/\_/\은 심심할 때 키보드로 재미있게 만들 수 있습니다. 그러나 모든 구불 구불 한 것이 동일하게 만들어지는 것은 아닙니다. 일부 구불 구불 한은처럼 부드럽고 \___/일부는 구불 구불 /\/\/\/\합니다. 다른 사람들은 똑바로 깨졌습니다.////_\\\

구불 구불 한 N캐릭터 안에는 N-1구불 구불 한 정션이 있습니다. 각 스 퀴글 접합은 세 가지 유형 중 하나로 분류됩니다.

  • 부드럽게 (각도> "90도") :

    \_ __ _/

  • 땅딸막 한 (각도 = "90도")

    /\ \/

  • 고장 (연결되지 않은 것)

    // \\ /_ _\

하자가 정의 부드러움을 함께 부드러운 있습니다 접합의 비율로 chunkiness깨어진 유사하게 정의했다. 각 값의 범위는 0~ 사이 1입니다. 구불 구불 한 부드러움, 청크 및 파손의 합은 항상 1입니다.

예를 들어, squiggle /\/\\_//\_에는 3 개의 매끄러운 접합, 4 개의 청키 한 접합 및 2 개의 깨진 접합이 있습니다. 따라서 0.3333매끄럽고 0.4444두껍고 0.2222부러집니다.

하나의 문자 만있는 빈 문자열과 문자열에는 정의되지 않은 값이 있으며 모든 입력 길이는 2 자 이상입니다.

도전

임의 길이의 구불 구불 한 부분을 가져 와서 매끄러움, 청크 및 파손 값 중 두 가지를 출력하는 프로그램을 작성하십시오.

  • STDIN, 명령 행을 통한 입력 또는 문자열 인수로 프로그램 또는 함수를 작성할 수 있습니다.
  • 입력 길이가 2보다 크 거나 2 이상이고 /\_후행 줄 바꿈이 선택적인 문자로만 구성되어 있다고 가정 할 수 있습니다 .
  • 두 개의 부동 소수점을 반올림하거나 잘린 최소 4 자리의 정밀도로 인쇄하거나 함수로 반환합니다. 참값 인 경우 2/3, 허용 가능한 값은 사이 값을 포함 0.6666하고 0.6667, 심지어 같은 것들 0.666637104. 정확한 값이 1/3인 경우 포함 된 모든 답변 0.3333이 유효합니다. 후행 0을 생략하거나 값이 1보다 작은 경우 앞에 0을 남겨 둘 수 있습니다.
  • 원하는대로 세 개의 값 쌍을 출력하십시오. 두 값과 순서를 명시하십시오.

바이트 단위의 가장 짧은 코드가 이깁니다.

/\/\\/\//\\→ 부드러움 0, Chunkiness 0.7, 깨어진0.3

_/\\_/\\/__/\\\//_→ 부드러움 0.29411764705, Chunkiness 0.29411764705, 깨어진0.41176470588

//\\__/_\/→ 부드러움 0.3333333, Chunkiness 0.2222222, 깨어진0.4444444

보너스 질문 : 부드럽거나 뭉툭하거나 부서진 부스러기를 선호합니까?


세 가지를 모두 출력하면 보너스가 있습니까, 아니면 두 가지만 선택해야 할 특별한 이유가 있습니까?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@Callodacity 2는 1에 요약 이후 3를 정의하기에 충분
trichoplax

2
@trichoplax 좋은 지적-분명히 너무 오래 골프를했는데 더 이상 간단한 것을 이해할 수 없습니다 : P
Aᴄʜᴇʀᴏɴғᴀɪʟ

답변:


2

Pyth, 25 바이트

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

테스트 스위트

매끄러움, 청크 함을 출력합니다. 기본적으로 하드 코딩 된 문자열을 가져 와서 반으로 자릅니다. 각 반은 2 개의 문자 하위 문자열로 분해되며 입력에 대해서도 동일하게 수행됩니다. 우리는 교차로를 타고 남쪽과 땅딸막 한 쌍을 만듭니다. 그런 다음 길이를 가져 와서 페어 수로 나누고 인쇄합니다.


2

apt, 42 바이트

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

파손, 청춘을 출력합니다. 온라인으로 사용해보십시오!

작동 원리

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

비경쟁 버전, 36 바이트

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

몇 가지 사소한 변경으로 기본적으로 다른 방식과 동일하게 작동합니다.

  • ä이제 문자열에서 작동합니다. 문자는 순서대로 함수에 전달됩니다 (X, Y, X+Y).
  • è 문자열 / 배열에서 인수의 발생 횟수를 계산합니다.

1

파이썬 3, 149 바이트

부드러움과 두툼함을 출력합니다.

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)

언 골프 드 :

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

루비, 71

매끄러움, 청크 함을 출력합니다.

부드럽고 매끄럽지 않은 최소한의 문자열을 가져 와서 초기 문자열에서 모든 2 문자 문자열을 검색합니다.

8 바이트의 Kevin Lau 에게 감사 합니다!

->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]]}5 바이트를 절약합니다 x.chars.each_cons(2).count{|i|t[i*'']}. 이제 x.size함수에서 두 번 사용 하고 변수에 할당하고 사용하면 추가 바이트가 절약됩니다.
밸류 잉크

@KevinLau 접근 방식을 사용하여 8 바이트를 절약하도록 관리되었습니다. 감사!
아니 찰스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.