Từ viết tắt thực sự rõ ràng có thể thu hẹp cảm biến tin nhắn của bạn


36

Bởi vì điều này, bạn cần một cách tốt hơn để làm việc nếu một cụm từ là từ viết tắt của một từ. Bạn cũng nghĩ rằng sẽ rất đáng để xem nếu cụm từ và từ trong câu hỏi là từ viết tắt đệ quy.

Nhiệm vụ của bạn:

Cho một từ và sau đó một cụm từ cách nhau bởi một dòng, xuất ra nếu cụm từ đó là từ viết tắt và sau đó nếu đó là một từ viết tắt đệ quy . (Cụm từ chứa những gì nó đại diện cho)

  • Đầu vào sẽ bao gồm các ký tự chữ cái cũng như khoảng trắng.
  • Chương trình của bạn không nên phân biệt chữ hoa chữ thường.

Ví dụ Nhập / Xuất:

Trường hợp 1:

Đầu vào:

Acronyms
Acronyms can really obviously narrow your message sensors

Đầu ra:

True 
True

Trường hợp 2:

Đầu vào:

FAQ
frequently asked questions

Đầu ra:

True 
False

Trường hợp 3:

Đầu vào:

foo
bar baz

Đầu ra:

False
False

Trường hợp 4:

Đầu vào:

GNU
GNU is not Unix

Đầu ra:

False
False

Trường hợp 5:

Đầu vào:

Aha
A huge Aha

Đầu ra:

True
True

69
Từ viết tắt có thể tái diễn? Oh! Bây giờ bạn đang có ý thức.
Geobits

2
Không, miễn là nó rõ ràng đầu ra là gì
Màu xanh

9
Điều này nhắc nhở tôi về một XKCD: xkcd.com/917
ETHproductions


4
ABCDE: Một ví dụ cơ bản được xác định rõ ràng.
John Dvorak

Câu trả lời:


10

Bình thường, 19 18

&pqJrz0hCKcrw0)}JK

Điều này in kết quả trong một định dạng khá kỳ lạ, như : TrueFalse.

Bạn có thể dùng thử trực tuyến hoặc chạy Test Suite .

Giải trình:

&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

Con trăn 3, 89

Đã lưu một loạt các byte nhờ vào SOPython.

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

Phần phức tạp nhất của giải pháp này là h=tuple(a)==next(zip(*d)).
Điều này giải nén danh sách dthành zip và sau đó gọi nextđể trả về một phần tử của phần tử đầu tiên của mỗi lần lặp được truyền vào zip, sau đó được so sánh với một tuple của mỗi chữ cái trong một ( tuple(a)).


Bạn có thể lưu 7 byte bằng cách thay thế [0]==l cho .startswith(l).
Skyler

7

CJam, 21 20 byte

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

Hãy thử fiddle này trong trình thông dịch CJam hoặc xác minh tất cả các trường hợp thử nghiệm cùng một lúc.

Làm thế nào nó hoạt động

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 byte

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

Định dạng đầu ra không được xác định nghiêm ngặt, vì vậy tôi trả về một cặp booleans, ví dụ p "Aha\na huge arm"-> (True,False).


Hôm nay tôi đã học được về những người bảo vệ mẫu ( <-)
wchargein

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))

Đã lưu một vài byte bằng cách sử dụng các đối số dòng lệnh (nhờ J Atkin cho gợi ý), đưa booleans ra dưới dạng một tupel, sử dụng mkStringthay vì new Stringvà in thay vì println.

EDIT: Giải thích sai câu hỏi và phải thực hiện lại giải pháp


3

Python 3, 106 byte

Chà, ít nhất là nó đã đánh bại 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 Có thể giải thích thêm về từng ví dụ sẽ ngăn điều này xảy ra với người khác.
Beta Decay

Sẽ có nhiều thời gian hơn trong hộp cát đã giúp? Theo kinh nghiệm (rõ ràng là khá hạn chế) của tôi về nó, bạn chỉ nhận được phản hồi trong khi nó gần như ở trên đỉnh
Blue

@muddyfish Tôi không biết bạn đã để nó bao lâu, tôi không biết
Beta Decay

Tôi đã để nó ở đó khoảng một ngày
Blue

@muddyfish Một tuần là chỉ tiêu được đề xuất
Beta Decay

3

AppleScript, 302 301 297 293 Byte

Ồ, đúng rồi Thậm chí không bận tâm rằng tôi thua, đây là cạnh tranh cho AppleScript.

đặt x thành (hộp thoại hiển thị "" trả lời mặc định "") văn bản được trả về
đặt y thành (hộp thoại hiển thị "" câu trả lời mặc định "") văn bản trả về của từ
đặt n thành số của vật phẩm của y
lặp lại n
thử
if not y's item n's character 1 = (x dưới dạng văn bản) ký tự n rồi trả về {false, false}
kết thúc
đặt n thành n-1
kết thúc
trả về {true, x nằm trong y}

Đầu ra như:

{đúng sai}

Hoặc bất cứ câu trả lời nào xảy ra.


2

PHP, 120 byte

Không phải là trường hợp nhạy cảm là rất nhiều trọng lượng (26 byte). Đã vượt qua tất cả các trường hợp thử nghiệm:

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

