ジミーはロープを掛けることができますか?


18

彼の元の父によるさらに別のジミーの挑戦。これらの他の 素敵な チャレンジをご覧ください。


ご存知のように、最近、プラットフォーム上でジミーに関連する課題が発生しています。今、ジミーは私が前に述べたようにアクロバットであり、彼は彼の袖の上に他のトリックを持っています。

これらのトリックの1つは、ロープで吊るすことです。ジミーがぶら下がるロープの例を次に示します。

            ||
            ||
            ||
            ||
            ||
            ||

ジミーがロープにぶら下がると、次のようになります。

            ||
            ||
           /o\
            ||
            ||
            ||

彼はロープの左または右に掛けることができるので、これは:

            ||
            ||
            ||
            /o\
            ||
            ||

も有効です。しかし、彼はたった1つの体の部分だけでぶら下がることはできないので、次のようなものです。

            ||
            ||
            ||
          /o\|
            ||
            ||

無効です。彼が片方の身体の部分にぶら下がっているとき、ジミーはそれを隠さないので、ロープのもう半分が見えることに注意してください。

また、ジミーはロープの底にぶら下がるのが好きではありません-それは彼を怖がらせます-これは:

            ||
            ||
            ||
            ||
            ||
            /o\

無効です。

チャレンジ

上記のようなジミーの状況を入力し、ジミーがロープに固執するかどうかを、真実の値または偽の値で出力します。

詳細

  • 入力を受け取るプログラムを作成します。これは、関数または他の適切な入力メソッドを介して行うことができます。

    1. 入力は、上記の例のように、1つのジミーとロープのシーンである必要があります。
  • プログラムは、ジミーがロープに固執することができるかどうか、または彼がロープから脱落するかどうかに基づいて、それぞれ真実または偽の値をコンソールに出力する必要があります。

  • ジミーがロープにぶら下がることができる基準:

    1. 彼の体の部分の2つはロープの上にあります。

    2. 彼はロープの底にいない。

    3. 彼は空中に浮かんでいません。

  • ロープは真っ直ぐで、||セグメントで構成されており、高さが1文字より長いと仮定できます。

  • 1本のロープ全体と1本のジミーがシーンに存在することを想定できます。

  • ロープの下部に後続の改行がないと仮定できます。

  • ロープの前後に任意の量の先行または後続スペースをカバーする必要があります。

テストケース

           ||
           ||
           ||                 TRUTHY
           /o\
           ||
           ||


            ||
            ||
          /o\|                FALSY
            ||
            ||


        ||
       /o\                    TRUTHY
        ||


            ||
           /o\                FALSY


         /o\
          ||                  TRUTHY


            ||
            ||
       /o\  ||                FALSY
            ||
            ||

得点

これはであるため、約1週間後にバイト単位の最低スコアが勝ちます。

リーダーボード

この投稿のリーダーボードを表示するには、下のウィジェット/スニペットを展開します。投稿をランキングに含めるには# header text、次の情報を含むヘッダー()が必要です。

  • 言語の名前(カンマ,またはダッシュで終わる-)、その後に...

  • ヘッダーに表示される最後の数字としてのバイトカウント。

たとえば、JavaScript (ES6), 72 bytesは有効ですがFortran, 143 bytes (8-bit)、バイトカウントがヘッダーの最後の数字ではないため無効です(回答は8バイトとして認識されます-これを利用しないでください)。

<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github. -->    <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187759" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


1
ロープの前には常に同じ数のスペースがありますか、それとも変化しますか?
mprogrammer

@Maxwellそれは変わる可能性があります。
connectyourcharger

各行が個別の文字列であるリストのような入力を入力できますか、それとも単一の文字列である必要がありますか?
mprogrammer

19
ジミーは本当に休暇をとるべきです
ルイス・メンド

7
@LuisMendoジミーは彼の仕事に専念しています!
connectyourcharger

回答:


13

Japt、5バイト

