Le fil des flics se trouve ici: The Mystery String Printer (Cops)
Votre défi
Notation
La notation fonctionne de manière similaire pour les voleurs, mais elle est légèrement différente:
- La fissuration de tout programme de ≤8 octets donne 1 point.
- La fissuration d'un programme ≤16 octets donne 2 points. ≤32 octets donne 4 points, et ainsi de suite.
- Chaque soumission supplémentaire, quelle que soit sa longueur, rapporte +5 points
- La soumission de chaque flic ne peut être piratée qu'une seule fois - seule la première personne à casser chaque soumission obtient les points.
Soumissions
Chaque réponse doit inclure
- Un lien vers la soumission du flic.
- Votre programme et votre langage de programmation.
- Ayez également la longueur du programme du flic (comme une puissance de 2) comme dernier numéro de votre en-tête.
De plus, veuillez commenter la soumission du policier avec un lien vers votre réponse.
Voici un extrait de pile pour générer des classements. Veuillez laisser un commentaire en cas de problème avec l'extrait. Si vous souhaitez voir toutes les soumissions ouvertes de flics, consultez l'extrait du défi des flics.
/* Configuration */
var QUESTION_ID = 60329; // 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";
/* App */
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();
var POINTS_REG = /(?:<=|≤|<=)\s?(?:<\/?strong>)?\s?(\d+)/
var POINTS_REG_ALT = /<h\d>.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
var open = [];
answers.forEach(function(a) {
var body = a.body;
var cracked = false;
var points = body.match(POINTS_REG);
if (!points) points = body.match(POINTS_REG_ALT);
if (points) {
var length = parseInt(points[1]);
var crackedpoints = 0;
if (length > 64) crackedpoints = 16;
else if (length > 32) crackedpoints = 8;
else if (length > 16) crackedpoints = 4;
else if (length > 8) crackedpoints = 2;
else crackedpoints = 1;
valid.push({
user: getAuthorName(a),
numberOfSubmissions: 1,
points: crackedpoints
});
}
});
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) pointTotals.push(a);
else {
pointTotals[index].points += a.points;
pointTotals[index].numberOfSubmissions++;
}
});
pointTotals.forEach(function(a) {
a.points += +((a.numberOfSubmissions - 1) * 5);
});
pointTotals.sort(function(a, b) {
var aB = a.points,
bB = b.points;
return (bB - aB != 0) ? bB - aB : b.numberOfSubmissions - a.numberOfSubmissions;
});
pointTotals.forEach(function(a) {
var answer = jQuery("#answer-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SUBMISSIONS}}", a.numberOfSubmissions)
.replace("{{POINTS}}", a.points);
answer = jQuery(answer);
jQuery("#answers").append(answer);
});
}
body {
text-align: left !important
}
#answer-list {
padding: 20px;
width: 240px;
float: left;
}
#open-list {
padding: 20px;
width: 450px;
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>Robber's Leaderboard</h2>
<table class="answer-list">
<thead>
<tr>
<td>Author</td>
<td>Submissions</td>
<td>Score</td>
</tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr>
<td>{{NAME}}</td>
<td>{{SUBMISSIONS}}</td>
<td>{{POINTS}}</td>
</tr>
</tbody>
</table>
Ce concours est maintenant terminé.
Vainqueur général: kennytm
La plupart des soumissions: Sp3000
(Notez que le nombre de soumissions ne se traduit pas exactement en points, car la longueur du programme piraté est comptée lors du calcul du score).
Réponses:
Pyth, Dennis, ≤ 8
Merde, c'était amusant - la partie la plus difficile était de trouver comment le faire assez court en Pyth.
Une analyse
Au
1234
début, il s'agit probablement d'une liste de chiffres, imprimée sans séparateur. Essayons de diviser les chiffres d'une manière logique:Il y a quelques indices que nous sommes sur la bonne voie:
Cependant, il y a quelques particularités. Le nombre à l'index 23 est 24 et est le seul cas où le nombre à l'index est supérieur à l'index lui-même. Cependant, l'indice le plus important est que certains nombres sont clairement plus petits que leurs voisins, en particulier le 7 à l'indice 15, le 8 à l'indice 22 et le 9 à l'indice 30.
Notant que cela forme un modèle 7-8-9, nous pouvons également voir que le dernier nombre est un 10 à l'index 42. Étant donné la question récente de @Dennis sur les groupes abéliens , une vérification rapide sur OEIS révèle qu'il
15, 22, 30, 42
s'agit d'une sous-séquence de la partition chiffres . Pyth a une fonction intégrée pour les partitions, qui nous donne deux des huit caractères:./
Mais notez que le dernier nombre est 10, ce qui est suspect car 10 est une variable préinitialisée en Pyth, comme
T
../T
donne une liste complète des 42 partitions du numéro 10, ce qui pourrait être utile.Maintenant, l'impression se fait sans séparateur, donc cela suggère une utilisation de
p
. Peut-être que nous parcourons chaque partition, y faisons quelque chose, puis imprimons avecp
? Cela nous donne le modèle suivant:où
V
est une boucle for qui boucle sur un itérable, stockant chaque élément dans la variableN
.Un coup d'œil à l'avant-dernière partition
(5, 5)
devrait montrer clairement que nous voulons prendre un produit. La manière naïve de réduire une liste par multiplication estoù
d
est la liste en question. Cependant, c'est beaucoup trop long.Malheureusement, c'est là que j'ai dû retirer un forceur brutal. Je n'ai pas suivi Pyth depuis un moment, donc je ne connaissais pas beaucoup des nouvelles fonctionnalités. Il ne restait que deux personnages, ce qui semblait tout à fait faisable.
Le forceur brutal est alors revenu:
où
*F
est plié par*
(multiplication). Pas étonnant que je ne l'ai pas trouvé dans ma recherche - je cherchais le mot-clé "réduire" plutôt que "plier"!la source
jk*M./T
<= 7
j'aurais été condamné. Cela fait longtemps que je n'ai pas vérifié la langue.Mathematica, alphalpha, ≤ 32
Je déteste dire ça, mais je viens de reconnaître le nombre sur place.
la source
31!10!27079205916672
> <>, VTCAKAVSMoACE, ≤ 64
Ironiquement, non seulement cette limite de portée est beaucoup plus basse, mais elle est également portable et fonctionne avec l' interpréteur en ligne .
Une analyse
Commençons par la chaîne cible:
> <> pousse les caractères vers la pile avec
'
ou"
en mode chaîne, mais avec 63 caractères à imprimer et seulement 64 octets avec lesquels travailler, la présence de majuscules (instructions invalides dans> <>, pour l'astuce de bouclage standard) permet l'impression directe impossible. Par conséquent, nous devons faire quelque chose avec les points de code.La conversion en points de code donne (j'utilise Python ici):
Notez que les trois derniers chiffres sont les mêmes que les trois premiers. Cela suggère une boucle modulo possible en cours.
Jetons un coup d'œil au nombre d'éléments différents que nous avons:
Nous avons 63 éléments
L
, dont les trois premiers coïncident avec les trois derniers. Cela signifie que, à part cette collision, tous les autres éléments sont uniques. Maintenant, cela suggère quelque chose comme prendre des pouvoirs modulo un nombre premier. En effet,60 + 1 = 61
est premier, ce qui est un bon signe.Essayons de trouver le plus petit élément
et l'utiliser pour réduire tous les éléments afin que l'élément min soit 1:
Notez comment l'élément après
1
est51
. S'il y a une sorte de pouvoir / multiplication, c'est une bonne supposition pour notre multiplicateur.Essayons-le:
Bingo! Nous pouvons maintenant revenir en arrière, en donnant le code suivant:
qui a ensuite été traduit en> <>
la source
Pyth, Maltysen, ≤4
La force brutale a pris tellement de temps que je l'ai fait plus rapidement manuellement.
Une analyse
C
(convertir la chaîne en base 256 int) est le moyen le plus simple de générer un grand nombre en Pyth, c'est donc probablement le premier caractère. Si nous convertissons à partir de la base 256, nous obtenons:Hmm ... pas très éclairant.
Maintenant,
G
c'est la chaîne de l'alphabet"abc...z"
, qui semble pouvoir être une source pour une longue chaîne à alimenterC
. En parcourant les documents que je trouve:Si nous avons affaire à la compression ici, il ne serait pas surprenant d'obtenir toutes sortes de caractères ASCII étendus. Essayer a
C.ZG
ensuite donné la réponse.la source
Fourier, désintégration bêta, ≤ 32
Ou bien, dans CJam:
Une analyse
Au début, nous pouvons voir beaucoup de pouvoirs de 2:
Si nous prenons le log base 2 de ces nombres, nous obtenons:
qui est la série Fibonacci, à partir de
1, 0
.la source
Escargots, feersum, ≤2 octets
Il s'agit en fait de 2 octets; le caractère
z
suivi d'une nouvelle ligne\n
.Je n'ai aucune idée de comment cela fonctionne ou de ce qu'il fait, mais après avoir testé toutes les entrées possibles en dehors de
~+
et~,
, ce fut le seul programme à 2 octets qui a produit8
en sortie.Et il a fallu des années pour obtenir ce résultat. Pas étonnant que ça s'appelle "Escargots" :-D
Remarque à vous-même: la prochaine fois que vous testez un logiciel inconnu, faites-le à l'intérieur d'une machine virtuelle.
la source
Rouille, Liam Noronha, ≤128 octets
La simple impression de la chaîne textuellement est de 120 octets ...
la source
Macaroni 0.0.2, poignée de porte, ≤64
la source
Python 2, question claire avec des exemples, <= 64
Une solution possible:
(
9**2139
,27**1426
et729**713
donnent également le même résultat)la source
CoffeeScript, user2428118, ≤64
(fonctionne uniquement sur Chrome 46.0.2490.71 comme décrit par la Cop.)
La sortie est évidemment une concaténation de courtes chaînes encodées en base64 en raison de tous les "=". Après les avoir décodés, nous trouvons une liste de chaînes de 2 caractères comme
ce qui ne semble pas avoir de sens. Mais j'y trouve des objets étranges, comme
nX
ettY
. Après les avoir filtrés, nous obtenonsCes X et Y semblent indiquer les propriétés de position utilisées par le code source d'origine comme
offsetX/Y
. UnnZ
élément particulièrement intéressant est l' article. Pour vérifier mon hypothèse, j'ai recherché toutes les propriétés se terminant par "Z":qui montre des tonnes de
CSSStyleDeclaration, "webkitTransformOriginZ"
. De cela, nous avons une forte indication que la liste est constituée par les 2 derniers caractères de toutes les clés d'unstyle
objet, ce que le test ci-dessus montre en effet est correct.la source
Lua <= 4, Egor Skriptunoff
Beaucoup d'utilisateurs s'inquiétaient de cette réponse dans le chat, donc je dois les soulager de leur misère. Je ne connais pas Lua et je n'ai pas pu le tester, mais je serais très surpris si cela ne fonctionnait pas.
Ce serait assez évident, mais probablement personne ne l'a obtenu car les opérateurs au niveau du bit n'ont été ajoutés que dans la version 5.3; ideone.com n'a que la version 5.2.
la source
Python 2, histocrate, ≤16
Le plus gros indice est la promesse que cela ne fonctionnera pas dans Python 3. Qu'est-ce qui a changé dans Python 3 ? Le plus gros suspect est que l'opérateur de division renvoie un
float
en Python 3.Je suppose donc que la solution est de la forme ⌊α β / n⌋ = c = 22111101102001, car l'exponentiation est le seul moyen court de créer des nombres énormes.
Si {α, β, n} forme effectivement une solution, alors (cn) 1 / β ≈ α devrait être très proche d'un entier. Par conséquent, j'utilise ce qui suit pour essayer de forcer brutalement les {α, β} pour chaque n:
Le résultat réel sort rapidement lorsque n = 6.
la source
MATLAB, StewieGriffin, ≤ 16
Tirages:
la source
5*'$W'.'*' |'
..73
au lieu de 5, faire+5
ou en faire une3x3
matrice, mais j'ai pensé que c'était plus amusant. Aurait pu faire beaucoup avec les trois octets restants..'
auparavant, mais tout à fait logique - se demandait comment transposer une chaîne sans recourir à des crochets.Matlab, Luis Mendo, ≤16
Je l'ai trouvé, ouais!
Je ne savais pas qu'Octave pouvait faire ça aussi.
la source
peaks()
?peaks
.Mathematica, LegionMammal978, ≤64
la source
Python, spacemanjosh, ≤ 64
Glorieuse calculatrice symbolique inverse. Pas bien joué au golf, mais bon ça va.
Edit: je l'ai joué au golf.
la source
JavaScript ES6, Cᴏɴᴏʀ O'Bʀɪᴇɴ, ≤128 octets
Je doute que ce soit exact, car je n'avais pas besoin de près de 128 octets, mais trouver une séquence répétitive était un défi amusant.
la source
Thue, poivre, <= 64
Décompose 2016 en ses principaux facteurs, essentiellement. 62 caractères, donc je suppose que c'est similaire à ce que vous recherchiez.
la source
Python, DLosc, ≤32
(Cette solution utilise Python 2)
la source
> <>, Sp3000, <= 8
Le pointeur d'instructions s'enroule et les étapes suivantes se produisent:
'l(?; o>'
pousse les valeurs ASCII del(?; o>
la pilel
pousse la taille de la pile sur la pile(
comparer les deux premiers éléments de la pile:size of stack
etord('>')
?;
arrête le programme si la taille de la pile était plus grandeo
afficher l'élément supérieur de la pile en tant que caractère (ce sera toujourso
)>
définit la direction IP, ici c'est no-opLa sortie est
oooooooooooo
.Nous pouvons obtenir beaucoup de sorties différentes en changeant
[space]
en quelque chose qui pousse ou saute sur la pile et en utilisant un autre caractère valide à la place de>
, qui peut également pousser ou sauter.la source
'l=?;o*
JavaScript, commande ev3, ≤ 32
OK, c'était facile.
la source
CJam, Reto Koradi, ≤ 4
Pousse 17 , puis 19 20 = 37589973457545958193355601 .
Essayez-le en ligne.
Il n'y a que tant de choses que vous pouvez faire en quatre octets. Un entier de cette taille devait impliquer des pouvoirs ou des factoriels d'une manière ou d'une autre, et un factoriel aurait des zéros à la fin.
la source
Pyth <= 4, Dennis
C'est la durée de la jointure sur les nouvelles lignes de tous les sous-ensembles de l'alphabet.
Essai:
J'ai compris que le nombre était
2^27 * 7 - 1
un indice fort sur lequel il se baseyG
, qui est2^26
long. J'ai alors deviné qu'il devait être converti en chaîne et sa longueur imprimée. Cependant, la seule façon de le faire à laquelle j'ai pu penser pendant un certain temps était ``, repr. Ensuite, j'ai pensé àj
ce qui convient parfaitement.la source
C, tucuxi, ≤64
Les sorties sont toutes 0 et 1, mais C ne peut pas imprimer directement en binaire, il est donc très probable que ce soient des résultats booléens.
Il y a plus de 1 que de 0, j'ai donc enregistré les positions de 0 (
3, 9, 13, 19, …
), ce qui s'avère être OEIS A075318 . Ce n'est pas utile cependant, il n'y a pas de formule simple pour déterminer où se trouve un nombre dans cette séquence.Mais nous notons qu'il y a tous des nombres impairs, nous
(x-1)/2 = {1, 4, 6, 9, 12, …}
avons donc peut- être des informations plus utiles. Et c'est A003622 .A003622 peut être défini comme "positions de 1 dans A003849 ", ce qui est exactement ce que nous devons craquer ici. Et A003849 est défini comme " A003714 mod 2", où A003714 sont simplement tous les entiers qui
x & (2*x) == 0
. Nous avons donc la solution.OEIS rox.
la source
Dyalog APL, Dennis, ≤4
Calcule ln (8) ^ ln (8). Est-ce que StackExchange arrêterait de convertir mes réponses? Je vais taper un tas de trucs ici pour que ça ne devienne pas un commentaire.
la source
8*⍟⍟8
mais je ne savais pas⍨
. Beau travail :)Coincé, @quartata, ≤8
Le programme Pyth suivant :
produit la sortie souhaitée
Méthode de craquage: recherche du numéro sur Google.
la source
Pyth, xnor, ≤ 4
CG
(convertir la chaîne"abc...z"
de l'alphabet à partir de la base 256) est le moyen Pyth typique de générer un très grand nombre. Après cela, il suffit de stringifier et de convertir à nouveau à partir de la base.la source
Python 3, Mego, ≤128
(Utilisation de Python 3.5.0, non testé sur les versions précédentes.
10598 octets.)la source
Rubis, poignée de porte, ≤64
la source
Matlab / Octave, Wauzl, ≤16
En utilisant la même idée que la réponse de Tom Carpenter
(Si cela n'a pas fonctionné, essayez ceci :)
la source
(1*'234')'*'567'
à l'esprit, car votre première réponse ne fonctionne pas dans Matlab.