Stampa un po 'di JSON


74

Questa sfida è semplice, ma speriamo che ci siano molte strade che puoi affrontare:

È necessario stampare / restituire un oggetto JSON valido di almeno 15 caratteri, senza contare gli spazi bianchi non essenziali. Il tuo programma dovrebbe funzionare senza alcun input.

Per motivi di chiarezza, un oggetto JSON inizia e termina con parentesi graffe {}e contiene zero o più chiavi: coppie di valori separate da virgole. La specifica JSON completa è disponibile su json.org e l'output del codice deve superare questo validatore .

Pertanto, nessuna delle seguenti condizioni non sarebbe valida:

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

Tuttavia, sarebbe valido quanto segue :

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

Linguaggi non di programmazione sono ammessi su questa sfida. È possibile restituire una stringa da una funzione o stamparla. Questo è un , quindi rispondi con il minor codice possibile!


1
Mi piace la varietà di risposte su questo
Robert Fraser,

Hmmmm, la tua definizione di JSON è limitata. Che dire del codice che genera JSON valido ma non genera parentesi graffe?
Konijn,

4
@Konijn come ho detto, deve essere un oggetto JSON valido . L'oggetto è definito dalle parentesi graffe.
Nathan Merrill,

Capito, con l'accento sull'oggetto;)
Konijn,

1
@Masterzagh Sfortunatamente, un oggetto JS nativo non conta. "Puoi restituire una stringa da una funzione o stamparla"
Nathan Merrill

Risposte:


72

Python 2, 14 byte

print{`str`:1}

Uscite:

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

I backtick ottengono la rappresentazione della stringa in Python 2. Di solito, questo output all'interno crea virgolette singole, che Python riconosce come delimitazione di una stringa, ma JSON no. Ma Sp3000 osserva che quando si restringe un tipo, la descrizione del tipo contiene già virgolette singole, il che impone alle virgolette esterne di essere virgolette doppie.


20
@ Sp3000 È bellissimo in un modo terribile.
xnor

6
E ho pensato che JS fosse l'unica lingua in cui puoi davvero abusare del casting di tipo in ...
Downgoat,

lo stesso approccio funziona per py3 con 20 byteprint({repr(str):1})
dahrens,

1
@dahrens per Py3: print({"'"*9:9})per 16 ( print{"'"*9:9}è un altro 14 in Py2)
Jonathan Allan

37

jq, 6 caratteri

(Codice di 3 caratteri + opzione della riga di comando di 3 caratteri.)

env

CW perché sono sicuro che questo non è il tipo di risposta che intendevi consentire.

Esecuzione di esempio:

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

(Uscita ovviamente abbreviata.)


