J'ai cent coffres-forts, chacun dans un autre. Chaque coffre-fort a un mot de passe, composé d'un seul numéro.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
Il est trop difficile de mémoriser tous ces mots de passe et il n'est pas sûr de conserver les mots de passe sur un morceau de papier. La seule solution à laquelle je peux penser est d'utiliser un programme avec exactement cent caractères. Le mot de passe du n
coffre-fort sera trouvé en traitant les premiers n
caractères du code comme un programme.
Ainsi, le premier caractère du programme, s'il est exécuté en tant que programme seul, doit sortir 95
. Les deux premiers caractères doivent sortir seuls 43
. L'ensemble du programme doit sortir 97
.
J'avoue que c'est vraiment difficile. Alors faites de votre mieux. Essayez de faire fonctionner votre programme pour autant de coffres que possible , et je mémoriserai les mots de passe pour le reste.
Règles
- S'il y a égalité, le gagnant est la première soumission.
- Failles standard interdites. Cela inclut la lecture à partir d'autres fichiers ou d'Internet.
- Vous avez quelques options pour le code:
- Un programme complet qui imprime le bon numéro
- Une fonction qui la retourne ou l'imprime
- Une expression qui l'évalue (par exemple en C,
4+3
évalue à7
)
- Vous pouvez supposer un environnement REPL
- Vous pouvez utiliser différentes techniques pour chaque valeur de
n
. Par exemple, vous pouvez utiliser différentes langues pour chacunen
, ou parfois utiliser un programme complet et parfois une fonction.
Remarque: ce scénario est complètement fictif. Si vous rencontrez un problème similaire, ne publiez pas vos mots de passe en ligne.
The only solution I can think of is to use a program with exactly one hundred characters.
Est-ce à dire que chaque programme doit contenir exactement 100 caractères?Réponses:
> <> (Poisson), 95
Commencer après le
'
met tous les personnages sur la pile et à la fin de la ligne, il s'enroule autour; ferme la chaîne avec le même'
; affiche le haut de la pile sous forme de nombre (n
) et termine l'exécution (;
).Les caractères pour 13 et 10 ont été changés en espace pour ne pas ruiner la disposition du code (car le poisson est un langage 2D.)
Certains ASCII non imprimables disparaissent dans la réponse. Programme correct ici.
Merci à Martin Büttner et Sp3000 pour les améliorations de 2 et 5 octets.
Vidage hexadécimal:
la source
'
pour l'analyse des chaînes, seulement"
, et il y a plusieurs"
s dans le programme qui devraient être remplacés./fish.py <(head -c 99 raw.php)
oùraw.php
est le nom qui s'est retrouvé en quelque sorte sur le fichier source que j'ai téléchargé. Soigné! Je ne peux pas dire que je le comprends encore ...CJam, 40
Je viens d'utiliser une approche gourmande (la plupart du temps) pour imprimer le prochain nombre possible (les carets marquent la fin du programme):
Les numéros suivants sont imprimés correctement:
Testez-le ici.
la source
CJam, 56
Voici une approche un peu plus élaborée. Il imprime correctement les 56 derniers chiffres:
Il y a de fortes chances que SE ait avalé certains caractères, alors voici une boîte à pâte . Vous pouvez essayer le code ici .
Il utilise le fait que le défi demande les programmes en caractères, donc j'utilise des caractères Unicode pour coder les 56 derniers caractères d'une fonction, qui laisse ensuite le bon élément sur la pile en incrémentant une variable à chaque invocation et sélectionner l'élément correspondant. Le reste du code appelle simplement la fonction à plusieurs reprises.
Le premier programme correct est celui qui se termine au second
F
dans le code. J'ai tripoté la longueur des caractères à encoder pendant un certain temps jusqu'à ce que j'atteigne le bon équilibre pour en faire le plus d'utilisation possible. Un ou deux autres pourraient être possibles avec cette approche.la source
Pyth,
9293Le code ci-dessus sera évidemment foiré car SE supprime les caractères de contrôle, alors trouvez le code réel ici
La logique est simple, la chaîne est la représentation des caractères de chaque nombre, à l'exception des 3 premiers qui sont utilisés par la logique de conversion et quelques guillemets et nouvelles lignes que j'ai remplacés par des caractères fictifs.
Je vais essayer d'augmenter le score ici.
Essayez-le en ligne ici
la source
(millésime) C - 88
Pas besoin de toutes ces idiotes de langues dédiées au golf. Mieux vaut revenir au bon vieux temps, avant que les mangeurs de quiches et leur non-sens "programme = algorithme + données" ruinent tout le plaisir.
Le code est une fonction C, stockée sous forme de chaîne.
Il renvoie la valeur binaire sous forme d'entier.
Exécutez-le dans DosBox avec Borland Turbo C 2.0.
Il n'y a pas de caractères de contrôle dans la chaîne, donc un copier-coller devrait fonctionner.
Compiler avec le
tiny
modèle de mémoire ou bien ...Si vous démontez le début de la chaîne, vous verrez quelque chose comme:
depuis
si
est utilisé comme adresse de la fonction, il pointe directement au code, suivi des mots de passe.Toutes les valeurs sont décalées de 35 pour éviter d'échapper les caractères de contrôle et les guillemets doubles.
Le code est long de 11 octets, il fonctionnera donc jusqu'à 12 caractères.
Malheureusement, la 11e valeur (34) est trop faible pour produire un mot de passe valide avec une valeur de décalage accrue (l'
ret
opcode est 195, vous auriez donc besoin d'un décalage de 161, et le décalage maximal pour éviter un basculement est 255-99 = 156) .11 caractères produiront une valeur erronée et votre PC virtuel subira des comportements indéfinis graves (et généralement mortels) avec 10 caractères ou moins.
la source
Matlab
3739Vous pouvez utiliser une partie (sans les points-virgules) de cette idée avec n'importe quel langage de programmation que vous aimez, qui imprime les résultats directement sur la console. Cela produira au moins 39 fois les bonnes réponses. (Je n'ai pas vérifié ceux où seul un demi-nombre pourrait donner une réponse correcte, mais j'en ai trouvé deux jusqu'à présent.)
la source
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- il ne montre que 28 matchs‌​
00+
012345679+-*;
Hors compétition: Javascript, 173
Voici une "solution", qui ne suit pas les règles dans le sens où elle contient un programme bien plus long que nécessaire, mais avec une longueur de base de 152 caractères
95
, et pour chaque caractère numérique suivant ajouté, jusqu'à 22 , il affichera un mot de passe supplémentaire:Malheureusement, cela ne fonctionne que jusqu'à 22 caractères (au moins dans le nœud REPL, tout ce qui précède semble ne pas être pris en compte), ce qui, à mon avis, est une limitation de la représentation numérique dans la langue. Si ce n'était pas pour cette limitation, en utilisant la chaîne de mot de passe complète de
(ce qui porte la longueur totale à 329 caractères) permettrait à cette logique de sortir chaque mot de passe.
Le code n'est pas particulièrement intelligent, il ne rase que quelques caractères par rapport aux solutions les plus triviales, en utilisant:
La plupart du temps, je voulais simplement écrire un programme Javascript qui soit valide avec une longueur variable, car le langage n'est pas trop bien adapté au golf en général.
Je suis nouveau sur codegolf, je m'excuse si la publication de telles solutions clairement invalides est mal vue.
la source
Python 2, 39
J'ai écrit un script qui essaie de nombreuses combinaisons d'expressions et les teste par rapport aux combinaisons sûres. Le mieux que j'ai pu gérer était de 39 matchs. J'ai été surpris de voir combien de combinaisons ont donné le score de 39. J'ai inclus un échantillon dans ma réponse.
J'ai essayé d'inclure les
^&|
opérateurs logiques mais les règles de priorité se sont compliquées.la source
DEBUG.COM, 93
Usage:
et le résultat apparaît dans
AL
la source