Riattiva un programma COBOL!


65

COBOL è una lingua molto antica, al momento in cui scrivo ha 58 anni. È così vecchio, infatti, che ha una stranezza molto interessante: i primi sei caratteri di ogni riga sono commenti.

Perché chiedi questo? Bene, quei 6 personaggi dovevano essere usati come numeri di riga, ai tempi in cui i programmi non erano completamente digitali e digitati su un computer.

Inoltre, il settimo carattere potrebbe far parte solo di un set molto piccolo (di solito è *necessario commentare la riga o uno spazio per separare il numero di riga dal codice)

Ma cosa succede se si utilizza un sistema più digitale e si desidera solo il programma non elaborato?

Il sistema dei commenti

Esistono due tipi di commenti in COBOL: commenti di riga e commenti di "numero di riga" di cui sopra.

I numeri di riga senza commenti sono semplici: basta togliere i primi sette (sei più uno spazio singolo) da ogni riga.

000000 apple
000001 banana
celery donuts

potrebbe diventare:

apple
banana
donuts

I commenti in linea lo rendono un po 'più difficile. Un commento di riga viene avviato con un asterisco *posizionato nella settima posizione del carattere sulla riga, in questo modo:

000323* this is a comment

Questo non è un commento di riga:

*00000 this isn't a comment

Per rimuovere il commento da un commento di riga, basta rimuovere l'intera riga.

Un esempio di "programma" commentato:

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

La versione non commentata:

blah blah
oranges?
love me some oranges

In altre parole, per rimuovere il commento da una stringa, rimuovere i primi sei caratteri di ogni riga, quindi restituire tutti tranne il primo carattere di ogni riga che non inizia con una stella.

La sfida

Creare un programma o una funzione che accetta un programma commentato e restituisce la sua variante non commentata.

chiarimenti

  • Gli asterischi ( *) non si troveranno mai al di fuori dei primi sette caratteri di una riga (non ti stiamo chiedendo di verificare la sintassi)
  • Ogni riga avrà sempre almeno 7 caratteri.
  • Puoi assumere che il settimo carattere sia sempre un asterisco o uno spazio.
  • L'input o l'output possono essere una matrice o un elenco.
  • Devono essere gestiti solo caratteri ASCII stampabili (più newline).
  • È possibile eseguire l'output con una nuova riga finale. Puoi anche supporre che l'input avrà una nuova riga finale, se lo desideri.

punteggio

Dato che si tratta di , la risposta con il minor numero di byte vince!

NOTA BENE: In realtà non conosco COBOL e non pretendo di farlo. Se una delle affermazioni su COBOL che ho formulato in questa domanda sono errate, non mi assumo alcuna responsabilità.


23
I numeri di riga non sono commenti. Sono una colonna. Terminologia per favore.
user207421

2
I tuoi esempi hanno tutti uno spazio dopo il *. È una coincidenza?
Neil,

1
@Neil Sì, lo è. L'ottavo personaggio può essere qualsiasi cosa.
Lirico

6
Vecchio non implica automaticamente il male. Ho lavorato in un negozio COBOL Agile. Potevano fare cose sull'AS / 400 che non potevamo fare in Java.
Thorbjørn Ravn Andersen,

4
Può esserci uno spazio tra i primi 6 caratteri?

Risposte:


104

COBOL (GnuCOBOL), 191 + 17 = 208 byte

Ho "imparato" COBOL per questa risposta, quindi probabilmente non è completamente golfato.

Questo è un programma completo, prendendo input su ciò che presumo sia input standard e scrivendo su ciò che presumo sia output standard. Forse un giorno tornerò su questo e (1) determinerò se COBOL ha funzioni e, in tal caso, (2) vedo se una soluzione di funzione sarebbe più breve.

Il conteggio dei byte include i flag di programma e compilatore ( -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).

Provalo online

Programma non golfato

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

limitazioni

L'output non è, tecnicamente parlando, corretto. Dalla mia rapida ricerca, sembra che l'unico modo pratico per memorizzare una stringa in COBOL sia in un buffer di dimensioni fisse. Ho scelto una dimensione del buffer di 80 caratteri, poiché questo è il limite di lunghezza della linea per i programmi a formato fisso. Ciò presenta due limiti:

  • Le righe più lunghe di 80 caratteri vengono troncate.
  • Le righe più corte di 80 caratteri sono riempite a destra con spazi.

