何人のジミーを収容できますか?


29

、この単純だが楽しい挑戦、あなたはジミーが彼らのプラットフォームで落ちるかどうかを決定するように求めていました。ジミーは3体の部分を持っている/o\このように配置されました

/o\

プラットフォームはで表され-ます。ジミーは、プラットフォームの真上にない2つ以上の身体部分がある場合、プラットフォームから落下します。

いくつかの例:

   /o\
- -------

ジミーはすべての体の部分が体重以上であるためバランスを取り-ます。

   /o\
    ------   ---

2つの体の部分が-s を超えているため、ジミーはバランスを取ります。

 /o\
-- ----  --

ジミーは2つのプラットフォームに分割されていてもバランスを取ります

  /o\
   -

2つの体の部分がプラットフォームの上にないため、ジミーはバランスが取れません。


あなたの仕事は、-sとs(例えば文字列)だけを含む長さのあるコンテナとしてプラットフォームを取り、プラットフォーム上に配置できるジミーの数を出力するプログラムを書くことです。オーバーラップ。ジミーの体の一部は、弦の先頭の左側または弦の末尾の右側にあります。

これはので、回答はバイト単位でスコアリングされ、より少ないバイトが目標になります。

テストケース

入力

-  -  -

- -
--
-- --
----
- -- --
------- -

それぞれの出力

0
0
1
1
2
2
2
3

回答:


15

JavaScript(ES6)、 45 41  40バイト

@Shaggyのおかげで4バイト節約

s=>(0+s+0).split(/.--|-.-|--./).length-1

オンラインでお試しください!



7
@Shaggyありがとう!私はそこで何かが間違っていることを知っていましたが、その間に妻をスーパーマリオギャラクシーレベルで助けなければなりませんでした...そしてそれは壊れたプラットフォームに関する問題でもありました。:p
アーナルド

2
---私は私のポートに取り組んでいたまでは、どちらか私とよく座って、それらが必要ではないし、実現しませんでした。私はここでそれを1日と呼び、缶の袋をつかみ、SMGを自分で投げると思います-年齢でそれをプレイしていません。
シャギー

そして今、他のすべての答えは同じ正規表現を使用しています。
キュー

8

Python 2、53バイト

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

オンラインでお試しください!

Arnauldの正規表現に基づきます。2つ以上の重複しない長さ3のすべての部分文字列を貪欲に検索します-。トリックは`s`、入力文字列をパディングとして引用符で囲み、ジミーがどちらかの端でハングアップする余地を残すことです

/o\/o\
'----'

Python 2、57バイト

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

オンラインでお試しください!

既に引用符で囲まれた入力の安っぽいI / O形式が必要です。False0の出力。

ジミーを保持できる場合は最初の3文字の上にジミーを配置するか、そうでなければ最初の文字を削除することにより、各ジミーを許可された左端の位置に配置する再帰関数。かわいいトリックがいるかどうかを確認することであるs[:3]二つ以上が含まれている-ことにより、'--'in s[:3]*22つのコピー連結され、s[:3]隣接する2つのためのチェックを-



3

ジャプト、16バイト

ArnauldのオリジナルのJSソリューションに基づいています。入力の両側に必要なパディングを取得するためにいくつかの異なる方法を試しましたが、すべて同じ長さで入りました-まだ短い方法を探しています...

ûUÊÄÄ è".--|-."ê

試して

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g

3

Excel、96バイト

A1=プラットフォーム。配列数式として入力Ctrl+ Shift+Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))

3

05AB1E、16 バイト

ðì‚ε3ôʒ'-¢2@}g}à

間違いなくゴルフができる。;)

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)



2

Java 8、41バイト

s->(0+s+10).split(".--|--.|-.-").length-1

オンラインでお試しください。

@ArnauldのJavaScriptの答えことを除いて、+0ある+10ようにテストケースを修正します----。これはString#split、Java のビルトインがデフォルトで末尾の空の文字列を削除するために必要です。これはsplitビルトインに追加のパラメーターを追加することで変更できます(0デフォルトでは、split-builtinには単一のストリング引数があります)。この追加パラメーターの使用法をドキュメントから引用するには:

limitパラメーターは、パターンが適用される回数を制御するため、結果の配列の長さに影響します。
制限がある場合nされ、ゼロより大きい、パターンは最大で適用されます。n1 回、配列の長さは n、配列の最後のエントリには、最後に一致した区切り文字を超えるすべての入力が含まれます。
もしn正でない場合、パターンはできるだけ多く適用され、配列の長さは任意です。
もしnゼロの場合、パターンは可能な限り何度も適用され、配列の長さは任意で、末尾の空の文字列は破棄されます。

このため、通常.split("...",-1)すべての末尾の空の文字列を保持するために使用され、この回答にも使用できました(オンラインで試してみてください)。ただし、この場合、+0を変更すると、を+10介して2バイト節約され,-1ます。:)



0

、25バイト

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

Pθ↖

カーソルを動かさずにプラットフォームを印刷してから、カーソルを上下に動かします。これが最初のジミーの位置です。

Fθ

プラットフォームのポジションと同じ数のジミーを探してください。

¿›№KM-¹

この位置に複数のプラットフォームがあるかどうかを確認します。

«⊞υω

もしそうなら、有効なジミーの位置に注意してください...

M³→»

...ジミーが重ならないように3文字を右に移動します。

それ以外の場合、次の潜在的なジミーの位置は1文字右です。

⎚ILυ

プラットフォームをクリアし、検出された位置の数を出力します。



0

エルム0.19、108バイト

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

ArnauldのJavaScript 回答の正規表現に基づいていますここですべてのテストケースを確認します

171バイトでかなり長い、正規表現を使用しない代替ソリューション:

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

ここですべてのテストケースを確認します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.