Wszyscy na pokładzie pociągu ASCII!
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___
o | C | | O | | D | | E | | | | G | | O | | L | | F |
TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___|
{======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
Najlepiej przygotuj się na przejażdżkę pociągiem, ponieważ masz zamiar zbudować pociąg, którym będziesz jeździć. Biorąc pod uwagę ciąg s
, wyjmij w pełni uformowany ciąg , jak pokazano powyżej. Pierwszą rzeczą, którą zawsze wypływa, jest silnik, który będzie ciągnął cięciwę, jak pokazano poniżej:
o O O
o
TS__[O]
{======|
./o--000'
Za lokomotywą podążają wagony, które zawierają każdą postać cennego ładunku. Aby uniknąć nieporozumień podczas rozładunku, firma zleciła Ci oznakowanie zewnętrznej strony tych samochodów. Samochody, o których mowa, zawsze będą wyglądać tak:
___
| # |
|___|
_|"""""|
"`-0-0-'
Gdzie #
jest reprezentatywna dla postaci, która znajduje się w luku bagażowym. Wiązanie silnika do każdego samochodu jest również częścią twojego zadania, ponieważ masz za zadanie nadzorować płynność i sukces całej przesyłki. Kiedy więc oznaczysz wszystkie samochody i umieścisz silnik na torach, musisz upewnić się, że pociąg jest zmontowany i gotowy do jazdy.
Zasady
- Jedyne dane, które powinien przyjąć Twój program, to pojedynczy ciąg.
- Silnik musi być zawsze włączony, nawet jeśli Twoja przesyłka jest pusta.
- Każdy samochód może pomieścić tylko jedną postać, nie pchaj szczęścia, bo możesz uszkodzić towar.
- Potrzebujesz tylko obsługi następujących znaków ASCII, które można wydrukować:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Jeśli w końcu zrobisz więcej, to też jest w porządku, ale jest to absolutne minimum. - Dopuszczalne są 1-2 końcowe spacje, podobnie jak pojedyncza nowa linia.
- Jest to ascii-art code-golf , wygrywa najmniejsza liczba bajtów.
Odpowiedzi:
05AB1E ,
10199 bajtówNaiwna pierwsza próba.
Wypróbuj online!
źródło
JavaScript (ES6),
149144 bajtówNie sądzę, że sam silnik można skompresować, ale być może jest to możliwe.
Testowy fragment kodu
Pokaż fragment kodu
źródło
Befunge,
276270 bajtówWypróbuj online!
Wyjaśnienie
Samochód i silnik są zakodowane jako dwa zestawy pięciu ciągów w liniach od 3 do 12. Wartości znaków są wyłączone o 1, aby uniknąć konieczności radzenia sobie z podwójnymi cudzysłowami, których nie można użyć w ciągu Befunge.
Kod działa poprzez zbudowanie pełnego zestawu znaków potrzebnych do renderowania pociągu na stosie. Dla każdego wiersza wyjściowego najpierw do stosu dodawany jest odpowiedni ciąg samochodowy, powtarzany tyle razy, ile to konieczne dla ładunku, a następnie jedna kopia odpowiedniego ciągu silnika.
Po zbudowaniu każdej linii para strzałek w dół po lewej stronie ciągów jest zastępowana strzałką w prawo, więc następna iteracja pętli przebiega inną ścieżką w kodzie, przy użyciu innej pary ciągów dla samochodu i silnik.
Po zgromadzeniu wszystkich danych na stosie powstaje końcowa pętla renderująca, która zapisuje znaki, odejmując 1 za każdym razem, aby uwzględnić początkowe kodowanie.
Jako bonus, źródło ma kształt wieży działowej , na wypadek zaatakowania pociągu.Golfiści zniszczyli moją wieżę.źródło
PHP,
218 211 204 187183 bajtówPobiera dane wejściowe z STDIN; biegać z
-nR
.Kompresowanie silnika lub wagonu wymagałoby więcej kodu do dekompresji, niż oszczędza to miejsca na dysku.
Nie widzę tu już żadnego potencjału.
źródło
a&$c=$argn
zamiast""<$c=$argv[1]
Python 2, 176 bajtów
Przykład:
daje
źródło
PowerShell,
167166 bajtówPrzykład:
Prawdopodobnie nieprawidłowy! Jeśli zostanie uruchomiony bez żadnych argumentów, spróbuje wydrukować jeden pusty ciąg znaków i będzie wyglądać następująco:
Jeśli zostanie uruchomiony z pustym ciągiem wejściowym, zwróci poprawnie:
(poniekąd) Ungolfed:
najkrótsza kompresja w Powershell będzie tam,
+'c'*x
gdzie c jest char, a x jest liczbą powtórzeń, i to tylko dla powtórzeń końcowych lub wiodących, każde powtórzenie łańcucha środkowego będzie wymagało dodatkowego+
i dodatkowego"
- więc nie ma sensu w tym, gdzie Widzę kompresję oszczędzającą dowolne miejsce, a jedynym powtarzanym zestawem___
znaków jest tylko 3 znaki.Wyjaśnienie:
$l=($a=$args[0]).Length
Weź pierwszy argument, umieść go w $ a, a następnie weź długość $ a i umieść w $ l, to jedyne potrzebne zmienne." o O O"+" ___ "*$l
większość innych bitów jest zgodna z tym formatem lewej części, a następnie prawej części razy liczba wymaganych znaków." o "+([char[]]$a|%{" | $_ |"})
loop (|%{}
) przez $ a jako tablicę char, więcforeach (char $_ in $a)
dla wersji niepotokowej, następnie wstaw char do tekstu.jest to bardzo proste podejście, ale ponieważ nie mogę znaleźć dobrego sposobu na kompresowanie ciągów obok tego, wydaje się to najbardziej przydatne.
zapisano 1 bajt dzięki briantist! i tutaj myślałem, że to nie będzie krótsze ..
źródło
[char[]]$a
na$a[0..$l]
:)$l
i całkowicie o tym zapomniałem. Dziękuję za to!Java, 361 bajtów
Przykład
źródło
interface C{static void main(String[]v){String n="\n",b=" o O O ",c=" o ",d=" TS__[O] ",e=" {======|",f="./o--000'";for(String x:new java.util.Scanner(System.in).nextLine().split("")){b+="___ ";c+="| "+x+" | ";d+="|___| ";e+="_|\"\"\"\"\"|";f+="\"`-0-0-'";}System.out.print(b+n+c+n+d+n+e+n+f);}}
( 318 bajtów ) Lub nawet więcej, jeśli zastąpisznew java.util.Scanner(System.in).nextLine()
jev[0]
alternatywnym wejściem ( 279 bajtów ) Wypróbuj tutaj .Perl, 137 bajtów
132 bajty kodu + 5 bajtów na
-pF
flagi.ascii_train.pl
:Zauważ, że dodałem
-a
flagę do kodu, ale dzieje się tak tylko dlatego, że stare wersje Perla wymagają,-a
kiedy-F
jest używany.Aby uruchomić:
Dane wejściowe muszą być dostarczane bez końcowej nowej linii (
echo -n
na przykład).Objaśnienia:
Z tego, co widziałem, jest to w przybliżeniu ten sam pomysł, co odpowiedź JavaScript ETHProduction.
Nie dzieje się wiele: niestety wzory są nieco za krótkie, aby
x
operator był wart użycia.Najpierw
s/./ | $& | /g
otacza każdy znak wejścia|
(i spacjami), tworząc drugi poziom pociągu.Następnie wewnątrz tego długiego sznurka wszystko od
!
a do nowej linii jest wzorem, który chcemy powtarzać, aby konstruować samochody. To powtórzenie odbywa się dzięki wyrażeniu regularnemus/!(.*)/$1x@F/ge
. (Użyłem,!
ponieważ dane wejściowe nie mogą go zawierać).źródło
C #, 277 bajtów
Gra w golfa:
Nie golfowany:
Testowanie:
I...
źródło
C # 221 bajtów
nic specjalnego się tutaj nie dzieje ... po prostu tworząc każdą linię i łącząc je z nowymi liniami.
źródło
C,
217212208 bajtówWypróbuj online
Wynik:
źródło
SOGL V0.12 ,
5756 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło
Jq 1,5 , 178 bajtów
Rozszerzony
Przykładowy przebieg
Wypróbuj online
źródło
Excel VBA, 218 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z zakresu
[A1]
i wyjścia do bezpośredniego okna VBESformatowane dla czytelności
Przykładowe dane wyjściowe
źródło