アドバカドに関する挑戦


16

これに触発され。この挑戦の作成においてアボカドは害を受けませんでした。

こんにちは、私はアボカドのジュースを手伝う必要があるので、どのくらいの時間ジュークを主張するかを教えてくれるプログラムが必要です

このASCIIアートアボカドを観察します。

    ###### 
   #      #
   # #### #
  #  # p# #
  ## #### #
   #      #
    ######

このアボカドは、#sの外部(具体的には#各行のsの最初と最後のシーケンス)とピット(#アボカドの外部に触れないアボカドのsの形状)で構成されています。

これらのASCIIアートアボカドの厳密な実験を通して、私は次のことを発見しました。

avocado juice in fluid ounces = number of spaces inside avocado but outside pit (the pit is marked with a p in the example) + 2 * number of spaces inside pit

time to juice avocado in minutes = 13 * number of spaces inside pit

たとえば、このアボカドは、ジュースに26(ピット内に2スペース* 13)分かかり、23(アボカド内に19スペース+ピット内に2 * 2スペース)液量オンスを与えます。

チャレンジ

入力を考えると正確に一つだけで構成され、その上に1のようなアボカドASCIIアートを#し、空白文字、分単位で出力の時間、それはジュースにそれを取るだろうし、ジュースの量は、それがどのような順序で生成されます。

入力アボカドには常にちょうど1つのピットがあり、アボカドとピットの両方は常に閉じていると仮定できます。ピットとアボカドは常に接続され、ピットのサブセットも同様に接続されます。アボカドとピットは常に凸面になります。アボカドの外側は任意に太くすることができます。

サンプルの入力と出力

    ###### 
   #      #
   # #### #
  #  #  # # -> 26 23
  ## #### #
   #      #
    ######


   #######
  #       #
  #  ###   ##
  #  #  #   # -> 26 35
  #   ##   #
  #        #
  ##########

これはなので、バイト単位の最短コードが優先されます。


可能性のある重複した最大の部屋にいるあなたは?
メゴ

3
@Mego私はチャットで人々と話しましたが、アボカドのピットのためにそれが十分に異なると判断しました。
spaghetto

3
まだだましだと思う。
メゴ

1
@DigitalTrauma修正済み。
spaghetto

1
有効な入力のセットが何であるかはまだ非常に不明確に思えます。
-feersum

回答:


6

Pyth、59 51バイト

*Ksm/.s.s.sd\ \#\ \ fq4l:T"#+"4.z13+-/s.sR\ .zdK*2K

ここで試してみてください!

最初にadvacado(完全に正しい英語)をジュークする時間を出力し、次の行にジュークの量を出力します。

説明

コード-概要

* Ksm / .sssd \ \#\ \ fq4l:T "#+" 4.z13 +-/ s.sR \ .zdK * 2K#.z =すべての入力行のリスト

                    fq4l:T "#+" 4.z#ピットラインを取得
   m / .sssd \ \#\ \#ピットラインを空白の量にマッピングします
 Ks#ピットスペースの量を合計し、Kに割り当てる
* 13#ジューク時間を出力します
                                     /s.sR \ .zd#アドバカド内のすべての空白をカウントします
                                    -K#ピットサイズを減算する
                                   + * 2K#残りの金額計算を実行して印刷する


サイズ計算部分の詳細な説明は以下を参照してください。

アドバカドのサイズを取得する

これを見てみましょう:

    ###### 
   ##
   ######
  ####
  ## #####
   ##
    ######

最初に、先頭と末尾の空白が削除されます。その後、すべてを1行でラップして、次の文字列を作成します。

#######      ## #### ##  #  # ### #### ##      #######

これにはadvacadoのすべての空白が含まれているため、それらをカウントするだけです(advacadoは常に凸であるため、すべての有効な入力に対して機能します)。この数にはまだピット内のスペースが含まれていますが、ジューク量の計算には、ピットスペースなしのフルーツ内のスペースのみが必要です。したがって、それらも計算する必要があります。

そのためのコードは詳細に説明されています:

/s.sR \ .zd#.z =すべての入力行のリスト

  .sR \ .z#すべての入力行からスペースを削除
 s#すべての行を連結する
/ d#すべてのスペースを数える

ピットサイズを取得する

これは少し複雑です。最初に、ピットサイズに寄与しない行を削除します。これは、ハッシュのグループが4つ未満のすべての行を除外することで行われます(正規表現#+を使用して、その一致をカウントします)。上記の例では、このプロセスを生き残るのは1行のみです。

  #  #--# #

-ここでマークしたスペースは、カウントする必要があるスペースです。そのため、スペースを削除し、ハッシュを作成してからスペースを削除します。

#  #

そこで、スペースを数えるだけです。フィルタリングプロセスを生き残ったすべての行に対してすべてを行い、すべてを合計して完了です。残りは簡単な数学です。

そのためのコードは詳細に説明されています:

sm / .sssd \ \#\ \ fq4l:T "#+" 4.z#.z =すべての入力行のリスト

                  f .z#入力をフィルタリングする
                     l:T "#+" 4#正規表現 `#+`に一致する長さ
                   q4#ハッシュのグループが4つある場合、そのピットライン
 m#ピットラインをマッピングする...
  / \#のスペースの出現。
   .sssd \ \#\#...除去されたピットライン(上記の説明を参照)
s#ピット内のすべてのスペースの合計


5

網膜、70

  • @FryAmTheEggmanと@randomraのおかげで25バイト節約
T` `i`(?<=#+#+)*(?=#+ +#)
T` `f`#+#
私
13 $ * iff
((i)|(f)| \ W)+
$#2 $#3

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


1
知らん、それはお手伝いしますが、私が得た場合にはバイト90を使用して$*...まだ...本当にgolfableかかわらを感じている
FryAmTheEggman

2
@FryAmTheEggmanああ、リテラルを使用できます$*_か?それはすばらしい。私はなんとか70バイトを取得しました。
-randomra

1
@randomraええ、実際には任意の「トークン」を使用します。私は同様のスキームを考え出そうとしましたが、追加の解析を行う必要があり続け、再利用fは非常に賢いです!の右の「引数」が$*トークンではなくキャラクターにしかなれないのは残念ですが、多分将来の別の種類の代替品でしょうか?:0
FryAmTheEggman

@randomraとてもクール-ありがとう!
デジタル外傷

3

Python、 141 119バイト

import sys
s=str.strip;l=len;o=i=0
for x in sys.stdin:x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
print o+2*i,13*i

1
プログラミングパズルとコードゴルフへようこそ!で定義するss=str.strip、ループ本体はになりx=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))ます。また、最後の行には機能しないスペースがあります。
デニス

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