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.