私が考えるこれは正しいです。私は16時間まっすぐ働いていて、自分の名前をほとんど知らないので、そうでないとしても驚かないでしょう!

Õø|io

それを試してみてください

Õø|io     :Implicit input
Õ         :Transpose
 ø        :Contains?
  |io     :  "|" prepended with "o"

2
16時間?これ献身です!
connectyourcharger

2
5バイトを書き留めるのに16時間かかりましたか?;-)
カラブ

休憩が必要なようです(小さなジミーにも同じアドバイスがあります!)。
ihavenoidea

@connectyourcharger、いいえ、それが私の人生です!献身は休みなくそれをするでしょう。私がした!
シャギー

1
@ ihavenoidea、Pfft!死んだら寝る!
シャギー

22

Pythonの2又は3 33の  30バイト

-3 Maxwellに感謝

lambda l:'o'in map(max,l[:-1])

行のリストを受け入れる名前のない関数

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

どうやって?

一番下ではないジミーによって隠されたロープのセクションが必要です。

lambda l:'o'in map(max,l[:-1])
lambda l:                      # a function taking l (the lines as strings)
                       l[:-1]  # strip off the last line
               map(max,      ) # maximum of each line (where '|'>'o'>'\'>'/'>' ')
         'o'in                 # was 'o' one of them? (hence Jimmy obscured all the rope)

3バイトの保存:lambda l:'o'in map(max,l[:-1])
mprogrammer

ああ、非常に抜け目がない-ありがとう!
ジョナサンアラン

これはASCII値の非常に巧妙な使用法です。いいね
ファンドモニカの訴訟

16

Python 2、28バイト

lambda x:"o', '|"in`zip(*x)`

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

どのように機能しますか?入力を文字列のリストとして受け取り、zipが文字列を結合します。「|」がある場合、ジミーはロープに留まります 「o」の下にあるため、このコードはすべての行を結合し、「o」の後に「|」が続くかどうかを確認します。

注釈付きコード:

lambda x: # Creates an anonymous function that takes one argument
  "o', '|" # If this substring is in the zip object, then Jimmy's "o" is above a "|"
    in
    `    # Back quotes change the object into its string representation
    zip(*x)` # Joins the lines together

(旧回答)Python 2または3、39バイト

lambda x:1-all("|"in i for i in x[:-1])

入力を文字列のリストとして入力する関数。各文字列は異なる行です。

xnorのおかげで-11バイト!-ジョナサンアランのおかげで2バイト!

オンラインでお試しください!(さらにテストケースを試したい場合は、入力ボックスの各行セットの後に「。」を入力してください。)

これはどのように作動しますか?まあ、ジミーが完全にロープに乗っている場合、その行には「|」はありません 文字。したがって、各行をチェックでき、「|」のない行が見つかった場合 キャラクター、そしてジミーがロープにとどまることができることを知っています。ただし、ジミーはロープの底につかることはできません。そのため、チェックに最終行を含めません。最終行がロープの別の部分である場合、それは問題ではありません。有効な行がまだ上にあるためです。しかし、最終行がジミーの行である場合、行は見つかりません。 「|」なし どこでも、Falseを返します。


行に「/」があることを確認せずに実行できますか?
XNOR

@xnorうん!-11バイト
mprogrammer

1
:そのようなカップル保存lambda x:1-all("|"in i for i in x[:-1])
ジョナサン・アラン


1
@KlaymenDKこの関数は、xではなくx [:-1]を反復処理します。Pythonでは負のインデックスを使用できるため、x [:-1]は最終要素を除くリストのすべての要素です。したがって、ジミーがロープの底にいる場合、(正しく)偽の結果を返します。
プログラマー

8

ゼリー 9 7  6 バイト

Ṗ<”|ṀẠ

行のリストを受け入れる単項リンク

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

どうやって?

一番下ではないジミーによって隠されたロープのセクションが必要です。

