Распечатать немного JSON

74

Эта задача проста, но, надеюсь, есть много путей, которые вы можете подойти к ней:

Вам необходимо напечатать / вернуть действительный объект JSON длиной не менее 15 символов, не считая необязательных пробелов. Ваша программа должна работать без какого-либо участия.

Для ясности, объект JSON начинается и заканчивается фигурными скобками {}и содержит ноль или более пар ключ: значение, разделенных запятыми. Полная спецификация 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 отмечает, что при строковом типе описание типа уже содержит одинарные кавычки, в результате чего внешние кавычки становятся двойными кавычками.

XNOR
источник
20
@ Sp3000 Это ужасно красиво.
xnor
6
И я подумал, что JS - единственный язык, на котором вы можете по-настоящему злоупотреблять приведением типов ...
Downgoat
тот же подход работает для py3 с 20 байтамиprint({repr(str):1})
dahrens
1
@dahrens для Py3: print({"'"*9:9})для 16 ( print{"'"*9:9}еще 14 в Py2)
Джонатан Аллан
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)
Натан Меррилл
4
Кроме того, meta.codegolf.stackexchange.com/questions/9688/…
Sanchises
1
Это считается разгрузкой решения для встроенной, которая является почти запрещенной лазейкой. Ключевое слово: почти
Джон Дворак
1
@JanDvorak Это не всегда лазейка, потому что есть случаи, когда интересно увидеть встроенный в использовании. Это одна из них.
Фэнъян Ван
1
Я не буду делать это против ваших явных желаний, но я согласен, что это не должно быть вики. Кроме того, текущий консенсус заключается в том, что флаги интерпретатора должны учитывать разницу между вызовами с флагом и без него, -nа также с учетом пробела для трех дополнительных байтов.
Деннис
31

Желе , 11 байт

“Ɠɼ'ẸẠḌȷżÑ»

Попробуйте онлайн!

Выход

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}
Деннис
источник
13
Не Рикролл.
Деннис
1
У него есть 6 согласных подряд дважды ( pwllgwи bwllll). Что даже это?
Стивен Х.
2
@ETHproductions Конечно, но мне нужно как минимум 9 писем, чтобы соблюсти ограничение. Все слова с 6+ буквами находятся в длинном словаре, поэтому не имеет значения, какое из них вы выберете.
Деннис
8
Подожди, у желе есть встроенный для этого ?
Чтение буфера
19

Блокнот, 7 нажатий клавиш

Если у вас компьютер под управлением Windows с программой «Блокнот», введите:

{"F5":0}

По крайней мере, на моем компьютере с Windows 7 это выглядит примерно так:

{"3:42 PM 10/25/2016":0}
ETHproductions
источник
1
@cat Это программа, а не язык программирования, но опять же, я считаю, что Vim такой же.
ETHproductions
2
Ну, Vim - это «язык» программирования, и в том, что он отвечает правилам PPCG (не в полноте Тьюринга), а также в полноте Тьюринга (по крайней мере, я вполне уверен)
кошка
1
@ Cat, я вижу. Я не уверен, что Блокнот завершен по Тьюрингу. Я сомневаюсь в этом, но возможно; В конце концов, /// это было доказано, и Блокнот вполне может воссоздать свою единственную функцию.
ETHproductions
1
Vim отличается от Notepad - вы можете сохранить скрипт и запустить его в редакторе. Там нет такой функции в блокноте. Таким образом, функции в Блокноте (элементарный поиск и замена, копирование и вставка), которые позволяют ему быть TC, каждый раз требуют навигации по диалогам - что означает больше нажатий клавиш.
Mego
1
@cat Да, извини, я имел в виду, что это было разрешено после нашего обсуждения.
ETHproductions
15

Java (JDK 10) , 20 байт

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

Попробуйте онлайн!

Выход

{"":3.3333333333333335}
Оливье Грегуар
источник
3
Ява является последним языком, который я ожидаю перегрузить +на 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?>}

Печатает хороший математический объект, который можно было бы почти притворить, полезен :

{"":2.718281828459}

