Bei einer Eingabe eines "Hotels" in ASCII-Kunst mit einem markierten Einzelzimmer geben Sie die Zimmernummer nach bestimmten Regeln aus.
Hier ist ein Beispiel für ein ASCII-Hotel:
##
##
##### ##
##### ###### ##
##### ###### ##
##### ###### ##
Hier noch ein paar Dinge zu den ASCII-Hotels:
Jedes "Gebäude" wird durch ein Rechteck von
#
Zeichen dargestellt, wobei jedes#
ein "Zimmer" darstellt.Das oben genannte Hotel besteht aus drei Gebäuden. Jedes Gebäude ist durch zwei Spalten von Räumen getrennt, und die unterste "Etage" befindet sich immer in der letzten Zeile.
Jedes Gebäude hat immer 1-9 "Etagen" (Reihen) und 1-9 "Räume" auf jeder Etage. Es wird auch immer 1-9 Gebäude geben.
Die Zimmer sind wie folgt nummeriert:
[building #][floor #][room on floor #]
. Markieren wir zum Beispiel einige Räume in der obigen Zeichnung:## ## ##### ## ##### ####$# ## ##%## ###### ## ##### ###### #@
Der mit gekennzeichnete Raum
%
ist Raum 123 (Gebäude 1, Etage 2, 3. Etage). In ähnlicher Weise ist der mit gekennzeichnete Raum der$
Raum 235 und der@
Raum 312.Gebäude, Etagen und "n-te Etage" sind immer mit einem Index versehen.
Die Eingabe besteht aus einem ASCII-Hotel, bei dem ein einzelnes Zimmer durch ein Sternchen ( *
) ersetzt wird. Dies ist der Raum, für den Sie die Raumnummer ausgeben müssen. Die Eingabe muss als einzelne Zeichenfolge erfolgen. Sie können jedoch Kommas als Zeilentrennzeichen anstelle von Zeilenumbrüchen verwenden (falls die Sprache Ihrer Wahl keine mehrzeiligen Eingaben zulässt oder wenn die einzeilige Eingabe kürzer ist). Optional können Sie ein nachgestelltes Komma / eine neue Zeile verlangen. Sie können auch Zeilen mit nachgestellten Leerzeichen auffüllen, um die Eingabe zu einem vollständigen Rechteck zu machen.
Da es sich um Code-Golf , der kürzeste Code in Bytes gewinnt.
Testfälle (in einem einzelnen Codeblock enthalten, um vertikalen Platz zu sparen):
Input:
*
Output: 111
Input:
# # * # #
Output: 311
Input:
#####
#####
####*
#####
#####
Output: 135
Input:
#####
##### ######
##### ######
# # # ##### # # # ###### *
Output: 911
Input:
#
# #
# # ##
# # ## ###
# # ## ### #####
# # ## ### ##*## ########
# # ## ### ##### ########
Output: 523
Input:
#
*
#
#
#
#
#
#
######### # #
Output: 281
Input:
########*
#########
#########
#########
#########
#########
#########
#########
# # # # # # # # #########
Output: 999
Antworten:
CJam,
3431 BytesDazu muss die Eingabe in ein Rechteck mit Leerzeichen aufgefüllt werden.
Probieren Sie es online! Alternativ können Sie alle Testfälle ausführen.
Erläuterung
quelle
Pyth, 34 Bytes
Demonstration
Dies verwendet einen Golf-Trick, den ich noch nie benutzt habe: Einer Variablen (
K
) innerhalb einer Funktion (y
) zuweisen, um ein Teilergebnis dieser Funktion zu speichern.Erläuterung:
quelle
JavaScript (ES6),
142136 Byte6 Bytes gespart dank @nderscore !
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
.map((t,i,l)=>
,slice(0,r=t.indexOf`*`+1)
,o=++b&&s+2
,[b]+f+r
[b]+f+r
Tipp gefällt mir sehr gut !awk, 70
Beispiel:
quelle
C
131130119113 BytesÜbernimmt die Eingabe für stdin; Die Eingabe darf keinen abschließenden Zeilenumbruch haben. Nimmt die Ergänzung von 2 an.
Ungolfed:
quelle
Stackgoat , 73 Bytes [nicht konkurrierend]
Stackgoat ist eine Stack-basierte Sprache, die nichts mit Ziegen zu tun hat.
Es ist eine ziemlich neue Sprache, also lass es mich wissen, wenn sie irgendwelche Probleme damit haben. Ich habe mir Kopfschmerzen gemacht, um das herauszufinden. Das ist ungefähr so viel, wie ich Golf spiele.
Erläuterung
Dieses Programm besteht aus 3 Teilen für jeweils 3 Ziffern der Raumnummer
quelle
Rubin, 103
Ungolfed im Testprogramm
quelle
$`
in diesem wirklich .JavaScript (ES6), 121
Weniger golfen und erklärt
PRÜFUNG
quelle
Python 2.7,
153168 ZeichenIch mochte diese Herausforderung! Wenn eine Python-Liste als Eingabe in Ordnung ist (Beispiele finden Sie in der Testsuite), funktioniert diese Lösung.
Edit 2016-01-05: Eine Zeile (10 Zeichen) hinzugefügt, um die Zeichenfolge in mehrere Zeilen aufzuteilen.
Kurze Erklärung:
t
ist die Zeile, in der sich der Raum befindet (gezählt von der obersten Zeile als Array-Index = 0);i
ist der Index des Raums in seiner Reihe;i
;t
;i
bis zum Beginn des Bodens mit dem Raum, dem ein Leerzeichen angehängt wird, um den Fall abzudecken, dass sich der Raum im ersten Gebäude befindet.Code:
Testsuite:
quelle
Schnecken , 32 Bytes
quelle
C
142138137 Bytes(
123119118 Bytes + 19 für#include
Zeile)Ich habe ecatmur die Idee zum Zusammenführen von Werten gestohlen, aber ich habe sie auf ganz andere Weise zusammengeführt (
spart am Ende 8 Bytes). Dies geht auch von der gleichen Annahme ausEOF == -1
.Die Eingabe stammt von stdin und darf nach dem letzten Gebäude in der letzten Zeile keine Leerzeichen oder Zeilenumbrüche enthalten. Ein Beispiel wäre also:
Nervenzusammenbruch:
quelle
&&(f=p,p=x)
zu?f=p,p=x:0
- ändern. Der zweite Operand einer ternären Bedingung enthält implizite Klammern.Haskell,
128125 BytesAnwendungsbeispiel:
f "# # * # #"
->311
.Wie es funktioniert:
quelle
Lua, 165 Bytes
Ungolfed
quelle
CoffeeScript, 110 Bytes und JavaScript, 121 Bytes
Lesbar
Grundsätzlich dasselbe in Javascript:
quelle
Java, 231 Bytes
De-Golfed
quelle
Powershell, 154 Bytes
Weniger Golf-Testskript:
Ausgabe:
quelle
05AB1E , 34 Bytes
Zip mit String-Listen ist derzeit fehlerhaft.
€SζJ
hätte nurζ
in der alten Python-Legacy-Version von 05AB1E sein können, funktioniert aber aus irgendeinem Grund nicht mehr in der Elixir-Rewrite-Version.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Dart , 165 Bytes
Probieren Sie es online!
quelle