Boa noite, agentes de golfe,
Sua missão é em nome da famosa empresa de entretenimento Eviltronic Arts. Como parte de seu plano nefasto de escravidão e entretenimento no mundo, eles devem vender o maior número possível de cópias do SimStation V. Isso significa que o software deve misteriosamente parar de funcionar, após iniciá-lo algumas vezes.
Seu objetivo é escrever um programa que conte a quantidade de vezes que foi executado. O programa não deve fazer nada além de escrever o número inteiro em stdout. Na primeira vez em que é executado, ele deve retornar "1". O próximo "2" e assim por diante. O programa deve poder atingir pelo menos o número "14", mas não há limite superior necessário.
No entanto, seu programa não deve gravar novos arquivos. Acessar-se, ou o registro, ou mesmo a internet é absolutamente bom. Mas alguns de nossos usuários suspeitam de novos arquivos e apenas os substituem! O nervo! Derrotar as limitações do software que eles compraram legitimamente!
O programa não pode assumir um interpretador ou shell estável - o programa ainda deve funcionar se todo o interpretador ou o computador for reiniciado entre a execução.
Como deve ser o mais indetectável possível, o menor código-fonte vencerá.
Agentes de boa sorte. A indústria do entretenimento está contando com você.
Respostas:
script bash,
39,37,2118Curto e doce, minha primeira apresentação no código de golfe :)
fonte
echo
porid
: D;
por uma nova linha e remova a nova linha à direita. Até parecerá muito melhor :-)Python,
40,39, 38 caracteresAlém disso, não existe esse limite superior no tempo de execução:
Como você pode ver, o tamanho do programa aumenta gradualmente, mas não havia essa restrição no problema original. Eu acredito que o tamanho do programa enviado é tudo o que importa
fonte
a+
,a
deve funcionar bem.PHP 48 bytes
Uma abordagem simples de modificação automática. Depois de executar 99 vezes, ele travará espetacularmente.
⋮
fonte
script bash, 37
fonte
Ruby:
3121 caracteres(Esta é uma reescrita de Abhijit 's solução Python . Se você gosta da idéia base, upvote sua resposta, como eu fiz.)
Exemplo de execução:
fonte
<<
você pode salvar alguns caracteres: `open ($ 0,? A) <<" + 1 "; p 1 \`* sh, 17
Usando um serviço da Web, uma abordagem diferente das outras soluções existentes até o momento. Limite: a memória da minha máquina.
JavaScript, 40
Dificilmente conta como um programa, mas é bastante longo de qualquer maneira. Não funciona no Firefox em um arquivo local. Limite: 2 ^ 31.
fonte
alert(localStorage.a=~~localStorage.a+1)
41 e tecnicamente o programa javascript seria sem as tags de script que seriam apenas 33alert((l=localStorage).a=~~l.a+1)
a=localStorage;alert(a.b=~~a.b+1)
embora a sua parece melhor: DPHP 31
37caracteresAuto-modificador. Conta em unário. Tenha cuidado para que o seu editor de texto não tente ser útil e insira um caractere de nova linha após o 1. Ele funcionará (corretamente) no PHP <5.3.2 porque depende do php para fechar os descritores de arquivos abertos no desligamento. Ou é aceitável vazar descritores de arquivo?
Versão original (36 caracteres), todas as versões do PHP:
fonte
Python, 50
Ele usa a mesma abordagem da resposta do primo e trava de forma semelhante na 100ª corrida.
fonte
J (58)
Você precisa executar isso como um script, obviamente não funcionará na linha de comando J.
Em J, o tokenizer usado pelo intérprete está disponível como
;:
função, portanto, sex
contém código J,;:x
contém os tokens J, ou seja:Tão:
echo m=.1
: definam
como 1 e grave-o na telak=.1{ARGV
: armazena o segundo elemento emARGV
(o nome do script) emk
.1!:2[k
: escreva a seguinte string no arquivo emk
:;:1!:1[k
: leiak
, o script atual e tokenize(<":m+1)(<3)}
: substitua o terceiro token pela representação de string dem + 1
;:^:_1
: execute o tokenizer ao contrário, produzindo uma sequênciaexit
: saia do intérprete (ele não faz isso sozinho, mesmo que você execute um script)fonte
PHP,
3433 caracteresObrigado a Tim pela atualização! Minha solução antiga:
O problema é que
$_SESSION[A]
é""
- string vazia - na primeira iteração, mas comosession_start()
retorna 1, pode adicioná-lo e matar dois ou três moscas em um tiro!Solução com sintaxe correta (35 caracteres):
fonte
Haskell - 36 bytes
Simplesmente adiciona
+1
ao final do arquivo de origem, que é assumido como nomeadoa.hs
. A.hs
extensão é obrigatória em ghc e ghci.fonte
TI-Basic, 9 caracteres
fonte
Lote - 41
Dado o exemplo de caso de uso, eu provavelmente não assumiria que essa técnica é viável - renomeia o arquivo .bat que contém o script -
Salve isso em um arquivo chamado
0.bat
- e ligue usando0.bat 2>nul
.2>nul
redireciona o stderr para nul, o que é necessário porque esse script renomeia o arquivo que contém o script, uma vez que o cmd obviamente não pode mais ver o script (antes de atingir o EOF) e retornará o erroThe batch file cannot be found.
É claro que cada chamada consecutiva do script deve ser
1.bat 2>nul ... 2.bat 2>nul ... 3.bat 2>nul ... etc ...
fonte
script mIRC, 28/22 bytes
Se colocado na aba "aliases", "alias" pode ser omitido, produzindo 22 bytes.
fonte
Python,
4948 caracteresPercebi que este será apenas 48 caracteres no Windows devido ao
\r\n
. Caso contrário, deve ser 49.Um ripoff barato do método por @grc
fonte
C, 190 caracteres. Funciona apenas no Win NT
fonte
C #, 142 caracteres
fonte
Tcl, 63 ou 73 bytes
Com alguns serviços da web, são 73:
modificar-se é 63:
fonte
C # -
201239234 caracteresFunciona pelas primeiras 255 vezes e depois chega a 0. Ele não produzirá nada na primeira execução.
Salve como Main.cs, compile com
Testado com gmcs 2.10.8.1 e Mono runtime 2.10.8.1-5ubuntu2
fonte
Powershell, 47 bytes
assume que o script é nomeado
a.ps1
O script irá substituir-se substituir o
0
na primeira linha, com1
,2
,3
e assim por diante.também poderia economizar mais 8 bytes por replaceing ambas as instâncias de
a.ps1
com1
e salvar o script como um arquivo chamado1
embora este seja um pouco longe para mim.Substitua a segunda linha por esta se o arquivo não for salvo como 'a.ps1'.
0
na primeira linha para inicializar a contagemA quebra de linha fornece a maneira mais fácil de dividir o arquivo em dois
isso pega o arquivo 'a.ps1' e o lê como uma matriz de linhas; então, iteramos nele
[0..1]
e definimos isso para as variáveis$n
que são convertidas como[int]
e$t
respectivamente, para que0
a primeira linha se torne$n
e o código ' 'na segunda linha se torna$t
Isso utilizou a
,1,2
notação de matriz, para criar uma matriz de dois elementos, um sendo o número armazenado em$n
pré-incrementado e gerado no stdout pelo uso de colchetes implícitos, o segundo sendo a segunda linha de texto do arquivo e, em seguida, também produzindo no arquivo chamado 'a.ps1'como entrada e saída são matrizes de strings, é necessária uma formatação mínima e quase tudo é assumido pelo intérprete.
fonte
Zsh (sem coreutils), 32 bytes
(Observe a nova linha à direita) Usa o comprimento do script. Em cada chamada, a última linha mostrada acima será anexada
:
(idêntica atrue
) e uma nova linha ao script, daí o/2
.Experimente online!
fonte
Rust / script de carga, 283 bytes
Oneliner:
Salvar como
w
e executar comcargo-script
:Não itere muito rápido, senão preso .
Parcialmente sem golfe:
Quebrará após 99999;
fonte
GNU sed, 13 + 1 (sinalizador n) = 14 bytes
Corre: sed -nf ss
A suposição é que o nome do arquivo de origem seja chamado
s
. Uma nova linha à direita é necessária após o código, que foi contado no total de bytes. Explicação:fonte