ตัวย่อสามารถทำให้เซ็นเซอร์ข้อความของคุณแคบลงได้อย่างชัดเจน


36

ด้วยเหตุนี้คุณต้องมีวิธีที่ดีกว่าในการออกกำลังกายหากวลีเป็นตัวย่อของคำ คุณคิดว่ามันจะคุ้มค่าที่จะดูว่าวลีและคำที่เป็นปัญหานั้นเป็นตัวย่อแบบเรียกซ้ำ

งานของคุณ:

ป.ร. ให้คำและวลีที่แล้วคั่นด้วยเส้นเอาท์พุทถ้าวลีเป็นตัวย่อแล้วถ้ามันเป็นตัวย่อ recursive (วลีมีสิ่งที่มันหมายถึง)

  • ข้อมูลที่ป้อนจะประกอบด้วยอักขระตามตัวอักษรและช่องว่าง
  • โปรแกรมของคุณไม่ควรตรงตามตัวพิมพ์ใหญ่ - เล็ก

ตัวอย่างอินพุต / เอาต์พุต:

กรณีที่ 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
คำย่อสามารถเรียกคืนได้หรือไม่ Oh! ตอนนี้คุณเข้าท่าแล้ว
Geobits

2
ไม่ตราบใดที่มันชัดเจนว่าผลลัพธ์คืออะไร
Blue

9
นี้ทำให้ผมนึกถึงของ XKCD: xkcd.com/917
ETHproductions


4
ABCDE: อีกตัวอย่างพื้นฐานที่กำหนดไว้อย่างชัดเจน
John Dvorak

คำตอบ:


10

Pyth, 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เพื่อคืนค่า tuple ขององค์ประกอบแรกของแต่ละ iterable ที่ถูกส่งเข้าไปzipซึ่งจะถูกเปรียบเทียบกับ tuple ของตัวอักษรแต่ละตัวใน ( tuple(a))


คุณสามารถบันทึก 7 ไบต์โดยการแทนสำหรับ[0]==l .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

Haskell, 81 80 ไบต์

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

รูปแบบการส่งออกไม่ได้กำหนดไว้อย่างเคร่งครัดดังนั้นฉันกลับมาคู่ของ booleans e กรัม->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 สำหรับคำแนะนำ) วาง booleans เป็น tupel ใช้mkStringแทนnew Stringและพิมพ์แทน println

แก้ไข: ตีความคำถามผิดและต้องปรับใช้โซลูชันอีกครั้ง


3

Python 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

มีเวลามากขึ้นในกล่องทรายช่วยหรือไม่ จากประสบการณ์ของฉัน (เห็นได้ชัดว่าค่อนข้าง จำกัด ) คุณจะได้รับคำตอบเมื่อใกล้ถึงจุดสูงสุด
บลู

@muddyfish ดีฉันไม่รู้ว่าคุณทิ้งไว้นานเท่าไหร่ฉันไม่รู้
Beta Decay

ฉันออกจากที่นั่นประมาณหนึ่งวัน
บลู

@muddyfish หนึ่งสัปดาห์เป็นบรรทัดฐานที่แนะนำ
Beta Decay

3

AppleScript, 302 301 297 293 ไบต์

อ๊ะใช่แล้ว ไม่ต้องกังวลเลยว่าฉันจะเสียนี่คือการแข่งขันสำหรับ AppleScript

ตั้งค่า x เป็นข้อความโต้ตอบตอบกลับ "" คำตอบเริ่มต้น "")
ตั้งค่า y เป็น (แสดงข้อความโต้ตอบ "" คำตอบเริ่มต้น "") ของคำที่ส่งคืนข้อความ
ตั้งค่าหมายเลขรายการของ y
ทำซ้ำ n
ลอง
ถ้าไม่ใช่ตัวละครของรายการ n ของรายการ 1 = (x เป็นข้อความ) ของ n แล้วส่งคืน {false, false}
ปลาย
ตั้งค่า n เป็น n-1
ปลาย
กลับ {จริง 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"

Ungolfed

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


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

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
ฉันจะไม่ได้คิดว่าการใช้ regex .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]ใช้สิ่งนี้นำเข้าจากบรรทัดคำสั่ง args


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ต่อเมื่อบรรทัดแรกมีเพียงหนึ่งช่องเท่านั้น
  • 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==ba==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งบเดียวซึ่งก็ช่วยได้เช่นกัน และช่วยประหยัดตัวละครตัวหนึ่งมากกว่าTEXTPRINT

ใช้ 1/0 เพื่อแสดงค่าจริง / เท็จ (เครื่องหมายอัญประกาศเดี่ยวจะย้ายเอาต์พุตไปที่บรรทัดถัดไป)


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

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

Shucks ... ฉันคิดว่าฉันแยกมันออกหมดแล้ว แต่ดูเหมือนว่าฉันผิด

สิ่งนี้นิยามฟังก์ชั่นที่ไม่ระบุตัวตนซึ่งรับอินพุตเป็นสองสายและส่งคืนและอาร์เรย์ของรายการบูลีนสองรายการ รายการแรกจะถูกคำนวณโดยการเปรียบเทียบสตริงแรกในตัวพิมพ์เล็กทั้งหมดกับอักขระตัวแรกของแต่ละคำในสตริงที่สอง รายการที่สองถูกคำนวณอย่างง่าย ๆ โดยตรวจสอบว่าสายอักขระที่สองมีรายการแรกหรือไม่

นี่เป็นอีกวิธีการหนึ่งสำหรับรายการที่สอง; สั้นลง 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

Pyke (ไม่มีชื่อเมื่อโพสต์), (ไม่มีการแข่งขัน), 20 ไบต์

l1c"jFh)J"iQl1qDji{&

คุณสามารถค้นหาซอร์สโค้ดได้ที่นี่ภาษาไม่เสถียรอย่างสมบูรณ์ (การทดสอบครั้งแรกสำหรับมัน) ดังนั้นอย่าคาดหวังว่ามันจะทำงานได้ในอนาคต (ส่ง 8)

หรือ 18 ไบต์ (เสถียร)

l1idcmhsRl1jqDji{&

ลองที่นี่!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.