Wprowadzenie:
Zbieram kręte puzzle. Większość krętych łamigłówek jest produkowanych i sprzedawanych przez chińskie firmy. Większość znanych firm prosi projektantów puzzli o pozwolenie na opracowanie ich projektów i współpracę nad produktem na rynku. W tym przypadku projektanci puzzli są oczywiście bardzo szczęśliwi i dumni, że jedna z ich łamigłówek trafiła na rynek.
Są jednak także chińskie firmy, które układają puzzle. Te podróbki są albo projektami używanymi bez zgody oryginalnego twórcy, albo są po prostu tańszymi kopiami niższej jakości już istniejących łamigłówek.
Wyzwanie:
Zamierzamy ustalić oryginalność liczb, które są „wypuszczane” w określonej kolejności (od lewej do prawej † ).
Biorąc pod uwagę listę liczb całkowitych, pogrupuj i wyślij je według ich oryginalności.
Jak określa się oryginalność liczb?
- Czy liczba jest dokładnym duplikatem wcześniejszej liczby? Grupa (najmniej oryginalna), po której następuje grupa , po wszystkich pozostałych grupach.
- Czy liczba jest duplikatem wcześniejszej liczby, ale zamiast tego jest ujemna (tzn. Pierwotna liczba to , ale teraz ; lub odwrotnie)? Grupa .
- Czy wartość bezwzględna liczby może być utworzona przez połączenie jednej lub więcej wcześniejszych liczb bezwzględnych i czy nie jest ona częścią wcześniej wymienionych grup lub ? Grupa , gdzie jest liczbą wyraźnych liczb użytych w konkatenacji (i ).
- Czy liczba nie mieści się w żadnej z powyższych grup, więc jest jak dotąd całkowicie unikalna? Grupa (najbardziej oryginalna), która prowadzi przed wszystkimi innymi grupami.
Może to zabrzmieć dość ogólnikowo, więc oto przykład krok po kroku :
Lista wejściowa: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
to pierwszy numer, który jest zawsze oryginalny i należy do grupy . Dotychczasowe wyniki:[[34]]
9
jest również oryginalny:[[34,9]]
4
jest również oryginalny:[[34,9,4]]
-34
jest ujemną liczbą wcześniejszą34
, więc należy do grupy :[[34,9,4],[-34]]
19
jest oryginalny:[[34,9,4,19],[-34]]
-199
mogą być utworzone przez dwie wcześniejsze liczby,19
a9
więc należy do grupy :[[34,9,4,19],[-199],[-34]]
34
jest dokładną kopią wcześniejszego numeru, więc należy do grupy :[[34,9,4,19],[-199],[-34],[34]]
-213
jest oryginalny:[[34,9,4,19,-213],[-199],[-34],[34]]
94
mogą być utworzone przez dwie wcześniejsze liczby,9
a4
więc należy do grupy :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
może być utworzone przez cztery wcześniej liczby19
,34
,4
i dwa razy9
, to jest w grupie :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
jest ujemną liczbą wcześniejszą-213
, więc należy do grupy :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
jest oryginalny:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
jest oryginalny:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
mogą być utworzone przez dwie wcześniejsze liczby213
i4
(lub trzy wcześniejsze liczby21
,3
i4
, ale zawsze używamy najmniejszej liczby liczb łączących w celu ustalenia oryginalności), więc znajduje się w grupie :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]
44449
mogą być czterokrotnie utworzone przez dwie wcześniejsze liczby,4
a9
więc należy do grupy :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
może być utworzony przez jedną wcześniejszą liczbę4
, powtórzoną dwa razy, więc jest w grupie :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Tak więc dla danych [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
wyjściowych jest to [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Zasady konkursu:
- I / O jest elastyczny. Możesz wprowadzić jako listę / tablicę / strumień liczb całkowitych lub ciągów, wprowadzić je jeden po drugim poprzez STDIN itp. Wyjściem może być mapa z grupami jako kluczem, zagnieżdżona lista jako przykład i przypadki testowe w tym wyzwaniu, wydrukowane znak nowej linii oddzielony itp.
- Możesz wziąć listę wprowadzania w odwrotnej kolejności (być może przydatne w przypadku języków opartych na stosie). † W takim przypadku wspomniany od lewej do prawej jest oczywiście od prawej do lewej.
- Jak widać na przykład na liczbę całkowitą
-2134
, zawsze grupa numer, który jest połączeniem inne numery z tak mało, jak to możliwe (tworzone przez213
i4
- dwa numery, a nie21
,3
oraz4
- trzy numery). - Jak widać na przykładzie liczby całkowitej
1934499
, możesz użyć wcześniejszej liczby (9
w tym przypadku) wiele razy (podobnie w przypadku44449
użycia czterech4
si9
w tym przykładzie). Są one jednak liczone tylko raz w celu ustalenia grupy. - Nie możesz mieć pustych wewnętrznych list w wynikach dla pustych grup. Zatem przypadek testowy
[1,58,85,-8,5,8585,5885,518]
może nie dać wyniku[[1,58,85,8,5],[518],[5885],[8585],[],[]]
, gdzie puste grupy to i , a powyższy przykład może nie dać wyniku[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]
, gdy pusta grupa to . - Kolejność grup jest ścisła (chyba że korzystasz z mapy, ponieważ grupy można następnie odjąć od kluczy), ale kolejność liczb w grupie może być w dowolnej kolejności. Tak więc
[34,9,4,19,-213,3,21]
dla grupy w powyższym przykładzie może być również[21,3,-213,19,4,9,34]
lub[-213,4,34,19,9,21,3]
. - Masz gwarancję, że nigdy nie będzie żadnych liczb, które mogłyby być utworzone z więcej niż dziewięciu poprzednich liczb. Więc nigdy nie będzie miał żadnego grup, a największą ilość grup możliwe jest 12:
- Możesz założyć, że liczby całkowite będą miały maksymalnie 32 bity, więc w tym zakresie
[−2147483648,2147483647]
.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
źródło
X + 1
jest więc specjalna grupa dla dokładnych kopii iX
czy grupa dla innych liczb, które mogą być utworzone z kopii pojedynczej liczby, na przykład jej negacja?[1, 1111111111]
Odpowiedzi:
Galaretka ,
3633 bajtówWypróbuj online!
Jestem pewien, że można więcej grać w golfa. Trochę inspiracji zaczerpnąłem z odpowiedzi Grimy'ego 05AB1E , więc pamiętajcie o tym!
źródło
Python 3 ,
565564524523500437399394393389385372 bajtówBrute-force wdrożenie przy użyciu
itertools
; nie wszystkie przypadki testowe działają w ramach 60-sekundowego limitu TIO.Wypróbuj online!
Dzięki ArBo za grę w golfa 101 bajtów, Galena Iwanowa za grę w golfa 19 bajtów, ElPedro za grę w golfa 5 bajtów, Movatica za grę w golfa 17 bajtów, Black Owl Kai za grę w golfa 2 bajty, kałamarnicy za grę w golfa 2 bajty i Kevina Cruijssena za gra w golfa 1 bajt.
Wyjaśnienie:
Python 2 ,
406379374373372368355 bajtówTo samo podejście, ale krótsze z powodu niektórych sztuczek golfowych Python 3 nie obsługuje już. Dzięki ArBo za backport i grę w golfa 28 bajtów, ElPedro za grę w golfa 5 bajtów, Movatica za grę w golfa 17 bajtów i kałamarnicę za grę w golfa jeszcze 1 bajt.
Wypróbuj online!
źródło
str(abs(x))
(lub abs (x) za pomocą backicks w Pythonie 2) do wywołania funkcji i zmieniając x w definicji funkcji na y, usuwając y = str (abs (x)). Niestety, nie mogę w tej chwili uruchomić TIO.len
aby zgolić kolejny bajt, prawda?any()
wywołaniach, co czyni ją normalnym generatorem, który działa równie dobrze i oszczędza 4 kolejne bajty :)(x in sum(l,[]))
zamiastany(x in s for s in l)
obux
i-x
oszczędza 13 bajtów więcej!Python 2 ,
235234232246245244241240238237236 bajtówWypróbuj online!
-1 bajt dzięki komentarzowi Squid do drugiej odpowiedzi w języku Python
Ta odpowiedź nie ma nadziei na rozwiązanie żadnego z najbardziej trywialnych przypadków testowych. W związku tio
s*11
został zastąpionys*2
, poświęcając prawidłowości w niektórych przypadkach do szybkiego er czasu wykonywania, ale o ile widzę, wersja w tym poście zawsze teoretycznie daje poprawną odpowiedź.Wyjaśnienie
źródło
int
nawet w wersji 64-bitowej).05AB1E ,
4341383527 bajtówWypróbuj online!
Wyjaśnienie:
Ponieważ numery grup nie są częścią danych wyjściowych, możemy dowolnie używać dowolnych liczb, o ile kolejność jest prawidłowa. Używa 0 dla oryginalnych liczb, 2 ^ -N dla grupy XN, 1 dla grupy X, 2 dla grupy X + 1.
źródło
Python 2, 195 bajtów
Najwolniejszego przypadku testowego nie można ukończyć na TIO , ale na moim komputerze zajmuje to tylko około 10 sekund.
To może być skrócony o 2 bajty na LP64 Python buduje zastępując
'%s-%%s'%a%n
z`a`+'-'+`n`
.źródło
JavaScript (Node.js) ,
211205 bajtówWypróbuj online!
Przy założeniu, że istnieje maksymalnie 12 grup.
JavaScript (Node.js) ,
267226221218211 bajtówWypróbuj online!
... lub 193 bajtów, jeśli zwracanie słownika jest w porządku:
Wypróbuj online!
W takim przypadku klucz
-Infinity
oznacza grupę 1, a pozostałe klucze oznaczają grupęX+key
.źródło