Votre tâche consiste à écrire un programme complet qui continuera à décompter à partir de 10 à chaque exécution.
- La première fois que vous exécutez le programme, il devrait être imprimé
10
. - La prochaine fois, il devrait sortir
9
. - La prochaine fois, il devrait sortir
8
, et ainsi de suite. - Au lieu d’imprimer
0
, le programme devrait planter. Vous ne devez plus gérer le programme en cours d'exécution par la suite. - Toute installation utilisée pour le stockage peut être considérée comme vide avant la première exécution du programme.
Voici un exemple d'implémentation dans Python 3:
try:f=open("a","r+");v=int(f.read())
except:f=open("a","w");v=10
1/v
print(v)
f.seek(0)
f.write(str(v-1))
C'est du code-golf , donc la réponse la plus courte (mesurée en octets) est gagnante.
Réponses:
6502 langage machine + Apple] [+ ROM, 12 (11? 10? 9?) Octets
Devrait commencer à
$8000
. Se bloque sur le moniteur système lorsque le nombre atteint 0.Devrait commencer à
$B1
. Cela enregistre un octet, car je peux utiliser la version (deux octets) de zéro pageDEC
, mais écrase la routine critique ApplesoftCHRGET
; vous devez le charger et l'appeler à partir du moniteur, puis utilisez CTRL+ BReturnpour réinitialiser BASIC une fois que vous avez terminé. Pas sûr si cela invalide ou pas.Devrait commencer à
$8000
. Cela n'initialise pas$9E
, économisant deux octets. Cependant, cela signifie que vous ne devez pas l'appeler avec une adresse négative (ou, si vous l'appelez depuis le moniteur, vous devez appeler le moniteur avec une adresse positive). Si vous le faites, de ApplesoftCALL
la routine va stockerFF
dans$9E
, l' amenant à ajouter 65280 au numéro lors de l' impression. Encore une fois, je ne sais pas si cela invalide la solution ou non.Devrait commencer à
$B1
. Ceci est une combinaison des deux programmes ci-dessus, économisant un total de trois octets; vous devrez appeler le moniteur avec une adresse positive, le charger et l'exécuter à partir de là, et utiliser Ctrl+ BReturnpour réinitialiser BASIC une fois que vous aurez terminé.Notez que ces programmes ne modifient que le programme en mémoire; recharger le programme à partir du disque réinitialisera le compte à rebours. Cela fonctionne parce que les Apple] [(et] [+, // e et // c) n’ont aucun système de protection de la mémoire; le programme (et ses auto-modifications) restera en mémoire même après sa fermeture. Vous pourrez donc continuer à l'exécuter de mémoire jusqu'à ce que vous remplaciez cette mémoire par quelque chose d'autre.
Échantillon échantillon
Explication
Explication de la version 10 octets
Des variantes
Imprime
ERR
et émet un bip lorsque le nombre atteint 0Normal - 15 octets
Écrasement
CHRGET
- 14 octetsN'initialise pas
$9E
- 13 octetsÉcrase
CHRGET
et n'initialise pas$9E
- 12 octetsGèle lorsque le nombre atteint 0
Normal - 12 octets
Écrasement
CHRGET
- 11 octetsN'initialise pas
$9E
- 10 octetsÉcrase
CHRGET
et n'initialise pas$9E
- 9 octetsla source
Perl sous Linux, 17 octets
J'ai pensé qu'il pourrait être intéressant de créer un programme qui ne maintienne aucun état et ne modifie pas son propre code source; autrement dit, il vérifie à quelle fréquence il est exécuté en interrogeant le système d'exploitation. La question dit "On peut supposer que toutes les installations utilisées pour le stockage sont vides avant la première exécution du programme" et nous voudrions donc partir d'un système d'exploitation complètement vide. En tant que tel, je ferais mieux de vous expliquer comment vous y prenez, sinon il est difficile de tester le programme.
Il existe en fait deux façons de configurer le programme. Quoi qu’il en soit, le système d’exploitation minimal utilisé n’exécutera rien d’autre qu’un shell (pour nous permettre d’exécuter Perl à son tour), et le shell le plus simple possible (pour qu’il ne fasse rien d’extrême qui rend le système Vide).
/bin/dash
est un bon choix ici, car il était conçu comme un shell minimal pour la récupération du système. Ensuite, nous devons démarrer Linux de telle sorte que rien ne soit exécutédash
. Nous pouvons le faire soit en redémarrant l'ordinateur avecinit=/bin/dash
la ligne de commande Linux pour qu'il démarre rien d' autre quedash
, ou (bien plus pratique) la création d' un conteneur Linux en utilisantunshare -Urfp /bin/dash
dans un terminal (unshare
ne pas réellement créer un système d' exploitation en blanc, mais il Simulerun; notamment, l’intérieur du conteneur pense que c’est sa racine,dash
pense qu’il est init, etc., comme cela arriverait avec un système d’exploitation vierge). Avertissement: Je n'ai pas encore testé cela sur du métal nu, mais uniquement à l'intérieurunshare
, mais cela devrait fonctionner dans les deux sens en théorie.Enfin, une fois que nous avons cette configuration, nous devons simplement examiner le PID; comme nous sommes sur un système vierge, le système init (ici, le shell) aura le PID 1, de sorte que les exécutions de Perl auront des PID de 2 à 12 inclus. Donc, notre programme ressemble à ceci:
Voici un exemple de parcours:
la source
unshare
ne supporte aucun des drapeaux-Urfp
.unshare
est assez nouveau (c'est une interface avec un système d'exploitation qui est tout aussi nouveau) et les bugs n'ont vraiment été corrigés qu'au cours de la dernière année. Si vous utilisez une version de 2 ans et demi, il n’est pas surprenant que ses fonctionnalités soient très limitées.Bash + sed,
414038 octetsEssayez-le en ligne!
la source
sed: invalid option -- '/'
. sed (GNU sed) 4.2.2Javascript, 42 octets
Testez-le avec ce violon - assurez-vous de vider votre mémoire de stockage locale pour réinitialiser le compte à rebours.
Merci à steenbergh, Lmis et obarakon pour de nombreux octets!
la source
y=localStorage;y.a=y.a||10;alert(y.a>0?y.a--:a)
peut vous faire économiser un octet.sessionStorage
pour tester avec une réinitialisation plus facile (utilisez simplement un nouvel onglet) mais bien sûr +2 octets.l=localStorage;l.l=-~l.l;alert(10-l.l||l)
pour enregistrer un octet, je supprimerais le mienconsole.log
ici, mais je préférerais que ce soita
évaluation d'évaluer si la valeur dans le stockage local n'est pas égale à 0.C #,
197160159125 octetsÉconomisé 34 octets grâce au lait
Et une version formatée (avec
ReadKey
ajouté pour que vous puissiez voir la sortie):Il est plus long que je ne le pensais, il y a donc de la place pour le golf.
la source
File.Exists
etFile.Create
au lieu deReadAllText
etWriteAllText
. Il suffit de vérifier si un nom de fichier existe, ne pas les deux avec le contenu du fichier. En outre,namespace System.IO
et vous pouvez supprimer l'espace de noms deSystem.Console.Write
. 125 octets:namespace System.IO{class P{static void Main(){var n=11;for(;File.Exists(""+--n););File.Create(""+n);Console.Write(n*n/n);}}}
Dyalog APL ,
332822/20? octetsJe ne suis pas sûr que ce soit valide, car il s'agit d'une fonction (qui doit être appelée avec un argument factice). Cependant, tous les programmes APL (purement fonctionnels ou non) ont le même statut et certaines versions de APL n’ont pas de programmes traditionnels, mais seulement des fonctions. En compensation, j'ai ajouté deux octets pour le nommer, bien que cela ne soit pas nécessaire pour obtenir l'effet désiré.
Notez que cela repose sur un caprice non officiel, qui
∘←
affecte globalement.6::
en cas d'erreur de valeur⊢c
retour c∘←10
qui est globalement fixé à 10⋄
maintenant÷÷c
retourne le double inversé (erreurs sur zéro) c∘←
qui est globalement mis àc-1
un de moins que cTryAPL en ligne!
Version de 28 octets certainement valable:
Fonctionne en définissant c sur 11 en cas d’absence, puis en soustrayant 1 de c , en inversant deux fois (ce qui donne une erreur div par zéro si c -1 est égal à 0), en affectant à c et en affichant la nouvelle valeur.
Ancienne version à 33 octets:
Fonctionne en se redéfinissant à chaque exécution, mais avec une nouvelle ligne inférieure. Affiche le nombre de lignes restantes deux fois inversé (moins deux), générant ainsi une erreur div par zéro lorsqu'il ne reste que deux lignes (l'en-tête et le code réel).
la source
Perl,
3736 octetsSe bloque lorsque la valeur initiale atteint -1 (ce qui aurait imprimé 0), car il écrit sur l'
=~
opérateur.Enregistré un octet en utilisant
sysopen
plutôt queopen
. Cela me permet d’imprimer enSTDOUT
premier, en utilisant la valeur de retour comme mode de fichier (1
, akaO_WRONLY
), avant que cette valeur ne$~
soit réaffectée.Exemple d'utilisation
la source
Perl 6 ,
6058 octetsNécessite un caractère de nouvelle ligne après
=finish
.die
peut être remplacé par1/0
.Explication:
Il obtient une liste de lignes après que
=finish
($=finish.lines
) le soustrait10
, et si le résultat n’est pas obtenu,0
il l’imprime, sinon ildie
s.La dernière chose qu'il fait est de s'ouvrir en mode ajout et d'ajouter une autre ligne à la fin.
la source
say $*PERL.compiler.version
)Python 2, 65 octets
Inspiré par la réponse de L3viathan .
Peut être réduit à 60 octets si vous pouvez choisir de nommer le fichier avec un seul caractère
x
, puis de le remplacer__file__
par'x'
. Dans ce cas, remplacez75
par70
.la source
Jolf, 20 octets
Essayez-le ici! Erreurs quand
0
est imprimé. Modifie le code. Explication à venir.la source
Applesoft BASIC, 21 octets (en jetons)
Remplacez
<CTRL-F>
et<CTRL-H>
avec leurs versions littérales. Notez que cela ne modifie que le programme en mémoire; le recharger à partir du disque réinitialisera le compte à rebours.Échantillon échantillon
Explication
PRINT 9 + 1
fait ce que vous attendez.CALL 2066
appelle la routine de langage machine 6502 à l'emplacement de mémoire 2066, qui est aprèsEND :
.END
interrompt le programme pour que la routine en langage machine (qui, pour l'interpréteur Applesoft, ne soit pas ordonnée) ne soit pas exécutée.La routine en langage machine décrémente simplement
9
dansPRINT 9 + 1
. Démontage:Lorsque le compteur atteint 0, il est "décrémenté" à
/
; tenter d'exécuter le programme provoquera alors une erreur de syntaxe.la source
*> <> ,
2018 octetsCela fonctionne réellement sur Linux (et tout ce qui supporte des fichiers nommés,
\n
je suppose). Il crée un fichier nommé\n
lors de la première exécution et des sorties10
. Il produit en sortie un nombre en moins à chaque exécution ultérieure, sauf en0
cas de blocage .Explication
la source
PHP 57 octets
ne plante pas vraiment mais quitte (sans décompter) quand il frappe
0
. Est-ce suffisant?Courez avec
-r
.la source
C #, 156 octets
J'ai joué au golf @ TheLethalCoder pendant un moment et j'ai pu économiser 3 octets en réordonnant les instructions et en éliminant int.parse (). Il y a encore place à amélioration, j'en suis sûr.
Ungolfed:
Méta-question: Il peut être difficile de prendre le travail de TheLethalCoder comme point de départ de ma réponse. Serait-il préférable (une fois que j'ai le représentant) d'ajouter ceci comme commentaire sur leur réponse? Je n'essaie pas de rivaliser avec eux, je veux juste montrer mon golf, pour une édification mutuelle.
la source
Powershell V2.0, 49 octets
(Le tout premier code de golf, impossible de trouver les règles sur la façon de calculer les octets. J'ai utilisé une calculatrice Chaîne en octets en ligne)
Fonctionnement:
la source
Java, 343 octets
Ma première tentative de golf
non-golfé
la source
java.io.*
et en évitant d'utiliser des noms de constructeur pleinement qualifiés. Vous pouvez également en couper 8 en utilisant le fait que "print" va automatiquement ficeler ses arguments:import java.io.*;class M{public static void main(String[] a) throws Exception{if(!new File("x").exists()) try(PrintWriter p=new PrintWriter("x")){p.print(10);}int b=new java.util.Scanner(new File("x")).nextInt();try(PrintWriter p=new PrintWriter("x")){p.print(b/b*b-1);System.out.print(b);}}}
?
opérateur basé sur l'existence du fichier lorsque vous lisezb
:import java.io.*;class M{public static void main(String[] a) throws Exception{int b=new File("x").exists()?new java.util.Scanner(new File("x")).nextInt():10;try(PrintWriter p=new PrintWriter("x")){p.print(b/b*b-1);System.out.print(b);}}}
import java.io.*;class A{public static void main(String[]a)throws Exception{File f=new File("f");int b=f.exists()?new FileInputStream(f).read()-48:10;new PrintWriter(f).printf("%d",b/b*b-1).close();System.out.print(b);}}
SQLite,
142137Cela pourrait probablement être fait beaucoup plus intelligemment.
141136 caractères pour le code:Plus 1 pour le nom
x
de fichier danssqlite3 x '…'
.la source
JavaScript, 74 octets
x=typeof x!=typeof 1?10:x!=1?x-=1:_
l=localStorage;l.a=typeof l.a!=typeof""?10:l.a!=1?l.a=--l.a:_;alert(l.a)
la source
alert
ou similaire, il ne s'agit que d'un extrait de code REPL.Ruby,
9487846159 octetsS'il vous plaît laissez des suggestions ci-dessous.
Merci @ ConorO'Brien pour les idées (certaines arrachées sans vergogne à sa réponse).
la source
puts i
=>p i
new
etsize
au lieu deopen
etlength
.Ruby, 52 + 1 = 53 octets
Suppose que le fichier est nommé
a
(+1 octet).Fonctionnement
la source
a
(ce qui n'est que +1).Python 2, 89 octets
la source
__file__
alors je me suis servi de cela dans ma réponse.len
s
, car j'ai besoin de lire, puis de chercher, puis d'écrire. Leprint x/x*x
fonctionnerait, mais n'améliore pas le nombre d'octets.TI-BASIC (TI-84 Plus) (15 octets)
Ans doit être égal à 0 (valeur par défaut) avant la première exécution.
Étant donné que
AnsAns/Ans
c'est la dernière ligne du programme, celui-ci sera sorti et stocké dans Ans à moins que Ans ne soit à 0, auquel cas une erreur de division par 0 se produit.la source
JavaScript, 41
l=localStorage;l.l=-~l.l;alert(11-l.l||I)
la source
a
au lieu del
quand je l'ai écrit et je l'ai modifié sans réfléchir, parce que je pensais que ça avait l'air plus amusant ... c'était trop tard et ici , Merci d'avoir fait remarquer cela.GNU Smalltalk,
70, 68 octetsCode de 66 octets +2 octets pour l'indicateur "-S"
EDITS
Golfé
Tester
Important
Vous devez exécuter gst en tant que root pour pouvoir modifier l'image par défaut ou spécifier votre propre image avec -I .
la source
PHP, 45 octets
Honnêtement, je ne sais pas si celui-ci compte.
Je posterais un lien vers un exemple, mais tous les testeurs en ligne que je connais ne permettent
session_start()
pas son utilisation.Cela continuera à décompter chaque fois que vous actualiserez la page jusqu'à 0, lorsque la
die
commande sera exécutée.la source
QBIC , 70 octets
Ouvre le fichier
a.b
(ou le crée s’il n’a pas été trouvé lors de la première utilisation), lit l’enregistrement 1 danse
. Si cet enregistrement n’est pas trouvé, supposons 10, sinon sous 1. Ate==0
, déclenche une erreur. Écrise
àa.b
.L’accès aux fichiers n’est pas intégré à QBIC, cela dépend fortement du QBasic sous-jacent.
la source
Lot, 72 octets
Doit être appelé en utilisant le nom de fichier complet, extension comprise. La dernière ligne ne doit pas avoir de fin de ligne. Fonctionne en écrivant
-1
à la fin de la dernière ligne pour qu’elle soit évaluée à 1 de moins à chaque fois.goto g
erreurs sur parce qu'il n'y a pas d'étiquette:g
.la source
R, 52 octets
Utilise essentiellement la
ls()
liste des noms de tous les objets stockés globalement. Si nous supposons que l'environnement global est vide et"x"
n'existe pas déjà, générezx=10
, sinon,x!=0
soustrayez1
sinon, appelez un argument manquant qui renvoie une erreur.la source
!
et en inversant l'ordre des arguments then et else, et deux autres en remplaçantx>0
parx
. (En outre,exists("x")
est un peu plus propre que"x"%in%ls()
, bien que égal en nombre d'octets.)Lot Windows, 61 octets
la source
JavaScript, 44 octets
la source