약어는 분명히 메시지 센서를 좁힐 수 있습니다


36

이 때문에 구가 단어의 약어 인 경우 더 나은 운동 방법이 필요합니다. 또한 해당 문구와 단어가 재귀 약어인지 확인하는 것이 좋습니다.

당신의 작업 :

단어와 구가 한 줄로 분리되어 주어지면 구가 머리 글자 어이고 재귀 머리 글자 이면 출력됩니다 . (구는 그것이 의미하는 것을 포함합니다)

  • 입력은 공백뿐만 아니라 알파벳 문자로 구성됩니다.
  • 프로그램은 대소 문자를 구분해서는 안됩니다.

입력 / 출력 예 :

사례 1 :

입력:

Acronyms
Acronyms can really obviously narrow your message sensors

산출:

True 
True

사례 2 :

입력:

FAQ
frequently asked questions

산출:

True 
False

사례 3 :

입력:

foo
bar baz

산출:

False
False

사례 4 :

입력:

GNU
GNU is not Unix

산출:

False
False

사례 5 :

입력:

Aha
A huge Aha

산출:

True
True

69
약어가 재발 할 수 있습니까? 오! 이제 당신은 감각을 만들고 있습니다.
Geobits

2
아니요, 출력이 무엇인지 분명하다면
Blue

9
이것은 XKCD를 생각 나게합니다 : xkcd.com/917
ETHproductions


4
ABCDE : 또 다른 기본적으로 명확하게 정의 된 예입니다.
John Dvorak

답변:


10

피스, 19 18

&pqJrz0hCKcrw0)}JK

결과는 다음과 같이 다소 이상한 형식으로 인쇄 TrueFalse됩니다.

온라인으로 시도 하거나 Test Suite를 실행할 수 있습니다 .

설명:

&pqJrz0hCKcrw0)}JK      :
    rz0    rw0          : read two lines of input, and convert each to lower case
          c   )         : chop the second input on whitespace
   J     K              : store the first line in J and the chopped second line in K
  q    hC               : zip K and take the first element, check if it is the same as J
 p                      : print and return this value
&              }JK      : and the value with whether J is in K, implicit print

15

파이썬 3, 89

SOPython 덕분에 많은 바이트를 절약했습니다.

a=input().lower()
d=input().lower().split()
h=tuple(a)==next(zip(*d))
print(h,h&(a in d))

이 솔루션의 가장 복잡한 부분은입니다 h=tuple(a)==next(zip(*d)).
이것은 목록 d을 zip으로 압축 해제 한 다음 next전달 된 각 iterable의 첫 번째 요소의 튜플을 반환하도록 호출 zip하여 ( tuple(a)) 의 각 문자 튜플과 비교 합니다.


를 대체 [0]==l 하여 7 바이트를 절약 할 수 있습니다 .startswith(l).
Skyler

7

CJam, 21 20 바이트

qeuN/)S/_:c2$s=_p*&,

보십시오 이 바이올린 CJam 인터프리터에서 또는 한 번에 모든 테스트 케이스를 확인합니다.

작동 원리

qeu                  e# Read from STDIN and convert to uppercase.
   N/                e# Split at linenfeeds.
     )S/             e# Pop the second line form the array.
      S/             e# Split it at spaces.
        _:c          e# Push a copy and keep on the initial of each word.
           2$s       e# Push a copy of the line array and flatten it.
                     e# This pushes the first line.
              =      e# Check for equality.
               _p    e# Print a copy of the resulting Boolean.
                 *   e# Repeat the word array 1 or 0 times.
                  &  e# Intersect the result with the line array.
                   , e# Push the length of the result (1 or 0).

4

하스켈, 81 80 바이트

import Data.Char
f[a,b]|c<-words b=(a==map(!!0)c,elem a c)
p=f.lines.map toLower

출력 형식이 엄격하게 정의되어 있지 않으므로 부울 쌍을 반환합니다 (예 : p "Aha\na huge arm"->) (True,False).


오늘은 알게 패턴 가드 ( <-고마워요)!
wchargin

4

스칼라 135 110 108 바이트

val Array(x,y)=args.map(_.toLowerCase)
val z=y.split(" ").map(_(0)).mkString
print(z==x,z==x&&y.contains(z))

