Biorąc pod uwagę wprowadzenie „hotelu” w sztuce ASCII z zaznaczonym pojedynczym pokojem, wypisz numer pokoju zgodnie z pewnymi zasadami.
Oto przykład hotelu ASCII:
##
##
##### ##
##### ###### ##
##### ###### ##
##### ###### ##
Oto kilka innych rzeczy na temat hoteli ASCII:
Każdy „budynek” jest reprezentowany przez prostokąt
#
znaków, z których każdy#
reprezentuje „pokój”.Powyższy hotel składa się z trzech budynków. Każdy budynek jest oddzielony dwiema kolumnami przestrzeni, a najniższe „piętro” zawsze będzie w ostatnim wierszu.
Każdy budynek zawsze będzie miał 1-9 „pięter” (rzędów) i 1-9 „pokoi” na każdym piętrze. Zawsze będzie też 1-9 budynków.
Pokoje są numerowane w następujący sposób:
[building #][floor #][room on floor #]
. Na przykład zaznaczmy kilka pokoi na powyższym rysunku:## ## ##### ## ##### ####$# ## ##%## ###### ## ##### ###### #@
Pokój oznaczony symbolem
%
to pokój 123 (budynek 1, piętro 2, trzeci pokój na piętrze). Podobnie, pokój oznaczony$
jest pokojem 235, a@
pokój 312.Budynki, podłogi i „n-ty pokój na piętrze” mają zawsze indeks 1.
Dane wejściowe będą składały się z hotelu ASCII z pojedynczym pokojem zastąpionym gwiazdką ( *
). To jest pokój, dla którego musisz podać numer pokoju. Dane wejściowe muszą być traktowane jako pojedynczy ciąg znaków, ale możesz używać przecinków jako separatorów wierszy zamiast znaków nowej linii (na wypadek, gdyby Twój wybrany język nie mógł przyjmować danych wieloliniowych lub jeśli jest krótszy niż danych jednowierszowych). Opcjonalnie możesz wymagać końcowego przecinka / nowej linii. Możesz także wstawiać linie ze spacjami, aby wejście było kompletnym prostokątem.
Ponieważ jest to code-golf , wygrywa najkrótszy kod w bajtach.
Przypadki testowe (zawarte w jednym bloku kodu w celu zaoszczędzenia miejsca w pionie):
Input:
*
Output: 111
Input:
# # * # #
Output: 311
Input:
#####
#####
####*
#####
#####
Output: 135
Input:
#####
##### ######
##### ######
# # # ##### # # # ###### *
Output: 911
Input:
#
# #
# # ##
# # ## ###
# # ## ### #####
# # ## ### ##*## ########
# # ## ### ##### ########
Output: 523
Input:
#
*
#
#
#
#
#
#
######### # #
Output: 281
Input:
########*
#########
#########
#########
#########
#########
#########
#########
# # # # # # # # #########
Output: 999
Odpowiedzi:
CJam,
3431 bajtówWymaga to dopełnienia danych wejściowych do prostokąta ze spacjami.
Wypróbuj online! Alternatywnie uruchom wszystkie przypadki testowe.
Wyjaśnienie
źródło
Pyth, 34 bajty
Demonstracja
Wykorzystuje sztuczkę golfową, której nigdy wcześniej nie używałem: Przypisywanie do zmiennej (
K
) wewnątrz funkcji (y
) w celu zapisania częściowego wyniku tej funkcji.Wyjaśnienie:
źródło
JavaScript (ES6),
142136 bajtów6 bajtów zapisanych dzięki @nderscore !
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
.map((t,i,l)=>
,slice(0,r=t.indexOf`*`+1)
,o=++b&&s+2
,[b]+f+r
[b]+f+r
wskazówka!awk, 70
Przykład:
źródło
C,
131130119113 bajtówPobiera dane wejściowe na standardowe wejście; wejście nie może mieć kończącego znaku nowej linii. Zakłada uzupełnienie 2.
Nie golfowany:
źródło
Stackgoat , 73 bajty [niekonkurujące]
Stackgoat to język oparty na stosach, który nie ma nic wspólnego z kozami.
To całkiem nowy język, więc daj mi znać, jeśli będą z nim jakieś problemy. Rozgryzłem sobie to dość boleśnie, więc to tyle, ile gram w golfa.
Wyjaśnienie
Ten program składa się z 3 części na każde 3 cyfry numeru pokoju
źródło
Ruby, 103
Niegolfowany w programie testowym
źródło
$`
w tym.JavaScript (ES6), 121
Mniej golfa i wyjaśnienia
TEST
źródło
Python 2.7,
153168 znakówPodobało mi się to wyzwanie! Jeśli lista Python jest odpowiednia jako dane wejściowe (patrz przykłady testsuite), to rozwiązanie działa.
Edytuj 2016-01-05: dodano jedną linię (10 znaków), aby podzielić ciąg na wielowierszowy.
Krótkie wyjaśnienie:
t
to wiersz, w którym znajduje się pokój (liczony od górnego rzędu jako indeks tablicy = 0);i
jest indeksem pokoju w jego rzędzie;i
;t
;i
do początku podłogi z pokojem, dołączonej przez białą spację, aby zakryć przypadek, w którym pokój znajduje się w pierwszym budynku.Kod:
Testsuite:
źródło
Ślimaki , 32 bajty
źródło
C,
142138137 bajtów(
123119118 bajtów + 19 dla#include
linii)Ukradłem pomysł łączenia wartości z ecatmur, ale scaliłem je w zupełnie inny sposób (
na końcu oszczędzam 8 bajtów). To również czyni to samo założenie, żeEOF == -1
.Dane wejściowe są pobierane ze standardowego wejścia i nie mogą zawierać białych znaków ani znaków nowej linii po ostatnim budynku w ostatnim wierszu, więc przykładowe dane wejściowe to:
Awaria:
źródło
&&(f=p,p=x)
na?f=p,p=x:0
- drugi argument warunku trójskładnikowego ma niejawne nawiasy.Haskell,
128125 bajtówPrzykład użycia:
f "# # * # #"
->311
.Jak to działa:
źródło
Lua, 165 bajtów
Nie golfił
źródło
CoffeeScript, 110 bajtów i JavaScript, 121 bajtów
Czytelny
Zasadniczo to samo w Javascript:
źródło
Java, 231 bajtów
De-Golfed
źródło
PowerShell, 154 bajty
Skrypt testu mniej golfowego:
Wynik:
źródło
05AB1E , 34 bajty
Zip z listami ciągów jest obecnie uszkodzony.
€SζJ
mógł być po prostuζ
w starej starszej wersji 05AB1E w Pythonie, ale z jakiegoś powodu nie działa już w wersji do przepisywania Elixir.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Dart , 165 bajtów
Wypróbuj online!
źródło