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, которые я сделал в этом вопросе, неверны, я не несу никакой ответственности.
*
. Это совпадение?Ответы:
КОБОЛ (GnuCOBOL), 191 + 17 = 208 байт
Я «выучил» COBOL для этого ответа, поэтому он, вероятно, не полностью в гольфе.
Это полная программа, в которой вводится то, что я предполагаю, что это стандартный ввод, и запись в то, что я предполагаю, что это стандартный вывод. Возможно, однажды я вернусь к этому и (1) определю, есть ли у COBOL функции, и, если так, (2) посмотрим, будет ли решение функции короче.
Число байтов включает флаги программы и компилятора (
-free
и-frelax-syntax
).Попробуйте онлайн
Безгольфовая программа
Ограничения
Технически говоря, вывод не верен. Из моего беглого исследования кажется, что единственный практический способ сохранить строку в COBOL - это буфер фиксированного размера. Я выбрал размер буфера 80 символов, так как это ограничение длины строки для программ фиксированного формата. Это представляет два ограничения:
Я предполагаю, что это приемлемо, так как, ну, это Кобол. Если нет, я был бы готов рассмотреть альтернативы.
Подтверждения
источник
Python 2 ,
393837 байт-1 байт благодаря LyricLy. -1 байт благодаря Мего.
Попробуйте онлайн!
Ввод / вывод в виде списков строк.
источник
!=
на<
, поскольку кодовая точка пробела ниже, чем звездочка, а седьмой символ всегда будет пробелом или звездочкой.You may assume the seventh character is always an asterisk or a space.
if'*'!=i[6]
Perl 5 ,
19+ 1 (-p) =2016 байт-4 байта с предложениями Павла
Попробуйте онлайн!
источник
(\*.*$| )
на( |.*)
/ /;$_=/\* /?$,:$'
есть еще одна альтернатива^
.V ,
131110 байтПопробуйте онлайн!
объяснение
HexDump:
источник
7x
вместо6x<<
?*
*
сначала удалить линии, а затем сделатьÎ7x
? (при условии, что * не может быть не в*
в первых 6 символах может быть .Paradoc (v0.2.8 +), 8 байт (CP-1252)
Принимает список строк и приводит к списку строк без комментариев.
Объяснение:
Привет, я написал язык программирования в гольф. :)
Я все еще разрабатываю это и добавил / настроил кучу встроенных модулей после попытки написать это так, чтобы было более разумное различие между пробелом и звездочкой, чем "
7#
", но я чувствую, что это сделало бы это неконкурентным. К счастью, он все-таки сработал (он использует только функции из v0.2.8, которые я зафиксировал три дня назад).источник
Октава, 23 байта
Попробуйте онлайн!
источник
@(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false)
, гдеs
массив ячеек, а не массив строк. Использование регулярных выражений или чего-то еще, вероятно, будет короче, но метод, который я написал, сравним с методологией в этом ответе только для старого MATLABЖеле ,
119 байтПопробуйте онлайн!
Входы и выходы в виде списка строк.
-2 байта благодаря @EriktheOutgolfer и @JonathanAllan
Как это устроено
источник
7$€
может быть€7
ṫ€7Ḣ⁼¥Ðf⁶
PowerShell , 32 байта
Попробуйте онлайн!
Конвейерный ввод поступает в виде массива строк,
-replace
работает с каждой строкой и-ne ''
(не равно пустой строке) применяется к массиву и выполняет фильтрацию пустых строк.источник
C
635955484746 байтовСпасибо « анонимному пользователю » за избавление от еще одного байта.
Спасибо Феликсу Пальмену за напоминание о том, что « Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом », который сбрил еще один байт.
Используйте как:
Попробуйте онлайн!
источник
На самом деле , 13 байтов
Ввод и вывод осуществляется в виде списка строк.
Объяснение:
Попробуйте онлайн!
источник
Gaia , 9 байт
Функция, принимающая список строк и возвращающая список строк.
Попробуйте онлайн!
объяснение
источник
⁈
и«
оба 1 символ. В языках игры в гольф, в которых используются символы, отличные от ascii (возможно, за исключением Neim), используются пользовательские кодировки, которые позволяют считать все эти не-ASCII-символы как отдельные байты. Вот кодовая страница Гайи .Pyth , 9 байт
Обратите внимание, что это работает, только если хотя бы 1 строка не является комментарием и хотя бы 1 строка является комментарием. Все остальные решения работают во всех случаях.
-2 байта благодаря @pizzakingme !
Попробуй это здесь!
объяснение
Pyth , 11 байт
Попробуй это здесь!
объяснение
Pyth , 11 байт
Попробуй это здесь!
объяснение
Pyth , 12 байт
Попробуй это здесь!
объяснение
Pyth , 12 байт
Попробуй это здесь!
объяснение
источник
m>d7.m@b6
должен работать на 9 байтов, злоупотребляя, что*
после пробела в лексикографическом порядкеGNU Sed, 19 + 2 = 21 символ
Требуется
-E
аргумент дляsed
включения расширенных регулярных выражений.источник
s/^.{6}( |.*)//g
Java 8, 40 байт
Регулярные выражения: почти, но не совсем, неподходящий инструмент для работы. Лямбда от
String
доString
(назначитьFunction<String, String>
). У входа должен быть завершающий символ новой строки.Попробуйте онлайн
Подтверждения
источник
Haskell ,
2725 байтовВерсия Лайкони короче моей:
Попробуйте онлайн!
Моя версия:
Попробуйте онлайн!
источник
f n=[x|' ':x<-drop 6<$>n]
.C (gcc) ,
534846 байтовПопробуйте онлайн!
-5 байт: было очень сложно уменьшить размер всей этой программы до размера функции gurka . Теперь он записывает границы (в обоих направлениях) массива неправильного типа и использует метод с прямым порядком байтов и 4-байтовые целые, чтобы найти звездочку ... но эй, это работает;)
-2 байта: Хорошо, если мы уже пишем в какое-то «случайное»
.bss
место, зачем вообще объявлять массив ! Так вот идет программа обработки строки , которая использует ни наchar
тип , ни массив.источник
*x&2
заставило меня вспомнить: «Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом», поэтому я должен быть в состоянии сбрить несколько байтов с моего ответа :-)R,
4745 байтисточник
pe=T
аргумент. Однако я не уверен, разрешен ли ввод в виде списка строк.Input or output may be a matrix or list.
СНОБОЛ4 (CSNOBOL4) ,
72706650 байтПопробуйте онлайн!
Сопоставление с образцом в SNOBOL весьма отличается от регулярного выражения, но идея здесь все та же: если строка соответствует «шести символам, а затем звездочке», удалите ее, в противном случае удалите первые семь символов строки и напечатайте результат.
Теперь это на самом деле лучше использует оператор условного присваивания SNOBOL.
Шаблон,
POS(6) (' ' REM . OUTPUT | '*')
который интерпретируется как:Начиная с позиции 6, введите пробел или звездочку и, если вы соответствуете пробелу, присвойте оставшуюся часть строки
OUTPUT
.источник
Vim, 14 байтов
Ctrl-V
G5ld:%g/\*/d
EnterЗагрузите входной файл в качестве буфера для редактирования, затем введите вышеуказанные команды. Выход - новый буфер.
источник
Ruby ,
39383629232220 + 1 = 21 байтПопробуйте онлайн!
Использует
-p
флаг.Объяснение:
-p
Флаг добавляет неявный блок вокруг кода, так что код , который фактически получает запустить выглядит следующим образом :gets
читает строку текста и сохраняет ее результат в$_
.$_[/.../]=''
удаляет первое вхождение регулярного выражения...
в$_
./.{6}( |.*\n)/
соответствует 6 любому символу в начале строки, за которым следует либо пробел, либо остальная часть строки. Поскольку пробел появляется первым, он будет пытаться удалить только первые 6 символов и пробел, прежде чем пытаться удалить всю строку.$_
затем распечатывается, и этот процесс повторяется для каждой строки.источник
Пайк , 9 байт
Попробуй это здесь!
Удобочитаемый:
Попробуй это здесь!
источник
Сетчатка ,
2315 байт5 байтов сохранено благодаря nmjcman101
1 байт сохранено благодаря Нейлу
Попробуйте онлайн!
источник
JavaScript (ES6), 48 байт
Попробуйте онлайн!
источник
z
, что здесь запрещено. Однако вы можете превратить его в анонимную функцию стрелки, чтобы сделать его действительным.(
и)
вокруг fn, добавил их, чтобы быть уверенным.()
круглая функция, но в остальном она выглядит нормально.> <>,
5753 байтапопробуйте это онлайн
объяснение
Изменить: 53 байта
В основном те же вещи, что и раньше, но немного реструктурированные
В качестве примечания: я разочарован, никто еще не сделал этого в Коболе.источник
C #,
160 145 9089 байтСпасибо Pavel & auhmaan за уменьшение размера.
источник
t=>{...}
func<string, string>
.Python 3, 71 байт (без регулярного выражения)
Оно работает!
источник
05AB1E , 11 байт
Попробуйте онлайн!
источник
.$
не существовало. : PJavaScript,
4434 байтаВычеркнутый 44 - все еще регулярный 44.
6 байт сохранено благодаря tsh
Попробуйте онлайн!
источник
s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
s.match(/(?<=^.{6} ).*/mg)
ESNext (Нестандартный, Stage3) Chrome62 +?
после\n
).C ++ (GCC),
121112 байтСпасибо @gurka за сохранение 9 байтов!
Принимает ввод в виде списка строк.
Попробуйте онлайн!
источник
#import
? Кроме того, я думаю, что это нормально, чтобы опустить стандартные включает.#import
не является стандартным C ++, но, по крайней мере, GCC и MSVC поддерживают его. Пропуск некоторых включает работы с C, но не с C ++. Код не работает без включений, поэтому они должны учитываться в общем количестве счетов.import
ответов ни в Python, ни в ответахusing
на C #. Кроме того, не#include <bits/stdc++.h>
будет короче для вашего ответа?system.foo()
чем записьusing system;foo()
Java 8,
955453 байта-42 байта благодаря @ OliverGrégoire , используя
Stream<String>
вместоString
и выходных данных.Объяснение:
Попробуй это здесь.
источник
String[]
или вList<String>
качестве входных данных для -12 байтов.Stream<String>
если это может помочь. Пример:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))
для 54 байтов.<42
вместо,!=42
потому что «Вы можете предположить, что седьмой символ всегда является звездочкой или пробелом».