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!


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.


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)


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}


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}

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}

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


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


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!




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.

9

Lote, 16 bytes

Impresiones {"Windows_NT":0}.

@echo {"%OS%":0}

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

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

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.


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}

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!


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.


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í:


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


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


4

PHP, 19 bytes

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

Salida: {"387420489":1}

https://eval.in/665889

Gracias a manatwork por los consejos!


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}

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).


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


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.


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}

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!


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)


@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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.