Czy obciążenie autobusu jest legalne?


15

Byłem dzisiaj w autobusie i zauważyłem ten znak:

      seated    standing    wheelchairs
max1    37         30            00
max2    36         26            01
max3    34         32            00

Liczba pasażerów siedzących, pasażerów i wózków inwalidzkich musi być nie większa niż jakikolwiek rząd w tabeli. (Zobacz szczegóły czatu.)

Na potrzeby tego wyzwania uogólnimy ten pomysł: biorąc pod uwagę nieujemną listę liczb całkowitych o ściśle dodatniej długości N (liczba typów pasażerów) i nieujemną macierz liczb całkowitych o ściśle dodatnich wymiarach (N kolumn i jeden rząd na konfigurację lub transpozycja tego), zwróć listę indeksów / prawdy-fałszów / dwóch unikalnych wartości wskazujących, które ograniczenia konfiguracji są spełnione.

Np. Z powyższą macierzą:
30,25,1[1](0-indeksowane) [2](1-indeksowane) lub [false,true,false](Boolean) lub ["Abe","Bob","Abe"](dwie unikalne wartości) itp.

Następujące przypadki testowe wykorzystują powyższą macierz i 0/1 dla false / true:
[30,30,0][1,0,1]
[30,31,0][0,0,1]
[35,30,0][1,0,0]
[0,0,1][0,1,0]
[0,0,0][1,1,1]
[1,2,3][0,0,0]

Następujące przypadki testowe wykorzystują następującą macierz:
1 2 0 4
2 3 0 2

[1,2,1,2][0,0]
[1,3,0,1][0,1]
[1,2,0,3][1,0]
[1,2,0,1][1,1]


Ja niezrozumienia tego problemu lub może [30,31,0]być [1, 1, 1], ponieważ jest objęty max3?
Okx,

Czy wymiana wartości prawdy jest dozwolona? (np. jakakolwiek prawdziwa wartość zamiast 0i jakakolwiek fałsz zamiast 1?)
Pan Xcoder

@Okx Nie rozumiesz czegoś. [x,31,z]wyklucza max1i max2ponieważ nie zezwala na 31 osób.
Adám

@ Mr.Xcoder Czy jest to zwykle dozwolone w takich wyzwaniach?
Adám

I używany do myślenia (patrz (2) ) (patrz również komentarz Martina ) to domyślnie dozwolone, ale nie znaleźli konsensus meta. Kontynuowałem, zamieszczając to meta-pytanie , którego wniosek, że PO powinien zostać zadany pierwszy. Zazwyczaj na to pozwalam, nie widzę powodu, dla którego nie powinni być zamieniani.
Pan Xcoder,

Odpowiedzi:



6

Haskell, 22 20 bajtów

map.(or.).zipWith(>)

Zwraca, Falsejeśli legalne, a Truejeśli nie.

Wypróbuj online!

Przerzucanie wartości True / False, gdy zwracane wartości oszczędzają 2 bajty (dzięki @ user202729!). Z Truelegalnym jest to map.(and.).zipWith(<=)(22 bajty). Wypróbuj online!


Przerzucenie wartości true i false w danych wyjściowych skutkuje krótszym rozwiązaniem.
user202729,

4

Oktawa , 15 bajtów

@(a,b)all(a>=b)

Wypróbuj online!

Zgodnie z komentarzem Sundara pominięcie transpozycji pozwala zaoszczędzić 2 bajty.


OP pozwala na przyjmowanie macierzy jako transpozycji tego, co pokazano w pytaniu, i możesz wziąć bjako wektor kolumny zamiast wektora wiersza (ponieważ jest on po prostu określony jako lista), oszczędzając 2 bajty: Wypróbuj online!
Sundar - Przywróć Monikę


3

R , 32 30 26 bajtów

function(x,y)!colSums(x<y)

Wypróbuj online!

Akceptuje macierz w formie transponowanej jako x, test konfiguracji jako y. Zwraca wektor wartości logicznych.

Początkowe -2 bajty dzięki mnel, a następnie -4 przez JayCe.


2
Zaoszczędź 2 bajty z zastosowanym ciałem funkcji (x> = y, 2, wszystkie)
mnel


2

Galaretka , 3 bajty

<Ẹ€

Wypróbuj online!

0= Prawda, 1= fałsz.


Gdyby wartości nie musiały być wyraźne, zadziałałoby
Pan Xcoder

@ Mr.Xcoder Nie sądzę, że ta opcja jest tutaj podana. Chyba poczekam i zobaczę.
Erik the Outgolfer


1
@ Mr.Xcoder Hm, wygląda na to, że nie jest to dokładnie „prawda-fałsz”, ale raczej „fałsz-prawda”, co niestety nie jest tym, o co prosi wyzwanie.
Erik the Outgolfer,

@ Mr.Xcoder Jelly potrzebuje .
Adám


2

JavaScript (ES6), 38 bajtów

Pobiera dane wejściowe jako (matrix)(vector). Zwraca tablicę boolowską.

m=>v=>m.map(r=>!r.some((t,x)=>v[x]>t))

Wypróbuj online!



2

Retina 0.8.2 , 57 bajtów

\d+
$*
;(?=.*;(.*))
;$1¶
%(+`,1*(1*)(;.*),\1$
$2
(1*);\1$

Wypróbuj online! Link zawiera przypadki testowe, ale dane wyjściowe są uruchamiane razem. Wyjaśnienie:

\d+
$*

Konwertuj na unary.

;(?=.*;(.*))
;$1¶

Daj każdemu wierszowi macierzy własną kopię listy.

%(

Działaj osobno w każdym rzędzie matrycy.

+`,1*(1*)(;.*),\1$
$2

Kilkakrotnie usuwaj ostatni numer wiersza i listy, podczas gdy ostatni numer wiersza jest co najmniej tak duży, jak numer na liście.

(1*);\1$

Na liście powinien pozostać jeden numer, a liczba w wierszu powinna być co najmniej tak duża.




1

05AB1E , 5 bajtów

εs<›P

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

Niestety 05AB1E v1 nie mają wbudowaną 1-char na lub , więc zmniejszyć każdą wartość zamiast przed użyciem . 05AB1E v2, który jest obecnie w fazie rozwoju, będzie miał te wbudowane funkcje.

ε        # For-each row of the (implicitly input) matrix:
 s       #  Swap, so the (implicitly input) list is at the top of the stack
  <      #  Decrease every value in the input-list by 1
         #   i.e. [30,25,1] → [29,24,0]
        #  Check for each value in the matrix-row if they're larger
         #  than the input-list value at the same index
         #   i.e. [37,30,0] and [29,24,0] → [1,1,0]
    P    #  Then take the product of these checks
         #   i.e. [1,1,0] → 0

1

Stax , 8 bajtów

â ╤┘µrφî

Uruchom i debuguj

Wyjaśnienie:

mx\{:vm|A Full program, unpacked, implicit input
m         Map over rows of the matrix:
 x\         Zip with input array
   {  m     Map over result:
    :v        Check if non-increasing, i.e. matrix element greater than or equal to array element
       |A   All.
            Implicit output


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.