Imprime algunos JSON

74

Este desafío es sencillo, pero con suerte, hay muchas maneras de abordarlo:

Debe imprimir / devolver un objeto JSON válido de al menos 15 caracteres, sin contar espacios en blanco no esenciales. Su programa debería funcionar sin ninguna entrada.

En aras de la claridad, un objeto JSON comienza y termina con llaves {}, y contiene cero o más pares clave: valor separados por comas. La especificación JSON completa se puede encontrar en json.org , y la salida de su código debe pasar este validador .

Por lo tanto, cualquiera de los siguientes no sería válido:

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

Sin embargo, lo siguiente sería válido:

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

Los lenguajes que no son de programación están permitidos en este desafío. Puede devolver una cadena de una función o imprimirla. Este es un , ¡así que responda con el menor código posible!

Nathan Merrill
fuente
1
Me gusta la variedad de respuestas en este caso
Robert Fraser
Hmmmm, tu definición de JSON es limitada. ¿Qué pasa con el código que genera JSON válido pero no genera llaves?
Konijn
44
@ Konijn como dije, debe ser un objeto JSON válido . El objeto está definido por las llaves.
Nathan Merrill
Lo tengo, con estrés en el objeto;)
Konijn
1
@Masterzagh Desafortunadamente, un objeto JS nativo no cuenta. "Puede devolver una cadena de una función o imprimirla"
Nathan Merrill

Respuestas:

72

Python 2, 14 bytes

print{`str`:1}

Salidas:

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

Los backticks obtienen la representación de cadena en Python 2. Por lo general, estos resultados en el interior crean comillas simples, que Python reconoce como delimitación de una cadena, pero JSON no. Pero Sp3000 observa que cuando se encadena un tipo, la descripción del tipo ya contiene comillas simples, lo que obliga a las comillas externas a ser comillas dobles.

xnor
fuente
20
@ Sp3000 Eso es hermoso de una manera horrible.
xnor
66
Y pensé que JS era el único lenguaje en el que realmente puedes abusar de la conversión de tipos ...
Downgoat
el mismo enfoque funciona para py3 con 20 bytesprint({repr(str):1})
dahrens
1
@dahrens para Py3: print({"'"*9:9})para 16 ( print{"'"*9:9}son otros 14 en Py2)
Jonathan Allan
37

jq, 6 caracteres

(Código de 3 caracteres + opción de línea de comando de 3 caracteres).

env

CW porque estoy seguro de que este no es el tipo de respuesta que pretendías permitir.

Ejecución de muestra:

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

(Salida obviamente acortada)

manatwork
fuente
66
Esta es definitivamente una presentación válida (y no es necesario para CW)
Nathan Merrill
1
Esto cuenta como descargar la solución a un sistema integrado, que es casi una escapatoria prohibida. Palabra clave: casi
John Dvorak
1
@ JanDvorak No siempre es un vacío legal, porque hay casos en los que es interesante ver un dispositivo incorporado. Este es uno de ellos.
Fengyang Wang
1
No lo haré en contra de sus deseos explícitos, pero estoy de acuerdo en que esto no debe ser cuestionado. Además, el consenso actual es que las banderas de intérprete tienen que contar la diferencia entre la invocación con y sin la bandera, por lo tanto, -ny una cuenta de espacio para tres bytes adicionales.
Dennis
31

Jalea , 11 bytes

“Ɠɼ'ẸẠḌȷżÑ»

Pruébalo en línea!

Salida

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}
Dennis
fuente
1
Tiene 6 consonantes seguidas dos veces ( pwllgwy bwllll). ¿Qué es esto?
Steven H.
2
@ETHproductions Claro, pero necesito al menos 9 letras para cumplir con el límite. Todas las palabras con más de 6 letras están en el diccionario largo, por lo que no importa cuál elija.
Dennis
8
Espera, ¿Jelly tiene algo incorporado para esto ?
Buffer Over Read
19

Bloc de notas, 7 pulsaciones de teclas

Si tiene una computadora con Windows con el programa Bloc de notas, escriba esto:

