Tách tất cả các ký tự ASCII không in được


9

Thử thách của bạn, nếu bạn được mã hóa để chấp nhận nó, sẽ chạy như sau:

Bạn có thể chọn một trong hai thử thách sau để thực hiện:

Thử thách số 1

  • Đọc từ một tập tin a.txt
  • Chỉ viết các ký tự ASCII có thể in (giá trị 32-126) vào một tệp b.txt

Thử thách số 2

  • Với một tệp a.txt, xóa tất cả các ký tự trong tệp ngoại trừ các ký tự ASCII có thể in được (giá trị 32-126)

Thông số kỹ thuật trên a.txt

a.txt là một tệp văn bản đơn giản có thể bao gồm bất kỳ giá trị ASCII nào từ 0-255 (thậm chí không xác định / kiểm soát) và kích thước của nó có thể lên tới 1 GB.

Chiến thắng

Câu trả lời với số lượng mã nguồn nhỏ nhất tính bằng byte sẽ thắng.


@Malachi Đó là loại lớn; Làm thế nào để bạn đề nghị tôi tải nó lên?
TimTech

Tiêu chí chiến thắng của bạn là sai. Ví dụ tôi chỉ có thể. Thêm một bình luận thực sự dài vào mã của tôi và giành chiến thắng.
Mhmd

2
@ user689 Và như vậy sẽ là nếu tôi có một chương trình cực kỳ chậm. Tôi cho rằng anh ta có nghĩa là điểm số ít nhất chiến thắng.
Oberon

1
@Malachi nhưng điều đó có nghĩa là chậm hơn là tốt hơn và câu hỏi được gắn thẻ mã nhanh nhất .
Oberon

@amon Tôi sẽ làm cho nó mã golf thay thế.
TimTech

Câu trả lời:


6

sh

Thử thách 1, 24 23 ký tự

tr -dc \ -~<a.txt>b.txt
Phần thưởng : các biến thể trên bộ ký tự cần xóa.
tr -dc " -~
"<a.txt>b.txt                       # preserves printables + line feed

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

1
Bạn có thể lấy ra không gian trước<
Tobia

Bạn đúng! Nó chỉ đơn giản đến nỗi tôi quên mất nó. : D
FireFly

1

Bash + Perl

Thử thách 1 - 31 byte

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

Thử thách 2 - 28 byte

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

Hmm, nó chạy và làm cho b.txtnhưng các nhân vật khác vẫn còn.
TimTech

@Timtech không thể tái tạo, chương trình vim không unprintables cho tôi (khi nhìn vào b.txtcác thách thức 1)
amon

1

Cả hai đều là Thử thách 1.

C - 132 ký tự

#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);}

Con trăn - 78 ký tự

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

Đây có phải là Python 3 không?
TimTech

Python one không hoạt động với 3.3.3. Chỉnh sửa: Có vẻ như bạn phải tạo tập tin đầu tiên.
TimTech

Tôi đã chạy nó trên Python 2.7 (r27: 82525).
Oberon

1

Brainfuck: 92

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

Brainfuck không thể mở tệp để bạn sử dụng chuyển hướng stdin / stdout (# 1)

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

Mã tương tự trong Extended Brainfuck : 68

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

1

PowerShell (43, 43)

Thử thách 1: (43)

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

Thử thách 2: (43)

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

Tại sao không sử dụng ~thay thế x7e? Ngoài ra, bạn có thể bỏ qua các ,""đối số và giữ nguyên hiệu ứng tôi tin.
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

Thử thách số 1

Hồng ngọc (52)

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



0

K4 , 36 33 byte

Giải pháp:

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

Giải trình:

Trên đây là cho Challenge A, thay thế b.txtcho a.txtcho Challenge 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 byte

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

Điều này có thể được rút ngắn bằng cách thay thế 128bằng '<DEL>(trong đó DEL là ký tự xóa) nhưng tôi không chắc làm thế nào tôi có thể đăng DEL ở đây (cũng thay thế 31và sau đó bạn cũng có thể thoát khỏi **)).

Ngoài ra, trong phiên bản WIP, bạn có thể chơi golf này :un:ln.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.