Tạo và ghi vào một tập tin


11

Thử thách

Tạo một tập tin mới và viết chuỗi Hello Worldvào nó.

Những hạn chế

  • Thử thách của bạn phải ghi vào một tệp trên đĩa, trong hệ thống tệp.

  • Tệp có thể không phải là tệp nhật ký được tạo trong quá trình hoạt động bình thường của trình thông dịch.

  • Tệp phải chỉ chứa chuỗi Hello World. Nó được phép chứa một dòng mới hoặc khoảng trắng tối thiểu. Không có nội dung khác.

  • Không cho phép cờ / ống dòng lệnh (v.v.), trừ khi cần thiết để chạy chương trình. (ví dụ perl -p)

Ghi chú

  • Đây là , vì vậy chương trình ngắn nhất tính bằng byte thắng.

  • Thực hiện theo tinh thần, không phải chữ, của các quy tắc.


Đường mòn mới có ổn không?
Winny

@Winny vâng, nó ổn thôi
dkudriavtsev

Là một tên tệp một phần của nội dung của một tập tin?
CousinCocaine

Câu trả lời:


1

Bình thường, 14 byte

.w"Hello World

Đầu ra cho một tập tin được gọi là o.txt.


24

Python 2, 32 byte

print>>open(*"ww"),"Hello World"

Vâng, đây là con trăn hợp lệ .


1
Ái chà. Giải trình?
Gia-cơ

1
@DrGreenEggsandIronMan có vẻ như mẹo chính là làm thế nào *có thể phân chia một lần lặp thành các đối số riêng lẻ trong một hàm, vì vậy open(*"ww")trở thành open("w","w").
Mực giá trị

7
@ValueInk Trên thực tế, mẹo chính là sử dụng câu lệnh in mở rộng hiếm thấy trong tự nhiên.
xsot

1
Đó thực sự là một mẹo hay, nhưng nếu không phải là *"ww"mẹo của bạn, bạn đã bị ràng buộc với câu trả lời Python khác ở đây, sử dụng open(...).write(...)thay cho cùng một số byte
Giá trị Ink

Rất tiếc, tôi thậm chí không nhận ra điều đó.
xsot




5

Mẻ, 18 byte

echo Hello World>f

Tôi nghĩ rằng bạn cần một @, hoặc đặt lại tên này là (bảng điều khiển).
Erik the Outgolfer

Điều @này là không cần thiết.
Shaun Wild

Hãy thử lưu nó trong một tệp bó và chạy nó như vậy (không trực tiếp gõ lệnh). Sau đó, bạn sẽ thấy rằng bạn cần @, bởi vì lệnh cũng được in. Điều đó có nghĩa là bạn có hai tùy chọn: 1) Xóa câu trả lời này bởi vì nó sẽ là một bản sao 2) Relabel as (console).
Erik the Outgolfer

5

Vim, 15 + 2 == 17 byte

iHello World<esc>ZZ

+2 byte để khởi chạy cái này vim fthay vì vim. Ngoài ra, phiên bản này hoạt động để:

iHello World<C-o>ZZ

Nếu không cho phép khởi chạy vim như thế này, thì cũng có:

Vim, 18 byte

iHello World<esc>:w f<cr>

Lưu ý bên: đây là một polyglot. Điều tương tự cũng hoạt động trong V, ngoại trừ việc nó ngắn hơn một byte (vì <cr>ở cuối là ẩn.)


`F <cr>` ở cuối là gì?
Zwei

@Zwei 'f' là tên của tệp và <cr>(cần được ghi nhớ là "enter", một byte đơn) để chạy lệnh. Các lệnh bắt đầu bằng dấu hai chấm giống như một vỏ nhỏ bên trong vim và lệnh :wlà lệnh để ghi vào tệp.
James

Không nên <esc>được tính là 5 byte và <cr>4, vì chúng phải được nhập đầy đủ?
Bart van Nierop

@BartvanNierop Không, <esc>chỉ là ký hiệu cho "Chìa khóa giải thoát", đó là 0x1B, và <cr>là ký hiệu cho "Chìa khóa vận chuyển trở lại", đó là0x0B
James

