Odkomentuj program COBOL!

64

COBOL jest bardzo starym językiem, w chwili pisania ma 58 lat. Jest tak stary, że ma bardzo ciekawe dziwactwo: pierwsze sześć znaków każdej linii to komentarze.

Dlaczego to pytasz? Cóż, te 6 znaków miało być używanych jako numery linii, w czasach, gdy programy nie były całkowicie cyfrowe i zostały napisane na komputerze.

Ponadto siódmy znak może być tylko częścią bardzo małego zestawu (zwykle jest *to komentarz linii lub spacja w celu oddzielenia numeru linii od kodu)

Ale co, jeśli korzystasz z bardziej cyfrowego systemu i chcesz tylko surowy program?

System komentarzy

W języku COBOL istnieją dwa rodzaje komentarzy: komentarze do linii i wspomniane komentarze do „numeru linii”.

Odkomentowanie numerów linii jest proste: wystarczy usunąć pierwsze siedem znaków (sześć plus jedna spacja) z każdej linii.

000000 apple
000001 banana
celery donuts

stanie się:

apple
banana
donuts

Komentarze liniowe utrudniają to. Komentarz do linii rozpoczyna się gwiazdką *umieszczoną na siódmej pozycji znaku w linii, tak:

000323* this is a comment

To nie jest komentarz liniowy:

*00000 this isn't a comment

Aby anulować komentarz do komentarza, po prostu usuń całą linię.

Przykład skomentował „program”:

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

Wersja bez komentarza:

blah blah
oranges?
love me some oranges

Innymi słowy, aby odkomentować ciąg, usuń pierwsze sześć znaków każdej linii, a następnie zwróć wszystkie oprócz pierwszego znaku każdej linii, która nie zaczyna się od gwiazdki.

Wyzwanie

Utwórz program lub funkcję, która pobiera skomentowany program i zwraca jego nieskomentowany wariant.

Wyjaśnienia

  • Gwiazdki ( *) nigdy nie zostaną znalezione nigdzie poza pierwszymi siedmioma znakami w linii (nie prosimy o weryfikację składni)
  • Każda linia zawsze będzie miała co najmniej 7 znaków.
  • Możesz założyć, że siódma postać jest zawsze gwiazdką lub spacją.
  • Dane wejściowe lub wyjściowe mogą być macierzą lub listą.
  • Obsługiwane są tylko drukowalne znaki ASCII (plus nowa linia).
  • Możesz generować z końcowym znakiem nowej linii. Możesz również założyć, że na wejściu pojawi się nowa linia, jeśli tak wybierzesz.

Punktacja

Ponieważ jest to , wygrywa odpowiedź z najmniejszą liczbą bajtów!

ZASTRZEŻENIE: W rzeczywistości nie znam języka COBOL i nie twierdzę. Jeśli jakiekolwiek stwierdzenia dotyczące COBOL, które wypowiedziałem w tym pytaniu, są nieprawidłowe, nie biorę odpowiedzialności.

LyricLy
źródło
23
Numery linii nie są komentarzami. Są kolumną. Proszę o terminologię.
user207421,
1
Wszystkie twoje przykłady mają spację po *. Czy to przypadek?
Neil,
6
Stare nie oznacza automatycznie złego. Pracowałem w sklepie Agile COBOL. Mogli robić rzeczy na AS / 400, których nie mogliśmy robić w Javie.
Thorbjørn Ravn Andersen
1
Heh ... Właściwie napisałem parser COBOL CopyBook, który działa tylko wtedy, gdy pola nie są spakowane. Po prostu przekształca go w JSON key:{key:{key:length,key:length}}. Usuwa wszystkie dane formatowania i dane do pisania.
Magic Octopus Urn
4
Czy w pierwszych 6 znakach może być spacja?

Odpowiedzi:

104

COBOL (GnuCOBOL), 191 + 17 = 208 bajtów

„Nauczyłem się” języka COBOL dla tej odpowiedzi, więc prawdopodobnie nie jest w pełni golfa.

Jest to pełny program, który bierze udział w tym, co uważam za standardowe wejście i pisze do tego, co uważam za standardowe wyjście. Być może kiedyś wrócę do tego i (1) ustalę, czy COBOL ma funkcje, a jeśli tak, (2) sprawdzę, czy rozwiązanie funkcji byłoby krótsze.

