일부 JSON 인쇄


74

이 도전은 간단하지만, 다가올 수있는 방법이 많이 있기를 바랍니다.

불필요한 공백을 계산하지 않고 15 자 이상의 유효한 JSON 객체 를 인쇄 / 반환해야합니다 . 입력하지 않아도 프로그램이 작동합니다.

명확성을 위해 JSON 객체는 중괄호로 시작하고 끝나며 {}쉼표로 구분 된 0 개 이상의 키 : 값 쌍을 포함합니다. 전체 JSON 사양은 json.org 에서 찾을 수 있으며 코드 출력은 이 유효성 검사기 를 통과해야합니다 .

따라서 다음 중 하나라도 유효 하지 않습니다.

4                               //Too short, not an object
"really, really long string"    //A string, not an object
["an","array","of","values"]    //An array is not a JSON object
{"this":4      }                //You can't count unessential whitespace
{"1":1,"2":3}                   //Too short
{"a really long string"}        //Not valid JSON, it needs a value
{'single-quoted':3}             //JSON requires double-quotes for strings

그러나 다음 유효합니다.

{"1":1,"2":2,"3":3,"4":4}       //Long enough
{"whitespace      ":4}          //This whitespace isn't unessential

이 과제에는 프로그래밍이 아닌 언어가 허용됩니다. 함수에서 문자열을 반환하거나 인쇄 할 수 있습니다. 이것은 이므로 가능한 한 적은 코드로 응답하십시오!


1
나는 이것에 대한 다양한 답변을 좋아합니다
Robert Fraser

흠, 당신의 JSON 정의는 제한적입니다. 유효한 JSON을 출력하지만 중괄호를 출력하지 않는 코드는 어떻습니까?
Konijn

4
@Konijn 내가 말했듯이 유효한 JSON 객체 여야 합니다 . 객체는 중괄호로 정의됩니다.
Nathan Merrill

객체에 대한 스트레스와 함께;)
Konijn

1
@Masterzagh 불행히도 네이티브 JS 객체는 포함되지 않습니다. "함수에서 문자열을 반환하거나 인쇄 할 수 있습니다"
Nathan Merrill

답변:


72

파이썬 2, 14 바이트

print{`str`:1}

출력 :

{"<type 'str'>": 1}

백틱은 Python 2에서 문자열 표현을 가져옵니다. 일반적으로이 출력은 작은 따옴표를 생성하는데, 파이썬은 문자열을 구분하는 것으로 인식하지만 JSON은 그렇지 않습니다. 그러나 Sp3000은 형식을 문자열화할 때 형식 설명에 이미 작은 따옴표가 포함되어있어 외부 따옴표가 큰 따옴표가되도록합니다.


20
@ Sp3000 끔찍한 방식으로 아름답습니다.
xnor

6
그리고 JS가 타입 캐스팅을 진정으로 남용 할 수있는 유일한 언어라고 생각했습니다.
Downgoat

같은 접근 방식은 20 바이트 py3 작동print({repr(str):1})
dahrens

1
Py3에 대한 @dahrens : print({"'"*9:9})16 ( print{"'"*9:9}Py2에서 또 다른 14 인)
조나단 앨런

37

jq, 6 자

(3 자 코드 + 3 자 명령 행 옵션)

env

CW는 이것이 당신이 허용하려는 종류의 대답이 아니라고 확신하기 때문에.

샘플 실행 :

bash-4.3$ jq -n 'env'
{
  "GIT_PS1_SHOWDIRTYSTATE": "1",
  "TERM": "xterm",
  "SHELL": "/bin/bash",
  "GIT_PS1_SHOWUNTRACKEDFILES": "1",
  "XTERM_LOCALE": "en_US.UTF-8",
  "XTERM_VERSION": "XTerm(322)",
  "GIT_PS1_SHOWSTASHSTATE": "1",
  "GIT_PS1_SHOWUPSTREAM": "auto",
  "_": "/usr/bin/jq"
}

(출력이 분명히 단축되었습니다.)


6
이것은 확실히 유효한 제출입니다 (CW 필요 없음)
Nathan Merrill


1
이것은 솔루션을 빌트인으로 오프로드하는 것으로 간주되며 거의 허점입니다. 키워드 : almost
John Dvorak

1
@JanDvorak 내장 된 사용을 보는 것이 흥미있는 경우가 있기 때문에 항상 허점이 아닙니다. 이것은 그들 중 하나입니다.
Fengyang Wang

