Ceci est le fil des flics. Pour le fil des voleurs, allez ici .
introduction
Pour ce défi Cops / Robbers, les flics écriront des programmes de production et les entrelaceront ensemble. C'est le travail du voleur de sélectionner les programmes des flics pour produire les sorties souhaitées.
Règles de la police
Les flics peuvent utiliser jusqu'à 256 octets au total pour écrire entre 2 et 8 programmes (inclus), qui doivent tous produire une sortie. Tous les programmes écrits doivent être dans la même langue. Les flics "entrelaceront" leurs programmes ensemble pour rendre plus difficile pour les voleurs de comprendre ce que sont les programmes.
Maintenant, pour une description de l'imbrication. Considérez les chaînes représentant les différents programmes. Le processus d'imbrication est le retrait répété du premier caractère de l'un des programmes et sa concaténation à la fin d'une nouvelle chaîne jusqu'à ce qu'il ne reste aucun caractère dans aucun des programmes. Par exemple, si deux programmes sont lion
et TIGER
, une imbrication possible est TIliGoEnR
. Cependant, les programmes ne peuvent en aucun cas être brouillés, ce RoITEnlGi
n'est donc pas acceptable.
Il convient de noter que lorsque les caractères de tous les programmes sauf un sont supprimés des résultats d'une imbrication, le programme restant est affiché intact. Supprimer les lettres TIGER
des TIliGoEnR
résultats dans lion
.
Tous les programmes et sorties des policiers doivent contenir uniquement des caractères ASCII imprimables (20-7E) et des retours à la ligne. Les programmes ne doivent pas contenir d'erreurs et doivent s'exécuter en 10 secondes sur une machine raisonnable. Pour toute soumission, il doit y avoir un interprète gratuit de la langue quelque part. L'ajout de commentaires aux soumissions n'est pas autorisé, de même que le hachage et d'autres formes de cryptographie. Les programmes vierges ne sont pas autorisés (Désolé coincé ).
Le flic affichera le code entrelacé, la langue, le nombre de programmes différents utilisés et la sortie de chaque programme. Un grand merci à Martin d'avoir écrit ce script CJam pour entrelacer automatiquement vos programmes.
Les programmes sont jugés sûrs après qu'une semaine s'est écoulée depuis le moment de la publication. À ce stade, les flics doivent publier les programmes individuels afin de recevoir des points.
Notation
Deux composants sont ajoutés ensemble lors de la notation d'une soumission sécurisée.
- 256 divisé par la quantité 2 élevée à la puissance du nombre de programmes utilisés.
- Autour du nombre d'octets dans l'entrecroisement jusqu'à la puissance la plus proche de 2 et de le diviser en 256.
Par exemple, si l'entrée TIliGoEnR
(9 octets) était sûre, elle recevrait 256/2 ^ 2 + 256/16 = 80 points.
Lorsque la soumission d'un flic est piratée, le flic perd 16 points. Le flic doit indiquer que leur soumission a été piratée.
Le gagnant du défi des flics sera la personne avec le plus de points après une période de temps suffisante pour que les gens participent.
Classement
Il s'agit d'un travail en cours qui a été adapté par intrepidcoder à partir de cette question .
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown exact :
# Language Name, N programs, M bytes; Score ###/### (if safe/cracked)
Tout ce qui se trouve après un point-virgule sera ignoré, vous pouvez donc y mettre votre score.
Si votre soumission est sûre, mettez un en-tête comme celui-ci:
# Language Name, safe, N programs, M bytes; Score ###
S'il est fissuré, mettez un en-tête comme celui-ci:
# Language Name, [cracked](link-to-crack), N programs, M bytes; Score -16
/* Configuration */
var QUESTION_ID = 64520; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 43444; // This should be the user ID of the challenge author.
var SECONDSINDAY = 86400;
var SAFECUTOFFDAYS = 7;
var SORTBYTIME = true;
var SUBTRACTCRACKEDPOINTS = true;
var EXPIREDTIME = 1448232502000;
/* App */
var SAFE_REG = /<h\d>.*?[sS][aA][fF][eE].*<\/\h\d>/;
var POINTS_REG = /<h\d>.*(\d+)\s*program.*<\/h\d>/i; // /(?:<=|≤|<=)\s?(?:<\/?strong>)?\s?(\d+)/
// var POINTS_REG_ALT = /<h\d>.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var LENGTH_REG = /<h\d>.*?((\d+)\s*byte).*<\/h\d>/i;
var CRACKED_HEADER_REG = /<h\d>.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*<\/h\d>/;
var CRACKED_COMMENT_REG = /(.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*<a href=.*)|(.*<a href=.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*)/
var OVERRIDE_REG = /^Override\s*header:\s*/i;
var LANGUAGE_REG = /<h\d>\s*(.+?),.*<\/h\d>/;
var LANGUAGE_REG_ALT = /<h\d>\s*(<a href=.+<\/a>).*<\/h\d>/
var LANGUAGE_REG_ALT_2 = /<h\d>\s*(.+?)\s.*<\/h\d>/;
var LANGUAGE_REG_ALT_3 = /<h\d>(.+?)<\/h\d>/;
var answers = [],
answers_hash, answer_ids, answer_page = 1,
more_answers = true,
comment_page;
function answersUrl(index) {
return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function(data) {
data.items.forEach(function(c) {
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
var open = [];
answers.forEach(function(a) {
var body = a.body.replace(/(<h\d>.*);.*(<\/h\d>)/,"$1$2"); // Ignore all text after a semicolon.
var cracked = false;
a.comments.forEach(function(c) {
var was_safe = (c.creation_date + (SECONDSINDAY * SAFECUTOFFDAYS) > a.creation_date);
if (CRACKED_COMMENT_REG.test(c.body) && !was_safe)
cracked = true;
});
if (CRACKED_HEADER_REG.test(body)) cracked = true;
// if (SUBTRACTCRACKEDPOINTS||!cracked) {
var createDate = a.creation_date;
var currentDate = Date.now() / 1000;
var timeToSafe = (createDate + (SECONDSINDAY * SAFECUTOFFDAYS) - currentDate) / SECONDSINDAY;
var SafeTimeStr = (timeToSafe > 2) ? (Math.floor(timeToSafe) + " Days") :
(timeToSafe > 1) ? ("1 Day") :
(timeToSafe > (2 / 24)) ? (Math.floor(timeToSafe * 24) + " Hours") :
(timeToSafe > (1 / 24)) ? ("1 Hour") :
"<1 Hour";
var expired = createDate > (EXPIREDTIME);
var safe = timeToSafe < 0;
var programs = body.match(POINTS_REG);
var length = body.match(LENGTH_REG);
safe = safe && !cracked
isOpen = !(cracked || safe);
if (programs && length) {
var safepoints = (256/Math.pow(2,parseInt(programs[1],10)) +
256/Math.pow(2,Math.ceil(Math.log2(parseInt(length[1],10)))));
var crackedpoints = Math.pow(2, parseInt(programs[1],10),2) +
Math.pow(2,Math.floor(Math.log2(parseInt(length[1],10))));
valid.push({
user: getAuthorName(a),
numberOfSubmissions: (safe && !expired) ? 1 : 0,
points: (safe && !expired) ? safepoints : 0,
open: (isOpen && !expired) ? 1 : 0,
cracked: (cracked && !expired) ? 1 : 0,
expired: (expired) ? 1 : 0
});
}
if ((isOpen || expired) && programs) {
var language = body.match(LANGUAGE_REG);
if (!language) language = body.match(LANGUAGE_REG_ALT);
if (!language) language = body.match(LANGUAGE_REG_ALT_2);
if (!language) language = body.match(LANGUAGE_REG_ALT_3);
open.push({
user: getAuthorName(a),
safePts: programs ? safepoints : "???",
crackedPts: programs ? crackedpoints : "???",
language: language ? language[1] : "???",
link: a.share_link,
timeToSafe: timeToSafe,
timeStr: (expired) ? "Challenge closed" : SafeTimeStr
});
}
// }
});
if (SORTBYTIME) {
open.sort(function(a, b) {
return a.timeToSafe - b.timeToSafe;
});
} else {
open.sort(function(a, b) {
var r1 = parseInt(a.length);
var r2 = parseInt(b.length);
if (r1 && r2) return r1 - r2;
else if (r1) return r2;
else if (r2) return r1;
else return 0;
});
}
var pointTotals = [];
valid.forEach(function(a) {
var index = -1;
var author = a.user;
pointTotals.forEach(function(p) {
if (p.user == author) index = pointTotals.indexOf(p);
});
if (index == -1) {
if (SUBTRACTCRACKEDPOINTS && a.cracked) a.points -= 16;
pointTotals.push(a);
}
else {
pointTotals[index].points += a.points;
pointTotals[index].numberOfSubmissions += a.numberOfSubmissions;
pointTotals[index].cracked += a.cracked;
pointTotals[index].expired += a.expired;
pointTotals[index].open += a.open;
if (SUBTRACTCRACKEDPOINTS && a.cracked) pointTotals[index].points -= 16;
}
});
pointTotals.sort(function(a, b) {
if (a.points != b.points)
return b.points - a.points;
else if (a.numberOfSubmissions != b.numberOfSubmissions)
return b.numberOfSubmissions - a.numberOfSubmissions;
else if (a.open != b.open)
return b.open - a.open;
else if (a.cracked != b.cracked)
return a.cracked - b.cracked;
else return 0;
});
pointTotals.forEach(function(a) {
var answer = jQuery("#answer-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SAFE}}", a.numberOfSubmissions)
.replace("{{OPEN}}", a.open)
.replace("{{CLOSED}}", a.expired)
.replace("{{CRACKED}}", a.cracked)
.replace("{{POINTS}}", a.points);
answer = jQuery(answer);
jQuery("#answers").append(answer);
});
open.forEach(function(a) {
var answer = jQuery("#open-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SAFE}}", a.safePts)
.replace("{{CRACKED}}", a.crackedPts)
.replace("{{LANGUAGE}}", a.language)
.replace("{{TIME}}", a.timeStr)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#opensubs").append(answer);
});
}
body {
text-align: left !important
}
#answer-list {
padding: 10px;
width: 350px;
float: left;
}
#open-list {
padding: 10px;
width: 470px;
float: left;
}
table thead {
font-weight: bold;
vertical-align: top;
}
table td {
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr>
<td>Author</td>
<td>Safe</td>
<td>Open</td>
<td>Cracked</td>
<td>Late Entry</td>
<td>Score</td>
</tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="open-list">
<h2>Open submissions</h2>
<table class="open-list">
<thead>
<tr>
<td>Author</td>
<td>Points if Safe</td>
<td>Points if Cracked</td>
<td>Language</td>
<td>Time Remaining</td>
<td>Link</td>
</tr>
</thead>
<tbody id="opensubs">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr>
<td>{{NAME}}</td>
<td>{{SAFE}}</td>
<td>{{OPEN}}</td>
<td>{{CRACKED}}</td>
<td>{{CLOSED}}</td>
<td>{{POINTS}}</td>
</tr>
</tbody>
</table>
<table style="display: none">
<tbody id="open-template">
<tr>
<td>{{NAME}}</td>
<td>{{SAFE}}</td>
<td>{{CRACKED}}</td>
<td>{{LANGUAGE}}</td>
<td>{{TIME}}</td>
<td><a target="_parent" href="{{LINK}}">Link</a>
</td>
</tr>
</tbody>
</table>
|||
exemple), puis remplacer leN
dans le code par une chaîne contenant votre délimiteur, par exemple"|||"
. (@Eridan, n'hésitez pas à inclure cela dans le défi.)Réponses:
Hexagonie , 6 programmes, 53 octets; Score 8/96 (si sûr / fissuré)
Même si cela se passe en toute sécurité, ce sera très peu de points pour moi, mais je pensais que je fournirais un joli puzzle aux voleurs pour accumuler certains points. :) Je ne sais pas à quel point c'est facile ou difficile.
Voici les sorties:
la source
[
commutateurs contrôlent le pointeur d'instruction qui commence@
dans le coin gauche.JavaScript, craqué , 2 programmes, 110 octets; Score -16
😈 bonne chance avec celui-ci.
Remarque: je recommande d'exécuter sur un navigateur moderne (essentiellement pas IE)
Sortie, premier programme:
Sortie, deuxième programme:
la source
BitShift , craqué , 2 programmes, 110 octets; Score -16
Programmes entrelacés
Sortie, premier programme
Sortie, deuxième programme
je suis vraiment désolé
la source
Vitsy , cracké , 2 programmes, 15 octets; Score -16
Programmes entrelacés
Vitsy est si jolie, si propre. Regardez sa source et soyez impressionné.
Sortie, premier programme
Sortie, deuxième programme
C'est 121 nouvelles lignes.
la source
Java, fissuré , 2 programmes, 155 octets; Score -16
Programmes entrelacés
Sortie, premier programme
Et la fin de la nouvelle ligne.
Sortie, deuxième programme
Et la fin de la nouvelle ligne.
Programmes originaux
Premier
Seconde
la source
interface
place declass
jusqu'à ce que je vois votre réponse sur le Hello, World! défi. J'essaierai de casser ça pendant mon déjeuner.Pyth, sûr, 2 programmes, 63 octets; Score 68
Programmes entrelacés
Premier programme
Production:
Programme:
Deuxième programme
Production
Programme:
la source
# Pyth, safe, 2 programs, 63 bytes; Score 68
CJam, sûr, 2 programmes, 250 octets; Score 65
Programmes entrelacés
Sortie, premier programme
Sortie, deuxième programme
Solution
Premier programme
Essayez-le en ligne!
Deuxième programme
Essayez-le en ligne!
Comment ça fonctionne
Les deux programmes ont ce format:
Le désentrelacement des programmes devrait nécessiter soit la force brute, soit la factorisation des semi-nombres premiers.
la source
Befunge, Safe, 2 programmes, 228 octets; Score 65
Programmes entrelacés
Sortie, premier programme
Sortie, deuxième programme
Je doute que ce sera facile à résoudre. En fait, vous devriez simplement abandonner maintenant. Qui a quand même besoin de 132 points?
Répondre
Programme 1:
Programme 2:
la source
PHP, cracké , 2 programmes, 71 octets; Score -16
Entrelacé
Production
1er programme
2e programme
Remarque :
Notices
doit être supprimé.la source
JavaScript ES6, cracké , 2 programmes, 255 octets; Score -16
Bon travail @Bas! GG.
Sortie 1:
Sortie 2:
la source
JavaScript (ES6), sûr, 2 programmes, 255 octets; Score 65
Programmes entrelacés
Sortie du premier programme
Résultat du deuxième programme
J'ai essayé d'utiliser les personnages
(l)+=<>
autant que possible. Le reste est juste une conversion de type.Premier programme
Deuxième programme
la source
Rubis, craquelé , 2 programmes, 64 octets; Score -16
Entrelacé
Production
1er programme
2e programme
Les deux sorties ont des nouvelles lignes de fin.
la source
Perl, sûr, 2 programmes, 102 octets; Score 66
Première sortie
Deuxième sortie
Solution
Premier programme:
Deuxième programme:
la source
Pyth, 2 programs, 61 bytes; Score 68/36 (if safe/cracked)
Interleaved programs
Output, first program
Output, second program
Shouldn't be too hard.
la source
PHP, cracked, 3 programs, 31 bytes; Score -16
This should be an easy one using 3 programs.
Interleaved
Output
1st program
2nd program
3rd program
Note:
Notices
should be suppressed.la source
JavaScript ES6, 2 programs, 225 bytes; Score 65/132 (if safe/cracked)
Interweaved:
First output:
Second output:
la source
Brainfuck, 4 programs, 251 bytes; 17/144 (if safe/cracked)
Interweaved programs
Output, first program
Eridan
Output, second program
Ampora
Output, third program
PPCG
Output, fourth program
Code Golf
la source
Microscript II, safe, 2 programs, 44 bytes; score 68
Interleaved sources:
Output, first program:
Output, second program:
And here's the answer:
Program 1:
Program 2:
la source
Malbolge, 2 programs, 194 bytes; Score 65
Interweaved
Output 1
Output 2
It was only a matter of time.
Programs
O1
O2
la source
Javascript, safe, 2 programs, 106 bytes; Score 66
Output 1
Output 2
Solution
Program 1
Program 2
la source
Japt, safe, 3 programs, 63 bytes; Score 36
The version of the interpreter that this was built for can be found here. Unfortunately, I've lost the originals, so I'll have to see if I can crack it myself...
Interweaved programs
Output 1
That's 222 digits, in case you were wondering.
Output 2
Output 3
la source
JavaScript, 2 programs, 255 bytes; Score 65/132 (if safe/cracked)
First program output:
Second Program output:
The second programs output is text and not JavaScript's:
null
This should be easy for the robbers.
la source
Vitsy, 4 programs, 228 bytes; Score 17
(Uses an older version, which is linked)
Heeeyyyy @VoteToClose. I don't expect this one to be up long, but you never know… I love your language, now that I'm using it a lot!
Interweaved program
Output 1
Output 2
Output 3
Output 4
Good luck! I used the online interpreter, but it should work in the safe jar.
Programs
O1
O2
O3
O4
la source
Candy, safe, 2 programs, 85 bytes; Score 66
See: Candy
Outputs:
51450000
1609944
Update: This is the two programs followed by their interleaving:
la source
Foo, 6 programs, 197 bytes; Score 5/192 (if safe/cracked)
Interweaved code:
Output from 1st program:
Note the tab on first line and trailing space on second line
Output from 2nd program:
Note that the first line is blank
Output from 3rd program:
Output from 4th program:
Output from 5th program:
Output from 6th program:
There is only one interpreter for Foo which i know of, you can find it here
la source
@wizzwizz4
in your comment.Python 2, 8 programs, 92 bytes; Score: -16
Another easy one:
8 outputs:
la source
print
in Python 2.JavaScript, 8 programs, 233 bytes; Score 2/384 (if safe/cracked)
OK, now I'm being evil:
1st Output:
2nd Output:
3rd Output:
4th Output:
5th Output:
6th Output:
7th Output:
8th Output:
la source
Python 2, safe 2 programs, 148 bytes; Score 65
Output 1:
Output 2:
Program 1:
Program 2:
la source