+ - + + - + | | + - + + - + | | | | | | | | + - + + - + + - + + - +
Mieszkańcy ASCIIville odbudowują swoje miasto i opracowują nowe plany. Twoim zadaniem jest narysowanie nowego miasta na podstawie liczby budynków, których chcą.
Dane wejściowe będą polegały na liczbie budynków. Każdy budynek ma połowę wysokości nakładu (zaokrąglony w górę, jeśli jest nieparzysty), nie licząc górnej i dolnej części budynku.
Narysujmy podstawowy przykład 4
+ - + + - + + - + + - + | | | | | | | | | | | | | | | | + - + + - + + - + + - +
Jak widać tutaj, |
w każdym budynku są dwa s, ponieważ dane wejściowe wynosiły cztery. Ale jest haczyk! (co oznacza, że powyższy przykład jest niepoprawny, a przykład na górze tego posta to rzeczywisty wynik dla 4)
Dla każdego budynku, który nie jest liczbą pierwszą, jego wysokość spada o jeden. Jeśli liczba jest podzielna przez 3 , 5 lub 10 , zmniejsza się o jeszcze jeden. Jeśli jest podzielna przez dwie lub więcej z tych liczb, odliczana kwota sumuje się ( 10 jest podzielne przez 10 i 5, i nie jest liczbą pierwszą, więc zostaje odjęte przez 3 ).
Spójrzmy na przykład z wejściem 5
.
+ - + + - + | | + - + + - + + - + | | | | | | | | | | | | | | | | | | | | + - + + - + + - + + - + + - +
Oto przykład 7
+ - + + - + + - + | | + - + + - + + - + | | | | | | | | | | | | + - + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + - + + - + + - + + - + + - + + - + + - +
I przykład 10
+ - + + - + + - + | | + - + + - + + - + | | + - + | | | | | | | | | | + - + | | | | + - + | | | | | | | | | | | | | | | | | | + - + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + - + + - + + - + + - + + - + + - + + - + + - + + - + + - +
I wracając do 6
+ - + + - + | | + - + + - + + - + | | | | | | | | | | + - + | | | | | | | | | | | | + - + + - + + - + + - + + - + + - +
Zasady:
- Jeśli liczba zostanie odjęta tak bardzo, że jej wysokość jest mniejsza lub równa zeru, nie jest wyświetlana, ale pozostawia miejsce dla niej (nie wierzę, że jest to możliwe,
6
jest najbliżej osiągnięcia zera) . - Końcowe spacje są dozwolone.
- Szerokość każdego budynku musi wynosić 2.
- Twój wkład może być z wejścia standardowego lub zakodowany w programie.
- Twój program musi być pełnym programem , bez żadnych funkcji.
- Twój program musi mieć możliwość tworzenia 4-15 wersji. 0-3 i liczby ujemne nie są potrzebne i nie są określone, aby cokolwiek robić, co oznacza, że mogą zgłaszać błąd, drukować śmieci lub nic nie robić.
Odpowiedzi:
CJam,
68 66 5855 bajtówTo na razie za długo. Ale początek.
AKTUALIZACJA: Teraz twarde kodowanie dla wejść do 15 zamiast obliczania przesunięcia. Sugestia Sp3000
Wypróbuj online tutaj
źródło
Python 2,
247 245 237229 bajtówźródło
C #,
223205 bajtówWykorzystuje to potrzebę przejścia tylko do 15 budynków.
260 bajtów
I bardziej ogólna odpowiedź, która zadziała dla dowolnej liczby budynków.
źródło
Python 2, 163 bajty
Pierwszości sprawdzanie części pożycza @ algorytmu XNOR jest od tutaj .
Jeśli zakodujemy na stałe pierwsze 15 przesunięć, możemy uzyskać 137 bajtów :
Zakładam, że końcowe spacje na końcu każdego wiersza są w porządku, ale jeśli pytanie oznaczało końcowe spacje po całym wyjściu, to wynosi +9 bajtów
.rstrip()
.źródło
Groovy,
234,225,223219 bajtówNadużywanie limitu 15 budynków
źródło
Szybki,
375, 350 bajtówOto kod wcięcia
B
zawiera liczbę budynków.p
zwraca 1, gdy liczba nie jest liczbą pierwszą.Muszę zaimportować Foundation, aby móc korzystać z
ceil
funkcji.Nie udało mi się zoptymalizować kodu tylko dla piętnastu przypadków, ale w końcu zrobię to później.
edycja: Biorąc porady @Kametrixom i optymalizuj
mod
część (zapomniałem skrócić długość nazwy zmiennej ).źródło
Foundation
zDarwin
zaoszczędzić kilka bajtówimport UIKit
zamiastimport Darwin
.