Раскомментируйте программу COBOL!

65

COBOL - очень старый язык, на момент написания ему 58 лет. На самом деле он настолько старый, что имеет очень интересную причуду: первые шесть символов каждой строки являются комментариями.

Вы спрашиваете, почему это? Ну, эти 6 символов были предназначены для использования в качестве номеров строк, в те времена, когда программы не были полностью цифровыми и печатались на компьютере.

Кроме того, седьмой символ может быть только частью очень маленького набора (обычно *это закомментирует строку или пробел, чтобы отделить номер строки от кода)

Но что, если вы работаете в более цифровой системе и вам нужна просто необработанная программа?

Система комментариев

В языке COBOL есть два типа комментариев: комментарии к строкам и вышеупомянутые комментарии к номеру строки.

Раскомментировать номера строк просто: просто уберите первые семь (шесть плюс один пробел) символов из каждой строки.

000000 apple
000001 banana
celery donuts

станет:

apple
banana
donuts

Строка комментариев делает это немного сложнее. Комментарий к строке начинается со звездочки, *расположенной в седьмой позиции символа в строке, например:

000323* this is a comment

Это не строчный комментарий:

*00000 this isn't a comment

Чтобы раскомментировать комментарий к строке, просто удалите всю строку.

Пример прокомментировал «программу»:

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

Некомментированная версия:

blah blah
oranges?
love me some oranges

Другими словами, чтобы раскомментировать строку, удалите первые шесть символов каждой строки, а затем верните все, кроме первого символа каждой строки, которая не начинается со звезды.

Соревнование

Создайте программу или функцию, которая принимает закомментированную программу и возвращает ее незакомментированный вариант.

Разъяснения

  • Звездочки ( *) никогда не будут найдены нигде, кроме первых семи символов в строке (мы не просим вас проверять синтаксис)
  • Каждая строка всегда будет содержать не менее 7 символов.
  • Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом.
  • Вход или выход может быть матрицей или списком.
  • Только печатные символы ASCII (плюс перевод строки) должны быть обработаны.
  • Вы можете выводить с последующим переводом строки. Вы также можете предположить, что ввод будет иметь завершающий символ новой строки, если вы того пожелаете.

счет

Поскольку это , выигрывает ответ с наименьшим количеством байтов!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: На самом деле я не знаю, COBOL и не претендую на. Если какие-либо претензии по поводу COBOL, которые я сделал в этом вопросе, неверны, я не несу никакой ответственности.

LyricLy
источник
23
Номера строк не являются комментариями. Они столбец. Терминология, пожалуйста.
user207421
2
Все ваши примеры имеют пробел после *. Это совпадение?
Нил
1
@ Нейл Да, это так. Восьмой персонаж может быть чем угодно.
LyricLy
6
Старый не означает автоматически плохое. Я работал в магазине Agile COBOL. Они могли бы делать то же самое на AS / 400, что мы не могли делать на Java.
Турбьёрн Равн Андерсен
4
Может ли быть пробел в первых 6 символах?

Ответы:

104

КОБОЛ (GnuCOBOL), 191 + 17 = 208 байт

Я «выучил» COBOL для этого ответа, поэтому он, вероятно, не полностью в гольфе.

Это полная программа, в которой вводится то, что я предполагаю, что это стандартный ввод, и запись в то, что я предполагаю, что это стандартный вывод. Возможно, однажды я вернусь к этому и (1) определю, есть ли у COBOL функции, и, если так, (2) посмотрим, будет ли решение функции короче.

Число байтов включает флаги программы и компилятора ( -freeи -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).

Попробуйте онлайн

Безгольфовая программа

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

Ограничения

Технически говоря, вывод не верен. Из моего беглого исследования кажется, что единственный практический способ сохранить строку в COBOL - это буфер фиксированного размера. Я выбрал размер буфера 80 символов, так как это ограничение длины строки для программ фиксированного формата. Это представляет два ограничения:

  • Строки длиной более 80 символов усекаются.
  • Строки короче 80 символов дополняются пробелами справа.

Я предполагаю, что это приемлемо, так как, ну, это Кобол. Если нет, я был бы готов рассмотреть альтернативы.

Подтверждения

  • -166 байт благодаря Эдварду Н
  • -2 байта благодаря Hornj
