สร้างและเขียนลงไฟล์


11

ท้าทาย

สร้างไฟล์ใหม่และเขียนสตริงHello Worldลงไป

ข้อ จำกัด

  • ความท้าทายของคุณต้องเขียนไปยังไฟล์บนดิสก์ในระบบไฟล์

  • ไฟล์อาจไม่ใช่ไฟล์บันทึกที่สร้างขึ้นระหว่างการทำงานปกติของล่าม

  • ไฟล์ต้องมีเพียงHello Worldสตริง มันได้รับอนุญาตให้มีขึ้นบรรทัดใหม่หรือช่องว่างที่น้อยที่สุด ไม่มีเนื้อหาอื่น ๆ

  • ไม่อนุญาตให้ใช้แฟล็ก / ท่อบรรทัดคำสั่ง (ฯลฯ ) ยกเว้นเมื่อจำเป็นต้องเรียกใช้โปรแกรม (เช่นperl -p)

หมายเหตุ

  • นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ

  • ปฏิบัติตามวิญญาณของกฎไม่ใช่ตัวอักษร


ขึ้นบรรทัดใหม่ไม่เป็นไรใช่ไหม
Winny

@ Winny ใช่มันก็โอเค
dkudriavtsev

ชื่อไฟล์เป็นส่วนหนึ่งของเนื้อหาของไฟล์หรือไม่?
CousinCocaine

คำตอบ:



24

Python 2, 32 ไบต์

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

ใช่นี้เป็นงูหลามที่ถูกต้อง


1
ว้าว คำอธิบาย?
James

1
@DrGreenEggsandIronMan ดูเหมือนว่าเคล็ดลับสำคัญคือวิธีการที่*สามารถแยก iterable เข้าไปในข้อโต้แย้งของแต่ละบุคคลในการทำงานเพื่อให้กลายเป็นopen(*"ww") open("w","w")
หมึกมูลค่า

7
@ValueInk จริง ๆ แล้วเคล็ดลับหลักคือการใช้คำสั่งพิมพ์เพิ่มเติมซึ่งไม่ค่อยเห็นในป่า
xsot

1
นั่นเป็นกลอุบายที่เยี่ยมยอด แต่ถ้าไม่ใช่สำหรับ*"ww"กลอุบายของคุณคุณได้ผูกกับคำตอบของ Python อื่น ๆ ที่นี่ซึ่งใช้open(...).write(...)แทนจำนวนไบต์เดียวกัน
Value Ink

โอ๊ะฉันไม่ได้ตระหนักเลย
xsot




5

แบตช์ 18 ไบต์

echo Hello World>f

ฉันคิดว่าคุณต้องการ@หรือตั้งชื่อใหม่เป็น (คอนโซล)
Erik the Outgolfer

@ไม่จำเป็น
Shaun Wild

ลองบันทึกเป็นไฟล์แบตช์แล้วเรียกใช้งานดังกล่าว (ไม่ใช่พิมพ์คำสั่งโดยตรง) จากนั้นคุณจะเห็นว่าคุณต้องการ@เพราะคำสั่งนั้นจะถูกพิมพ์ออกมาเช่นกัน นั่นหมายความว่าคุณมีสองตัวเลือก: 1) ลบคำตอบนี้เพราะมันจะเป็น dupe 2) Relabel เป็น (คอนโซล)
Erik the Outgolfer

5

เป็นกลุ่ม, 15 + 2 == 17 ไบต์

iHello World<esc>ZZ

2 ไบต์สำหรับการเปิดตัวนี้กับแทนvim f vimนอกจากนี้เวอร์ชันนี้ใช้งานได้กับ:

iHello World<C-o>ZZ

หากปล่อยเสียงเรียกเข้าเช่นนี้ไม่ได้รับอนุญาตก็มี:

เป็นกลุ่ม, 18 ไบต์

iHello World<esc>:w f<cr>

ด้านหมายเหตุ: นี่คือพูดได้หลายภาษา สิ่งเดียวกันใช้งานได้ใน V ยกเว้นว่าสั้นลงหนึ่งไบต์ (เนื่องจาก<cr>จุดสิ้นสุดคือปริยาย)


