Remova o comentário de um programa COBOL!

64

O COBOL é uma linguagem muito antiga, no momento da escrita, tem 58 anos. É tão antigo, de fato, que tem uma peculiaridade muito interessante: os seis primeiros caracteres de cada linha são comentários.

Por que isso, você pergunta? Bem, esses 6 caracteres foram criados para serem usados ​​como números de linha, no dia em que os programas não eram completamente digitais e digitados em um computador.

Além disso, o sétimo caractere só pode fazer parte de um conjunto muito pequeno (geralmente é *para comentar a linha ou um espaço para separar o número da linha do código)

Mas e se você estiver em um sistema mais digital e quiser apenas o programa bruto?

O sistema de comentários

Existem dois tipos de comentários no COBOL: comentários de linha e os comentários "número da linha" mencionados acima.

Não é necessário comentar números de linhas: basta retirar os sete primeiros (seis mais um espaço) de cada linha.

000000 apple
000001 banana
celery donuts

se tornaria:

apple
banana
donuts

Os comentários de linha tornam um pouco mais difícil. Um comentário de linha é iniciado com um asterisco *colocado na posição de sétimo caractere na linha, da seguinte forma:

000323* this is a comment

Este não é um comentário de linha:

*00000 this isn't a comment

Para remover o comentário de uma linha, remova a linha inteira.

Um exemplo comentou "programa":

000000 blah blah
000001* apples
000002 oranges?
000003* yeah, oranges.
000*04 love me some oranges

A versão não comentada:

blah blah
oranges?
love me some oranges

Em outras palavras, para descomentar uma sequência, remova os seis primeiros caracteres de cada linha e retorne todos, exceto o primeiro caractere de cada linha que não começa com uma estrela.

O desafio

Crie um programa ou função que pega um programa comentado e retorna sua variante não comentada.

Esclarecimentos

  • Asteriscos ( *) nunca serão encontrados em nenhum lugar fora dos sete primeiros caracteres de uma linha (não estamos solicitando que você verifique a sintaxe)
  • Cada linha sempre terá pelo menos 7 caracteres.
  • Você pode assumir que o sétimo caractere é sempre um asterisco ou um espaço.
  • Entrada ou saída pode ser uma matriz ou lista.
  • Somente caracteres ASCII imprimíveis (mais nova linha) devem ser manipulados.
  • Você pode imprimir com uma nova linha à direita. Você também pode assumir que a entrada terá uma nova linha à direita, se assim desejar.

Pontuação

Como se trata de , a resposta com o mínimo de bytes vence!

AVISO LEGAL: Na verdade, eu não conheço COBOL e não reivindico. Se alguma das reivindicações sobre COBOL que fiz nesta pergunta estiver incorreta, não me responsabilizo.

LyricLy
fonte
23
Os números de linha não são comentários. Eles são uma coluna. Terminologia, por favor.
user207421
11
Todos os seus exemplos têm um espaço após o *. Isso é uma coincidência?
Neil
6
Antigo não implica automaticamente mau. Eu trabalhei em uma loja Agile COBOL. Eles poderiam fazer coisas no AS / 400 que não podíamos fazer em Java.
Thorbjørn Ravn Andersen
11
Na verdade, eu escrevi um analisador COBOL CopyBook que só funciona se os campos não estiverem compactados. Apenas o transforma em JSON key:{key:{key:length,key:length}}. Tira todos os dados de formatação e digitação.
Magic Octopus Urn
4
Pode haver um espaço nos 6 primeiros caracteres?

Respostas:

104

COBOL (GnuCOBOL), 191 + 17 = 208 bytes

Eu "aprendi" o COBOL para esta resposta, portanto provavelmente não está totalmente preparado para o golfe.

Este é um programa completo, tendo como base o que eu presumo ser uma entrada padrão e escrevendo como o que eu presumo ser uma saída padrão. Talvez um dia eu volte a isso e (1) determine se COBOL tem funções e, se houver, (2) veja se uma solução de função seria mais curta.

