Ręczne sumowanie ścian Cubic Cubic jest żmudne i czasochłonne, trochę jak pisanie kodu w Cubically.
W „ Najbardziej wydajnym kubizatorze” poprosiłem cię o przetłumaczenie ASCII na źródło sześcienne. Jedna z odpowiedzi tam wykorzystuje sekwencję inicjalizacji kostki, a następnie modyfikuje wynikową kostkę na podstawie sum wstępnie zainicjowanej kostki. Od tego czasu ta metoda jest używana w wielu programach związanych z kubią. Podczas testowania nowej sekwencji inicjalizacji należy zsumować wszystkie wartości na wszystkich twarzach, co zwykle zajmuje dwie lub trzy minuty.
Twoim zadaniem jest zautomatyzowanie tego procesu dla nas!
Weźmiesz dwa dane wejściowe, liczbę całkowitą n
i ciąg c
. Można je odczytać z argumentów wiersza poleceń, argumentów funkcji, standardowego wejścia, pliku lub dowolnej ich kombinacji. c
będzie sześcianową kostką pamięci o wielkości n
wydrukowanej przez tłumacza.
Interpretator sześcienny zrzuca swoją kostkę do STDERR po zakończeniu programu, ładnie sformatowany dla łatwego przeglądania. Uruchom pusty program w interpretatorze sześciennym i otwórz sekcję debugowania, aby zobaczyć zrzut kostki zainicjowanej kostki. Dodaj argument, 4
aby zobaczyć 4x4x4 lub 5
5x5x5 itp.
Jeśli n
ma wartość 3, c
zastosuje ten format (liczby całkowite będą zmienne):
000
000
000
111222333444
111222333444
111222333444
555
555
555
Spacje, znaki nowej linii i inne. Jeśli n
jest 4, c
będzie wyglądać tak (również ze zmiennymi liczbami całkowitymi):
0000
0000
0000
0000
1111222233334444
1111222233334444
1111222233334444
1111222233334444
5555
5555
5555
5555
I tak dalej.
Twój program wyświetli sześć liczb całkowitych. Pierwsza liczba całkowita będzie sumą wszystkich liczb na górnej powierzchni.
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 bottom face
555
Druga liczba całkowita będzie sumą lewej twarzy, trzecia z przodu, czwarta z prawej, piąta z tyłu i szósta z dołu.
Więc jeśli n
było 3, a c
było to:
242
202
242
000131555313
010121535343
000131555313
424
454
424
Twój program wyświetli 20 1 14 43 24 33
.
Dodatkowe zasady:
- Wyjściowe liczby całkowite muszą być rozdzielane znakami niecałkowitymi. Możesz także zwrócić tablicę.
- Możesz założyć, że dane wejściowe są prawidłowe -
n
jest liczbą całkowitą ic
jest sześcianem z wyjścia debugowania Cubically . Więc jeślin
był3.0
ic
byłfoo bar
, twój program może się zepsuć i nadal być ważny. - Twój program musi działać tylko dla
n > 1
in < 1260
. To może (próbować) obsłużyć większe lub mniejsze rozmiary kostki, ale nie jest to konieczne.
To jest kod-golf , więc wygrywa najkrótszy kod! Jeśli potrzebujesz pomocy, możesz poprosić o pokój na czacie Cubically .
źródło
n
spacje po każdej linii, nie. Nie są uwzględnione w zrzutu.Odpowiedzi:
Galaretka ,
161413 bajtów3 bajty dzięki Erikowi Outgolfer.
Wypróbuj online!
źródło
Z
:ḟ⁶ỴV€€sS€ẎsS€
(lubḟ⁶ỴV€€sS€FsS€
)Python 2 ,
155150147123121120 bajtówPrawdopodobnie może być trochę golfa
Edytuj: -5 bajtów przy użyciu lepszej metody usuwania białych znaków
Edycja: -3 bajty dzięki @Leaky Nun
Edytuj: -24 bajty, nie usuwając białych znaków
Edytuj: -2 bajty, wykorzystując pierwszeństwo
Wypróbuj online!
źródło
05AB1E , 16 bajtów
Wypróbuj online!
źródło
Łuska , 15 bajtów
3
ṁ
s i 2m
sWypróbuj online!
Wyjaśnienie
źródło
mṁṁi
jest naprawdę fajne!Oktawa,
645954 bajtówWypróbuj online!
Poprzednia odpowiedź:
Wypróbuj online!
Zwraca tablicę jako wynik.
źródło
Perl 5 , 66 + 1 (-n) = 67 bajtów
Wypróbuj online!
źródło
Python 2 ,
137127 bajtów-10 bajtów dzięki @Halvard Hummel
Wypróbuj online!
źródło
Haskell, 128 bajtów
Akceptuje ciąg znaków z podziałem linii.
źródło
PowerShell , 236 bajtów
Wypróbuj online!
Oj, to jest długie. Ale dzielenie i krojenie łańcuchów nie jest jednym z mocnych kolorów PowerShell, więc myślę, że jest to nieco oczekiwane. Także - So. Wiele. Dolary
Pobiera parametry
$n
oraz$z
odpowiednio wielkość i siatkę sześcianu. Następnie konstruuje funkcję, która będzie używana przez cały czas. Tutaj usuwamy spacje, dzielimy na poszczególne cyfry, usuwamy puste znaki pomiędzy, łączymy wszystkie znaki razem z a+
, a następnie wykonujemy wynikową instrukcję, aby uzyskać liczbę. Na przykład zmienia się"123"
w to,1+2+3
kiedy jest wykonywany6
.Następny wiersz
split
to wejściowa siatka kostki na nowych liniach , przechowująca wynik w tablicy$a
. Następnie wykonujemy funkcję w pierwszych$n
wierszach i wyprowadzamy górną powierzchnię sześcianu.W następnym zestawie musimy podzielić łańcuchy na podstawie wielkości kostki. Pętlimy więc każdą linię, konstruując
$x
jako odpowiedni wzorzec wyrażenia regularnego (np. Dla rozmiaru$n=3
to będzie"(...)"
), dzielimy ciąg na podstawie tego wzorca, ponownie usuwając puste elementy i przechowujemy je w czterech zmiennych reprezentujących cztery ściany. Te są następnie łączone na ciągh
przezk
.Następna linia
h
przechodzi następnie przezk
funkcję, aby wyprowadzić boki (lewy, przedni, prawy, tylny) sześcianu.Na koniec uruchamiamy ostatnie
$n
wiersze przez funkcję, aby wyprowadzić dolną powierzchnię sześcianu.Wszystkie liczby pozostają w potoku, a dane wyjściowe są niejawne.
źródło
APL (Dyalog Classic) ,
3027 bajtówWygolono 3 bajty dzięki @ Adám
⍺
jest n⍵
jest cWyjaśnienie
Wypróbuj online!
źródło
⊆
go⎕U2286
spowoduje dodanie tylko 5 bajtów.3
i⍺
.(6,⍺*2)
→6(⍺*2)
,
potem⍴
jak⍴
zawsze wykorzystuje swój prawy argument w wystrzępionego kolejności.Sześciennie , 19 bajtów
Pobiera kostkę ze STDIN i rozmiar jako argument wiersza poleceń do interpretera. Zwraca sumę górnej powierzchni, bajtu zerowego, lewej powierzchni, bajtu zerowego, ... dolnej powierzchni i bajtu zerowego.
Wypróbuj online! ... który najwyraźniej wyświetla puste bajty jako rodzaj białych znaków w mojej przeglądarce.
Ten język nie został stworzony dla tego wyzwania, ale wyzwanie zostało stworzone dla języka ... czy nadal oszukuje? ;)
źródło