Mam pudełko ASCII-art i potrzebuję programu, aby je otworzyć.
Przykłady
Wkład:
-------
| |
|_____|
Wydajność:
/
/
/
/
/
/
/
| |
|_____|
Specyfikacja
- Pierwsza linia będzie się składać tylko z
-
co najmniej 3 z nich - Środkowe rzędy zaczynają się
|
od spacji, a kończą na|
- Wszystkie środkowe rzędy będą takie same
- Ostatni rząd zaczyna się od „
|
mieć”,_
a kończy na|
- Wszystkie rzędy będą tej samej długości
Otwieranie pudełka:
- Każdy
-
powinien zostać zastąpiony przez/
linie rosnące i pozycję rosnącą.
Odpowiedzi:
CJam, 14 bajtów
Wypróbuj online!
Jak to działa
źródło
JavaScript ES6, 57 bajtów
Tworzy wiodący nowy wiersz. Działa, biorąc wiersz
-
si przekształcając je w trójkąt, a następnie zastępując-
je spacjami.Edycja: Zapisano 5 bajtów dzięki @ edc65.
źródło
f=s=>s[R='replace'](/-+/,s=>s[R](/-/g,"\n$'/"))[R](/-/g,' ')
\n
i przekształcam później).pb (NIEKOMPETUJĄCY), 125 bajtów
Wersja pbi, której potrzebujesz, aby uruchomić tę odpowiedź, jest nowsza niż pytanie. Działałoby to w starszych wersjach, z wyjątkiem tego, że nigdy nie udało mi się pozwolić na wprowadzanie nowych wierszy. No cóż.
Po pierwsze, określa wysokość pola przez zliczanie nowych linii na wejściu. Kiedy się o tym dowie, idzie do miejsca Y prawej strony pudełka, zjeżdża w dół do miejsca, w którym musi być, i rysuje ściany i podłogę, kończąc pokrywką.
Sprawdź tę zabawną animację!
Długa pauza to przesuwanie pędzla nad wejściem.
Nie golfowany:
źródło
Pyth,
1614 bajtówWyjaśnienie
Dzięki @FryAmTheEggman za nowy algorytm!
Wypróbuj tutaj.
źródło
Siatkówka,
3420 bajtówW pierwszym kroku każdy
-
jest zastępowany przez-
następujące po nim, a/
i nową linię. Nowa linia na końcu oryginalnej pierwszej linii zostaje usunięta. W drugim kroku zmieniamy nowy-
na spacje, co daje pożądany wynik.Wypróbuj online tutaj.
źródło
$%'
do przechwytywania końcowych znaków,-
co pozwala zaoszczędzić 5 bajtów: Wypróbuj online!MATL , 14
15bajtówDane wejściowe powinny mieć końcowy znak nowej linii.
Wypróbuj online!
Wyjaśnienie
źródło
Japt,
282625221817 bajtówPrzetestuj online!
Wyprowadza wiodącą nową linię, która jest akceptowalna według PO.
Jak to działa
Byłoby to 4 bajty krótsze, jeśli zawias może znajdować się na prawej krawędzi pudełka:
źródło
JavaScript (ES6), 66
TEST
źródło
Java 8,
158118 bajtówTo dopiero początek, ale hej, FGITWFTW.
Oczekuje, że dane wejściowe są ciągiem, zwraca pole.
źródło
Python 3, 1̶7̶0̶ 88 bajtów
Oto mój krótszy (e) kod: EDYCJA: Teraz o 82 bajty krótsze dzięki edycji kodu @Dennis!
Python 3, 421 bajtów
Alternatywnie, dla zabawy możesz użyć tego, który otwiera go powoli:
Aby użyć albo, musisz utworzyć plik tekstowy w tym samym katalogu, który zawiera pole ascii o dowolnej szerokości i głębokości, zwane „f.txt”. Następnie otworzy to pudełko.
źródło
Bash,
858479 znaków(Wersja Pure Bash, bez użycia zewnętrznych poleceń).
Tworzy wiodący nowy wiersz.
Przykładowy przebieg:
źródło
echo
jest zewnętrznym poleceniem -/usr/bin/echo
;)echo
wykonywalny istnieje dla zgodności systemu operacyjnego ze standardami. Obecnie używa się go tylko wtedy, gdy ważna jest przenośność, ponieważ jest on zgodny ze standardem , ale większość współczesnych powłok ma własne wbudowane,echo
które jest używane domyślnie: pastebin.com/RnxhweBv @Levi, jeśli zmienisz nazwę / przeniesiesz/usr/bin/echo
, mój kod nadal będzie działał.Perl,
615433 + 3 = 36 znakówUruchom jako
Każdy
-
w pierwszym wierszu jest zastępowany ciągiem, który jest wynikiem konkatenacji pewnej liczby,
/
i\n
.${chr 39}
Zwraca Perl (nie) sławny$'
aka$POSTMATCH
zmiennej specjalnej. Wreszcie, chomp pozbywa się końcowego znaku nowej linii, który został dodany dla ostatniego-
znaku.Dzięki @manatwork za uratowanie 7 + więcej znaków.
Bonus -
s^-^" "x$i++."\\\n"^ge&&chop
otwiera okno od prawej krawędzi w 29 + 3 znakach :). Uruchom jako:źródło
-
, więc tak, mogę zagrać w nią jeszcze bardziej. Dzięki!$.==1
→$.<2
,&&chop
→&chop
usuń dodatkową parę nawiasów wokółlength
, policz{chr 39}
jako 1, ponieważ nie jest ona potrzebna tylko w wersji wiersza poleceń ze względu na składnię powłoki:$.<2&&s^-^" "x(length$')."/\n"^ge&chop
+ 2 znaki dla opcji wiersza poleceń = 40 według mojego liczenia. pastebin.com/iDhUs9XX$.==1
lub$.<2
można je wyeliminować, ponieważ zawiera tylko pierwszy wiersz-
\n
.s^-^$'=~y/-/ /r."/\n"^ge&chomp
Pyth,
2623 bajtówFuj Zdecydowanie może być krótszy; nadal nad tym pracuję.
źródło
Python3, 76 bajtów
/
poprzedzone malejącą liczbą spacji.stdin
prosto dostdout
.EDYCJA: Właśnie zauważyłem, że mój kod jest prawie identyczny z edycją komentarza @Dennis o krótszym kodzie Python3 @ Monster, jedyną różnicą jest wydrukowanie pozostałej części
stdin
bezpośrednio zamiast przechowywania go w zmiennej. Świetne umysły!źródło
Płótno ,
64 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło
Python 2, 100 bajtów
Definiuje funkcję,
o
która pobiera ciąg jako dane wejściowe. (W pytaniu nie podano pełnego programu).źródło
PowerShell, 55 bajtów
Pobiera dane wejściowe
$args
jako ciąg znaków,-split
s na nowych liniach`n
( odnośnik ) , zapisuje pierwszą linię w$d
(jako ciąg), a pozostałe w$b
(jako tablicę ciągów). Następnie zapętlamy odlength
pierwszego wiersza (minus 1) do0
każdej wyjściowej iteracji o tej liczbie spacji plus a/
. Wreszcie wyjście$b
(reszta ciągu wejściowego), które domyślnie wyprowadzi jeden w wierszu.Przykładowy bieg
źródło
JavaScript (Node.js) , 56 bajtów
Wypróbuj online!
Powinien być napisany jako komentarzem @Neil „s odpowiedzi , ale nie mogę utworzyć jeszcze komentarzy
źródło
05AB1E (starsza wersja) , 9 bajtów
Wypróbuj online! (Tylko starsze)
Jak to działa
źródło
Węgiel drzewny , 14 bajtów
Wypróbuj online (pełne) lub wypróbuj online (czyste) .
Wyjaśnienie:
Podziel wejście na nowe linie, weź długość pierwszego wiersza i wydrukuj wiersz o tej długości od prawego górnego rogu do lewego dolnego rogu:
Przesuń raz w prawo:
Ponownie podziel dane wejściowe na nowe linie, usuń pierwszy element i wydrukuj to, co zostało niejawnie:
(UWAGA: Umieszczenie danych wejściowych podzielonych na nowe wiersze w zmiennej (ponieważ robię to dwa razy powyżej) to
1 bajt dłuższyrównież 14 bajtów przy użyciu nieco innej metody (dzięki @Neil ):≔⮌⪪θ¶θ↙L⊟θM→⮌θ
Wypróbuj online (verbose) lub wypróbuj online (czysty) ).źródło
JavaScript ES6, 106 bajtów
Dość proste: uzyskanie długości pierwszego wiersza, utworzenie trójkąta z odstępami
/
i dodanie go do oryginału, pociętego na plasterki i połączonego.Przetestuj to! (Tylko ES6
:(
)Pokaż fragment kodu
źródło
.repeat(n-i-1)
=>.repeat(n+~i)
Python 2.7,
120122 znakówPotrzebuje pliku
f
z oryginalnym / zamkniętym pudełkiem, wyjściem jest otwarty. Pozdrawiam @Monster za pomysł ... spróbuje później dowiedzieć się, co to jest linia wielowierszowa, i sprawdź, czy jest krótsza.Edytować
/
ma miejsce z przodu; +2 bajtyźródło
Ruby, 59 znaków
(Kod 57 znaków + 2 znaki opcji wiersza poleceń).
Przykładowy przebieg:
źródło
Bash, 129 znaków
Wymaga pliku wywoływanego
a
z zamkniętym oknem, wyjście na standardowe wyjście.Może być możliwe skrócenie go przez użycie
sed
i użycie stdin i orurowania.źródło
for i in $(seq `awk 'NR<2&&$0=length-1' a` -1 1);{ for j in `seq 1 $i`;{ printf \ ;};echo /;};echo /;tail -n2 a
PHP, 127 znaków
Wersja bez golfa:
źródło
$argv
. Istnieje kilka drobnych sztuczek, które możesz zastosować:$l=strlen(strtok($s=$argv[1],"↵"));while($l)$s=preg_replace("/-/","↵".str_repeat(" ",--$l-$i)."/",$s,1);echo$s;
(Użyj dosłownego nowego wiersza w kodzie, gdzie jest „↵”: pastebin.com/36t2fb0P )Python, 125 bajtów (110 bez pudełka)
Jeśli ktoś ma pomysł, jak go skrócić, daj mi znać!
źródło
Awk,
4746 znaków(44-znakowy kod + 2 znaki opcji wiersza poleceń.)
Przykładowy przebieg:
źródło
Gema,
514931 znakówPrzykładowy przebieg:
źródło
K (ngn / k) , 18 bajtów
Wypróbuj online!
źródło
05AB1E (starsza wersja) , 12 bajtów
Wypróbuj online!
źródło