Скасуйте програму COBOL!


64

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, яку я висунув у цьому запитанні, є невірною, я не несу відповідальності.


23
Номери рядків - це не коментарі. Вони - колона. Термінологія, будь ласка.
користувач207421

1
Усі ваші приклади мають пробіл після *. Це збіг?
Ніл

6
Старий не означає автоматично поганого. Я працював у магазині Agile COBOL. Вони могли робити речі на AS / 400, що ми не могли зробити на Java.
Thorbjørn Ravn Andersen

1
Хе ... я насправді написав аналізатор COBOL CopyBook, який працює, лише якщо поля не упаковані. Просто перетворює його в JSON key:{key:{key:length,key:length}}. Смугає всі форматування даних та вводить дані.
Чарівний восьминога Урна

4
Чи може бути пробіл у перших 6 символів?

Відповіді:


104

COBOL (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 символів, прокладені справа.

Я здогадуюсь, що це прийнятно, оскільки це добре COBOL. Якщо ні, то я б хотів розглянути альтернативи.

Подяка

  • -166 байт завдяки Едварду Н
  • -2 байти завдяки hornj

10
Зірочки (*) ніколи не знайдуться ніде, крім перших семи символів на рядку ... і все ж ...;)
Cœur

@ Cœur Haha так ... але моє рішення не використовує це припущення, тому, можливо, воно доречне!
Якоб

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

Спробуйте в Інтернеті!

I / O як списки рядків.


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

Спробуйте в Інтернеті!


2
Ви можете зберегти три байти, якщо замінити (\*.*$| )на( |.*)
Павел

Не такий короткий, як коментар @ Павла, але / /;$_=/\* /?$,:$'є інша альтернатива
Дом Гастінгс,

Вам також не потрібні ^.
Павло

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

Чи не могли б ви зробити це 7xзамість 6x<<?
DJMcMayhem

1
Потім він видаляє*
nmjcman101

Буде спрацювати, щоб спочатку видалити вкладиші, *а потім зробити Î7x? (припустимо, що * не можна не в символах 0-5)
12431234123412341234123

@ 12431234123412341234123, на жаль, немає, тому що *в перших 6 символів може бути
nmjcman101

9

Парадок (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#", але я відчуваю, що це зробило б це неконкурентоспроможним. Пощастило, що вона все-таки спрацювала (для цього використовуються лише функції з версії 0.8, яку я здійснив три дні тому).


"Привіт, я написав мову програмування з гольфу". Чи була випущена версія, яку ви використовуєте, до або після опублікування цього виклику?
Щогли

1
Працює над цією версією три дні тому: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros

Правильно, ви це згадали, але якимось чином це не було явно зареєстровано ...
Mast


7

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

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

Спробуйте в Інтернеті!


4
Я ніколи не знав, що Октав може робити такі струни ... Візьміть це, MATLAB. xD
Санчіз

З моменту введення рядкових масивів R2016b , я впевнений, що це буде працювати і в MATLAB @Sanchises! У мене зараз доступ до R2015b, тому не можу підтвердити. MATLAB може робити це в 74 байти, ймовірно, менше @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), де sмасив комірок, а не рядковий масив. Використання regexp або чогось, швидше за все, буде коротшим, але метод, який я написав, можна порівняти з методологією у цій відповіді лише для старого 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

7$€може бути€7
Ерік Аутгольфер

зніміть його до 9 так:ṫ€7Ḣ⁼¥Ðf⁶
Джонатан Аллан

5

PowerShell , 32 байти

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

Спробуйте в Інтернеті!

Вхід до конвеєра надходить як масив рядків, -replaceпрацює над кожним рядком, і -ne ''(не дорівнює порожньому рядку), застосований до масиву, діє для фільтрації порожніх рядків.


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

Гая , 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 символом. У гольф-гольф, які використовують символи, що не мають асацій (можливо, за винятком Neim), використовуються спеціальні кодування, які дозволяють рахувати всі ці не-ASCII як одиничні байти. Ось кодова сторінка Гаї .
Містер Xcoder

@ Mr.Xcoder Neim теж має кодування.
Erik the 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 - збережіть зірочки ті, у кого перший символ.
tM - Видаліть перший символ кожного.
            - Висновок неявно.

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 \ * - Фільтр тих, які не дорівнюють зірочці.
tM - Видаліть перший символ кожного.
             - Висновок неявно.

Pyth , 12 байт

m>d7fn@T6\*Q

Спробуйте тут!