명령 줄 인수 (힌트에 대한 J Atkin에게 감사)를 사용하여 tupel로 밖으로 논리 값을 넣어 사용하여 몇 바이트를 저장 mkString하는 대신 new String대신에 println의 인쇄 할 수 있습니다.

편집 : 질문을 잘못 해석하고 솔루션을 다시 구현해야했습니다.


3

파이썬 3, 106 바이트

글쎄, 적어도 스칼라를 이겼다.)

x=input().lower()
y=input().lower().split()
g=all(x[i]==y[i][0]for i in range(len(y)))
print(g,g&(x in y))

1
@muddyfish 각 예제에 대한 더 많은 설명은 다른 사람들에게 이런 일이 발생하지 않도록합니다.
Beta Decay

샌드 박스에서 더 많은 시간이 도움이 되었습니까? 그것에 대한 나의 (분명히 다소 제한적인) 경험에서, 당신은 거의 최상위에있는 동안 만 응답을받습니다
Blue

@muddyfish 글쎄, 난 당신이 그렇게 오래 얼마나 몰라, 몰라요
Beta Decay

나는 약 하루 동안 거기에 떠났다
Blue

@muddyfish 일주일이 권장됩니다
Beta Decay

3

애플 스크립트, 302 301 297 293 바이트

아, 그래 내가 잃어 버릴 염려조차 없었지만, 이것은 AppleScript와 경쟁이 치열합니다.

x를 (디스플레이 대화 상자 ""기본 답변 "")의 텍스트로 반환
y를 (디스플레이 대화 상자 ""기본 답변 "")의 텍스트 반환 단어로 설정
n을 y의 항목 번호로 설정
n 반복
시험
y의 항목 n의 문자 1 = (x는 텍스트)의 문자 n이 아닌 경우 {false, false}
종료
n을 n-1로 설정
종료
return {true, x는 y}입니다

다음과 같이 출력됩니다 :

{허위 사실}

또는 대답이 무엇이든간에.


2

PHP, 120 바이트

대소 문자를 구분하지 않는 것은 많은 가중치 (26 바이트)입니다. 모든 테스트 사례를 통과했습니다.

foreach($c=explode(' ',strtolower($argv[2]))as$l)$m.=$l[0];var_dump($x=$m==$a=strtolower($argv[1]),$x&&in_array($a,$c));

이 형식으로 두 개의 부울 값을 출력합니다.

bool(true)
bool(false)

다음과 같이 명령 행에서 두 개의 인수를 읽습니다.

a.php Acronyms "Acronym can really obviously narrow your message sensors"

언 골프

$acronym = strtolower($argv[1]);
$words = strtolower($argv[2]);
$words = explode(' ', $words);

foreach($words as $word) {
    $letters .= $word[0];
}

$isAcronym = $letters == $acronym;

var_dump(
    $isAcronym,
    $isAcronym && in_array($acronym, $words)
);

2

루비, 77 74 바이트

b=gets.chop.upcase
a=gets.upcase
p c=a.scan(/\b\w/)*''==b,c&&a.include?(b)

1

루비, 52 바이트

