Isso é semelhante a Criar um acrônimo , mas há várias diferenças importantes, incluindo o método de buscar o acrônimo, e esse desafio, incluindo saída flexível.
Tarefa
Dada uma sequência (lista de caracteres / comprimento 1 é permitida) contendo apenas ASCII imprimível, imprima todas as letras maiúsculas na entrada que são precedidas por um espaço ou um traço ou são o primeiro caractere na entrada. String vazia é um comportamento indefinido.
Casos de teste:
Saída pode estar no formato de "TEST"
, ["T","E","S","T"]
ou o que quer que mais funciona para você.
Self-contained Underwater Breathing Apparatus
SUBA
a Programming Language
PL
NATO Atlantic TREATY Organization
NATO
DEFCON 2
D
hello, world!
light-Emitting dioDe
E
What Does the Fox Say?
WDFS
3D mov-Ies
I
laugh-Out Lou-D
OLD
Best friends FOREVE-r
BF
--
<space>
-- --a - - --
-- -- - - -- A
A
Step-Hen@Gmail-Mail Mail.CoM m
SHMM
Isso é código-golfe , então a resposta mais curta em bytes vence.
[email protected]
.Respostas:
V , 7 bytes
Experimente online!
Aqui está um hexdump para provar a contagem de bytes:
Explicação:
Este é curto tudo graças ao maravilhoso do V compressão regex .
fonte
-
são permitidos.R ,
6663 bytesExperimente online!
-3 bytes graças ao Scarabee
Uma função anônima; retorna o acrônimo como um vetor
c("N","A","T","O")
que é impresso implicitamente.Pela primeira vez, isso não é tão ruim no R! divide em
-
or(space)
, pega o primeiro elemento de cada um deles e retorna os que são maiúsculos (LETTERS
é um R embutido com letras maiúsculas), em ordem.fonte
function(s)(s=substr(strsplit(s,' |-')[[1]],1,1))[s%in%LETTERS]
Python 2 ,
5956 bytes-3 bytes graças a Lynn
Experimente online!
fonte
'@'<b<'['
, muito agradável solução +1'@'<b<'['>a in' -'
salva 3 bytes.Javascript 21 bytes
Pega uma entrada de string e gera uma matriz de strings contendo os caracteres acrônimos
Explicação
É apenas uma correspondência regex global para o limite de palavras seguido por uma letra maiúscula.
fonte
Retina ,
2117 bytesExperimente online!
Explicação
Produz as correspondências do regex
(?<=^| |-)[A-Z]
na entrada, uma por linha (!
).fonte
Dyalog APL,
2923 bytesCaso de teste de bônus: uma linguagem de programação (APL).
Retorna uma matriz de caracteres (mostra como o espaço separado no TIO).
Experimente online!
Postagem mais antiga, 29 bytes
Experimente online!
Quão?
'(\w)\w+'⎕R
- substitua cada agrupamento de caracteres alfabéticos'\1'
- com seu primeiro caractere~⍨
- remover todos os caracteres(⎕AV~⎕A)
- que não é uma maiúscula ASCIIfonte
Python, 53 bytes
Experimente online!
Uma expressão regular simples, com um lookahead para espaço ou traço. Em vez de corresponder ao início, coloque um espaço antes.
fonte
C #,
8478 bytesGuardado 6 bytes graças a @jkelm .
Experimente online!
Versão completa / formatada:
fonte
using System.Linq
na contagem de bytes seusing System.Collections.Generic
está isento? Existe algum consenso sobre quaisusing
são contáveis?using System.Linq;
é necessário para o código Linq na minha resposta. No entanto,IEnumerbale<char>
não faz parte da resposta e essa é a parte do código que precisausing System.Collections.Generic;
ser compilada.Julia 0.6.0 (57 bytes)
Explicação: Este é o meu primeiro código-golfe. Bem direto. Divida as palavras, imprima a primeira letra superior de cada uma.
Provavelmente é fácil fazer melhor usando regex, mas eu sou novo nesse
fonte
05AB1E , 11 bytes
Experimente online!
fonte
C # (.NET Core) , 108 bytes
Experimente online!
fonte
if
para um ternário pode economizar bytes. Isso inicia no índice2
, em vez de1
, simplesmente mudarint i=1
paraint i=0
corrigi-lo. Fora isso, acho que não há muito mais a fazer aqui.Geléia ,
1110 bytes-1 byte graças a Erik the Outgolfer (
Ḳ
divide em espaços> _ <)Um link monádico que recebe e retorna listas de caracteres.
Como um programa completo, aceita uma string e imprime o resultado.
Experimente online! ou veja uma suíte de testes .
Quão?
fonte
Ḳ
vez deṣ⁶
?Perl 5 , 25 bytes
Código de 24 bytes + 1 para
-n
.Irritante que
grep -P
suporta comprimento variável look-behind, mas Perl não :(.-1 byte graças a @Dada !
Experimente online! - inclui
-l
executar todos os testes de uma só vez.fonte
s///
ou$_=
para negar oprint
...s///
para resolver isso, mas não é óbvio ... Estou no trabalho, talvez tente mais tarde!MATL , 19 bytes
Experimente online!
fonte
Braquilog ,
252322 bytesExperimente online!
(-2 bytes graças a @Fatalize.)
fonte
Ṣ
vez de" "
salvar dois bytesJaponês ,
191614 bytes-2 bytes graças a Shaggy
Experimente online!
fonte
"(^| |-)%A"
para/^| |-)\A/
salvar um bytemf\A
->mÌ
para salvar 2 bytes.Swift 5 , 110 bytes
-5 graças a Coeur
Explicação detalhada
import Foundation
- Importa o móduloFoundation
essencial parazip()
a parte principal deste código.func f(s:[String]){...}
- Cria uma função com um parâmetros
, que é uma lista de Strings, representando os caracteres da entrada.for i in zip(s,[" "]+s){...}
- Repetei
através do zip da entrada e da entrada com um espaço adicionado no início, o que é muito útil para obter o caractere anterior na String.if
- Verifica se:i.0==i.0.uppercased()
- O caractere atual é maiúsculo,&&"- ".contains(i.1)
- e Se o caractere anterior for um espaço ou um traço.Se as condições acima forem atendidas, então:
print(i.0)
- O caractere é impresso, porque faz parte da sigla.fonte
import UIKit
vez deimport Foundation
.PowerShell , 43 bytes
Experimente online!
Desenrolado:
fonte
Python 3 , 67 bytes
Experimente online!
fonte
Python 3 ,
7370 bytesExperimente online!
Explicação
lambda n:
- Cria uma função lambda anônima com um parâmetro Stringn
.n[x]
- Obtém o caractere den
no índicex
.for x in range(len(n))
- Repete0
o comprimento den
, nomeando a variávelx
.if
- Verificações:'@'<n[x]<'['
- Se o caractere estiver em maiúsculas,and(' '+n)[x]in' -'
- E se for precedido por um espaço ou um traço na String formada por um espaço en
.fonte
i supper
e não faço ideia do porquê?.isupper()
, eu não tenho idéia do que você lê: pJavaScript (SpiderMonkey) , 62 bytes
Experimente online!
fonte
QuadS , 17 bytes
Experimente online!
fonte
Pitão,
1516 bytesSuíte de teste
fonte
Pitão, 12 bytes
Conjunto de teste aqui.
fonte
Bash (grep),
2928 bytesUma porta da minha resposta python, mas porque
pgrep
suporta lookbehinds de comprimento variável, é visivelmente mais curta (mesmo considerando a sobrecarga do python). Cole os casos de teste em um arquivo chamadoa
, a saída é de 1 caractere por linha.-1 Obrigado a Neil
fonte
^| |-
pode ser um teste mais curto?RProgN 2 , 18 bytes
Explicado
Experimente online!
fonte
PHP, 62 bytes
Execute como pipe
-nR
ou experimente on-line .outras soluções:
fonte
C ++, 168 bytes
Saída realizada através do parâmetro
fonte
#include<string>
e assumir que o argumentos
é umstd::string
?Lua ,
7975 bytesTente!
Coloquei um print () antes do final na versão try it, porque, caso contrário, está uma bagunça. Esse programa segue perfeitamente os requisitos de E / S e correspondência, mas sem essa nova linha extra, é muito difícil de ler.
A entrada é fornecida na forma de uma tabela de número: string, número incrementando em 1 a cada vez e começando em 1.
Explicação:
Ele faz loops através de uma combinação de cada sequência de entrada. A pesquisa gmatch é a seguinte:
[% - | ] - Agrupe, pesquise um - ou um espaço
% u - pesquisa por um caractere maiúsculo
Em seguida, para cada partida, imprime menos o traço ou espaço anterior
Edit: Golfed 4 bytes removendo a declaração de 'a' e adicionando o espaço à entrada dentro do loop for, além de alterar a sub-entrada para apenas 2 em vez de 2,2 (que produz resultados equivalentes)
fonte
Pitão , 12 bytes
Criado um ano após a resposta inicial.
Experimente online!
Pitão , 21 bytes
Resposta inicial.
Experimente online!
fonte
-|
é um byte a menos que[ -]