소스 코드의 이미지를 출력합니다 (Quick Not a Quite).


29

코드 골프 : 소스 코드의 이미지를 인쇄합니다.

요구 사항

  1. 다른 곳에 저장되어 런타임에 검색된 버전이 아니라 소스 코드 자체의 이미지를 출력해야합니다.
  2. 코드는 손으로 직접 복사하여 결과를 재현 할 수있을 정도로 읽기 쉬워야합니다.

모든 이미지 형식이 적용 가능합니다.

보너스

  • 하나 이상의 출력 형식을 허용하는 경우 점수의 -10 %
  • 코드가있는 경우 15 % 도 는 '진정한'quine. 즉, 소스 코드를 읽지 않지만 소스 코드가 임베드됩니다 ( 예는 여기 참조 ).
  • 코드가 엄격한 quine 인 경우 -30 % – 즉, 코드 이미지가 프로그램에 포함됩니다 (Piet 솔루션,보고 있습니다).

읽을 수 있어야합니까?
— Tim Seguine

7
"다른 곳에서 저장된 버전이 아니라 코드 이미지 자체를 출력해야합니다." 소스 코드 파일을 읽거나 읽을 수 있습니까?
— Tim Seguine

29
방금 공백으로 솔루션을 구현했습니다. 결과 이미지는 매우 지루해 보입니다.
— Howard

7
다음은 Piet로 작성된 흥미로운 이미지 quine입니다
— ProgramFOX

답변:


25

껍질

"소스 코드의 이미지 인쇄"를 통해 실제로 종이에 이미지를 인쇄 할 수 있다고 가정합니다.

#!/bin/sh
lpr $0

21

7
이 답변에 커뮤니티 위키가 있습니까? 이는 외부에서 제공되는 답변에 대한 표준 정책이되었습니다. 그래도 정말 멋지다!
— Jonathan Van Matre

@JonathanVanMatre Whoops, 죄송합니다. 그게 내가 의도 한 바야 다른 토론에 참여하는 동안 질문에 대답하려고하지 않아야한다고 생각합니다 .
— 모자와 사람

둘 중 낮은 쪽입니다. -30 % 및 -15 %
— Pureferret

14

PHP-487 × 0.9 × 0.85 = 372.555 (2000 × 99px)

<?php $y="imagecolorallocate";$l=[
'<?php $y="imagecolorallocate";$l=[',
'];$i=imagecreate(2e3,99);$y($i,99,99,99);$w=$y($i,$j=0,0,0);$z=function($_)use(&$j,$i,$w){imagestring($i,4,9,$j+=15,$_,$w);};$z($l[0]);foreach($l as$m)$z(chr(39).$m.chr(39).",");$z($l[1]);$argv[1]($i,"o");',
];$i=imagecreate(2e3,99);$y($i,99,99,99);$w=$y($i,$j=0,0,0);$z=function($_)use(&$j,$i,$w){imagestring($i,4,9,$j+=15,$_,$w);};$z($l[0]);foreach($l as$m)$z(chr(39).$m.chr(39).",");$z($l[1]);$argv[1]($i,"o");

경고가 적절할 경우 : PHP-479 × 0.9 × 0.85 = 366.435

<?php $y=imagecolorallocate;$l=[
'<?php $y=imagecolorallocate;$l=[',
'];$i=imagecreate(2e3,99);$y($i,99,99,99);$w=$y($i,$j=0,0,0);$z=function($_)use(&$j,$i,$w){imagestring($i,4,9,$j+=15,$_,$w);};$z($l[0]);foreach($l as$m)$z(chr(39).$m.chr(39).",");$z($l[1]);$argv[1]($i,o);',
];$i=imagecreate(2e3,99);$y($i,99,99,99);$w=$y($i,$j=0,0,0);$z=function($_)use(&$j,$i,$w){imagestring($i,4,9,$j+=15,$_,$w);};$z($l[0]);foreach($l as$m)$z(chr(39).$m.chr(39).",");$z($l[1]);$argv[1]($i,o);

첫 번째 명령 행 인수로 사용할 출력 함수를 제공하십시오.

php timwolla.php imagepng

경고가있는 솔루션 :


5
나는 이것이 최초의 실제 퀘인이라고 생각하고 스크립트가 자체 소스 코드를 읽거나 자체 스크린 샷을 얻는 것이 아닙니다.
— nitro2k01

