W tym wyzwaniu fałszywy tekst markizy to tekst wyświetlany po części, w sposób przewijany.
Kilka przykładów:
testing 4
t
te
tes
test
esti
stin
ting
ing
ng
g
hello 2
h
he
el
ll
lo
o
foobarz 3
f
fo
foo
oob
oba
bar
arz
rz
z
Something a bit longer 10
S
So
Som
Some
Somet
Someth
Somethi
Somethin
Something
Something
omething a
mething a
ething a b
thing a bi
hing a bit
ing a bit
ng a bit l
g a bit lo
a bit lon
a bit long
bit longe
bit longer
it longer
t longer
longer
longer
onger
nger
ger
er
r
small 15
s
sm
sma
smal
small
small
small
small
small
small
small
small
small
small
small
mall
all
ll
l
aaa 3
a
aa
aaa
aa
a
brace yourself 6
b
br
bra
brac
brace
brace
race y
ace yo
ce you
e your
yours
yourse
oursel
urself
rself
self
elf
lf
f
Musisz napisać program lub funkcję, która pobiera dwa dane wejściowe i drukuje dane wyjściowe zgodnie z powyższym opisem. Możesz generować spacje końcowe na wyjściu lub nie. To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.
Jeśli twój program jest samodzielny (tj. Kiedy faktycznie drukuje wiersze) (dane wejściowe mogą być zakodowane na stałe, ale łatwo je zmienić) i śpi trochę między każdą linią wyjścia, otrzymujesz premię -10.
Odpowiedzi:
CJam,
1211 bajtów1 bajt zapisany przez Dennisa.
Korzystam z „Dane wejściowe można zakodować na stałe, ale łatwo je zmienić”: oczekuje się, że dane wejściowe będą już na stosie, więc możesz
"testing" 4
na przykład przejść do powyższego.Sprawdź to tutaj.
Wyjaśnienie
Zauważ, że transpozycja pożądanego wyniku jest znacznie prostsza:
Musimy tylko utworzyć
n
linie, poprzedzająci
spacjei
odn-1
do do0
. To właśnie robi kod:19 - 10 = 9?
Uważam, że bonus „śpi trochę między każdą linią” jest nieco niejasny i niejasny, ale tutaj jest 19-bajtowa wersja, która po prostu zatrzymuje się po każdej linii, obliczając wszystkie kombinacje tablicy
[0 1 .. 7]
. W tłumaczu online prowadzi to po prostu do ostatecznego wyświetlenia wyniku nieco później, ale jeśli użyjesz interpretera Java, w rzeczywistości wydrukuje on każdą linię po „przespaniu się”:źródło
z
. Zakładając, że wejście jest do druku ASCII, można zastąpićW%
z$
.z
cały czas do wyzwań opartych na siatce ascii.)C, 69 bajtów
printf magia!
Wersja rozszerzona z wyjaśnieniem:
A oto przykład:
źródło
Pyth, 13 bajtów
Wypróbuj online: Pyth Compiler / Executor
Wyjaśnienie
źródło
Python
6563Zostało to faktycznie wykorzystane do napisania przykładów. Rozwiązanie podstawowe.
źródło
join
JavaScript ( wersja robocza ES7 ), 61 bajtów
JavaScript ( ES6 ) Hardcoded Inputs, 47 bajtów
Zakładając zakodowane dane wejściowe w zmiennych
s
(ciąg) il
(długość), można zmniejszyć do 47 bajtów drukowania z alarmem dla każdej linii:źródło
K, 19 bajtów
Tack
x
spacje (x#" "
) na początku ciąguy
. Następnie użyj postaci „skanowania w ustalonym punkcie” operatora,\
aby utworzyć zestaw obróconych łańcuchów. Punkt stały w K przestaje iterować, jeśli wynik zastosowania funkcji zwraca powtarzający się wynik lub jeśli dane wejściowe są ponownie odwiedzane. Ponieważ![1]
obraca strunę krok po kroku,![1]\
jest to miły idiom dla cyklicznych permutacji. Następnie po prostu przycinamy wynikix#'
.Przykładowy przebieg:
źródło
J (22)
Skończyło się to dłużej, niż się spodziewałem, ale myślę, że nie jest tak źle.
Ciekawostka: nie są
[
i]
są właściwie dopasowane lub mają ze sobą coś wspólnego.źródło
[{."1]]\.@,~' '#~[
(18 bajtów).Julia, 75 bajtów
Tworzy to nienazwaną funkcję, która przyjmuje ciąg i liczbę całkowitą jako dane wejściowe i drukuje dane wyjściowe. Aby to nazwać, nadaj mu nazwę, np
f=(s,n)->(...)
.Niegolfowane + wyjaśnienie:
Przykłady:
Zauważ, że to rozwiązanie ma 66 bajtów, jeśli
s
in
zakłada się, że już istnieje w programie.źródło
QBasic, 56-10 = 46
To jest gra w golfa QBasic - autoformatter rozszerzy
?
sięPRINT
i doda trochę spacji. Testowane z QB64 , chociaż nie powinno tu być niczego, co nie działałoby z DOS QBasic.QBasic generalnie nie jest dobry w operacjach na łańcuchach, ale bardzo wygodnie jest funkcja, która zwraca określoną liczbę spacji!
Biorąc pod uwagę niektóre swobody z „dane wejściowe mogą być zakodowane na stałe”, ten kod oczekuje, że zmienna
s
ma wartośćDIM
„d”AS STRING
, aby uniknąć$
sufiksu typu, jak również przypisanego łańcuchas
i liczbyn
.Przykładowa preambuła:
Wynik:
Górny pusty wiersz można wyeliminować, rozpoczynając
FOR
pętlę od 2 zamiast 1.Bonus: Dodanie
CLS
tużNEXT
za marne cztery bajty zamienia to w ... prawdziwą markizę !I
PRINT CHR$(3)
QBasic. : ^ Dźródło
Rubinowy,
68, 55 bajtówPo aktualizacji z @blutorange:
Wynik:
ruby marquee.rb "Something a bit longer" 10
Pierwsze zgłoszenie z prośbą o krytykę.
źródło
a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
Haskell,
615954 bajtówPrzykład użycia:
Edycja: pusta linia na początku / końcu jest dozwolona
źródło
Bash, 109-10 = 99 bajtów
Widzę, że w czasie, gdy napisanie mojego rozwiązania zajęło mi dużo czasu, zostałem mocno pobity. Niemniej jednak spędziłem zbyt długo na pisaniu go, aby go nie opublikować ...
Poza tym ma kilka unikalnych cech, takich jak czas między drukowaniem linii, który można regulować w zależności od tego, ile jest w bieżącym katalogu! (Również nieco niespójne, w zależności od tego, jak dysk się czuje)
Przykład:
Nie golfił i skomentował:
Nigdy tak naprawdę tego nie próbowałem. Sugestie i komentarze mile widziane!
źródło
Pure Bash, 61 bajtów
Wynik:
źródło
Perl, 50
57
znaków+3
dla-i
,-n
i-l
.-10
postacie na sen.-i
służy do wprowadzania numerycznego, które jest przechowywane w$^I
. Zasadniczo dodajemyi
spacje na początku i na końcu danych wejściowych, a następnie wyszukujemy wszystkiei
znaki i przeglądamy je za pomocąwhile
.say
wygodnie zwraca,1
które możemy wprowadzićsleep
.źródło
s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/
. Można też stracić-l
flagę, ale myślę, że trzeba się liczyć do 5-i -n
(ponieważ-i
nie jest domyślnym flag) jeśli uruchomić poprzez:echo -n "testing" | perl -i4 -nE'...'
. Powinno to być nadal do 44!Powłoka POSIX, 94
Wiem, że wygląda na Perla, ale to naprawdę jest powłoka!
Pierwszy wiersz dodaje niezbędne spacje wiodące, tylko za pierwszym razem przez pętlę. Ustawia 3 USD, aby wskazać, że to zrobiło.
Druga linia (osadzona nowa linia NB) powtarza się, dopóki dane wejściowe nie zostaną wyczerpane, wypisując pierwsze n znaków ciągu, a następnie wywołując się z pierwszym znakiem usuniętym z 1 $.
Testowane z Debianem
/bin/dash
- przykładowe wyniki:./marquee „testowanie” 4
./marquee „Coś nieco dłużej” 10
./marquee „small” 15
źródło
Python 2, 51 bajtów / 37 bajtów
Bez wpisanego na stałe (51 bajtów):
Zadzwoń jak
f("testing", 4)
.Z zakodowanym wejściem (37 bajtów):
Obie wersje generują początkowy wiersz spacji.
źródło
Python 2, (54 bajty - 10 = 44)
64626046(Zakładałem, że wiersz dla zakodowanych danych wejściowych nie dodaje się do liczby bajtów.)
Nie widziałem jeszcze programu, który faktycznie śpi między wierszami drukowania, więc zrobiłem taki, ponieważ tak wygląda bardziej markiza. Ten program ma jeszcze 2 bajty w Pythonie 3.
EDYCJA: Program wykonuje teraz obliczenia zamiast spania. Użyłem
i
do obliczeń, aby program nie przechowywał go jako stałej, ale musi go obliczyć za każdym razem.Wypróbuj tutaj Python 3 (replika Python 2 jest wadliwa)
źródło
time.sleep
długich obliczeń, których możesz użyć? Ponadto użyciewhile
pętli jest nieco krótsze :i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
q=
. Dzięki.i**(7**7)
Pyth, 12 bajtów
Demonstracja.
Pyth, 17–10 = 7 bajtów
Ta wersja wykorzystuje opóźnienie między wydrukami linii. Można to zobaczyć w kompilatorze wiersza poleceń, który można uzyskać tutaj .
Uruchom następujące czynności:
Opóźnienie to wynosi około 0,3 sekundy przed każdym wydrukiem. Jeśli wolisz dłuższe opóźnienie, możesz użyć:
Ma to około 4 sekundowe opóźnienie.
źródło
Java,
133119115Długa wersja:
Wypełnienie jest nakładane na sznurek, a następnie podciągi wyściełanego sznurka są drukowane na konsoli.
-4 bajty dzięki @KevinCruijssen.
źródło
for(;i<= s.length();System.out.println(s.substring(i-n,i++)));
Matlab, 95
Jak zawsze jest to manipulacja matrycami. Rdzeniem tutaj jest polecenie,
spdiags
które pozwala bardzo łatwo tworzyć macierze diagonalne.Z kodowaniem na stałe 71 bajtów (oczekiwany ciąg przechowywany w
t
i liczba wk
)źródło
APL, 50-10 = 40 znaków
Jestem pewien, że może być krótszy. 50 to długość programu bez dwóch stałych.
Wyjaśnienie:
Opracowany dla ngn APL na terminalu.
źródło
PowerShell -
8583 bajtówJest późno, nie wygra :-) Ale pomyślałem, że wrzucę Powershell dla kompletności:
function m($s,$n){1..$($n+$s.length)|%{-join(" "*$n+$s+" "*$n)[$_-1..$($n+$_-1)]}}
źródło
Kobra - 60
źródło
Groovy - 82
źródło
Lua, 79 bajtów
źródło
C #, 112 bajtów
Pełny program z nieprzylepioną metodą i przypadkami testowymi:
źródło
Galaretka , 15 bajtów - 10 = 5 ( niekonkuruje ?)
Wypróbuj online!
Śpi przez sekundę między każdą linią. Drukuje znak nowej linii, jeśli jest to dopuszczalne.
yay Jelly bije węgiel drzewny
źródło
PHP4.1, 85-10 = 75 bajtów
Tak, jest to bardzo stara wersja, ale ma funkcjonalność, której potrzebuję.
Nadal możesz go uruchamiać w nowszych wersjach PHP, ale musisz ustawić zmienne samodzielnie przed uruchomieniem poniższego kodu.
Pomaga mi to znacznie zmniejszyć rozmiar mojego kodu!
To jest naprawdę podstawowe:
Z tego powodu pobiegłem po premię, cytując OP:
Jak widać, ma sen.
Zakłada się, że masz
register_globals
włączone domyślnie, które były domyślnymi ustawieniami dla tej wersji.Możesz łatwo przetestować w przeglądarce za pomocą
minimalnyTrochę zmian:Powyższy kod jest poliglotą i można go uruchomić w przeglądarce lub w tłumaczu PHP. Czy nie powinienem dostać za to nagrody? Może ciasteczko?
Lista zmian:
sleep(1)
w tym teścieconcat
Celem jest przezwyciężenie różnic między PHP i JS w łańcuchach konkatenacji.
-
stosuje się a, aby wypełnić przestrzeńecho
,printf
zamiast tego używa (ograniczenie PHP)<br>
używa się „prawdziwej” nowej liniiźródło
J ,
1514 bajtówWypróbuj online!
źródło
APL (Dyalog) , 17 bajtów
Wypróbuj online!
(program zakłada, że
⎕IO←0
na wielu komputerach jest to ustawienie domyślne)Wyjaśnienie
źródło