Immagino che questo sia accettabile poiché, beh, è ​​COBOL. Altrimenti, sarei disposto a cercare alternative.

Ringraziamenti

  • -166 byte grazie a Edward H
  • -2 byte grazie a hornj

10
Gli asterischi (*) non si troveranno mai al di fuori dei primi sette caratteri di una riga ... eppure ...;)
Cœur

@ Cœur Haha sì ... ma la mia soluzione non usa questo presupposto, quindi forse è appropriato!
Jakob,

8
Vinci una internet.
Giosuè,

@ Cœur tranne in un'istruzione COMPUTE.
ClickRick

1
Congratulazioni per il tuo badge d'oro!
caird coinheringaahing il

20

Python 2 , 39 38 37 byte

-1 byte grazie a LyricLy. -1 byte grazie a Mego.

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

Provalo online!

I / O come elenchi di stringhe.


2
Salvare un byte sostituendolo !=con <, poiché il punto di codice di uno spazio è inferiore a quello di un asterisco e il settimo carattere sarà sempre uno spazio o un asterisco.
Lirico

Quindi, il settimo personaggio sarà sempre uno spazio o un asterisco?
totalmente umano il

Sì. You may assume the seventh character is always an asterisk or a space.
Lirico

1
Salva 1 byte conif'*'!=i[6]
Mego


11

V , 13 11 10 byte

Î6x<<
çª/d

Provalo online!

Spiegazione

Î       ' 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

Non potresti farlo 7xinvece di 6x<<?
DJMcMayhem

1
Quindi cancella*
nmjcman101 il

Funzionerebbe per eliminare prima i lins *e poi fare Î7x? (supponendo che un * non possa non essere nei caratteri 0-5)
12431234123412341234123

@ 12431234123412341234123 purtroppo no, perché *nei primi 6 caratteri può esserci un .
nmjcman101,

9

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

µ6>(7#;x

Prende un elenco di righe e genera un elenco di righe non commentate.

Spiegazione:

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

Ciao, ho scritto un linguaggio di programmazione per il golf. :)

Sto ancora sviluppando questo e ho aggiunto / modificato un sacco di incorporati dopo aver provato a scrivere questo in modo che ci siano modi più ragionevoli per distinguere tra uno spazio e un asterisco di " 7#", ma penso che ciò renderebbe questo non competitivo. È una fortuna che abbia funzionato (utilizza solo le funzionalità della versione 2.0.8, che ho eseguito tre giorni fa).


"Ciao, ho scritto un linguaggio di programmazione golf." La versione che stai utilizzando è stata rilasciata prima o dopo la pubblicazione della sfida?
Albero

1
Funziona con questa versione di tre giorni fa: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros

Bene, l'hai detto tu, ma in qualche modo non si è registrato esplicitamente ...
Mast


7

Ottava, 23 byte

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

Provalo online!


4
Non ho mai saputo che Octave potesse fare corde del genere ... Prendi quello, MATLAB. xD
Sanchises,

Dal momento che l'introduzione di R2016b di array di stringhe , sono abbastanza sicuro che questo avrebbe funzionato in MATLAB anche @Sanchises! Al momento ho solo accesso a R2015b, quindi non posso confermare. MATLAB può farlo in 74 byte, probabilmente meno @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), dove si strova un array di celle, non un array di stringhe. L'uso di regexp o qualcosa del genere sarebbe probabilmente più breve, ma il metodo che ho scritto è paragonabile alla metodologia in questa risposta solo per il vecchio MATLAB
Wolfie,

6

Gelatina , 11 9 byte

ṫ€7Ḣ⁼¥Ðf⁶

Provalo online!

Ingressi e uscite come un elenco di linee.

-2 byte grazie a @EriktheOutgolfer e @JonathanAllan

Come funziona

ṫ€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

7$€può essere€7
Erik the Outgolfer

portalo giù a 9 in questo modo:ṫ€7Ḣ⁼¥Ðf⁶
Jonathan Allan il

5

PowerShell , 32 byte

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

Provalo online!

L'input della pipeline arriva come un array di stringhe, -replacefunziona su ogni stringa e -ne ''(non uguale a stringa vuota) applicato a un array, agisce per filtrare le righe vuote.


4

C, 63 59 55 48 47 46 byte

Grazie a " un utente anonimo " per sbarazzarsi di un altro byte.

