Cela fait partie d'un défi Cops and Robbers. Allez ici pour la partie des flics.
Aux fins de ce défi, nous allons définir les espaces comme seulement linefeeds (0x0A) et des espaces (0x20). Notez que la plupart des langues et des variantes d'expression régulière considèrent également de nombreux autres caractères comme des espaces, à la fois à l'intérieur et à l'extérieur de la plage ASCII, de sorte que vous ne pourrez peut-être pas utiliser les fonctions intégrées correspondantes.
Le défi des voleurs
La réponse d'un flic peut être craquée en la transformant en un programme ou une fonction valide (dans la langue choisie), qui effectue la tâche de suppression des espaces blancs d'une chaîne d'entrée, en insérant des espaces blancs dans le code. Par exemple, si vous avez reçu l'entrée suivante:
H e l l o,
W o r l d!
Le programme devrait sortir
Hello,World!
Après avoir inséré un espace, le nombre d'octets de la solution ne doit pas dépasser le nombre d'octets indiqué dans la réponse du policier. Vous n'avez pas à trouver exactement la même solution que le policier prévu, tant que la vôtre est valide par les contraintes ci-dessus.
Si vous gérez cela, postez une réponse avec la solution, en vous liant à la réponse du flic, et laissez un commentaire sur la réponse du flic en vous reliant à la vôtre.
Le voleur qui déchire le plus de réponses de flic gagne. Les liens sont rompus par la somme des tailles des réponses des flics fêlés (en faveur du voleur qui déchire les soumissions plus longues).
Chaque réponse de flic ne peut être crackée qu'une seule fois, et bien sûr, vous n'êtes pas autorisé à cracker votre propre réponse. Si la réponse du policier s'avère invalide avant ou après avoir été piratée, elle n'est pas prise en compte dans le score du voleur.
la source
JavaScript ES6, 199 octets par Arnauld
J'ai réalisé que le fractionnement
"SecretCode"
signifiait que je cherchais 11 nombres qui se résumaient à (je suppose) 33. C'est un problème d' étoiles et de barres où le nombre d'espaces sont les étoiles et les lettres entre"SecretCode"
les barres. J'ai fait le calcul pour voir combien de combinaisons il y avait à essayer (1 917 334 783 combinaisons) et j'ai décidé de simplement le forcer brutalement, cela a pris toute la journée.Il y a probablement une façon plus intelligente de s'y prendre, par exemple en remarquant que cela
k
doit être33
et66
pour les index 10 et 21 respectivement, mais je suis paresseux.la source
$/**/=/[ \n]/;s['sp'+'lit']($)
... oh, c'est sale.C, 475 octets par Rexroni
Je pourrais commencer à utiliser certaines de ces définitions :)
Après le pré-processeur, le code ressemble à ceci:
la source
#defineabo
m'a éjecté pendant un moment. Au début, je pensais que ce devait être#define ab o
ce qui ajouterait juste quelques;
s supplémentaires , mais cela n'a pas fonctionné vers la fin.Ruby, 86 octets + 1 drapeau = 87 par histocrate
C'était vraiment amusant, chaque caractère de la chaîne passée
eval
est remplacé par le code de caractère (ord
) XORed par^(...)
rapport au nombre d'espaces restants dans la chaîne. Le code résultant est:la source
RprogN, par Ataco
Cela semble faire l'affaire
la source
V, 37 octets, par DJMcMayhem
Non imprimables:
TryItOnline
Le
ü
m'a vraiment jeté pour une boucle, je me attendais à la fois etî
d'être des commandes.Í üî
in V se traduit par:%s/ \|\n//g
in vim, qui supprime globalement tous les espaces. LaÍ
commande est sur le wiki, et lesü
etî
sont|
etn
respectivement avec leur ensemble de bits élevéla source
C, 140 octets par betseg
(J'espère aussi que je fais ça correctement.)
la source
MATL, 22 octets par Luis Mendo
Bien que je ne sache pas pourquoi, cela semble fonctionner
Je vais devoir voir si je peux comprendre ce qu'il fait. J'ai pensé que les commentaires devaient avoir des sauts de ligne après eux et ensuite il s'agissait simplement de placer les espaces aux bons endroits.
la source
MATL,
2221 octets par Luis Mendo.Enfin ... MickyT l'a craqué pendant que j'écrivais une explication, donc sa réponse est "valable". J'ai quand même posté cela, conformément à ce meta post .
M
etY
sont inutiles et sont commentés. Il suffit d'ajouter 4 espaces, pas 5.C'est l'équivalent du plus compact :
Explication partielle:
la source
1e5
soit imprimé100000
, ou1e
était un appel àreshape
, mais alors quoi5
? (Je vois maintenant que le%
est à la fin de la ligne, donc ce serait5M
, pas un cinq et unM
. Aussi, je pensais que je devais avoirY(
sur une seule ligne. Dans l'ensemble, un très bon tutoriel MATL :)Befunge-98, 65 octets par ninjalj
Essayez-le en ligne!
C'était très amusant. J'ai déduit que puisqu'il y a peu de commandes qui changent de direction et aucune
^<[]?x
ou similaire, il doit utiliser un habillage. J'ai ensuite écrit un script Python pour aider à obtenir l'espacement correct pour lesj
.Le code fonctionne en prenant input (
~
) et en le dupliquant deux fois (::
). Il soustrait ensuite 10 (':'0
ouord(':') - ord('0')
) et 32 ('[';
ouord('[') - ord(';')
). Ensuite, le deuxième résultat est logiquement annulé (1 s'il s'agissait d'espace, 0 sinon) et un 8 est poussé.Vient maintenant la partie qui avait besoin de savoir quoi ignorer. Le
1+!
est ignoré en passant à la ligne suivante.#
saute le@
. Le résultat nié logiquement (0 ou 1) est multiplié par le 8 et 1 est ajouté.Le code saute alors autant d'espaces (c'est-à-dire 1 ou 9) plus un espace supplémentaire au fur et à mesure que l'IP se déplace. Si le personnage n'était pas un espace, il se retrouve au
!
. Le code de caractère moins 10 est logiquement annulé (1 si était un saut de ligne, 0 sinon).j
puis ne saute rien, et print (,
) est appelé et la boucle reprend en encapsulant verticalement.Si le personnage était un espace, la ligne du bas boucle à nouveau avec
32, 22
le bas de la pile. Le premierj
saute 705 espaces. Ensuite, la ligne boucle une troisième fois. S'il reste plus de deux 10 sur la pile (le code ne laisse que ceux-ci), le premierj
saute 100 espaces et la boucle se répète. Sinon, le premierj
saute vers le!
, un zéro est annulé, le secondj
saute sur l'impression et le programme continue.J'ai réussi à jouer au golf à 59 octets.
la source
C # 6, 201 octets, par lait
démo repl.it
trueJoin
n'est pas défini, il nestring.Concat()
reste donc que .p
est"\n"
.p[0]^32^10
est l'espace. Cela aurait été (un peu) plus difficile s'il s'agissait dep[0]^42
constantes similaires.la source
réticulaire, 43 octets, par Conor O'Brien
Essayez-le en ligne!
Cela a été plus difficile pour moi qu'il n'aurait dû l'être parce que j'étais trop stupide pour trouver la documentation et j'ai dû deviner comment certaines commandes fonctionnaient. Donc, certaines de ces explications peuvent ne pas être entièrement exactes, mais c'était ma compréhension de base du code.
la source
C #, 159 octets par LethalCoder
repl.it
La chaîne à la fin de la ligne 1 est
" \n"
(espace + nouvelle ligne).la source
Minkolang v0.15, 88 octets par Kritixi Lithos
Explication
la source
C
omissions seraient déroutantes, mais bon travail quand même!