A contagem de bytes inclui sinalizadores de programa e compilador ( -freee -frelax-syntax).

program-id.c.select i assign keyboard line sequential.fd i. 1 l pic X(80). 88 e value 0.open input i perform until e read i end set e to true end-read if not e and l(7:1)<>'*'display l(8:73).

Experimente Online

Programa ungolfed

program-id. c.

select i assign to keyboard organization line sequential.

fd i.
    1 l pic X(80).
    88 e value 0.

open input i
perform until e
    read i
        end set e to true
    end-read
    if not e and l(7:1) <> '*'
        display l(8:73).

Limitações

Tecnicamente, a saída não está correta. Da minha pesquisa superficial, parece que a única maneira prática de armazenar uma string no COBOL é em um buffer de tamanho fixo. Eu escolhi um tamanho de buffer de 80 caracteres, pois esse é o limite de comprimento de linha para programas de formato fixo. Isso apresenta duas limitações:

  • Linhas com mais de 80 caracteres são truncadas.
  • Linhas menores que 80 caracteres são preenchidas à direita com espaços.

Eu acho que isso é aceitável, pois, bem, é COBOL. Caso contrário, eu estaria disposto a procurar alternativas.

Agradecimentos

  • -166 bytes graças a Edward H
  • -2 bytes graças a hornj
Jakob
fonte
10
Asteriscos (*) nunca vai ser encontrado em qualquer lugar fora dos primeiros sete caracteres em uma linha ... e ainda ...;)
Cœur
@ Cœur Haha sim ... mas minha solução não usa essa suposição, então talvez seja apropriado!
Jakob
8
Você ganha uma internet.
27417 Joshua
@ Cœur, exceto em uma instrução COMPUTE.
ClickRick
11
Parabéns pelo seu distintivo dourado!
caird coinheringaahing
20

Python 2 , 39 38 37 bytes

-1 byte graças ao LyricLy. -1 byte graças ao Mego.

lambda s:[i[7:]for i in s if'*'>i[6]]

Experimente online!

E / S como listas de cadeias.

totalmente humano
fonte
2
Salve um byte substituindo !=por <, já que o ponto de código de um espaço é menor que o de um asterisco e o sétimo caractere sempre será um espaço ou um asterisco.
precisa saber é o seguinte
Então, o sétimo personagem sempre será um espaço ou um asterisco?
totallyhuman
Sim. You may assume the seventh character is always an asterisk or a space.
precisa saber é o seguinte
11
Economize 1 byte comif'*'!=i[6]
Mego
13

Perl 5 , 19 + 1 (-p) = 20 16 bytes

-4 bytes com as sugestões de Pavel

s/.{6}( |.*)//s

Experimente online!

Xcali
fonte
2
Você pode salvar três bytes se você substituir (\*.*$| )com( |.*)
Pavel
Não tão curto quanto @ comentário de Pavel, mas / /;$_=/\* /?$,:$'é uma outra alternativa
Dom Hastings
Você também não precisa do ^.
Pavel
11

V , 13 11 10 bytes

Î6x<<
çª/d

Experimente online!

Explicação

Î       ' On every line
  x     ' delete the first...
 6      ' 6 characters
   <<   ' and unindent the line (removes the leading space)
ç /     ' on every line
 ª      ' matching \*
   d    ' delete the line

Hexdump:

00000000: ce36 783c 3c0a e7aa 2f64                 .6x<<.../d
nmjcman101
fonte
Você não poderia fazer em 7xvez de 6x<<?
DJMcMayhem
11
Em seguida, ele exclui o*
nmjcman101
Funcionaria para excluir os lins *primeiro e depois fazer Î7x? (assumindo que um * não pode estar nos caracteres 0-5)
12431234123412341234123 28/08
@ 12431234123412341234123 infelizmente não, porque pode haver um *nos 6 primeiros caracteres.
nmjcman101
9

Paradoc (v0.2.8 +), 8 bytes (CP-1252)