Grazie a Felix Palmen per avermi ricordato di " Puoi supporre che il settimo carattere sia sempre un asterisco o uno spazio ", che si è rasato di un altro byte.

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

Usa come:

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

Provalo online!


3

In realtà , 13 byte

⌠6@tp' =*⌡M;░

L'input e l'output vengono eseguiti come un elenco di stringhe.

Spiegazione:

⌠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

Provalo online!


3

Gaia , 9 byte

6>¦'*«⁈ḥ¦

Una funzione che accetta un elenco di stringhe e restituisce un elenco di stringhe.

Provalo online!

Spiegazione

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each

Conto dieci caratteri e poiché tre non sono ASCII, non prendono più di un byte?
WGroleau,

@WGroleau e «sono entrambi 1 carattere. I linguaggi del golf che usano caratteri non ascii (forse tranne Neim) usano codifiche personalizzate, che consentono a tutti quei non ASCII di essere conteggiati come byte singoli. Ecco la code page di Gaia .
Mr. Xcoder,

@ Mr.Xcoder Neim ha anche una codifica.
Erik the Outgolfer,

3

Pyth , 9 byte

Nota che questo funziona solo se almeno 1 riga non è un commento e almeno 1 riga è un commento. Tutte le altre soluzioni funzionano in tutti i casi.

-2 byte grazie a @pizzakingme !

m>d7.m@b6

Provalo qui!

Spiegazione

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.

Pyth , 11 byte

tMfqhTdm>d6

Provalo qui!

Spiegazione

tMfqhTdm> d6 - Programma completo con input implicito. Accetta input come un elenco di stringhe.

       m> d6: rimuove i primi 6 caratteri di ogni riga.
    hT - Ottieni il primo personaggio di ciascuno.
  fq d - Mantieni un asterisco a quelli che hanno il primo carattere.
tM: rimuove il primo carattere di ciascuno.
            - Uscita implicita.

Pyth , 11 byte

m>d7fqd@T6Q

Provalo qui!

Spiegazione

m> d7fq @ T6dQ - Programma completo. Accetta input come un elenco di stringhe.

      @ T6 - Il sesto carattere di ciascuno.
    fq dQ - Mantiene le linee che hanno uno spazio come ^.
m> d7 - Ritaglia i primi 7 caratteri.
             - Uscita implicita.

Pyth , 12 byte

tMfnhT\*m>d6

Provalo qui!

Spiegazione

tMfnhT \ * m> d6 - Programma completo con input implicito. Accetta input come un elenco di stringhe.

        m> d6: rimuove i primi 6 caratteri di ogni riga.
    hT - Ottieni il primo personaggio di ciascuno.
  fn \ * - Filtra quelli che non sono uguali a un asterisco.
tM: rimuove il primo carattere di ciascuno.
             - Uscita implicita.

Pyth , 12 byte

m>d7fn@T6\*Q

Provalo qui!

Spiegazione

m> d7fn @ T6 \ * Q - Programma completo. Accetta input come un elenco di stringhe.

      @ T6 - Ottieni il sesto carattere di ogni stringa
    fn \ * Q - E filtra quelli che non sono uguali a un asterisco.
m> d7 - Ritaglia i primi 7 caratteri.
              - Uscita implicita.

" Mantieni quelli che hanno il primo personaggio un asterisco. " Penso che tu intendessi "Mantieni quelli di cui il primo personaggio NON è un asterisco."
Kevin Cruijssen,

m>d7.m@b6dovrebbe funzionare a 9 byte, abusando cioè di *spazio dopo l'ordine lessicografico
Dave,

Posso modificarlo con il link spiegazione / test se vuoi!
Dave,

@pizzakingme Sarei felice se volessi modificare, perché sono sul cellulare. Grazie mille e non dimenticare di accreditare te stesso per la nuova soluzione!
Mr. Xcoder,

Funziona se tutte le righe sono commenti di riga? (Non sono sicuro che tu debba gestire questo caso)
betaveros

3

GNU Sed, 19 + 2 = 21 caratteri

Richiede -Eargomento per sedabilitare espressioni regolari estese.

/^.{6}\*/d;s/^.{7}/

potresti fare la stessa cosa del ragazzo perl,s/^.{6}( |.*)//g
markasoftware il

3

Java 8, 40 byte

Espressioni regolari: quasi, ma non del tutto, lo strumento sbagliato per il lavoro. Lambda da Stringa String(assegnare a Function<String, String>). L'input deve avere una nuova riga finale.

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

