Напишите программу или функцию, которая при задании строки отфильтровывает столько байтов, сколько может, и возвращает очищенную строку. Однако, поскольку ваша программа их ненавидит, ни один из этих байтов не может присутствовать в вашем собственном коде.
Ваша оценка будет равна количеству отдельных байтов, которые ваша программа отфильтровывает из входных данных, причем чем выше, тем лучше. Это максимальная оценка 255 (поскольку ваша программа должна быть минимум один байт). Тай-брейк - это длина вашего кода, а чем ниже, тем лучше.
Например, если ваша программа отфильтровывает байты 0123456789
, она получает оценку 10, но сама ваша программа не может содержать эти байты.
правила
- Байты означают октеты.
- У вас также есть возможность принять входные данные в виде списка целых чисел со значениями от 0 до 255. Они соответствуют эквивалентным байтам.
- Ваш вывод должен быть в той же форме, что и ваш ввод
- Нет чтения вашего исходного кода
- Ваш код должен быть не пустым
- Да, я знаю, что будет ответ от Lenguage / Unary. Но, по крайней мере, гольф это пожалуйста?
;)
Изменить правило:
- Вы можете игнорировать байт, например, если он неотличим от завершающего байта для строки или для EOF. Тем не менее, это означает, что вы не можете использовать его в своем представлении, и это не засчитывается для вашего счета. Если вы решите сделать это, ваш максимальный счет будет 254, но вам не нужно обрабатывать этот байт, входящий в ваш ввод.
Ответы:
Japt
-P
, оценка: 255 (2 байта)f => filter, second f => everything but 'f'
Попробуйте онлайн!
Japt , оценка: 255 (2 байта)
От @Shaggy
o => remove everything but, second o => 'o'
Попробуйте онлайн!
источник
oo
также будет работать, без-P
флага.Python 2 , оценка 249, 1732 байта
Попробуйте онлайн!
Удаляет все, кроме
exc%="
и новых строк. Генерация кода - это xsot . Я сомневаюсь, что он оптимизирован, поэтому здесь можно сохранить много байтов!источник
Haskell, оценка
249250,1088335 байтОпределяет функцию,
!:
которая принимает список целых чисел и отфильтровывает все, кроме10,33,40,41,58,61
ASCII-кодов\n ! ( ) : =
.Попробуйте онлайн!
Как это работает: Сначала давайте переименуем функции и параметры в разумные имена:
Основная идея состоит в том, чтобы иметь список из двух разных функций (
listOfFunctions
), одну для сохранения элемента (k
) и одну для его удаления (d
). Список индексируется текущим элементом из входного списка (x
), и функция, которую он выбирает, определяет, следует ли сохранить или удалить элемент. В индексе 0 мы имеемd
, потому что мы хотим сбросить 0, первыйk
- в индексе 10, потому что мы хотим сохранить 10 секунд (переводы строки). Обаk
иd
принимают два параметра:x
и результат рекурсивного вызова с остальной частью списка (xs
).k
присоединяетx
к вызову recursice иd
просто возвращает рекурсивный вызов.Буквальный список функций заканчивается индексом 61 (символ
=
, последнийk
в списке) и сопровождается бесконечным числомd
. Это не только экономит много явногоd
, но и предотвращает необходимость заканчивать конечный список,[]
который потребует дополнительных символов.Редактировать: спасибо @ Örjan Johansen за +1 балл и -753 байта.
источник
|
за счет 250, 335 байт . Также определен синоним дляrepeat (!)
сокращения списка (резко, так как он|
был намного больше, чем второй по величине исключенный символ.(!):
последовательностей, вероятно, также поможет.!():=
. Извлечение[]
из существующего списка, например списка ввода, не будет работать, потому что оно имеет тип[Int]
, но нам нужно[a->[a]->[a]]
.!
естьcurry snd
, и=!
это бесконечный список из них, но это все, что я могу понять из этого.(=!)
, что-то вроде(!=)(=:)=(!):(!):(!):(!):(!):(=:)
или (более высокого уровня, может быть передана((!):)
или часть сама по себе)(!)!=(=:)=(!)((!)((!)((!)(=:))))
. Много вариантов для настройки. Количество повторений, какой второй (или даже третий) аргумент, если таковой имеется, и даже если он более оптимален для сжатия\n
или;
(длины блоков10 22 6 16 2
и33 6 16 1
).JavaScript (ES6), оценка: 242 (142 байта)
Довольно наивный подход с использованием массива байтов для ввода / вывода.
Попробуйте онлайн!
Как?
Эти 14 символов, которые не являются отфильтрованные
'().=>[]efilrt
. Они помеченыe
в строке поиска. Для символов вышеt
(ASCII код 116) , которые не определены в этой строке,'f'>undefined
является ложным .источник
t=>t.filter(t=>'f'>'fffffffffffffffffffffffffffffffffffffffeeeffffeffffffffffffffeeffffffffffffffffffffffffffffefefffffffeeffeffefffffefe'[t])
. Вот тестовое заявление TIO:console.log(f([...Array(256).keys()]).map(c => String.fromCharCode(c)))
APL (Dyalog Unicode) , оценка: 253, тай-брейк: 8 байт SBCS
Функция анонимного молчаливого префикса
Попробуйте онлайн!
∩
пересечение аргумента∘
а также'∩∘'''
три символа в коде (∩∘'
)источник
Оболочка POSIX , оценка 249, 18 байт
Попробуйте онлайн!
Простая
tr
команда, которая удаляет все символы, кроме-\cdrt
и пробела. Требуются четыре обратные косые черты, потому что и оболочка, иtr
команда используют экранирование обратной косой черты. Пятый обратный слеш экранирует следующий символ пробела.Если
tr -cd
считать языком программирования, можно написать однобайтовую программу с результатом 255.источник
tr
имеет классы символов, используемые в регулярных выражениях, но сами полные регулярные выражения отсутствуют.tr -cd \ cdrt\\-\
попробовав онлайн!C (gcc) , оценка
232235239241242,260407352249243249 байтПопробуйте онлайн!
Функция, принимающая указатель на начало и конец массива int (где end - это первый символ, который не включен), указатель на буфер и указатель на другой указатель int. Он записывает результат в буфер и конечный указатель результата в последний указатель.
источник
Регулярное выражение, оценка: 255, 2 байта
Соответствует персонажу
\
.Попробуйте онлайн!
источник
Желе , оценка 254 (4 байта)
Попробуйте онлайн!
⁾xy
является сокращением для“xy”
(двухсимвольная строка).Мы
f
фильтруем входную строку до символов, встречающихся в“f⁾”
.источник
f⁾⁾f
но я решил задать вопрос о том, чтобы взять строки в Юникоде, прежде чем публиковать.Ruby -p, оценка 248 (8 уникальных байтов / 483 байта)
Попробуйте онлайн!
источник
Python 2 , оценка
244245246,133901575 байтПринимает список целых чисел
Попробуйте онлайн!
Это приводит к следующей строке кода:
Этот ответ, очевидно, теоретический. Структура
Теоретически это будет выполняться так же, как:
Python 3 , оценка
240241, 54 байта+1 спасибо Джонатану Аллану .
Попробуйте онлайн!
источник
\
в вашей версии Py 3, используя тройные кавычкиb''' ':[]abdfilmnor'''
. В Python 2 вы можете сделать полную программу в том же духе для 242:,print(''.join(p for p in input() if p in ''' '().fijnoprtu'''))
хотя и не так хорошо, какexec
.Чисто , оценка 247,
234213208 байт-5 байт благодаря Орджану Йохансену
Попробуйте онлайн!
Использует рекурсивную функцию сопоставления с образцом для удаления символов. Даже не нужно
StdEnv
.источник
=\
вместо===
.t
иtt
во второй последней строке.==
вt
но сохраняющий==
как синоним для него.Perl 5
-p
, оценка 251, 13 байтПопробуйте онлайн!
источник
05AB1E , оценка:
252253 (43 различных использованных байта ; всего 8 байтов )Попробуйте онлайн.
Объяснение:
Обратите внимание, что порядок строк
ÃJ
и„J
в 2-символьных строках важен, поскольку„
он также используется для словарных слов , где каждые два символа являются словарным словом (за исключением нескольких выбранных символов, таких как буквы, цифры-
и т. Д.). Таким образом,„JÃ
было бы словоJ
, а также словарное словоÃ
+ следующий символ (в данном случае„
), который, по-видимому, является словом"causing"
.источник
Perl 5, оценка 251 (5 различных байтов, всего 8058 байтов)
Попробуйте онлайн!
Использует
<>^es
полное по Тьюрингу подмножество Perl . Приведенный выше код был полученprint<>=~y<<>^es><>cdr
через мой конвертер .источник
Брахилог , оценка 249, 16 байт
Попробуйте онлайн!
Не совсем уверен, как это работает с правилами, что с Brachylog, имеющим свою собственную специальную кодовую страницу и все, но я все еще могу объяснить, как это работает:
источник
Октава , счет
248249 (50 байт)Там было , чтобы быть лучше ... и есть!
Попробуйте онлайн!
Отфильтровывает все, кроме
@al()'=
.all
Функция превосходит болееany
, потому что он использует только два различных байт. Обратите внимание, чтоany(...)
равноnot(all(not(...)))
. Итак, начнем с программыВместо
~
(not
) мы также можем написать0==
. Конечно, это будет означать, что мы также должны отфильтровать0
. Вместо этого обратите внимание, что следующее выражение также ложно (ноль)Если совместимость с MATLAB не является проблемой, я могу перейти к 47 байтам
источник
Ленгуаг (с
stty +brkint -ignbrk
), оценка 255, 3890951 байтПрограмма состоит из 3890951 байта NUL (что делает ее одной из самых коротких программ Lenguage за всю историю; 3890951 байт достаточно мал, чтобы уместиться на моем диске, поэтому я фактически запустил это в интерпретаторе Lenguage). ОП хотела, чтобы решение Lenguage / Unary было в гольфе, так что здесь мы. (Обратите внимание, что Unary будет гораздо дольше, потому что это требует использования
0
а не разрешения использования NUL.)Обратите внимание, что Lenguage, несмотря на то, что подразумевает его документация, не ведет себя так, как мозговой отстой; Ввод / вывод работает совершенно иначе (что я заметил при тестировании этой программы). В частности, Lenguage отказывается принимать входные данные от чего-либо, кроме терминала, поэтому отфильтрованные байты являются необработанными байтами, передаваемыми через соединение терминала (обратите внимание также, что, поскольку он отфильтровывает необработанные байты, вы не увидите ключи вы печатаете вообще). На практике это означает, что программа будет принимать любые входные данные, отправленные ей, за исключением байта NUL (обычно набираемого как Ctrl- @), который будет отображаться буквально (в этот момент подавляющее большинство терминалов будет игнорировать его, поскольку байт NUL является терминальным эквивалентом инструкции NOP). Чтобы убедиться, что программа работает,
Что происходит в EOF? Что ж, если терминал отправляет серию байтов, нет способа отправить EOF; все 256 возможных байтов интерпретируются буквально, и больше ничего нельзя вставить в поток терминала. Однако, если вы используете устаревший последовательный терминал, вы можете нажать кнопку «перерыв» на своем терминале, чтобы преднамеренно отправить неверно закодированные данные, что позволит получить 257-й возможный код; этот «разрыв» является единственным правдоподобным эквивалентом EOF, так как он отправляется вне диапазона и указывает на что-то отличное от достоверных данных. Если в конфигурации вашего терминала установлен флаг «прерывание по прерыванию» (а интерпретатор Lenguage, насколько я могу судить, не изменяет эту настройку), отправка сигнала прерывания вызовет сбой интерпретатора Lenguage, который удобно действует как способ реализации желаемого поведения EOF. Я не уверен, является ли это настройкой по умолчанию (потому что на самом деле никто не использует последовательные терминалы в настоящее время, она в основном никогда не появляется), поэтому я упомянул об этом в заголовке как часть спецификации используемого интерпретатора языка.
объяснение
Внутренний цикл выйдет только тогда, когда на терминале будет набрано NUL; после этого мы немедленно повторяем введенный символ (т. е. NUL). Добавление 1 в этот момент гарантирует, что ленточный элемент 0 снова будет отличен от нуля, поэтому внешний цикл не может вообще завершиться (до тех пор, пока ввод прерывания не прервет работу интерпретатора), и мы вернемся во внутренний цикл.
Гольф лучше всего использовать вычитание для входа во внешнюю петлю, но дополнение для продолжения петли вокруг нее; сложение имеет более короткую кодировку, но не может появляться в начале программы (поскольку кодировка будет выглядеть как начальные нули и, следовательно, будет игнорироваться).
источник
truncate
не создает разреженных файлов для меня (возможно, файловая система не поддерживает их?). Однако, насколько я могу судить, эталонный интерпретатор Lenguage считывает входной файл по очереди за раз (!), Поэтому, если программа не содержит символов новой строки, достаточно длинная программа израсходует доступную память. Конечно, это можно исправить с помощью нового переводчика.C # (интерактивный компилятор Visual C #) , оценка 245, 111 байт.
Попробуйте онлайн!
C # (интерактивный компилятор Visual C #) , оценка 243, 33 байта
Наивное решение с использованием
Intersect
Попробуйте онлайн!
источник
Retina 0.8.2 , 12 байт, оценка: 250
Попробуйте онлайн! Фильтрует все символы новой строки , за исключением,
[
,\
,]
,^
иn
. Хотя символы[\]^
являются последовательными, использование диапазона фактически стоило бы байта, а также уменьшило бы мой счет.источник
Japt , 249 баллов, 20 байтов
Попробуйте онлайн!
источник
oQ+"+oQ"Q
или просто,oo
но это всего лишь вариант решения Луиса.PHP, оценка 234,
5862 байтаБеги как труба с
-nF
или попробуйте онлайн .источник
Рубин
-paF[^$_=F*']
, оценка 250, 8 байтЯ совсем не уверен, что это допустимо в соответствии с текущими правилами сайта для флагов командной строки, поскольку «флаг» здесь является своего рода передачей кода, который включает в себя запрещенные байты.
F
Флаг определяет входной сепаратор регулярное выражение , состоящее из всех символов , не в коде правильной. Собственно код устанавливает вывод для объединения всех входных записей.источник
МАТЛ , оценка 252
Попробуйте онлайн!
Пояснение (для ввода
input
)источник
Pyth , оценка 249, 16 байт
Фильтрует все символы , кроме
f
,s
,T
,z
,"
,/
, и\
Попробуйте онлайн!
источник
K, оценка 246, 23 байта
{x@&~x in"\"~ in@&{x}"}
{..} лямбда с аргументом x
читать как «возвращает х, где не х в строке»
Строка содержит \ "~ in @ & {x} (десять байтов, используемых в программе)
источник
sfk , оценка 239, 133 байта
Попробуйте онлайн!
Выполняет замены на входе (записанные как
[delim][from][delim][to][delim]
), заменяя все символы, используемые в программе, на себя, что удаляет позиции символов из рассмотрения для ввода в окончательную замену,x[byte]xx
которая отображает все байты в пустую строку.источник
JavaScript, оценка 250,
95573,59273 байтаСлегка играемое JS решение, которое затем запускается по алгоритму JSFuck . Много байтов, но хороший результат.
Оригинал:
Рендеринг JSFuck состоит из 59273 символов:
источник
s=>s.replace(/[^![\]+()]/g,'')
должен работатьbrainfuck , оценка: 248, 162 байта
Попробуйте онлайн!
Обычно я не отвечаю на свои вопросы, но люди, кажется, прочитали мою профильную страницу, особенно там, где она говорит
If someone comments on a question "I wish there was a brainfuck solution", I feel obliged to provide one.
Отфильтрованные байты являются
-<>[],.
байтом NUL и игнорируют его, поскольку он неотличим от EOF. Это немного дольше, чем обычно, так как я намеренно избегаю использовать,+
чтобы получить немного лучший результат. Тем не менее, я мог бы сыграть в гольф часть генерации чисел, чтобы сэкономить несколько байтов.источник
Пробел , оценка: 253 (использовано 3 разных байта, всего 97 байтов)
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только для пояснения.Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками). Приятным бонусом является то, что я могу использовать этот код для преобразования выделенного кода выше в необработанную программу Whitespace (что я и сделал в этом TIO в качестве примера), для которой я обычно использую Notepad ++. :)
Объяснение:
Довольно прямо вперед. Вот псевдокод:
источник