ท้ายที่สุดแล้วอะไรคือสิ่งที่ `f <cr> '
Zwei

@Zwei 'f' เป็นชื่อของไฟล์และ<cr>(ซึ่งเป็นตัวช่วยจำสำหรับ "enter", ไบต์เดียว) จำเป็นต้องเรียกใช้คำสั่ง คำสั่งที่ขึ้นต้นด้วยโคลอนเป็นเหมือนมินิเชลล์ภายใน vim และคำสั่ง:wคือคำสั่งสำหรับเขียนไปยังไฟล์
James

<esc>ไม่ควรนับเป็น 5 ไบต์และ<cr>4 เนื่องจากต้องพิมพ์ครบหรือไม่
Bart van Nierop

@BartvanNierop ไม่<esc>เป็นเพียงสัญกรณ์สำหรับ "คีย์การหลบหนี" ซึ่งเป็น0x1Bและ<cr>เป็นสัญกรณ์สำหรับ "The Carriage Return key" ซึ่งเป็น0x0B
James

1
ก่อนอื่นมีแบบอย่างให้คะแนนเป็นกลุ่มที่มี keystrokes == bytesแต่อันดับที่สองมีหลายวิธีที่จะเขียนสิ่งนี้ใน "รหัส" เป็นกลุ่มโดยไม่ต้องใช้สัญลักษณ์ vim-key ตัวอย่างเช่นหากคุณใช้<C-v>เพื่อแทรกอักขระ escape ตามตัวอักษรและการขึ้นบรรทัดใหม่ตามตัวอักษรคุณสามารถกำหนดลายเส้นเหล่านี้ทั้งหมดให้กับแมโครและเรียกใช้วิธีนั้น คุณยังสามารถทำได้ใน vimscript normal 'iHello World^[:w f^Mซึ่งเป็นวิธีที่ vim แสดงมันไม่ใช่วิธีที่คุณป้อน ^[และ^Mมีทั้งหนึ่งไบต์
James

4

แบตช์ 19 ไบต์

@echo Hello World>o

ไม่แน่ใจว่ามันนับว่าผิด แต่จะส่งเอาต์พุต "Hello World" และบรรทัดใหม่ไปยังไฟล์แทนที่จะเป็นเพียง "Hello World"
brianush1

'@' ดีสำหรับอะไร
แพร์

@PEAR มันป้องกันไม่ให้คำสั่งถูกสะท้อนไปยัง STDOUT
Neil


3

C, 44 ไบต์

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

1
สิ่งนี้จะแยกในบางระบบโดยไม่ต้อง#include <stdio.h>
Steven Penny

@StevenPenny ตราบใดที่มีระบบ / คอมไพเลอร์ที่รับประกันว่าจะไม่แยกออกจากกันก็ไม่เป็นไร คำตอบโดยทั่วไปไม่จำเป็นต้องพกพา
Martin Ender






2

K, 20 ไบต์

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

ยืนยัน;

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

เนื่องจากยังไม่มีใครพูดถึงมันขอต้อนรับสู่ Programming Puzzles & Code Golf
Erik the Outgolfer

ชื่นชมมาก!
Chromozorz

ตกลง. ฉันคิดว่าคุณมีช่องว่างชั้นนำพิเศษด้วย ฉันจะแก้ไขช่องว่างถ้าคุณต้องการ (ฉันไม่รู้ว่ามันถูกวางไว้อย่างตั้งใจหรือไม่ แต่ฉันคิดว่ามันไม่ได้ตั้งใจ)
Erik the Outgolfer

2

Clojure 23 ไบต์

#(spit"x""Hello World")

ฟังก์ชั่นไม่ระบุชื่อซึ่งสร้างไฟล์ที่เรียกว่าxและเขียนที่Hello Worldนั่น


2

Node.js ขนาด 42 ไบต์

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

ฉันไม่คิดว่านี่ต้องมีคำอธิบาย

Node.js REPL, 31 ไบต์

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

ด้วยเหตุผลบางอย่างในการแทนคุณไม่จำเป็นต้องรวม fs


ฉันไม่คิดว่ามันจะใช้งานได้ require("fs").writeFile("o","Hello World")ในเพื่อให้มันไปทำงานคุณจะต้อง มิฉะนั้นจะไม่รวม fs
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ huh ตกลง ทำงานใน REPL ด้วยเหตุผลบางอย่าง
Downgoat

2

ค#, 93 77 76 ไบต์

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

ดูว่าทำงานได้ยกเว้นการเข้าถึงไฟล์โดยไม่ได้รับอนุญาต

การเปลี่ยนแปลง

REV2

  • ลบเนมสเปซที่ไม่จำเป็นออก
  • เปลี่ยนชื่อฟังก์ชั่นเป็น Main (มิฉะนั้นจะไม่ถูกตรวจพบว่าเป็นฟังก์ชั่นหลัก)
  • ลบusingคำสั่ง (ขอบคุณJean Lourenço )

Rev3

  • ลบพื้นที่ที่แอบเข้ามา

C # (ไม่มีต้นแบบสำเร็จรูป), 47 ไบต์

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

คุณสามารถบันทึกไบต์จำนวนหนึ่งโดยการลบการใช้และผนวกเข้ากับวิธีการโดยตรง: System.IO.File.WriteAllText [... ]
Jean Lourenço

@ JeanLourençoขอบคุณ ฉันมีที่เดิมแล้วเปลี่ยนมันด้วยเหตุผลที่ไม่รู้จัก
Bart van Nierop

2

R, 38 36 35 ไบต์

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

ฉันชอบที่ไฟล์ที่สร้างขึ้นไม่มีชื่อ! มันเป็น.txtอะไรก็ได้ในความเป็นจริง!

-2ไบต์ขอบคุณคำพูด @PEAR!
-1ไบต์ขอบคุณ @BartvanNierop!

รหัสนี้จะสร้างไฟล์ที่ไม่มีชื่อ


1
'.txt' จำเป็นหรือไม่ การสิ้นสุดไฟล์เป็นเพียงสำหรับผู้ใช้ ตัวละครเดียวอาจพอฉัน
แพร์

1
ฉันไม่รู้ R แต่คุณไม่สามารถละทิ้งไบต์อื่นได้ตามคำแนะนำของ @ PEAR เพียงแค่ตั้งชื่อไฟล์"a"?
Bart van Nierop



1

APLX , 15 ไบต์

'Hello World'1

สร้างไฟล์ส่วนประกอบ APL ที่มีเพียงหนึ่งองค์ประกอบ; สตริงที่ต้องการ สามารถอ่านย้อนกลับได้ด้วย:

      'Hello World'1
Hello World






1

Java 7, 100 95 ไบต์

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

หรือถ้าคุณต้องการปิดตัวเขียนหลังจากใช้งาน ( 101 ไบต์ ):

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

Ungolfed:

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){
    }
  }
}

การใช้งาน:

java -jar Main.jar

Java เป็นภาษาที่ฉันโปรดปราน แต่พระเยซูคริสต์มันเฮฮาไม่ดีภาษาการเล่นกอล์ฟมันคือ haha
Shaun Wild

4
@ AlanTuning แน่นอน xD ฉันทำงานกับ Java ในที่ทำงานและสนุกกับ code-golf ใน Java คุณจะไม่สามารถเอาชนะความท้าทายของ code-golf ได้ที่นี่โดยใช้ Java แต่ก็ยังสนุกที่จะเขียนรหัส Java ให้สั้นที่สุด
Kevin Cruijssen

2
คุณสามารถทำได้void f()throws Exception{new java.io.PrintWriter("x").print("Hello World");}
หน้าผา

java.io.Writer p=new java.io.PrintWriterช่วยให้คุณเพิ่มตัวละครอีกเล็กน้อย
Frozn

@cliffroot อืมฉันลองก่อน แต่ดูเหมือนจะไม่เขียนอะไรลงดิสก์ จะลองอีกครั้งในวันนี้ในขณะนี้ฉันไม่มี IDE และไฟล์ I / O ไม่สามารถใช้งานได้
Kevin Cruijssen

1

eacal , 26 ไบต์

write a string Hello World

นี้writeSA string Hello Worldไปยังไฟล์a, การสร้างมันถ้าไม่อยู่ โดยทั่วไป:

write <fileName> <exec>

และ

string <params to convert to string>

เรียกใช้โปรแกรมเป็น:

λ node eacal.js writeFile

1

J, 21 ไบต์

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

สิ่งนี้เขียนไปยังไฟล์oในไดเรกทอรีปัจจุบันหรือหากไม่ได้รับการเรียกจากไฟล์ในj64-804ไฟล์ของคุณ 1!:3เป็นตัวเขียนต่างประเทศและ<'o'เป็นชื่อไฟล์ชนิดบรรจุกล่อง (ชื่อไฟล์จำเป็นต้องใส่ในกล่อง) LHS เป็นสตริงที่จะเขียน


1

JavaScript, 89 ไบต์

รหัสนี้ทดสอบใน Chrome ในเบราว์เซอร์อื่นองค์ประกอบต้องอยู่ในเอกสารเพื่อให้วิธีการคลิกทำงาน

a=document.createElement("a");a.href="data:text/plain,Hello World";a.download=1;a.click()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.