Надрукуйте деякі 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 зауважує, що під час строфікації типу опис типу вже містить одиничні лапки, що змушує зовнішні лапки бути подвійними лапками.


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)
Натан Меррілл


1
Це розцінюється як вивантаження рішення на вбудований, який є майже забороненою лазівкою. Ключове слово: майже
Джон Дворак

1
@JanDvorak Це не завжди лазівка, тому що є випадки, коли цікаво бачити вбудований б / в. Це одна з них.
Fengyang Wang

1
Я не зроблю це проти ваших явних побажань, але я згоден, що це повинно бути невирішеним. Крім того, поточний консенсус полягає в тому, що прапори інтерпретатора повинні рахувати різницю між викликом із прапором та без нього, -nа пробіл - на три додаткові байти.
Денніс

31

Желе , 11 байт

“Ɠɼ'ẸẠḌȷżÑ»

Спробуйте в Інтернеті!

Вихід

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
У ній є 6 приголосних двічі ( pwllgwі bwllll). Що навіть це?
Стівен Х.

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 Я бачу. Я не впевнений, чи блокнот завершений Тьюрінгом. Я сумніваюся в цьому, але можливо; зрештою, /// було доведено так, і Блокнот може досить добре відтворити свою єдину особливість.
ETHproductions

1
Vim відрізняється від «Блокнота» - ви можете зберегти сценарій і запустити його в редакторі. У Блокноті такої функції немає. Таким чином, функції в Блокноті (рудиментарний пошук-заміна, копіювання та вставлення), що дозволяють йому бути ТС, потребують щоденних навігаційних діалогів - а це означає більше натискань клавіш.
Мего

1
@cat Так, вибачте, я мав на увазі, що це було дозволено з моменту нашої дискусії.
ETHproductions

15

Java (JDK 10) , 20 байт

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

Спробуйте в Інтернеті!

Вихід

{"":3.3333333333333335}

3
Java - це остання мова, яку я б очікував перевантажити +на String.concat>: ^ (
кіт

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було найкоротшою достатньо довгою константою, яку я міг знайти.

редагувати: збережений один байт завдяки Лінн. На жаль, це вже не «приємний» математичний об’єкт.


""є дійсним ключем JSON.
Лінн

14

JavaScript, 17 15 байт

Завдяки @Neil для цього. Телефонуйте без вводу.

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

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

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

Завдяки @ kamoroso94 за -1 у цій версії

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

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


Ви можете перетворити це на функцію стрілки, щоб видалити 4 байти.
DanTheMan

1
Ви можете мати порожній ключ? (наприклад, видалити a)
Conor O'Brien

_=>`{"a":${_}}`результатів {"a":undefined}, що становить рівно 15 символів. Помічено, що ви не використовуєте жодного входу під час виклику цієї функції
Bassdrop Cumberwubwwwwub

1
@BassdropCumberwubwubwub Випадково ваш код також містить 15 символів. Я не впевнений , що undefinedє допустимим значенням в форматі JSON, але це легко фіксується, зробивши його ім'я властивості і використовувати нульове значення: _=>`{"${_}":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 символи довший за код.)

Спробуйте в Інтернеті!

Завдяки:

  • Продукти ETH для повторного використання роздільників об'єктів як частини ключа (-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(виходів {":1234}{":1234})
ETHproductions

Дивовижні, @ETHproductions. Дякую.
манатство

7

R, 19 байт

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

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

Опис lhR-документації:

Регулярний часовий ряд давав лютеїнізуючий гормон у зразках крові з інтервалом у 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}")

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}

Бере цілий масив і створює пару ключових значень для кожного. З’єднайте комами і обмотайте набором фігурних дужок.



6

Сітківка, 11 байт

 
{"9$*R":1}

Вихід

{"RRRRRRRRR":1}

Примітка: провідний новий рядок є важливим, оскільки нічого не замінюється результатом, який я отримав, я використав непробивний простір для ілюстрації цього!

