Inspirowany tym postem na łamigłówkach. Spoilery dla tej układanki są poniżej.
Biorąc pod uwagę trzy dodatnie liczby całkowite jako dane wejściowe, (x, y, z)
skonstruuj obejmujący zakres [x, y]
, połącz ze sobą ten zakres, a następnie usuń z
niekoniecznie kolejne cyfry, aby uzyskać największe i najmniejsze możliwe dodatnie liczby całkowite. Zera wiodące są niedozwolone (tzn. Liczby muszą zaczynać się od [1-9]
). Wypisz te dwie liczby w dowolnej kolejności.
Na przykład z posta „Zagadka” dla wprowadzenia (1, 100, 100)
, największa możliwa liczba to 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
a najmniejsza liczba 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
zgodnie z poniższą logiką z odpowiedzi Jeffa zamieszczonej tam:
- Nie możemy wpływać na długość liczby (istnieje stała liczba cyfr), więc aby zmaksymalizować wartość, bierzemy maksymalną pierwszą cyfrę, a następnie drugą cyfrę itp.
- Usuń 84 pierwsze nie-dziewiątki (pozostało 16 cyfr do usunięcia):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Największa liczba w ciągu następnych 17 cyfr to 7, więc odtąd następna cyfra w odpowiedzi może wynosić najwyżej 7 (nie możemy usunąć więcej niż 16 cyfr). Więc usuń 15 nie-7 ... (pozostała 1 cyfra do usunięcia):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Stąd następna cyfra może wynosić najwyżej 8, więc usuń jedną inną niż 8 ze środka:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Podobna logika, ale odwrócona (tzn. Chcemy, aby wiodące
1
s zamiast wiodących9
s) dla najmniejszej liczby.
Oto mniejszy przykład: (1, 10, 5)
.
Konstruujemy zakres 12345678910
i określamy, które 5
cyfry możemy usunąć, pozostawiając możliwie największą liczbę. Oczywiście oznacza to, że chcemy zmaksymalizować cyfrę wiodącą, ponieważ nie możemy wpływać na długość wyjścia. Więc jeśli usuniemy 12345
, zostaniemy z 678910
tym i to jest największe, co możemy zrobić. Tworzenie najmniejszych jest nieco trudniejsze, ponieważ zamiast tego możemy wyciągać liczby ze środka, pozostawiając 123410
możliwie najmniejsze.
Ponieważ (20, 25, 11)
wynik jest raczej nudny, ponieważ 5
i 1
.
Wreszcie, aby wykluczyć odpowiedzi, które próbują zerować, (9, 11, 3)
daje to, 91011
co z kolei daje plon 91
i 10
jest największe i najmniejsze.
I / O i reguły
- Jeśli jest to łatwiejsze / krótsze, możesz zakodować dwa programy / funkcje - jeden dla największego, a drugi dla najmniejszego - w takim przypadku twój wynik jest sumą obu części.
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Można założyć, że dane wejściowe pasują do rodzimego typu liczb w twoim języku, jednak nie można założyć, że będzie to połączona liczba ani wynik.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
9, 11, 3
że tak.