Akronim dapat benar-benar mempersempit sensor pesan Anda

36

Karena itu, Anda perlu cara yang lebih baik untuk berolahraga jika frasa adalah akronim dari sebuah kata. Anda juga berpikir akan bermanfaat untuk melihat apakah frasa dan kata yang dimaksud adalah singkatan rekursif.

Tugas Anda:

Diberi kata dan kemudian frasa yang dipisahkan oleh satu baris, output jika frasa tersebut adalah akronim dan kemudian jika itu adalah akronim rekursif . (Frasa berisi apa artinya)

  • Input akan terdiri dari karakter alfabet dan spasi.
  • Program Anda tidak boleh peka huruf besar-kecil.

Contoh Input / Output:

Kasus 1:

Memasukkan:

Acronyms
Acronyms can really obviously narrow your message sensors

Keluaran:

True 
True

Kasus 2:

Memasukkan:

FAQ
frequently asked questions

Keluaran:

True 
False

Kasus 3:

Memasukkan:

foo
bar baz

Keluaran:

False
False

Kasus 4:

Memasukkan:

GNU
GNU is not Unix

Keluaran:

False
False

Kasus 5:

Memasukkan:

Aha
A huge Aha

Keluaran:

True
True
Biru
sumber
69
Singkatan Dapat Kambuh? Oh! Sekarang Anda Masuk Akal.
Geobits
2
Tidak, asalkan jelas apa outputnya
Biru
9
Ini mengingatkan saya pada XKCD
ETHproduksi
1
Terkait
Martin Ender
4
ABCDE: Contoh dasar lain yang jelas.
John Dvorak

Jawaban:

10

Pyth, 19 18

&pqJrz0hCKcrw0)}JK

Ini mencetak hasilnya dalam format yang agak aneh, seperti: TrueFalse.

Anda dapat mencobanya secara online atau menjalankan Test Suite .

Penjelasan:

&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
FryAmTheEggman
sumber
15

Python 3, 89

Menyimpan banyak byte berkat SOPython.

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

Bagian paling rumit dari solusi ini adalah h=tuple(a)==next(zip(*d)).
Ini membongkar daftar dke dalam zip dan kemudian memanggil nextuntuk mengembalikan tupel dari elemen pertama dari setiap iterable yang diteruskan zipyang kemudian dibandingkan dengan tuple dari setiap huruf dalam huruf a ( tuple(a)).

Morgan Thrapp
sumber
Anda dapat menyimpan 7 byte dengan menggantikan [0]==l untuk .startswith(l).
Skyler
7

CJam, 21 20 byte

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

Coba biola ini dalam juru bahasa CJam atau verifikasi semua kasus uji sekaligus.

Bagaimana itu bekerja

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).
Dennis
sumber
4

Haskell, 81 80 byte

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

Format output tidak ditentukan secara ketat, jadi saya mengembalikan sepasang boolean, misalnya p "Aha\na huge arm"-> (True,False).

nimi
sumber
Hari ini saya belajar tentang penjaga pola ( <-) —terimakasih!
wchargin
4

Scala, 135 110 108 byte

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

Menyimpan beberapa byte dengan menggunakan argumen baris perintah (terima kasih kepada J Atkin untuk petunjuknya), menempatkan booleans sebagai tupel, menggunakan mkStringalih-alihnew String dan mencetak bukan println.

EDIT: Salah mengartikan pertanyaan, dan harus mengimplementasikan kembali solusinya

wastl
sumber
3

Python 3, 106 byte

Yah, setidaknya itu mengalahkan 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))
Peluruhan Beta
sumber
1
@muddyfish Mungkin lebih banyak penjelasan dari setiap contoh akan mencegah hal ini terjadi pada orang lain.
Beta Decay
Apakah lebih banyak waktu di kotak pasir akan membantu? Dalam pengalaman saya (jelas agak terbatas) tentang itu, Anda hanya mendapatkan tanggapan sementara itu hampir di atas
Biru
@muddyfish Yah saya tidak tahu berapa lama Anda meninggalkannya, saya tidak tahu
Beta Decay
Aku meninggalkannya di sana selama sekitar satu hari
Biru
@muddyfish Seminggu adalah norma yang disarankan
Beta Decay
3

AppleScript, 302 301 297 293 Bytes

Ah, sial ya. Bahkan tidak peduli bahwa saya kalah, ini kompetitif untuk AppleScript.

set x ke (tampilkan dialog "" jawaban default "") teks dikembalikan
atur y ke (tampilkan dialog "" jawaban default "") kata-kata yang dikembalikan
atur n ke nomor item y
ulangi n
mencoba
jika bukan item y karakter n 1 = (x sebagai teks) karakter n lalu kembalikan {false, false}
akhir
atur n ke n-1
akhir
return {true, x ada di y}

Output sebagai:

{benar salah}

Atau apa pun jawabannya.

Addison Crump
sumber
2

PHP, 120 byte

Tidak menjadi case sensitif banyak berat (26 byte). Lulus semua kasus uji:

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