µ6>(7#;x

Pega uma lista de linhas e resulta em uma lista de linhas não comentadas.

Explicação:

μ        .. Map the following block over each line (the block is terminated
         .. by }, but that doesn't exist, so it's until EOF)
 6>      .. Slice everything after the first six characters
   (     .. Uncons, so now the stack has the 6th character on top
         .. and the rest of the line second
    7#   .. Count the multiplicity of factors of 7 in the character
         .. (treated as an integer, so '*' is 42 and ' ' is 32)
      ;  .. Pop the top element of the stack (the rest of the line)...
       x .. ...that many times (so, don't pop if the 6th character was a
         .. space, and do pop if it was an asterisk)

Oi, eu escrevi uma linguagem de programação de golfe. :)

Ainda estou desenvolvendo isso e adicionei / aprimorei um monte de built-ins depois de tentar escrever isso para que haja maneiras mais razoáveis ​​de diferenciar entre um espaço e um asterisco do que " 7#", mas acho que isso tornaria isso não-competitivo. É uma sorte que ainda funcionou (isso usa apenas os recursos da v0.2.8, que comprometi há três dias).

betaveros
fonte
"Oi, eu escrevi uma linguagem de programação para golfe." A versão que você está usando foi lançada antes ou depois do lançamento deste desafio?
Mast
11
Ele funciona nesta versão há três dias: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros
Certo, você mencionou que, mas de alguma forma ele não registrar explicitamente ...
Mast
7

Oitava, 23 bytes

@(s)s(s(:,7)~=42,8:end)

Experimente online!

rahnema1
fonte
4
Eu nunca soube que o Octave poderia fazer cordas assim ... Pegue isso, MATLAB. xD
Sanchises
Desde a introdução do R2016b de matrizes de strings , tenho certeza de que isso também funcionaria no MATLAB @Sanchises! Atualmente, só tenho acesso ao R2015b, portanto não posso confirmar. O MATLAB pode fazê-lo em 74 bytes, provavelmente menos @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), onde sestá uma matriz de células, não uma matriz de cadeias. Usando regexp ou algo provavelmente seria mais curto, mas o método que eu escrevi é comparável à metodologia nesta resposta apenas para idade MATLAB
Wolfie
6

Geléia , 11 9 bytes

ṫ€7Ḣ⁼¥Ðf⁶

Experimente online!

Entradas e saídas como uma lista de linhas.

-2 bytes graças a @EriktheOutgolfer e @JonathanAllan

Como funciona

ṫ€7Ḣ=¥Ðf⁶
 €           On each line:
ṫ 7            Replace the line with line[7:]
      Ðf     Keep all lines that meet condition:
     ¥         Dyad:
   Ḣ             First Element (modifies line)
    =            Equals
        ⁶    Space
fireflame241
fonte
7$€pode ser€7
Erik the Outgolfer
reduza-o para 9 da seguinte maneira:ṫ€7Ḣ⁼¥Ðf⁶
Jonathan Allan
5

PowerShell , 32 bytes

$input-replace'^.{6}( |.*)'-ne''

Experimente online!

A entrada do pipeline é fornecida como uma matriz de cadeias, -replacefunciona em todas as cadeias e -ne ''(não é igual à cadeia vazia) aplicada a uma matriz, atua para filtrar as linhas em branco.

TessellatingHeckler
fonte
4

C, 63 59 55 48 47 46 bytes

Obrigado a " um usuário anônimo " por se livrar de mais um byte.

Agradeço a Felix Palmen por me lembrar de " Você pode assumir que o sétimo caractere é sempre um asterisco ou um espaço. ", Que eliminou mais um byte.

f(char**a){for(;*a;++a)(*a)[6]&2||puts(*a+7);}

Use como:

char** program = { "000000 apple", "000001 banana", "celery donuts", 0 };
f(program);

Experimente online!

simon
fonte
3

Na verdade , 13 bytes

⌠6@tp' =*⌡M;░

A entrada e a saída são feitas como uma lista de strings.

