スムーズ対チャンキー対ブロークンスクイーグル


12

Chunky vs. Smooth Stringsに基づいています。

/\_/\/\__/\/\/\/\_/\_/\あなたが本当に退屈しているとき、波線はキーボードで作るのが楽しいです。しかし、すべての波線が平等に作成されるわけではありません。いくつかの波線はのよう\___/に滑らかで、いくつかはのようにずんぐりしてい/\/\/\/\ます。他のものはまったく壊れています////_\\\

Nキャラクターのあらゆる波線の中に、波線N-1ジャンクションがあります。各波型ジャンクションは、次の3つのタイプのいずれかに分類されます。

  • スムーズ(角度>「90度」):

    \_ __ _/

  • 分厚い(角度=「90度」)

    /\ \/

  • 壊れた(接続しないもの)

    // \\ /_ _\

レッツは、定義滑らかにし、滑らかで接合の割合であることをchunkiness壊れた同様に定義します。各値の範囲は01です。波線の滑らかさ、チャンクネス、および破損の合計は、常に1に等しくなります。

たとえば、波線に/\/\\_//\_は3つの滑らかなジャンクション、4つの分厚いジャンクション、2つの壊れたジャンクションがあります。このように0.3333滑らかで、0.4444分厚い、0.2222壊れています。

空の文字列と1文字のみの文字列には未定義の値があり、すべての入力は少なくとも2文字の長さになります。

チャレンジ

任意の長さの波線を取り込んで、その滑らかさ、チャンクネス、および破損の値のいずれか2つを出力するプログラムを作成します。

  • STDIN、コマンドライン、または文字列引数を介した入力を使用して、プログラムまたは関数を作成できます。
  • 入力は少なくとも長さ2以上で/\_、オプションの末尾改行を含む文字のみで構成れていると想定できます。
  • 2つの浮動小数点数を、小数点以下4桁以上で丸めまたは切り捨てて印刷(または関数の場合は戻り)します。真の値である場合は2/3、許容値は、いずれかの間の値が含ま0.66660.6667、のようにも物事を0.666637104。正確な値がの場合、1/3含む回答0.3333はすべて有効です。後続のゼロは省略できますが、値が1より小さい場合は、先行のゼロを省略できます。
  • 必要に応じて、3つの値の任意のペアを出力します。必ず、2つと順序を指定してください。

バイト単位の最短コードが優先されます。

/\/\\/\//\\→滑らかさ0、分厚さ0.7、破損0.3

_/\\_/\\/__/\\\//_→滑らかさ0.29411764705、分厚さ0.29411764705、破損0.41176470588

//\\__/_\/→滑らかさ0.3333333、分厚さ0.2222222、破損0.4444444

おまけの質問:なめらか、チャンキー、壊れた波線のどちらが好きですか?


3つすべてを出力することでボーナスがありますか、それとも2つだけを選択する特別な理由がありますか?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@Callodacity 2は、合計が1
trichoplax

2
@trichoplaxの良い点-明らかにゴルフが長すぎて、単純なことはもう理解できない:P
AP

回答:


2

Pyth、25バイト

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

テストスイート

滑らかさ、塊性を出力します。基本的に、ハードコードされた文字列を取り、半分にカットします。各半分は2文字の部分文字列に分解され、入力についても同じことが行われます。交差点を取得すると、南とチャンキーのペアになります。次に、長さを取得し、ペアの数で割り、印刷します。


2

Japt、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

Python 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バイトのケビン・ラウに感謝します!

->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、関数で2回使用し、変数に割り当てて使用すると、余分なバイトが節約されます。
バリューインク

@KevinLauアプローチを使用して8バイトを節約できました。ありがとう!
チャールズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.