Liczba bajtów obejmuje flagi programu i kompilatora ( -freei -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).

Wypróbuj online

Program bez golfa

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

Ograniczenia

Dane wyjściowe są technicznie nieprawidłowe. Z moich pobieżnych badań wynika, że ​​jedynym praktycznym sposobem przechowywania łańcucha w języku COBOL jest bufor o stałym rozmiarze. Wybrałem rozmiar bufora 80 znaków, ponieważ jest to limit długości linii dla programów o stałym formacie. To stwarza dwa ograniczenia:

  • Linie dłuższe niż 80 znaków są obcinane.
  • Linie krótsze niż 80 znaków są wypełnione prawą spacją.

Domyślam się, że jest to dopuszczalne, ponieważ cóż, to COBOL. Jeśli nie, chętnie przyjrzę się alternatywom.

Podziękowanie

  • -166 bajtów dzięki Edwardowi H.
  • -2 bajty dzięki hornj
Jakob
źródło
10
Gwiazdki (*) nigdy nie zostaną znalezione nigdzie poza pierwszymi siedmioma znakami w linii ... a jednak ...;)
Cœur
@ Cœur Haha tak ... ale moje rozwiązanie nie wykorzystuje tego założenia, więc może jest właściwe!
Jakob
8
Wygrywasz jeden internet.
Joshua,
@ Cœur, z wyjątkiem instrukcji COMPUTE.
ClickRick,
1
Gratuluję złotej odznaki!
caird coinheringaahing
20

Python 2 , 39 38 37 bajtów

-1 bajt dzięki LyricLy. -1 bajt dzięki Mego.

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

Wypróbuj online!

I / O jako listy ciągów.

całkowicie ludzki
źródło
2
Zapisz bajt, zastępując !=go <, ponieważ kod spacji jest niższy niż gwiazdka, a siódmym znakiem zawsze będzie spacja lub gwiazdka.
LyricLy
Więc siódma postać zawsze będzie spacją lub gwiazdką?
całkowicie ludzki,
Tak. You may assume the seventh character is always an asterisk or a space.
LyricLy
1
Zaoszczędź 1 bajt zif'*'!=i[6]
Mego
13

Perl 5 , 19 + 1 (-p) = 20 16 bajtów

-4 bajty z sugestiami Pavela

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

Wypróbuj online!

Xcali
źródło
2
Można zapisać trzy bajty, jeśli zastąpi (\*.*$| )się( |.*)
Pavel
Nie tak krótki jak komentarz @ Pavela, ale / /;$_=/\* /?$,:$'jest inną alternatywą
Dom Hastings
Ty także nie potrzebujesz ^.
Pavel
11

V , 13 11 10 bajtów

Î6x<<
çª/d

Wypróbuj online!

Wyjaśnienie

Î       ' 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
źródło
Nie możesz 7xtego zrobić zamiast 6x<<?
DJMcMayhem
1
Następnie usuwa*
nmjcman101
Czy zadziałałoby *najpierw usunąć linie z, a potem zrobić Î7x? (zakładając, że * nie może być w
znakach
@ 12431234123412341234123 niestety nie, ponieważ może być *w pierwszych 6 znakach.
nmjcman101
9

Paradoc (v0.2.8 +), 8 bajtów (CP-1252)

µ6>(7#;x

Pobiera listę wierszy i daje listę niepomocowanych wierszy.

Wyjaśnienie:

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

Cześć, napisałem golfowy język programowania. :)

Nadal pracuję nad tym i dodałem / poprawiłem kilka wbudowanych elementów po próbie napisania tego, aby były bardziej rozsądne sposoby na odróżnienie spacji od gwiazdki niż „ 7#”, ale wydaje mi się, że to uniemożliwiłoby konkurowanie. Całe szczęście, że nadal działało (używa tylko funkcji z wersji 0.2.8, które popełniłem trzy dni temu).

betaveros
źródło
„Cześć, napisałem golfowy język programowania”. Czy wersja, której używasz, została wydana przed opublikowaniem tego wyzwania lub po nim?
Maszt
1
Działa w tej wersji sprzed trzech dni: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros
Racja, wspomniałeś o tym, ale jakoś się nie zarejestrowało wyraźnie ...
Mast
1
@Mast To naprawdę nie ma znaczenia.
Martin Ender
7

Oktawa, 23 bajty

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

Wypróbuj online!

rahnema1
źródło
4
Nigdy nie wiedziałem, że Octave może robić takie struny ... Weź to, MATLAB. xD
Sanchises
Od czasu wprowadzenia przez R2016b tablic ciągów , jestem pewien, że zadziałałoby to również w MATLABie @Sanchises! Mam obecnie dostęp tylko do R2015b, więc nie mogę tego potwierdzić. MATLAB może to zrobić w 74 bajtach, prawdopodobnie mniej @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), gdzie sjest tablica komórek, a nie tablica łańcuchów. Użycie wyrażenia regularnego lub czegoś takiego byłoby prawdopodobnie krótsze, ale metoda, którą napisałem, jest porównywalna do metodologii opisanej w tej odpowiedzi tylko dla starej MATLAB
Wolfie
6

