Wizualizuj zagnieżdżoną tablicę


15

Otrzymasz zagnieżdżoną tablicę. Twój program musi wizualizować tablicę.


Ale jak?

Załóżmy na przykład, że mamy zagnieżdżoną tablicę, np [["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"].

Tę zagnieżdżoną tablicę można wizualizować jako:

->1
->2
-->1
-->2
->3
>4
---->5
>6

Przykłady

Input 1:
["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]
Output 1:
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

Input 2:
[["1","2"],["3","4"]]
Output 2:
->1
->2
->3
->4

Zasady

  • Możesz użyć ciągu znaków (lub innych typów, które działają jak tablica zagnieżdżona) jako danych wejściowych.
  • Maksymalny poziom „warstw” wynosi 2 ^ 32-1.

Czy musi mieć tę dokładną wizualizację?
penalosa

@mnbvc Tak, chyba że zmuszę to zrobić, ludzie zaczną często przekręcać I / O. Uwierz mi, próbowałem.
Matthew Roh

Czuję, że siatkówka to wygra.
Magic Octopus Urn

1
Czy są jakieś ograniczenia dotyczące znaków, które mogą pojawiać się w łańcuchach?
Martin Ender

Dodatkowe powiązane pytania 1 , 2
AdmBorkBork

Odpowiedzi:


12

APL, 32 bajty

{1=≡⍺:⎕←⍺,⍨⍵↑1↓⍵/'->'⋄⍺∇¨⍵+1}∘0

Test:

      r
┌────┬─────────────────────────────────────────────────────────────────────────────────────────┐
│Atom│┌──────┬──────────────────────────────┬───────┬────────────────────────────────┬────────┐│
│    ││Proton│┌────────┬────────┬──────────┐│Neutron│┌────────┬──────────┬──────────┐│Electron││
│    ││      ││Up Quark│Up Quark│Down Quark││       ││Up Quark│Down Quark│Down Quark││        ││
│    ││      │└────────┴────────┴──────────┘│       │└────────┴──────────┴──────────┘│        ││
│    │└──────┴──────────────────────────────┴───────┴────────────────────────────────┴────────┘│
└────┴─────────────────────────────────────────────────────────────────────────────────────────┘
      {1=≡⍺:⎕←⍺,⍨⍵↑1↓⍵/'->'⋄⍺∇¨⍵+1}∘0 ⊢ r 
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

Wyjaśnienie:

  • {... }∘0: uruchom następującą funkcję 0związaną z :
    • 1=≡⍺:: jeśli wejście ma głębokość 1 (tj. tablica, która nie zawiera innych tablic):
      • ⍵/'->': utwórz ciąg zawierający -s i >s,
      • 1↓: upuść pierwszy element,
      • ⍵↑: i weź pierwsze elementy. Daje to ciąg zawierający ⍵-1myślniki i jeden >.
      • ⍺,⍨: dołącz do niego dane wejściowe,
      • ⎕←: i wyślij to na ekran
    • : Inaczej,
      • ⍺∇¨⍵+1: dodaj 1 i zastosuj funkcję do każdej zagnieżdżonej tablicy

5
Zaraz, czy to wymaga wkładu w tej ascii-artowej formie?
Rɪᴋᴇʀ

4
@Riker: Nie, wymaga normalnej zagnieżdżonej tablicy, jednak w ten sposób Dyalog APL wyświetla zagnieżdżoną tablicę i (myślałem) pokazuje, co się dzieje. Możesz to zbudować pisząc np ('Atom' ('Proton' ('Up Quark' 'Up Quark' 'Down Quark') 'Neutron' ('Up Quark' 'Down Quark' 'Down Quark') 'Electron')).
marinus

9
Ah, dobrze. To wyjaśnia. Nieco zawiedziony teraz chociaż ....
Rɪᴋᴇʀ


7

Mathematica, 58 57 56 bajtów

Dziękujemy Gregowi Martinowi za uratowanie 1 bajtu.

Dzięki ngenisis za oszczędność 1 bajtu.

MapIndexed[Print[Table["-",Tr[1^#2]-1]<>">",#]&,#,{-1}]&

47
Witamy w PPCG! Powinieneś wiedzieć, że odpowiedzi, które zawierają mało wyjaśnień lub nie zawierają żadnych wyjaśnień, są automatycznie oznaczane przez system i trafiają do kolejki przeglądu niskiej jakości . Może to spowodować usunięcie Twojej odpowiedzi. Pamiętaj, że jeśli masz kilka usuniętych odpowiedzi, możesz otrzymać tymczasowe zawieszenie. Tylko trochę do góry!
Stewie Griffin

20
@StewieGriffin Dzięki za ciepłe powitanie, będę o tym pamiętać!
Martin Ender

6
@StewieGriffin witasz sitemod? Co tu się dzieje? Czy to wewnętrzny żart? #confused I dobra wiosna dla was, jeśli jesteście na północy.
Mindwin

4
@Mindwin: Stack Exchange ma filtr zaprojektowany do wychwytywania odpowiedzi, które raczej nie będą pomocne. Ten rodzaj postu (tytuł + krótki kod, bez komentarza) może powodować fałszywe alarmy, ponieważ wygląda bardzo podobnie do postu bez wysiłku na komputerze (a komentarz Stewie Griffin zawiera link do zrzutu ekranu, który wskazuje że w rzeczywistości zdarzyło się fałszywe pozytywne; to wyśmiewa sytuację). Oto przykład innego wpisu, który został złapany w filtrze.

8
@Titus Chciałbym dodać jeden, ale nie chcę unieważniać komentarza Stewie. :(
Martin Ender

6

Java 7, 153 141 114 bajtów

String r="";<T,S>S c(S s,T o){for(T x:(T[])o)if(x instanceof Object[])c("-"+s,x);else r+=s+">"+x+"\n";return(S)r;}

-39 bajtów dzięki @ Barteks2x

Wyjaśnienie:

String r="";                         // Result String outside the method / on class-level
<T,S> S c(S s, T o){                 // Recursive Method with generic String and Object parameters and String return-type
  for(T x : (T[])o)                  //  Loop over the input-array
    if(x instanceof Object[])        //   If the current item is an array itself:
      c("-"+s, x);                   //    Recursive method-call with this array
    else                             //   Else:
      r += s+">"+x+"\n";             //    Append return-String with stripes String-input, ">", current item, and a new-line
                                     //  End of loop (implicit / single-line body)
  return (S)r;                       //  Return the result-String
}                                    // End of method

Kod testowy:

Wypróbuj tutaj.

class M{
  String r="";<T,S>S c(S s,T o){for(T x:(T[])o)if(x instanceof Object[])c("-"+s,x);else r+=s+">"+x+"\n";return(S)r;}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c("", new Object[]{new Object[]{1,2},new Object[]{new Object[]{1,2},3},4,new Object[]{new Object[]{new Object[]{new Object[]{5}}}},6}));
    m.r = "";
    System.out.println(m.c("", new Object[]{"Atom",new Object[]{"Proton",new Object[]{"Up Quark","Up Quark","Down Quark"}},new Object[]{"Neutron",new Object[]{"Up Quark","Up Quark","Down Quark"}},"Electron"}));
  }
}

Wynik:

->1
->2
-->1
-->2
->3
>4
---->5
>6

>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Up Quark
-->Down Quark
>Electron

1
Możesz go nieco skrócić (143 lub nawet 142), używając operatora trójskładnikowego, for(int j=i;j-->0;r+="-");aby zrobić to, co robi następny wiersz, i używając ogólnego argumentu zamiast Object []: String r="";<T>String c(int i,T[] o){for(T x:o)if(x instanceof Object[])c(i+1,(T[])x);else for(int j=i;j-->=0;r+=j<0?">"+x+"\n":"-");return r;} I nawet 1 znak mniej, jeśli przekazujesz 1 zamiast 0 jako pierwszy argument jest w porządku.
barteks2x

Znalazłem sposób, aby go skrócić, usuwając [] z ogólnego argumentu, zapisuje dodatkowe 2 znaki (ale nie może edytować komentarza po> 5 minutach)
barteks2x

@ Barteks2x Thanks! -12 bajtów dzięki tobie. :) Btw, usunięcie []z parametru, aby zapisać 1 dodatkowy bajt, powoduje błąd. Zobacz błąd tutaj w > Debuguj po uruchomieniu.
Kevin Cruijssen

String r="";<T>String c(int i,T a){for(T x:(T[])a)if(x instanceof Object[])c(i+1,x);else for(int j=i;j-->0;r+=j<1?">"+x+"\n":"-");return r;}to działa. Możesz również wykonać podobną ogólną sztuczkę z łańcuchem, aby zapisać dodatkowy bajt, ale wymaga albo zapisania wyniku w zmiennej przed wydrukowaniem, albo jawnego rzutowania (niejednoznaczne wywołanie metody):String r="";<T,S>S c(int i,T a){for(T x:(T[])a)if(x instanceof Object[])c(i+1,x);else for(int j=i;j-->0;r+=j<1?">"+x+"\n":"-");return(S)r;}
barteks2x

1
Nie jestem pewien, czy jest to uważane za dozwolone, ale 114 bajtów tutaj, z pustego łańcucha jako argumentu zamiast zera (może być mniej, jeśli 1 znak „>” jest dozwolony jako argument) String r="";<T,S>S c(S p,T a){for(T x:(T[])a)if(x instanceof Object[])c("-"+p,x);else r+=p+">"+x+"\n";return(S)r;}oraz wymóg ciąg oddanych na typ zwracany przy wywołaniu zniknęło.
barteks2x

6

PHP, 77 74 73 bajtów

4 bajty zapisane dzięki @manatwork.

function f($a,$p=">"){foreach($a as$e)"$e"!=$e?f($e,"-$p"):print"$p$e
";}

funkcja rekurencyjna, wymaga PHP 7.1 lub nowszego dla indeksu ciągu ujemnego.
"$e"jest Arraydla tablic; więc "$e"!=$ejest taki sam jak is_array($e).

  • zacznij od przedrostka >
  • dodawaj a -do prefiksu dla każdego poziomu
  • wydrukuj prefiks + element + nowa linia dla atomów

1
75 bajtów:function f($a,$p=""){foreach($a as$e)echo$p,is_array($e)?f($e,"-"):">$e\n";}
Ismael Miguel

1
gdyby nie wymagane formatowanie, print_r (tablica $) byłaby jeszcze mniejsza :)
ivanivan

1
Zrobiłem tylko szybki test, ale wydaje się, że is_array($e)można go zastąpić $e[-1]!=="".
manatwork

1
@manatwork To jest PHP <7.1 ... w PHP 7.1, można to zrobić za pomocą $e[-]==""... i z odwróconym warunkiem $e[-1]>"". Niezłe znalezisko!
Tytus

1
Może brakuje mi niektórych narożnych skrzynek, ale na razie wygląda na to, że $e[-1]>""można je zastąpić "$e"==$e. Przynajmniej w starożytnym PHP 5.6, którego używam.
manatwork

5

C99 (GCC), 201 187 140 112 109

f(char*a){for(long d=1,j;j=d+=*++a>90?92-*a:0;)if(*a<35){for(;j||*++a^34;)putchar(j?"->"[!--j]:*a);puts("");}}

rozszerzona forma:

f(char*a){
    for(long d=1,j;j=d+=*++a>90?92-*a:0;)
        if(*a<35){
            for(;j||*++a^34;)putchar(j?--j?45:62:*a);
            puts("");
        }
}

Pobiera ciąg w prawidłowym formacie i kończy się po znalezieniu ostatniego dopasowania ].

Nie używa rekurencji i używa długich typów do faktycznie osiągnąć drugą zasadę: 2 ^ 32-1 poziomy . Większość języków skryptowych ma ograniczoną głębokość rekurencji lub po prostu ulega awarii przy przepełnieniu stosu.

Nie jestem przyzwyczajony do gry w golfa w C jakakolwiek pomoc jest mile widziana :)

Dzięki w bolovie za jego wskazówki! Szczególnie dzięki Titusowi, który zawsze jest gotowy na dobrą rundę gry w golfa (nawet w C)!

Kolejne dwa bajty zapisane dzięki temu, że możemy skończyć, gdy dopasujemy ostatni ] i nie musimy dopasowywać znaku zerowego.

Można to przetestować w Wandbox .



Czy nie możesz skrócić drugiej linii for(int d=1 ...? longma 4 znaki, podczas gdy intma tylko 3, i nie ma powodu, abyś musiał przekraczać 2^32 - 1limit, aby twoje zgłoszenie było ważne, oszczędzając ci jeden bajt.
Restioson

@Restioson int jest podpisany i dlatego działa tylko do 2^31-1.
Christoph

@Christoph wyzwaniem było stwierdzenie, że nie musisz iść dalej.
Restioson

@Restioson Wyzwanie określa z reguły The maximum level of "layers" is 2^32-1.. 2^31-1jest o wiele mniej niż 2^32-1. 2^32-1nie pasuje przez intchwilę, pasuje do unsignedlub long(oczywiście w większości systemów / kompilatorów). Dlatego intnie dałbym poprawnej odpowiedzi (jak większość odpowiedzi tutaj nie jest).
Christoph

4

JavaScript (ES6), 58 51 bajtów

f=(a,s='>')=>a.map(e=>e.map?f(e,'-'+s):s+e).join`
`

Edycja: Zapisano 7 bajtów, gdy @Arnauld wskazał, że mogę połączyć moje dwa podejścia.


4

PHP, 129 123 112 109 95 93 91 bajtów

for(;a&$c=$argn[++$i];)$c<A?$c<"-"?a&$s?$s=!print"$p>$s
":0:$s.=$c:$p=substr("---$p",$c^i);

iteracyjne rozwiązanie pobiera ciąg znaków ze STDIN:
Uruchom go echo '<input>' | php -nR '<code>'lub przetestuj online .

awaria

for(;a&$c=$argn[++$i];)     // loop $c through input characters
    $c<A                        // not brackets?
        ?$c<"-"                     // comma or quote?
            ?a&$s?$s=!print"$p>$s\n":0  // if $s not empty, print and clear $s
            :$s.=$c                     // digit: append to $s
        :$p=substr("---$p",$c^i)    // prefix plus or minus one "-"
;

Szczęśliwy, że liczby są w cudzysłowie; więc potrzebuję tylko jednej akcji na raz.

Skrzypienie ASCII

char    ascii   binary/comment
 "       34
 ,       44
 [       91     0101 1011
 ]       93     0101 1101

 A       65     $c<A    true for comma, quote and digits
 -       45     $c<"-"  true for comma and quote

                =0011 1010 -> 50 -> "2"
i^"["   105^91  ^0101 1011
 i      105      0110 1001
i^"]"   105^93  ^0101 1101
                =0011 0100 -> 52 -> "4"

Dodanie 3 myślników $pi usunięcie 2 dla [, 4 dla ]dodaje jeden dla [i usuwa jeden dla ].


Znowu dobra robota!
Christoph

4

Python 2, 65 64 bajtów

f=lambda o,d=0:o<''and'\n'.join(f(e,d+1)for e in o)or'-'*d+'>'+o

W tej chwili moja odpowiedź konsekwentnie zaczyna się bez myślników, więc ["foo", "bar"]jest to:

>foo
>bar

import sys, pprint; pprint.pprint(sys.argv)ma 43 bajty, ale nie wiem czy łamie zasady gry w golfa.
Carel

Oszczędza to jeden bajt:f=lambda o,d=0:o<''and'\n'.join(f(e,d+1)for e in o)or'-'*d+'>'+o
Ben Frankel

@Carel nie możesz zrobić „zaimportuj pprint jako p”, a może (nie jestem pewien, czy to działa) „zaimportuj pprint.pprint jako p” (Boże, nie mogę znaleźć tylnego tiku na klawiaturze telefonu)
Cole

@Cole Hmm .. import sys, pprint.pprint as p; p(sys.argv)ma wciąż 43 lata, ale mimo to jest dobrą sugestią; D Próba import sys.argv as vwydłuża go nieco o około 48 bajtów. Gdyby można było wyeliminować sys.argv, zaoszczędziliby dużo, ale program staje się wtedy zupełnie bezużyteczny. Podejście rekurencyjne jest dość długie def p(L,d=0): [p(i,d+1) if isinstance(i,list) else print(">"*d + i) for i in L], ~ 80 bajtów.
Carel

3

Perl 5 , 55 bajtów

53 bajty kodu + -nlflagi.

/"/?print"-"x~-$v.">$_":/]/?$v--:$v++for/]|\[|".*?"/g

Wypróbuj online!

Nie jest optymalny dla wyrażenia regularnego z powodu pewnych ostrych przypadków, które mogą potencjalnie wystąpić (w szczególności, jeśli element tablicy zawiera nawiasy wewnątrz).
Rekurencyjna funkcja anonimowa byłaby jednak niewiele dłuższa (61 bajtów):

sub f{my$v=pop;map{ref?f(@$_,$v+1):"-"x$v.">$_"}@_}sub{f@_,0}

Wypróbuj online!

Ale sposób, w jaki Perl radzi sobie z parametrami, nie jest optymalny dla funkcji golfowych: brak parametrów opcjonalnych oznacza, że ​​muszę wykonać drugą funkcję (anonimową), wywołując pierwszą i muszę jawnie uzyskać ostatni parametr o takiej długości my$v=pop.


3

Rubin, 49 45 46 bajtów

f=->c,p=?>{c.map{|x|x==[*x]?f[x,?-+p]:p+x}*$/}

Przykład:

puts f[["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]]

>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

Wyjaśnienie:

Funkcja rekurencyjna: jeśli x==[*x]wtedy x jest tablicą i iterujemy nad nią. Jeśli nie, wcięcie.


3

Haskell, 104 bajty

l@(x:y)#(a:m)|[(h,t)]<-reads$a:m=y++h++l#t|a<'#'=l#m|a<'-'='\n':l#m|a>'['=y#m|q<-'-':l=q#m
l#_=""
(">"#)

Haskell nie ma zagnieżdżonych list o różnych głębokościach, więc muszę samodzielnie parsować łańcuch wejściowy. Na szczęście funkcja biblioteki readsmoże analizować ciągi znaków (tj" parsować ciągi znaków Zamknięta sekwencja znaków), więc mam tutaj małą pomoc.

Przykład użycia:

*Main> putStrLn $ (">"#) "[[\"1\",\"2\"],[\"3\",\"4\"]]" 
->1
->2
->3
->4

Wypróbuj online!.

Jak to działa:

Funkcja #przechodzi przez ciąg char przez char i utrzymuje poziom zagnieżdżenia (pierwszy parametrl ) jako ciąg -z końcowym >. Jeśli nagłówek listy można przeanalizować jako ciąg, weź li ciąg, a następnie wywołanie rekurencyjne z usuniętym ciągiem. Jeśli pierwszym znakiem jest spacja, pomiń go. Jeśli tak ,, weź nowy wiersz i kontynuuj, jeśli tak ], obniż poziom zagnieżdżania i idź dalej, a także (tylko w [lewo) podnieś poziom zagnieżdżania i kontynuuj. Rekurencja kończy się pustym ciągiem wejściowym. Główna funkcja (">"#)ustawia poziom zagnieżdżenia na ">"i wywołuje #.


2

SWI-Prolog, 115 bajtów

p(L):-p(L,[>]).
p([],_):-!.
p([H|T],F):-p(H,[-|F]),p(T,F),!.
p(E,[_|F]):-w(F),w([E]),nl.
w([]).
w([H|T]):-write(H),w(T).

Dodano podział wiersza tylko dla czytelności, nieuwzględniony w liczbie bajtów.

ppredykat rekurencyjnie przechodzi przez tablice, dodając przedrostek „-”, Fgdy poziom jest głębszy. wsłuży do zapisu tablicy wyjściowej, a także rzeczywistego elementu na wyjściu.

Przykład:

?- p(["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]).
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

2

Partia, 249 bajtów

@echo off
set/ps=
set i=
:t
set t=
:l
set c=%s:~,1%
set s=%s:~1%
if "%c%"=="[" set i=-%i%&goto l
if not "%c%"=="]" if not "%c%"=="," set t=%t%%c%&goto l
if not "%t%"=="" echo %i:~1%^>%t%
if "%c%"=="]" set i=%i:~1%
if not "%s%"=="" goto t

Irytujące Batch ma problem z porównywaniem przecinków. Przykładowy przebieg:

[Atom,[Proton,[Up Quark,Up Quark,Down Quark],Neutron,[Up Quark,Down Quark,Down Quark],Electron]]
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

2

Siatkówka , 63 54 52 bajtów

Zaoszczędzono 2 bajty dzięki Martinowi Enderowi

.*?".*?"
$`$&¶
T`[] -~`-]_`.(?=.*".*")
-]

-"
>
T`]"

Wypróbuj online!

Wyjaśnienie

.*?".*?"
$`$&¶

Po pierwsze, tablica jest dzielona przez zamianę każdego cytowanego łańcucha na wszystko, co było przed nim, a także na samą siebie i na nową linię. Dzieląc go w ten sposób, można znaleźć niedopasowane nawiasy otwierające przed każdym ciągiem.

T`[] -~`-]_`.(?=.*".*")

Ta transliteracja zamieni [się na -, pozostawi ]niezmienioną i usunie co drugi znak (  -~wszystkie ASCII można wydrukować). Zastępuje jednak tylko znaki pojawiające się przed końcowym ciągiem w każdej linii.

-]

Następnie wszystkie wystąpienia -]są usuwane. Odpowiadają one pasującym parom nawiasów i chcemy tylko niedopasowanych nawiasów. Po ich usunięciu każda linia ma liczbę -s równą liczbie niepasujących nawiasów otwierających poprzedzających ją.

-"
>

Ostatni -przed a "zastępuje się >, tworząc strzałki.

T`]"

Wreszcie, wszystkie pozostałe ]s i "s są usuwane.


Wygląda na to, że zakłada, że ​​w łańcuchach nie będzie (uciekł) cytatów. Nie jestem pewien, czy jest to uzasadnione, ale poprosiłem o wyjaśnienia.
Martin Ender

@MartinEnder Dobry połów, będę miał na to oko
Business Cat

1

Röda , 54 bajty

f d=""{{|n|{n|f d=`$d-`}if[n is list]else[`$d>$n
`]}_}

Wypróbuj online!

Jest to funkcja, która odczytuje tablicę wejściową ze strumienia. Dla każdego elementu wywołuje się rekurencyjnie lub drukuje element.


1

Python 3, 80 bajtów

Wydaje się, że lambda Pythona wspierają rekursję, kto wiedział?

p=lambda l,d=1:[p(i,d+1)if isinstance(i,list)else print("-"*d+">"+i)for i in l]

Jest to kontrapunkt / komplement dla odpowiedzi orlp .


Witamy w PPCG! Wygląda na to, że policzyłeś ostatni wiersz lub coś takiego (bo liczę tylko 80 bajtów) i nie potrzebujesz spacji wokół =. Podejrzewam również, że możesz upuścić wszystkie pola po trzech ), ale nie znam się na golfie w Pythonie.
Martin Ender,


0

Ułożone , 27 bajtów

[@.1-'-'*\'>'\,,out]deepmap

Wypróbuj online!

Pobiera dane wejściowe z góry stosu i pozostawia dane wyjściowe w STDOUT. Jest to proste, jak robienie mapy głębokości, powtarzanie - dczasów, łączenie z „>” i samym elementem.


0

Gema, 63 znaki

\A=@set{i;-1}
[=@incr{i}
]=@decr{i}
"*"=@repeat{$i;-}>*\n
,<s>=

Podobnie jak inne rozwiązania analizujące, zakłada się, że w ciągach znaków nie będzie żadnych podwójnych cudzysłowów.

Przykładowy przebieg:

bash-4.3$ gema '\A=@set{i;-1};[=@incr{i};]=@decr{i};"*"=@repeat{$i;-}>*\n;,<s>=' <<< '[["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]'
->1
->2
-->1
-->2
->3
>4
---->5
>6

0

jq, 70 67 znaków

( 67 64-znakowy kod + 3 znaki w wierszu poleceń)

def f(i):if type=="array"then.[]|f("-"+i)else i+. end;.[]|f(">")

Przykładowy przebieg:

bash-4.3$ jq -r 'def f(i):if type=="array"then.[]|f("-"+i)else i+. end;.[]|f(">")' <<< '[["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]'
->1
->2
-->1
-->2
->3
>4
---->5
>6

Test online

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.