{"F5":0}

En mi computadora con Windows 7, al menos, esto te da algo como:

{"3:42 PM 10/25/2016":0}
ETHproducciones
fuente
1
@cat Es un programa, no un lenguaje de programación, pero creo que Vim es igual.
ETHproductions
2
Bueno, Vim es un "lenguaje" de programación, tanto en que cumple con las reglas de PPCG (no en la integridad de Turing) sino también en la integridad de Turing (al menos, estoy bastante seguro)
cat
1
@cat Ya veo. No estoy seguro si Notepad está Turing completo. Lo dudo, pero tal vez; después de todo, /// se ha demostrado que sí, y el Bloc de notas puede recrear su característica única.
ETHproductions
1
Vim es diferente del Bloc de notas: puede guardar un script y ejecutarlo dentro del editor. No hay tal característica en el Bloc de notas. Por lo tanto, las características en el Bloc de notas (búsqueda y reemplazo rudimentario, copia y pegado) que le permiten ser TC requieren navegar en los diálogos cada vez, lo que significa más pulsaciones de teclas.
Mego
1
@cat Sí, lo siento, quise decir que se ha permitido desde nuestra discusión.
ETHproductions
15

Java (JDK 10) , 20 bytes

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

Pruébalo en línea!

Salida

{"":3.3333333333333335}
Olivier Grégoire
fuente
3
Java es el último idioma que esperaría sobrecargar +a String.concat>: ^ (
cat
3
@cat Sí, en realidad es la única sobrecarga que existe. ¡La cosa es que ni siquiera se sobrecarga String.concat! Si comprueba el código de bytes, esto es lo que Java se compila en: ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). Además, no te preocupes, esta sigue siendo la respuesta más larga en esta página, excepto Brainfuck y Java 7. Entonces Java mantiene su rango;)
Olivier Grégoire
14

PHP, 14 13 bytes

{"":<?=M_E?>}

Imprime un objeto matemático agradable que casi se podría imaginar que es útil :

{"":2.718281828459}

Usa el hecho de que php imprime cualquier cosa fuera de las etiquetas textualmente para ahorrar entre comillas, M_Efue la constante más corta que pude encontrar.

editar: guardado un byte gracias a Lynn. Lamentablemente ya no es un objeto matemático "agradable".

usuario59178
fuente
""es una clave JSON válida.
Lynn
14

JavaScript, 17 15 bytes

Gracias a @Neil por este. Llamada sin entrada.

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

Salidas {"undefined":0}

Versión anterior, 16 bytes

Gracias a @ kamoroso94 por -1 en esta versión

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

Salidas {"":9000000000}

jrich
fuente
Puede convertir esto en una función de flecha para eliminar 4 bytes.
DanTheMan
1
¿Puedes tener una llave vacía? (por ejemplo, eliminar a)
Conor O'Brien
_=>`{"a":${_}}`da como resultado {"a":undefined}, que es exactamente 15 caracteres. Notó que no usa ninguna entrada al llamar a esta función
Bassdrop Cumberwubwubwub
1
@BassdropCumberwubwubwub Casualmente, su código también tiene 15 caracteres. No estoy seguro de que undefinedes un valor válido en JSON, pero eso es fácilmente resueltos, por lo que es el nombre de la propiedad y el uso de un valor cero: _=>`{"${_}":0}`.
Neil
3
Elimine apara hacer que la clave sea la cadena vacía, una clave válida en JSON. 1 byte menos
kamoroso94
12

Brainfuck, 50 bytes

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