1
나는 당신의 명백한 소원에 반대하지 않을 것이지만, 이것이 위키를 풀어야한다는 것에 동의합니다. 또한 현재의 합의 는 통역사 플래그가 플래그의 유무에 따른 호출의 차이를 계산해야하므로 -n공간이 3 바이트를 차지한다는 것입니다.
Dennis

31

젤리 , 11 바이트

“Ɠɼ'ẸẠḌȷżÑ»

온라인으로 사용해보십시오!

산출

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
연속으로 6 개의 자음이 두 번 ( pwllgwbwllll) 있습니다. 이것도 무엇입니까?
Steven H.

2
@ETHproductions 물론이지만 한도를 준수하려면 9 자 이상이 필요합니다. 6 개 이상의 문자가 포함 된 모든 단어는 긴 사전에 있으므로 어떤 단어를 선택해도 문제가되지 않습니다.
Dennis

2
@ 데니스. 또한 릭롤이 아니라 노래 입니다.
TRiG

8
젤리는이 내장되어 잠깐을 위해 ?
버퍼 오버 읽기

19

메모장, 7 개의 키 입력

메모장 프로그램이있는 Windows 컴퓨터 인 경우 다음을 입력하십시오.

{"F5":0}

내 Windows 7 컴퓨터에서는 적어도 다음과 같은 것을 제공합니다.

{"3:42 PM 10/25/2016":0}

1
@cat 프로그래밍 언어가 아닌 프로그램이지만 Vim도 마찬가지라고 생각합니다.
ETHproductions

2
음, Vim PPCG 규칙 (Touring completeness이 아님)을 충족시키는 것뿐만 아니라 Turing completeness (적어도 확실합니다)에서 프로그래밍 "언어"입니다
cat

1
@cat 알겠습니다. 메모장이 Turing-complete인지 확실하지 않습니다. 나는 그것을 의심하지만 아마도; 결국 ///는 그렇게 입증되었으며 메모장은 단일 기능을 잘 재현 할 수 있습니다.
ETHproductions

1
Vim은 메모장과 다릅니다. 스크립트를 저장하고 편집기 내에서 실행할 수 있습니다. 메모장에는 이러한 기능이 없습니다. 따라서 TC가 될 수있는 메모장의 기능 (기본 검색 및 바꾸기, 복사 및 붙여 넣기)은 매번 대화 상자를 탐색해야하므로 더 많은 키 입력이 필요합니다.
Mego

1
@cat 예, 죄송합니다. 토론 이후에 허용되었습니다.
ETHproductions

15

자바 (JDK 10) , 20 바이트

v->"{\"\":"+1/.3+"}"

온라인으로 사용해보십시오!

산출

{"":3.3333333333333335}

3
자바는 내가 과부하 기대 마지막 언어 +String.concat^ (:>
고양이

3
@cat 네, 실제로 존재하는 유일한 오버로드입니다. 문제는 과부하가 걸리지 않는다는 것입니다 String.concat! 바이트 코드를 확인하면 Java가 다음과 같이 컴파일됩니다 ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). 또한 걱정하지 마십시오.이 페이지에서 여전히 가장 긴 답변입니다 .Brainfuck 하나와 Java 7 하나. 그래서 자바는 그 순위를 유지)
올리비에 그레 구 아르

14

PHP, 14 13 바이트

{"":<?=M_E?>}

유용한 척 할 수 있는 멋진 수학 객체 인쇄 합니다 .

{"":2.718281828459}

PHP가 태그 외부에있는 것을 따옴표로 저장하기 위해 구두로 인쇄한다는 사실을 사용합니다 M_E.

편집 : Lynn 덕분에 1 바이트를 절약했습니다. 안타깝게도 더 이상 '좋은'수학 물체가 아닙니다.


""유효한 JSON 키입니다.
Lynn

14

자바 스크립트, 17 15 바이트

@Neil에게 감사합니다. 입력하지 않고 전화하십시오.

_=>`{"${_}":0}`

출력 {"undefined":0}

이전 버전, 16 바이트

이 버전의 -1에 대해 @ kamoroso94에게 감사합니다

_=>`{"":${9e9}}`

출력 {"":9000000000}


이것을 4 바이트를 제거하기 위해 화살표 기능으로 바꿀 수 있습니다.
DanTheMan

1
빈 키를 가질 수 있습니까? (예 : 제거 a)
Conor O'Brien

_=>`{"a":${_}}`결과 {"a":undefined}는 정확히 15 자입니다. 이 함수를 호출 할 때 입력을 사용하지 않습니다.
Bassdrop Cumberwubwubwub