Explicação:

⌠6@tp' =*⌡M;░
⌠6@tp' =*⌡M    for each line:
 6@t             discard the first 6 characters
    p            pop the first character of the remainder
     ' =         is it a space?
        *        multiply the string by the boolean - returns the string if true, and an empty string if false
           ;░  filter out empty strings

Experimente online!

Mego
fonte
3

Gaia , 9 bytes

6>¦'*«⁈ḥ¦

Uma função que aceita uma lista de cadeias e retorna uma lista de cadeias.

Experimente online!

Explicação

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each
Gato de negócios
fonte
Conto dez caracteres e, como três não são ASCII, eles não levam mais que um byte?
WGroleau
@WGroleau e «são ambos 1 caractere. Os idiomas de golfe que usam caracteres não-ascii (talvez exceto Neim) usam codificações personalizadas, que permitem que todos esses não-ASCIIs sejam contados como bytes únicos. Aqui está a página de código de Gaia .
Xcoder
@ Mr.Xcoder Neim também tem uma codificação.
Erik the Outgolfer
3

Pitão , 9 bytes

Observe que isso só funciona se pelo menos 1 linha não for um comentário e pelo menos 1 linha for um comentário. Todas as outras soluções funcionam em todos os casos.

-2 bytes graças a @pizzakingme !

m>d7.m@b6

Experimente aqui!

Explicação

m>d7.m@b6     - Full program with implicit input. Takes input as a list of Strings.

m>d7          - All but the first 7 letters of 
    .m   (Q)  - The input, filtered for its minimal value using the < operator on
      @b6     - the 7th character -- note that "*" is greater than " "
              - Implicitly Output the result.

Pitão , 11 bytes

tMfqhTdm>d6

Experimente aqui!

Explicação

tMfqhTdm> d6 - Programa completo com entrada implícita. Recebe entrada como uma lista de Strings.

       m> d6 - Remova os 6 primeiros caracteres de cada linha.
    hT - Pega o primeiro caractere de cada um.
  fq d - Mantenha aqueles que têm o primeiro caractere em um asterisco.
tM - Remova o primeiro caractere de cada um.
            - Saída implicitamente.

Pitão , 11 bytes

m>d7fqd@T6Q

Experimente aqui!

Explicação

m> d7fq @ T6dQ - Programa completo. Recebe entrada como uma lista de Strings.

      @ T6 - O sexto caractere de cada um.
    fq dQ - Mantenha as linhas que têm um espaço como ^.
m> d7 - Corte os 7 primeiros caracteres.
             - Saída implicitamente.

Pitão , 12 bytes

tMfnhT\*m>d6

Experimente aqui!

Explicação

tMfnhT \ * m> d6 - Programa completo com entrada implícita. Recebe entrada como uma lista de Strings.

        m> d6 - Remova os 6 primeiros caracteres de cada linha.
    hT - Pega o primeiro caractere de cada um.
  fn \ * - filtra aqueles que não são iguais a um asterisco.
tM - Remova o primeiro caractere de cada um.
             - Saída implicitamente.

Pitão , 12 bytes

m>d7fn@T6\*Q

Experimente aqui!

Explicação

m> d7fn @ T6 \ * Q - Programa completo. Recebe entrada como uma lista de Strings.

      @ T6 - Pega o sexto caractere de cada string
    fn \ * Q - E filtre aqueles que não são iguais a um asterisco.
m> d7 - Corte os 7 primeiros caracteres.
              - Saída implicitamente.
Mr. Xcoder
fonte
" Mantenha aqueles que possuem o primeiro caractere como asterisco. " Acho que você quis dizer "Mantenha aqueles cujo primeiro caractere NÃO é um asterisco".
Kevin Cruijssen
m>d7.m@b6deve funcionar em 9 bytes, abusando que *é quando o espaço em ordem lexicográfica
Dave
Eu posso editá-lo com o link explicação / teste, se você quiser!
Dave
@pizzakingme Ficaria feliz se você editasse, porque estou no celular. Muito obrigado e não se esqueça de se creditar pela nova solução!
Mr. Xcoder
Isso funciona se todas as linhas forem comentários de linha? (Não tenho certeza se você tem que lidar com este caso)
betaveros
3

