Sie sind ein Eisenbahnunternehmer in den USA des 19. Jahrhunderts, als Züge populär wurden, weil sie das effizienteste Mittel für den Transport großer Materialmengen auf dem Landweg sind. Es besteht ein nationaler Bedarf an Eisenbahnschienen von der Ostküste durch einige kürzlich kolonisierte Gebiete im Westen.
Um diesem Bedürfnis gerecht zu werden, wird die US-Regierung eine Steuer erheben, um Eisenbahnen zu subventionieren. Sie haben versprochen, für jede Meile Gleis Geld an Ihre Eisenbahngesellschaft zu zahlen. Da das Verlegen von Wegen in hügeligen und bergigen Regionen teurer ist als das Verlegen von Wegen in flachen Gebieten, passen sie die Menge an, die sie geben, entsprechend an. Das heißt, die Regierung zahlt
- 5.000 US-Dollar pro Meile im Flachland verlegte Strecke
- 12.500 USD pro Meile im Hügelland verlegter Strecke
- 20.000 US-Dollar pro Meile in den Bergen verlegter Strecke.
Natürlich spiegelt dieser Plan nicht genau wider, wie viel es tatsächlich kostet, Gleise zu verlegen.
Sie haben einige Kartografen beauftragt, Reliefkarten der Regionen zu zeichnen, in denen Sie die Höhenlage analysieren möchten. Hier ist eine solche Karte:
S12321
121234
348E96
Jede Ziffer steht für eine Quadratmeile Land. S
ist der Startpunkt, E
ist der Endpunkt. Jede Zahl repräsentiert die Intensität der Höhenänderungen in dieser Region.
- Das Land mit den Nummern 1-3 ist eben.
- Das Land mit den Nummern 4-6 ist hügelig.
- Das Land mit der Nummer 7-9 bildet eine Bergkette.
Sie haben durch jahrelange Erfahrung im Bau von Eisenbahnschienen festgestellt, dass die Kosten für den Gleisbau (in US-Dollar) diese Formel erfüllen:
Cost_Per_Mile = 5000 + (1500 * (Elevation_Rating - 1))
Das bedeutet, dass das Bauen auf bestimmten Höhenunterschieden mehr Geld kostet, als die Regierung angibt, manchmal rentabel ist und manchmal nur die Gewinnschwelle überschreitet.
Zum Beispiel kostet eine Meile Strecke auf einem Höhenunterschied von 3 $ 8.000 für den Bau, aber man bekommt nur $ 5.000 dafür bezahlt, so dass man $ 3.000 verliert. Im Gegensatz dazu kostet es 14.000 US-Dollar, eine Meile auf einem Höhenunterschied von 7 zu bauen, aber dafür werden 20.000 US-Dollar bezahlt: 6.000 US-Dollar Gewinn!
Hier ist eine Beispielkarte sowie zwei verschiedene mögliche Pfade.
S29 S#9 S##
134 1#4 1##
28E 2#E 2#E
Der Bau der ersten Strecke kostet 30.000 US-Dollar, aber die Regierung zahlt 30.000 US-Dollar dafür. Sie machen keinen Gewinn aus dieser Spur.
Andererseits kostet der Bau des zweiten Modells 56.500 US-Dollar, aber dafür werden 62.500 US-Dollar bezahlt. Sie profitieren von diesem Track $ 6.000.
Ihr Ziel: Finden Sie anhand einer Reliefkarte den profitabelsten (oder vielleicht auch nur den kostengünstigsten) Weg vom Anfang bis zum Ende. Wenn mehrere Pfade gleich sind, ist einer von ihnen eine akzeptable Lösung.
Programmdetails
Sie erhalten eine Texteingabe, die durch eine rechteckige Karte mit Zahlen und einem Start- und Endpunkt getrennt ist. Jede Zahl wird eine ganze Zahl sein, die zwischen 1 und 9 liegt. Ansonsten kann die Eingabe innerhalb des vorgegebenen Rahmens nach Belieben erfolgen.
Die Ausgabe sollte dasselbe Format haben wie die Eingabe, wobei die Nummern, für die die Spur erstellt wurde, durch ein Hash ( #
) ersetzt werden sollten. Wegen willkürlicher Vorschriften einiger launischer Politiker können die Wege nur horizontal oder vertikal verlaufen. Mit anderen Worten, Sie können nicht rückwärts oder diagonal fahren.
Das Programm sollte in der Lage sein, in angemessener Zeit (dh <10 Minuten) Karten mit bis zu 6 Zeilen und 6 Spalten zu lösen.
Dies ist eine Code-Golf- Herausforderung, bei der das kürzeste Programm gewinnt.
Ich habe eine Beispielimplementierung (ohne Golf) .
Beispiel-E / A
S12321
121234
348E96
S12321
######
3##E##
S73891
121234
348453
231654
97856E
S#3###
1###3#
3#####
######
#####E
quelle
4
in134
der Beispielkarte sein6
?Antworten:
Python, 307 Zeichen
P
Nimmt einen Teilpfadp
und gibt alle Möglichkeiten zurück, ihn zu erweitern, um ihn zu erreichenE
. Jeder zurückgegebene Pfad wird mit seiner Punktzahl gepaart,max
um den besten zu finden.Auf einer 6x6-Karte dauert es ungefähr 80 Sekunden.
quelle
Python:
529482460 BytesMeine Lösung wird keine Preise gewinnen. Da jedoch nur zwei Lösungen veröffentlicht wurden und ich das Problem interessant fand, habe ich beschlossen, meine Antwort trotzdem zu veröffentlichen.
Edit: Danke an Howard für seine Empfehlungen. Ich habe es geschafft, viel von meiner Punktzahl zu rasieren!
quelle
P
undM
werden jeweils nur einmal verwendet, daher ist es eine gute Idee, sie inline zu setzen (bei einem einzelnen Aufruf funktioniert dies manchmal in fast allen Fällen für zwei).m[c]!='S'
kann zum[c]<'S'
, auchabs(z)==1
zuabs(z)<2
oder sogar gekürzt werden-2<z<2
.Ruby, 233 Zeichen
Ein Ruby-Brute-Force-Ansatz, der innerhalb der Zeitbeschränkungen eines 6x6-Boards funktioniert. Die Eingabe muss auf STDIN erfolgen.
Beispiele:
quelle