Krótsza wersja Skyscrapers Challenge
Zadanie
Biorąc pod uwagę tablicę wysokości budynków i dodatnią liczbę całkowitą k
, znajdź wszystkie permutacje (bez duplikatów) wysokości, tak aby dokładnie k
widoczne były budynki.
Każdy budynek ukryje za sobą wszystkie budynki o mniejszej lub równej wysokości.
Każdy format wejściowy i wyjściowy jest prawidłowy.
Tablica wejściowa nigdy nie będzie pusta.
W przypadku, gdy nie można zobaczyć dokładnie tylu budynków, wypisz wszystko, co nie może być odpowiedzią, ale bez błędu.
Przykłady:
(Długość danych wyjściowych jest pokazana dla bardzo długich danych wyjściowych, ale dane wyjściowe powinny zawierać wszystkie możliwe kombinacje)
input:[1,2,3,4,5],2
output: 50
input:[5,5,5,5,5,5,5,5],2
output: []
input:[1,2,2],2
output:[(1,2,2)]
Seeing from the left, exactly 2 buildings are visible.
input:[1,7,4],2
output:[(4, 7, 1), (1, 7, 4), (4, 1, 7)]
input:[1,2,3,4,5,6,7,8,9],4
output:67284
input:[34,55,11,22],1
output:[(55, 34, 11, 22), (55, 22, 34, 11), (55, 34, 22, 11), (55, 11, 34, 22), (55, 22, 11, 34), (55, 11, 22, 34)]
input:[3,4,1,2,3],2
output:31
To jest golf golfowy, więc wygrywa najkrótszy kod
Opcjonalnie: jeśli to możliwe, możesz dodać coś takiego if length is greater than 20: print length else print answer
. W stopce, nie w kodzie.
źródło
[1,2,3,4,5],5 -> [(1,2,3,4,5)]
. Żaden z bieżących przypadków testowych nie zapewnia, że odpowiedzi mogą obsłużyć pokazywanie wszystkich budynków (chociaż nie wiem, czy rzeczywiście mają z tym problem).Odpowiedzi:
05AB1E ,
109 bajtówWypróbuj online lub zweryfikuj (prawie) wszystkie przypadki testowe (przekroczono limit
[1,2,3,4,5,6,7,8,9],4
czasu dla przypadków testowych ).Stopka TIO robi to, o co OP pytał u dołu:
Wyjaśnienie:
źródło
if length is greater than 20: print length; else print answer;
jest o ̶b̶y̶t̶e̶ ̶l̶o̶n̶g̶e̶r̶ o równej długości w porównaniu do samego programu. xDHaskell, 73 bajty
Wypróbuj online!
źródło
Galaretka ,
1210 bajtówWypróbuj online!
-2 bajty autorstwa @Erik the Outgolfer
Jest to funkcja dyadyczna, przyjmująca wysokości budynków
k
w tej kolejności.źródło
ʋ
! (jest dość starszy niżƇ
w rzeczywistości: P)Pyth,
1816 bajtówWypróbuj tutaj .
Zauważ, że wersja online interpretera Pyth zgłasza błąd pamięci w największym przypadku testowym.
źródło
Perl 6 ,
8163 bajtów-18 bajtów dzięki nwellnhof!
Wypróbuj online!
Anonimowy blok kodu, który pobiera dane wejściowe curry, np
f(n)(list)
. To.unique(:with(*eqv*))
irytująco długo:(
Wyjaśnienie:
źródło
;
końcu pozbyć się tego irytującego ;)Japt , 11 bajtów
Wypróbuj online!
W przypadku dłuższych wyjść dodanie
} l
do końca spowoduje wyświetlenie długości. Limit czasu interpretera online dla[1,2,3,4,5,6,7,8,9],4
przypadku testowego jest niezależny od wyświetlania długości lub listy.Wyjaśnienie:
źródło
JavaScript (ES6),
108107 bajtówPobiera dane wejściowe jako
(k)(array)
. Drukuje wyniki za pomocąalert()
.Wypróbuj online!
Skomentował
źródło
Python 2 ,
114113 bajtówWypróbuj online!
-1 bajt, dzięki ovs
Python 3 , 113 bajtów
Wypróbuj online!
źródło
J,
4338 bajtów-5 bajtów po uwzględnieniu optymalizacji z odpowiedzi Kevina na O5AB13
Wypróbuj online!
bez golfa
wyjaśnienie
po prostu wymieniamy wszystkie możliwe perms
i.@!@#@] A. ]
, biorąc pod uwagę ich unikalne elementy~.
, a następnie filtrujemy je według liczby widocznych budynków, które muszą być równe lewemu wejściowi.kluczowa logika znajduje się w czasowniku nawiasowym, który oblicza liczbę widocznych budynków:
Tutaj używamy maksymalnego skanu,
>./\
aby zachować sumę najwyższego budynku do tej pory widzianego. Następnie po prostu bierzemy unikalne elementy maksymalnego skanu i jest to liczba widocznych budynków.źródło