Galaretka , 11 9 bajtów

ṫ€7Ḣ⁼¥Ðf⁶

Wypróbuj online!

Wejścia i wyjścia jako lista linii.

-2 bajty dzięki @EriktheOutgolfer i @JonathanAllan

Jak to działa

ṫ€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
źródło
7$€może być€7
Erik the Outgolfer
zdejmijmy do 9 w ten sposób:ṫ€7Ḣ⁼¥Ðf⁶
Jonathan Allan
5

PowerShell , 32 bajty

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

Wypróbuj online!

Dane wejściowe potoku pojawiają się jako tablica ciągów, -replacedziałają na każdym łańcuchu i -ne ''(nie równe pustemu łańcuchowi) zastosowane do tablicy, odfiltrowują puste linie.

TessellatingHeckler
źródło
4

C, 63 59 55 48 47 46 bajtów

Dzięki „ anonimowemu użytkownikowi ” za usunięcie kolejnego bajtu.

Dzięki Felixowi Palmenowi za przypomnienie mi: „ Możesz założyć, że siódma postać jest zawsze gwiazdką lub spacją. ”, Która straciła jeszcze jeden bajt.

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

Użyj jak:

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

Wypróbuj online!

Szymon
źródło
3

Właściwie 13 bajtów

⌠6@tp' =*⌡M;░

Dane wejściowe i wyjściowe są wykonywane jako lista ciągów.

Wyjaśnienie:

⌠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

Wypróbuj online!

Mego
źródło
3

Gaia , 9 bajtów

6>¦'*«⁈ḥ¦

Funkcja przyjmująca listę ciągów i zwracająca listę ciągów.

Wypróbuj online!

Wyjaśnienie

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each
Business Cat
źródło
Liczę dziesięć znaków, a ponieważ trzy nie są kodami ASCII, czy nie zajmują więcej niż bajt?
WGroleau
@WGroleau i «oba mają 1 postać. Nasze języki gry w golfa, które używają znaków innych niż ascii (może poza Neimem), używają niestandardowych kodowań, które pozwalają na liczenie wszystkich tych znaków poza ASCII jako pojedynczych bajtów. Oto strona kodowa Gaia .
Pan Xcoder,
@ Mr.Xcoder Neim też ma kodowanie.
Erik the Outgolfer
3

Pyt , 9 bajtów

Pamiętaj, że działa to tylko wtedy, gdy co najmniej 1 linia nie jest komentarzem, a co najmniej 1 linia to komentarz. Wszystkie pozostałe rozwiązania działają we wszystkich przypadkach.

-2 bajty dzięki @pizzakingme !

m>d7.m@b6

Wypróbuj tutaj!

Wyjaśnienie

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 bajtów

tMfqhTdm>d6

Wypróbuj tutaj!

Wyjaśnienie

tMfqhTdm> d6 - Pełny program z niejawnym wejściem. Pobiera dane wejściowe jako listę ciągów.

       m> d6 - Usuń pierwsze 6 znaków z każdej linii.
    hT - zdobądź pierwszy znak każdego z nich.
  fq d - Zachowaj gwiazdkę, która ma pierwszą postać.
TM - Usuń pierwszy znak każdego z nich.
            - Wyjście niejawne.