Jakob
источник
10
Звездочки (*) никогда не будут найдены где-либо за пределами первых семи символов в строке ... и все же ...;)
Cœur
@ Cœur Хаха, да ... но мое решение не использует это предположение, поэтому, возможно, оно уместно!
Якоб
8
Вы выиграли один интернет.
Джошуа
@ Cœur за исключением оператора COMPUTE.
ClickRick
1
Поздравляем с вашим золотым значком!
Caird Coinheringaahing
20

Python 2 , 39 38 37 байт

-1 байт благодаря LyricLy. -1 байт благодаря Мего.

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

Попробуйте онлайн!

Ввод / вывод в виде списков строк.

totallyhuman
источник
2
Сохраните байт, заменив его !=на <, поскольку кодовая точка пробела ниже, чем звездочка, а седьмой символ всегда будет пробелом или звездочкой.
LyricLy
Итак, 7-й символ всегда будет пробелом или звездочкой?
полностью человек
Да. You may assume the seventh character is always an asterisk or a space.
LyricLy
1
Сохранить 1 байт с помощьюif'*'!=i[6]
Mego
13

Perl 5 , 19 + 1 (-p) = 20 16 байт

-4 байта с предложениями Павла

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

Попробуйте онлайн!

Xcali
источник
2
Вы можете сохранить три байта, если заменить (\*.*$| )на( |.*)
Павел
Не такой короткий, как комментарий @ Pavel, но / /;$_=/\* /?$,:$'есть еще одна альтернатива
Дом Гастингс
Вам также не нужно ^.
Павел
11

V , 13 11 10 байт

Î6x<<
çª/d

Попробуйте онлайн!

объяснение

Î       ' 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
источник
Не могли бы вы сделать 7xвместо 6x<<?
DJMcMayhem
1
Затем он удаляет*
nmjcman101
Будет ли это работать, чтобы *сначала удалить линии, а затем сделать Î7x? (при условии, что * не может быть не в
символах
@ 12431234123412341234123 к сожалению нет, потому что *в первых 6 символах может быть .
nmjcman101
9

Paradoc (v0.2.8 +), 8 байт (CP-1252)

µ6>(7#;x

Принимает список строк и приводит к списку строк без комментариев.

Объяснение:

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

Привет, я написал язык программирования в гольф. :)

Я все еще разрабатываю это и добавил / настроил кучу встроенных модулей после попытки написать это так, чтобы было более разумное различие между пробелом и звездочкой, чем " 7#", но я чувствую, что это сделало бы это неконкурентным. К счастью, он все-таки сработал (он использует только функции из v0.2.8, которые я зафиксировал три дня назад).

betaveros
источник
«Привет, я написал язык программирования для игры в гольф». Была ли версия, которую вы используете, выпущена до или после публикации этого вызова?
Мачта
1
Он работает в этой версии три дня назад: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros
Правильно, вы упомянули об этом, но почему-то это явно не регистрировалось ...
Mast
7

Октава, 23 байта

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

Попробуйте онлайн!

rahnema1
источник
4
Я никогда не знал, что Октав может делать такие строки ... Возьми это, MATLAB. xD
Sanchises
С тех пор как R2016b представил строковые массивы , я уверен, что это будет работать и в MATLAB @Sanchises! У меня есть доступ только к R2015b, поэтому я не могу подтвердить это. MATLAB может сделать это в 74 байта, возможно, меньше @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), где sмассив ячеек, а не массив строк. Использование регулярных выражений или чего-то еще, вероятно, будет короче, но метод, который я написал, сравним с методологией в этом ответе только для старого MATLAB
Wolfie
6

Желе , 11 9 байт

ṫ€7Ḣ⁼¥Ðf⁶

Попробуйте онлайн!

Входы и выходы в виде списка строк.

-2 байта благодаря @EriktheOutgolfer и @JonathanAllan

Как это устроено

ṫ€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
источник
7$€может быть€7
Эрик Outgolfer
уменьшите до 9 примерно так:ṫ€7Ḣ⁼¥Ðf⁶
Джонатан Аллан
5

PowerShell , 32 байта

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

Попробуйте онлайн!

Конвейерный ввод поступает в виде массива строк, -replaceработает с каждой строкой и -ne ''(не равно пустой строке) применяется к массиву и выполняет фильтрацию пустых строк.

