Sortez cette séquence binaire de longueur 1160:
-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++
La séquence
Cette séquence finie est étroitement structurée d'une manière qui, je l'espère, se prête à des méthodes de compression uniques. Il découle du problème de divergence d'Erdős, qui a été présenté dans un défi précédent .
En traitant les termes comme +1 et -1, il s'agit d'une séquence de longueur maximale de divergence 2, ce qui signifie que:
Pour chaque taille de pas positive
d
, si vous prenez chaqued
'ème terme (en commençant par led
e terme), la somme cumulée de la séquence résultante reste comprise entre -2 et 2 inclus.
Si vous pensez que chacun +
signifie un pas à droite et -
un pas à gauche, cela signifie que la marche de chaque d
instruction ne se déplace jamais à plus de 2 pas de la position de départ.
Par exemple, pour d=3
, prendre tous les 3 trimestres donne la séquence +-++--+--+-...
, dont les sommes cumulées sont [1,0,1,2,1,0,1,0,-1,0,1,...]
, qui ne frappent jamais -3 ou 3.
-++-+--++-++-+--+--++-+--+--++-+--+...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
+ - + + - - + - - + -
1 0 1 2 1 0 1 0 -1 0 -1 ...
Cette séquence a été trouvée en 2014 via une recherche informatique. Voir cet article , où la séquence est reproduite à l'annexe B. La recherche prouve que 1160 est la longueur maximale d'une séquence de divergence-2, bien qu'il existe plusieurs séquences de cette longueur. Le problème de divergence d'Erdős, prouvé en 2015 , dit qu'une telle séquence doit avoir une longueur finie pour toute divergence maximale c
au lieu de 2.
Exigence de temps
Votre code devrait se terminer dans les 5 secondes . C'est pour limiter le forçage brutal.
Format de sortie
Vous pouvez utiliser deux valeurs ou caractères distincts fixes pour +
et -
dans n'importe quel format de type liste ou chaîne. Le format doit être un format dans lequel les 1160 bits peuvent être directement lus, et non par exemple codés sous forme de nombre via sa représentation binaire ou de chaîne via des valeurs de caractères. Pour la sortie de chaîne, une nouvelle ligne de fin est autorisée.
Classement
Réponses:
Gelée , 149 octets
Il y a un modèle, par exemple, seulement 81 des 256 chaînes binaires de longueur 8 sont présentes si l'on coupe la séquence en huit, mais je n'ai (au moins encore) remarqué aucun moyen d'en utiliser pour réduire le nombre d'octets à partir de cette base directe. 250 compression convertie en liste binaire.
Essayez-le en ligne! (le pied de page formate la liste binaire en une chaîne pour une comparaison directe plus facile).
la source
Python 2 ,
269259256247245243 octetsEssayez-le en ligne!
la source
JavaScript (ES6),
263253252 octetsJ'ai essayé d'utiliser le moins de données de charge utile possible. Malheureusement - mais sans surprise - cela nécessite beaucoup de code de décompression.
Panne:
163153152 octetsVoici une version formatée sans les données. Le code brut se trouve dans l'extrait de démonstration.
Comment?
Nous gardons une trace des sommes cumulées un [i] de chaque i- ème terme. Chaque fois que l'une de ces sommes atteint la borne inférieure -2 , nous savons que le terme suivant doit être un + . La même logique s'applique à la limite supérieure. Ceci est utile jusqu'à i = 264 et n'économise aucun octet supplémentaire au-delà de cela.
Cela nous laisse avec 599 termes qui ne peuvent être devinés. Nous les stockons sous la forme ⌈599 / 8⌉ = 75 octets, codés dans une chaîne Base64 de 100 caractères.
Démo
Afficher l'extrait de code
la source
Jelly ,
110109107 octetsCela prend trop de temps sur TIO, mais il se termine en moins de 3 secondes sur mon ordinateur de bureau.
Essayez-le en ligne!
la source
Gelée ,
135133130129105104 octetsSur la base des éléments précédents de la séquence, l'algorithme fait une supposition éclairée de ce que pourrait être l'élément suivant. Cela fonctionne pour tous les éléments sauf 99, dont les indices sont codés en dur afin que les éléments correspondants puissent être échangés.
Essayez-le en ligne!
la source
MATL , 224 octets
La sortie est de la forme
1 0 0 1 0 ...
, où1
correspond à'-'
et0
correspond à'+'
.Essayez-le en ligne!
Explication
La séquence a été codée en longueur. Les 720 pistes ont toutes des longueurs 1, 2, 3 ou 4, 3 ou 4 étant moins courantes. Ainsi, chaque 3 a été remplacé par 2, 0, 1 (une série de 2, puis une série de 0 de l'autre symbole, puis une série de 1 à nouveau) et, de même, chaque 4 a été remplacé par 2, 0, 2. Cette donne un tableau ternaire de longueur 862.
Ce tableau est converti en encodage base 94 et est la longue chaîne affichée dans le code (
'$Te...kG'
). L'encodage en Base 94 utilise tous les 95 caractères ASCII imprimables à l'exception du guillemet simple (qui devrait être échappé).Le code convertit cette chaîne de la base 94 en base 3 et utilise le résultat pour décoder en longueur les symboles
[1 0 1 0 ... 0]
(tableau de longueur 862).la source
Gelée , 95 octets
Un point milieu entre mes deux approches précédentes.
Le code tente de deviner 842 éléments de la séquence et code en dur les 318 autres. 19 des suppositions sont incorrectes et doivent être inversées via une liste d'indices codés en dur.
Essayez-le en ligne!
Comment ça fonctionne
Il s'agit d'une base bijective 250 littérale qui utilise la page de codes de Jelly pour les chiffres et code l'entier380009100940380065412452185545474826295694594854898450166594167299196720639075810827320738450934
©
B
Ḥ
C
Cette chaîne monadique prend un préfixe de la sortie souhaitée (avec un préfixé0 au début) et ajoute l'élément suivant de la sortie. La chaîne fonctionne comme suit:
⁽¡ɠ
Ḋ
.la source
Charbon de bois , 150 octets
Essayez-le en ligne!
Utilise la compression de cordes intégrée de Charcoal. Utilise
.
pour-
et!
pour+
.la source
CJam, 153 octets
Utilise
1
pour-
et0
pour+
.Contient non imprimable. Essayez-le en ligne!
C'est assez simple. Convertit une longue séquence de la base 256 en base 2.
la source
Python 3 ,
236232 octetsMerci à Mego pour avoir économisé 4 octets
Essayez-le en ligne!
Utilise l'encodage CP-437. Merci à Dennis d' avoir signalé une erreur.
la source
437
est un alias pourcp437
, vous pouvez donc raser 4 octets en vous débarrassant descp
bits chaque fois qu'ils se produisent.Python 2 ,
364250 octetsMerci à Jonathan Allan d' avoir enregistré 114 octets.
Essayez-le en ligne!
la source
C # , 385 octets
Les données
String
Le résultat prétendu.Golfé
Non golfé
Code complet
Communiqués
385 bytes
- Solution initiale.Remarques
la source
05AB1E , 149 octets
Super ennuyeux. Juste un nombre compressé. Utilise
1
pour-
et0
pour+
.Essayez-le en ligne!
la source
PHP, 276 octets
Essayez-le en ligne!
la source
Rubis , 245 octets
Sortie 0 pour + et 1 pour -.
Essayez-le en ligne!
la source
Perl, 164 octets
Hexdump:
La solution évidente et ennuyeuse: il suffit de mettre tous les bits dans une chaîne binaire, 8 bits par octet. Utilise 0 pour - et 1 pour +. Je vais essayer de jouer au golf un peu plus.
la source
Rétine , 333 octets
Essayez-le en ligne!
la source