Pyth , 11 bajtów

m>d7fqd@T6Q

Wypróbuj tutaj!

Wyjaśnienie

m> d7fq @ T6dQ - Pełny program. Pobiera dane wejściowe jako listę ciągów.

      @ T6 - Szósty znak każdego z nich.
    fq dQ - Zachowaj linie ze spacją jako ^.
m> d7 - Przytnij pierwsze 7 znaków.
             - Wynik niejawny.

Pyth , 12 bajtów

tMfnhT\*m>d6

Wypróbuj tutaj!

Wyjaśnienie

tMfnhT \ * m> d6 - Pełny program z niejawnym wejściem. Pobiera dane wejściowe jako listę ciągów.

        m> d6 - Usuń pierwsze 6 znaków z każdej linii.
    hT - zdobądź pierwszy znak każdego z nich.
  fn \ * - Filtruj te, które nie są równe gwiazdce.
TM - Usuń pierwszy znak każdego z nich.
             - Wyjście niejawne.

Pyth , 12 bajtów

m>d7fn@T6\*Q

Wypróbuj tutaj!

Wyjaśnienie

m> d7fn @ T6 \ * Q - Pełny program. Pobiera dane wejściowe jako listę ciągów.

      @ T6 - Uzyskaj szósty znak każdego ciągu
    fn \ * Q - I odfiltruj te, które nie są równe gwiazdce.
m> d7 - Przytnij pierwsze 7 znaków.
              - Wynik niejawny.
Pan Xcoder
źródło
Zachowaj te, które mają pierwszą postać, gwiazdką. ” Myślę, że miałeś na myśli „Zachowaj te, których pierwsza postać NIE jest gwiazdką”.
Kevin Cruijssen
m>d7.m@b6powinien działać na 9 bajtach, nadużywając, że *jest po spacji w porządku leksykograficznym
Dave
Jeśli chcesz, mogę edytować link z wyjaśnieniem / testem!
Dave
@pizzakingme Byłbym zadowolony, gdybyś mógł edytować, ponieważ jestem na telefonie komórkowym. Bardzo dziękuję i nie zapomnij o kredytowaniu nowego rozwiązania!
Pan Xcoder
Czy to działa, jeśli wszystkie wiersze są komentarzami wiersza? (Nie jestem pewien, czy musisz poradzić sobie z tą sprawą)
betaveros
3

GNU Sed, 19 + 2 = 21 znaków

Wymaga -Eargumentu, aby sedwłączyć rozszerzone wyrażenia regularne.

/^.{6}\*/d;s/^.{7}/
Daniel Schepler
źródło
możesz zrobić to samo, co facet perla,s/^.{6}( |.*)//g
markasoftware
3

Java 8, 40 bajtów

Wyrażenia regularne: po prostu niewłaściwe narzędzie do pracy, ale nie do końca. Lambda od Stringdo String(przypisanie do Function<String, String>). Dane wejściowe muszą mieć końcowy znak nowej linii.

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

Wypróbuj online

Podziękowanie

Jakob
źródło
Właściwe narzędzie! :)
Olivier Grégoire,
3

Haskell , 27 25 bajtów

Wersja Laikoni jest krótsza niż moja:

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

Wypróbuj online!

Moja wersja:

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

Wypróbuj online!

Jferard
źródło
25 bajtów: f n=[x|' ':x<-drop 6<$>n].
Laikoni
@Laikoni To miło !! Nie wiedziałem, że możliwe jest dopasowanie wzorców w generatorze listy.
jferard
3

C (gcc) , 53 48 46 bajtów

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

Wypróbuj online!

-5 bajtów: Bardzo trudno było sprowadzić ten „ cały program ” do tego samego rozmiaru, co funkcja gury . Teraz pisze poza granicami (w obu kierunkach) tablicy niewłaściwego typu i polega na małej liczbie całkowitej Endian i 4 bajtach, aby znaleźć gwiazdkę ... ale hej, to działa;)

-2 bajty: Cóż, jeśli już piszemy do jakiejś „losowej” .bsslokalizacji, po co w ogóle zadawać sobie trud deklarowania tablicy ! Więc tutaj jest program obsługi ciąg, który używa ani ten chartyp ani tablicę.

