JSONを印刷する


74

この挑戦は簡単ですが、うまくいけば、あなたがそれに近づくことができる多くの道があります:

必須ではない空白をカウントせずに、少なくとも15文字の有効なJSON オブジェクトを印刷/返す必要があります。 プログラムは何も入力しなくても動作するはずです。

わかりやすくするために、JSONオブジェクトは中括弧{}で始まり、中括弧で終了し、コンマで区切られた0個以上のkey:valueペアを含みます。完全な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
これに関するさまざまな答えが好きです
ロバートフレイザー

うーん、JSONの定義は限られています。有効なJSONを出力するが、中括弧を出力しないコードはどうですか?
コニン

4
@Konijnは私が言ったように、有効なJSON オブジェクトでなければなりません。オブジェクトは中括弧で定義されます。
ネイサンメリル

オブジェクトにストレスがかかった;)
コニン

1
@Masterzagh残念ながら、ネイティブJSオブジェクトはカウントされません。「関数から文字列を返すか、印刷することができます」
ネイサンメリル

回答:


72

Python 2、14バイト

print{`str`:1}

出力:

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

バックティックはPython 2の文字列表現を取得します。通常、内部のこの出力は一重引用符を作成します。Pythonは文字列の区切りとして認識しますが、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

これはあなたが許可するつもりの答えではないことを確信しているからです。

サンプル実行:

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は不要です)
ネイサンメリル


1
これは、ソリューションを組み込みのオフロードとしてカウントしますが、これはほとんど禁止されている抜け穴です。キーワード:ほとんど
ジョンドヴォルザーク

1
@JanDvorakビルトインが使用されているのを見るのが面白い場合があるため、常に抜け穴ではありません。これはそれらの1つです。
豊陽王

1
あなたの明確な希望に反してそれをするつもりはありませんが、これはウィキを外すべきだということに同意します。また、現在のコンセンサスでは、インタープリターフラグは、フラグを使用した場合と使用しない場合の呼び出しの違いをカウントする-n必要があるため、3バイトの余分なスペースを占めます。
デニス

31

ゼリー、11 バイト

“Ɠɼ'ẸẠḌȷżÑ»

オンラインでお試しください!

出力

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
6つの子音が2回連続して(pwllgwおよびbwllll)あります。これは何ですか?
スティーブンH.

2
@ETHproductions確かに、しかし私は制限を遵守するために少なくとも9文字が必要です。6文字以上の単語はすべて長い辞書にあるため、どれを選んでも問題ありません。
デニス


8
待って、ジェリーにはこれが組み込まれてますか?
バッファーオーバーリード

19

メモ帳、7回のキーストローク

メモ帳プログラムがインストールされたWindowsコンピューターがある場合は、次のように入力します。

{"F5":0}

私のWindows 7コンピューターでは、少なくとも次のようになります。

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

1
@catこれはプログラムであり、プログラミング言語ではありませんが、Vimも同じだと思います。
ETHproductions

2
まあ、Vimはある(少なくとも、私はかなり確信している)、それはPPCGルール(完全性チューリングない)を満たしていることにもチューリング完全の両方で、プログラミング「言語」

1
@catなるほど。Notepadがチューリング完全かどうかはわかりません。私はそれを疑いますが、おそらく。結局、///はそのように証明されており、メモ帳はその単一の機能をかなりうまく再現できます。
ETHproductions

1
Vimはメモ帳とは異なります-スクリプトを保存して、エディター内で実行できます。メモ帳にはそのような機能はありません。したがって、メモ帳の機能(基本的な検索と置換、コピー、貼り付け)をTCにするには、毎回ダイアログを移動する必要があります。つまり、より多くのキーストロークが必要になります。
メゴ

1
@catええ、申し訳ありませんが、私たちの議論以来許可されていました。
ETHproductions

15

Java(JDK 10)、20バイト

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

オンラインでお試しください!

出力

{"":3.3333333333333335}