6
Questa è sicuramente una proposta valida (e non c'è bisogno di CW)
Nathan Merrill,


1
Ciò conta come scaricare la soluzione su un built-in, che è quasi una scappatoia proibita. Parola chiave: quasi
John Dvorak,

1
@JanDvorak Non è sempre una scappatoia, perché ci sono casi in cui è interessante vedere un built-in usato. Questo è uno di loro.
Fengyang Wang,

1
Non lo farò contro i tuoi espliciti desideri, ma concordo sul fatto che questo non dovrebbe essere sgradito. Inoltre, l' attuale consenso è che i flag di interprete devono contare la differenza tra invocazione con e senza il flag, quindi -nun account spaziale per tre byte extra.
Dennis,

31

Gelatina , 11 byte

“Ɠɼ'ẸẠḌȷżÑ»

Provalo online!

Produzione

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
Ha 6 consonanti di fila due volte ( pwllgwe bwllll). Cos'è anche questo?
Steven H.

2
@ETHproductions Certo, ma ho bisogno di almeno 9 lettere per rispettare il limite. Tutte le parole con più di 6 lettere sono nel dizionario lungo, quindi non importa quale scegli.
Dennis,


8
Aspetta, Jelly ha un built-in per questo ?
Buffer Over Leggi il

19

Blocco note, 7 battute

Se hai un computer Windows con il programma Blocco note, digita questo:

{"F5":0}

Sul mio computer Windows 7, almeno, questo ti dà qualcosa di simile:

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

1
@cat È un programma, non un linguaggio di programmazione, ma credo che Vim sia lo stesso.
ETHproductions

2
Bene, Vim è un "linguaggio" di programmazione, sia per il fatto che soddisfa le regole PPCG (non completezza di Turing) ma anche per completezza di Turing (almeno, ne sono abbastanza sicuro)
cat,

1
@cat vedo. Non sono sicuro che Blocco note sia Turing completo. Ne dubito, ma forse; dopotutto, /// è stato dimostrato e Notepad è in grado di ricreare piuttosto bene la sua singola funzionalità.
ETHproductions

1
Vim è diverso dal Blocco note: puoi salvare uno script ed eseguirlo all'interno dell'editor. Non esiste tale funzionalità in Blocco note. Pertanto, le funzionalità di Blocco note (rudimentale ricerca e sostituzione, copia e incolla) che gli consentono di essere TC richiedono ogni volta la navigazione nelle finestre di dialogo, il che significa più tasti.
Mego

1
@cat Sì, mi dispiace, intendevo dire che è stato permesso dalla nostra discussione.
ETHproductions

15

Java (JDK 10) , 20 byte

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

Provalo online!

Produzione

{"":3.3333333333333335}

3
Java è l'ultima lingua che mi aspetterei di sovraccaricare +a String.concat>: ^ (
cat,

3
@cat Sì, in realtà è l'unico sovraccarico esistente. Il fatto è che non si sovraccarica nemmeno String.concat! Se si seleziona il bytecode, questo è ciò che Java viene compilato in: ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). Inoltre, non ti preoccupare, questa è ancora la risposta più lunga in questa pagina, tranne quella di Brainfuck e quella di Java 7. Quindi Java detiene il suo grado;)
Olivier Grégoire il

14

PHP, 14 13 byte

{"":<?=M_E?>}

Stampa un simpatico oggetto matematico che si potrebbe quasi fingere sia utile :

{"":2.718281828459}

Usa il fatto che php stampa qualcosa al di fuori dei tag alla lettera per salvare alcune virgolette, è M_Estata la costante più breve che potessi trovare.

modifica: salvato un byte grazie a Lynn. Purtroppo non è più un "simpatico" oggetto matematico.


""è una chiave JSON valida.
Lynn,

14

JavaScript, 17 15 byte

Grazie a @Neil per questo. Chiama senza input.

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

Uscite {"undefined":0}

Vecchia versione, 16 byte

Grazie a @ kamoroso94 per -1 in questa versione

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

Uscite {"":9000000000}


È possibile trasformarlo in una funzione freccia per rimuovere 4 byte.
DanTheMan,

1
Puoi avere una chiave vuota? (es. rimuovi a)
Conor O'Brien,

_=>`{"a":${_}}`risulta {"a":undefined}, che è esattamente 15 caratteri. Notato che non si utilizza alcun input quando si chiama questa funzione
Bassdrop Cumberwubwubwub

1
@BassdropCumberwubwubwub Per coincidenza, il tuo codice ha anche 15 caratteri. Non sono sicuro che undefinedè un valore valido in JSON, ma questo è facilmente risolto, rendendo il nome della proprietà e l'utilizzo di un valore pari a zero: _=>`{"${_}":0}`.
Neil,

3
Rimuovere aper rendere la chiave la stringa vuota, una chiave valida in JSON. 1 byte in meno.
kamoroso94,

12

Brainfuck, 50 byte

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

Uscite {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. Presuppone un interprete che ha celle a 8 bit e non ha limiti a sinistra. Provalo online!



10

Jolf, 9 byte

"{¦q:¦q}"

Uscite: {"{¦q:¦q}":"{¦q:¦q}"}. Provalo qui!

"{¦q:¦q}"
"{  :  }"  raw string
  ¦q       insert the source code here
     ¦q    and here

9

Pyth, 7 byte

.d],`G0

Crea un dizionario contenente una sola chiave "'abcdefghijklmnopqrstuvwxyz'"e valore 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

Lotto, 16 byte

Stampe {"Windows_NT":0}.

@echo {"%OS%":0}

Potresti aggiungere l'output (di esempio)?
grooveplex,

8

///, 15 14 caratteri

/a/{":1234}/aa

(Almeno l'output è 1 2 caratteri più lungo del codice.)

Provalo online!

Grazie a:

  • ETHproductions per riutilizzare i delimitatori di oggetti come parte della chiave (-1 carattere)

Esecuzione di esempio:

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

Solo per renderlo più leggibile:

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

1
Questo è un modo intelligente per salvare byte :-)
ETHproductions

2
Puoi salvarne un altro con /a/{":1234}/aa(output {":1234}{":1234})
ETHproductions

Incredibile, @ETHproductions. Grazie.
arte

7

R, 19 byte

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

Diventa un po 'più lungo perché è necessario sfuggire alle virgolette \". Inoltre, lhè uno dei set di dati integrati Red è (per quanto ne sappia) l'oggetto con il nome più breve che contiene i 9 caratteri necessari per riempire la lunghezza della chiave. (modifica: si scopre che pifa anche il trucco con l'opzione standard e sono stato battuto da @JDL che è stato abbastanza intelligente da scappare usando virgolette singole anziché le barre rovesciate extra)

La descrizione lhnella documentazione R è:

Una serie storica che fornisce l'ormone luteinizzante in campioni di sangue a intervalli di 10 minuti da una femmina umana, 48 campioni.

che è un nome piuttosto inaspettato di una chiave, ma ehi, funziona e produce l'output:

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

La risposta può essere paragonata al solo riempimento della chiave con lettere "casuali" per rendere l'output di almeno 15 caratteri (24 byte):

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

1
Puoi evitare le barre rovesciate di escape usando le virgolette singole nell'espressione R: cat('{"',lh,'":1}')come ho fatto sopra (anche se ho usato al piposto di lh). Nella mia ricerca di variabili di due lettere mi sono imbattuto nella funzione elche non sapevo esistesse. Potrebbe essere utile in futuro ...
JDL

7

PowerShell 22 20 14 byte

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

Produzione

{"":1099511627776}

Utilizzo della costante definita per 1 TB in byte per raggiungere il limite di caratteri e il valore di un numero intero statico per creare json valido. Grazie a TimmyD per aver ridotto i personaggi di 5 rimuovendo la ridondanza.


Posta precedente 40 byte

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

Produzione

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

Accetta un array intero e crea una coppia chiave-valore per ciascuno. Unisciti alle virgole e avvolgi con una serie di parentesi graffe.


6

05AB1E , 9 byte

Sfortunatamente, 05AB1E non ha un oggetto dizionario, quindi dobbiamo costruirne uno nostro.

’{"èÖ":7}

Provalo online!

Produzione

{"dictionaries":7}

6

Retina, 11 byte

 
{"9$*R":1}

Produzione

{"RRRRRRRRR":1}

Nota: la nuova riga principale è significativa in quanto nulla viene sostituito con l'output risultante, ho usato uno spazio non-break per illustrare questo!

Provalo online!


5

V , 9 byte

i{"¹*":0}

Provalo online!

Molto semplice. Entra in modalità inserimento, inserisce il seguente testo:

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

Il motivo per cui è così breve è perché ¹ripete il seguente carattere 9 volte.


Mi aspettavo quello a 0 byte: P
Maltysen,

1
@maltysen L'ho pubblicato. L'ho eliminato perché utilizzava virgolette singole anziché doppie ... :(
DJMcMayhem

5

JavaScript (ES6) + jQuery, 15 byte

Perché jQuery.

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

Emette {"function (a,b){return new n.fn.init(a,b)}":0}quando chiamato. Provalo qui:


1
Il compito è quello di produrre qualcosa. senza di alert()te non stai producendo nulla
nl-x

1
@ nl-x L'OP è stato modificato per chiarire che le funzioni che restituiscono la stringa sono consentite.
ETHproductions,

5

Dyalog APL , 9 byte

JSONDMX

Provalo online!

Il risultato è in un'area di lavoro pulita sul mio PC

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

⎕JSON convertire in JSON

⎕DMX il (universalmente disponibili) D iagnostic M essage E X tendeva oggetto


4

Brainfuck, 83 byte

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

Uscite {"333333333":3}

C'è probabilmente un'altra soluzione più breve, ma non l'ho ancora trovata.

Spiegazione:

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

Provalo online


4

PHP, 19 byte

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

Produzione: {"387420489":1}

https://eval.in/665889

Grazie a manatwork per i suggerimenti!


1
Il tuo output è lungo 16 caratteri, mentre il requisito è 15. Quindi perché non rimuovere quella "H"?
arte

A proposito, dal PHP 5.6 c'è un **operatore: pow(9,9)(9**9).
arte

1
15 caratteri (non proprio PHP):{"<?=9**9?>":1}
Loovjo

4

Java 7, 36 byte

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

Java 8, 21 byte

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

Codice non testato e test:

Provalo qui.

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

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

Uscita (lunghezza 15):

{"a":1000000.0}

La seconda soluzione fornisce un errore
Numberknot,

1
"la lunghezza varia tra 15 e 16 a seconda dell'hash". Gli hash possono tecnicamente avere una lunghezza pari a 1( vediSystem.identityHashCode(Object) ).
Olivier Grégoire,

1
Inoltre, puoi giocare a golf 1 byte usando ""come chiave e 1e7come valore. ""è una chiave valida quando viene provato nel validatore.
Olivier Grégoire,

2
@ OlivierGrégoire Ok, rimuoverò il thiscodice. Per quanto riguarda il ""con 1e7, questo non funzionerà purtroppo. 1e6output 1000000.0, ma invece 1e7output 1.0E7.
Kevin Cruijssen,

1
Oh, errore mio, non ho controllato.
Olivier Grégoire,

4

R, 19 byte

Funziona in inglese britannico locale; potrebbe richiedere +2 byte negli altri. (Modifica: probabilmente non --- vede i commenti.)

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

Speravo in qualcosa di intelligente (forse strappando una riga di codice da una funzione preesistente come q) ma non sono riuscito a trovare nulla. Il risultato:

{" 3.141593 ":1}

Nota che non devi sfuggire alle doppie virgolette in R se usi virgolette singole per citare la stringa (e viceversa). Questo comportamento dipende dalle impostazioni locali. Mi sarei aspettato che funzionasse anche in un locale inglese americano.

Ciò richiede anche che l' digitsopzione predefinita sia almeno sei (che è l'impostazione predefinita di fabbrica) e che scipensia almeno -digits(l'impostazione predefinita di fabbrica è zero).


1
Mi dispiace che cosa? La grammatica di R cambia con le impostazioni locali?
gatto,

Sì, quali caratteri devono essere options(quote)sottoposti a escape dipendono da quali possono essere specificati dall'utente, ma l'impostazione predefinita è, per quanto ne so, dipendente dalle impostazioni locali.
JDL,

@cat Penso che sia un malinteso. L'esistenza di options('quote') non è documentata , cambiarla non ha alcun effetto riconoscibile, e anche se mi sono imbattuto in una grande quantità di shenanigani nel RI dubitare che le opzioni di runtime cambieranno il modo in cui viene analizzato. Naturalmente può cambiare l'output, ma non nel codice in questa risposta.
Konrad Rudolph,

@Konrad, potresti avere ragione. Penso che stavo pensando a "useFancyQuotes" che riguarda solo quote, squoteecc.
JDL,


3

Elemento , 18 byte

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

Provalo online! Uscite{"a":387420489}

Questo è solo tre byte più corto della soluzione ingenua. La prima metà dell'output è codificata (troppi caratteri di escape per rendere possibile qualsiasi altro approccio), mentre il valore viene calcolato in modo 9^9da rendere un numero abbastanza lungo.


3

Perl 5, 16 15 byte

Utilizza il timestamp unix del momento in cui il programma è stato avviato come contenuto di un oggetto a un elemento. Fornisce un output valido se lo esegui dopo le 10:46:39 il 3 marzo 1973 . Ma dal momento che non possiamo tornare indietro nel tempo questo sembra legittimo.

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

Utilizza la variabile FORMAT_TOP_HANDLE$^ che è impostata automaticamenteSTDOUT_TOP .

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

Esegui con -Ebandiera senza costi aggiuntivi.

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

Le uscite sono lunghe 16 byte.

{"STDOUT_TOP":1}

Risposta dipendente dal tempo RIP :(
CalculatorFeline

@CalculatorFeline hu?
simbabque,

3

Cheddar, 17 14 byte

Salvato 3 byte grazie a @ ConorO'Brien

->'{":1234}'*2

Una funzione anonima che restituisce {":1234}{":1234}, che è un oggetto JSON valido:

{
  ":1234}{": 1234
}

Provalo online!


3

Lotto di Windows, 10 byte

{"%OS%":5}

La variabile d'ambiente OScontiene la stringa Windows_NT(su tutti i sistemi operativi Windows dal 2000, secondo questa domanda su StackTranslate.it)


@ETHproductions Oops
penalosa,

Questo sta effettivamente producendo qualcosa? La risposta Batch di Neil lo fa sicuramente, ma non ricordo alcun output batch implicito.
arte

@manatwork Sì, poiché echo è attivato, il comando corrente viene ripetuto, valutando la variabile del sistema operativo nel processo.
penalosa,

Oh. Quindi in realtà cerca di eseguirlo {"%OS%":5}come sarebbe un comando e beneficiate della funzionalità di traccia elementare? È difficile.
arte

@manatwork Sì, esattamente.
penalosa,

3

HQ9 +, 15 byte

{"Quineland":0}

Produce se stesso. Ho pensato che sarebbe stata possibile una risposta di 8 byte, in questo modo:

{":11QQ}

Ciò genera {":11QQ}{":11QQ}, che è quasi valido JSON, ma 11QQnon è un valore valido.

HQ9 + non è un linguaggio di programmazione valido secondo gli standard PPCG, ma l'OP ha consentito linguaggi non di programmazione.


1
Questo non è assolutamente valido. Tutti gli invii devono essere in un linguaggio di programmazione valido.
Mego

Questa è per lo più complessità kolmo (principalmente, perché se produce qualcosa di diverso conta ancora), quindi penso che questo potrebbe essere valido
Limone distruttibile

@DestructibleWatermelon L'uso di un linguaggio non di programmazione è una scappatoia standard .
Mego

@Mego OP ora ha esplicitamente permesso linguaggi non di programmazione
ETHproductions
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.