Menghasilkan dua nilai bool dalam bentuk ini:

bool(true)
bool(false)

Membaca dua argumen dari baris perintah, seperti:

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

Tidak disatukan

$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)
);
masukkan nama pengguna di sini
sumber
2

Rubi, 77 74 byte

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

Ruby, 52 byte

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

Contoh:

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

Matlab, 90 byte

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

Contoh (perhatikan bahwa Matlab menampilkan true/ falsesebagai 1/ 0):

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

JavaScript ES6, 95 92 byte

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

Masukkan kedua string sebagai parameter. Output array dengan dua nilai: satu untuk setiap boolean.

Mwr247
sumber
1
Saya tidak akan berpikir untuk menggunakan regex sebagai pengganti .indexOf. Kerja bagus! Mungkin r=eval(`/^${a}$/i`)akan berfungsi sebagai pengganti rpengaturan Anda saat ini .
ETHproduk
@ ETHproductions Dan saya pada gilirannya tidak akan menganggap evalsebagai RegExppenyingkat objek. Terima kasih atas tipnya!
Mwr247
0

GNU sed, 118 byte

Membutuhkan -rbendera, termasuk dalam skor sebagai +1. Perhatikan bahwa saya menggunakan \buntuk pencocokan batas kata, meskipun saya tidak dapat menemukan ini didokumentasikan dalam GNU sed. Ini Bekerja Untuk Saya ...

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

Diperluas:

#!/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
Toby Speight
sumber
0

Groovy, 91 byte

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

Format output adalah [bool, bool]. Ini mengambil input dari args baris perintah.

J Atkin
sumber
0

Lua 5.3, 182 byte

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)
MeepDarknessMeep
sumber
0

R, 93 byte

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

Pemakaian:

> 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
plannapus
sumber
0

awk 137 byte

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)}'
  • Inisialisasi T="True";F="False" untuk menyederhanakan output.
  • NR*NF<2{a=tolower($1)}: set a hanya jika baris pertama hanya memiliki satu bidang.
  • END{...}: dengan asumsi hanya dua baris ...
    • for(i=1;i<=NF;i++)b=b substr(tolower($i),1,1): membangun akronim rekursif.
    • print(a==b?T:F)"\n"(a==tolower($1)?T:F): cetak output dari kedua perbandingan, a==bdan a==tolower($1).

Jika ada yang tahu bagaimana mengoptimalkan konstruksi akronim rekursif, jangan ragu untuk menyarankan.

hjk
sumber
0

SpecBAS - 144 byte

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

Mengkonversi input 2 x ke huruf besar menghemat karakter vs konversi huruf kecil. Sekarang dapat melakukan banyak tugas dalam satu LETpernyataan, yang juga membantu. Dan TEXTmenyimpan satu karakter PRINT.

Gunakan 1/0 untuk menampilkan true / false (tanda kutip hanya memindahkan output ke baris berikutnya).

Brian
sumber
0

Perl5, 90 byte

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

menipu sedikit: 0 = semua salah, 1 = satu benar, 2 = keduanya benar. Saya bukan pegolf, tapi saya kesal karena hilang saat menjelajah!

($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 
Akan
sumber
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]

Tes menjalankan cuplikan di bawah ini di peramban apa pun yang mendukung 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>

edc65
sumber
0

JavaScript (ES6), 89 96 95 byte

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

Sial ... Kupikir aku sudah beres, tapi ternyata aku salah.

Ini mendefinisikan fungsi anonim yang mengambil input sebagai dua string, dan mengembalikan dan array dua item boolean. Item pertama dihitung dengan membandingkan string pertama di semua huruf kecil dengan karakter pertama dari setiap kata di string kedua. Item kedua dihitung hanya dengan memeriksa apakah string kedua berisi yang pertama.

Inilah solusi lain untuk item kedua; 2 byte lebih pendek, tetapi sangat sedikit browser yang mendukungnya:

p&&c.includes(a)
Produksi ETH
sumber
Memeriksa apakah string kedua berisi gagal pertama untukGNU: Gnus nettle unicorns
edc65
Silakan periksa lagi: mencobanya dan bahkan tidak berfungsi: ReferenceError: l is not defined(hilang l=sebelumnya toLowerCase)
edc65
... memperbaiki bug itu, gagal karena 'GNU','GNU is not unix'(test case 4) harus salah, salah
edc65
@ edc65 Sialan, saya menghapus l=sementara mencari bug dan lupa untuk mengembalikannya. Terima kasih telah membahasnya! Kasing uji lainnya harus diperbaiki juga.
ETHproduk
0

Pyke (tidak diberi judul saat diposting), (tidak kompetitif), 20 byte

l1c"jFh)J"iQl1qDji{&

Anda dapat menemukan kode sumber di sini , bahasa benar-benar tidak stabil (tantangan tes pertama untuk itu) jadi jangan berharap itu berfungsi di masa depan (komit 8)

Atau 18 byte (stabil)

l1idcmhsRl1jqDji{&

Coba di sini!

Biru
sumber