Tira todos os caracteres ASCII não imprimíveis


9

Seu desafio, se você estiver codificado para aceitá-lo, é executado da seguinte maneira:

Você pode escolher um dos seguintes desafios a serem implementados:

Desafio # 1

  • Ler de um arquivo a.txt
  • Grave apenas caracteres ASCII imprimíveis (valores 32-126) em um arquivo b.txt

Desafio # 2

  • Com um arquivo a.txt, exclua todos os caracteres do arquivo, exceto caracteres ASCII imprimíveis (valores 32-126)

Especificações sobre a.txt

a.txt é um arquivo de texto sem formatação que pode incluir valores ASCII de 0 a 255 (mesmo indefinidos / controle) e seu tamanho pode variar de até 1 GB.

Ganhando

A resposta com a menor quantidade de código fonte em bytes vence.


@ Malachi Isso é meio grande; como você sugere que eu faça o upload?
Timtech 22/01

Seu critério de vitória está errado. Por exemplo, eu poderia apenas. Adicione um comentário bastante longo ao meu código e ganhe.
Mhmd

2
@ user689 E assim seria se eu tivesse um programa extremamente lento. Suponho que ele quis dizer que menos vitórias.
Oberon

1
@ Malachi, mas isso significa que mais lento é melhor, e a pergunta é marcada com o código mais rápido .
Oberon

@ amon Vou fazer código de golfe em seu lugar.
Timtech 22/01

Respostas:


6

sh

Desafio 1, 24 23 caracteres

tr -dc \ -~<a.txt>b.txt
Bônus : variações no conjunto de caracteres a serem excluídos.
tr -dc " -~
"<a.txt>b.txt                       # preserves printables + line feed

tr -dc "[:space:] -~"<a.txt>b.txt   # preserves printables + whitespace

1
Você pode tirar o espaço antes<
Tobia

Você está certo! É tão fugaz que eu esqueci. : D
FireFly

1

Bash + Perl

Desafio 1 - 31 bytes

perl -petr/\ -~//cd a.txt>b.txt

Desafio 2 - 28 bytes

perl -i -petr/\ -~//cd a.txt

Hmm, ele rodou e fez os b.txtoutros personagens permanecerem.
Timtech 22/01

@Timtech não podem se reproduzir, shows vim há unprintables para mim (quando se olha para b.txtde desafio 1)
amon

1

Ambos são o desafio 1.

C - 132 caracteres

#include<stdio.h>
k;main(){FILE*f=fopen("a.txt","rb");FILE*g=fopen("b.txt","w");while(!feof(f))(k=getc(f))>31&&k<127&&putc(k,g);}

Python - 78 caracteres

file("b.txt","w").write(filter(lambda x:'~'>=x>' ',file("a.txt").read()))

É este Python 3?
Timtech 22/01

O Python não funciona com o 3.3.3. Edit: Parece que você precisa criar o arquivo primeiro.
Timtech 22/01

Eu o executei no Python 2.7 (r27: 82525).
Oberon

1

Brainfuck: 92

+[[->+>+<<]>>>++++++++[->++++++++++++<<---->]>--[<<[->]>[<]>-]<+<[[-]>-<]>[[-]<<.>>]<<[-]<,]

Brainfuck não pode abrir arquivos, então você usa o redirecionamento stdin / stdout (# 1)

bf strip.bf < a.txt > b.txt

O mesmo código no Extended Brainfuck : 68

+[(->+>+)3>8+(->12+<<4-)>2-[<<[->]>[<]>-]<+<([-]>-)>([-]2<.)2<[-]<,]

1

PowerShell (43, 43)

Desafio 1: (43)

(gc -raw a.txt) -replace"[^ -x7e]","">b.txt

Desafio 2: (43)

(gc -raw a.txt) -replace"[^ -x7e]","">a.txt

Por que não usar em ~vez de x7e? Além disso, você pode deixar de lado a ,""discussão e manter o mesmo efeito que eu acredito.
Etan Reisner

0

iX3, 388

Set  in [c]:  '1'
Loop start   ([c]  of 1  to 999999999)
   Read from file  'a.txt' into [T] (read from [c], 1 bytes)
   Modify text  '[T]' into [R] (code in Hex)
   Set  in [N]:  '&H[R]' (calculate)
   If  True: '([N]=10)'
      Write into file  'b.txt' line '' (Append)
   End If
   If  True: '([N]>31)&([N]<127)'
      Write into file  'b.txt' line '[T]' (Append, no linefeed)
   End If
Loop end

0

Desafio # 1

Rubi (52)

 IO.write (f="a.txt"),IO.read(f).gsub(/\p{Cntrl}/,'')


0

Tcl , 122 123 bytes

set g [open b.txt w]
lmap c [split [read [open a.txt]] ""] {scan $c %c v
if $v>31&$v<127 {puts -nonewline $g $c}}
close $g

Experimente online!


0

K4 , 36 33 bytes

Solução:

`b.txt 1:{x@&31<x*127>x}@1:`a.txt

Explicação:

Acima é para o Desafio A, substitua o b.txtpara a.txtpara o Desafio B.

`b.txt 1:{x@&31<x*127>x}@1:`a.txt / the solution
                         1:`a.txt / binary read (1:) "a.txt"
                        @         / apply to 
         {             }          / lambda taking 1 implicit arg (x)
                  127>x           / 127 greater than?
                 *                / multiply by
                x                 / x
             31<                  / 31 less than?
            &                     / indices where true
          x@                      / index into x at these indices
`b.txt 1:                         / binary write to "b.txt"

0

Burlesco - 21 bytes

{**{31.>}{127.<}m&}f[

Isso pode ser reduzido, substituindo o 128por '<DEL>(onde DEL é o caractere de exclusão), mas não tenho certeza de como posso postar um DEL aqui (também substitua o 31e você também pode se livrar do **)).

Além disso, na versão WIP, você pode jogar isso até :un:ln.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.