Entfernen Sie alle nicht druckbaren ASCII-Zeichen


9

Ihre Herausforderung lautet, falls Sie codiert sind, um sie anzunehmen, wie folgt:

Sie können eine der folgenden zwei Herausforderungen auswählen, die implementiert werden sollen:

Herausforderung Nr. 1

  • Aus einer Datei lesen a.txt
  • Schreiben Sie nur druckbare ASCII-Zeichen (Werte 32-126) in eine Datei b.txt

Herausforderung Nr. 2

  • a.txtLöschen Sie mit einer Datei alle Zeichen in der Datei mit Ausnahme der druckbaren ASCII-Zeichen (Werte 32-126).

Technische Daten auf a.txt

a.txt ist eine reine Textdatei, die beliebige ASCII-Werte von 0 bis 255 (auch undefiniert / Steuerelement) enthalten kann und deren Größe bis zu 1 GB betragen kann.

Gewinnen

Die Antwort mit der geringsten Menge an Quellcode in Bytes gewinnt.


@ Malachi Das ist ziemlich groß; Wie schlagen Sie vor, dass ich es hochlade?
Timtech

Ihr Gewinnkriterium ist falsch. Zum Beispiel könnte ich nur. Fügen Sie meinem Code einen wirklich langen Kommentar hinzu und gewinnen Sie.
Mhmd

2
@ user689 Und so wäre es, wenn ich ein extrem langsames Programm hätte. Ich nehme an, er meinte, dass die geringste Punktzahl gewinnt.
Oberon

1
@ Malachi, aber das würde bedeuten, dass langsamer besser ist und die Frage mit dem schnellsten Code versehen ist .
Oberon

@amon Ich mache es stattdessen Code-Golf.
Timtech

Antworten:


6

Sch

Herausforderung 1, 24 23 Zeichen

tr -dc \ -~<a.txt>b.txt
Bonus : Variationen des zu löschenden Zeichensatzes.
tr -dc " -~
"<a.txt>b.txt                       # preserves printables + line feed

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

1
Sie können den Raum vorher <
herausnehmen

Du hast Recht! Es ist nur so flüchtig, dass ich es vergessen habe. : D
FireFly

1

Bash + Perl

Herausforderung 1 - 31 Bytes

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

Herausforderung 2 - 28 Bytes

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

Hmm, es lief und ließ die b.txtaber anderen Charaktere bleiben.
Timtech

@ Timtech kann nicht reproduzieren, vim zeigt keine nicht druckbaren für mich (wenn man sich b.txtHerausforderung 1 ansieht )
amon

1

Beide sind Herausforderung 1.

C - 132 Zeichen

#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 Zeichen

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

Ist das Python 3?
Timtech

Der Python funktioniert nicht mit 3.3.3. Bearbeiten: Es scheint, dass Sie die Datei zuerst erstellen müssen.
Timtech

Ich habe es auf Python 2.7 (r27: 82525) ausgeführt.
Oberon

1

Brainfuck: 92

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

Brainfuck kann keine Dateien öffnen, daher verwenden Sie die stdin / stdout-Umleitung (# 1).

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

Der gleiche Code in Extended Brainfuck : 68

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

1

PowerShell (43, 43)

Herausforderung 1: (43)

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

Herausforderung 2: (43)

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

Warum nicht ~statt verwenden x7e? Sie können auch das ,""Argument weglassen und den gleichen Effekt beibehalten, den ich glaube.
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

Herausforderung Nr. 1

Rubin (52)

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



0

K4 , 36 33 Bytes

Lösung:

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

Erläuterung:

Oben ist für Herausforderung A, ersetzen Sie b.txtfür a.txtfür Herausforderung 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

Burlesque - 21 Bytes

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

Dies kann verkürzt werden, indem das 128durch ersetzt wird '<DEL>(wobei DEL das Löschzeichen ist), aber ich bin nicht sicher, wie ich hier ein DEL posten kann (ersetzen 31Sie auch das und dann können Sie das auch loswerden **).

In der WIP-Version können Sie dies auch bis zum Golf spielen :un:ln.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.