TessellatingHeckler
источник
4

C 63 59 55 48 47 46 байтов

Спасибо « анонимному пользователю » за избавление от еще одного байта.

Спасибо Феликсу Пальмену за напоминание о том, что « Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом », который сбрил еще один байт.

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

Используйте как:

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

Попробуйте онлайн!

Саймон
источник
3

На самом деле , 13 байтов

⌠6@tp' =*⌡M;░

Ввод и вывод осуществляется в виде списка строк.

Объяснение:

⌠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

Попробуйте онлайн!

Мего
источник
3

Gaia , 9 байт

6>¦'*«⁈ḥ¦

Функция, принимающая список строк и возвращающая список строк.

Попробуйте онлайн!

объяснение

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each
Бизнес Кот
источник
Я считаю десять символов, и так как три не являются ASCII, они занимают не больше байта?
WGroleau
@WGroleau и «оба 1 символ. В языках игры в гольф, в которых используются символы, отличные от ascii (возможно, за исключением Neim), используются пользовательские кодировки, которые позволяют считать все эти не-ASCII-символы как отдельные байты. Вот кодовая страница Гайи .
г-н Xcoder
@ Mr.Xcoder Neim тоже имеет кодировку.
Эрик Outgolfer
3

Pyth , 9 байт

Обратите внимание, что это работает, только если хотя бы 1 строка не является комментарием и хотя бы 1 строка является комментарием. Все остальные решения работают во всех случаях.

-2 байта благодаря @pizzakingme !

m>d7.m@b6

Попробуй это здесь!

объяснение

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 байт

tMfqhTdm>d6

Попробуй это здесь!

объяснение

tMfqhTdm> d6 - Полная программа с неявным вводом. Принимает ввод как список строк.

       m> d6 - удалить первые 6 символов каждой строки.
    hT - получить первый символ каждого.
  fq d - оставьте те, которые имеют первый символ, звездочкой.
тм - удалить первый символ каждого.
            - Вывод неявно.

Pyth , 11 байт

m>d7fqd@T6Q

Попробуй это здесь!

объяснение

m> d7fq @ T6dQ - полная программа. Принимает ввод как список строк.

      @ T6 - шестой символ каждого.
    fq dQ - оставить строки, которые имеют пробел, как ^.
m> d7 - обрезать первые 7 символов.
             - Вывод неявно.

Pyth , 12 байт

tMfnhT\*m>d6

Попробуй это здесь!

объяснение

tMfnhT \ * m> d6 - полная программа с неявным вводом. Принимает ввод как список строк.

        m> d6 - удалить первые 6 символов каждой строки.
    hT - получить первый символ каждого.
  fn \ * - Отфильтровать те, которые не равны звездочке.
тм - удалить первый символ каждого.
             - Вывод неявно.

Pyth , 12 байт

m>d7fn@T6\*Q

Попробуй это здесь!

объяснение

m> d7fn @ T6 \ * Q - полная программа. Принимает ввод как список строк.

      @ T6 - получить шестой символ каждой строки
    fn \ * Q - И отфильтровать те, которые не равны звездочке.
m> d7 - обрезать первые 7 символов.
              - Вывод неявно.
Мистер Xcoder
источник
« Оставьте те, у которых первый символ звездочкой. » Я думаю, вы имели в виду «Оставьте те, у которых первый символ НЕ звездочка».
Кевин Круйссен
m>d7.m@b6должен работать на 9 байтов, злоупотребляя, что *после пробела в лексикографическом порядке
Дейв
Я могу редактировать это с объяснением / тестовой ссылкой, если хотите!
Дейв
@pizzakingme Я был бы рад, если бы вы отредактировали, потому что я на мобильном телефоне. Большое спасибо и не забудьте отдать себе должное за новое решение!
г-н Xcoder
Работает ли это, если все строки являются строковыми комментариями? (Я не уверен, что вы должны разобраться с этим делом)
betaveros
3

GNU Sed, 19 + 2 = 21 символ

Требуется -Eаргумент для sedвключения расширенных регулярных выражений.

/^.{6}\*/d;s/^.{7}/
Даниэль Шеплер
источник
вы могли бы сделать то же самое, что и парень из Perl,s/^.{6}( |.*)//g
markasoftware
3

