Otrzymujesz pojedynczy ciąg ASCII do wydrukowania, który nie zawiera żadnych znaków nowego wiersza, oraz wielowierszową „formę”, zawierającą spacje ( ) i krzyżyk (
#
).
Musisz ciągnąć znak po znaku w ciągu i zamieniać skróty za pomocą znaków z ciągu w kolejności od lewej do prawej i od góry do dołu. Jeśli sznurek jest zbyt krótki, aby wypełnić formę, przestajesz wysyłać, jeśli sznur jest zbyt długi, przycinasz sznur, aby dokładnie wypełnić formę.
Przykładowy ciąg / forma (ciąg zbyt długi, obcięty):
Loremipsumdolorsitamet,consecteturadipiscingelit.Namsuscipitmagnanoneratgravidacondimentum.Vestibulumnecnisllorem.Fuscemolestieviverranibh,eueleifendnislplaceratnon.Namblanditturpislacus,vitaemolestielacusimperdietquis.Nullapulvinar,exquissollicitudinfacilisis,eratnullavolutpatlectus,etluctusenimvelitegetex.Inhachabitasseplateadictumst.Donecinterdumnullalacinia,sodalesloremin,eleifendturpis.Pellentesqueanisimi.Aeneannonlobortisdiam,quisaliquetquam.Aeneanaugueipsum,imperdietsedaliquetnon,volutpategetsapien.Nullampharetranullaquispretiumornare.Aliquamfermentumvestibulummassavitaevehicula.
###########################################################
##### ############## ###### ###### ######################
##### ## ###### # ##### ###### ######## ######
###### # # #### #### ##### ###### ####### ###### #####
###### ### ### ##### ###### ####### ####### #####
###### ##### ### ########### ###### ####### ### ######
###### ###### ### ########## ###### ##### #########
################## #### ##########################
###########################################################
Przykładowe dane wyjściowe:
Loremipsumdolorsitamet,consecteturadipiscingelit.Namsuscipi
tmagn anoneratgravid acondi mentum .Vestibulumnecnisllore
m.Fus ce molest i evive rranib h,euelei fendni
slplac e r atno n.Na mblan dittur pislacu s,vita emole
stiela cus imp erdie tquis. Nullapu lvinar, exqui
ssolli citud inf acilisis,er atnull avolutp atl ectus,
etluct usenim vel itegetex.I nhacha bitas seplatead
ictumst.Donecinter dumn ullalacinia,sodalesloremin
,eleifendturpis.Pellentesqueanisimi.Aeneannonlobortisdiam,q
Przykładowy ciąg / forma (ciąg zbyt krótki, wyjście zatrzymane):
This probably won't look good.
### ### ### ###
# # # # # #
### ### # # #
# # # # #
# # ### ###
Odpowiednia wydajność:
Thi s p rob abl
y w o n '
t l ook g o
o d .
Najkrótszy kod w bajtach wygrywa.
Podziękowania dla pomysłu na tej stronie .
Odpowiedzi:
CJam,
1614 bajtówDzięki Sp3000 za oszczędność 2 bajtów.
Kończy się z błędem, jeśli ciąg jest zbyt krótki, ale błąd jest drukowany do STDERR.
Wypróbuj online!
Alternatywnie (ta sama liczba bajtów):
Wyjaśnienie
źródło
LabVIEW, 37 Prymitywy LabVIEW
dzieli ciąg na tekst i pleśń, a następnie przekształca je w tablicę. Sprawdza pleśń, jeśli jest tam # i umieszcza znak z tekstu, w przeciwnym razie nic nie robi. Jeśli tekst lub forma są puste, wyjdź z pętli
źródło
Haskell, 48 bajtów
nazywany jak „(zamień na ciąg) # (ciąg hashmark)”:
Mniej golfa:
źródło
import Control.Applicative;main=liftA2(#)getLine getContents>>=putStrLn
Siatkówka ,
4240 bajtówLiczba bajtów zakłada kodowanie ISO 8859-1.
Końcowe podawanie linii jest znaczące.
Wypróbuj online!
Wyjaśnienie
Najpierw zastępujemy,
#
które są częścią siatki, znakiem innym niż ASCII (ale rozszerzony ASCII),×
więc nie mylimy ich z żadnym,#
który może pojawić się w pierwszym wierszu.Teraz wypełniamy jak najwięcej
×
z pierwszego wiersza, kilkakrotnie zastępując pierwszy,×
jaki możemy znaleźć, pierwszym znakiem w pierwszym wierszu (który jest usuwany w trakcie).Wreszcie pozbywamy się wszystkiego, co pozostało w pierwszym wierszu, a także wszystkiego, co pierwsze,
×
aby skrócić dane wejściowe w obu kierunkach.źródło
JavaScript (ES6),
575655 bajtówZapisano 1 bajt dzięki @Neil !
Wyjaśnienie
Działa z skrótami w ciągu wejściowym i zachowuje końcowe białe znaki po zakończeniu ciągu wejściowego.
źródło
m.replace(/./g,c=>...)
krótszy./[^]/
zamiast/.|\n/
. (Również przeprosiny za niewłaściwe sugestie/./
.)Python 3,
696867 bajtówIdeone
Dzięki FryAmTheEggman, Chiel ten Brinke za bajt off. Alternatywnie mogłem użyć Pythona 2 jako dodatkowego (
print
bez()
).źródło
print
zreturn
.sb , 359 bajtów
W pb dane wejściowe są ściśle jednowymiarowe. Nie rozumie, że rysujesz kształt za pomocą danych wejściowych, po prostu widzi jedną długą linię z kilkoma bajtami o wartości 10. Pierwszą rzeczą, którą robi ten program, jest skopiowanie wszystkich oprócz pierwszej „linii” danych wejściowych na Y = 0, Y = 1 itd., Aby utworzyć kształt formy.
Coś, co zauważyłem w golfie kodowym, ale szczególnie podczas golfa w językach ezoterycznych, że często nie chcesz mieć do czynienia z dwiema gałęziami; po prostu ustaw się tak, że robisz to samo w obu przypadkach. Naiwny sposób rozwiązania tego problemu prawdopodobnie sprawdzi długość łańcucha w porównaniu z liczbą skrótów w pozostałej części danych wejściowych i zrobi coś w zależności od wyniku, ponieważ musi zachowywać się inaczej w zależności od tego, co zostanie odcięte. Ale to dużo bajtów.
Zamiast tego po zakończeniu formy na dole dodawana jest dodatkowa linia. To po prostu
n
skróty w rzędzie, gdzien
jest długość łańcucha. Teraz gwarantowane jest dopasowanie sznurka! Po wstawieniu wszystkich znaków ciągu dodatkowa linia, która została dodana, zostaje bezwarunkowo zniszczona. Usuwane są również wszelkie hasze pozostające w odpowiedniej formie, a to jest niezbędny wynik!Oczywiście złamanie specyfikacji po prostu zniszczyłoby wszystkie hasze. W końcu w łańcuchu wejściowym może znajdować się skrót! Aby poradzić sobie z tym, odsyłam do innej części specyfikacji:
(Podkreśl moje.) Kiedy mamy do czynienia ze sznurkiem, tak naprawdę nie obchodzi nas, czy są w nim nowe linie, ale wiemy, że nie ma żadnych. Tak więc wszystkie skróty są zastępowane nowymi wierszami, zanim zostaną wprowadzone do formy! Po zniszczeniu wszystkich skrótów wszystkie wiersze ponownie są zastępowane skrótami. Nie zamienia to całego wyjścia w pojedynczą linię rozdzielaną hashem, ponieważ natura wyniku 2D pb oznacza, że tak naprawdę nigdy nie umieszcza nowej linii na końcu każdej linii, po prostu przechodzi do następnej linii.
Nie golfowany:
źródło
ES6, 59 bajtów
70 bajtów, jeśli tekst może zawierać hasze:
źródło
Perl,
535142 + 2 = 44 bajtyWymaga
-p
uruchomienia. Wyjaśnienie:źródło
$a=<>;$/="";say<>=~s/#/substr$a,$i++,1/ger
$/
zamiast dołączyćGalaretka,
108 bajtówWypróbuj tutaj!
źródło
#
na wejściu.Perl 6 , 72 bajtów
źródło
ES6, 47 bajtów
Prawdopodobnie najprostsze rozwiązanie.
Ten kod tworzy anonimową funkcję, która otrzymuje 2 parametry i zwraca wynik końcowy.
Pierwszy parametr
S
to ciąg „map” z twoim"#"
, natomiast drugi parametrR
to „zamiennik” dla nich"#"
.źródło
Python 3
152127 bajtówPełny program.
106 bajtów
Funkcja, która pobiera strumień jako dane wejściowe.
źródło