Использует тот факт, что php печатает что-либо вне тегов дословно, чтобы сохранить на некоторых кавычках, M_Eбыла самой короткой достаточно длинной константой, которую я мог найти.

редактировать: сохранено один байт благодаря Линн. К сожалению, это больше не «хороший» математический объект.

user59178
источник
""является действительным ключом JSON.
Линн
14

JavaScript, 17 15 байт

Спасибо @Neil за это. Звоните без ввода.

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

Выходы {"undefined":0}

Старая версия, 16 байт

Спасибо @ kamoroso94 за -1 на этой версии

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

Выходы {"":9000000000}

jrich
источник
Вы можете превратить это в функцию стрелки, чтобы удалить 4 байта.
DanTheMan
1
У вас может быть пустой ключ? (например, удалить a)
Конор О'Брайен
_=>`{"a":${_}}`В результате {"a":undefined}получается ровно 15 символов. Отмечено, что вы не используете никакой ввод при вызове этой функции
Bassdrop Cumberwubwubwub
1
@BassdropCumberwubwubwub По совпадению, ваш код также 15 символов. Я не уверен , что undefinedявляется допустимым значением в формате JSON, но это легко фиксируется, сделав его имя свойства и использовать нулевое значение: _=>`{"${_}":0}`.
Нил
3
Удалите, aчтобы сделать ключ пустой строкой, допустимый ключ в JSON. На 1 байт меньше.
kamoroso94
12

Brainfuck, 50 байтов

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