Ṗ<”|ṀẠ - Main Link: list of lines of characters
Ṗ      - remove last line
  ”|   - pipe character
 <     - less than? (vectorises) - Note that all other characters are
    Ṁ  - maximum
     Ạ - all?

1
ジミーに関するこれらの課題を書くのはとても奇妙だと感じています。複数のジミーが同じロープからぶら下がっているのを想像すると、奇妙に感じ始めます。
connectyourcharger

1
@connectyourcharger予見ですか?
負の7

@negativesevenおそらく。私はすでに、すべてのジミーの投稿にインデックスを付けるメタコミュニティWikiを検討しています。
connectyourcharger

1
9バイトです。もう一度、誰かがどのように死ぬことができるかを調べます。
IMustBeSomeone

1
Note that all other characters are [less than '|']」?
アウトゴルファーのエリック

5

brainfuck、79 64バイト

>>+<<,[----------[<]>>[.-]+<[>-]+[---------<-->]<[<]>>[-]<[>]<,]

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

真実の場合は0x01バイトを出力し、偽の場合は何も出力しません。

Z: 0
A: input
B: 0
C: has no | been found on this line?

>>+<<                       initialize C to 1
,[                          loop over each char

  ----------                set A to 0 if input was \n
  [<]>>                     move to C if input was \n; B otherwise
  [                         if input was \n and C is true
    .-                      output 1
  ]

  +                         this will reinitialize C to 1 if input was \n
                            but also clobber B with 1 if it wasn't
                            now we have { 0   0   0  (1)} if input was \n;
                                        { 0   _  (1)  _ } otherwise
  <[>-]                     clear own cell if the one to the left is positive
                            this yields { 0   0  (0)  1 } and
                                        { 0   _  (0)  _ } as desired

  +[---------<-->]          set A to 0 if input was |
  <[<]>>                    move to C if input was |; B otherwise
  [-]                       zero out current cell: clears C if input was |
  <[>]<                     realign pointer onto A

,]                          break on end of input



4

05AB1E、5バイト

Çü%àθ

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

Ç         # convert the input to a 2D array of codepoints
 ü%       # pairwise modulo (vectorized)
   à      # maximum (*not* vectorized, returns a single number)
    θ     # tail (last digit)

入力に表示できる文字は\o/ |、それぞれのコードポイント92、111、47、32、124 のみです(入力を行の配列として選択したため、改行はありません)。これらの数値のうち2つをモジュロ化することで可能な結果は、0、13、15、17、19、28、30、32、45、47、92、111です。111は最大で、1で終わる唯一のもの、したがって、リストに111が存在する場合にのみ、コードは真実を出力します(05AB1Eでは1のみが真実です)。111は111(o)%124(|)であるため、入力にoa がある場合にのみ発生|します。


1
ペアワイズモジュロと非常にいい。
ケビンクルーッセン



2

JavaScript、39 33バイト

@Daniil Tutubalin、2バイトのゴルフをありがとう

x=>!!x.match(/^( *)\/[^|]*\n/m)

これは、彼の左腕が表示され、ロープが表示されないラインではない任意のラインに一致します。

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


彼がロープの一番下にいると失敗するようです
f –nɛtɪk

彼が一番下にいると失敗するはずですよね?なぜなら、ジミーはロープの底にいると倒れるからです
プログラマー

私がロープの一番下に彼を置いたとき、あなたの機能は何らかの理由で1を返しました
f –nɛtɪk

うーん、それでは気にしないで。
mprogrammer

1
どう/^ *.o. *\n/
tsh

2

///53 50バイト

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~.

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

///で入力を取得する他の方法がないため、ハードコードされています。

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~<INPUT HERE>.

説明:

一般的なアプローチは、ジミーを単項1に置き換え、危険にさらされているすべての状況から彼を削除することです。彼が生き残った場合、彼は出力されます。彼がそうしなければ、何もありません。~コード内での交換である//コードは、ここに3バイトだけ短くすることを可能にします。それらは説明から省略されています。