GNU Sed, 19 + 2 = 21 caracteres

Requer -Eargumento para sedhabilitar expressões regulares estendidas.

/^.{6}\*/d;s/^.{7}/
Daniel Schepler
fonte
você poderia fazer a mesma coisa que o cara perl,s/^.{6}( |.*)//g
markasoftware
3

Java 8, 40 bytes

Expressões regulares: quase, mas não exatamente, a ferramenta errada para o trabalho. Lambda de Stringpara String(atribuir a Function<String, String>). A entrada deve ter uma nova linha à direita.

s->s.replaceAll("(?m)^.{6}( |.*\\n)","")

Experimente Online

Agradecimentos

Jakob
fonte
A ferramenta certa! :)
Olivier Grégoire
3

Haskell , 27 25 bytes

A versão de Laikoni é mais curta que a minha:

f n=[x|' ':x<-drop 6<$>n]

Experimente online!

Minha versão:

f n=[drop 7x|x<-n,x!!6<'*']

Experimente online!

jferard
fonte
25 bytes: f n=[x|' ':x<-drop 6<$>n].
Laikoni
@Laikoni Isso é bom !! Eu não sabia que era possível combinar padrões em um gerador de compreensão de lista.
jferard
3

C (gcc) , 53 48 46 bytes

x;main(y){for(y=&x;gets(y-6);x&2||puts(y+1));}

Experimente online!

-5 bytes: Foi muito complicado reduzir esse " programa inteiro " para o mesmo tamanho da função de gurka . Agora ele está escrevendo fora dos limites (em ambas as direções) de uma matriz do tipo errado e conta com pequenos endian e inteiros de 4 bytes para encontrar o asterisco ... mas, ei, funciona;)

-2 bytes: Bem, se já escrevemos em algum local "aleatório" .bss, por que se preocupar em declarar uma matriz ! Então aqui vem o programa de manipulação de strings que não usa o chartipo nem uma matriz.

Felix Palmen
fonte
Agradável! E o *x&2fez lembrar de mim, então eu deveria ser capaz de fazer a barba alguns bytes off minha resposta :-) "Você pode assumir o sétimo personagem é sempre um asterisco ou um espaço."
simon
@gurka thanks: D -2, hehe
Felix Palmen
3

R, 47 45 bytes

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)
Sven Hohenstein
fonte
Se você usar a entrada como uma lista de cadeias, acho que você pode encurtar o regex para "^. {6} (|. * ​​$)" Para -6.
CriminallyVulgar
@CriminallyVulgar Correct. Nesse caso, eu também poderia abandonar o pe=Targumento. No entanto, não tenho certeza se a entrada como uma lista de seqüências de caracteres é permitida.
Sven Hohenstein
Do OP:Input or output may be a matrix or list.
totallyhuman
@CriminallyVulgar O problema é a presença de cadeias vazias na saída.
Sven Hohenstein
@SvenHohenstein Ah, claro, eu não tinha considerado isso.
CriminallyVulgar
3

SNOBOL4 (CSNOBOL4) , 72 70 66 50 bytes

R	INPUT POS(6) (' '  REM . OUTPUT | '*') :S(R)
END

Experimente online!

A correspondência de padrões no SNOBOL é bem diferente da regex, mas a idéia aqui ainda é a mesma: se uma linha corresponder a "seis caracteres e depois um asterisco", remova-a, caso contrário, remova os sete primeiros caracteres da linha e imprima o resultado.

Agora, agora, ele tira melhor proveito do operador de atribuição condicional do SNOBOL.

O padrão POS(6) (' ' REM . OUTPUT | '*')é interpretado como:

Começando na posição 6, combine um espaço ou um asterisco e, se você corresponder a um espaço, atribua o restante da linha a OUTPUT.

