Wydrukuj trochę JSON


74

To wyzwanie jest proste, ale miejmy nadzieję, że istnieje wiele sposobów, aby się do niego zbliżyć:

Musisz wydrukować / zwrócić prawidłowy obiekt JSON o długości co najmniej 15 znaków, nie licząc niepotrzebnych białych znaków. Twój program powinien działać bez żadnych danych wejściowych.

Dla zachowania przejrzystości obiekt JSON zaczyna się i kończy nawiasami klamrowymi {}i zawiera zero lub więcej par klucz: wartość oddzielonych przecinkami. Pełna specyfikacja JSON znajduje się na stronie json.org , a dane wyjściowe kodu muszą przejść przez ten walidator .

Dlatego też każdy z poniższych elementów nie jest ważna:

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

Jednak dodaje , że ważne:

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

W tym wyzwaniu dozwolone są języki nieprogramowe. Możesz zwrócić ciąg z funkcji lub wydrukować go. To jest , więc odpowiedz na nie, używając możliwie najmniejszego kodu!


1
Podoba mi się różnorodność odpowiedzi na ten temat
Robert Fraser

Hmmmm, twoja definicja JSON jest ograniczona. Co z kodem, który wysyła prawidłowy JSON, ale nie generuje nawiasów klamrowych?
Konijn

4
@Konijn, jak powiedziałem, musi to być prawidłowy obiekt JSON . Obiekt jest zdefiniowany przez nawiasy klamrowe.
Nathan Merrill,

Rozumiem, ze stresem na obiekt;)
Konijn

1
@Masterzagh Niestety, rodzimy obiekt JS się nie liczy. „Możesz zwrócić ciąg z funkcji lub wydrukować go”
Nathan Merrill,

Odpowiedzi:


72

Python 2, 14 bajtów

print{`str`:1}

Wyjścia:

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

Backticks uzyskują reprezentację ciągu w Pythonie 2. Zwykle dane wyjściowe tworzą pojedyncze cudzysłowy, które Python rozpoznaje jako ograniczające ciąg, ale JSON nie. Ale Sp3000 zauważa, że ​​podczas tworzenia typu, opis typu zawiera już pojedyncze cudzysłowy, co wymusza cudzysłowy zewnętrzne jako podwójne.


20
@ Sp3000 To okropnie piękne.
xnor

6
I myślałem, że JS jest jedynym językiem, w którym naprawdę można nadużywać typu casting w ...
Downgoat,

to samo podejście działa dla py3 z 20 bajtamiprint({repr(str):1})
dahrens

1
@dahrens dla Py3: print({"'"*9:9})dla 16 ( print{"'"*9:9}to kolejne 14 w Py2)
Jonathan Allan

37

jq, 6 znaków

(3-znakowy kod + 3-znakowa opcja wiersza poleceń).

env

CW, ponieważ jestem pewien, że nie jest to odpowiedź, na którą chciałeś pozwolić.

Przykładowy przebieg:

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

(Wydajność wyraźnie skrócona.)


6
To zdecydowanie poprawne zgłoszenie (i nie ma potrzeby CW)
Nathan Merrill,


1
Jest to liczone jako odciążanie rozwiązania wbudowanego, co jest prawie zakazaną luką. Słowo kluczowe: prawie
John Dvorak

1
@JanDvorak Nie zawsze jest to luka, ponieważ są przypadki, w których interesujące jest użycie wbudowanego. To jest jeden z nich.
Fengyang Wang,

1
Nie zrobię tego wbrew twoim wyraźnym życzeniom, ale zgadzam się, że nie należy tego robić. Ponadto obecny konsensus jest taki, że flagi interpretera muszą liczyć różnicę między wywołaniem z flagą i bez flagi, -na więc z kontem spacji dla trzech dodatkowych bajtów.
Dennis

31

Galaretka , 11 bajtów

“Ɠɼ'ẸẠḌȷżÑ»

Wypróbuj online!

