Les acronymes peuvent bien évidemment limiter vos capteurs de messages

36

Pour cette raison, vous avez besoin d'un meilleur moyen de déterminer si une phrase est l'acronyme d'un mot. Vous pensez également qu'il serait utile de voir si la phrase et le mot en question sont des acronymes récursifs.

Ta tâche:

Soit un mot puis une phrase séparée par une ligne, sortie si la phrase est un acronyme et ensuite s'il s'agit d' un acronyme récursif . (La phrase contient ce qu'elle signifie)

  • L'entrée composera des caractères alphabétiques ainsi que des espaces.
  • Votre programme ne devrait pas être sensible à la casse.

Exemple d'entrée / sortie:

Cas 1:

Contribution:

Acronyms
Acronyms can really obviously narrow your message sensors

Sortie:

True 
True

Cas 2:

Contribution:

FAQ
frequently asked questions

Sortie:

True 
False

Cas 3:

Contribution:

foo
bar baz

Sortie:

False
False

Cas 4:

Contribution:

GNU
GNU is not Unix

Sortie:

False
False

Cas 5:

Contribution:

Aha
A huge Aha

Sortie:

True
True
Bleu
la source
69
Les acronymes peuvent recurse? Oh! Maintenant, vous faites sens.
Geobits
2
Non, tant que la sortie sera claire
Bleu
9
Cela me rappelle un XKCD: xkcd.com/917
ETHproductions
1
En relation.
Martin Ender
4
ABCDE: Un autre exemple de base clairement défini.
John Dvorak

Réponses:

10

Pyth, 19 18

&pqJrz0hCKcrw0)}JK

Cette affiche le résultat dans un format assez bizarre, comme: TrueFalse.

Vous pouvez l' essayer en ligne ou exécuter la suite de tests .

Explication:

&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
la source
15

Python 3, 89

Sauvegardé un tas d'octets grâce à SOPython.

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

La partie la plus compliquée de cette solution est h=tuple(a)==next(zip(*d)).
Cela décompresse la liste den zip et appelle ensuite nextpour renvoyer un tuple du premier élément de chaque itérable passé dans ziplequel est ensuite comparé un tuple de chaque lettre d'un ( tuple(a)).

Morgan Thrapp
la source
Vous pouvez économiser 7 octets en remplaçant [0]==l par .startswith(l).
Skyler
7

CJam, 21 à 20 octets

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

Essayez ce violon dans l’interprète CJam ou vérifiez tous les tests en même temps.

Comment ça marche

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
la source
4

Haskell, 81 à 80 octets

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

Le format de sortie n'est pas strictement défini, je renvoie donc une paire de booléens, par exemple p "Aha\na huge arm"-> (True,False).

nimi
la source
Aujourd'hui, j'ai entendu parler des patrons de modèle ( <-) - merci!
wchargin
4

Scala, 135 110 108 octets

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

Sauvegardé quelques octets en utilisant des arguments en ligne de commande (merci à J Atkin pour le conseil), en mettant les booléens en tant que tupel, en utilisant mkStringplutôt que new Stringet print au lieu de println.

EDIT: a mal interprété la question et a dû réimplémenter la solution

wastl
la source
3

Python 3, 106 octets

Au moins, ça a battu 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))
Beta Decay
la source
1
@muddyfish Peut-être une explication plus détaillée de chaque exemple empêcherait-elle que cela se produise à d'autres personnes.
Beta Decay
Plus de temps dans le bac à sable aurait-il aidé? D'après mon expérience (évidemment assez limitée), vous n'obtenez que des réponses alors que c'est presque au sommet
Blue
@muddyfish Eh bien, je ne sais pas combien de temps tu l'as laissé, donc, je ne sais pas
Beta Decay,
Je l'ai laissé là pendant une journée environ
Bleu
@muddyfish Une semaine est la norme recommandée
Beta Decay
3

AppleScript, 302 301 297 293 octets

Aw, putain ouais. Pas même dérangé que je perds, c'est compétitif pour AppleScript.

mettre x à (le dialogue d'affichage "" la réponse par défaut "") est retourné
mettre y à (dialogue d'affichage "" réponse par défaut "") les mots retournés
mettre n au nombre d'éléments de y
répéter n
essayer
sinon, le caractère n de l'élément de y 1 = le caractère n de (x en tant que texte) alors retourne {false, false}
fin
mettre n à n-1
fin
return {true, x est dans y}

Sorties en tant que:

{vrai faux}

Ou quelle que soit la réponse qui se trouve être.

Addison Crump
la source
2

PHP, 120 octets

Ne pas être sensible à la casse fait beaucoup de poids (26 octets). A réussi tous les cas de test:

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

Affiche deux valeurs bool sous cette forme:

bool(true)
bool(false)

Lit deux arguments depuis la ligne de commande, comme:

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)
);
insertusernamehere
la source
2