Java 8, 40 байт

Регулярные выражения: почти, но не совсем, неподходящий инструмент для работы. Лямбда от Stringдо String(назначить Function<String, String>). У входа должен быть завершающий символ новой строки.

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

Попробуйте онлайн

Подтверждения

Jakob
источник
Правильный инструмент! :)
Оливье Грегуар
3

Haskell , 27 25 байтов

Версия Лайкони короче моей:

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

Попробуйте онлайн!

Моя версия:

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

Попробуйте онлайн!

jferard
источник
25 байт: f n=[x|' ':x<-drop 6<$>n].
Лайкони
@Laikoni Это хорошо !! Я не знал, что можно было сопоставить шаблоны в генераторе понимания списка.
Jferard
3

C (gcc) , 53 48 46 байтов

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

Попробуйте онлайн!

-5 байт: было очень сложно уменьшить размер всей этой программы до размера функции gurka . Теперь он записывает границы (в обоих направлениях) массива неправильного типа и использует метод с прямым порядком байтов и 4-байтовые целые, чтобы найти звездочку ... но эй, это работает;)

-2 байта: Хорошо, если мы уже пишем в какое-то «случайное» .bssместо, зачем вообще объявлять массив ! Так вот идет программа обработки строки , которая использует ни на charтип , ни массив.

Феликс Палмен
источник
Приятно! И это *x&2заставило меня вспомнить: «Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом», поэтому я должен быть в состоянии сбрить несколько байтов с моего ответа :-)
simon
@gurka спасибо: D -2, хе-хе
Феликс Палмен
3

R, 47 45 байт

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)
Свен Хоэнштейн
источник
Если вы берете входные данные в виде списка строк, я думаю, вы можете сократить регулярное выражение до «^. {6} (|. * ​​$)» Для -6.
Преступно-
@CriminallyVulgar Правильно. В этом случае я мог бы также отбросить pe=Tаргумент. Однако я не уверен, разрешен ли ввод в виде списка строк.
Свен Хоэнштайн,
Из ОП:Input or output may be a matrix or list.
полностью человек
@CriminallyVulgar Проблема заключается в наличии пустых строк в выводе.
Свен Хоэнштайн
@SvenHohenstein Ну, конечно, я не учел это.
Преступно-
3

СНОБОЛ4 (CSNOBOL4) , 72 70 66 50 байт

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

Попробуйте онлайн!

Сопоставление с образцом в SNOBOL весьма отличается от регулярного выражения, но идея здесь все та же: если строка соответствует «шести символам, а затем звездочке», удалите ее, в противном случае удалите первые семь символов строки и напечатайте результат.

Теперь это на самом деле лучше использует оператор условного присваивания SNOBOL.

Шаблон, POS(6) (' ' REM . OUTPUT | '*')который интерпретируется как:

Начиная с позиции 6, введите пробел или звездочку и, если вы соответствуете пробелу, присвойте оставшуюся часть строки OUTPUT.

Giuseppe
источник
3

Vim, 14 байтов

Ctrl-VG5ld:%g/\*/dEnter

Загрузите входной файл в качестве буфера для редактирования, затем введите вышеуказанные команды. Выход - новый буфер.

Дэвид Хейман
источник
2

Ruby , 39 38 36 29 23 22 20 + 1 = 21 байт

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

Попробуйте онлайн!

Использует -pфлаг.

Объяснение:

-pФлаг добавляет неявный блок вокруг кода, так что код , который фактически получает запустить выглядит следующим образом :

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

    puts $_
end

getsчитает строку текста и сохраняет ее результат в $_.

$_[/.../]=''удаляет первое вхождение регулярного выражения ...в $_.

/.{6}( |.*\n)/соответствует 6 любому символу в начале строки, за которым следует либо пробел, либо остальная часть строки. Поскольку пробел появляется первым, он будет пытаться удалить только первые 6 символов и пробел, прежде чем пытаться удалить всю строку.

$_ затем распечатывается, и этот процесс повторяется для каждой строки.

Павел
источник
1
Вызовы методов в Ruby не нуждаются в скобках, их удаление сэкономит вам байт.
m-chrzan
2

JavaScript (ES6), 48 байт

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

Попробуйте онлайн!