Пояснення

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

      @ T6 - Отримайте шостий символ кожного рядка
    fn \ * Q - і фільтруйте ті, які не рівні зірочці.
m> d7 - Обріжте перші 7 символів.
              - Результат неявно.

" Зберігайте зірочки ті, у кого перший символ". Я думаю, ви мали на увазі "Зберігайте ті, з яких перший символ НЕ є зірочкою".
Кевін Кройсейсен

m>d7.m@b6повинні працювати в 9 байт, зловживаючи тим, що *знаходиться після місця в лексикографічному порядку
Дейв

Я можу відредагувати це за допомогою посилання на пояснення / тест, якщо хочете!
Дейв

@pizzakingme Буду радий, якщо ви попрацюєте, бо я на мобільному телефоні. Дякую велике і не забудьте кредитувати себе за нове рішення!
Містер Xcoder

Чи працює це, якщо всі рядки є коментарями до рядків? (Я не впевнений, чи потрібно вам займатися цим випадком)
betaveros

3

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

Потрібен -Eаргумент, щоб sedвключити розширені регулярні вирази.

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

ви могли б зробити те саме, що і хлопець з s/^.{6}( |.*)//g
перла

3

Java 8, 40 байт

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

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

Спробуйте це в Інтернеті

Подяка


Правильний інструмент! :)
Олів'є Грегоар


3

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

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

Спробуйте в Інтернеті!

-5 байт: Дуже складно було звести цю « всю програму » до того ж розміру , що й функція гурки . Тепер він виписує межі (в обох напрямках) масиву неправильного типу і покладається на маленькі ендіанські та 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

SNOBOL4 (CSNOBOL4) , 72 70 66 50 байт

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

Спробуйте в Інтернеті!

Зіставлення шаблонів у SNOBOL сильно відрізняється від регулярного вираження, але ідея тут все одно та сама: Якщо рядок відповідає "шістьма символами, а потім зірочкою", видаліть його, інакше видаліть перші сім символів рядка та надрукуйте результат.

Це фактично використовує переваги оператора умовного призначення SNOBOL.

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

Починаючи з позиції 6, підберіть пробіл чи зірочку, а якщо ви збігаєте пробіл, призначте решту рядка OUTPUT.


3

Вім, 14 байт

Ctrl-VG5ld:%g/\*/dEnter

Завантажте вхідний файл у якості буфера для редагування, а потім введіть наведені вище команди. Вихід - новий буфер.


2

Рубі , 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)

Спробуйте в Інтернеті!


1
Це не є ні функцією, ні повноцінною програмою, оскільки передбачає, що вхід зберігається z, що тут заборонено. Однак ви можете перетворити його в функцію анонімної стрілки, щоб зробити її дійсною.
caird coinheringaahing

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

Дякуємо Павлу та аумману за зменшення розміру.


Ласкаво просимо до PPCG! Я б запропонував додати спробувати онлайн- посилання на свою відповідь, щоб інші могли перевірити ваш код. Крім того, чудова перша (ну, друга) відповідь!
LyricLy

Ви можете зробити це коротше, написавши лямбда у форміt=>{...}
Павло

@LyricLy Я спробував це зробити, насправді, але чомусь це не працює. Хоча він працює чудово в консольній програмі VS.
снорепіон

@Pavel Як так? Я не впевнений, чи зробив я це цілком правильно; Мені ніколи раніше не потрібно було використовувати ламбда-вираз.
снорепіон

Так, саме. Ви можете перевірити його, призначивши його 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,'')
tsh


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

Вводиться як список рядків.

Спробуйте в Інтернеті!


#import? Крім того, я думаю, що нормально опускати стандарт включає.
симон

#importне стандартний C ++, але принаймні GCC та MSVC підтримують його. Опущення деяких включає роботи з C, але не з C ++. Код не працює без включених, тому їх потрібно рахувати в загальній кількості рахунків.
Steadybox

Ага, я думав, ви можете просто пропустити включення, оскільки ви не бачите жодних importвідповідей у ​​python або usingу відповідях C #. Крім того, не #include <bits/stdc++.h>буде коротше для вашої відповіді?
simon

@gurka Так, було б коротше. Дякую!
Steadybox

@gurka імпорт будуть підраховані в відповідях на Python, це просто , що Python має багато функцій , які не потребують в імпорті. C #, як правило, не використовує оператор, тому що писати, як правило, коротше, 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 Ах, пропустив це правило, інакше я би сам це зробив. Дякуємо за виправлення.
Kevin Cruijssen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.