Выходы {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. Предполагается, что интерпретатор имеет 8-битные ячейки и не ограничен слева. Попробуйте онлайн!

Sp3000
источник
11

Pyth - 5 байт

Печать {"'abcdefghijklmnopqrstuvwxyz'": 10}.

XH`GT

Попробуйте это онлайн здесь .

Maltysen
источник
JSON допускает только двойные кавычки
Downgoat
@ Downgoat ах, исправление для одного байта.
Maltysen
@ Downgoat исправлен.
Maltysen
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 символа длиннее, чем код.)

Попробуйте онлайн!

Благодаря:

  • ETHпродукция для повторного использования разделителей объектов как части ключа (-1 символ)

Образец прогона:

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

Просто чтобы сделать его более читабельным:

bash-4.3$ slashes.pl <<< '/a/{":1234}/aa' | jq ''
{
  ":1234}{": 1234
}
manatwork
источник
1
Это умный способ сохранить байты :-)
ETHproductions
2
Вы можете сохранить еще один с /a/{":1234}/aa(выходы {":1234}{":1234})
ETHproductions
Удивительно, @ETHproductions. Благодарю.
manatwork
7

R, 19 байт

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

Становится немного дольше, потому что нужно избегать кавычек \". Кроме того, он lhявляется одним из встроенных наборов данных Rи является (насколько мне известно) объектом с кратчайшим именем, содержащим 9 символов, необходимых для заполнения длины ключа. (правка: получается, что piработает со стандартной опцией, и я был побежден @JDL, который был достаточно умен, чтобы избегать использования одинарных кавычек, а не дополнительной обратной косой черты)

Описание lhв R-документации:

Регулярные временные ряды, дающие лютеинизирующий гормон в образцах крови с 10-минутными интервалами от человеческой женщины, 48 образцов.

это довольно неожиданное имя ключа, но эй, оно работает и выдает результат:

{" 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}")
Billywob
источник
1
Вы можете избежать обратной косой черты, используя одинарные кавычки в выражении R: cat('{"',lh,'":1}')как я делал выше (хотя я использовал piвместо lh). В поисках двухбуквенных переменных я наткнулся на функцию, о elкоторой я даже не подозревал. Может быть полезно в будущем ...
JDL
7

PowerShell 22 20 14 байт

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

Выход

{"":1099511627776}

Использование константы, определенной для 1 ТБ в байтах, для достижения предельного числа символов и значения статического целого числа, чтобы сделать для действительного json. Спасибо TimmyD за сокращение символов на 5 путем удаления некоторой избыточности.


Предыдущий пост 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}

Принимает целочисленный массив и создает пару ключ-значение для каждого. Соедините запятыми и оберните набором фигурных скобок.

Matt
источник
6

05AB1E , 9 байтов

К сожалению, 05AB1E не имеет словарного объекта, поэтому мы должны создать свой собственный.

’{"èÖ":7}

Попробуйте онлайн!

Выход

{"dictionaries":7}
Emigna
источник
6

Сетчатка, 11 байт

 
{"9$*R":1}

Выход

{"RRRRRRRRR":1}

Примечание: начальный символ новой строки важен, поскольку ничто не заменяется полученным результатом, я использовал неразрывный пробел, чтобы проиллюстрировать это!

Попробуйте онлайн!

Дом Гастингс
источник
5

V , 9 байт

i{"¹*":0}

Попробуйте онлайн!

Очень просто. Входит в режим вставки, вводит следующий текст:

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

Причина, по которой это так коротко, в том, что ¹повторяет следующий символ 9 раз.

DJMcMayhem
источник
Я ожидал 0 байтов один: P
Maltysen
1
@maltysen Я опубликовал это. Я удалил его, потому что он использовал одинарные кавычки вместо двойных ... :(
DJMcMayhem
5

JavaScript (ES6) + jQuery, 15 байт

Потому что JQuery.

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

Выходы {"function (a,b){return new n.fn.init(a,b)}":0}при вызове. Попробуйте это здесь:

ETHproductions
источник
1
Назначение - вывести что-то. без alert()вы ничего не выводите
нл-х
1
@ nl-x ОП отредактировал, чтобы уточнить, что функции, которые возвращают строку, разрешены.
ETHproductions
5

Дьялог АПЛ , 9 байт

JSONDMX

Попробуйте онлайн!

В чистом рабочем месте на моем компьютере результат

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

⎕JSON преобразовать в JSON

⎕DMX (общедоступный) Д iagnostic М essage Е х , как правило , объект

Адам
источник
4

брейкфук, 83 байта

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

Выходы {"333333333":3}

Вероятно, есть другое, более короткое решение, но я еще не нашел его.

Объяснение:

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

Попробуйте онлайн

DanTheMan
источник
4

PHP, 19 байт

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

Выход: {"387420489":1}

https://eval.in/665889

Спасибо manatwork за советы!

ʰᵈˑ
источник
1
Ваш вывод имеет длину 16 символов, а требование - 15. Так почему бы не убрать этот «H»?
manatwork
Кстати, с 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+"}"

Ungolfed & тестовый код:

Попробуй это здесь.

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) ).
Оливье Грегуар
1
Кроме того, вы можете сыграть в гольф 1 байт, используя в ""качестве ключа и в 1e7качестве значения. ""является действительным ключом при попытке в валидаторе.
Оливье Грегуар
2
@ OlivierGrégoire Хорошо, я удалю thisкод. Что касается ""с 1e7, это не будет работать, к сожалению. 1e6выходы 1000000.0, но 1e7выходы 1.0E7вместо.
Кевин Круйссен
1
О, моя ошибка, я не проверял.
Оливье Грегуар
4

R, 19 байт

Это работает в британском английском языке; это может потребовать +2 байта в других. (Изменить: вероятно, нет --- см. Комментарии.)

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

Я надеялся на что-нибудь умное (возможно, вытащив строку кода из ранее существовавшей функции, например q), но не смог ничего найти. Результат:

{" 3.141593 ":1}

Обратите внимание, что вам не нужно избегать двойных кавычек в R, если вы используете одинарные кавычки для кавычек в строке (и наоборот). Это поведение зависит от локали. Я ожидаю, что это будет работать и в американской английской локали.

Для этого также необходимо, чтобы значение по умолчанию было digitsне менее шести (что является заводской настройкой по умолчанию), и это scipenне менее -digits(заводская установка по умолчанию равна нулю).

JDL
источник
1
Что простите? R грамматика меняется с локалью?
кот
Да, какие символы нужно экранировать, зависит от того, options(quote)какие из них могут быть указаны пользователем, но по умолчанию, насколько я знаю, зависит от локали.
JDL
@ Cat Я думаю, это недоразумение. Существование options('quote') не задокументировано , изменение его не имеет заметного эффекта, и хотя я столкнулся с большим количеством махинаций в RI, сомневаюсь, что параметры времени выполнения изменят способ его анализа. Конечно, это может изменить вывод, но не в коде в этом ответе.
Конрад Рудольф
@ Конрад, ты можешь быть прав. Я думаю , что я имел в виду «useFancyQuotes» , который затрагивает только quote, и squoteт.д.
ЛЗЕ
4

Рубин, 19 байт

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

Выход:

{"1":387420489}
dkudriavtsev
источник
@NathanMerrill Исправлено
dkudriavtsev
1
Можете ли вы показать, что он выводит
curiousdannii
Вы не можете сохранить байт, удалив пробел после puts?
Оливер Ни
Я думаю, что ?1*9это все еще достаточно долго.
Ли W
@curiousdannii Готово
dkudriavtsev
3

Элемент , 18 байт

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

Попробуйте онлайн! Выходы{"a":387420489}

Это всего на три байта короче наивного решения. Первая половина выходных данных жестко запрограммирована (слишком много управляющих символов, чтобы сделать возможным любой другой подход), в то время как значение вычисляется, 9^9чтобы сделать число достаточно длинным.

PhiNotPi
источник
3

Perl 5, 16 15 байт

Использует метку времени unix момента запуска программы как содержимое одноэлементного объекта. Это дает действительный вывод, если вы запустите его позже 10:46:39 3 марта 1973 года . Но так как мы не можем вернуться назад во времени, это кажется законным.

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

Использует переменную FORMAT_TOP_HANDLE,$^ которая по умолчанию имеет значение STDOUT_TOP.

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

Запуск с -Eфлагом без дополнительных затрат.

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

Выходы длиной 16 байтов.

{"STDOUT_TOP":1}
simbabque
источник
RIP ответ, зависящий от времени :(
CalculatorFeline
@CalculatorFeline ху?
simbabque
3

Чеддер, 17 14 байтов

Сохранено 3 байта благодаря @ ConorO'Brien

->'{":1234}'*2

Возвращаемая анонимная функция {":1234}{":1234}, которая является допустимым объектом JSON:

{
  ":1234}{": 1234
}

Попробуйте онлайн!

ETHproductions
источник
3

Пакет Windows, 10 байт

{"%OS%":5}

Переменная окружения OSсодержит строку Windows_NT(во всех операционных системах Windows с 2000 года, согласно этому вопросу о переполнении стека)

Пеналоса
источник
@ETHproductions Упс
пенальоса
Это действительно выводит что-нибудь? Конечно, ответ Neil 's Batch есть, но я не могу вспомнить ни о каком неявном пакетном выводе.
manatwork
@manatwork Да, это так, поскольку эхо включено, текущая команда отображается, оценивая переменную ОС в процессе.
пенальоса
Ой. Так что на самом деле он пытается выполнить это, {"%OS%":5}как это было бы командой, и вы пользуетесь элементарной функцией трассировки? Это сложно.
manatwork
@ Manatwork Да, именно так.
пеналоса
3

HQ9 +, 15 байт

{"Quineland":0}

Выводит сам. Я думал, что 8-байтовый ответ будет возможным, например, так:

{":11QQ}

Это выводит {":11QQ}{":11QQ}, что является почти допустимым JSON, но 11QQне является допустимым значением.

HQ9 + не является допустимым языком программирования по стандартам PPCG, но OP допускает не-языки программирования.

ETHproductions
источник
1
Это абсолютно недействительно. Все материалы должны быть на допустимом языке программирования.
Mego
Это в основном сложность kolmo (в основном потому, что если он выводит что-то другое, он все равно считается), так что я думаю, что это может быть допустимо
Destructible Lemon
@DestructibleWatermelon Использование непрограммистского языка - это стандартная лазейка .
Mego
@Mego OP теперь явно разрешает не-языки программирования
ETHproductions