Provalo online

Ringraziamenti


Lo strumento giusto! :)
Olivier Grégoire il

3

Haskell , 27 25 byte

La versione di Laikoni è più corta della mia:

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

Provalo online!

La mia versione:

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

Provalo online!


25 byte: f n=[x|' ':x<-drop 6<$>n].
Laikoni,

@Laikoni È bello !! Non sapevo che fosse possibile abbinare gli schemi in un generatore di comprensione di una lista.
jferard,

3

C (gcc) , 53 48 46 byte

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

Provalo online!

-5 byte: è stato molto complicato ridurre questo " intero programma " alle stesse dimensioni della funzione di gurka . Ora sta scrivendo fuori dai limiti (in entrambe le direzioni) di una matrice di tipo errato e si basa su piccoli endian e numeri interi a 4 byte per trovare l'asterisco ... ma hey, funziona;)

-2 byte: bene, se scriviamo già in una posizione "casuale" .bss, perché preoccuparsi di dichiarare un array ! Quindi ecco che arriva il programma di gestione delle stringhe che non utilizza il chartipo un array.


Bello! E *x&2mi hanno fatto ricordare "Puoi supporre che il settimo personaggio sia sempre un asterisco o uno spazio", quindi dovrei essere in grado di radere alcuni byte dalla mia risposta :-)
simon

@gurka grazie: D -2, hehe
Felix Palmen,

3

R, 47 45 byte

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)

Se prendi l'input come un elenco di stringhe penso che puoi abbreviare la regex a "^. {6} (|. * ​​$)" Per -6.
CriminallyVulgar

@CriminallyVulgar Correct. In questo caso, potrei anche abbandonare l' pe=Targomento. Tuttavia, non sono sicuro che sia consentito l'input come elenco di stringhe.
Sven Hohenstein,

Input or output may be a matrix or list.
Dall'OP

@CriminallyVulgar Il problema è la presenza di stringhe vuote nell'output.
Sven Hohenstein,

@SvenHohenstein Ah, certo, non ci avevo pensato.
CriminallyVulgar

3

SNOBOL4 (CSNOBOL4) , 72 70 66 50 byte

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

Provalo online!

La corrispondenza dei motivi in ​​SNOBOL è abbastanza diversa da regex ma l'idea qui è sempre la stessa: se una riga corrisponde a "sei caratteri e quindi un asterisco", rimuovila, altrimenti rimuovi i primi sette caratteri della riga e stampa il risultato.

Questo ora sfrutta al meglio l'operatore di assegnazione condizionale di SNOBOL.

Lo schema POS(6) (' ' REM . OUTPUT | '*')è interpretato come:

A partire dalla posizione 6, abbina uno spazio o un asterisco e, se abbini uno spazio, assegna il resto della linea a OUTPUT.


3

Vim, 14 byte

Ctrl-VG5ld:%g/\*/dEnter

Caricamento del file di input come buffer da modificare, quindi immettere i comandi sopra. L'output è il nuovo buffer.


2

Rubino , 39 38 36 29 23 22 20 + 1 = 21 byte

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

Provalo online!

Usa la -pbandiera.

Spiegazione:

Il -pflag aggiunge un blocco implicito attorno al codice, quindi il codice che viene effettivamente eseguito è simile al seguente:

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

    puts $_
end

getslegge una riga di testo e ne memorizza il risultato $_.

$_[/.../]=''rimuove la prima occorrenza del regex ...in $_.

/.{6}( |.*\n)/corrisponde a 6 di qualsiasi carattere all'inizio di una riga, seguito da uno spazio o dal resto della riga. Poiché lo spazio viene visualizzato per primo, tenterà di rimuovere solo i primi 6 caratteri e uno spazio prima di tentare di rimuovere l'intera riga.

$_ viene quindi stampato e questo processo viene ripetuto per ogni riga.


1
Le chiamate di metodo in Ruby non necessitano di parentesi, rimuoverle ti farà risparmiare un byte.
m-chrzan,

2

Pyke , 9 byte

36 4C 3E 23 64 DE 29 6D 74

Provalo qui!

Leggibile:

6L>#d.^)mt

Provalo qui!

6L>        -   [i[6:] for i in input]
   #d.^)   -  filter(i.startswith(" ") for  i in ^)
        mt - [i[-1:] for i in ^]