1
Trước hết, có một tiền lệ cho điểm vim bằng tổ hợp phím == byte , nhưng thứ hai, có một số cách để viết mã này trong "mã" vim mà không cần sử dụng ký hiệu vim-key. Ví dụ: nếu bạn sử dụng <C-v>để chèn một ký tự thoát theo nghĩa đen và trả về vận chuyển theo nghĩa đen, thì bạn có thể gán tất cả các nét này cho một macro và chạy theo cách đó. Bạn cũng có thể thực hiện nó trong vimscript với normal 'iHello World^[:w f^Mcách vim hiển thị nó , không phải cách bạn nhập nó. ^[^Mlà cả một byte.
James


3

C, 44 byte

main(){fputs("Hello World",fopen("o","w"));}

1
Điều này sẽ segfault trên một số hệ thống mà không có#include <stdio.h>
Steven Penny

@StevenPenny Miễn là có một hệ thống / trình biên dịch mà nó được đảm bảo không bị segfault, điều đó tốt. Câu trả lời thường không phải là xách tay.
Martin Ender


3

PowerShell, 15 byte

"Hello World">o

>chuyển hướng chuỗi đến một tệp được gọi otrong thư mục hiện tại.



2

ed, 19 ký tự

i
Hello World
.
w o

Chạy mẫu:

bash-4.3$ ed <<< $'i\nHello World\n.\nw o'
12

bash-4.3$ cat o
Hello World

2

MATL , 15 byte

'Hello World'Z#

Điều này tạo ra một tệp được gọi inoutvà ghi chuỗi vào nó.


2

K, 20 byte

    `:f 0:,"Hello World"
    `:f

Xác nhận;

    mmm@chromozorz:~/q$ cat f.txt 
    Hello World

Vì chưa ai nói điều đó, chào mừng bạn đến với Lập trình Câu đố & Code Golf.
Erik các Outgolfer

Nhiều đánh giá cao!
Chromozorz

ĐỒNG Ý. Tôi cũng nghĩ rằng bạn có thêm không gian hàng đầu mặc dù. Tôi sẽ chỉnh sửa các khoảng trắng nếu bạn muốn (Tôi không biết liệu chúng có được đặt một cách có chủ ý hay không, nhưng tôi nghĩ đó là vô ý.)
Erik the Outgolfer 6/10/2016

2

Clojure, 23 byte

#(spit"x""Hello World")

Hàm ẩn danh tạo tệp được gọi xvà ghi Hello Worldở đó.


2

Node.js, 42 byte

require("fs").writeFile('o','Hello World')

tôi không nghĩ điều này cần giải thích

REPL của Node.js, 31 byte

fs.writeFile('o','Hello World')

vì một số lý do thay thế bạn không cần phải bao gồm fs


Tôi không nghĩ rằng nó hoạt động. Để nó hoạt động, bạn cần require("fs").writeFile("o","Hello World"). Nếu không, fs không được bao gồm.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ huh ok. hoạt động trong REPL vì một số lý do
Downgoat

2

C #, 93 77 76 byte

using System.IO;namespace N{class C{static void M(){File.WriteAllText("f", "Hello World");}}}

class C{static void Main(){System.IO.File.WriteAllText("f", "Hello World");}}

class C{static void Main(){System.IO.File.WriteAllText("f","Hello World");}}

Xem nó hoạt động , với một ngoại lệ cho truy cập tập tin trái phép.

Thay đổi

Rev2

  • Xóa không gian tên không cần thiết
  • Tên hàm đã thay đổi thành Main (vì nếu không, nó sẽ không được phát hiện là hàm chính)
  • usingChỉ thị bị xóa (cảm ơn Jean Lourenço )

Rev3

  • Loại bỏ không gian mà lẻn vào.

C # (không có bản soạn sẵn), 47 byte

void M(){File.WriteAllText("f","Hello World");}

Bạn có thể lưu một số byte bằng cách loại bỏ việc sử dụng và nối nó trực tiếp vào phương thức: System.IO.File.WriteAllText [...]
Jean Lourenço

@ JeanLourenço Cảm ơn. Tôi đã có nó ban đầu và sau đó thay đổi nó vì lý do không rõ.
Bart van Nierop