Giuseppe
fonte
3

Vim, 14 bytes

Ctrl-VG5ld:%g/\*/dEnter

Carregando o arquivo de entrada como o buffer a ser editado, digite os comandos acima. Saída é o novo buffer.

David Heyman
fonte
2

Ruby , 39 38 36 29 23 22 20 + 1 = 21 bytes

$_[/.{6}( |.*
)/]=''

Experimente online!

Usos -p sinalizador.

Explicação:

O -psinalizador adiciona um bloco implícito ao redor do código; portanto, o código que realmente é executado fica assim:

while gets
    $_[/.{6}( |.*
)/]=''

    puts $_
end

gets lê uma linha de texto e armazena seu resultado em $_ .

$_[/.../]=''remove a primeira ocorrência do regex ...em$_ .

/.{6}( |.*\n)/corresponde a 6 de qualquer caractere no início de uma linha, seguido por um espaço ou pelo restante da linha. Como o espaço aparece primeiro, ele tentará remover apenas os 6 primeiros caracteres e um espaço antes de tentar remover a linha inteira.

$_ é impresso e esse processo é repetido para cada linha.

Pavel
fonte
11
As chamadas de método no Ruby não precisam de parênteses, removê-las economizará um byte.
M-chrzan
2

JavaScript (ES6), 48 bytes

s=>s.map(c=>c[6]<"*"?console.log(c.substr(7)):1)

Experimente online!

sgtdck
fonte
11
Isso não é uma função nem um programa completo, pois assume que a entrada está armazenada z, o que não é permitido aqui. No entanto, você pode transformá-lo em uma função de seta anônima, a fim de torná-lo válido.
você precisa saber é o seguinte
11
@cairdcoinheringaahing você está absolutamente certo. Atualização da solução - não tenho certeza de quais são as regras em relação ao (e ao )redor do fn, adicionadas para garantir.
Sgtdck 27/08/17
11
Você não precisa da ()função ao redor, mas, caso contrário, ela ficará bem.
caird coinheringaahing
2

> <>, 57 53 bytes

