あなたの質問は何でしたか?


19

前書き

退屈なテキストが与えられたら、できるだけ早くそれを乗り越えたいだけです。次のテキストを見てみましょう。

Ens colligi timenda etc priorem judicem. De quascunque ii at contingere 
repugnaret explicetur intellectu. Adjuvetis hoc fortassis suspicari opportune 
obversari vix eam? Dei praemia prudens hominum iii constet requiri haberem. Ima 
sane nemo modi fuit lus pro dem haud. Vestro age negare tactum hoc cui lor. Ne et 
ut quod id soli soni deus. At constare innumera is occurret ea. Nia calebat seu 
acquiro fraudem effingo dicimus.

注:このテキストには読みやすいように改行がありますが、処理する必要があるテストケースには改行文字はありません。

テキストを読み飛ばす1つの方法は、ライターがテキストに入れた質問を見つけることです。たとえば、上記のテキストには1つの質問があります。すなわち:

Adjuvetis hoc fortassis suspicari opportune obversari vix eam?

これは、テキストを文に分割することで実行できます。文は常に次の句読記号のいずれかで終わります:(.?!他の記号を処理する必要はありません)。これら以外の記号は文の一部です。


タスク

のみで構成されるテキスト行が与えられた

  • 文字(A-Za-z)
  • 数字(0-9)
  • スペース
  • 句読点(,.;:?!(これらのいずれかで文を開始することはできません)。

テキスト内の質問を適切な形式で出力します。テキストには常に少なくとも1つの質問があると仮定できます。末尾の出力と質問の前後にスペース先行スペースをできます。

重要句読記号の隣に、別の句読記号はありません(例:??、無効であり、処理する必要はありません)。


テストケース

次の形式で:

Input
Output(s)

テストケース:

Huh? I haven't heard what you just said. Could you repeat that please?
Huh?
Could you repeat that please?

plz can i haz cheesburgr? i am cat pls.
plz can i haz cheesburgr?

This is a badly formatted question.Can u please help me,or my friends,with formatting this question    ?thankyou.
Can u please help me,or my friends,with formatting this question    ?

a.b.c.d?
d?

Does this question have a question mark? yes
Does this question have a question mark?

Why example.com resolves to 127.0.0.1 in 99.9 percent of cases?
9 percent of cases?

A? b? c? d!
A?
b?
c?

これはであるため、バイト数が最小の提出が勝ちです!


2
.?!その他はいけません、あなたのルールを指定して、処理することができますが、他の人が言っている必要はありません処理します。
エリックアウトゴルファー

複数の質問があるテストケースはありませんか?
edc65

@ edc65最初のテストケースには2つの質問がありますが、別のテストケースを追加します。
アドナン

回答:



5

Python、46バイト

import re
f=lambda s:re.findall("[^!?.]*\?",s)

で呼び出す:

f("your string here")

テストの出力:

['Can u please help me,or my friends,with formatting this question    ?', 'Can u please help me,or my friends,with formatting this question    ?', ' Huh?', ' Could you repeat that please?', ' plz can i haz cheesburgr?', 'd?', 'Does this question have a question mark?', '9 percent of cases?', 'A?', ' b?', ' c?']

別のアイデア、77バイト(python3では、フィルターの周りのリストが必要です):

import re
f=lambda s:filter(lambda x:x[-1]=="?",re.split("(?<=[\.\?!]).",s)))

私はこれが初めてなので、これはおそらくもっと短いかもしれません。

-17(!)バイトはMartinのおかげです

-「!」、「?」ではないものに一致させることで2バイト または「。」(シェルソリューションに近づきますが、もっと節約できるとは思えません)


1
プログラミングパズルとコードゴルフへようこそ!非常に良い最初の答え:)。
アドナン

私はあなたが後ろ読みをする必要はまったくないと思いますし、欲求不満をする必要もありません[\w,:; ]*(そのグループは句読点を通り抜けることができないので)、そして.あなたはあなたの入力に追加する必要もありません。また、残りの文字クラスをに短縮し[^.!?]ます。
マーティンエンダー

ありがとう、マーティン!私はこれを少し試してみましたが、明らかなものは見ませんでした。
カールカストール

4

JavaScript、35 24バイト

a=>a.match(/[^.?!]*\?/g)

、、または(またはテキストの先頭)の後に始まり、a .で終わるすべての部分文字列を返します。?!?


ほら そして、私は40バイトでうまくやったと思った。グッドジョブOPと@MartinEnder
MayorMonty

3

V、12バイト

Í[^.!?]*[.!]

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

非常に簡単な答え。

Í             "Remove every occurrence, on every line
 [^.!?]       "Of any character that isn't '.', '!', or '?'
       *      "Repeated any number of times
        [.!]  "Followed by a a '.' or a '!'

ありがたいことに、改行の処理、またはすべてのテストケースの検証は、バイトを追加しません。


3

28バイトですね。(16 UTF-8文字)
ファビオIotti

6
@ bruce965 Jellyは、それぞれがシングルバイトとして認識する256文字のそれぞれをエンコードするカスタムコードページを使用します。ヘッダーのバイトリンクはそれを指します。
デニス

かっこいい、イケてる!私はまだコードゴルファーではないので、このトリックに気付いていません。質問を申し訳ありません。
ファビオイオッティ