sgtdck
источник
1
Это не функция и не полная программа, так как предполагается, что вход хранится z, что здесь запрещено. Однако вы можете превратить его в анонимную функцию стрелки, чтобы сделать его действительным.
17
1
@cairdcoinheringaahing ты абсолютно прав. Обновил решение - не уверен, что правила относительно (и )вокруг fn, добавил их, чтобы быть уверенным.
sgtdck
1
Вам не нужна ()круглая функция, но в остальном она выглядит нормально.
caird coinheringaahing
2

> <>, 57 53 байта

>i~i~i~i~i~i~i67*=\
<o$/?:$/?=a:;?(0:i<
\~$/~\ $
/  <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

Изменить: 53 байта

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

В основном те же вещи, что и раньше, но немного реструктурированные

В качестве примечания: я разочарован, никто еще не сделал этого в Коболе.

Саша
источник
2

C #, 160 145 90 89 байт

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

Спасибо Pavel & auhmaan за уменьшение размера.

snorepion
источник
Добро пожаловать в PPCG! Я бы посоветовал добавить ссылку « попробуй!» В свой ответ, чтобы другие могли проверить твой код. Кроме того, отличный первый (ну, второй) ответ!
LyricLy
Вы можете сделать это короче, написав лямбду в формеt=>{...}
Павел
@LyricLy Я пытался сделать это, на самом деле, но по какой-то причине это не работает там. Тем не менее, он прекрасно работает в консольном приложении VS.
snorepion
@Pavel Вот так? Я не уверен, сделал ли я это полностью правильно; Мне никогда не нужно было использовать лямбда-выражение раньше.
snorepion
Да, точно. Вы можете проверить это, назначив его func<string, string>.
Павел
2

Python 3, 71 байт (без регулярного выражения)

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

Оно работает!

>>> 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 байта

Вычеркнутый 44 - все еще регулярный 44.

6 байт сохранено благодаря tsh

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

Попробуйте онлайн!


источник
s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
17
@tsh. Пока не будет стабильного интерпретатора, который это позволяет, я полагаю, он не считается допустимым языком программирования.
Не похоже, что это дает правильный вывод, если последняя строка является строкой комментария.
LyricLy
@LyricLy. Это потому, что я предполагал, что входные данные всегда будут содержать завершающую новую строку. Вы можете видеть, что это работает , если после ввода есть пустая строка. Если я не должен предполагать это, то исправление будет стоить 1 байт (добавление ?после \n).
1

C ++ (GCC), 121 112 байт

Спасибо @gurka за сохранение 9 байтов!

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

Принимает ввод в виде списка строк.

Попробуйте онлайн!

Steadybox
источник
#import? Кроме того, я думаю, что это нормально, чтобы опустить стандартные включает.
симон
#importне является стандартным C ++, но, по крайней мере, GCC и MSVC поддерживают его. Пропуск некоторых включает работы с C, но не с C ++. Код не работает без включений, поэтому они должны учитываться в общем количестве счетов.
Steadybox
Ага, я думал, что вы можете просто пропустить включения, так как вы не видите ни importответов ни в Python, ни в ответах usingна C #. Кроме того, не #include <bits/stdc++.h>будет короче для вашего ответа?
симон
@gurka Да, это было бы короче. Спасибо!
Steadybox
@gurka импорт будут подсчитаны в ответах на Python, это просто , что Python имеет много функций , которые не нуждаются в импорте. C # имеет тенденцию не использовать оператор using, потому что он обычно короче, system.foo()чем записьusing system;foo()
Павел
1

Java 8, 95 54 53 байта

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

-42 байта благодаря @ OliverGrégoire , используя Stream<String>вместоString и выходных данных.

Объяснение:

Попробуй это здесь.

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)
Кевин Круйссен
источник
Похоже, вы можете использовать String[]или в List<String>качестве входных данных для -12 байтов.
Якоб
Или, Stream<String>если это может помочь. Пример:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Оливье Грегуар
1
О, это нужно отфильтровать ... тогда s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))для 54 байтов.
Оливье Грегуар
1
Используйте <42вместо, !=42потому что «Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом».
Оливье Грегуар
1
@ OlivierGrégoire Ах, пропустил это правило, иначе я бы сделал это сам. Спасибо за исправление.
Кевин Круйссен