Спробуйте в Інтернеті!


5

V , 9 байт

i{"¹*":0}

Спробуйте в Інтернеті!

Дуже прямо. Входить у режим вставки, вводить такий текст:

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

Причина цього така коротка, тому що ¹повторюється наступний символ 9 разів.


Я очікував 0 байт: 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 ОП відредаговано, щоб уточнити, що функції, що повертають рядок, дозволені.
ETHproductions

5

Діалог APL , 9 байт

JSONDMX

Спробуйте в Інтернеті!

У чистому робочому просторі на моєму ПК результат є

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

⎕JSON конвертувати в JSON

⎕DMX (загальнодоступний) Д іагностичний М есаж Е х тенденційний об’єкт


4

мозковий ебать, 83 байти

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

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

Можливо, є ще одне коротше рішення, але я його ще не знайшов.

Пояснення:

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

Спробуйте в Інтернеті


4

PHP, 19 байт

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

Вихід: {"387420489":1}

https://eval.in/665889

Дякуємо манантській роботі за поради!


1
Вихід має тривалість 16 символів, тоді як вимога - 15. То чому б не зняти цю "H"?
манатура

BTW, оскільки у 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}

Друге рішення дає помилку
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(заводський-свіжий за замовчуванням дорівнює нулю).


1
Вибачте, що? Граматика R змінюється з мовою?
кіт

Так, які символи потребують уникнення, залежить від того, options(quote)який може бути визначений користувачем, але за замовчуванням, наскільки я знаю, залежить локаль.
JDL

@cat Я думаю, що це непорозуміння. Існування options('quote') не задокументоване , його зміна не має помітного ефекту, і, хоча я натрапив на велику кількість шенанігів у РІ, сумніваюся, що варіанти виконання можуть змінити спосіб його аналізу. Це може змінити результат, звичайно, але не в коді в цій відповіді.
Конрад Рудольф

@Konrad, ти можеш мати рацію. Я думаю , що я мав в виду «useFancyQuotes» , який зачіпає тільки quote, і squoteт.д.
ЛЗЕ


3

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

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

Спробуйте в Інтернеті! Виходи{"a":387420489}

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


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}

Відповідь часу на RIP :(
CalculatorFeline

@CalculatorFeline hu?
simbabque


3

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

{"%OS%":5}

Змінна середовища OSмістить рядок Windows_NT(на всіх операційних системах Windows з 2000 року, відповідно до цього питання щодо переповнення стека)


@ETHproductions На жаль
penalosa

Це насправді щось виводить? Пакетна відповідь Ніла , безумовно, є, але не можу згадати жодного неявного пакетного виводу.
манатура

@manatwork Так. Так, оскільки увімкнено ехо, поточна команда лунає, оцінюючи змінну ОС у процесі.
penalosa

Ой. Тож насправді він намагається виконати це, {"%OS%":5}як це було б командою, і ви користуєтеся елементарною функцією відстеження? Це хитро.
манатство

@manatwork Так, саме так.
пеналоса

3

HQ9 +, 15 байт

{"Quineland":0}

Виводить себе. Я думав, що 8-байтова відповідь буде можливою, наприклад:

{":11QQ}

Це виводи {":11QQ}{":11QQ}, що є майже дійсним JSON, але 11QQне є дійсним значенням.

HQ9 + не є дійсною мовою програмування за стандартами PPCG, але ОП дозволила використовувати мови непрограмування.


1
Це абсолютно не вірно. Усі подання повинні бути дійсною мовою програмування.
Мего

Це здебільшого складність колмо (здебільшого, тому що якщо вона виводить щось інше, це все-таки рахується), тож я думаю, що це може бути дійсним
Руйнуючий лимон

@DestructibleWatermelon Використання мови, яка не програмується, є стандартною лазівкою .
Мего

@Mego OP прямо зараз дозволив мови, які не програмують
ETHproductions
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.