3
Javaは、>:^(+String.concat
cat

3
@catはい、実際に存在する唯一のオーバーロードです。事はそれがオーバーロードしないことString.concatです!バイトコードをチェックすると、Javaは次のようにコンパイルされます()->new StringBuilder("{\"\":").append(1/.3).append("}").toString()。また、心配しないでください。BrainfuckとJava 7を除いて、これはこのページで最も長い回答です。Javaはそのランクを保持します;)
オリヴィエグレゴワール

14

PHP、14 13バイト

{"":<?=M_E?>}

プリント素敵 mathsyオブジェクト1は、ほぼふりができ便利です

{"":2.718281828459}

phpがタグの外側にあるものを逐語的に出力していくつかの引用符を保存するという事実を利用して、M_E私が見つけることができる最短の十分に長い定数でした。

編集:リンのおかげで1バイトを保存しました。悲しいことに、それはもはや「素敵な」数学的なオブジェクトではありません。


""有効なJSONキーです。
リン

14

JavaScript、17 15バイト

@Neilに感謝します。入力なしで呼び出します。

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

出力 {"undefined":0}

古いバージョン、16バイト

このバージョンで-1の@ kamoroso94に感謝します

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

出力 {"":9000000000}


これを矢印関数に変換して、4バイトを削除できます。
DanTheMan