Xuất ra hai giá trị bool ở dạng này:

bool(true)
bool(false)

Đọc hai đối số từ dòng lệnh, như:

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

Ung dung

$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

Hồng ngọc 77 74 byte

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

1

Ruby, 52 byte

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

Thí dụ:

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

1

Matlab, 90 byte

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

Ví dụ (lưu ý rằng Matlab hiển thị true/ falsedưới dạng 1/ 0):

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

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

Nhập cả hai chuỗi làm tham số. Xuất ra một mảng với hai giá trị: một cho mỗi boolean.


1
Tôi sẽ không nghĩ đến việc sử dụng regex thay thế .indexOf. Công việc tốt đẹp! Có lẽ r=eval(`/^${a}$/i`)sẽ làm việc thay cho rthiết lập hiện tại của bạn .
Sản xuất ETH

@ETHproductions Và đến lượt tôi sẽ không nghĩ evallà một công cụ RegExprút gọn đối tượng. Cảm ơn vì tiền hỗ trợ!
Mwr247

0

GNU sed, 118 byte

Yêu cầu -rcờ, bao gồm trong số điểm là +1. Lưu ý rằng tôi đang sử dụng \bcho kết quả khớp từ, mặc dù tôi không thể tìm thấy tài liệu này trong GNU sed. Nó hoạt động cho tôi ...

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

Mở rộng:

#!/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 byte

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

Định dạng đầu ra là [bool, bool]. Cái này lấy đầu vào từ dòng lệnh args.


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)

0

R, 93 byte

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

Sử dụng:

> 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 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)}'
  • Khởi tạo T="True";F="False"để đơn giản hóa đầu ra.
  • NR*NF<2{a=tolower($1)}: achỉ được đặt nếu dòng đầu tiên chỉ có một trường.
  • END{...}: giả sử chỉ có hai dòng ...
    • for(i=1;i<=NF;i++)b=b substr(tolower($i),1,1): xây dựng từ viết tắt đệ quy.
    • print(a==b?T:F)"\n"(a==tolower($1)?T:F): in đầu ra của cả hai phép so sánh a==ba==tolower($1).

Nếu bất cứ ai biết cách tối ưu hóa việc xây dựng từ viết tắt đệ quy, vui lòng đề xuất.


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

Chuyển đổi 2 x đầu vào thành chữ hoa lưu ký tự so với chuyển đổi chữ thường. Bây giờ có thể có nhiều bài tập được thực hiện trong một LETcâu lệnh, điều này cũng có ích. Và TEXTlưu một nhân vật trên PRINT.

Sử dụng 1/0 để hiển thị đúng / sai (dấu nháy đơn chỉ di chuyển đầu ra sang dòng tiếp theo).


0

Perl5, 90 byte

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

gian lận một chút: 0 = tất cả sai, 1 = một đúng, 2 = cả hai đúng. Tôi không phải là người chơi gôn, nhưng tôi rất buồn vì perl bị mất khi duyệt!

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

Kiểm tra chạy đoạn mã dưới đây trong bất kỳ trình duyệt tuân thủ EcmaScript 6 nào

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 byte

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

Shucks ... Tôi nghĩ rằng tôi đã sắp xếp tất cả, nhưng dường như tôi đã sai.

Điều này xác định một hàm ẩn danh nhận đầu vào là hai chuỗi, trả về và mảng của hai mục boolean. Mục đầu tiên được tính bằng cách so sánh chuỗi đầu tiên trong tất cả các chữ thường với char đầu tiên của mỗi từ trong chuỗi thứ hai. Mục thứ hai được tính đơn giản bằng cách kiểm tra xem chuỗi thứ hai có chứa chuỗi thứ nhất không.

Đây là một giải pháp khác cho mục thứ hai; Ngắn hơn 2 byte, nhưng rất ít trình duyệt hỗ trợ nó:

p&&c.includes(a)

Kiểm tra xem chuỗi thứ hai có chứa chuỗi đầu tiên không thành công choGNU: Gnus nettle unicorns
edc65

Vui lòng kiểm tra lại: đã thử và thậm chí không hoạt động: ReferenceError: l is not defined(mất tích l=trước đó toLowerCase)
edc65

... đã sửa lỗi đó, nó không thành công 'GNU','GNU is not unix'(trường hợp thử nghiệm 4) nên sai, sai
edc65

@ edc65 Shucks, tôi đã xóa l=trong khi tìm kiếm một lỗi và quên đặt lại. Cảm ơn vì đã mang mà lên! Các trường hợp thử nghiệm khác cũng nên được sửa chữa.
Sản xuất ETH

0

Pyke (không có tiêu đề khi được đăng), (không cạnh tranh), 20 byte

l1c"jFh)J"iQl1qDji{&

Bạn có thể tìm thấy mã nguồn ở đây , ngôn ngữ hoàn toàn không ổn định (thử thách đầu tiên cho nó) vì vậy đừng hy vọng nó sẽ hoạt động trong tương lai (cam kết 8)

Hoặc 18 byte (ổn định)

l1idcmhsRl1jqDji{&

Hãy thử nó ở đây!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.