Qualquer um pode aumentar a saída de um programa adicionando caracteres, então vamos fazer exatamente o oposto.
Escreva um programa completo, uma função interna ou um trecho para um ambiente REPL em um idioma de sua escolha que atenda aos seguintes critérios:
Seu código deve ter pelo menos 1 caractere.
A execução do código original produz x caracteres de saída para STDOUT (ou alternativa mais próxima), onde 0 ≤ x <+ ∞ .
A remoção de qualquer caractere único arbitrário do código original resulta novamente em código válido, que produz pelo menos x + 1 caracteres de saída para STDOUT.
Nem o código original nem as modificações podem produzir saída de erro, seja para STDOUT, STDERR, syslog ou outro local. As únicas exceções a esta regra são avisos do compilador.
Seu programa pode não exigir sinalizadores ou configurações para suprimir a saída de erro.
Seu programa pode não conter erros fatais, mesmo que eles não produzam nenhuma saída.
O código original e as modificações devem ser determinísticos e terminar eventualmente (sem loops infinitos).
Nem o código original nem as modificações podem exigir entrada de qualquer tipo.
Funções ou trechos não podem manter nenhum estado entre execuções.
Considerando que essa tarefa é trivial em alguns idiomas e absolutamente impossível em outros, este é um concurso de popularidade .
Ao votar, leve em consideração a "relativa falta" do código, ou seja, uma resposta mais curta deve ser considerada mais criativa do que uma resposta mais longa no mesmo idioma .
111111111111111111^111111111111111111
(se você quis dizer a menor proporção).k
instruções constantes , a saída de cada programa fosse estritamente maior que a saída do original a partir de então (porque o outro programas repetiriam mais rápido ou produziriam mais a cada loop). Parecia bem interessante. Talvez eu veja se consigo terminar de qualquer maneira e faça outro desafio.Respostas:
Qualquer REPL com operação XOR de intercalação, 5 bytes
11^11
é claro que 0. As únicas outras possibilidades são1^11
ou11^1
são 10 ou1111
se produzem.fonte
99|99
-10
é maior que0
.TI-BASIC,
31Quando a última linha de um programa é uma expressão, a calculadora exibirá essa expressão. Caso contrário, a calculadora será exibida
Done
quando o programa terminar. A expressão aqui é a cadeia vazia, mas também pode funcionar com qualquer número de um dígito.2 bytes:
O mesmo que o acima, mas com um token de 2 bytes.
3 bytes:
Imprime
1
devido à multiplicação implícita. Pode ser estendido indefinidamente adicionando pares de⁻¹
's. O abaixo também funciona.Soluções mais longas:
Provavelmente também existem soluções com várias linhas, mas não consigo encontrar nenhuma.
fonte
Done
token; a calculadora é exibidaDone
ao concluir a execução de qualquer programa sem uma expressão na última linha (incluindo o programa vazio).CJam, JavaScript, Python, etc, 18 bytes
As saídas no CJam são:
JavaScript e Python funcionam de maneiras semelhantes. Não é competitivo em JavaScript e Python,
mas não é fácil encontrar um mais curto no CJam.fonte
Oitava, 5 bytes
(x: y) fornece a matriz de números entre x e y em incrementos de 1; portanto, entre 10 e 10, o único elemento é 10:
Quando o segundo argumento é menor que o primeiro, a oitava imprime a matriz vazia e suas dimensões:
Quando um caractere é removido do primeiro número, há mais elementos na matriz:
Quando os dois pontos são removidos, o número retorna:
fonte
Microscript, 1 byte
Isso não produz saída, pois
h
suprime a impressão implícita da linguagem. A remoção do caractere único produz um programa cuja saída é0\n
.Vou tentar encontrar uma resposta melhor mais tarde.EDITAR EM 17 DE NOVEMBRO:
Isso também funciona no Microscript II, com a exceção de que, em vez de render
0\n
, o programa vazio produznull
.fonte
Pitão, 3 bytes
G
é pré-inicializado com as letras minúsculas no alfabeto.c
é a função de divisão.cGG
divide o alfabeto por ocorrências do alfabeto, que terminam em['', '']
(8 bytes).Quando o segundo parâmetro estiver ausente,
c
divida a sequência por espaços em branco, tabulações ou novas linhas. Como nenhum deles apareceG
, a saída paracG
é['abcdefghijklmnopqrstuvwxyz']
(30 bytes).E
GG
simplesmente imprime duas vezes o alfabeto em duas linhas separadas:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz
(53 bytes).Experimente online: Demonstração
fonte
REPL Python, 6 bytes
Não é o mais curto, mas aqui está outra resposta de abuso de ponto flutuante:
Mas...
fonte
JavaScript (e muito mais), 5 bytes
44/44
oufonte
CJam, 5
Experimente online
fonte
Linguagem , 5 bytes
A duração do programa é 5, que corresponde ao programa brainf *** que
,
lê um final de caractere de entrada e termina sem saída.A remoção de qualquer caractere resulta no código
0000
que possui um comprimento de 4 correspondente ao programa brainf ***,.
imprimindo um caractere (ponto de código0
) e finalizando.O Unário equivalente seria
0000000000000
(13 zeros) porque você tem que preceder um líder1
para o comprimento binário do código de modo101
torna-se1101
.fonte
PHP, 6 bytes
Estou assistindo esse grupo há algumas semanas e fico impressionado com suas técnicas de programação. Agora eu tive que entrar, há algo que posso fazer, desculpe :-) No entanto, este pode ser meu último post aqui ...
(observe o espaço após o segundo
p
)Isso gera uma string vazia. A remoção de qualquer caractere gera o texto sem o caractere. Observe que ele pode produzir erros de HTML (conteúdo não renderizado pelos navegadores, por exemplo
<?ph
).Eu também tentei com a
echo
tag. ie por exemplo.:Este sai
1
. Se=
for omitido,<? __LINE__;;
é a saída. No entanto, remover qualquer caractere constante mágica resultará em E_NOTICE : Aviso: Uso de LNE constante indefinida - assumido ' LNE ' em ...Se os avisos não forem considerados erros (ponto 4 das regras), o mesmo se aplica :-)
fonte
<HTML>
tag etc.)php test.php
. O segundo código é inválido por sinal. A questão não proíbe erros, mas a saída de erros , ou seja, erros, aviso, avisos etc.#!
em um arquivo de script também funciona.Python,
108 bytesTrabalha em Python e amigos. Agradecemos a Jakube por mostrar como torná-lo 2 bytes menor.
Do IDLE:
originalmente eu tinha isso (10 bytes):
Do IDLE:
e na mesma nota:
funciona de forma idêntica devido ao bom arredondamento do Python, em 17 bytes.
fonte
56...
,26...
e depois56...
novamente, mas só há uma maneira de obter 56, por isso deve ser incluído apenas uma vez, não é?Intérprete SWI-Prolog
Nota: Você não pode remover a final
.
. Os intérpretes do Prolog sempre procurarão um período final para executar sua consulta. Portanto, se seguirmos estritamente as regras deste concurso e permitirmos remover o período em que ele não será executado, ele pulará uma linha e aguardará comandos adicionais até que um termina em um período.A consulta original é
__A=__A.
exibidatrue.
.A consulta é
_A=__A.
exibida_A = '$VAR'('__A')
. Modificações semelhantes (isto é, remover uma_
ou uma das duasA
) resultarão em saídas semelhantes.Por fim, a consulta
__A__A.
gera no SWI-Prolog:fonte
Sed, 1 byte
Como
sed
requer um fluxo de entrada, proponho uma convenção de que o próprio programa deve ser fornecido como entrada.Um programa alternativo é
x
, mas que somente muda de1
para2
bytes de saída quando excluído.fonte
K, 3 bytes
Saídas
0
no REPL. A remoção das 2 primeiras saídas0 1
, a remoção dos resultados da exclamação22
e a remoção dos 2 últimos resultam em uma sequência que varia entre as implementações K, mas sempre tem pelo menos 2 caracteres (em OK, é(2!)
; de acordo com @Dennis, saídas Kona2!
).fonte
*
impressões justas 2. Remoção das 2 impressões(*!)
(uma função incompleta) em OK; Não conheço outros intérpretes (por exemplo, Kona, k2, etc.), embora eu acredite que Kona imprima*[!;]
ou algo parecido. Eu fui removendo a estrela porque parecia a mais segura.MATLAB,
97 bytesTem 2 bytes a mais do que a outra resposta do MATLAB / Octave, mas eu gosto disso, pois é um pouco mais complexo.
O
'
operador do Matlab é a transposição conjugada complexa. Usando isso em um número imaginário escalar, você entendei' = -i
. Como números imaginários podem ser escritos simplesmente como2i
se pode fazer:A remoção de qualquer um dos caracteres resultará em uma das opções abaixo:
fonte
GolfScript, 2 bytes
Essa resposta não é competitiva, mas como é o código que inspirou esse desafio, eu queria compartilhá-lo de qualquer maneira.
Por padrão, todos os programas GolfScript imprimem a pilha inteira, seguida por um avanço de linha, executando
puts
na pilha inteira. A função emputs
si é implementada como{print n print}
no intérprete, ondeprint
é um built-in real en
é uma variável que mantém a string"\n"
por padrão.Agora, um programa GolfScript sempre empurra a entrada de STDIN na pilha. Nesse caso, como não há nenhuma entrada, uma string vazia é pressionada. A atribuição de variável
:n
salva essa sequência vazian
, suprimindo o avanço de linha implícito e tornando a saída completamente vazia.Ao eliminar
n
, você fica com a atribuição de variável incompleta:
(você acha que é um erro de sintaxe, mas não), para que o avanço de linha implícito seja impresso como de costume.Ao eliminar
:
, você fica comn
, o que pressiona um avanço de linha na pilha, para que o programa imprima dois feeds de linha.fonte
APL, J e possivelmente outras variantes, 3 bytes
Ele gera
1
em APL.-1
saídas¯1
e--
produz o seguinte no TryAPL :fonte
J, 5 bytes
Magnitude do número complexo
5 + 12i
no REPL..
J, 9 bytes
Com base na precisão do ponto flutuante, recíproco e inverso da matriz.
Experimente online aqui.
fonte
Mathematica, 3 bytes
fonte
Dyalog APL , 2 bytes
⍴0
retorna uma string vazia (comprimento 0)⍴
retornos⍴
(comprimento 1)0
retornos0
(comprimento 1)fonte
Swift (e muito mais), 8 bytes
saída (4 caracteres):
Ao remover o enésimo caractere, a saída é:
Existem 78 soluções possíveis como esta no formato de
a^b<c
.Eu acho que o objetivo desse desafio deve ser o maior número possível de bytes, porque quanto mais bytes, mais bytes possíveis serão removidos e, portanto, mais difíceis.
fonte
MathGolf , 2 bytes
Experimente online!
Explicação
Por que isso funciona?
A saída regular é
9
. Se o(
item for removido, a saída será 10. Se o♂
item for removido, o programa implicitamente exibirá um 0 da pilha para alimentar o(
operador, o qual será emitido-1
.fonte
Clojure, 11 bytes
No começo, pensei em publicar apenas uma resposta de caractere no REPL, como os outros idiomas, por exemplo
Mas o problema é que, se você remover esse caractere, o REPL não fará nada ao pressionar a tecla Enter. Então, ao invés disso, ele teve que ser envolvido com uma função permitida pelas regras da pergunta. Quando você chama essa função, ela retorna 1. Se você remover o único caractere na função,
a função retorna,
nil
que imprime mais dois bytes.fonte
1
neste caso (1 byte).05AB1E (herdado), 1 byte
Qualquer byte único em 05AB1E (legado) funcionaria, exceto em
[
(loop infinito).Veja aqui todas as saídas possíveis para todos os programas 05AB1E de byte único possíveis.
A remoção desse byte único para que um programa vazio permaneça produzirá o conteúdo de info.txt para STDOUT, por padrão.
Experimente online.
05AB1E , 1 byte
Experimente online.
Infelizmente, um programa vazio na nova versão do 05AB1E gera apenas uma nova linha de 1 byte por padrão ( Experimente on-line ); portanto, quase nenhum dos caracteres de 1 byte é possível, pois eles não precisam produzir nada. O único programa possível que não produz nada (também não é a nova linha implícita) é
?
até onde eu sei.fonte
Japonês , 2 bytes
Experimente online!
A
é pré-inicializada a 10,É
subtrai um, e o resultado é um byte:9
.A remoção de É resulta no programa
A
, que gera o valor de A10
, então o resultado é 2 bytes.Da mesma forma, a remoção de A resulta exatamente no
É
que é interpretado como -1 e como saída-1
, portanto, o resultado é 2 bytes.fonte
Encantos Rúnicos , 6 bytes (modificáveis)
Experimente online!
O Runic não possui um ambiente REPL e a gravação de um programa completo para satisfazer as restrições não é prontamente viável (levando a programas inválidos ou sem saída). Portanto, a parte do código
11-{{B
está atuando como uma função interna e somente essa parte pode ser modificada. AB
instrução está próxima o suficiente de um ponteiro de função e declaração de retorno para que essa classificação seja aceitável (pois salta o IP para uma posição no código, além de empurrar um local de retorno para a pilha que pode ser acessada por um subseqüenteB
ou descartado) .0
1
s:05
-
:11
{
:Error051
B
:120
A final
\
no final da primeira linha fornece um limite externo em torno da função interna, no caso de a instrução de retorno ser removida, para que o IP não seja sinuoso em todos os lugares por todo o lado, quer ou não (e não imprime saída).Observe que
Error051
é apenas uma sequência arbitrária; eu poderia colocar o que quisesse nessa parte do código e "Erro" foi um resultado divertido por ter um código que altera as coordenadas de retorno e o IP é teleportado para um local arbitrário.fonte