1
@BassdropCumberwubwubwub 우연히도 코드는 15 자입니다. undefinedJSON에서 유효한 값 인지 확실하지 않지만 속성 이름을 만들고 0 값을 사용하여 쉽게 수정됩니다 _=>`{"${_}":0}`.
Neil

3
를 제거하여 a키를 빈 문자열로 만듭니다 (JSON의 유효한 키). 1 바이트가 적습니다.
kamoroso94

12

Brainfuck, 50 바이트

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

출력 {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. 8 비트 셀이 있고 왼쪽에 제한이없는 인터프리터를 가정합니다. 온라인으로 사용해보십시오!




9

Pyth, 7 바이트

.d],`G0

단일 키 "'abcdefghijklmnopqrstuvwxyz'"와 값을 포함하는 사전을 만듭니다 0.

.d         Dictionary from:
  ]         The single-element list containing:
   ,         The two-element list containing:
    `G        The representation of the alphabet (the key)
      0       and 0 (the value)
          Implicitly print the stringification of this.

9

배치, 16 바이트

인쇄 {"Windows_NT":0}합니다.

@echo {"%OS%":0}

(예제) 출력을 추가 할 수 있습니까?
grooveplex

8

///, 15 14 자

/a/{":1234}/aa

(적어도 출력은 하나 의 코드에 비해 2 자 이상.)

온라인으로 사용해보십시오!

덕분에 :

  • 키의 일부로 오브젝트 분리 문자를 재사용하기위한 ETH 프로덕션 (1 자)

샘플 실행 :

bash-4.3$ slashes.pl <<< '/a/{":1234}/aa'
{":1234}{":1234}

더 읽기 쉽게 만들려면 :

bash-4.3$ slashes.pl <<< '/a/{":1234}/aa' | jq ''
{
  ":1234}{": 1234
}

1
바이트를 절약하는 영리한 방법입니다 :-)
ETHproductions

