질문이 정확히 무엇입니까?


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 개의 질문이 있습니다. 즉:

Adjuvetis hoc fortassis suspicari opportune obversari vix eam?

텍스트를 문장으로 나누면됩니다. 문장은 항상 다음 문장 부호 중 하나로 끝납니다. .?!(다른 문장 은 처리 할 필요가 없습니다). 이것 이외의 기호는 문장의 일부입니다.


작업

한 줄의 텍스트만으로 구성

  • 문자 (A-Za-z)
  • 숫자 (0-9)
  • 공백
  • 문장 부호 ( ,.;:?!) (한 문장으로 문장을 시작할 수 없습니다).

텍스트에있는 질문을 합리적인 형식으로 출력하십시오. 텍스트에 항상 최소 1 개의 질문 이 있다고 가정 할 수 있습니다 . 질문 전후에 후행선행 공백을 출력 합니다.

중요 : A와 다음 문장 기호가있을 것입니다 결코 (예를 들어 다른 문장 기호를 수 없습니다 ??무효이며, 핸들에 필요하지 않습니다).


테스트 사례

형식으로 :

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
.?!다른 사람은 규칙 지정으로, 처리 할,하지만 당신은 다른 사람이 말했다 하지 않아도 처리 할 수 있습니다.
Outgolfer Erik

하나 이상의 질문이있는 테스트 사례가 없습니까?
edc65

@ edc65 첫 번째 테스트 사례에는 두 가지 질문이 있지만 다른 테스트 사례를 추가하겠습니다.
Adnan

답변:



5

파이썬, 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)))

나는 이것에 익숙하지 않으므로 아마도 훨씬 짧을 수 있습니다.

Martin 덕분에 -17 (!) 바이트

"!", "?"이 아닌 것을 일치시켜 -2 바이트 또는 "." (쉘 솔루션에 가까워 지지만 더 많이 절약 할 수 있을지는 의문입니다)


1
프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다! 아주 좋은 첫 번째 답변 :).
Adnan

나는 당신이 그 모습을 전혀 필요로하지 않는다고 생각하지 않으며 [\w,:; ]*(어쨌든 그룹이 구두점 문자를 지나갈 수 없기 때문에) 욕심 을 만들 필요가 없으며, 또한 .당신의 입력에 덧붙일 필요가 없습니다 . 나머지 문자 클래스를로 축소합니다 [^.!?].
마틴 엔더

감사합니다, 마틴! 나는 이것을 조금 시도했지만 명백한 것을 보지 못했습니다.
KarlKastor

4

자바 스크립트, 35 24 바이트

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

리턴 후 시작하는 모든 문자열 ., ?또는 !(또는 텍스트의 시작)를과 끝 ?.


어. 그리고 나는 40 바이트로 잘했다고 생각했습니다. Good Job 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 문자)
Fabio Iotti

6
@ bruce965 Jelly는 각각 256 바이트 문자를 단일 바이트로 인식하는 사용자 지정 코드 페이지를 사용합니다. 헤더 의 바이트 링크가이를 가리 킵니다.
Dennis

오, 멋지다! 나는 아직 codegolfer가 아니기 때문에이 트릭을 알지 못합니다. 질문을 드려 죄송합니다.
Fabio Iotti

4
@ bruce965 레코드의 경우 실제로는 속임수가 아닙니다. 언어는 ISO 8859-1 (또는 기존의 다른 단일 바이트 인코딩)을 사용할 수 있고 강력하지만 사용자 정의 코드 페이지를 사용하면 더 많은 것을 사용할 수 있습니다 예를 들어 제어 문자로 코딩해야하는 경우보다 쉽게 ​​입력 할 수있는 문자와 더 나은 니모닉이 있습니다. 하루가 끝나면 바이트 스트림 일 뿐이며 모든 바이트에는 의미가 부여됩니다.
Martin Ender

2
"속임수"는 잘못된 의미로 들렸을 수도 있습니다. "트릭"보다 더 나은 단어를 찾을 수 없습니다.
Fabio Iotti

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
  • cmd.exeWindows 5.1.2600과 함께 제공되는 Microsoft

  • 1
    이전에 여러 유틸리티를 사용하여 답변을 제출 한 적이 없으므로 잘못된 일이 있으면 알려주세요.
    Joe

    GNU 유틸리티의 Windows 버전 또는 Windows 용 쉘을 사용합니까?
    Outgolfer Erik

    tr ? "\n"|sed "s/.*[\.!]//;s/.\+/&?/"5 바이트를 절약합니다 (2 개 추가 tr및 7 개 저장 sed-이것은 bash에서 테스트되었습니다). /g한 줄씩 처리되므로 필요하지 않습니다.
    rexkogitans

    @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ, 저는 GNU 유틸리티의 Windows 포트를 사용하고 있습니다.
    Joe

    @rexkogitans 감사합니다! 나는 잊었다 []; 저의 첫 시도는 다음과 같았습니다 \(\.|!\).
    Joe

    2

    Perl 5.10, 21 18 바이트 ( -n 플래그 사용)

    say m/[^?.!]+\?/g
    

    질문의 간단한 구현.

    여기 사용해보십시오!


    당신은 최고의 제거 할 수 m귀하의 정규식의, 그리고 당신은 사이의 공간을 제거 할 수 있습니다 say/
    다다

    2

    루비 1.9, 17 바이트

    $_=$F
    

    다음 명령 행 옵션으로 호출해야하는 5 바이트 프로그램 :

    paF[^?]*[.!]
    

    나는 루비 깃발이 이런 식으로 레슬링 될 수 있다는 것을 몰랐다. 그러나 연속적인 질문은 해당 배열 내에서 하나의 문자열로 함께 모인 반면 다른 질문은 분리되어 있기 때문에 이상하게 느껴집니다. 내가 모르는 Ruby 1.9 쿼크가 없다면.
    Value Ink

    @ValueInk 배열의 내용이 연결되어 프로그램은 배열 리터럴이 아닌 단일 문자열을 출력합니다. 루비 1.9가 있는 golf.shinh.org/check.rb 에서 사용해 볼 수 있습니다 . 플래그는 shebang에서 설정할 수 있습니다.
    xsot

    Aha, 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에서 행을 읽는 것이를 사용하는 것보다 짧은 바이트 set s=%*입니다.


    1

    PowerShell v4 +, 43 바이트

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

    정말 간단합니다. 입력을 받아서 $args첫 번째 매개 변수로 .NET [regex]::Matches(...)정적 함수에 피드합니다 . 우리가 일치시키는 정규 표현식은 [^?!.]*\?즉, 물음표로 끝나는 문장이 아닌 문자의 수입니다. 정적 함수는 캡처 그룹, 인덱스 등을 자세히 설명하는 객체 배열을 반환하지만 .Values 만 원 하므로 반환 값은 parens로 캡슐화되어 해당 속성을 호출합니다. 이전 버전에서 대신 루프와 같은 작업을 수행 |%{$_.Value}하거나 |Select Value적절한 속성을 가져와야하므로 v4 + 요구 사항이 적용됩니다.

    괄호없는 예와 .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?
    

    Parens를 사용한 예 및 .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

    파이썬 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.