Inspiré par ce commentaire ...
Merci aux utilisateurs Step Hen , Wheat-Wizard et Dennis de m'aider à préciser les spécifications de ce défi avant de le poster!
C'est le fil des flics. Pour le fil des voleurs, allez ici
Dans ce défi , vous êtes chargé d’exécuter du code qui fait en sorte que votre langage ne réponde plus à nos critères de programmation. Dans ce défi, cela signifie faire en sorte que la langue ne puisse plus ...
Prendre des entrées et des sorties numériques
Ajouter deux nombres ensemble
Testez si un certain nombre est un nombre premier ou non.
C'est un flics et voleurs défi, où il y a deux défis différents avec deux objectifs différents: les Cops vont essayer d'écrire un code qui rend la langue la plupart du temps inutilisable, et les voleurs vont essayer de trouver la solution cachée qui permet aux flics pour récupérer leur langue.
En tant que flic, vous devez écrire deux extraits de code:
Celui qui rend votre langue pratiquement inutilisable, par exemple en supprimant les fonctions intégrées pour effectuer des opérations d’entrée / sortie et des opérations numériques. Plus vous supprimez de fonctionnalités, mieux ce sera. Ce code n'est pas autorisé à planter ou à sortir. Il devrait être possible d'ajouter du code à la fin de cet extrait, et ce code sera évalué . Et...
... un extrait de code qui prend deux entiers non négatifs en entrée, les additionne et génère leur somme. Cet extrait doit toujours fonctionner correctement, même après l'exécution du premier extrait. Lorsque les deux extraits sont combinés, ils doivent former un programme complet qui ajoute deux nombres ou définir une fonction qui ajoute deux nombres. Idéalement, cet extrait devrait s’appuyer sur un comportement très obscur, afin d’être plus difficile à trouver.
Vous pouvez choisir n’importe quelle méthode standard d’entrée et de sortie . Cependant, vous devez indiquer exactement le format (entrée et sortie) que vous utilisez. Un voleur ne peut pas déchiffrer votre réponse à moins d’utiliser le même format que vous.
Après avoir écrit ces deux extraits, vous devez poster le premier comme réponse, sans révéler le second. Votre réponse devrait contenir toutes les informations suivantes:
Le premier extrait (évidemment pas le second).
Langue (y compris la version mineure, car la plupart des soumissions s'appuieront probablement sur des cas marginaux étranges)
Format IO, qu'il s'agisse d'une fonction ou d'un programme complet. Les voleurs doivent utiliser le même format pour que leur crack soit valide.
Tous les cas étranges requis pour que votre réponse fonctionne. Par exemple, ne fonctionne que sur Linux ou nécessite une connexion Internet . Évidemment, ceci est légèrement subjectif, mais si un policier a un cas extrême qui l’empêche de se fendre, et ne le révèle alors qu’après avoir été en sécurité, j’envisage cet esprit sportif médiocre. Un cambrioleur potentiel devrait avoir toutes les informations nécessaires pour déchiffrer votre réponse avant qu'elle ne soit fissurée.
Vous n'avez pas besoin de révéler le nombre d'octets jusqu'à ce que votre réponse soit sécurisée.
Voici un exemple. Pour le premier extrait, vous pouvez soumettre le programme Python 3 suivant:
Python 3
print=None
Prend une entrée de STDIN et une sortie vers STDOUT
Et comme deuxième extrait, vous pourriez écrire:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Ceci est valide car il faut entrer deux nombres et générer leur somme même si vous joignez les deux extraits, par exemple:
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Cependant, il sera extrêmement facile pour un voleur de trouver une solution. Comme ce serait très facile à craquer, vous pourriez essayer de corriger cette approche particulière comme ceci:
import sys
sys.stdout=None
print=None
Cependant, même cela a une solution très simple:
del print
a,b=int(input()),int(input())
print(a+b)
En tant que policier, votre objectif est de rendre la solution de contournement cachée aussi obscure que possible, afin d’empêcher les voleurs de la trouver.
Les voleurs examineront l'une de vos réponses et tenteront de la résoudre. Ils peuvent le déchiffrer en écrivant un extrait valide qui pourrait fonctionner en tant qu'extrait 2 (en ajoutant deux nombres ensemble une fois que la langue est pratiquement inutilisable). Cela ne doit pas forcément être le même extrait que celui que vous aviez initialement prévu. Si un voleur déchiffre votre réponse, il laissera un commentaire, et vous devrez ensuite le modifier pour indiquer qu'il a été fissuré. Si votre message est fissuré, vous devez modifier votre réponse pour afficher la solution (extrait 2) initialement envisagée. Ce n'est pas une règle en soi , mais une suggestion amicale de garder le jeu amusant. Tu n'as pas à.
Si une réponse reste non masquée pendant une semaine entière, vous pouvez modifier votre deuxième extrait et indiquer que votre réponse est maintenant sûre . Si vous ne le modifiez pas à la fin de la semaine, les autres utilisateurs peuvent le résoudre jusqu'à ce que vous le fassiez. Si vous ne divulguez pas votre deuxième extrait, vous ne pouvez pas réclamer de points pour votre réponse, ni l'appeler en toute sécurité.
Le gagnant du fil des flics est la réponse la plus courte et la plus sûre, y compris les deux extraits , comptés en octets, et cette réponse sera acceptée après un délai suffisant. Vous n'avez pas besoin de révéler votre nombre d'octets jusqu'à ce que votre réponse soit sécurisée, car le nombre d'octets n'est pas pertinent pour votre score jusqu'à ce que votre réponse soit sûre. Si suffisamment de temps s’est écoulé et qu’aucune réponse n’est restée non fissurée, le gagnant sera la réponse restée non fissurée pendant la plus longue période.
S'amuser!
Clarifications de règles
Le premier extrait doit fonctionner correctement sans aucune entrée . Il peut produire ce que vous voulez et cette sortie sera ignorée - tant que, une fois l'extrait de code créé, le deuxième est correctement exécuté.
Le deuxième extrait doit en réalité être exécuté pour que votre réponse soit valide. Cela signifie une réponse comme
import sys sys.exit()
n'est pas valide car cela ne casse pas la langue. Il se ferme tout simplement. De même, entrer dans une boucle infinie n'est pas valide, car le deuxième extrait ne sera jamais exécuté.
Après avoir été en sécurité, votre score correspond au nombre d'octets des deux extraits .
Cela remonte à Veuillez révéler tout cas étrange requis pour votre réponse au travail ... Votre soumission doit contenir suffisamment d'informations avant d' être révélée pour être reproductible après avoir été révélée. Cela signifie que si votre réponse devient sûre, et que vous modifiez ensuite: voici ma réponse. Oh, BTW, cela ne fonctionne que si vous l'exécutez sur Solaris, la blague est sur vous! votre réponse est invalide et sera supprimée et non considérée comme éligible pour gagner.
Le deuxième fragment de code est autorisé à se bloquer après la sortie de la somme - tant que la sortie est toujours correcte (par exemple, si vous choisissez une sortie sur STDERR et que vous obtenez alors une foule d'informations sur le blocage, elles ne sont pas valides).
Vous ne pouvez pas modifier votre code après avoir soumis une réponse.
Vous ne pouvez pas compter sur des fonctions cryptographiques telles que le cryptage, les fonctions de hachage, les CSPRNG, etc.
int main(){ do_evil_stuff(); }
où le code des utilisateurs devrait aller? Dans une fonction? Après toutes les déclarations dansmain
?