Wejście
Niepusta tablica dodatnich liczb całkowitych.
Zadanie
Konwertuj każdą liczbę całkowitą na binarną, ósemkową, dziesiętną lub szesnastkową w taki sposób, że każda cyfra (od 0 do F ) jest używana maksymalnie raz.
Wynik
Lista baz, które zostały użyte do rozwiązania zagadki.
Szczegółowy przykład
Oczekiwany wynik dla [16, 17] to [ósemkowy, dziesiętny] .
Oto dlaczego:
- Nie możemy po prostu użyć dziesiętnego dla obu liczb, ponieważ oba zawierają 1 .
- 16 nie może być przekształcony w binarny, ponieważ jego reprezentację w tej podstawy ( 10000 ) zawiera kilka 0 „s.
- 17 nie może być przekształcony albo binarny, ponieważ jego reprezentację w tej podstawy ( 10001 ) zawiera kilka 0 „S kilka 1 ” S.
- 17 nie można przekonwertować na szesnastkowy, ponieważ jego reprezentacja w tej podstawie ( 11 ) składa się z dwóch 1 .
Rozważmy wszystkie pozostałe możliwości:
+---------+---------+--------+ | oct(16) | dec(16) | hex(16)| | = 20 | = 16 | = 10 | +--------------+---------+---------+--------+ | oct(17) = 21 | 20,21 | 16,21 | 10,21 | | dec(17) = 17 | 20,17 | 16,17 | 10,17 | +--------------+---------+---------+--------+
Jedynym możliwym rozwiązaniem jest konwersja 16 na liczbę ósemkową ( 20 ) i zachowanie 17 na liczbach dziesiętnych ( 17 ). W ten sposób cyfry 0 , 1 , 2 i 7 są używane dokładnie raz.
Wyjaśnienia i zasady
- Dane wejściowe gwarantują unikalne rozwiązanie. Twój kod nie powinien obsługiwać tablic, które dają kilka rozwiązań lub nie zawierają żadnego rozwiązania.
- Możesz wyprowadzać bazy w dowolnym rozsądnym formacie, takim jak [„bin”, „oct”, „dec”, „hex”] , ['b', 'o', 'd', 'h'] , "BODH ” , [2,8,10,16] , [0,1,2,3] itd. Ale należy to jasno wyjaśnić w swojej odpowiedzi.
- Kolejność zasad na wyjściu musi być zgodna z kolejnością liczb całkowitych wejściowych.
- Jeśli to pomoże, możesz założyć, że dane wejściowe są sortowane od najniższej do najwyższej lub od najwyższej do najniższej.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
Przypadki testowe
Nie musisz generować wyników konwersji wymienionych poniżej. Są one czysto informacyjne.
Input | Output | Conversion result
---------------------------------------+-----------------+------------------------
[ 119 ] | O | 167
[ 170 ] | D | 170
[ 64222 ] | H | FADE
[ 16, 17 ] | O/D | 20/17
[ 14, 64, 96 ] | H/H/D | E/40/96
[ 34, 37, 94 ] | O/D/H | 42/37/5E
[ 2, 68, 82 ] | B/D/H | 10/68/52
[ 22, 43, 96 ] | O/O/O | 26/53/140
[ 3639, 19086, 57162 ] | H/D/H | E37/19086/DF4A
[ 190, 229, 771 ] | O/H/O | 276/E5/1403
[ 2, 44, 69, 99 ] | B/H/H/H | 10/2C/45/63
[ 75, 207, 218, 357, 385 ] | H/H/H/D/O | 4B/CF/DA/357/601
[ 12, 28, 46, 78, 154, 188, 222, 240 ] | D/O/O/D/H/H/H/H | 12/34/56/78/9A/BC/DE/F0
Lista surowych danych wejściowych jest dostępna tutaj .
code-golf
base-conversion
Arnauld
źródło
źródło
Odpowiedzi:
JavaScript (Node.js) ,
192,155,154,152,151,145,136,113,99,9290 bajtówWypróbuj online!
Wyjaśnienie:
[c,...a]
- @ Sztuczka Arnaulda za zabranie jednego przedmiotu na razc?***:" "
-> jeśli c jest niezdefiniowany, udało nam się dotrzeć do wyniku końcowego - [] - gdybym wstawił „”, to znalezisko nie uznałoby tego za uzasadnione. ([] + 5 = „5” JS FTW) za[1,4,5,8].find
każdym razem, gdy znajdziemy prawidłową podstawę (wynik będzie z tej tablicy (1,4,5,8) -> (2,8,10,16) jej legit. teraz jak działa find -> jeśli coś znajdzie, zwraca element (1-8), a następnie dodaję rozwiązanie wewnętrzne. jeśli nie znajdzie, to zwraca niezdefiniowane + T jest teraz fałszywe -> NaN, który w połączenie z rodzicem zostanie uznane za fałszywe!/(.).*\1/.test(n=t+b)
sprawdź, czy ciąg ma duplikaty, jeśli tak:f(a,n))
po prostu przejdź do następnej liczby (a jest teraz tablicą.slice (1)) z nowym ciągiem (n)przypisujemy wynik do T (temp) wyniku, ponieważ find zatrzymuje się, gdy znajdzie, a więc wiemy, że ostatnim wynikiem będzie f (), który jest wynikiem B
źródło
t="",B=""
dot="",B=t
uratuje bajt.trim()
już).Perl 5
-alp
, 55 bajtówUżywa
%x
szesnastkowego,%d
dziesiętnego,%o
ósemkowego i%b
binarnegoWypróbuj online!
źródło
Rubin,
7271 bajtówFormat wyjściowy to pewnego rodzaju potworność odwrotnego wyrażenia S:
Zamiast tego oddzielenie ukośnika kosztowałoby 3 bajty więcej (dodawanie
*?/
).Ten format pochodzi ze struktury pętli, nieco krótszej niż bardziej idiomatyczna
repeated_combination(a.size)
, która generuje tablicę tablic znaków, a następnie redukuje ją w stosunku do funkcji cross-product.Edycja: Zapisano 1 bajt dzięki Lynn.
źródło
Pyth,
2120 bajtówZwraca listę wszystkich możliwych list baz (która zawsze ma długość 1).
Wypróbuj tutaj
Wyjaśnienie
źródło
Wolfram Language (Mathematica) , 71 bajtów
Zwróć listę zasad.
Wypróbuj online!
źródło
Galaretka ,
1716 bajtówWypróbuj online!
Zwróć listę zasad.
źródło
Python 2 , 128 bajtów
Wypróbuj online!
źródło
05AB1E , 17 bajtów
Wypróbuj online!
źródło
8
postaci'8'
i pozostałych trzech jest liczbą całkowitą? Wygląda jednak na to, że +1 działa dobrze, włączając w to ostatnie testy.Python 2 ,
121117113111 bajtówWypróbuj online!
Czubek kapelusza Lynn dla
format
, których zapomniałem!źródło
Łuska , 19 bajtów
Wypróbuj online!
Zwraca listy baz
Wyjaśnienie
źródło