Felix Palmen
źródło
Miły! I *x&2sprawiło, że pamiętam: „Możesz założyć, że siódma postać jest zawsze gwiazdką lub spacją.”, Więc powinienem być w stanie ogolić kilka bajtów z mojej odpowiedzi :-)
simon
@gurka dzięki: D -2, hehe
Felix Palmen
3

R, 47 45 bajtów

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)
Sven Hohenstein
źródło
Jeśli weźmiesz dane wejściowe jako listę ciągów znaków, myślę, że możesz skrócić wyrażenie regularne do „^. {6} (|. * ​​$)” Dla -6.
CriminallyVulgar
@CriminallyVulgar Correct. W takim przypadku mógłbym również odrzucić pe=Targument. Nie jestem jednak pewien, czy dane wejściowe jako listę ciągów znaków są dozwolone.
Sven Hohenstein
Z PO:Input or output may be a matrix or list.
całkowicie człowiek
@CriminallyVulgar Problemem jest obecność pustych łańcuchów na wyjściu.
Sven Hohenstein
@SvenHohenstein Ah, oczywiście, nie zastanawiałem się nad tym.
CriminallyVulgar
3

SNOBOL4 (CSNOBOL4) , 72 70 66 50 bajtów

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

Wypróbuj online!

Dopasowywanie wzorców w SNOBOL różni się od wyrażeń regularnych, ale idea jest taka sama: jeśli linia pasuje do „sześciu znaków, a następnie gwiazdki”, usuń ją, w przeciwnym razie usuń pierwsze siedem znaków linii i wydrukuj wynik.

To teraz faktycznie lepiej wykorzystuje operator przypisania warunkowego SNOBOL.

Wzór jest POS(6) (' ' REM . OUTPUT | '*') jest interpretowany jako:

Zaczynając od pozycji 6, dopasuj spację lub gwiazdkę, a jeśli dopasujesz spację, przypisz resztę wiersza do OUTPUT.

Giuseppe
źródło
3

Vim, 14 bajtów

Ctrl-VG5ld:%g/\*/dEnter

Ładowanie pliku wejściowego jako bufora do edycji, a następnie wprowadź powyższe polecenia. Dane wyjściowe to nowy bufor.

David Heyman
źródło
2

Rubinowy , 39 38 36 29 23 22 20 + 1 = 21 bajtów

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

Wypróbuj online!

Używa -p flagi.

Wyjaśnienie:

-pFlaga dodaje niejawny blok wokół kodu, więc kod, który faktycznie staje się uruchomić wygląda następująco:

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

    puts $_
end

getsczyta wiersz tekstu i zapisuje jego wynik $_.

$_[/.../]=''usuwa pierwsze wystąpienie wyrażenia regularnego ...w $_.

/.{6}( |.*\n)/dopasowuje 6 dowolnych znaków na początku linii, po których następuje spacja lub reszta linii. Ponieważ spacja pojawia się pierwsza, spróbuje usunąć tylko pierwsze 6 znaków i spację przed próbą usunięcia całej linii.

$_ jest następnie drukowany i proces ten powtarza się dla każdej linii.

Pavel
źródło
1
Wywołania metod w Rubim nie wymagają nawiasów, usunięcie ich uratuje bajt.
m-chrzan
2

JavaScript (ES6), 48 bajtów

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

Wypróbuj online!

sgtdck
źródło
1
Nie jest to ani funkcja, ani pełny program, ponieważ zakłada, że ​​dane wejściowe są przechowywane z, co tutaj nie jest dozwolone. Możesz jednak zmienić go w anonimową funkcję strzałki, aby była ważna.
caird coinheringaahing
1
@cairdcoinheringaahing masz absolutną rację. Zaktualizowałem rozwiązanie - nie jestem pewien, jakie są reguły dotyczące (i )otaczania fn, dodałem je na pewno.
sgtdck
1
Nie potrzebujesz tej ()funkcji, ale poza tym wygląda dobrze.
caird coinheringaahing
2

> <>, 57 53 bajtów

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

spróbuj online

Wyjaśnienie

>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

Edycja: 53 bajty

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

Zasadniczo takie same rzeczy jak poprzednio, ale nieco zrestrukturyzowane

