頭字語は、明らかにメッセージセンサーを絞り込むことができます


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
頭字語は再帰できますか?ああ!今、あなたは理にかなっています。
ジオビット

2
いいえ、出力が何であるかが明確である限り
ブルー

9
これはXKCDを思い出させます:xkcd.com/917
ETHproductions


4
ABCDE:別の基本的に明確に定義された例。
ジョンドヴォルザーク

回答:


10

ピス、19 18

&pqJrz0hCKcrw0)}JK

これは、次のようなやや奇妙な形式で結果を出力しますTrueFalse

オンラインで試す、テストスイートを実行できます。

説明:

&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

Python 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渡されzipた各反復可能要素の最初の要素のタプルを返すように呼び出しますtuple(a)


あなたは置き換えることによって7つのバイトを保存することができます[0]==l ため.startswith(l)
スカイラー

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

Haskell、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として、printlnのmkString代わりにnew String、printの代わりにprint を使用して、数バイトを節約しました。

編集:質問を誤って解釈し、ソリューションを再実装しなければならなかった


3

Python 3、106バイト

まあ、少なくともScalaを打ち負かした;)

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各例の説明をさらに詳しく説明すると、これが他の人に起こるのを防ぐことができます。
ベータ崩壊

サンドボックスで過ごす時間がもっと増えたでしょうか?私の(明らかにかなり限られた)経験では、あなたはそれがほぼトップにある間、あなただけの応答を得る
ブルー

@muddyfishまあ、あなたがそれをどれくらい長く残したのかわからない、私は知らない
ベータ崩壊

約1日間そこに
ブルー

@muddyfish A週推奨規範である
ベータ崩壊

3

AppleScript、302 301 297 293バイト

ああ、うん。私が負けても気にしませんが、これはAppleScriptにとって競争力があります。

xを(display dialog "" default answer "")のテキストが返されるように設定します
yを(display dialog "" default answer "")のテキストの返された単語に設定します
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));

この形式で2つのブール値を出力します。

bool(true)
bool(false)

次のように、コマンドラインから2つの引数を読み取ります。

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/ falseような1/ 0)。

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

1

JavaScriptの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つの2つの値を持つ配列を出力します。


1
の代わりに正規表現を使用することは考えなかったでしょう.indexOf。よくやった!おそらくr=eval(`/^${a}$/i`)、現在のrセットアップの代わりに機能するでしょう。
ETHproductions

順番に@ETHproductionsと私は考えていないだろうevalとしてRegExp、オブジェクト短縮。ヒントをありがとう!
Mwr247

0

GNU sed、118バイト

-r+1としてスコアに含まれるフラグが必要です。\bこれはGNU sedで文書化されていませんが、単語境界の一致に使用していることに注意してください。それは私のため働く ...

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

Groovy、91バイト

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

出力形式は、 [bool, bool]これはコマンドライン引数からの入力を受け取ります。


0

Lua 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最初の行にフィールドが1つしかない場合にのみ設定します。
  • END{...}:2行のみを想定...
    • 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入力を大文字に変換すると、文字と小文字の変換が節約されます。1つのLETステートメントで複数の割り当てを実行できるようになりました。これも役立ちます。そして、TEXT1文字以上保存し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 =すべてfalse、1 = 1つのtrue、2 =両方ともtrue。私はゴルファーではありませんが、ブラウジング中にperlが見つかりません。

($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

JavaScript(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

JavaScript(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)]

シャック...私はそれをすべて整理したと思ったが、明らかに間違っていた。

これは、2つの文字列として入力を受け取り、2つのブール値アイテムの配列と配列を返す匿名関数を定義します。最初の項目は、すべて小文字の最初の文字列と2番目の文字列の各単語の最初の文字を比較して計算されます。2番目の項目は、2番目の文字列に最初の文字列が含まれているかどうかを確認するだけで計算されます。

次に、2番目の項目の別のソリューションを示します。2バイト短くなりますが、サポートするブラウザはごくわずかです:

p&&c.includes(a)

2番目の文字列に最初の文字列が含まれているかどうかの確認が失敗しましたGNU: Gnus nettle unicorns
edc65

もう一度確認してください:試してみても動作しません:(前にReferenceError: l is not defined行方不明)l=toLowerCase
-edc65

...そのバグを修正し、'GNU','GNU is not unix'(テストケース4)がfalse、falseである必要があるために失敗する
-edc65

@ edc65 Shucks、l=バグを探している間に消し去り、元に戻すのを忘れました。それを育ててくれてありがとう!他のテストケースも修正する必要があります。
ETHproductions

0

Pyke(投稿時に無題)、(非競合)、20バイト

l1c"jFh)J"iQl1qDji{&

ここでソースコードを見つけることができますで、言語は完全に不安定です(最初のテストチャレンジ)ので、将来動作することを期待しないでください(コミット8)

または18バイト(安定)

l1idcmhsRl1jqDji{&

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

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