2
/a/{":1234}/aa(출력 {":1234}{":1234})을 사용 하여 다른 것을 저장할 수 있습니다.
ETHproductions

놀라운 @ETHproductions. 감사.
manatwork

7

R, 19 바이트

cat('{"',lh,'":1}')

따옴표를 이스케이프해야하기 때문에 조금 더 길어집니다 \". 또한 lh내장 데이터 세트 중 하나이며 R키 길이를 채우는 데 필요한 9 문자가 포함 된 가장 짧은 이름을 가진 객체입니다. (편집 : pi표준 옵션을 사용하여 트릭을 수행하는 것으로 나타 났으며 @JDL이 이길 수 있습니다.

lhR 문서에 대한 설명 은 다음과 같습니다.

인간 암컷 48 개 샘플에서 10 분 간격으로 혈액 샘플에 황체 형성 호르몬을 제공하는 규칙적인 시계열.

키의 예상치 못한 이름이지만 작동하고 출력을 생성합니다.

{" 2.4 2.4 2.4 2.2 2.1 1.5 2.3 2.3 2.5 2 1.9 1.7 2.2 1.8 3.2 3.2 2.7 2.2 2.2 1.9 1.9 1.8 2.7 3 2.3 2 2 2.9 2.9 2.7 2.7 2.3 2.6 2.4 1.8 1.7 1.5 1.4 2.1 3.3 3.5 3.5 3.1 2.6 2.1 3.4 3 2.9 ":1}

답은 "무작위"문자로 키를 채우는 것과 비교하여 출력을 최소 15 자 (24 바이트) 이상으로 만들 수 있습니다.

cat("{\"HeloWorld\":1}")

1
R 식에서 작은 따옴표를 사용하여 이스케이프 백 슬래시를 피할 수 있습니다. cat('{"',lh,'":1}')위에서 한 것처럼 ( pi대신 사용 했습니다 lh). 두 글자로 된 변수를 검색 할 때 el, 내가 전혀 몰랐던 함수 를 발견했습니다 . 앞으로 유용 할 수 있습니다 ...
JDL

7

PowerShell 22 20 14 바이트

'{"":'+1tb+'}'

산출

{"":1099511627776}

바이트 단위로 1TB에 대해 정의 된 상수를 사용하여 문자 제한에 도달하고 정적 정수 값을 사용하여 유효한 json을 작성하십시오. 중복성을 제거하여 문자를 5 씩 줄인 TimmyD에게 감사합니다.


이전 게시물 40 바이트

"{$((1..9|%{'"{0}":{0}'-f$_})-join",")}"

산출

{"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}

정수 배열을 가져와 각각에 대한 키-값 쌍을 만듭니다. 쉼표로 결합하고 중괄호 세트로 감싸십시오.




5

V , 9 바이트

i{"¹*":0}

온라인으로 사용해보십시오!

매우 간단합니다. 삽입 모드를 시작하고 다음 텍스트를 입력합니다.

{"*********":0}

이것이 짧은 이유 ¹는 다음 문자를 9 번 반복 하기 때문 입니다.


나는 0 바이트를 기대했다 : P
Maltysen

1
@maltysen 나는 그것을 게시했다. 대신 이중의 작은 따옴표를 사용했기 때문에 나는 :( ... 그것을 삭제
DJMcMayhem가

5

자바 스크립트 (ES6) + jQuery, 15 바이트

jQuery 때문입니다.

_=>`{"${$}":0}`

{"function (a,b){return new n.fn.init(a,b)}":0}호출되면 출력합니다 . 여기에서보십시오 :


1
과제는 무언가를 출력하는 것입니다. alert()당신 없이 아무것도 출력하지 않습니다
nl-x

1
@ nl-x 문자열을 반환하는 함수가 허용됨을 명확히하기 위해 OP가 편집되었습니다.
ETHproductions

5

Dyalog APL , 9 바이트

JSONDMX

온라인으로 사용해보십시오!

내 PC의 깨끗한 작업 공간에서 결과는

{"Category":"","DM":[],"EM":"","EN":0,"ENX":0,"HelpURL":"","InternalLocation":["",0],"Message":"","OSError":[0,0,""],"Vendor":""}

⎕JSON JSON으로 변환

⎕DMX 제 (보편적으로 이용 가능) D iagnostic M의 essage E는 x를 개체 경향


4

brainfuck, 83 바이트

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

출력 {"333333333":3}

더 짧은 해결책이있을 수 있지만 아직 찾지 못했습니다.

설명:

--[-->+++++<]>. {
+[---->+<]>+++. "
>-[>+<-----]>.  3
........
<<.             "
[----->+<]>.    :
>.              3
>--[-->+++<]>.  }

온라인으로 사용해보십시오


4

PHP, 19 바이트

<?='{"'.(9**9).'":1}';

산출: {"387420489":1}

https://eval.in/665889

팁을위한 manatwork 에 감사합니다 !


1
출력은 16 자이며 요구 사항은 15 자입니다.“H”를 제거하지 않으시겠습니까?
manatwork

BTW, PHP 5.6부터 **연산자가 있습니다 : pow(9,9)(9**9).
manatwork

1
15 자 (실제로 PHP는 아님) :{"<?=9**9?>":1}
Loovjo

4

자바 7, 36 바이트

String c(){return"{\"a\":"+1e6+"}";}

자바 8, 21 바이트

()->"{\"a\":"+1e6+"}"

언 골프 및 테스트 코드 :

여기에서 시도하십시오.

class M{
  static String c(){
    return "{\"a\":" + 1e6 + "}";
  }

  public static void main(String[] a){
    System.out.println(c());
  }
}

출력 (길이 15) :

{"a":1000000.0}

두 번째 해결책은 오류를 제공합니다
Numberknot

1
"해시에 따라 길이는 15와 16 사이입니다". 해시는 기술적으로 길이가 작을 수 있습니다 1( 참조System.identityHashCode(Object) ).
Olivier Grégoire

1
또한 ""키와 1e7값 으로 1 바이트를 골프화 할 수 있습니다 . ""유효성 검사기에서 시도 할 때 유효한 키입니다.
Olivier Grégoire

2
@ OlivierGrégoire 좋아요, this코드를 제거하겠습니다 . 에 관해서 ""으로 1e7, 불행하게도 작동하지 않습니다. 1e6출력 1000000.0하지만 대신 1e7출력 1.0E7합니다.
Kevin Cruijssen

1
오, 내 실수, 나는 확인하지 않았다.
Olivier Grégoire

4

R, 19 바이트

이것은 영국 영어 로케일에서 작동합니다. 다른 경우 +2 바이트가 필요할 수 있습니다. (편집 : 아마도 주석이 보이지 않을 것입니다.)

cat('{"',pi,'":1}')

나는 영리한 무언가를 원하고 있었을 것입니다 (아마도 같은 기존 함수에서 코드 줄을 뽑는 것 q). 아무것도 찾을 수 없었습니다. 결과:

{" 3.141593 ":1}

작은 따옴표를 사용하여 문자열을 인용하는 경우 R에서 큰 따옴표를 이스케이프 처리하지 않아도됩니다 (반대의 경우도 마찬가지). 이 동작은 로케일에 따라 다릅니다. 그래도 미국 영어 로케일에서도 작동 할 것으로 기대합니다.

또한 기본 digits옵션은 6 이상 (출고시 기본값)이고 scipen최소 -digits(출고시 기본값은 0)이어야합니다.


1
죄송합니다 R의 문법이 로케일에 따라 변합니까?
고양이

예, 이스케이프해야하는 문자 options(quote)는 사용자가 지정할 수 있는 문자에 따라 다르지만 기본값은 로캘에 따라 다릅니다.
JDL

@cat 오해라고 생각합니다. 의 존재 options('quote') 문서화 되지 않았으므로 변경해도 눈에 띄는 영향이 없으며 RI에서 많은 양의 스 나니 간을 만났지만 런타임 옵션이 구문 분석 된 방식을 바꿀 것이라고 의심합니다. 물론 결과는 변경 될 수 있지만이 답변의 코드에서는 변경되지 않습니다.
Konrad Rudolph

@ Konrad, 당신이 옳을 수도 있습니다. 나는에만 영향을 미친다 "useFancyQuotes"생각하고 있었는데 생각 quote, squote
JDL


3

요소 , 18 바이트

\{\"a\"\:`9 9^`\}`

온라인으로 사용해보십시오! 출력{"a":387420489}

이것은 순진한 솔루션보다 3 바이트 짧습니다. 출력의 전반부는 하드 코딩되어 있고 (다른 접근 방식을 구현하기에는 너무 많은 이스케이프 문자가 있습니다) 값은 9^9숫자를 충분히 길게 만드는 것으로 계산됩니다 .


3

펄 5, 16 15 바이트

사용 프로그램이 시작된 순간의 유닉스 타임 스탬프 한 요소 객체의 내용으로합니다. 1973 년 3 월 3 일 10:46:39 이후에 실행하면 유효한 출력을 제공합니다 . 그러나 우리는 합법적으로 보이는 시간으로 되돌아 갈 수 없기 때문에.

say"{\"$^T\":1}"

FORMAT_TOP_HANDLE 변수$^ 를 사용하며 기본값은 STDOUT_TOP입니다.

say"{\"$^\":1}";

-E추가 비용없이 플래그로 실행하십시오 .

perl -E 'say"{\"$^\":1}";'

출력 길이는 16 바이트입니다.

{"STDOUT_TOP":1}

RIP 시간 의존적 답변 :(
CalculatorFeline

트윗 담아 가기
simbabque


3

Windows 배치, 10 바이트

{"%OS%":5}

환경 변수 OS에 문자열이 포함되어 있습니다 Windows_NT(2000 년 이후 모든 Windows 운영 체제 에서 스택 오버플로에 대한 질문에 따라 ).


@ETHproductions 죄송합니다
penalosa

이것이 실제로 무엇을 출력하고 있습니까? NeilBatch 답변 은 확실하지만 암시 적 배치 출력에 대해서는 기억할 수 없습니다.
manatwork

@manatwork 예. echo가 켜져 있기 때문에 현재 명령이 반영되어 프로세스에서 OS 변수를 평가합니다.
penalosa

오. 실제로 그것은 {"%OS%":5}명령이 될 때 실행하려고 시도 하고 기본 추적 기능의 이점을 얻습니까? 까다 롭습니다.
manatwork

@manatwork 그렇습니다.
penalosa

3

HQ9 +, 15 바이트

{"Quineland":0}

자체 출력. 나는 8 바이트 대답이 가능할 것이라고 생각했다.

{":11QQ}

이 결과 {":11QQ}{":11QQ}거의 유효한 JSON이지만 11QQ유효한 값이 아닙니다.

HQ9 +는 PPCG 표준에 의해 유효한 프로그래밍 언어 는 아니지만 OP는 비 프로그래밍 언어를 허용했습니다.


1
이것은 절대적으로 유효하지 않습니다. 모든 제출물은 유효한 프로그래밍 언어로 작성해야합니다.
Mego

이것은 대부분 콜 모의 복잡성입니다 (주로, 다른 결과를 출력하면 여전히 계산되기 때문에). 이것이 유효 할 것으로 생각합니다
Destructible Lemon

@DestructibleWatermelon 프로그래밍이 아닌 언어를 사용하는 것이 표준 허점 입니다.
Mego

@Mego OP는 현재 비 프로그래밍 언어를 명시 적으로 허용했습니다.
ETHproductions
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.