打印“你好,世界!”


79

对真的。 用硬件打印机🖨 打印它以创建纸质副本。

将必要的命令/数据发送到打印机,以便在纸上打印以下文本:

你好,世界!

您可以使用任何可用的本地或网络连接的打印机。

如果您的打印机允许,则应在白纸上用黑色墨水使用8pt或更大的文本。

文本应显示在自己的行上。可以根据需要将其定位在左侧或右侧。

提交的数字照片/视频/ GIF证据会有所帮助。

如果您的硬件不能做纸,但可以进行其他奇特的硬拷贝生产,例如3D打印,CNC加工或原子级打印,那么我很乐意接受这样有趣的意见。


为了明确起见,该问题询问“将必要的命令/数据发送到打印机”。这意味着不需要进一步的用户输入。打开打印对话框是不够的。截至2016年12月31日太平洋标准时间上午10:48,执行此操作的现有答案将为您的父级(但我自己不支持)。


56
请提供地址,我们可以将其发送到该地址以进行验证。
steenbergh

1
@steenbergh Yep-好点-提交的数码照片/视频/ GIF证据应该足够好。
Digital Trauma

3
值得注意的是,许多较旧的打印机使用自定义命令集。这些大多数都按字面意义打印ASCII字符,因此,如果您可以访问其中一台有问题的打印机(或者可以声称您拥有),则发送Hello, World!到打印机端口就足够了。

1
我可以发誓曾经print("Hello, World!")在Firefox控制台中尝试过一次,它打开了打印对话框(没用,因为我没有以任何方式连接到打印机),但是现在它只返回字符串...
ETHproductions

2
chrome中的@ETHproductions <script>print("Hello, World!")</script> 确实会打开打印对话框,但上面没有实际的文本。
FlipTack

Answers:


41

Bash,21个 19字节

lp<<<Hello,\ World!

实际打印输出

在那里。

感谢Dennis,节省了2个字节!


1
+1作为脚本有效。在我的Mac上运行正常。如果要直接在命令行上运行它,则需要将双引号更改为单引号。
Digital Trauma

为什么没有横幅可以使ot看起来很漂亮
juggernauthk108

@ juggernaut1996在哪里?如果我必须再次打印出某些东西,则不会
蓝色

37

PowerShell,18字节

'Hello, World!'|lp

在线尝试!

在此处输入图片说明


9
不确定TIO链接的点。还是+1。
Digital Trauma

1
@DigitalTrauma我认为这很有趣;它为我生成了帖子。您还可以查看调试输出,以查看它正在尝试(失败)假脱机作业。:-p
briantist,2013年

19
@DigitalTrauma如果在输入字段中输入地址,TIO会将结果邮寄给您。
丹尼斯,

@Dennis,如果我有钱要烧,我会提交使用API​​到打印服务的答案。
las

19

QBIC,11个字节

'LPRINT `_h

差点忘了我建立了一个“你好,世界!” 命令进入QBIC ...