1
空のキーを持っていますか?(例削除a
コナーオブライエン

_=>`{"a":${_}}`結果は{"a":undefined}、正確に15文字です。この関数を呼び出すときに入力を使用しないことに注意してください
Bassdrop Cumberwubwubwub

1
@BassdropCumberwubwubwub偶然にも、コードは15文字です。これがundefinedJSONで有効な値かどうかはわかりませんが、プロパティ名にしてゼロ値を使用することで簡単に修正できます_=>`{"${_}":0}`
ニール

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

(少なくとも、出力はコードよりも1 2文字長くなります。)

オンラインでお試しください!

おかげで:

  • キーの一部としてオブジェクト区切り文字を再利用するためのETHproduction(-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(outputs {":1234}{":1234}
-ETHproductions

すごい、@ ETHproductions。ありがとう。
マナトワーク

7

R、19バイト

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

引用符をエスケープする必要があるため、少し長くなります\"。さらに、lhは組み込みのデータセットの1つであり、R(私の知る限り)キーの長さを埋めるために必要な9文字を含む最も短い名前を持つオブジェクトです。(編集:pi標準オプションでも同様にトリックが行われ、余分なバックスラッシュではなく一重引用符を使用してエスケープするのに十分賢い@JDLにbeatられました)

説明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)。2文字の変数の検索で、el私は決して存在することを知らなかった関数に出会いました。将来役に立つかもしれません...
JDL

7

PowerShell 22 20 14バイト

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

出力

{"":1099511627776}

有効なjsonを作成するために、1TBに定義されたバイト単位の定数を使用して文字制限に到達し、静的整数の値を使用します。いくつかの冗長性を削除してキャラクターを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バイト1を期待していました:P
Maltysen

1
@maltysen投稿しました。二重ではなく一重引用符を使用していたため削除しました... :(
DJMcMayhem

5

JavaScript(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」を削除してみませんか?
マナトワーク

ところで、PHP 5.6以降には**演算子があります:pow(9,9)(9**9)
マナトワーク

1
15文字(実際にはPHPではありません):{"<?=9**9?>":1}
Loovjo

4

Java 7、36バイト

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

Java 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}

第2の解決策は、エラーを与える
Numberknot

1
「長さはハッシュに応じて15から16の間で変化します」。ハッシュの長さは、技術的にはできるだけ短くすることができます1(を参照System.identityHashCode(Object))。
オリビエグレゴワール

1
また、""キーおよび1e7値として使用することで1バイトをゴルフできます。""バリデータで試行されたときに有効なキーです。
オリビエグレゴワール

2
@OlivierGrégoireOK、thisコードを削除します。""with に関しては、1e7残念ながら機能しません。1e6出力が1000000.0、代わりに1e7出力1.0E7
ケビンクルーイッセン16年

1
ああ、私の間違い、私はチェックしませんでした。
オリビエグレゴワール

4

R、19バイト

これはイギリス英語ロケールで機能します。他では+2バイトが必要になる場合があります。(編集:おそらく表示されません---コメントを参照してください。)

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

私は何か巧妙なものを望んでいました(おそらくのような既存の関数からコード行を抜き取るq)が、何も見つかりませんでした。結果:

{" 3.141593 ":1}

単一引用符を使用して文字列を引用する場合(およびその逆)、Rで二重引用符をエスケープする必要はありません。ただし、この動作はロケールに依存します。ただし、英語(米国)ロケールでも機能すると期待しています。

また、これには、デフォルトdigitsオプションが少なくとも6(工場出荷時のデフォルト)でscipenあり、少なくとも-digits(工場出荷時のデフォルトがゼロ)であることが必要です。


1
ごめん、何?Rの文法はロケールによって変わりますか?

はい、どの文字をエスケープする必要があるかはoptions(quote)、ユーザーがどの文字を指定できるかによって異なりますが、デフォルトはロケールに依存します。
JDL

@catそれは誤解だと思います。の存在options('quote') 文書化されておらず、それを変更しても認識できる効果はありません。RIで多くの悲劇に出くわしましたが、実行時オプションが解析方法を変更することを疑います。もちろん、出力を変更する可能性がありますが、この回答のコードでは変更されません。
コンラッドルドルフ

@コンラッド、あなたは正しいかもしれません。私は、私が唯一の影響「useFancyQuotes」を考えていたと思うquotesquoteなど
JDL


3

要素、18バイト

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

オンラインでお試しください!出力{"a":387420489}

これは、単純なソリューションよりも3バイト短いだけです。出力の前半はハードコーディングされており(エスケープ文字が多すぎて他のアプローチを実行できない)、値は9^9数値を十分に長くするように計算されます。


3

Perlの5、16の、15バイト

プログラムが開始された瞬間のUNIXタイムスタンプを 1要素オブジェクトのコンテンツとして使用ます。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

@CalculatorFeline hu?
シンバク


3

Windowsバッチ、10バイト

{"%OS%":5}

環境変数OSには文字列が含まれますWindows_NT(スタックオーバーフローに関するこの質問によると、2000年以降のすべてのWindowsオペレーティングシステムで)


@ETHproductionsおっと
ペナロサ

これは実際に何かを出力していますか?NeilBatch answerは確かにそうですが、暗黙のバッチ出力については思い出せません。
マナトワーク

@manatworkはい、エコーがオンになっているため、現在のコマンドがエコーされ、プロセスのOS変数が評価されます。
ペナロサ

ああ。それで実際にそれは{"%OS%":5}コマンドになるのでそれを実行しようとし、あなたは基本的なトレース機能の恩恵を受けますか?それは難しいです。
マナトワーク

@manatworkはい、正確に。
ペナロサ

3

HQ9 +、15バイト

{"Quineland":0}

それ自体を出力します。私は次のように8バイトの答えが可能だと思った:

{":11QQ}

これ{":11QQ}{":11QQ}は、ほぼ有効なJSONですが11QQ、有効な値ではありません。

HQ9 +はPPCG標準では有効なプログラミング言語ではありませんが、OPは非プログラミング言語を許可しています。


1
これは絶対に無効です。すべての提出物は、有効なプログラミング言語である必要があります。
メゴ

この大部分はkolmo複雑さ(主に、それは別の何かを出力した場合、それはまだカウントされるため)ですので、私はこれが有効であると思う
破壊可能なレモン

@DestructibleWatermelon非プログラミング言語の使用は標準的な抜け穴です。
メゴ

@Mego OPは現在、非プログラミング言語を明示的に許可しています
-ETHproductions
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.