p !!gets[/^#{x=gets.scan(/\b\w/)*""}$/i],!! ~/#{x}/i

예:

$ echo "Aha
A huge AHA" | ruby acronym.rb
true
true

1

Matlab, 90 바이트

function z=f(r,s)
z=[sum(regexpi(s(regexpi(s,'(?<=(\s|^))\S')),r))>0 nnz(regexpi(s,r))>0];

예 (Matlab은 true/ falseas 1/로 0표시됨) :

>> f('Aha', 'A huge Aha')
ans =
     1     1

1

자바 스크립트 ES6, 95 92 바이트

(a,b)=>[(r=eval(`/^${a}$/i`)).test((s=b.split` `).map(c=>c[0]).join``),s.some(c=>r.test(c))]

두 문자열을 매개 변수로 입력하십시오. 각 부울 당 하나씩 두 값을 갖는 배열을 출력합니다.


1
대신에 정규식을 사용할 생각은 없었습니다 .indexOf. 잘 했어! 아마도 r=eval(`/^${a}$/i`)현재의 장소에서 일하는 것이 r설정.
ETHproductions

차례로 @ETHproductions 그리고 내가 생각하지 않았을 evalA와 RegExp객체 축약. 팁 고마워!
Mwr247

0

GNU sed, 118 바이트

-r점수에 +1로 포함 된 플래그가 필요합니다 . 내가 사용하고 있습니다 \b나는 GNU에 설명이 나오지도 찾을 수 있지만, 단어 경계 일치. 그것은 나를 위해 작동합니다 ...

N
h
s/^(.*)\n.*\b\1\b.*/True/i
/\n/s/.*/False/
x
:
s/(.)(.*\n)\1[^ ]* ?/\2/i
t
/../s/.*/False/
/F/h
/F/!s/.*/True/
G

넓히는:

#!/bin/sed -rf

N
h

# Is it recursive?
s/^(.*)\n.*\b\1\b.*/True/i
# If no replacement, there's still a newline => false
/\n/s/.*/False/

x

# Is it an acronym?
# Repeatedly consume one letter and corresponding word
:
s/(.)(.*\n)\1[^ ]* ?/\2/i
t
# If more than just \n remain, then false
/../s/.*/False/
# And falsify recursive, too
/F/h
# !False => true
/F/!s/.*/True/

G

0

그루비, 91 바이트

a=args*.toLowerCase()
println([a[1].split()*.charAt(0).join("")==a[0],a[1].contains(a[0])])

출력 형식은 [bool, bool]입니다. 명령 줄 args에서 입력을받습니다.


0

루아 5.3, 182 바이트

a=""b=io.read c=a.lower d=a.reverse e=d(c(b()))f=~e:len()h=a.sub g=d(c(b()))for m in g:gmatch"[^ ]+"do f=-~f if h(e,f,f)~=h(m,~0)then break end k=k or m==e end f=f>~1print(f,f and k)

0

R, 93 바이트

a=tolower(readLines(,2));cat(a[1]==gsub("([^ ])\\w* ?","\\1",a[2]),a[1]%in%scan(t=a[2],w=""))

용법:

> a=tolower(readLines(,2));cat(a[1]==gsub("([^ ])\\w* ?","\\1",a[2]),a[1]%in%scan(t=a[2],w=""))
Aha
A huge Aha
Read 3 items
TRUE TRUE
> a=tolower(readLines(,2));cat(a[1]==gsub("([^ ])\\w* ?","\\1",a[2]),a[1]%in%scan(t=a[2],w=""))
Acronyms
Acronyms can really obviously narrow your message sensors
Read 8 items
TRUE TRUE
> a=tolower(readLines(,2));cat(a[1]==gsub("([^ ])\\w* ?","\\1",a[2]),a[1]%in%scan(t=a[2],w=""))
FAQ
frequently asked questions
Read 3 items
TRUE FALSE
> a=tolower(readLines(,2));cat(a[1]==gsub("([^ ])\\w* ?","\\1",a[2]),a[1]%in%scan(t=a[2],w=""))
foo
bar baz
Read 2 items
FALSE FALSE

0

awk 137 바이트

awk 'BEGIN{T="True";F="False"}NR*NF<2{a=tolower($1)}END{for(i=1;i<=NF;i++)b=b substr(tolower($i),1,1);print(a==b?T:F)"\n"(a==tolower($1)?T:F)}'
  • T="True";F="False"출력을 단순화하기 위해 초기화합니다 .
  • NR*NF<2{a=tolower($1)}: a첫 번째 줄에 하나의 필드 만있는 경우에만 설정 하십시오.
  • END{...}: 두 줄만 가정하면 ...
    • for(i=1;i<=NF;i++)b=b substr(tolower($i),1,1): 재귀 약어를 구성합니다.
    • print(a==b?T:F)"\n"(a==tolower($1)?T:F): 두 비교의 출력을 인쇄 a==b하고 a==tolower($1).

재귀 약어 구성을 최적화하는 방법을 아는 사람은 언제든지 제안하십시오.


0

SpecBAS-144 바이트

1 INPUT a$,b$: LET a$=UP$(a$),b$=UP$(b$),d$="": DIM c$(SPLIT b$,NOT " ")
2 FOR EACH w$ IN c$(): LET d$=d$+w$(1): NEXT w$
3 TEXT d$=a$'POS(a$,b$)>0

2 x 입력을 대문자로 변환하면 문자 대 소문자 변환이 저장됩니다. 이제 하나의 LET문장으로 여러 번의 과제를 수행 할 수 있습니다 . 그리고 TEXT한 문자 이상을 저장 PRINT합니다.

1/0을 사용하여 true / false를 표시합니다 (아포스트로피는 출력을 다음 행으로 이동합니다).


0

Perl5, 90 바이트

($a,$b)=map{chomp;lc}<>;print((join"",map{substr($_,0,1)}split/ /,$b)ne $a?0:($b=~$a?2:1))

부정 행위 : 0 = 모두 거짓, 1 = 하나만, 2 = 모두 참. 나는 골퍼가 아니지만 탐색하는 동안 펄이 빠졌습니다!

($a,$b)=map{chomp;lc}<>;              # get the two lines as lowercase
print((                               #
join"",map{substr($_,0,1)}split/ /,$b # collapse first letters of secondline
     ) ne $a  ? 0 : ( $b=~$a ? 2 : 1))# 0 nothing, 1 not recursive, or 2 

0

자바 스크립트 (ES6) 93

(w,s)=>s[L='toLowerCase'](w=w[L](z=y='')).replace(/\w+/g,v=>y+=v[z=z||v==w,0])&&[y=y==w,y&&z]

EcmaScript 6 호환 브라우저에서 아래 스 니펫 실행 테스트

f=(w,s)=>s[L='toLowerCase'](w=w[L](z=y='')).replace(/\w+/g,v=>y+=v[z=z||v==w,0])&&[y=y==w,y&&z]

// TEST

out=x=>O.innerHTML+=x+'\n';

;[
 ['Acronyms', 'Acronyms can really obviously narrow your message sensors', true, true]
,['FAQ', 'frequently asked questions', true, false]
,['foo', 'bar baz', false, false]
,['GNU', 'GNU is not Unix', false, false]
,['Aha', 'A huge Aha', true, true]
,['Lolcat', 'Laughing over lolcat captions and tearing.', true, true]
,['ABCDE', 'Another basic clearly defined example.', true, false]
,['GNU', 'Gnus nettle unicorns', true, false]
,['PHP', 'PHP Hypertext Preprocessor', true, true]
].forEach(([a,b,c,d]) => (
  [r,s]=f(a,b), 
  out(((r==c && s==d)?'OK ':'KO ') + a + ',' + b + ' -> ' + f(a,b))
))
<pre id=O></pre>


0

자바 스크립트 (ES6), 89 96 95 바이트

(a,b)=>[p=(a=a[l='toLowerCase']())==(c=b[l]().split` `).map(x=>x[0]).join``,p&&c.some(x=>x==a)]

cks 스 ... 내가 다 정리했다고 생각했지만 분명히 틀렸다.

이것은 입력을 두 개의 문자열로 가져오고 두 개의 부울 항목을 리턴하고 배열하는 익명 함수를 정의합니다. 첫 번째 항목은 모든 소문자의 첫 번째 문자열과 두 번째 문자열의 각 단어의 첫 번째 문자를 비교하여 계산됩니다. 두 번째 항목은 두 번째 문자열에 첫 번째 문자열이 포함되어 있는지 확인하여 간단히 계산됩니다.

두 번째 항목에 대한 또 다른 해결책이 있습니다. 2 바이트 더 짧지 만 지원하는 브라우저는 거의 없습니다.

p&&c.includes(a)

두 번째 문자열에 첫 번째 문자열이 포함되어 있는지 확인GNU: Gnus nettle unicorns
edc65

다시 확인하십시오 : 시도했지만 작동하지 않습니다 : ReferenceError: l is not defined( l=이전에 누락 toLowerCase)
edc65

... 버그 수정 'GNU','GNU is not unix'(테스트 사례 4)은 거짓, 거짓이어야 함
edc65

@ edc65 Shucks, l=버그를 찾는 동안 지우고 다시 넣는 것을 잊었습니다. 그것을 가져 주셔서 감사합니다! 다른 테스트 케이스도 수정해야합니다.
ETHproductions

0

파이크 (게시시 제목 없음), (비경쟁), 20 바이트

l1c"jFh)J"iQl1qDji{&

여기서 소스 코드를 찾을 수 있습니다 . 언어는 완전히 불안정하므로 (첫 번째 테스트 과제) 향후 작동하지 않을 것입니다 (커밋 8).

또는 18 바이트 (안정적)

l1idcmhsRl1jqDji{&

여기 사용해보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.