'          Starts a code literal. This used to be "$", finally changed it.
 LPRINT `  Feeds everything from ` to the next ` directly to QBasic. 
           In this case, "LPRINT" and a space
_h         Yields "Hello, World!"

经过测试,发现其工作原理与我的QBasic答案相同: 在此处输入图片说明


1
嗯..那是什么链接?这是您发明的语言吗?
2016年

1
@eis是的,我做了QBIC。链接是其中包含所有代码的Google Drive文件夹-我在GitHub上很烂...它是QBasic(QBIC代表Quick Basic的Codegolf解释器)之上的解释器,它在DosBox中运行。请查看Showcase线程中的一些示例(或打开我的个人资料的答案页面,其中75%位于QBIC中)。WIP,因此语法和令牌有时会发生变化。
steenbergh

OP使用大写字母“ W”来避免内置的“ hello world”(另请参见)。:为作业构建自己的内置命令不是代码打高尔夫球,或者您可以将其设置为“ 0字节”,并具有内置的默认行为。
心教堂

2
@Cœur:如今几乎不起作用,大多数新的高尔夫语言使用大写字母W正是因为它是PPCG的标准,并且很有可能在不知道此特定挑战的情况下添加了该命令(只是猜测更多“ Hello,World!”)。 “将来会提交挑战)

@Cœur欢迎来到PPCG!当您得知自己不是第一个受到特殊关注的人时,您可能会感到惊讶。这里是开始阅读的好地方:meta.codegolf.stackexchange.com/q/4867/11261而且,喜欢打高尔夫球的人花了很多时间思考漏洞:meta.codegolf.stackexchange.com/q/1061/ 11261
乔丹

16

批次,22个字节

echo Hello, World!>prn

这会将echo命令的输出重定向到设备文件PRN,这意味着它直接发送到默认打印机(通常是LPT1)。

我既没有DOS机器,也没有打印机,所以恐怕我现在无法测试,但我可以肯定的是,我今天已经这样做了。在Windows XP或更高版本上不起作用。


这让我想起了当我尝试创建一个名为con且无法创建的文件时。啊,DOS设备文件的快乐...
aross

可以使用“ net”命令将NT(以及可能的XP等)配置为以这种方式打印。iirc“ net use lpt1:某物”
Jasen

16

HTML + Javascript, 37 34字节

<body onload=print()>Hello, World!

在Safari中测试:

在此处输入图片说明

感谢@ jimmy23013节省了一些


11
这似乎只是打开打印对话框,并且在没有进一步手动干预的情况下实际上并未将作业发送到打印机
Digital Trauma

4
@DigitalTrauma JS无法做到
Alien先生

1
您确定@EriktheOutgolfer吗?Firefox和Chrome仅在遇到结束标记时才评估脚本代码。
manatwork 2013年

1
是的,我尝试放弃了</script>,但没有成功。
蓬松的

2
-3个字节:<body onload=print()>Hello, World!
jimmy23013

13

Python 2.7,421个字节

import zlib,base64,os;os.system("s=$'%s';lp<<<\"$s\""%zlib.decompress(base64.decodestring("eNqVkk1qxDAMha/yupNgwNfoDboReDPdhQRmrcNXP3bixA3tGEMesj/r5wXoq+YysUemI0BWlYgV\npTyAEDKEQSDucxLxJaj6gUVKE8BFsH2TIOM5iMyrcTIL3YnMqCH4X0TLONTwF3H04Z0XuRPeR3Wi\nxDOi1EZY7gUTWFa8s+z5kTgcnK3sBtbZQRtCt5LPDlrliKouDh5DYz07KB6COuETUL/YRthGxHqZ\nbjyWBAU8EFk6z350Yt97Dol65hxUow9i3zr8YGxFS61nB4szPqvDnS7CU/nFwYLIYczn97JsD3xt\nr+X5wT/ARNN3\n")))

似乎时间太长?也许有点复杂....:P

你好世界很多

说真的,这是一个简短的例子:

import os;os.system("lp<<<'Hello, World!'")

不过不是很有趣。



13

你好+ lp + tr, 9 15字节

hello|tr w W|lp

我原来有

hello|lp

但是它的大写字母错误 w

你好是Debian软件包中的gnu hello 你好


7
hello打印小写字母w,这是大多数编程网站上的习惯。(我不太确定大写字母是如何W成为PPCG的标准。)

7
@ ais523我认为大写W在这里是标准,以避免生成此类内置代码。
帕维尔

2
如果大写错误,恐怕这是无效的。
丹尼斯

感谢您的评论,我明天将删除此答案。
杰森

6
怎么hello|tr w W|lp
戴维·康拉德

11

ZX Spectrum BASIC,16个字节

LPRINT "Hello, World!"

LPRINT 是ZX Spectrum BASIC中的1字节关键字,具有代码点224。


1
您可以显示纸质照片吗?
杰森

4
@Jasen从理论上讲,我仍然可以使用该工具包,但是将其挖掘出来并连接到足够老的电视上可能有点麻烦。对于那个很抱歉。
尼尔

您可能会键入“ blind”命令。
杰森

10

MATLAB,40 37 36字节

打印文本不是在Matlab中通常要做的,但是可以做到。

title 'Hello, World!'
axis off;print

多亏了Tom Carpenter(用title代替,text(0,0,我节省了3个字节。我用title('Hello, World!') with标题“ Hello,World!”替换了另外2个字节,后跟换行符而不是分号)。

title为图形添加标题。如果尚未打开图形,则将创建该图形。

axis off 用于删除框架和轴,以便文本单独显示。

print 如果未提供输入参数,则将当前图形打印到默认打印机。

我在办公室的默认打印机上打印了此文件(成功地根据对话框显示)。我可以在那里找到它并证明它,但是您必须等待两个星期。将默认值更改为pdf-printer后,输出为:

在此处输入图片说明

^^不再是正确的图像。


8

QBasic,21个字节

LPRINT"Hello, World!"

LPRINT直接将文本发送到打印机。不幸的是,未经测试的DosBox本身不支持NET USE,所以我不能重新路由LPT1:到NovaPDF。

我有问题...

更新:在QB64中对其进行了测试。生成的PDF在Microsoft Edge中打开。看起来像这样: 在此处输入图片说明


7

8086机器代码,28个字节

00000000  be 0f 01 b9 0d 00 31 d2  ac 98 cd 17 e2 fa c3 48  |......1........H|
00000010  65 6c 6c 6f 2c 20 57 6f  72 6c 64 21              |ello, World!|
0000001c

使用标准的int 0x17BIOS调用。我现在没有设置点矩阵打印机,因此该代码未经测试。

这个怎么运作:

            |   org 0x100
            |   use16
be 0f 01    |       mov si, msg         ; source pointer = msg
b9 0d 00    |       mov cx, 13          ; counter = length of msg
31 d2       |       xor dx, dx          ; clear dx
ac          |   @@: lodsb               ; al = *si++
98          |       cbw                 ; sign-extend al->ax (simply clears ah)
cd 17       |       int 0x17            ; send char in al to printer dx
e2 fa       |       loop @b             ; loop while (cx-- > 0)
c3          |       ret
48 65 6c    |   msg db "Hello, World!"
6c 6f 2c    |   
20 57 6f    |   
72 6c 64    |   
21          |   

1
当然可以,只需添加即可。
user5434231 '17

现在我们在说话!
有限赎罪

6

批+卡住,12个字节

受此答案启发,一个空的卡住程序将打印“ Hello,World!”。

  1. 将打印机连接到计算机的LPT1端口
  2. 创建一个要解释的空卡文件(文件名a)
  3. 在空文件上运行卡住的解释器,并将结果通过管道传输到LPT1

stuck a>LPT1

4
如果您使用多种语言,则还需要计算将它们连接在一起的胶水,作为字节数的一部分。对于批处理程序,我将其计为15,由于需要0字节的外部文件,因此将其计为0。

1
您能否清楚地显示Windows批处理脚本,并明确显示用于调用Stuck并将结果传递给打印机的命令?明确地说,我的意思是stuck empty > LPT1。顺便说一句,如果这使用REPL,则我认为应该明确指出共识(我认为这是为了最大程度地减少混乱)。
redstarcoder

@ ais523我征服了-我应该算一下胶水,因此将胶水从5个字节增加到12个
Daniel Daniel

您可以在此处保存字节,方法是重定向到PRN而不是LPT1。
user5434231 '17

1
IMO,您需要为1个字节的文件名添加1个字节。
CalculatorFeline

4

GFA-Basic,22个字节

仅在并行端口重定向到文件的Atari ST仿真器上进行了测试。它应该可以在Windows版本的GFA-Basic(免费)上运行,但这未经测试。

LPRINT "Hello, World!"

注意:这与QBasic语法完全相同。


4

Java,330字节

打高尔夫球:

import java.awt.print.*;void f()throws Throwable{PrinterJob job=PrinterJob.getPrinterJob();job.setPrintable(new Printable(){public int print(java.awt.Graphics g,PageFormat f,int i){if(i==0){((java.awt.Graphics2D)g).translate(f.getImageableX(),f.getImageableY());g.drawString("Hello, World!",0,90);}return i>0?1:0;}});job.print();}

取消高尔夫(仅导入加功能):

import java.awt.print.*;

void f() throws Throwable {
  PrinterJob job = PrinterJob.getPrinterJob();
  job.setPrintable(new Printable() {
    public int print(java.awt.Graphics g, PageFormat f, int i) {
      if (i == 0) {
        ((java.awt.Graphics2D) g).translate(f.getImageableX(), f.getImageableY());
        g.drawString("Hello, World!", 0, 90);
      }
      return i > NO_SUCH_PAGE ? 1 : PAGE_EXISTS;
    }
  });
  job.print();
}

Java不是一种出色的高尔夫语言,并且某些与硬件相关的事情(包括打印)在高尔夫运动方面做得非常差。

在测试该程序时,我将PDF打印机设置为默认打印机。它工作了,但还向我的激光打印机发送了一个打印作业,其中包含87792页的“ Hello,World!”。我拉出纸盒并取消了作业,然后重新测试。它没有再次发生。谢谢,Windows 10。


将3x更改jobji==0,则为-7个字节i<1
凯文·克鲁伊森

3

JavaScript,37 36字节

print(document.write`Hello, World!`)

@manatwork和@xem节省了15个字节!


3
无需明确指定windowdocument.write('Hello, World!');print()。甚至更短:print(document.write('Hello, World!'))
manatwork 2013年

3
使用ES6,您甚至可以执行以下操作 document.write`Hello, world!` :(更多信息在这里:xem.github.io/articles/#webspeech
xem

是否打印不经确认?没有?太糟糕了,这是无效的。
CalculatorFeline

@CalculatorFeline为什么会有敌意?如果您阅读了挑战的脚注,就会发现"...Existing answers that do this as of 10:48am PST 31st Dec 2016 will be grandfathered..."
奥利弗·

哦。我错过了那部分。
CalculatorFeline


2

c#,259250字节

using System.Drawing;using System.Drawing.Printing;struct p{static void Main(){var p=new PrintDocument();p.PrintPage+=(s,e)=>e.Graphics.DrawString("Hello,World!",new Font("Arial",12),new SolidBrush(Color.Black),new Rectangle(0,0,999,99));p.Print();}}

输出示例


2

批处理,32字节

echo Hello, World!>t
notepad/P t

无需手动干预即可在所有版本的Windows上运行。


1

拍子35字节

(system("echo 'Hello World!'\|lp"))

1

HTML(33)

Hello, World!<svg onload=print()>

(在浏览器中提示打印窗口,不直接打印)


标签必须<svg>明确说明原因,还是任何标签都可以工作?(许多标签的名称都较短。)

7
afaik,只有svg,img(具有有效的src),iframe和主体在加载页面时才会触发onload事件。没有src的img会触发onerror事件。总而言之,我们找到的最短的是svg onload = ...
xem

挑战要求大写W(不是改变您的字节数)。
马丁·恩德

1

APL(Dyalog),50字节

当然,我们可以淘汰并使用批处理/重击解决方案,但让我们创建一个实际的打印作业:

{'X.'WC'Text' 'Hello, World!'⍵⊣'X'WC'Printer'}⍳2

⎕WC 是W¯¯ INDOWS Ç reate对象

首先,我们创建一个称为的打印机对象(打印作业)'X',然后在其中的('X.')中,在匿名函数{… 的参数处创建一个文本对象}。参数为⍳2,给出前两个整数(1 2),表示从顶部算起1%,从左侧算起2%。当匿名函数终止时,其所有局部变量(X)都会被销毁,这将向Windows发出信号,表明已准备好打印该打印作业:


列印工作


0

Javascript,36个字节

print(document.write`Hello, World!`)

这只是打开打印对话框。实际打印需要进一步的人工干预。请参阅问题底部的注释。
Digital Trauma


0

JavaScript + HTML,20字节

print()
Hello, World!


这只是打开打印对话框。实际打印需要进一步的人工干预。请参阅问题底部的注释。
Digital Trauma

0

C#,174个字节

namespace System.Drawing.Printing{_=>{var p=new PrintDocument();p.PrintPage+=(s,e)=>e.Graphics.DrawString("Hello, World!",new Font("Onyx",9),Brushes.Black,0,0);p.Print();};}

完整/格式化版本:

namespace System.Drawing.Printing
{
    class P
    {
        static void Main(string[] args)
        {
            Action<float> f = _ =>
            {
                var p = new PrintDocument();
                p.PrintPage += (s, e) =>
                    e.Graphics.DrawString("Hello, World!", new Font("Onyx", 9), Brushes.Black, 0, 0);
                p.Print();
            };

            f(0);
        }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.