2

JavaScript (ES6), 48 byte

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

Provalo online!


1
Questa non è né una funzione, né un programma completo in quanto si presume che l'input sia memorizzato z, cosa non consentita qui. È possibile tuttavia trasformarlo in una funzione freccia anonima, al fine di renderlo valido.
caird coinheringaahing il

1
@cairdcoinheringaahing hai perfettamente ragione. Aggiornato la soluzione - non sono sicuro di quali siano le regole riguardanti (e )intorno al fn, le ho aggiunte per sicurezza.
sgtdck,

1
Non è necessaria la ()funzione around, ma per il resto sembra a posto.
caird coinheringaahing il

2

> <>, 57 53 byte

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

provalo online

Spiegazione

>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

Modifica: 53 byte

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

Sostanzialmente le stesse cose di prima, ma leggermente ristrutturate

Come nota a margine: sono deluso che nessuno l'abbia ancora fatto in cobol.


2

C #, 160 145 90 89 byte

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

Grazie a Pavel & auhmaan per la riduzione delle dimensioni.


Benvenuti in PPCG! Suggerirei di aggiungere un link di prova online alla tua risposta in modo che altri possano testare il tuo codice. Oltre a ciò, ottima prima (bene, seconda) risposta!
Lirico

Puoi accorciarlo scrivendo un lambda nella format=>{...}
Pavel

@LyricLy ho provato a farlo, in realtà, ma per qualche ragione, questo non funziona lì. Funziona perfettamente bene in un'app console VS, però.
russarepion

@Pavel Ti piace? Non sono sicuro di averlo fatto completamente correttamente; Non ho mai avuto bisogno di usare un'espressione lambda prima.
russarepion

Si, esattamente. Puoi testarlo assegnandolo a func<string, string>.
Pavel,

2

Python 3, 71 byte (nessuna regexp)

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

Funziona!

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


1

JavaScript, 44 34 byte

Il barrato 44 è ancora regolare 44.

6 byte salvati grazie a tsh

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

Provalo online!


s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
TSH


@tsh. Fino a quando non esiste un interprete stabile che lo consenta, suppongo che non valga come un linguaggio di programmazione valido.

Non sembra che questo dia l'output corretto se l'ultima riga è una riga di commento.
Lirico

@LyricLy. È perché ho supposto che l'input conterrà sempre una nuova riga finale. Puoi vedere che funziona se c'è una riga vuota dopo l'input. Se non dovessi assumerlo, la correzione avrà un costo di 1 byte (aggiungendo ?dopo \n).

1

C ++ (GCC), 121 112 byte

Grazie a @gurka per aver salvato 9 byte!

#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());}

Accetta input come un elenco di righe.

Provalo online!


#import? Inoltre, penso che sia OK omettere le inclusioni standard.
simon,

#importnon è C ++ standard, ma almeno GCC e MSVC lo supportano. L'omissione di alcune include opere con C, ma non con C ++. Il codice non funziona senza le inclusioni, quindi devono essere conteggiati nel conto totale.
Steadybox,

Ah, ho pensato che potevi semplicemente saltare le inclusioni poiché non vedi alcuna importrisposta in Python o usingC #. Inoltre, non #include <bits/stdc++.h>sarebbe più breve per la tua risposta?
simon,

@gurka Sì, sarebbe più breve. Grazie!
Steadybox,

@gurka le importazioni sono contate nelle risposte di Python, è solo che Python ha molte funzioni che non devono essere importate. C # tende a non avere un'istruzione using perché è generalmente più breve da scrivere system.foo()diusing system;foo()
Pavel

1

Java 8, 95 54 53 byte

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

-42 byte grazie a @ OliverGrégoire , usando un Stream<String>invece di Stringcome in e output.

Spiegazione:

Provalo qui.

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)

Sembra che tu possa usare un String[]o List<String>come input per -12 byte.
Jakob,

O Stream<String>se ciò può aiutare. Esempio:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Olivier Grégoire,

1
Oh, è necessario filtrare ... quindi s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))per 54 byte.
Olivier Grégoire,

1
Usa <42invece di !=42perché "Puoi assumere che il settimo carattere sia sempre un asterisco o uno spazio".
Olivier Grégoire,

1
@ OlivierGrégoire Ah, ho mancato quella regola, altrimenti l'avrei fatto da solo. Grazie per la correzione.
Kevin Cruijssen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.