W grze Pickomino na środku stołu leży kilka płytek, każdy z inną dodatnią liczbą całkowitą. W każdej turze gracze rzucają kośćmi w określony sposób i otrzymują wynik, który jest nieujemną liczbą całkowitą.
Teraz gracz bierze żeton o najwyższym numerze, który jest nadal niższy lub równy jego punktowi, usuwając żeton ze środka i dodając go do swojego stosu. Jeśli nie jest to możliwe, ponieważ wszystkie liczby na środku są wyższe niż wynik gracza, gracz traci najwyższą płytkę ze stosu (który został dodany jako ostatni), który jest zwracany na środek. Jeśli graczowi nie pozostały żadne płytki, nic się nie dzieje.
Wyzwanie
Symuluj gracza grającego przeciwko sobie. Otrzymasz listę kafelków pośrodku i listę wyników uzyskanych przez gracza. Zwróć listę płytek gracza po ocenie wszystkich tur.
Zasady wyzwania
- Możesz założyć, że lista z kafelkami jest uporządkowana i nie zawiera żadnej liczby całkowitej dwa razy.
- Możesz wziąć obie listy danych wejściowych w dowolnej kolejności
- Dane wyjściowe muszą być utrzymywane w kolejności płytek na stosie, ale możesz zdecydować, czy lista jest sortowana od góry do dołu, czy od dołu do góry.
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.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest wyjaśnienie swojej odpowiedzi.
Przykład
(wzięte z 6. próby)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Pierwszy wynik to 22, więc weź najwyższy kafelek na środku <= 22, czyli sam 22.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]
Następny wynik to 22, więc weź najwyższy kafelek na środku <= 22. Ponieważ 22 jest już zajęty, gracz musi wziąć 21.
Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]
Następny wynik to 22, ale wszystkie liczby <= 22 są już zajęte. Dlatego gracz traci najwyższą płytkę na stosie (21), która jest zwracana na środek.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]
Kolejne wyniki to 23, 21 i 24, więc gracz bierze te płytki ze środka.
Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]
Gracz psuje się i otrzymuje zero. Dlatego płytka z liczbą 24 (najwyższa pozycja na stosie) jest zwracana na środek.
Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]
Ostatni wynik to 22, ale wszystkie płytki <= 22 są już zajęte, więc gracz traci najwyższą płytkę na stosie (21).
Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]
Przypadki testowe
(z najwyższym kafelkiem na końcu listy wyników)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: []
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]
Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]
Tiles: []
Scores: [4, 6, 1, 6]
Output: []
Odpowiedzi:
Haskell ,
119111104103 bajtów1 bajt zapisany dzięki Ørjan Johansen
Wypróbuj online!
Zakłada, że kafelki są sortowane w kolejności malejącej.
Nie dzieje się tu zbytnio. Pierwszy argument to stos graczy, drugi ich wyniki, a trzeci to stos pośrodku.
źródło
sort
rośnie. Przypadek testowy TIO nigdy nie trafia w tę gałąź. Zdecydowanie zalecam testowanie wszystkich przypadków za każdym razem, gdy iterujemy w ten sposób.(#)=span.(<)
.Japt, 24 bajty
Oo! To nie wyszło tak dobrze, jak myślałem!
Pobiera dane wejściowe w odwrotnej kolejności.
Wypróbuj lub uruchom wszystkie przypadki testowe na TIO
źródło
Perl 6 , 89 bajtów
Wypróbuj online!
Myślę, że jest jeszcze kilka bajtów do gry w golfa ...
źródło
C # (interaktywny kompilator Visual C #) ,
159158154 bajtówNazywany jako
f(tiles)(scores)
Jeśli tylko
System.Void
jest faktycznie typem zwrotu, a nie tylko symbolem zastępczym do refleksji. Byłbym w stanie wymienićif(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a);
zvar t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);
, oszczędzając dwa bajty.Wypróbuj online!
źródło
Rubinowy , 77 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 80 bajtów
Ta sama logika co wersja ES6, ale przyjmuje kafelki jako maskę bitów BigInt, a wyniki jako tablicę BigInts.
Wypróbuj online!
JavaScript (ES6),
100 98 9487 bajtówPobiera dane wejściowe jako
(tiles)(scores)
. Płytki można przekazywać w dowolnej kolejności.Wypróbuj online!
Skomentował
źródło
Węgiel drzewny , 35 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla nad wynikami.
Poszukaj najwyższej dostępnej płytki.
Jeśli istnieje, to ...
... usuń płytkę ze środka ...
... i dodaj go do stosu.
W przeciwnym razie, jeśli stos nie będzie pusty ...
Usuń najnowszą płytkę ze stosu i odłóż ją na środek.
Wydrukuj powstały stos od najstarszego do najnowszego.
źródło
Python 2 , 120 bajtów
Wypróbuj online!
źródło
05AB1E ,
2722 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Pyth, 32 bajty
Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
Gdzieś tu musi być miejsce na ulepszenia - wszelkie sugestie byłyby mile widziane!
źródło
Perl 5
-apl -MList:Util=max
, 97 bajtówTIO
odczytuje wyniki i kafelki w następnym wierszu i drukuje dane wyjściowe.
W jaki sposób
-apl
:-p
do-a
zapętlania linii i drukowania, autosplit,-l
chomp od wejścia i dodawania znaku nowej linii do wyjścia$_=$".<>
: aby odczytać następny wiersz (kafelki) i wstawić spację do domyślnego var$_
for$i(@F){
...}
pętla$i
nad@F
polami bieżącej linii (wyniki)(
..?
..:
..).=$&
dołącz poprzednie dopasowanie do trójskładnikowej wartości L.($m=max grep$_<=$i,/\d+/g)&&s/ $m\b//?$s
w przypadku gdy maksymalna wartość znaleziona i usunięta z kafelków ($_
) wartość l to score ($s
)$s=~s/ \d+$//?$_
w przeciwnym razie, jeśli ostatnia liczba mogłaby zostać usunięta z wyników, są to kafelki:$G
w końcu to śmieci, ponieważ nie mogą wystąpić$_=$s;s/ //
ustawić wartości domyślne na var i usunąć wiodącą spacjęźródło