Wynik

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
Ma dwa spółgłoski z rzędu dwa razy ( pwllgwi bwllll). Co to w ogóle jest?
Steven H.,

2
@ETHproductions Jasne, ale potrzebuję co najmniej 9 liter, aby zachować limit. Wszystkie słowa z ponad 6 literami są w długim słowniku, więc nie ma znaczenia, który wybierzesz.
Dennis


8
Czekaj, Jelly został wbudowany do tego ?
Bufor

19

Notatnik, 7 klawiszy

Jeśli masz komputer z systemem Windows i programem Notatnik, wpisz:

{"F5":0}

Przynajmniej na moim komputerze z systemem Windows 7 daje to coś takiego:

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

1
@cat To program, nie język programowania, ale z drugiej strony uważam, że Vim jest taki sam.
ETHprodukcje

2
Cóż, Vim jest „językiem” programowania, zarówno dlatego, że spełnia zasady PPCG (nie kompletność Turinga), ale także w kompletności Turinga (przynajmniej jestem całkiem pewien)
kot

1
@ kot Widzę. Nie jestem pewien, czy Notatnik jest gotowy do Turinga. Wątpię, ale może; w końcu udowodniono, że ///, a Notatnik może całkiem dobrze odtworzyć swoją pojedynczą funkcję.
ETHprodukcje

1
Vim różni się od Notatnika - możesz zapisać skrypt i uruchomić go w edytorze. W Notatniku nie ma takiej funkcji. Tak więc funkcje Notatnika (podstawowe wyszukiwanie i zamiana, kopiowanie i wklejanie), które pozwalają mu być TC, wymagają każdorazowo nawigacji w oknach dialogowych - co oznacza więcej naciśnięć klawiszy.
Mego

1
@ kot Tak, przepraszam, miałem na myśli, że jest to dozwolone od naszej dyskusji.
ETHprodukcje

15

Java (JDK 10) , 20 bajtów

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

Wypróbuj online!

Wynik

{"":3.3333333333333335}

3
Java jest ostatnim językiem, którego spodziewałbym się przeładować +do String.concat>: ^ (
cat

3
@cat Tak, to właściwie jedyne istniejące przeciążenie. Chodzi o to, że nawet nie przeciąża String.concat! Jeśli zaznaczysz kodu bajtowego, to co kompiluje Java na: ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). Nie martw się, to wciąż najdłuższa odpowiedź na tej stronie, z wyjątkiem Brainfuck i Java 7. Tak więc Java utrzymuje swoją rangę;)
Olivier Grégoire,

14

PHP, 14 13 bajtów

{"":<?=M_E?>}

Wyświetla ładny obiekt matematyczny, który można niemal udawać, że jest przydatny :

{"":2.718281828459}

Wykorzystuje fakt, że php drukuje wszystko poza tagami dosłownie, aby zaoszczędzić na niektórych znakach cudzysłowu, M_Ebyła najkrótszą wystarczająco długą stałą, jaką mogłem znaleźć.

edycja: zapisany jeden bajt dzięki Lynn. Niestety nie jest to już „miły” obiekt matematyczny.


""jest prawidłowym kluczem JSON.
Lynn,

14

JavaScript, 17 15 bajtów

Dzięki @Neil za ten. Zadzwoń bez wprowadzania danych.

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

Wyjścia {"undefined":0}

Stara wersja, 16 bajtów

Dzięki @ kamoroso94 za -1 w tej wersji

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

Wyjścia {"":9000000000}


Możesz to zmienić w funkcję strzałki, aby usunąć 4 bajty.
DanTheMan,

1
Czy możesz mieć pusty klucz? (np. usuń a)
Conor O'Brien

_=>`{"a":${_}}`daje w wyniku {"a":undefined}dokładnie 15 znaków. Zauważ, że nie używasz żadnych danych wejściowych podczas wywoływania tej funkcji
Bassdrop Cumberwubwubwub 25.10.16