>i~i~i~i~i~i~i67*=\
<o$/?:$/?=a:;?(0:i<
\~$/~\ $
/  <o\?/

experimente online

Explicação

>i~i~i~i~i~i~i67*=    Read in the first seven bytes of the line
 i~i~i~i~i~i~         Read, and discard 6 characters
             i        Read the seventh
              67*=    Check if the seventh character was an 
                      asterisk (and leave that value on the stack );

<o$/?:$/?=a:;?(0:i<    Read characters until a newline or eof
                 i     Read the next character of the line
            ;?(0:      If it's a -1, terminate the program
       /?=a:           If it's a newline, break out of the loop
   /?:$                If the seventh character was not an asterisk
<o$                    Output this character
\~$/                   otherwise discard it

   /~\ $    Having reached the end of the line, output
/  <o\?/    the newline only if it was not a comment

Editar: 53 bytes

>   i~i~i~i~i~i~i67*=\
/?=a<o/?$@:$@:$;?(0:i<
~   \~/

Basicamente, o mesmo material de antes, mas reestruturado ligeiramente

Como nota lateral: estou decepcionado que ninguém tenha feito isso ainda.

Sasha
fonte
2

C #, 160 145 90 89 bytes

t=>{var o="";foreach(var s in i.Split('\n'))if(s[6]!=42)o+=s.Substring(7)+"\n";return o;}

Agradecimentos a Pavel & auhmaan por reduzir o tamanho.

snorepion
fonte
Bem-vindo ao PPCG! Sugiro que você adicione um link do try it online à sua resposta para que outras pessoas possam testar seu código. Além disso, ótima primeira (bem, segunda) resposta!
precisa saber é o seguinte
Você pode fazer isso mais curto escrevendo um lambda na format=>{...}
Pavel
@LyricLy Tentei fazer isso, na verdade, mas por algum motivo, isso não funciona lá. Ele funciona perfeitamente bem em um aplicativo de console do VS, no entanto.
snorepion
@Pavel Como assim? Não tenho certeza se fiz completamente corretamente; Eu nunca precisei usar uma expressão lambda antes.
snorepion
Sim, exatamente. Você pode testá-lo atribuindo-o a a func<string, string>.
Pavel
2

Python 3, 71 bytes (sem regexp)

def f(s):
 for w in s.split('\n'):
  t=w[6:]
  if t[0]!='*':print(t[1:])

Funciona!

>>> s="""000000 blah blah
000001* apples
000002 oranges?
000003* yeah, oranges.
000*04 love me some oranges"""
>>> f(s)
blah blah
oranges?
love me some oranges
Sagitário
fonte
1

JavaScript, 44 34 bytes

44 riscado ainda é regular 44.

6 bytes salvos graças ao tsh

a=>a.replace(/^.{6}( |.*\n)/gm,'')

Experimente online!


fonte
s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
tsh
s.match(/(?<=^.{6} ).*/mg) ESNext (Fora do padrão, estágio3) Chrome62 +
tsh
@tsh. Até que exista um intérprete estável que o permita, suponho que não conte como uma linguagem de programação válida.
Parece que isso não produz a saída correta se a última linha for uma linha de comentário.
precisa saber é o seguinte
@LyricLy. É porque eu assumi que a entrada sempre conterá uma nova linha à direita. Você pode ver que funciona, existe uma linha vazia após a entrada. Se não devo assumi-lo, a correção custará 1 byte (adicionando ?depois \n).
1

C ++ (GCC), 121 112 bytes

Obrigado a @gurka por salvar 9 bytes!

#import<bits/stdc++.h>
void f(std::list<std::string>l){for(auto s:l)if(s[6]-42)std::cout<<s.substr(7,s.size());}

Recebe a entrada como uma lista de linhas.

Experimente online!

Steadybox
fonte
#import? Além disso, acho que não há problema em omitir as inclusões padrão.
24617 simon
#importnão é C ++ padrão, mas pelo menos o GCC e o MSVC o suportam. Omitir alguns inclui trabalhos com C, mas não com C ++. O código não funciona sem as inclusões, portanto, elas devem ser contadas no total pelo número de contas.
Steadybox
Ah, achei que você poderia pular as inclusões, pois não vê importrespostas em python ou usingem c #. Além disso, não #include <bits/stdc++.h>seria mais curto para sua resposta?
24517 Simon
@ gurka Sim, seria mais curto. Obrigado!
Steadybox
@ gurka as importações são contadas nas respostas do Python, mas o Python tem muitas funções que não precisam ser importadas. C # tende a não ter usando a instrução, porque geralmente é mais curto para escrever do system.foo()queusing system;foo()
Pavel
1

Java 8, 95 54 53 bytes

s->s.filter(x->x.charAt(6)<33).map(x->x.substring(7))

-42 bytes graças a @ OliverGrégoire , usando a em Stream<String>vez de Stringcomo entrada e saída.

Explicação:

Experimente aqui.

s->                          // Method with Stream<String> as parameter and return-type
  s.filter(x->x.charAt(6)<33)//  Filter out all lines containing an asterisk as 7th char
   .map(x->x.substring(7))   //  And remove the first 7 characters from the remaining lines
                             // End of method (implicit / single-line body)
Kevin Cruijssen
fonte
Parece que você pode usar um String[]ou List<String>como entrada para -12 bytes.
Jakob
Ou Stream<String>se isso puder ajudar. Exemplo:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Olivier Grégoire
11
Ah, é necessário filtrar ... depois s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))para 54 bytes.
Olivier Grégoire
11
Use em <42vez de !=42"Você pode assumir que o sétimo caractere é sempre um asterisco ou um espaço".
Olivier Grégoire
11
@ OlivierGrégoire Ah, errei essa regra, caso contrário eu teria feito isso sozinho. Obrigado pela correção.
Kevin Cruijssen