두 가지 질문, 소수점에 다른 표기법을 사용할 수 있습니까? 약간 혼란 스럽습니다. 또한 왜 이미지가 너무 작습니까? 읽기가 어렵습니다 (물론 저는 전화를
— 받고 있습니다

2
@Pureferret는 확대 만하면됩니다. 실제로 픽셀 화되어 있어도 읽을 수 있습니다.
— Ruslan

1
@Pureferret 그냥 그들을 변경, 나는 영어에서 다른 것을 기억하지 않습니다…
— TimWolla

13

공백, 125



















이미지 파일을 pbm 형식으로 출력 합니다.

이 코드를 테스트하는 경우 "편집"을 클릭하고 <pre>태그 사이의 모든 내용을 복사하여 복사하십시오 .

산출:

P1 1 1 0

7
공간과 탭 사이의 미묘한 차이를보기 위해 화면을 가늘게 뜨고 손으로 복사 .... 프로그램 실행 .... 하드 드라이브 폭발
— Jonathan Van Matre

17
이 답변은 요구 사항 2를 충족하지 않습니다. 이미지를 읽을 수 없어 소스 코드를 재현 할 수 없습니다.
— user2357112는

2
@ user2357112 그러나 당신은 그것을 증명할 수 없습니다. 그것이 내가 여기서 활용하고있는 허점입니다.
— duci9y

21
예, 정보 이론을 사용하여 할 수 있습니다. 완전히 엄격한 근거는 600 자 주석의 범위를 벗어납니다. 그러나 그 핵심은 이미지가 작동하지 않는 코드 이미지와 동일하다는 것입니다.
— user2357112는 18:41에 Monica

3
프랑스를 용서하지만 BS! 규칙에 따르면 코드를 읽을 수 있어야합니다. 공백으로 코드를 작성한다고해서 부정 할 수는 없습니다. 선택한 경우 Sublime Text로 표시되는 프로그램입니다. i.imgur.com/A2ZaQwI.png 읽기 쉽습니다 . 프로그램 출력이 무엇이든간에. 게다가 프로그램 출력이 실제로 소스 코드인지 아니면 문자 그대로 빈 이미지인지 설명하지 않았습니다.
— nitro2k01

13

매스 매 티카, 37 31 문자

(#2[#1[#0[#1,#2]]]&)[Defer,Rasterize]

(Rasterize[#1[#0[#1]]]&)[Defer]

여기에 이미지 설명을 입력하십시오

mathematica.stackexchange.com의 답변에서 영감을 얻었습니다 .


설명하시오 ... #n은 무엇입니까? 어쩌면 우리는 알아낼 수 있습니다.
— Pureferret

적어도 프론트 엔드없이 작동합니다. ( Export["/tmp/out.png",%]이 명령을 실행 한 후 시도 )
— Ruslan

2
@Pureferret #n은 n순수 함수의 인수를 의미 합니다 (이 &시점 에서 생성됨 ). 전체 표현으로 확장 Rasterize[Defer[#0[Defer,Rasterize]]]경우, #0원래의 순수한 함수의 재귀 호출입니다. 어떤면에서 이것은 엄격한 quine은 아니지만 작동하기 위해 프런트 엔드가 필요하지 않으며 IMO는 훌륭한 솔루션입니다.
— Ruslan

명령과 명령의 대상으로 Defer []와 Rasterize []를 사용하는 것에 감탄합니다. 나는 재귀가 이런 식으로 제시된 것을 본 적이 없다.
— Michael Stern

10

애플 스크립트, 68 37

자, zsh에서 ImageMagick을 호출 할 수 있다면 이것도 유효합니다. 나는 여전히 내 자신의 만족을 위해 더 우아하고 순수한 정신으로 해킹하고 있지만 순수한 골프를 위해 여기 있습니다.

새로운 버전

do shell script "screencapture q.jpg"

구 버전

tell application "System Events" to keystroke "#" using command down

나는 이것이 여전히 이길 것이라고 생각하지만, 장황한 오래된 AppleScript는 이것에 대한 간결함을 모방합니다.

당신의 quine를 중지

do shell script "screencapture -c"

3
정의에 따르면 quine은 소스 코드를 유일한 출력 으로 생성하지만 이것이이 질문에 적용되는지 확실하지 않다고 생각합니다. nyx.net/~gthompso/quine.htm
— duci9y

예, 실제로 자체 윈도우의 코드 영역 만 선택하는 방법을 알아 내려고 노력하고 있지만 AppleScript 영역에 깃발을 심기 위해 이것을 던질 것이라고 생각했습니다.
— Jonathan Van Matre

나는 이것을 유효하다고 생각하고 이런 종류의 것을 기대하고있었습니다.
— Pureferret

엄격한 징조가 아닙니다. (프로그래밍 방식으로 자체 소스 코드를 생성하지는 않습니다.)
— nitro2k01

3
기술적으로, 이들 언어 중 어느 것도 이미지를 소스 코드로 사용하지 않기 때문에 Piet 답변을 제외하고 는 이들 중 어느 것도 엄격한 quine 이 될 수 없습니다. 그러나 나는 여전히 더 엄격한 내 버전을 만들기로 결심했습니다. :)
— Jonathan Van Matre

8

매스 매 티카, 83

SelectionMove[InputNotebook[],Previous,Cell];Rasterize@NotebookRead@SelectedCells[]

여기에 이미지 설명을 입력하십시오


1
엄격한 징조가 아닙니다. (프로그래밍 방식으로 자체 소스 코드를 생성하지는 않습니다.)
— nitro2k01

1
가져온 경우에도 프론트 엔드 (in math또는 MathKernel)가 없으면 작동하지 않습니다 <<JavaGraphics`.
— Ruslan

8

Sh, X 및 ImageMagick 18.9 :

 import -window root a.jpg

ImageMagick이있는 모든 쉘에서 작동합니다.

코드 접두사 만 인쇄하려면 clear &&26.1에 나옵니다.

clear && import -window root a.jpg

샘플 출력 :

여기에 이미지 설명을 입력하십시오


내 컴퓨터에서 테스트했는데 작동합니다.
— pastebin.com 슬래시 0mr8spkT

4
Linux 콘솔 에서 작동하지 않았습니다 . 요구 사항 에 X 를 추가 할 수 있습니다 .
— Ilmari Karonen

2
엄격한 징조가 아닙니다. (프로그래밍 방식으로 자체 소스 코드를 생성하지는 않습니다.)
— nitro2k01

1
@nitro 'Quine'이라는 용어를 잘못 사용했을 수도 있지만 내 게시물의 첫 번째 줄은 소스 코드의 이미지 출력 만 언급합니다. 나는 원래 의도를 분명히하고 진실 / 엄격한 퀴인을 위해 편집하고 있습니다.
— Pureferret

1
궁금한 점은 비트 코인과 리테 코인 지갑입니다. 3 년이 지난 지금, 심각한 이익이 있습니까? : D
— Albert Renshaw

5

HTML5 / 자바 스크립트 : 615

<canvas id='i' width=500 height=5000></canvas><script>function d(){var e=document.getElementById("i");var t=e.getContext("2d");t.font="20px Arial";var n=400;var r=25;var i=(e.width-n)/2;var s=60;str="<canvas id='i' width=5000 height=500></canvas>\n<script>"+d+"d();"+wrapText+"<\/script>";wrapText(t,str,i,s,n,r)}function wrapText(e,t,n,r,i,s){var o=t.split(" ");var u="";for(var a=0;a<o.length;a++){var f=u+o[a]+" ";var l=e.measureText(f);var c=l.width;if(c>i&&a>0){e.lineWidth=1;e.strokeStyle="blue";e.strokeText(u,n,r);u=o[a]+" ";r+=s}else{u=f}}e.lineWidth=1;e.strokeStyle="blue";e.strokeText(u,n,r)}d()</script>

데모 : http://jsfiddle.net/E2738/2/

이미지를 마우스 오른쪽 버튼으로 클릭하고 PNG로 저장할 수 있습니다


2
그것은 끝나지 <//script>
— 않습니다

1
바이올린 변경의 11 번 줄 끝 +wrapText+"<//script>";에서+wrapText+"<\/script>";
— Luke

@Charles 지적 해 주셔서 감사합니다. 결정된.
— Clyde Lobo

4

자바, 570-10 %-15 % = 427.5

= 415.5 (포함되지 않음 "파일 경로") 15 % - ( "파일 경로"포함), 554~10%
제거 안드레아스 덕분 BufferedImage에java.awt.image.BufferedImage

import java.awt.image.*;class Q{public static void main(String[]a)throws Exception{BufferedImage i=new BufferedImage(3500,12,1);String s="import java.awt.image.*;class Q{public static void main(String[]a)throws Exception{BufferedImage i=new BufferedImage(3500,12,1);String s=%s%s%s;char q=34;i.getGraphics().drawString(String.format(s,q,s,q,q,q,q,q),0,9);javax.imageio.ImageIO.write(i,%spng%s,new java.io.File(%sfilepath%s));}}";char q=34;i.getGraphics().drawString(String.format(s,q,s,q,q,q,q,q),0,9);javax.imageio.ImageIO.write(i,"png",new java.io.File("filepath"));}}

산출:여기에 이미지 설명을 입력하십시오

제대로 보려면 다음 링크를 참조하십시오 : http://i.stack.imgur.com/RRSDw.png

이것은 이미지로 출력되는 것을 제외하고는 일반 퀴인처럼 작동합니다. 현재 형식은입니다 png만 png프로그램 의 모든 인스턴스 를 원하는 형식 으로 바꾸면 형식을 쉽게 변경할 수 있습니다 .

여기에 몇 가지 답변과는 달리, 이것은 진정한 소란입니다. 프로그램 파일을 읽지 않습니다.


"java.awt.image.BufferedImage"를 "java.awt.image. *"로 교체하면 다른 24자를 제거 할 수 있습니다.
— Andreas

4

자바 스크립트 JQuery와 + 153 148

정규병

(function f(){
  c=$('<canvas/>')[0];
  a=c.getContext('2d');
  l=('('+f+')()').split('\n');
  for(i=0;i<l.length;i++)
    a.fillText(l[i],5,12*(i+1));
  $('body').append('<img src="'
      +c.toDataURL("image/png")+'"/>')
})()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

골프

function f(){c=$('<canvas>')[0];c.width=750;a=c.getContext('2d');a.fillText(f+'f()',5,9);$('body').append('<img src="'+c.toDataURL("png")+'"/>')}f()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
엄격한 징조가 아닙니다. (프로그래밍 방식으로 자체 소스 코드를 생성하지는 않습니다.)
— nitro2k01

$? jQuery도 사용하고 있습니까?
— Clyde Lobo

@ClydeLobo Yup, 그는 보인다. JQuery없이 Javascript를 수행 할 수 있습니까? 누가 생각 했을까!
— Pierre Arlaud

@ClydeLobo 그렇습니다. 그러나 라이브러리는 허용되어야합니다. stdio.hxD를 사용하는 C 프로그램과 다르지 않습니다 . jQuery없이 프로그램을 작성하는 것은 쉽다. 그냥 교체 $('<canvas/>')[0]로 document.createElement('canvas')와 $('body').append함께 document.write. jQuery가 바이트를 절약했습니다.
— aebabis

3

zsh, 57 × 0.9 = 51.3

출력 파일 이름을 인수로 전달하십시오.

convert -annotate +0+10 "$(<$0)" -size 320x14 xc:white $1

생산 :

출력 예


1
zsh 또는 imagemagick입니까?
— Kaya

@Kaya : 글쎄요. 언어는 zsh (또는 bash이지만 Posix는 아님)이며 라이브러리 / 도구는 ImageMagick (또는 원하는 경우 GraphicsMagick)입니다. GD가있는 PHP 또는 RMagick이있는 Ruby와 같습니다.
— Ry-

1
@Pureferret : 추가되었습니다.
— Ry-

엄격한 징조가 아닙니다. (프로그래밍 방식으로 자체 소스 코드를 생성하지는 않습니다.)
— nitro2k01

3

C99은, (SDL 및 SDL_ttf 사용) 414 354 346 - 15 % = 294.1

#include<SDL_ttf.h>
#define Q(P)char*q=#P;P
Q(
i=5;main(){for(SDL_Surface*s=SDL_SetVideoMode(2048,80,SDL_Init(SDL_INIT_VIDEO),TTF_Init());i--;SDL_SaveBMP(s,"q.bmp"))SDL_BlitSurface(TTF_RenderText_Blended(TTF_OpenFont("q.ttf",9),(char*[]){"#include<SDL_ttf.h>","#define Q(P)char*q=#P;P","Q(",q,")"}[i],(SDL_Color){~0}),0,s,&(SDL_Rect){0,16*i});}
)

더 많은 줄 바꿈이 없으면 추악하지만 불행히도 결석해야합니다. 텍스트 렌더링 기능은 제어 문자를 전혀 사용하지 않으므로 코드에서 줄 바꿈을 출력에서 ​​수동으로 렌더링해야합니다.

다음은 동일한 코드이지만 가독성을 위해 줄 바꿈이 추가되었습니다.

#include<SDL_ttf.h>
#define Q(P)char*q=#P;P
Q(
i=5;main(){for(SDL_Surface*s=SDL_SetVideoMode(2048,80,
SDL_Init(SDL_INIT_VIDEO),TTF_Init());i--;SDL_SaveBMP(s,"q.bmp"))
SDL_BlitSurface(TTF_RenderText_Blended(TTF_OpenFont("q.ttf",9),
(char*[]){"#include<SDL_ttf.h>","#define Q(P)char*q=#P;P","Q(",q,")"}[i],
(SDL_Color){~0}),0,s,&(SDL_Rect){0,16*i});}
)

슬프게도 이것은 그래픽 출력에 줄 바꿈을 추가하지 않습니다.

산출

출력은 여전히 ​​읽을 수 있지만 9 포인트 출력과 빨간색 글꼴 색상은 약간 흠집입니다. 당신은 대체하여 캐릭터의 비용을 개선 할 수 있습니다 9로 12. (결과 이미지의 크기는 2048x80으로 하드 코딩됩니다. 다양한 글꼴의 차이점을 수용하기 위해 오른쪽 여백과 선행 부분에 상당한 양의 초과 부분이 추가되어 크기 12 글꼴이 여전히 편안하게 맞습니다. 그러나 더 늘리려면 치수도 변경해야합니다.)

프로그램을 빌드하는 명령은 다음과 같습니다.

gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`

프로그램은 q.ttf실행될 때 현재 디렉토리에 호출 된 글꼴 파일이 있다고 가정 합니다. 다음 명령을 실행하여 미리 처리했습니다 (대부분의 최신 Linux에서 작동해야 함).

ln -s `fc-match --format='%{file}' sans` ./q.ttf

(자신이 선호하는 트루 타입 글꼴을 가져 오십시오.)

프로그램을 실행 한 후 이미지 출력은 현재 디렉토리의 파일에 작성됩니다 q.bmp. 불행히도 Windows 비트 맵 파일은이 프로그램이 제공하는 유일한 출력 형식입니다. 더 많은 출력 형식을 추가하려면 더 많은 라이브러리에서 링크해야합니다.

이 프로그램은 단순하지 않은 리터럴 값을 도입하기 위해 C99의 구문을 활용하므로 정의해야 할 변수의 수를 크게 줄입니다. 이것은 더 많은 C 골퍼들이 이용해야 할 것입니다.


2

C # -498-15 % = 423.3

이것은 아마도 더 골프를 칠 수 있습니다. 전에 C #에서 quines 또는 이런 종류의 그래픽을 한 적이 없습니다.

using System;using System.Drawing;class Q{static void Main(){var b = new Bitmap(3050, 20);var g=Graphics.FromImage(b);string f="using System;using System.Drawing;class Q{{static void Main(){{var b = new Bitmap(3050, 20);var g=Graphics.FromImage(b);string f={0}{1}{0},e={3}{0}{2}{0};g.DrawString(String.Format(f,(char)34,f,e,'@'),SystemFonts.MenuFont,Brushes.Black,0,0);b.Save(e);}}}}",e=@"D:\p.png";g.DrawString(String.Format(f,(char)34,f,e,'@'),SystemFonts.MenuFont,Brushes.Black,0,0);b.Save(e);}}

산출: 여기에 이미지 설명을 입력하십시오

다른 형식 지원을 추가하는 것은 쉽습니다. 그래도 그만한 가치가 있는지 확실하지 않습니다.


2

루비, 104 자

require "RMagick"
include Magick
Draw.new.annotate(i=Image.new(999,99),0,0,0,9,File.read($0))
i.display

요청 당 출력 예 : i.imgur.com/jMC594C.png


예제 출력이 있습니까?
— Pureferret

@Pureferret 편집 참조
— Shelvacu

1
엄격한 징조가 아닙니다. (프로그래밍 방식으로 자체 소스 코드를 생성하지는 않습니다.)
— nitro2k01

1

파이썬 : 255 238 -10 % -15 % = 195.075 182.07

import sys,PIL.ImageDraw as D;i=D.Image.new('L',(2000,20));r="import sys,PIL.ImageDraw as D;i=D.Image.new('L',(2000,20));r=%r;D.Draw(i).text((0,0),r%%r,fill=255);i.save(sys.argv[1])";D.Draw(i).text((0,0),r%r,fill=255);i.save(sys.argv[1])

용법:

python imgquine.py quine.jpg

이것은 명령 행에 지정된 파일로 출력을 가져 오는 진정한 quine입니다. 파일 형식은 파일 이름 확장자 (예 : quine.jpgJPEG 및 quine.pngPNG) 를 변경하여 간단히 설정됩니다 .

출력 예 (2000x20 이미지) :

퀸 출력


2e3대신을 사용하여 일부 문자를 저장할 수 2000있습니다.
— Kaya

@ 카야 : 아뇨, 불행히도 : 2e3는 float이며 s를 Image.new요구 int합니다.
— nneonneo

귀찮게, 나는 그것이 강제 될 것이라고 생각했다.
— Kaya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.