Entnommen aus der Qualifikationsrunde für Google Code Jam 2013 Problem B :
Alice und Bob haben einen Rasen vor ihrem Haus, der wie ein Rechteck von N mal M Metern geformt ist. Jedes Jahr versuchen sie, den Rasen nach einem interessanten Muster zu schneiden. Sie schnitten mit einer Schere, was sehr zeitaufwändig war. Jetzt haben sie einen neuen automatischen Rasenmäher mit mehreren Einstellungen und möchten ihn ausprobieren.
Der neue Rasenmäher hat eine Höheneinstellung - Sie können ihn auf eine beliebige Höhe h zwischen 1 und 100 Millimeter einstellen, und er schneidet das gesamte Gras höher als h, auf das er trifft, auf Höhe h. Sie führen es aus, indem Sie den Rasen an einer beliebigen Stelle am Rand des Rasens betreten. dann fährt der Rasenmäher in einer geraden Linie senkrecht zum Rand des Rasens, in den er eingetreten ist, und schneidet Gras in einem 1 m breiten Schwad, bis er den Rasen auf der anderen Seite verlässt. Die Höhe des Rasenmähers kann nur eingestellt werden, wenn er sich nicht auf dem Rasen befindet.
Alice und Bob haben verschiedene Grasmuster, die sie auf ihrem Rasen haben könnten. Für jeden von ihnen möchten sie wissen, ob es möglich ist, das Gras mit ihrem neuen Rasenmäher in dieses Muster zu schneiden. Jedes Muster wird beschrieben, indem die Höhe des Grases auf jedem 1 x 1 Quadratmeter großen Rasen angegeben wird.
Das Gras ist anfangs 100 mm hoch auf dem gesamten Rasen.
Schreiben Sie eine Funktion, die ein 2D-Array von ganzzahligen Höhen verwendet und bestimmt, ob der Rasen entsprechend geschnitten werden kann.
Hier sind 100 Testfälle von Google Code Jam. Die ersten 35 Fälle sollten vergehen, der Rest nicht.
Der kürzeste Code gewinnt.
Antworten:
J, 15 Zeichen
Ich habe diese kurze Lösung nicht erwartet.
Kurze Erklärung:
Wenn Ihre Funktion 4 andere Funktionen wie in der Lösung ist:
(f1 f2 f3 f4)
und eine Eingabe J berechnet sie wief1(input,f3(f2(input),f4(input)))
dhinput f1 ((f2 input) f3 (f4 input))
.quelle
APL, 15 Zeichen
Erläuterung:
⌈⌿⍵
berechnet das Maximum der Spalten von rhs⌈/⍵
macht das gleiche mit Zeilen∘.⌊
tut das äußere Produkt der beiden vorhergehenden in Bezug auf das Funktionsminimum⍵≡
vergleicht das Ergebnis mit dem rhsBeispiele:
quelle
Python,
112104quelle
map(min,z(*r))
anstelle von[min(a)for a in z(*r)]
, um 8 Zeichen zu speichernIch habe einen etwas längeren Python-Code, der jedoch alle bei Google Code Jam 2013 angegebenen Testfälle bestanden hat.
quelle