2

R, 38 36 35 byte

sink(" ");cat("Hello World");sink()

Tôi thích cách tập tin được tạo không có tên! Thực tế nó chỉ là .txtbất cứ thứ gì!

-2 byte nhờ nhận xét @PEAR!
-1 byte nhờ @BartvanNierop!

Mã này sẽ tạo ra một tập tin không có tên.


1
Là '.txt' có thực sự cần thiết không? Kết thúc tập tin chỉ dành cho người dùng. Một nhân vật duy nhất có thể cho tôi đủ.
PEAR

1
Tôi không biết R, nhưng bạn có thể không tắt một byte khác, như đề xuất của @ PEAR, bằng cách chỉ cần đặt tên tệp "a"?
Bart van Nierop



1

APLX , 15 byte

'Hello World'1

Tạo một tệp thành phần APL chỉ chứa một thành phần; chuỗi mong muốn. Nó có thể được đọc lại với:

      'Hello World'1
Hello World

1

Gema, 28 ký tự

\A=@write{o;Hello World}@end

Chạy mẫu:

bash-4.3$ gema '\A=@write{o;Hello World}@end'

bash-4.3$ cat o
Hello World

1

Vợt, 43 byte

(display"Hello World"(open-output-file"f"))

1

Julia, 47 byte

f=open("o","w");write(f,"Hello World");close(f)

Tôi đã thử sử dụng writedlm, nhưng nó không thành công.




1

Java 7, 100 95 byte

void f()throws Exception{java.io.Writer p=new java.io.PrintWriter("x");p.print("Hello World");}

Hoặc nếu bạn muốn đóng trình ghi sau khi sử dụng nó ( 101 byte ):

void f()throws Exception{try(java.io.Writer p=new java.io.PrintWriter("x")){p.print("Hello World");}}

Ung dung:

class Main{
  static void f() throws Exception{
    try(java.io.Writer p = new java.io.PrintWriter("x")){
      p.print("Hello World");
    }
  }

  public static void main(String[] a){
    try{
      f();
    } catch(Exception ex){
    }
  }
}

Sử dụng:

java -jar Main.jar

Java là ngôn ngữ yêu thích của tôi nhưng jesus christ thật vui khi ngôn ngữ chơi golf tệ đến thế nào haha
Shaun Wild

4
@AlanTuning Thật vậy. xD Tôi làm việc với Java tại nơi làm việc và thật thú vị khi chơi golf trong Java. Bạn KHÔNG BAO GIỜ có thể chiến thắng thử thách chơi gôn ở đây bằng Java, nhưng vẫn vui khi viết mã Java càng ngắn càng tốt.
Kevin Cruijssen

2
tốt, bạn chỉ có thểvoid f()throws Exception{new java.io.PrintWriter("x").print("Hello World");}
cliffroot

java.io.Writer p=new java.io.PrintWritergiúp bạn tiết kiệm thêm một số nhân vật.
Frozn

@cliffroot Hmm, ban đầu tôi đã thử, nhưng dường như nó không ghi gì vào đĩa. Sẽ thử lại vào ngày mai, hiện tại tôi không có IDE và tệp I / O không hoạt động ở chế độ tạm thời.
Kevin Cruijssen

1

eacal , 26 byte

write a string Hello World

Đây là writesa string Hello Worldđể tập tin a, tạo ra nó nếu không có mặt. Về cơ bản:

write <fileName> <exec>

string <params to convert to string>

Chạy chương trình như:

λ node eacal.js writeFile

1

J, 21 byte

'Hello World'1!:3<'o'

Điều này ghi vào một tệp otrong thư mục hiện tại, hoặc, nếu không được gọi từ một tệp, trong j64-804tệp của bạn . 1!:3là ghi nước ngoài, và <'o'là tên tệp được đóng hộp (tên tệp cần phải được đóng hộp). LHS là chuỗi để viết.


1

JavaScript, 89 byte

Mã này đã được thử nghiệm trong Chrome. Trong các trình duyệt khác, phần tử phải có trong tài liệu để phương thức nhấp hoạt động.

a=document.createElement("a");a.href="data:text/plain,Hello World";a.download=1;a.click()
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.