Salidas {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. Asume un intérprete que tiene celdas de 8 bits y no está acotado a la izquierda. Pruébalo en línea!

Sp3000
fuente
11

Pyth - 5 bytes

Impresiones {"'abcdefghijklmnopqrstuvwxyz'": 10}.

XH`GT

Pruébelo en línea aquí .

Maltysen
fuente
JSON solo permite comillas dobles desafortunadamente
Downgoat
@Downgoat ah, arreglando para un byte.
Maltysen
@Downgoat fijo.
Maltysen
10

Jolf, 9 bytes

"{¦q:¦q}"

Salidas: {"{¦q:¦q}":"{¦q:¦q}"}. Pruébalo aquí!

"{¦q:¦q}"
"{  :  }"  raw string
  ¦q       insert the source code here
     ¦q    and here
Conor O'Brien
fuente
9

Pyth, 7 bytes

.d],`G0

Crea un diccionario que contiene una sola clave "'abcdefghijklmnopqrstuvwxyz'"y valor 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.
Steven H.
fuente
9

Lote, 16 bytes

Impresiones {"Windows_NT":0}.

@echo {"%OS%":0}
Neil
fuente
¿Podría agregar la salida (ejemplo)?
grooveplex
8

///, 15 14 caracteres

/a/{":1234}/aa

(Al menos el resultado es 1 2 caracteres más largo que el código).

Pruébalo en línea!

Gracias a:

  • ETHproductions para reutilizar los delimitadores de objetos como parte de la clave (-1 carácter)

Ejecución de muestra:

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

Solo para hacerlo más legible:

bash-4.3$ slashes.pl <<< '/a/{":1234}/aa' | jq ''
{
  ":1234}{": 1234
}
hombre trabajando
fuente
1
Esa es una forma inteligente de guardar bytes :-)
ETHproductions
2
Puede guardar otro con /a/{":1234}/aa(salidas {":1234}{":1234})
ETHproductions
Increíble, @ETHproductions. Gracias.
manatwork
7

R, 19 bytes

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

Se vuelve un poco más largo porque la necesidad de escapar de las citas \". Además, lhes uno de los conjuntos de datos integrados Ry es (que yo sepa) el objeto con el nombre más corto que contiene los 9 caracteres necesarios para completar la longitud de la clave. (editar: resulta pique también funciona con la opción estándar y @JDL me derrotó, que era lo suficientemente inteligente como para escapar usando comillas simples en lugar de las barras invertidas adicionales)

La descripción de lhen la documentación R es:

Una serie de tiempo regular que proporciona la hormona luteinizante en muestras de sangre a intervalos de 10 minutos de una hembra humana, 48 muestras.

que es un nombre bastante inesperado de una clave, pero bueno, funciona y produce la salida:

{" 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 respuesta se puede comparar con solo rellenar la tecla con letras "aleatorias" para que la salida tenga al menos 15 caracteres (24 bytes):

cat("{\"HeloWorld\":1}")
Billywob
fuente
1
Puede evitar las barras invertidas de escape mediante comillas simples en la expresión R: cat('{"',lh,'":1}')como hice anteriormente (aunque usé en pilugar de lh). En mi búsqueda de variables de dos letras me encontré con la función elque nunca supe que existía. Podría ser útil en el futuro ...
JDL
7

PowerShell 22 20 14 Bytes

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

Salida

{"":1099511627776}

Usando la constante definida para 1TB en bytes para alcanzar el límite de caracteres y el valor de un entero estático para hacer json válido. Gracias a TimmyD por reducir los caracteres en 5 al eliminar algo de redundancia.


Publicación anterior 40 bytes

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

Salida

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

Toma una matriz de enteros y crea un par clave-valor para cada uno. Únete con comas y envuélvete con un conjunto de llaves.

Mate
fuente
6

05AB1E , 9 bytes

Desafortunadamente, 05AB1E no tiene un objeto de diccionario, así que tenemos que construir el nuestro.

’{"èÖ":7}

Pruébalo en línea!

Salida

{"dictionaries":7}
Emigna
fuente
6

Retina, 11 bytes

 
{"9$*R":1}

Salida

{"RRRRRRRRR":1}

Nota: la nueva línea principal es importante ya que nada se reemplaza con la salida resultante, ¡he usado un espacio continuo para ilustrar esto!

Pruébalo en línea!

Dom Hastings
fuente
5

V , 9 bytes

i{"¹*":0}

Pruébalo en línea!

Muy sencillo Entra en modo insertar, ingresa el siguiente texto:

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

La razón por la que esto es tan breve es porque ¹repite el siguiente carácter 9 veces.

DJMcMayhem
fuente
Estaba esperando el byte 0: P
Maltysen
1
@maltysen Lo publiqué. Lo eliminé porque usaba comillas simples en lugar de dobles ... :(
DJMcMayhem
5

JavaScript (ES6) + jQuery, 15 bytes

Porque jQuery.

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

Salidas {"function (a,b){return new n.fn.init(a,b)}":0}cuando se llama. Pruébalo aquí:

ETHproducciones
fuente
1
La tarea es dar salida a algo. sin el alert()no está produciendo nada
nl-x
1
@ nl-x El OP ha editado para aclarar que las funciones que devuelven la cadena están permitidas.
ETHproductions
5

Dyalog APL , 9 bytes

JSONDMX

Pruébalo en línea!

En un espacio de trabajo limpio en mi PC, el resultado es

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

⎕JSON convertir a JSON

⎕DMX el (universalmente disponible) D iagnostic M ensaje E x tendía objeto

Adán
fuente
4

brainfuck, 83 bytes

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

Salidas {"333333333":3}

Es probable que haya otra solución más corta, pero aún no la he encontrado.

Explicación:

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

Pruébalo en línea

DanTheMan
fuente
4

PHP, 19 bytes

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

Salida: {"387420489":1}

https://eval.in/665889

Gracias a manatwork por los consejos!

ʰᵈˑ
fuente
1
Su salida tiene 16 caracteres, mientras que el requisito es 15. Entonces, ¿por qué no eliminar esa "H"?
manatwork
Por cierto, desde PHP 5.6 hay un **operador: pow(9,9)(9**9).
manatwork
1
15 caracteres (no realmente PHP):{"<?=9**9?>":1}
Loovjo
4

Java 7, 36 bytes

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

Java 8, 21 bytes

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

Ungolfed y código de prueba:

Pruébalo aquí.

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

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

Salida (longitud 15):

{"a":1000000.0}
Kevin Cruijssen
fuente
La segunda solución da un error
Numberknot
1
"la longitud varía entre 15 y 16 dependiendo del hash". Los hashes pueden tener técnicamente una longitud tan pequeña como 1( verSystem.identityHashCode(Object) ).
Olivier Grégoire
1
Además, puede jugar al golf 1 byte utilizando ""como clave y 1e7como valor. ""es una clave válida cuando se prueba en el validador.
Olivier Grégoire
2
@ OlivierGrégoire Ok, eliminaré el thiscódigo. En cuanto a ""con 1e7, eso desafortunadamente no funcionará. 1e6salidas 1000000.0, pero 1e7salidas en su 1.0E7lugar.
Kevin Cruijssen
1
Oh, mi error, no lo comprobé.
Olivier Grégoire
4

R, 19 bytes

Esto funciona en inglés británico local; Puede requerir +2 bytes en otros. (Editar: probablemente no --- ver comentarios).

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

Esperaba algo inteligente (tal vez extraer una línea de código de una función preexistente como q), pero no pude encontrar nada. El resultado:

{" 3.141593 ":1}

Tenga en cuenta que no tiene que escapar de las comillas dobles en R si usa comillas simples para citar la cadena (y viceversa). Sin embargo, este comportamiento depende de la configuración regional. Sin embargo, también esperaría que funcione en un idioma inglés de EE. UU.

Esto también requiere que su digitsopción predeterminada sea ​​al menos seis (que es el valor predeterminado de fábrica) y que scipenes al menos -digits(el valor predeterminado de fábrica es cero).

JDL
fuente
1
Perdon La gramática de R cambia con la configuración regional?
gato
Sí, qué caracteres necesitan escapar depende de options(quote)cuál puede especificar el usuario, pero el valor predeterminado depende , por lo que sé, de la configuración regional.
JDL
@cat Creo que es un malentendido. La existencia de options('quote') no está documentada , cambiarla no tiene un efecto discernible, y aunque me he encontrado con muchas travesuras en RI, dudo que las opciones de tiempo de ejecución cambien la forma en que se analiza. Puede cambiar la salida, por supuesto, pero no en el código de esta respuesta.
Konrad Rudolph
@ Konrad, puede que tengas razón. Creo que estaba pensando en "useFancyQuotes" que solo afecta quote, squoteetc.
JDL
4

Ruby, 19 bytes

puts'{"1":'+9**9+?}

Salida:

{"1":387420489}
dkudriavtsev
fuente
@NathanMerrill Corregido
dkudriavtsev
1
¿Puedes mostrar lo que
sale
¿No puedes guardar un byte eliminando el espacio después puts?
Oliver Ni
Creo que ?1*9todavía es lo suficientemente largo.
Lee W
@curiousdannii Hecho
dkudriavtsev
3

Elemento , 18 bytes

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

Pruébalo en línea! Salidas{"a":387420489}

Esto es solo tres bytes más corto que la solución ingenua. La primera mitad de la salida está codificada (demasiados caracteres de escape para que cualquier otro enfoque sea factible), mientras que el valor se calcula 9^9para hacer un número lo suficientemente largo.

PhiNotPi
fuente
3

Perl 5, 16 15 bytes

Utiliza la marca de tiempo de Unix del momento en que se inició el programa como contenido de un objeto de un elemento. Proporciona un resultado válido si lo ejecuta después de las 10:46:39 del 3 de marzo de 1973 . Pero como no podemos retroceder en el tiempo, eso parece legítimo.

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

Utiliza la variable FORMAT_TOP_HANDLE$^ que está predeterminada STDOUT_TOP.

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

Corre con -Ebandera sin costo adicional.

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

Las salidas tienen 16 bytes de longitud.

{"STDOUT_TOP":1}
simbabque
fuente
Respuesta dependiente del tiempo de RIP :(
CalculatorFeline
@CalculatorFeline hu?
simbabque
3

Cheddar, 17 14 bytes

Guardado 3 bytes gracias a @ ConorO'Brien

->'{":1234}'*2

Una función anónima que devuelve {":1234}{":1234}, que es un objeto JSON válido:

{
  ":1234}{": 1234
}

Pruébalo en línea!

ETHproducciones
fuente
3

Lote de Windows, 10 bytes

{"%OS%":5}

La variable de entorno OScontiene la cadena Windows_NT(en todos los sistemas operativos Windows desde 2000, de acuerdo con esta pregunta sobre desbordamiento de pila)

penalosa
fuente
@ETHproductions Uy
penalosa
¿Esto realmente está produciendo algo? La respuesta Batch de Neil ciertamente lo hace, pero no puedo recordar ninguna salida por lotes implícita.
manatwork
@manatwork Sí, ya que echo está activado, el comando actual se repite, evaluando la variable del sistema operativo en el proceso.
penalosa
Oh. Entonces, ¿realmente trata de ejecutarlo {"%OS%":5}como si fuera un comando y usted se beneficia de la función de rastreo elemental? Eso es complicado
manatwork
@manatwork Sí, exactamente.
penalosa
3

HQ9 +, 15 bytes

{"Quineland":0}

Salidas en sí. Pensé que una respuesta de 8 bytes sería posible, así:

{":11QQ}

Esto genera {":11QQ}{":11QQ}, que es JSON casi válido, pero 11QQno es un valor válido.

HQ9 + no es un lenguaje de programación válido según los estándares PPCG, pero el OP ha permitido lenguajes que no son de programación.

ETHproducciones
fuente
1
Esto absolutamente no es válido. Todos los envíos deben estar en un lenguaje de programación válido.
Mego
Esto es principalmente complejidad de kolmo (principalmente, porque si produce algo diferente, todavía cuenta), así que creo que esto podría ser válido
Destructible Lemon
@DestructibleWatermelon Usar un lenguaje que no sea de programación es una laguna estándar .
Mego
@Mego OP ha permitido explícitamente lenguajes que no son de programación ahora
ETHproductions