Ecrivez un programme ou une fonction qui, lorsqu'une chaîne est donnée, filtre autant d'octets distincts que possible et renvoie la chaîne nettoyée. Cependant, puisque votre programme les déteste, aucun de ces octets ne peut être présent dans votre propre code.
Votre score sera le nombre d'octets distincts que votre programme filtre de l'entrée, le plus haut étant le meilleur. C'est un score maximum de 255 (puisque votre programme doit être au minimum d'un octet). La condition de départage correspond à la longueur de votre code, avec une valeur inférieure meilleure.
Par exemple, si votre programme filtre les octets 0123456789
, il reçoit un score de 10, mais votre programme lui-même ne peut pas contenir ces octets.
Règles
- Octets signifie octets.
- Vous avez également la possibilité de prendre en entrée une liste d’entiers, avec des valeurs allant de 0 à 255. Celles-ci correspondent aux octets équivalents.
- Votre sortie devrait être sous la même forme que votre entrée
- Pas de lecture de votre code source
- Votre code doit être non vide
- Oui, je sais qu'il va y avoir une réponse Lenguage / Unary. Mais au moins golfez-vous s'il vous plaît?
;)
Modifier la règle:
- Vous pouvez choisir d'ignorer un octet, par exemple s'il est impossible de le distinguer de l'octet de fin pour une chaîne ou pour EOF. Cependant, cela signifie que vous ne pouvez pas l'utiliser dans votre soumission, et cela ne compte pas pour votre score. Si vous choisissez de le faire, votre score maximum sera de 254, mais vous n'êtes pas obligé de gérer cet octet dans votre entrée.
Réponses:
Japt
-P
, score: 255 (2 octets)f => filter, second f => everything but 'f'
Essayez-le en ligne!
Japt , score: 255 (2 octets)
DeShaggy
o => remove everything but, second o => 'o'
Essayez-le en ligne!
la source
oo
fonctionnerait également, sans le-P
drapeau.Python 2 , score 249, 1732 octets
Essayez-le en ligne!
Supprime tout sauf les
exc%="
nouvelles lignes. La génération de code est celle de xsot . Je doute que cela soit optimisé, il y a donc beaucoup d'octets à sauvegarder ici!la source
Haskell, score
249250,1088335 octetsDéfinit une fonction
!:
qui prend une liste d’entiers et filtre tout sauf10,33,40,41,58,61
les codes ASCII de\n ! ( ) : =
.Essayez-le en ligne!
Comment ça marche: Commençons par renommer les fonctions et les paramètres en noms sains:
L'idée principale est d'avoir une liste de deux fonctions différentes (
listOfFunctions
), une pour conserver un élément (k
) et une pour le supprimer (d
). La liste est indexée par l'élément en cours à partir de la liste d'entrée (x
) et la fonction choisie détermine si l'élément doit être conservé ou supprimé. À l'index 0, nous avonsd
, parce que nous voulons supprimer des 0, le premierk
est à l'index 10, car nous voulons conserver 10 (nouvelles lignes). Les deuxk
etd
prennent deux paramètres:x
et le résultat d'un appel récursif avec le reste de la liste (xs
).k
ajoutex
à l'appel récursif etd
renvoie simplement l'appel récursif.La liste littérale des fonctions se termine à l'index 61 (car
=
, le dernierk
de la liste) et est suivie d'un nombre infini ded
. Cela enregistre non seulement de nombreux fichiers explicitesd
, mais nous évite également de devoir terminer une liste finie[]
nécessitant des caractères supplémentaires.Edit: merci à @ Ørjan Johansen pour +1 score et -753 octets.
la source
|
pour un score de 250, 335 octets . Également défini un synonyme pourrepeat (!)
raccourcir la liste (radicalement, car|
était beaucoup plus grand que le deuxième plus grand caractère exclu.(!):
séquences aiderait probablement aussi.!():=
. L'extraction à[]
partir d'une liste existante, par exemple la liste d'entrée, ne fonctionnera pas car elle a un type[Int]
, mais nous en avons besoin[a->[a]->[a]]
.!
estcurry snd
, et=!
est une liste infinie de ceux-ci, mais c'est tout ce que je peux comprendre de cela.(=!)
, quelque chose comme(!=)(=:)=(!):(!):(!):(!):(!):(=:)
ou (plus haut niveau, peut être passé((!):)
ou une section de lui-même)(!)!=(=:)=(!)((!)((!)((!)(=:))))
. Beaucoup d'options à modifier. Nombre de répétitions, quel type de deuxième (voire troisième) argument, le cas échéant, et même s'il est préférable d'utiliser la compression\n
ou;
(longueur de bloc par10 22 6 16 2
rapport à33 6 16 1
).JavaScript (ES6), score: 242 (142 octets)
Une approche plutôt naïve utilisant un tableau d'octets pour les E / S.
Essayez-le en ligne!
Comment?
Les 14 caractères non filtrés sont
'().=>[]efilrt
. Ils sont marqués d'une
dans la chaîne de recherche. Pour les caractères ci-dessust
(code ASCII 116) qui ne sont pas définis dans cette chaîne, la valeur'f'>undefined
est false .la source
t=>t.filter(t=>'f'>'fffffffffffffffffffffffffffffffffffffffeeeffffeffffffffffffffeeffffffffffffffffffffffffffffefefffffffeeffeffefffffefe'[t])
. Voici une déclaration de test TIO:console.log(f([...Array(256).keys()]).map(c => String.fromCharCode(c)))
APL (Dyalog Unicode) , score: 253, condition de départage: 8 octets SBCS
Fonction de préfixe tacite anonyme
Essayez-le en ligne!
∩
intersection de l'argument∘
et'∩∘'''
les trois caractères du code (∩∘'
)la source
Shell POSIX , score 249, 18 octets
Essayez-le en ligne!
tr
Commande simple qui supprime tous les caractères sauf un-\cdrt
espace. Quatre barres obliques inverses sont nécessaires, car le shell et latr
commande utilisent des échappements de barre oblique inversée. La cinquième barre oblique inverse échappe au caractère espace suivant.Si
tr -cd
était considéré comme un langage de programmation, on pourrait écrire un programme à un octet avec le score 255.la source
tr
a des classes de caractères telles qu'utilisées dans les expressions régulières, mais pas d'expressions régulières complètes.tr -cd \ cdrt\\-\
Essayez-le en ligne!C (gcc) , note
232235239241242,260407352249243249 octetsEssayez-le en ligne!
Une fonction prenant un pointeur au début et à la fin d'un tableau int (où fin est le premier caractère non inclus), un pointeur sur un tampon et un pointeur sur un autre pointeur int. Il écrit le résultat dans la mémoire tampon et le pointeur de fin du résultat dans le dernier pointeur.
la source
Regex, Score: 255, 2 octets
Correspond au personnage
\
.Essayez-le en ligne!
la source
Gelée , score 254 (4 octets)
Essayez-le en ligne!
⁾xy
est un raccourci pour“xy”
(une chaîne de deux caractères).Nous
f
filtrons la chaîne d’entrée en ne tenant compte que des caractères apparaissant dans“f⁾”
.la source
f⁾⁾f
mais j'ai décidé de poser la question sur la prise de chaînes Unicode avant de poster.Ruby -p, score 248 (8 octets uniques / 483 octets)
Essayez-le en ligne!
la source
Python 2 , Score
244245246,133901575 octetsPrend une liste d'entiers
Essayez-le en ligne!
Cela correspond à la ligne de code suivante:
Cette réponse est évidemment théorique. La structure est
En théorie, cela aurait le même effet que:
Python 3 , Score
240241, 54 octets+1 merci à Jonathan Allan .
Essayez-le en ligne!
la source
\
votre version Py 3 en utilisant des guillemets triplesb''' ':[]abdfilmnor'''
. En Python 2, vous pourriez faire un programme complet dans la même veine pour 242:,print(''.join(p for p in input() if p in ''' '().fijnoprtu'''))
mais pas aussi bon que leexec
.Nettoyer , score 247,
234213208 octets-5 octets grâce à Ørjan Johansen
Essayez-le en ligne!
Utilise une fonction récursive de filtrage de motifs pour supprimer des caractères. N'a même pas besoin
StdEnv
.la source
=\
au lieu de===
.t
ettt
dans l'avant dernière ligne.==
pourt
mais en gardant==
comme synonyme pour elle.Perl 5
-p
, score 251, 13 octetsEssayez-le en ligne!
la source
05AB1E , score:
252253 (43 octets distincts utilisés; 8 octets au total)Essayez-le en ligne.
Explication:
Notez que l'ordre
ÃJ
et„J
dans les chaînes 2 caractères sont importants, car„
est également utilisé pour des mots du dictionnaire est un mot du dictionnaire (sauf pour quelques privilégiés des personnages comme des lettres, des chiffres, où tous les deux personnages-
, et autres). Donc, ce„JÃ
serait «un mot»J
, ainsi qu'un mot du dictionnaireÃ
+ le caractère suivant (dans ce cas„
), qui est apparemment le mot"causing"
.la source
Perl 5, score 251 (5 octets distincts, 8058 octets au total)
Essayez-le en ligne!
Utilise le
<>^es
sous-ensemble Turing-complete de Perl . Le code ci - dessus a été obtenu en cours d' exécution àprint<>=~y<<>^es><>cdr
travers mon convertisseur .la source
Brachylog , score 249, 16 octets
Essayez-le en ligne!
Je ne suis pas tout à fait sûr de savoir comment cela fonctionne avec les règles, avec Brachylog ayant sa propre page de code spéciale et tout, mais je peux quand même expliquer comment cela fonctionne:
la source
Octave , Score
248249 (50 bytes)Il devait y avoir un meilleur moyen ... et il y en a un!
Essayez-le en ligne!
Filtre tout sauf
@al()'=
. Laall
fonction est supérieure à celle utiliséeany
car elle n'utilise que deux octets distincts. Notez queany(...)
est égal ànot(all(not(...)))
. Donc, on commence avec le programmeAu lieu de
~
(not
), nous pouvons aussi écrire0==
. Bien sûr, cela signifierait que nous devons également filtrer0
. Notez plutôt que l'expression suivante est également fausse (zéro)Si la compatibilité MATLAB n’est pas un problème, je peux passer à 47 octets.
la source
Langue (avec
stty +brkint -ignbrk
), score 255, 3890951 octetsLe programme se compose de 3890951 octets NUL (ce qui en fait l’un des programmes de lengage les plus courts jamais créés; l’octet 3890951 est suffisamment petit pour tenir sur mon disque, j’ai donc exécuté cela dans un interpréteur Lenguage). Le PO souhaitait que la solution Lenguage / Unary soit jouée au golf, alors allons-y. (Notez que Unary serait beaucoup plus long car il nécessite l'utilisation de
0
plutôt que de permettre l'utilisation de NUL.)Notez que Lenguage ne se comporte pas comme le brainfuck, malgré ce que sa documentation implique. I / O fonctionne complètement différemment (quelque chose que j'ai remarqué en testant ce programme). En particulier, Lenguage refuse de prendre des entrées autres que celles d’un terminal. Les octets filtrés sont les octets bruts envoyés via la connexion du terminal (notez également que lorsqu’il filtre les octets bruts, vous ne verrez pas les touches que vous tapez du tout). En pratique, cela signifie que le programme absorbera toutes les entrées qui lui seront envoyées, à l’exception de l’octet NUL (généralement appelé Ctrl- @), qui sera répercuté à la lettre (à ce stade, la grande majorité des terminaux l’ignorera). l’octet NUL est l’équivalent terminal d’une instruction NOP). Afin de vérifier que le programme fonctionne, il
Que se passe-t-il à EOF? Eh bien, si le terminal envoie une série d'octets, il n'y a aucun moyen d'envoyer EOF; tous les 256 octets possibles sont interprétés littéralement, et vous ne pouvez rien insérer d'autre dans le flux du terminal. Cependant, si vous utilisez un terminal série à l'ancienne, vous pouvez appuyer sur le bouton "pause" de votre terminal pour envoyer à dessein des données mal codées, permettant ainsi le 257ème code possible; cette "pause" est le seul équivalent plausible d'un EOF, car il est envoyé hors bande et indique autre chose que des données valides. Si la configuration de votre terminal a le drapeau "interruption-sur-pause" activé (et que l'interpréteur Lenguage ne modifie pas ce paramètre), l'envoi du signal de pause provoquera le blocage de l'interpréteur Lenguage, qui agit commodément comme un moyen de mettre en œuvre le comportement souhaité EOF. Je ne suis pas sûr qu'il s'agisse d'un paramètre par défaut (car personne n'utilise actuellement de terminaux série, il ne revient pratiquement jamais), je l'ai donc mentionné dans l'en-tête dans le cadre de la spécification de l'interpréteur de langage utilisé.
Explication
La boucle interne ne sortira que lorsque NUL sera saisi au terminal; après cela, nous renvoyons immédiatement le caractère saisi (c'est-à-dire le NUL). Ajouter 1 à ce stade garantira que l'élément de bande 0 sera à nouveau différent de zéro, de sorte que la boucle externe ne puisse pas se terminer (jusqu'à ce qu'une entrée break bloque l'interpréteur), et nous retomberons dans la boucle interne.
Il est très déconseillé d’utiliser la soustraction pour entrer dans la boucle extérieure, mais aussi de continuer à boucler autour de celle-ci; L’addition a un codage plus court, mais ne peut pas apparaître au début du programme (car le codage ressemblerait à des zéros non significatifs et serait donc ignoré).
la source
truncate
La création de fichiers fragmentés n’est pas pour moi (peut-être que le système de fichiers ne les prend pas en charge?). Toutefois, pour autant que je sache, l’interprète de référence Lenguage lit le fichier d’entrée ligne par ligne (!). Ainsi, si le programme ne contient pas de caractères de nouvelle ligne, un programme suffisamment long épuisera la mémoire disponible. Bien sûr, cela pourrait être corrigé avec un nouvel interprète.C # (compilateur interactif Visual C #) , Score 245, 111 octets
Essayez-le en ligne!
C # (compilateur interactif Visual C #) , Score 243, 33 octets
Solution naïve utilisant
Intersect
Essayez-le en ligne!
la source
Retina 0.8.2 , 12 bytes, score: 250
Essayez-le en ligne! Filtres à tous les personnages , sauf nouvelle ligne,
[
,\
,]
,^
etn
. Bien que les caractères[\]^
soient consécutifs, l'utilisation d'une plage coûterait en réalité un octet et réduirait également mon score.la source
Japt , 249 partition, 20 octets
Essayez-le en ligne!
la source
oQ+"+oQ"Q
ou tout simplement,oo
mais ce n'est qu'une variante de la solution de Luis.PHP, score 234,
5862 octetsExécuter en pipe
-nF
ou essayer en ligne .la source
Ruby
-paF[^$_=F*']
, score 250, 8 octetsJe ne suis pas du tout sûr que cela soit légal en vertu des règles actuelles du site pour les drapeaux de ligne de commande, car le "drapeau" ici est en quelque sorte un code qui inclut des octets interdits. L’
F
indicateur définit une expression rationnelle de séparateur d’entrée composée de tous les caractères ne figurant pas dans le code approprié. Le code approprié définit la sortie sur la concaténation de tous les enregistrements d'entrée.la source
MATL , Score 252
Essayez-le en ligne!
Explication (pour l'entrée
input
)la source
Pyth , score 249, 16 octets
Filtres à tous les caractères sauf
f
,s
,T
,z
,"
,/
et\
Essayez-le en ligne!
la source
K, score 246, 23 octets
{x@&~x in"\"~ in@&{x}"}
{..} est un lambda avec arg x
lu comme 'renvoie x à où non x dans la chaîne'
La chaîne contient \ "~ dans @ & {x} (les dix octets utilisés dans le programme)
la source
sfk , score 239, 133 octets
Essayez-le en ligne!
Effectue des remplacements sur l'entrée (écrits en tant que
[delim][from][delim][to][delim]
) en modifiant tous les caractères utilisés dans le programme, ce qui supprime les positions des caractères de la considération pour la saisie au remplacement finalx[byte]xx
qui mappe tous les octets sur la chaîne vide.la source
JavaScript, score 250,
9557359273 octetsUne solution JS légèrement golfée qui utilise ensuite l'algorithme de JSFuck . Beaucoup d'octets, mais un bon score.
Original:
Le rendu JSFuck est composé de 59273 caractères:
la source
s=>s.replace(/[^![\]+()]/g,'')
devrait fonctionnerbrainfuck , Score: 248, 162 octets
Essayez-le en ligne!
En général, je ne réponds pas à mes propres questions, mais les gens semblent avoir lu ma page de profle, en particulier là où elle dit
If someone comments on a question "I wish there was a brainfuck solution", I feel obliged to provide one.
Les octets filtrés sont
-<>[],.
et ignorent l'octet NUL, car il est impossible de le distinguer de EOF. C'est un peu plus long que d'habitude, car j'évite délibérément de l'utiliser+
pour obtenir un score légèrement meilleur. Même dans ce cas, je pourrais peut-être jouer au golf pour générer quelques octets.la source
Espace blanc , score: 253 (3 octets distincts utilisés, 97 octets au total)
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté comme explication seulement.Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement). Un bon bonus est que je peux utiliser ce code pour transformer le code en surbrillance ci-dessus en programme brut Whitespace (ce que j'ai fait dans ce TIO à titre d'exemple), pour lequel j'utilise habituellement Notepad ++. :)
Explication:
Assez simple. Voici le pseudo-code:
la source