Rubis, 77 74 octets

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

Ruby, 52 octets

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

Exemple:

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

Matlab, 90 octets

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

Exemple (notez que Matlab affiche true/ falseas 1/ 0):

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

JavaScript ES6, 95 92 octets

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

Entrez les deux chaînes en tant que paramètres. Affiche un tableau avec deux valeurs: une pour chaque booléen.

Mwr247
la source
1
Je n'aurais pas pensé à utiliser un regex à la place de .indexOf. Bon travail! Cela r=eval(`/^${a}$/i`)fonctionnerait peut - être à la place de votre rconfiguration actuelle .
ETHproductions
@ETHproductions Et moi, je n'aurais pas pensé evalà un RegExpraccourcisseur d'objets. Merci pour le conseil!
Mwr247
0

GNU sed, 118 bytes

Nécessite un -rdrapeau, inclus dans le score en tant que +1. Notez que j'utilise \bune correspondance de limite de mot, même si je ne trouve pas cela documenté dans GNU sed. Ça marche pour moi ...

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

Étendu:

#!/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
la source
0

Groovy, 91 octets

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

Le format de sortie est [bool, bool]. Ceci est pris à partir des arguments de la ligne de commande.

J Atkin
la source
0

Lua 5.3, 182 octets

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
la source
0

R, 93 octets

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

Usage:

> 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
planificateur
la source
0

awk 137 octets

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)}'
  • Initialiser T="True";F="False"pour simplifier la sortie.
  • NR*NF<2{a=tolower($1)}: défini auniquement si la première ligne n'a qu'un seul champ.
  • END{...}: en supposant que deux lignes ...
    • for(i=1;i<=NF;i++)b=b substr(tolower($i),1,1): construit un acronyme récursif.
    • print(a==b?T:F)"\n"(a==tolower($1)?T:F): affiche le résultat des deux comparaisons, a==bet a==tolower($1).

Si quelqu'un sait comment optimiser la construction d'un acronyme récursif, n'hésitez pas à le suggérer.

hjk
la source
0

SpecBAS - 144 octets

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

La conversion des 2 entrées en majuscules enregistre les caractères par rapport à la conversion en minuscules. Peut maintenant avoir plusieurs affectations effectuées dans une seule LETdéclaration, ce qui aide également. Et TEXTsauve un personnage surPRINT .

Utilise 1/0 pour montrer vrai / faux (l'apostrophe déplace simplement la sortie vers la ligne suivante).

Brian
la source
0

Perl5, 90 octets

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

tricher un peu: 0 = tout faux, 1 = un vrai, 2 = tous les deux. Je ne suis pas un golfeur, mais je suis contrarié, mais Perl manque lors de la navigation!

($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 
Volonté
la source
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]

Testez l'exécution de l'extrait de code ci-dessous dans tout navigateur compatible 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
la source
0

JavaScript (ES6), 89 96 95 octets

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

Shucks ... Je pensais avoir tout réglé, mais apparemment, je me suis trompé.

Ceci définit une fonction anonyme qui prend en entrée deux chaînes, et retourne un tableau de deux éléments booléens. Le premier élément est calculé en comparant la première chaîne en minuscule au premier caractère de chaque mot de la deuxième chaîne. Le deuxième élément est calculé simplement en vérifiant si la deuxième chaîne contient le premier.

Voici une autre solution pour le deuxième élément; 2 octets plus courts, mais très peu de navigateurs le supportent:

p&&c.includes(a)
ETHproductions
la source
Vérifier si la deuxième chaîne contient la première échoue pourGNU: Gnus nettle unicorns
edc65
Veuillez vérifier à nouveau: essayé et ne fonctionne même pas: ReferenceError: l is not defined(manquant l=avant toLowerCase)
edc65
... corrigé ce bogue, il échoue pour 'GNU','GNU is not unix'(test 4) devrait être false, false
edc65
@ edc65 Shucks, j'ai effacé le l=tout en recherchant un bogue et j'ai oublié de le remettre. Merci de mentionner cela! L'autre cas de test doit également être corrigé.
ETHproductions
0

Pyke (sans titre lors de la publication), (non compétitif), 20 octets

l1c"jFh)J"iQl1qDji{&

Vous pouvez trouver le code source ici , la langue est complètement instable (premier test de test pour celui-ci) alors ne vous attendez pas à ce qu'il fonctionne à l'avenir (commit 8)

Ou 18 octets (stable)

l1idcmhsRl1jqDji{&

Essayez-le ici!

Bleu
la source