4
@ bruce965記録にとって、それは本当にトリックではありません:言語はISO 8859-1(または他の既存のシングルバイトエンコーディング)を同様に使用でき、同様に強力ですが、カスタムコードページを使用するとより多くを使用できますたとえば、制御文字を使用してコーディングする必要がある場合よりも、簡単に入力可能な文字とニーモニック。結局のところ、これは単なるバイトのストリームであり、すべてのバイトに何らかの意味が割り当てられています。
マーティンエンダー

2
OK、「トリック」は悪い意味合いで聞こえたかもしれません、私は「戦略」または何かを言ったはずです。「トリック」よりも良い言葉を見つけることができませんでした。
ファビオイオッティ

3

シェルユーティリティ、 43 38バイト

5バイトをトリミングしてくれたrexkogitansに感謝します!

tr ? "\n"|sed "s/.*[\.!]//;s/.\+/&?/"

次のようなパイプ入力:

echo Huh? I haven't heard what you just said. Could you repeat that please?|tr ? "\n"|sed "s/.*[\.!]//;s/.\+/&?/"

問題があれば、私は使用しています:

  • GNU tr5.3.0
  • GNU sed4.2.1
  • Microsoftのcmd.exe、Windows 5.1.2600に付属

  • 1
    以前に複数のユーティリティを使用して回答を送信したことがないため、何か間違ったことをしている場合はお知らせください。
    ジョー

    GNUユーティリティーのWindowsバージョンを使用しますか、それともWindowsのシェルを使用しますか?
    エリックアウトゴルファー

    tr ? "\n"|sed "s/.*[\.!]//;s/.\+/&?/"5バイトを保存します(2つが追加されtr、7つが保存されますsed-これはbashでテストされました)。/g行ごとに処理されるため、必要ありません。
    rexkogitans

    @EʀɪᴋᴛʜᴇGᴏʟғᴇʀ、GNUユーティリティのWindowsポートを使用しています。
    ジョー

    @rexkogitans、ありがとう!私は忘れました[]。それをする私の最初の試みはのように見えました\(\.|!\)
    ジョー


    2

    Ruby 1.9、17バイト

    $_=$F
    

    次のコマンドラインオプションで呼び出す必要がある5バイトのプログラム:

    paF[^?]*[.!]
    

    Rubyのフラグがこのような方法で格闘できるとは知りませんでした、+ 1!しかし、連続した質問はその配列内の1つの文字列として一緒になり、他の質問は別々になりますので、ちょっと奇妙に感じますか?Ruby 1.9の気まぐれがない限り、私は知らない。
    値のインク

    @ValueInk配列の内容は連結されるため、プログラムは配列リテラルではなく単一の文字列を出力します。golf.shinh.org/check.rbで試してみることができますruby 1.9があるでます。フラグはシバングで設定できます。
    xsot

    ああ、2.0以降の1.9が実際の配列のように出力される理由を説明しています。
    値インク

    1

    バッチ、174バイト

    @echo off
    set/ps=
    set t=
    :l
    set c=%s:~0,1%
    set t=%t%%c%
    if "%c%"=="?" echo %t%&set t=
    if "%c%"=="!" set t=
    if "%c%"=="." set t=
    set s=%s~1%
    if not "%s%"=="" goto l
    

    STDINからの行の読み取りは、を使用するよりも1バイト短くなりset s=%*ます。


    1

    PowerShell v4 +、43バイト

    ([regex]::Matches($args,'[^?!.]*\?')).Value
    

    本当に簡単です。入力を受け取り$args、それを.NETへの最初のパラメーターとしてフィードします[regex]::Matches(...)静的関数。一致する正規表現[^?!.]*\?は、つまり、疑問符が後に続く任意の数の文末でない文字です。静的関数は、キャプチャグループ、インデックスなどの詳細を示すオブジェクトの配列を返しますが、.Values のみが必要なので、戻り値は括弧でカプセル化され、そのプロパティを呼び出します。これは、以前のバージョンではループ|%{$_.Value}|Select Value適切なプロパティを取得します。

    括弧なしの例と .Value

    PS C:\Tools\Scripts\golfing> .\what-exactly-was-your-question.ps1 "Huh? I haven't heard what you just said! Could you repeat that please?"
    
    Groups   : {Huh?}
    Success  : True
    Captures : {Huh?}
    Index    : 0
    Length   : 4
    Value    : Huh?
    
    Groups   : { Could you repeat that please?}
    Success  : True
    Captures : { Could you repeat that please?}
    Index    : 40
    Length   : 30
    Value    :  Could you repeat that please?
    

    括弧付きの例と .Value

    PS C:\Tools\Scripts\golfing> .\what-exactly-was-your-question.ps1 "Huh? I haven't heard what you just said! Could you repeat that please?"
    Huh?
     Could you repeat that please?
    

    1

    Python 3、91バイト

    def f(x,a=0):
     for n in range(len(x)):
      if x[n]in".!":a=n+1
      if x[n]is"?":print(x[a:n+1])
    

    Python 2で1バイトを保存します:

    def f(x,a=0):
     for n in range(len(x)):
      if x[n]in".!":a=n+1
      if x[n]is"?":print x[a:n+1]
    
    弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.