印刷できないすべてのASCII文字を取り除く


9

あなたのチャレンジは、それを受け入れるようにコーディングされている場合、次のように実行されます。

実装するには、次の2つの課題のいずれかを選択できます。

チャレンジ#1

  • ファイルから読み取る a.txt
  • 印刷可能なASCII文字(値32-126)のみをファイルに書き込みます b.txt

課題#2

  • ファイルを使用してa.txt、印刷可能なASCII文字(値32-126)を除き、ファイル内のすべての文字を削除

スペック a.txt

a.txt プレーンテキストファイルで、0〜255のASCII値(未定義/制御も含む)を含めることができ、そのサイズは最大1 GBです。

勝利

バイト数でソースコードの量が最も少ない答えが優先されます。


@Malachiそれはちょっと大きいです。どうすればアップロードできますか?
— Timtech 2014年

あなたの勝利基準は間違っています。たとえば、私はちょうどできます。本当に長いコメントを私のコードに追加して、勝ちなさい。
— Mhmd 2014年

2
@ user689そして、私が極端に遅いプログラムを持っていたとしたら、私は彼が最低のスコアが勝つことを意味したと思います。
— オベロン

1
@Malachiですが、遅い方が良いことを意味し、質問にはfastest-codeというタグが付けられます。
— オベロン

@amon代わりにコードゴルフにします。
— Timtech 2014年

回答:


6

sh

チャレンジ1、24の 23文字

tr -dc \ -~<a.txt>b.txt
ボーナス:削除する文字セットのバリエーション。
tr -dc " -~
"<a.txt>b.txt                       # preserves printables + line feed

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

1
前にスペースを空けることができます<
— Tobia

その通りその通り!あまりに漠然としているので忘れていました。:D
— FireFly 2014年

1

Bash + Perl

チャレンジ1 – 31バイト

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

チャレンジ2 – 28バイト

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

うーん、走って作りましたb.txtが、他のキャラクターは残っています。
— Timtech 2014年

@Timtechは再現できません。vimは印刷できないものを表示しません( b.txtチャレンジ1を)
— amon

1

どちらもチャレンジ1です。

C-132文字

#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文字

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

これはPython 3ですか?
— Timtech 2014年

Pythonは3.3.3では動作しません。編集:最初にファイルを作成する必要があるようです。
— Timtech 2014年

Python 2.7(r27:82525)で実行しました。
— オベロン2014年

1

ブレインファック:92

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

Brainfuckはファイルを開くことができないため、stdin / stdoutリダイレクトを使用します(#1)

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

Extended Brainfuckの同じコード:68

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

1

PowerShell(43、43)

課題1:(43)

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

課題2:(43)

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

~代わりに使用しないのはなぜx7eですか?また、あなたは,""議論を省いて、私が信じている同じ効果を維持することができます。
— Etan Reisner、2015

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

チャレンジ#1

ルビー(52)

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



0

K4、36の 33バイト

解決:

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

説明:

上記はチャレンジA b.txt用でありa.txt、チャレンジB 用のforを置き換えます。

`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

バーレスク-21バイト

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

これは128、'<DEL>(DELが削除文字)に置き換えることで短縮できますが、ここにDELを投稿する方法がわかりません(また、31を取り除くこともできます**))。

また、WIPバージョンでは、これをに下げることができます:un:ln。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.