Na marginesie: jestem rozczarowany, że nikt jeszcze tego nie zrobił w kobolu.

Sasha
źródło
2

C #, 160 145 90 89 bajtów

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

Dzięki Pavel & auhmaan za zmniejszenie rozmiaru.

snorepion
źródło
Witamy w PPCG! Sugeruję dodanie do odpowiedzi linku „ Wypróbuj online”, aby inni mogli przetestować Twój kod. Poza tym świetna pierwsza (no, druga) odpowiedź!
LyricLy
Możesz to skrócić, pisząc lambda w formiet=>{...}
Pavel
@LyricLy Tak naprawdę próbowałem to zrobić, ale z jakiegoś powodu to nie działa. Działa to jednak doskonale w aplikacji konsoli VS.
snorepion
@Pavel Podoba ci się? Nie jestem pewien, czy zrobiłem to całkowicie poprawnie; Nigdy wcześniej nie potrzebowałem używać wyrażenia lambda.
snorepion
Tak, dokładnie. Możesz to przetestować, przypisując do func<string, string>.
Pavel
2

Python 3, 71 bajtów (bez wyrażeń regularnych)

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

To działa!

>>> 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
Strzelec
źródło
1

JavaScript, 44 34 bajtów

Przekreślone 44 jest nadal regularne 44.

6 bajtów zapisanych dzięki tsh

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

Wypróbuj online!


źródło
s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
tsh
s.match(/(?<=^.{6} ).*/mg) ESNext (niestandardowy, etap 3) Chrome62 +
tsh
@tsh. Dopóki nie będzie stabilnego interpretera, który na to pozwala, przypuszczam, że nie liczy się on jako prawidłowy język programowania.
Nie wydaje się, aby to dawało poprawny wynik, jeśli ostatni wiersz jest wierszem komentarza.
LyricLy
@LyricLy. Jest tak, ponieważ założyłem, że dane wejściowe zawsze będą zawierać nową linię końcową. Możesz zobaczyć, że to działa, jeśli po wprowadzeniu jest pusta linia. Jeśli nie powinienem tego zakładać, wtedy naprawa będzie kosztować 1 bajt (dodawanie ?po \n).
1

C ++ (GCC), 121 112 bajtów

Dzięki @gurka za uratowanie 9 bajtów!

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

Pobiera dane wejściowe jako listę linii.

Wypróbuj online!

Steadybox
źródło
#import? Myślę też, że można pominąć standardowe dołączenia.
simon
#importnie jest standardowym C ++, ale przynajmniej GCC i MSVC go obsługują. Pominięcie niektórych obejmuje pracę z C, ale nie z C ++. Kod nie działa bez uwzględnienia, więc należy je liczyć w całkowitej liczbie bajtów.
Steadybox
Aha, myślałem, że możesz po prostu pominąć dołączenia, ponieważ nie widzisz żadnych importw odpowiedziach na python lub usingw odpowiedziach w języku C #. Czy odpowiedź nie #include <bits/stdc++.h>byłaby krótsza?
simon
@gurka Tak, byłoby krótsze. Dzięki!
Steadybox
@gurka import jest liczony w odpowiedziach na Pythona, po prostu Python ma wiele funkcji, które nie wymagają importowania. C # zwykle nie używa instrukcji, ponieważ jest zwykle krótszy do napisania system.foo()niżusing system;foo()
Pavel
1

Java 8, 95 54 53 bajtów

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

-42 bajty dzięki @ OliverGrégoire , używając Stream<String>zamiast zamiast Stringjako wejścia i wyjścia.

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło
Wygląda na to, że możesz użyć String[]lub List<String>jako danych wejściowych dla -12 bajtów.
Jakob
Lub Stream<String>jeśli to może pomóc. Przykład:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Olivier Grégoire
1
Och, trzeba filtrować ... a następnie s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))54 bajty.
Olivier Grégoire,
1
Użyj <42zamiast, !=42ponieważ „Możesz założyć, że siódma postać jest zawsze gwiazdką lub spacją”.
Olivier Grégoire,
1
@ OlivierGrégoire Ah, przegapiłem tę zasadę, inaczej bym to zrobił. Dziękuję za poprawienie mnie.
Kevin Cruijssen