Bons agents de golf du soir,
Votre mission est au nom du géant du divertissement notoire Eviltronic Arts. Dans le cadre de leur plan néfaste d'esclavage et de divertissement mondial, ils doivent vendre autant d'exemplaires de SimStation V que possible. Cela signifie que le logiciel doit mystérieusement cesser de fonctionner, après l'avoir démarré plusieurs fois.
Votre objectif est d'écrire un programme qui compte le nombre d'exécutions. Le programme ne doit rien faire d'autre puis écrire l'entier dans stdout. La première fois qu'il est exécuté, il doit retourner "1". Le prochain "2" et ainsi de suite. Le programme doit pouvoir atteindre au moins le chiffre "14", mais il n'y a pas de limite supérieure requise.
Cependant, votre programme ne doit pas écrire de nouveaux fichiers. L'accès à lui-même, au registre ou même à Internet est absolument OK. Mais certains de nos utilisateurs se méfient des nouveaux fichiers et les écraseront simplement! Le nerf! Vaincre les limitations des logiciels qu'ils ont légitimement achetés!
Le programme ne peut pas supposer un interpréteur ou un shell stable - le programme doit toujours fonctionner si l'intégralité de l'interpréteur nay shell nay ordinateur est redémarré entre l'exécution.
Comme il doit être aussi indétectable que possible, le code source le plus court gagnera.
Agents de bonne chance. L'industrie du divertissement compte sur vous.
Réponses:
script bash,
39,37,2118Bref et doux, ma première soumission en code golf :)
la source
echo
parid
: D;
par un retour à la ligne et supprimez le retour à la ligne de fin. Il sera encore plus beau :-)Python,
40,39, 38 caractèresDe plus, il n'y a pas de limite supérieure de ce type lors de l'exécution:
Comme vous pouvez le voir, la taille du programme augmente progressivement, mais il n'y avait pas une telle restriction dans le problème d'origine. Je crois que la taille du programme soumis est tout ce qui compte
la source
a+
,a
devrait fonctionner correctement.PHP 48 octets
Une approche simple d'auto-modification. Après avoir couru 99 fois, il plantera de façon spectaculaire.
⋮
la source
script bash, 37
la source
Ruby:
3121 caractères(Ceci est une réécriture de la solution Python d' Abhijit . Si vous aimez l'idée de base, votez sa réponse, comme je l'ai fait.)
Exemple d'exécution:
la source
<<
vous pouvez enregistrer quelques caractères: `open ($ 0* sh, 17
L'utilisation d'un service Web, une approche différente de celle des autres solutions existantes jusqu'à présent. Limite: la mémoire de ma machine.
JavaScript, 40
Ne compte guère comme un programme, mais c'est quand même assez long. Ne fonctionne pas dans Firefox dans un fichier local. Limite: 2 ^ 31.
la source
alert(localStorage.a=~~localStorage.a+1)
41 et techniquement parlant, le programme javascript serait sans les balises de script qui ne seraient que 33alert((l=localStorage).a=~~l.a+1)
a=localStorage;alert(a.b=~~a.b+1)
bien que le vôtre semble plus joli: DPHP 31
37caractèresAuto-modifiant. Cela compte à l'unaire. Faites attention que votre éditeur de texte n'essaye pas d'être utile et insérez un caractère de nouvelle ligne après le 1. Il ne fonctionnera (correctement) qu'en PHP <5.3.2 car il s'appuie sur php pour fermer les descripteurs de fichiers ouverts à l'arrêt. Ou est-il acceptable de divulguer des descripteurs de fichiers?
Version originale (36 caractères), toutes les versions PHP:
la source
Python, 50
Il utilise la même approche que la réponse de primo et se bloque de la même manière au 100e passage.
la source
J (58)
Vous devez l'exécuter en tant que script, cela ne fonctionnera évidemment pas à partir de la ligne de commande J.
En J, le tokenizer utilisé par l'interpréteur est disponible en tant que
;:
fonction, donc s'ilx
contient du code J, il;:x
contient les jetons J, c'est-à-dire:Alors:
echo m=.1
: mism
à 1, et écrivez-le à l'écrank=.1{ARGV
: stocke le 2ème élément dansARGV
(le nom du script) dansk
.1!:2[k
: écrivez la chaîne suivante dans le fichier enk
:;:1!:1[k
: lirek
, le script actuel et tokenize(<":m+1)(<3)}
: remplace le 3ème jeton par la représentation sous forme de chaîne dem + 1
;:^:_1
: exécuter le tokenizer en sens inverse, produisant une chaîneexit
: quitte l'interpréteur (il ne le fait pas tout seul même si vous exécutez un script)la source
PHP,
3433 caractèresMerci à Tim pour la mise à jour! Mon ancienne solution:
Le problème est que
$_SESSION[A]
est""
- chaîne vide - dans la première itération, maissession_start()
renvoie 1, vous pouvez l' ajouter et de tuer deux ou trois mouches d'un seul coup!Solution avec une syntaxe correcte (35 caractères):
la source
Haskell - 36 octets
Ajoute simplement
+1
à la fin du fichier source, qui est supposé être nomméa.hs
. L'.hs
extension est obligatoire dans ghc et ghci.la source
TI-Basic, 9 caractères
la source
Lot - 41
Étant donné l'exemple d'utilisation, je ne supposerais probablement pas que cette technique est viable - elle renomme le fichier .bat contenant le script -
Enregistrez-le dans un fichier appelé
0.bat
- et appelez en utilisant0.bat 2>nul
.2>nul
redirige stderr vers nul ce qui est nécessaire car ce script renommera le fichier contenant le script, une fois qu'il le fera, cmd ne pourra évidemment plus voir le script (avant qu'il ne frappe EOF) et renverra l'erreurThe batch file cannot be found.
Chaque appel consécutif du script devra bien entendu être
1.bat 2>nul ... 2.bat 2>nul ... 3.bat 2>nul ... etc ...
la source
Script mIRC, 28/22 octets
S'il est placé dans l'onglet "alias", "alias" peut être omis, ce qui fait 22 octets.
la source
Python,
4948 caractèresJ'ai réalisé que ce ne sera que 48 caractères sur Windows en raison de la
\r\n
. Sinon, il devrait être de 49.Une arnaque bon marché de la méthode par @grc
la source
C, 190 caractères. Fonctionne uniquement sur Win NT
la source
C #, 142 caractères
la source
Tcl, 63 ou 73 octets
Avec certains services Web, c'est 73:
se modifier est 63:
la source
C # -
201239234 caractèresFonctionne pour les 255 premières fois, puis passe à 0. Il ne produira rien lors de la première exécution.
Enregistrer sous Main.cs, compiler avec
Testé avec gmcs 2.10.8.1 et Mono runtime 2.10.8.1-5ubuntu2
la source
Powershell, 47 octets
suppose que le script est nommé
a.ps1
Le script s'écrase en remplaçant le
0
sur la première ligne avec1
,2
,3
et ainsi de suite.pourrait également économiser 8 octets supplémentaires en remplaçant les deux instances de
a.ps1
with1
et en enregistrant le script sous forme de fichier nommé1
bien que ce soit un peu loin pour moi.Remplacez la deuxième ligne par ceci si le fichier n'est pas enregistré en tant que «a.ps1».
0
en première ligne pour initialiser le décompteLe saut de ligne offre le moyen le plus simple de diviser le fichier en deux
cela prend le fichier 'a.ps1' et le lit comme un tableau de lignes, nous le parcourons ensuite avec
[0..1]
et le définissons sur les variables$n
qui sont converties en[int]
et$t
respectivement, de sorte que0
la première ligne devienne$n
et le 'code 'sur la deuxième ligne devient$t
Cela a utilisé la
,1,2
notation de tableau, pour créer un tableau de deux éléments, l'un étant le nombre stocké dans$n
pré-incrémenté et sorti vers stdout par l'utilisation de crochets implicites, le second étant la deuxième ligne de texte du fichier, puis également la sortie dans le fichier nommé 'a.ps1'comme l'entrée et la sortie sont des tableaux de chaînes, la mise en forme est minimale et presque tout est assumé par l'interpréteur.
la source
Zsh (pas de coreutils), 32 octets
(Notez la nouvelle ligne de fin) Utilise la longueur du script. A chaque appel, la dernière ligne ci-dessus s'ajoutera
:
(identique àtrue
) et une nouvelle ligne au script, d'où le/2
.Essayez-le en ligne!
la source
Rust / cargo-script, 283 octets
Bon mot:
Enregistrez sous
w
et exécutez aveccargo-script
:Ne répétez pas trop vite ou ça va rester coincé .
Partiellement non golfé:
Se cassera après 99999;
la source
GNU sed, 13 + 1 (drapeau n) = 14 octets
Courir: sed -nf ss
L'hypothèse est que le nom du fichier source est appelé
s
. Une nouvelle ligne de fin est nécessaire après le code, qui a été compté dans le total d'octets. Explication:la source