Любой может увеличить вывод программы, добавив символы, поэтому давайте сделаем прямо противоположное.
Напишите полную программу, внутреннюю функцию или фрагмент для среды REPL на языке по вашему выбору, который удовлетворяет следующим критериям:
Ваш код должен быть не менее 1 символа.
Запуск исходного кода приводит к выводу x символов в STDOUT (или ближайшую альтернативу), где 0 ≤ x <+ ∞ .
Удаление любого произвольного одиночного символа из исходного кода снова приводит к правильному коду, который выдает как минимум x + 1 символов вывода в STDOUT.
Ни исходный код, ни изменения не могут привести к выводу ошибок, будь то STDOUT, STDERR, syslog или где-либо еще. Единственными исключениями из этого правила являются предупреждения компилятора.
Ваша программа может не требовать каких-либо флагов или настроек для подавления вывода ошибок.
Ваша программа может не содержать фатальных ошибок, даже если они не выдают никаких результатов.
И исходный код, и модификации должны быть детерминированными и в конечном итоге заканчиваться (без бесконечных циклов).
Ни исходный код, ни модификации не могут требовать ввода любого вида.
Функции или фрагменты могут не поддерживать состояния между выполнениями.
Учитывая, что эта задача тривиальна в одних языках и совершенно невозможна в других, это конкурс на популярность .
При голосовании учитывайте «относительную краткость» кода, т. Е. Более короткий ответ следует считать более креативным, чем более длинный ответ на том же языке .
111111111111111111^111111111111111111
(если вы имели в виду самое низкое соотношение).k
инструкций выход каждой программы был бы строго больше, чем результат оригинала с тех пор (потому что другой программы будут зацикливаться быстрее или выводить больше каждый цикл). Это выглядело довольно интересно. Может быть, я посмотрю, смогу ли я закончить это в любом случае, и сделать еще один вызов.Ответы:
Любой REPL с каретной операцией XOR, 5 байтов
11^11
это, конечно, 0. Единственные другие возможности,1^11
или11^1
которые 10, или1111
который производит сам.источник
99|99
-10
длиннее, чем0
.TI-BASIC,
31Когда последняя строка программы является выражением, калькулятор отобразит это выражение. В противном случае калькулятор отображается
Done
после завершения программы. Выражение здесь является пустой строкой, но оно также может работать с любым однозначным числом.2 байта:
То же, что и выше, но с 2-байтовым токеном.
3 байта:
Печать
1
из-за подразумеваемого умножения. Может быть расширен до бесконечности путем добавления пар⁻¹
. Ниже также работают.Более длинные решения:
Возможно, есть и многострочные решения, но я не могу их найти.
источник
Done
токена; калькулятор отображаетсяDone
после завершения выполнения любой программы без выражения в последней строке (включая пустую программу).CJam, JavaScript, Python и т. Д., 18 байт
Выходы в CJam:
JavaScript и Python работают одинаково. Он не конкурентен в JavaScript и Python,
но в CJam не так просто найти более короткий.источник
Октава, 5 байт
(x: y) дает массив чисел между x и y с шагом 1, поэтому между 10 и 10 единственным элементом является 10:
Когда второй аргумент меньше первого, октава печатает пустую матрицу и ее размеры:
Когда символ удаляется из первого числа, в массиве появляется больше элементов:
Когда двоеточие удалено, номер возвращается сам:
источник
Microscript, 1 байт
Это не производит никакого вывода, поскольку
h
подавляет неявную печать языка. Удаление единственного символа производит программу, чей вывод -0\n
.Я постараюсь придумать лучший ответ позже.РЕДАКТИРОВАТЬ 17 НОЯБРЯ:
Это также работает в Microscript II, за исключением того, что вместо выдачи
0\n
пустая программа даетnull
.источник
Pyth, 3 байта
G
инициализируется строчными буквами в алфавите.c
это функция разделенияcGG
разделяет алфавит по вхождению алфавита, который заканчивается['', '']
(8 байтов).Если второй параметр отсутствует,
c
разбивает строку на пробелы, символы табуляции или перевода строки. Так как ни один из них не появляется вG
, вывод дляcG
-['abcdefghijklmnopqrstuvwxyz']
(30 байтов).И
GG
просто печатает дважды алфавит на две отдельные строки:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz
(53 байта).Попробуйте онлайн: демонстрация
источник
Python REPL, 6 байтов
Не самый короткий, но вот еще один ответ о злоупотреблении с плавающей запятой:
Но...
источник
JavaScript (и многое другое), 5 байтов
44/44
или жеисточник
CJam, 5
Попробуйте онлайн
источник
Lenguage , 5 байт
Длина программы равна 5, что соответствует программе brainf ***, которая
,
читает конец введенного символа и завершается без вывода.Удаление любого символа приводит к коду
0000
длиной 4, соответствующему программе brainf ***, которая.
печатает один символ ( кодовую точку0
) и завершается.Унарное эквивалент будет
0000000000000
(13 нулей) , потому что вы должны предварять ведущие1
к двоичному длины кода так101
становится1101
.источник
PHP, 6 байт
Я наблюдал за этой группой в течение нескольких недель и поражен вашими методами программирования. Теперь я должен был войти, есть кое-что, что я могу сделать, извините :-) Однако, это может быть мой последний пост здесь ...
(обратите внимание на пробел после второго
p
)Это выводит пустую строку. Удаление любого символа выводит текст без символа. Обратите внимание, что это может привести к ошибкам HTML (например, содержимое не отображается браузерами
<?ph
).Я тоже попробовал с
echo
тегом. то есть. например.:Этот вывод
1
. Если=
опущено,<? __LINE__;;
вывод. Однако удаление любого символа магической константы приведет к E_NOTICE : Примечание: использование неопределенной константы LNE - предполагается, что LNE в ...Если уведомления не считаются ошибками (пункт 4 правил), это также относится :-)
источник
<HTML>
тега и т. Д.)php test.php
. Кстати, второй код недействителен. Вопрос не запрещает ошибки, но вывод ошибок , то есть ошибки, предупреждения, уведомления и т. Д.#!
в файле скрипта тоже работает.Python,
108 байтРаботает на Python и у друзей. Спасибо Jakube за то, что показал, как сделать его на 2 байта меньше.
От IDLE:
Первоначально у меня было это (10 байт):
От IDLE:
и на той же ноте:
работает идентично благодаря хорошему округлению Python, в 17 байтах.
источник
56...
,26...
и56...
опять же, но есть только один способ получить 56, поэтому он должен быть включен только один раз, не так ли?SWI-Пролог переводчик
Примечание: вы не можете удалить финал
.
. Интерпретаторы Prolog всегда будут искать последний период для выполнения вашего запроса, поэтому, если мы будем строго придерживаться правил этого конкурса и позволим себе удалить период, в котором он не будет выполняться, он перешагнет строку и будет ждать дополнительных команд до заканчивается периодом.Исходный запрос
__A=__A.
выводитсяtrue.
.Запрос
_A=__A.
выходы_A = '$VAR'('__A')
. Подобные модификации (то есть удаление одного_
или одного из двухA
) приведут к аналогичным результатам.Наконец,
__A__A.
вывод результатов запроса в SWI-Prolog:источник
Sed, 1 байт
Поскольку
sed
требуется поток ввода, я предложу соглашение, что сама программа должна быть предоставлена в качестве ввода.Альтернативная программа
x
, но изменяется только1
в2
байты вывода при удалении.источник
К, 3 байта
Выходы
0
в REPL. Удаление первых 2-х выходов0 1
, удаление восклицательных результатов22
и удаление 2-х последних приводит к строке, которая варьируется между реализациями K, но всегда не менее 2 символов (в oK это(2!)
; в соответствии с @Dennis, выходами Kona2!
).источник
*
только что напечатанных отпечатков 2. Извлечение 2 отпечатков(*!)
(неполная функция) в ОК; Я не знаю о других переводчиках (например, Kona, k2 и т. Д.), Хотя я верю, что Kona напечатает*[!;]
или что-то подобное. Я пошел с удалением звезды, потому что это казалось самым безопасным.MATLAB,
97 байтЭто на 2 байта длиннее, чем другой ответ MATLAB / Octave, но, тем не менее, он мне нравится, так как он немного сложнее.
'
Оператор Матлаба является комплексно-сопряженным транспонированием. Используя это на скалярном мнимом числе, вы получитеi' = -i
. В качестве мнимых чисел можно написать просто, как2i
это можно сделать:Удаление любого из символов приведет к одному из следующих:
источник
GolfScript, 2 байта
Этот ответ неконкурентный, но так как этот код вдохновил меня на решение этой проблемы, я все равно хотел поделиться им.
По умолчанию все программы GolfScript печатают весь стек, а затем перевод строки, выполняя
puts
весь стек. Сама функцияputs
реализована так же, как{print n print}
в интерпретаторе, гдеprint
она является встроенной иn
является переменной, которая содержит строку"\n"
по умолчанию.Теперь программа GolfScript всегда помещает ввод из STDIN в стек. В этом случае, поскольку нет никакого ввода, пустая строка помещается. Присвоение переменной
:n
сохраняет эту пустую строкуn
, подавляя неявный перевод строки и делая вывод полностью пустым.Удаляя
n
, вы:
получаете неполное присвоение переменной (вы можете подумать, что это синтаксическая ошибка, но нет), поэтому неявный перевод строки печатается как обычно.Удаляя
:
, вы остаетесь сn
, что помещает перевод строки в стек, поэтому программа печатает два перевода строки.источник
APL, J и, возможно, другие варианты, 3 байта
Выводит
1
в APL.-1
выводит¯1
и--
выводит следующее в TryAPL :источник
J, 5 байт
Величина комплексного числа
5 + 12i
в REPL.,
J, 9 байт
На основе точности с плавающей запятой, обратной и матричной инверсии.
Попробуйте это онлайн здесь.
источник
Mathematica, 3 байта
источник
Дьялог АПЛ , 2 байта
⍴0
возвращает пустую строку (длина 0)⍴
возвращается⍴
(длина 1)0
возвращается0
(длина 1)источник
Swift (и многое другое), 8 байт
выходной (4 символа):
При удалении n-го символа получается:
Есть 78 возможных решений в формате
a^b<c
.Я думаю, что целью этой задачи должно быть как можно больше байтов, потому что чем больше байтов, тем больше байтов удаляется и, следовательно, сложнее.
источник
MathGolf , 2 байта
Попробуйте онлайн!
объяснение
Почему это работает?
Обычный вывод есть
9
. Если(
удаляется, вывод равен 10. Если♂
удаляется, программа неявно извлекает 0 из стека для подачи(
оператора, который выводит-1
.источник
Clojure, 11 байт
Сначала я подумал просто опубликовать односимвольный ответ в REPL, как и на других языках, например
Но проблема в том, что если вы удалите этот символ, REPL ничего не сделает при нажатии клавиши ввода. Поэтому вместо этого он должен был быть обернут функцией, разрешенной правилами вопроса. Когда вы вызываете эту функцию, она возвращает 1. Если вы удалите единственный символ в функции,
функция возвращает,
nil
которая печатает дополнительные два байта.источник
1
в этом случае (1 байт).05AB1E (legacy), 1 байт
Любой отдельный байт в 05AB1E (устаревший) будет работать, кроме
[
(бесконечный цикл).Смотрите здесь все возможные выходы для всех возможных однобайтовых программ 05AB1E.
Удаление этого единственного байта, так что остается пустая программа, выводит содержимое info.txt в STDOUT по умолчанию.
Попробуйте онлайн.
05AB1E , 1 байт
Попробуйте онлайн.
К сожалению, пустая программа в новой версии 05AB1E по умолчанию выводит только 1-байтовый символ новой строки ( попробуйте онлайн ), поэтому почти ни один из 1-байтовых символов невозможен, так как они ничего не должны выводить.
?
Насколько я знаю, единственная возможная программа, которая ничего не выводит (так что не является неявным переводом строки) .источник
Japt , 2 байта
Попробуйте онлайн!
A
предварительно инициализированы до 10,É
вычитает 1, и результат 1 байт:9
.Удаление É приводит к программе
A
, которая выводит значение A,10
поэтому результат составляет 2 байта.Точно так же удаление A приводит только к тому,
É
что интерпретируется как -1, а выводится как-1
, то есть результат составляет 2 байта.источник
Рунические чары , 6 (изменяемые) байты
Попробуйте онлайн!
Runic не имеет среды REPL, и написание полной программы, удовлетворяющей ограничениям, неосуществимо (что приводит либо к недопустимым программам, либо к выходу). Таким образом, часть кода
11-{{B
действует как внутренняя функция, и только эта часть может быть изменена. ЭтаB
инструкция достаточно близка к указателю на функцию и оператору возврата, что эта классификация должна быть приемлемой (так как она перемещает IP на позицию в коде, а также помещает место возврата в стек, доступ к которому может получить последующийB
или отброшенный) ,0
1
s:05
-
:11
{
:Error051
B
:120
Финал
\
в конце первой строки обеспечивает внешнюю границу вокруг внутренней функции в случае, если инструкция возврата удалена, так что IP не будет извилистым повсюду повсюду, но не выводить ничего.Обратите внимание, что
Error051
это просто произвольная строка, я мог поместить все, что хотел, в эту часть кода, и «Ошибка» была забавным результатом для кода, который получает координаты возврата и телепортирует IP в произвольное место.источник