Jak nie pamiętasz 6 lub 7-cyfrowego numeru telefonu, który pojawił się na ekranie telewizora przez sekundę ?! Korzystając ze specjalnej techniki opisanej poniżej, zmienisz się w chodzącą książkę telefoniczną!
Oczywiście liczba 402
jest łatwiejsza do zapamiętania niż liczba 110010010
, a liczba 337377
łatwiejsza do zapamiętania niż liczba 957472
. Oznacza to, że zapamiętany numer z jednej strony powinien zawierać jak najmniej cyfr, a z drugiej strony pożądane jest, aby liczba zawierała jak najwięcej powtarzających się liczb.
Jako kryterium trudności w zapamiętywaniu bierzemy sumę liczby cyfr w liczbie i liczby różnych cyfr w liczbie. Zapamiętany numer można zapisać w innym systemie liczbowym, być może wtedy łatwiej będzie go zapamiętać. Na przykład 65535
wygląda liczba w zapisie szesnastkowym FFFF
.
Zadanie
Musisz napisać program do wybierania podstawy systemu liczb, aby zminimalizować kryterium złożoności. Podstawa systemu liczbowego musi być wybrana w zakresie od 2 do 36, następnie liczby 0-9
i litery angielskie A-Z
mogą być użyte do przedstawienia liczby.
Wejście
Dane wejściowe zawierają dziesiętną liczbę całkowitą od 1 do 999999999.
Wynik
Dane wyjściowe muszą zawierać podstawę układu liczbowego (od 2 do 36), minimalizując kryterium złożoności zapamiętywania, oraz liczbę w wybranym systemie liczbowym, oddzielone jedną spacją. Jeśli kilka zasad daje tę samą wartość kryterium, wybierz najmniejszą z nich.
Notatki
- Litery muszą być wielkie (
A-Z
).
Przypadki testowe
Wejście wyjście
1
2 1
2
3 2
65535
16 FFFF
123
12 A3
źródło
a-z
zamiastA-Z
?A-Z
?Odpowiedzi:
Perl 6 ,
5554 bajtów-1 bajt dzięki Jo King.
Wypróbuj online!
źródło
@$_
z@_
i nadal działa.Python 2 ,
150149127144 bajtówWypróbuj online!
Python 3 , 136 bajtów
Wypróbuj online!
Python 3.8 (wersja wstępna) , 131 bajtów
Wypróbuj online!
c
konwertuje liczbę podstawową 10 na dowolną bazę (2-36), a pierwsza (anonimowa) funkcja znajduje najmniejszy wynik.źródło
05AB1E ,
1614 bajtów-1 bajt dzięki Kevin Cruijssen
Wypróbuj online!
Lub dodaj R) »na końcu, aby był zgodny z określonym formatem wyjściowym, ale większość innych odpowiedzi nie przeszkadzała.
Wyjaśnienie:
źródło
₆L©B®ø
zamiast₆LεBy‚}
ā
wydaje się, że zawsze o tym zapominasz.JavaScript (ES6),
87 85101 bajtówEdycja: +16 bezużytecznych bajtów, aby zachować ścisły format wyjściowy
Wypróbuj online!
źródło
Japt v2.0a0
-gS
,2423 bajtyNie ładnie, ale to działa. +2 bajty dla całkowicie niepotrzebnego wymogu, aby dane wyjściowe były pisane wielkimi literami.
Spróbuj
źródło
PHP ,
124119 bajtówWypróbuj online!
Wstyd z powodu +12 bajtów w PHP, aby wielkie litery wyjściowe ... ale ... tak czy inaczej.
źródło
Zsh , 85 bajtów
Dla tej liczby instrukcji wewnątrz pętli for użycie
...&&...&&...
jest krótsze niż{...;...;...;}
.Wypróbuj online!
Oto 81-bajtowe rozwiązanie, które
[base]#[num]
zamiast tego drukuje w formularzu :Wypróbuj online!
źródło
J , 67 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 38 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wprowadź liczbę całkowitą.
Konwertuj go z bazy 2 na bazę 36 ...
... deduplikować, połączyć i wziąć na siebie.
Weź indeks minimalnej złożoności i dodaj 2, aby uzyskać bazę.
Wydrukuj bazę i liczbę całkowitą przekonwertowaną na tę bazę dużymi literami.
źródło
Stax , 19 bajtów
Uruchom i debuguj
Brak wymyślnego algorytmu, po prostu brutalna siła. Około jedna trzecia programu przetwarza format w celu uzyskania precyzyjnych reguł wyjściowych.
Program bonusowy: Wyjście dla [1..1000]
źródło
Galaretka , 25 bajtów
Wypróbuj online!
Monadyczny link przyjmujący za argument liczbę całkowitą i zwracający ciąg galaretki o pożądanym formacie. Jeśli dwupunktowa lista jest akceptowalnym wyjściem (jak na większość wyzwań), może zaoszczędzić 2 bajty. Gdyby podstawa 1 była akceptowalna dla przypadku zbocza 1 jako dane wejściowe, mogłaby zaoszczędzić kolejne 2 bajty.
źródło
Brachylog , 44 bajty
Wypróbuj online!
To trochę boli pisać.
źródło
Perl 5 , 161 bajtów
Wypróbuj online!
źródło
Python 2 ,
140135 bajtówWypróbuj online!
źródło
Perl 5
-Minteger -MList::Util=uniq,first -ap
,123112 bajtówWypróbuj online!
źródło
Wolfram Language (Mathematica) ,
109111 bajtów+2: naprawiono. Dzięki za złapanie @Roman
OrderingBy
został wprowadzony w Mathematica 12.0, do którego TIO nie wydaje się jeszcze zaktualizowane.źródło
OrderingBy
Nie spełnia tego wymagania.MinimalBy
, tak ?123
rozwiązanie drukuje się36 3F
zamiast wymaganego12 A3
. OdOrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]
I uzyskać odpowiedź{36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}
, tak jak zwykle założenie bez ponownego zamawiania równoważnych wpisów wydaje się być ignorowane tutaj. My$Version
to „12.0.0 dla Mac OS X x86 (64-bit) (7 kwietnia 2019)”.C (brzęk) , 165 bajtów
Wypróbuj online!
n // wejście
, i = 2 // iterator od podstawy 2 do 36
, j // aktualna złożoność
, p = 99 // najlepsza złożoność
, r // wynik = iterator
, m // temp kopia n
, x; // m% i
char * g // aktualny ciąg ptr
, * _ // best str ptr
, b [74] [37]; // bufor
/ * [37 + 37] = [uzyskane ciągi znaków + test na użyte znaki] * /
t (n) {
for (; g = b [i], // move ptr
dla (j = 0, m = n; m; m / = i, // wyodrębnij cyfrę
j + = b [i + 36] [x = m% i] ++? 1: 2; // bajt przyrostowy względem znaku
// a jeśli było 0 przyrostów o 2: 1 dla nowego użytego znaku i 1 dla liczby cyfr
// else wprowadź tylko cyfry + przesuń wskaźnik
// printf ("% s -", g); // test
// printf ("r% ip% ij% i \ n", r, p, j); // test
}
printf ("% i,% s", r, _); // wyjście
}
źródło
Japt v2.0a0, 31 bajtów
Spróbuj
źródło