1
@BassdropCumberwubwubwub Przypadkowo twój kod ma również 15 znaków. Nie jestem pewien, że undefinedjest to ważna wartość w formacie JSON, ale to łatwo ustalony przez co jej nazwę właściwości i stosując zerową wartość: _=>`{"${_}":0}`.
Neil,

3
Usuń, aaby klucz był pustym ciągiem, poprawnym kluczem w JSON. 1 mniej bajtów.
kamoroso94

12

Brainfuck, 50 bajtów

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

Wyjścia {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. Zakłada interpreter, który ma 8-bitowe komórki i jest nieograniczony po lewej stronie. Wypróbuj online!




9

Pyth, 7 bajtów

.d],`G0

Tworzy słownik zawierający pojedynczy klucz "'abcdefghijklmnopqrstuvwxyz'"i wartość 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

Partia, 16 bajtów

Wydruki {"Windows_NT":0}.

@echo {"%OS%":0}

Czy możesz dodać (przykładowy) wynik?
grooveplex

8

///, 15 14 znaków

/a/{":1234}/aa

(Co najmniej wynik jest o 1 2 znaki dłuższy niż kod.)

Wypróbuj online!

Dzięki:

  • Produkty ETH do ponownego użycia ograniczników obiektów jako części klucza (znak -1)

Przykładowy przebieg:

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

Żeby był bardziej czytelny:

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

1
To sprytny sposób na oszczędzanie bajtów :-)
ETHproductions

2
Możesz zapisać kolejny za pomocą /a/{":1234}/aa(wyjść {":1234}{":1234})
ETHproductions

Niesamowite, @ETHproductions. Dzięki.
manatwork

7

R, 19 bajtów

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

Staje się nieco dłuższy, ponieważ trzeba uciec od cytatów \". Co więcej, lhjest jednym z wbudowanych zestawów danych Ri jest (o ile wiem) obiektem o najkrótszej nazwie, która zawiera 9 znaków potrzebnych do wypełnienia długości klucza. (edycja: okazuje się pi, że robi to samo ze standardową opcją i zostałem pokonany przez @JDL, który był wystarczająco sprytny, aby uciec używając pojedynczych cudzysłowów zamiast dodatkowych ukośników odwrotnych)

Opis lhw dokumentacji R to:

Regularne szeregi czasowe z podaniem hormonu luteinizującego w próbkach krwi w odstępach 10-minutowych od ludzkiej kobiety, 48 próbek.

która jest raczej nieoczekiwaną nazwą klucza, ale hej, działa i generuje dane wyjściowe:

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

Odpowiedź można porównać do wypełnienia klawisza „losowymi” literami, aby uzyskać wynik co najmniej 15 znaków (24 bajty):

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

1
Możesz uniknąć uciekających ukośników odwrotnych, używając pojedynczych cudzysłowów w wyrażeniu R: cat('{"',lh,'":1}')tak jak to zrobiłem powyżej (chociaż użyłem pizamiast lh). W poszukiwaniu zmiennych dwuliterowych natknąłem się na funkcję, o elktórej istnieniu nigdy nie wiedziałem. Może być przydatny w przyszłości ...
JDL,

7

PowerShell 22 20 14 bajtów

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

Wynik

{"":1099511627776}

Użycie stałej zdefiniowanej dla 1 TB w bajtach w celu osiągnięcia limitu znaków i wartości statycznej liczby całkowitej w celu uzyskania prawidłowego pliku Json. Dzięki TimmyD za zmniejszenie postaci o 5 poprzez usunięcie nadmiarowości.


Wcześniej Post 40 bajtów

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

Wynik

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

Pobiera tablicę liczb całkowitych i tworzy dla każdej pary parę klucz-wartość. Połącz przecinkami i zawiń zestawem nawiasów klamrowych.



6

Siatkówka, 11 bajtów

 
{"9$*R":1}

Wynik

{"RRRRRRRRR":1}

Uwaga: wiodący nowy wiersz jest znaczący, ponieważ nic nie jest zastąpione wynikowym wyjściem, aby to zilustrować, użyłem nieprzerwanej spacji!

Wypróbuj online!


5

V , 9 bajtów

i{"¹*":0}

Wypróbuj online!

Bardzo proste. Przechodzi w tryb wstawiania, wprowadza następujący tekst:

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

Jest tak krótki, ponieważ ¹powtarza następujący znak 9 razy.


Oczekiwałem 0-bajtowego: P
Maltysen

1
@maltysen Zrobiłem to.
Usunąłem

5

JavaScript (ES6) + jQuery, 15 bajtów

Ponieważ jQuery.

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

Wyjścia {"function (a,b){return new n.fn.init(a,b)}":0}po wywołaniu. Wypróbuj tutaj:


1
Zadanie polega na wydaniu czegoś. bez alert()ciebie nic nie wyprowadzasz
nl-x

1
@ nl-x OP dokonał edycji, aby wyjaśnić, że funkcje zwracające ciąg są dozwolone.
ETHproductions

5

Dyalog APL , 9 bajtów

JSONDMX

Wypróbuj online!

Rezultatem jest czysty obszar roboczy na moim komputerze

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

⎕JSON przekonwertować na JSON

⎕DMX przycisk (powszechnie dostępny) D iagnostic M essage e x tendencję przedmiotu


4

pieprzenie mózgu, 83 bajty

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

Wyjścia {"333333333":3}

Prawdopodobnie istnieje inne krótsze rozwiązanie, ale jeszcze go nie znalazłem.

Wyjaśnienie:

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

Wypróbuj online



4

Java 7, 36 bajtów

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

Java 8, 21 bajtów

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

Kod niepoznany i testowy:

Wypróbuj tutaj.

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

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

Wyjście (długość 15):

{"a":1000000.0}

Drugie rozwiązanie daje błąd
Numberknot

1
„długość waha się między 15 a 16 w zależności od skrótu”. Skróty mogą technicznie mieć długość tak małą jak 1( patrzSystem.identityHashCode(Object) ).
Olivier Grégoire,

1
Możesz także zagrać w golfa 1 bajt, używając ""jako klucza i 1e7wartości. ""jest poprawnym kluczem przy próbie w walidatorze.
Olivier Grégoire,

2
@ OlivierGrégoire Ok, usunę thiskod. Co do ""z 1e7, to niestety nie będzie działać. 1e6wyjścia 1000000.0, ale zamiast tego 1e7wyjścia 1.0E7.
Kevin Cruijssen

1
Och, mój błąd, nie sprawdziłem.
Olivier Grégoire,

4

R, 19 bajtów

Działa to w języku angielskim brytyjskim; w innych może wymagać +2 bajtów. (Edycja: prawdopodobnie nie wyświetla komentarzy).

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

Miałem nadzieję na coś sprytnego (być może wyciągnięcie linii kodu z wcześniej istniejącej funkcji, jak q), ale nic nie znalazłem. Wynik:

{" 3.141593 ":1}

Zauważ, że nie musisz uciekać podwójnych cudzysłowów w R, jeśli używasz pojedynczych cudzysłowów do cytowania łańcucha (i odwrotnie). To zachowanie jest jednak zależne od ustawień regionalnych. Spodziewałbym się też, że zadziała również w amerykańskim języku angielskim.

Wymaga to również, aby domyślną digitsopcją było co najmniej sześć (co jest fabrycznie nowym ustawieniem domyślnym), a scipento co najmniej -digits(fabrycznie nowe ustawienie to zero).


1
Przepraszam, co? Gramatyka R zmienia się w zależności od ustawień regionalnych?
kot

Tak, które znaki wymagają zmiany znaczenia, zależą od tego, options(quote)który użytkownik może określić, ale domyślnie zależą od ustawień regionalnych.
JDL

@cat Myślę, że to nieporozumienie. Istnienie options('quote') nie jest udokumentowane , zmiana go nie ma zauważalnego efektu i chociaż natknąłem się na dużą liczbę shenaniganów w RI, wątpię, czy opcje środowiska wykonawczego zmieniłyby sposób jego analizy. Może to oczywiście zmienić wynik - ale nie w kodzie w tej odpowiedzi.
Konrad Rudolph

@Konrad, możesz mieć rację. Myślę, że miał na myśli „useFancyQuotes”, które dotyczy tylko quote, squoteitp
JDL


3

Element , 18 bajtów

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

Wypróbuj online! Wyjścia{"a":387420489}

To tylko trzy bajty krótsze niż naiwne rozwiązanie. Pierwsza połowa wyniku jest zakodowana na stałe (zbyt wiele znaków zmiany znaczenia, aby możliwe było zastosowanie innego podejścia), podczas gdy wartość jest obliczana jako 9^9wystarczająca liczba.


3

Perl 5, 16 15 bajtów

Używa uniksowego znacznika czasu w chwili uruchomienia programu jako zawartości obiektu jednoelementowego. Daje prawidłowe dane wyjściowe, jeśli uruchomisz je później niż 10:46:39 3 marca 1973 r . Ale ponieważ nie możemy cofnąć się w czasie, wydaje się to uzasadnione.

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

Wykorzystuje zmienną FORMAT_TOP_HANDLE$^ która jest domyślnie ustawiona na STDOUT_TOP.

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

Uruchom z -Eflagą bez dodatkowych kosztów.

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

Dane wyjściowe mają długość 16 bajtów.

{"STDOUT_TOP":1}

Odpowiedź zależna od czasu RIP :(
CalculatorFeline

@CalculatorFeline hu?
simbabque

3

Cheddar, 17 14 bajtów

Zaoszczędź 3 bajty dzięki @ ConorO'Brien

->'{":1234}'*2

Zwraca anonimowa funkcja {":1234}{":1234}, która jest poprawnym obiektem JSON:

{
  ":1234}{": 1234
}

Wypróbuj online!


3

Pakiet Windows, 10 bajtów

{"%OS%":5}

Zmienna środowiskowa OSzawiera ciąg znaków Windows_NT(we wszystkich systemach operacyjnych Windows od 2000 r., Zgodnie z tym pytaniem dotyczącym przepełnienia stosu)


@ETHproductions Ups
penalosa

Czy to rzeczywiście coś daje? Neil „s Batch odpowiedź na pewno nie, ale nie pamiętam, o dowolnej mocy niejawny wsadowym.
manatwork

@manatwork Tak, robi to, ponieważ echo jest włączone, bieżące polecenie jest echo, oceniając zmienną systemu operacyjnego w tym procesie.
penalosa

O. Więc tak naprawdę próbuje to wykonać, {"%OS%":5}tak jakby to było polecenie, a Ty korzystasz z podstawowej funkcji śledzenia? To trudne.
manatwork

@manatwork Tak, dokładnie.
penalosa

3

HQ9 +, 15 bajtów

{"Quineland":0}

Wyprowadza się sam. Myślałem, że 8-bajtowa odpowiedź będzie możliwa:

{":11QQ}

Dane wyjściowe {":11QQ}{":11QQ}, które są prawie poprawne JSON, ale11QQ nie jest prawidłową wartością.

HQ9 + nie jest poprawnym językiem programowania według standardów PPCG, ale PO zezwolił na języki inne niż programowanie.


1
To absolutnie nie jest poprawne. Wszystkie zgłoszenia muszą być w poprawnym języku programowania.
Mego

Jest to głównie złożoność kolmo (głównie dlatego, że jeśli wyprowadza coś innego, to wciąż się liczy), więc myślę, że może to być poprawne
Destructible Lemon

@DestructibleWatermelon Używanie języka nieprogramowego jest standardową luką .
Mego

@Mego OP wyraźnie teraz zezwala na języki
nieprogramowe
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.