/{/\//
/}/\/\//

          {The top two lines allow me to leave comments without disturbing the code.}

/\/o\\/1/ {Replace Jimmy with a 1.}
/1 /1/    {Get rid of any spaces in front of Jimmy. This moves Jimmy towards the rope from the left.}
/ 1/1/    {Get rid of any spaces after Jimmy. This moves Jimmy towards the rope from the right.}

/|1//     {If Jimmy is touching the rope, remove him and the rope.}
/1|//     {This is based on the observation that in all cases where Jimmy is safe, there is no visible rope on his line.}


/|//      {Remove any remaining rope. If Jimmy was touching a rope, it's already too late for him.}
/1.//     {This handles the case where Jimmy is at the bottom of the rope (hence the period at the end).}


/ //      {The remaining lines clean up the output.}
/.//
/
//

           ||
           ||
           ||
           /o\
           ||.

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


2

Ruby 2.5.5、22バイト

->x{x.pop;!x.all? /\|/}

行の配列が必要です。これはArray#all?(pattern)追加された時点であるため、バージョン2.5.5以降が必要です。

入力は常にジミーとロープの有効なシーンであるという制約のため、最終行の前のいずれかの行にロープが隠れているかどうかに要約されます。




1

網膜、9バイト

m`^[^|]+^

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

今、私は以前にRetinaでプログラミングしたことがありませんが、この作品を伝えることができる限り。(1)入力の始まり、(2)「|」を含まない文字列を見つける正規表現です。文字、および(3)改行。

正規表現またはRetinaのいずれかに詳しい人は、提案をすることをお勧めします。-ニールのおかげで2バイト!


2つの選択肢:1)を削除します。\nこれは、新しい行がaではなく、|とにかく^一致するためであり、最終的には、実際に改行と一致することを確認するのに十分です。2)後続のピルクローを使用して\n、末尾を削除し^ます(複数行モードの改行の後は常に真であるため)。
ニール


1

Befunge-98(PyFunge)26 24バイト

]~:a-!#v_' `+
^_-3q#$<
@

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

\n最後の行に3つの非スペース文字が含まれていた場合、リターンコード3 で終了します。それ以外の場合は、EOFでリターンコード0で終了します。したがって、これは末尾の改行を含まない最後の行に依存します。

解剖

]~                     :a-!#v_                ' `+
 Read character,      Branch downwards if   Increment counter on 
 branch up (and        equal to 10 ('\n')   the stack if greater
 loop around) if                            than 32 (' ') and
 end of stream                              implicitly loop

^_-3q#$<                    <
 Return with code 3
 if counter is equal to 3,
 otherwise reset counter
 and return to beginning

@
 Return with exit
 code 0

1

05AB1E(レガシー)、6 バイト

ζJ„o|å

@ShaggyのJapt回答のポート。

行のリストとして入力します。

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

説明:

ζ       # Zip/transpose the (implicit) strings in the input-list, with space as filler
        # (NOTE: zip/transpose doesn't work on string-list in the new version of 05AB1E,
        #  which is why we use the legacy version)
 J      # Join these zipped/transposed lines together to a single string
  o  # And check if it contains the string "o|"
        # (after which the result is output implicitly)


1

エルム0.19、68バイト

f r=List.any(not<<String.contains"|")(List.take((List.length r)-1)r)

入力を行のリストとして受け取ります。最後の行を無視して、何も含まれていないかどうかをチェックします'|'。つまり、ロープがジミーによって完全に覆われていることを意味します。

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




0

パイレット、79バイト

{(l):all2({(r,n):string-char-at(n,string-index-of(r,"o") == "|")},l,link(0,l))}

行の配列を文字列として期待します。link(0,l)すべての行が1つ下にシフトしたコピーを作成します。各行を通過rし、nここで、nは、R下の行です。ジミーの体"o"が特定の位置にある場合、その下の列にパイプがあります(つまり、ジミーがロープにぶら下がっていて、下にない)。

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