tło
Zainspirowany bardzo dogodną interpretacją macierzy prawda / fałsz Octave (a przez to MATL), Jelly otrzymała atom Ȧ ( wszystko w stylu Octave ).
Ȧ przyjmuje tablicę jako dane wejściowe i zwraca 1, jeśli tablica nie jest pusta i nie zawiera liczby 0 (liczba całkowita, liczba zmiennoprzecinkowa lub liczba złożona) w dowolnym miejscu w strukturze drzewa ; w przeciwnym razie zwraca 0 .
Na przykład tablica [[]] jest prawdziwa, ponieważ nie jest pusta i nie zawiera zer, ale [[0]] jest fałszem, ponieważ zawiera 0 na najbardziej wewnętrznym poziomie.
Zadanie
W wybranym języku programowania napisz pełny program lub funkcję, która pobiera jako dane wejściowe pustą, prawdopodobnie postrzępioną tablicę liczb całkowitych i wyświetla lub zwraca wartość prawdy lub fałszu wskazującą, czy Ȧ zwróci odpowiednio 1 lub 0 .
Twoje zgłoszenie musi być zgodne z następującymi zasadami.
Wartości prawdziwości i fałszowania muszą być spójne dla wszystkich danych wejściowych , tj. Dla wszystkich tablic, dla których Ȧ zwraca 1, muszą być odwzorowane na tę samą wartość prawdziwości, a wszystkie tablice, dla których Ȧ zwraca 0, muszą być odwzorowane na tę samą wartość fałszowania.
Ponieważ pełne programy mogą pobierać reprezentacje łańcuchowe tablic jako dane wejściowe, jest to dozwolone. Musisz jednak użyć kanokalnej reprezentacji swojego języka, zwróconej przez
repr
lub w podobny sposób.W szczególności nie można zakładać, że pierwszy element tablicy będzie poprzedzony spacją.
Jeśli (i tylko wtedy) twój język nie może natywnie reprezentować poszarpanych tablic, możesz wziąć ciąg znaków reprezentujący dane wejściowe, używając kanonicznej składni dowolnego wcześniej istniejącego języka programowania.
Jeśli twój język ma kilka sposobów reprezentowania poszarpanych tablic (np. List i krotek), musisz obsługiwać tylko jeden z nich.
Jeśli Twój język ma wbudowaną funkcję, która sama jest prawidłowym poddaniem się temu wyzwaniu, nie możesz użyć go w swojej odpowiedzi . Wszystkie inne wbudowane elementy są dozwolone.
Zachęcamy do publikowania odpowiedzi przy użyciu zarówno operacji tablicowych, jak i łańcuchowych, nawet jeśli jedna jest znacznie krótsza od drugiej.
Obowiązują wszystkie standardowe zasady gry w golfa .
Niech wygra najkrótszy kod w bajtach!
Prawdziwe przypadki testowe
[1]
[10]
[[]]
[[[[1]]]]
[[], [1], [1, 2]]
[[1], [1, [2]], [1, [2, [3]]]]
[[8], [8, [9]], [8, [9, [10]]]]
Przypadki testowe Falsy
[]
[0]
[0, -1]
[-1, 0]
[[[[0]]]]
[[0], [1, 2], [3, 4, 5]]
[[8], [8, [9]], [8, [9, [1, 0]]]]
[-1, 0, 0, 0]
Object
… moim ulubionym jest Haskell, gdzie nie jest. Ani w C, przynajmniej nie w sposób, który pozwala bezpiecznie mieszać tablice i int. Oba te języki są doskonale zdolne do tworzenia postrzępionych tablic, ale nadal nie mogą ich używać do tego problemu.