Animuj tekst w swoim terminalu
Cel
Celem jest „animacja” ciągu „Witaj świecie” w twoich wynikach, tak aby każda postać była pisana wielkimi literami po sobie.
Twój program może wyjść po każdej dużej litery.
Na przykład;
# Iteration 1
Hello world
# Iteration 2
hEllo world
# Iteration 3
heLlo world
# Iteration 4
helLo world
# Iteration 5
hellO world
# Iteration 6 (note: it should capitilize the space char (ie: a break between iteration 5 and iteration 7)
hello world
# Iteration 7
hello World
# Iteration 8
hello wOrld
# Iteration 9
hello woRld
# Iteration 10
hello worLd
# Iteration 11
hello worlD
Powinien animować ciąg tylko raz, a pomiędzy każdym stanem powinno być 1 sekundowe opóźnienie.
Wejście
Nie jest wymagane wprowadzanie danych, ale „Witaj świecie” musi być ciągiem „animowanym”.
Wynik
Ciąg „Witaj świecie” musi być animowany. Wyjście musi mieć 1 linię, aby stworzyć rodzaj animacji fali. Dozwolona jest pusta końcowa nowa linia. Przykład gif;
Widziałem to na wideo z YouTube Metasploit i pomyślałem, że efekt był całkiem fajny, z którego nagrałem gif, więc jest trochę opóźniony, ale mam nadzieję, że ilustruje to dobrze
To jest golf golfowy , najniższa liczba bajtów zostanie uznana za zwycięzcę.
Odpowiedzi:
Vim 26 bajtów
Objaśnienie (jeszcze nie .gif):
Najpierw musimy wpisać tekst „witaj świecie”. To całkiem proste. To poprostu:
W tym momencie kursor znajduje się na „d” w „świecie”. Kolejny:
Znalazłem też dwie inne 26-bajtowe wersje:
źródło
~
przerywa pętlę . Wierzę,l
że to ciężka pracaPython 2,
989490 bajtów-9-4 bajty dzięki @ElPedro -4 bajty dzięki @JonathanAllan i @Rodźródło
-u
argument i użyćprint"\t"+s[:x]+s[x:].title(),;
(zwróć uwagę na przecinek końcowy) . I to nie zmieni liczby bajtów (ponieważ argument dodałby +2 bajty)python -c 'code here'
. W przypadku flagi wywołanie byłobypython -uc 'code here'
inne niż jeden bajt.Commodore 64,
168162137133 Użyto bajtów BASIC (i tokenizowanych)Będziesz musiał użyć skrótów słowa kluczowego BASIC, aby wprowadzić to do prawdziwego C64 lub emulatora (lub wprowadź program do Commodore 128 i załaduj go z powrotem w trybie C64, chociaż powinno to również działać na 128).
{control+n}
Zadziała tylko / wyświetlacz po otwierającym cytatu. Jest to skrót,chr$(14)
dlatego zapisuje niektóre bajty i przełącza zestaw znaków na tryb biznesowy lub wielkie / małe litery.Dodałem dla ciebie kilka skrótów, więc ty.
{clear home}
Postać jest przez naciśnięcieShift
iCLR/HOME
klucz po cudzysłowem otwarcie.W celach ilustracyjnych niepisany wykaz można wprowadzić w następujący sposób:
Działa poprzez przełączenie zestawu znaków PETSCII w tryb biznesowy (wielkie / małe litery) i zapisanie ciągu znaków hello world w górnym wierszu ekranu, który znajduje się w lokalizacji pamięci 0400 $, następnie weźmie wartość w każdej lokalizacji dla następnego Stamtąd 11 bajtów i zwiększ każdą wartość o 64 (odpowiednik wielkich liter). Jeśli licznik j wynosi> 0, wywołuje procedurę w linii 2, aby ponownie zmniejszyć poprzednią lokalizację pamięci o 64.
Wiersz 3 to pauza, zapisuje także spację do lokalizacji 0405 $ i 040b, co jest naprawą błędu (który prawdopodobnie można by usunąć, aby zaoszczędzić trochę bajtów).
źródło
fori=0to1step0
...nexti
zasadniczo tworzy nieskończoną (bez goto) pętlę, trochę jakwhile(true){...}
w bardziej współczesnych językach.GO TO
jest zbanowany, prawda ;-) Można łatwo samodzielnie opracować listę,CLR
zanimFRE(0)
C #,
230215193161135134130 bajtówTo jest C #, więc długo dobrze! :-( Ale po pomocy i wyszukiwaniu, ja (i inni, naprawdę) udało mi się usunąć dokładnie 100 bajtów.
Grał w golfa
Bez golfa
Zrzut ekranu
Chociaż wygląda dużo lepiej, gdy pętla i szybciej ..
Aktualizacje
Straciłem 15 bajtów, używając znaku powrotu karetki zamiast tego,
Clear()
co pozwoliło mi również na zastąpienie znaku „System.Console
use” gdzieś inline.Program zastąpiony przez lambda oszczędzający 23 bajty dzięki @devRicher
new string(b)
zb
ib[i]=char.ToUpper(b[i])
zb[i]-=' '
, oszczędzając mi kolejne 26 bajtów!i++
dzięki @Snowfirei<11
z mojejfor
pętliźródło
class P{static void Main(){ ... }}
na,()=>{ ... }
aby wyciąć kilka bajtów. PPCG przyjmuje funkcje jako odpowiedzi, więc lambda działa dobrze.void g(){ ... }
.char g = string j[x]
), aby zaoszczędzić około 50 bajtów:()=>{var s="Hello world";for(int i=1;i<11;i++){string h = s;h[i]=char.ToUpper(s[i]);System.Console.Write(h+"\r");System.Threading.Thread.Sleep(1000);}}
b[i++]-=' '
. To by się przydało, ponieważ wtedy można również usunąć warunek w pętli for i po prostu napisaćfor(int i=0;;)
. OP wskazał w komentarzach, że program może wyjść z błędem, więc można zezwolić na wyjątek IndexOutOfRangeExPowerShell,
126119107104 bajtówRewizje (prawdopodobnie będzie ich wiele):
Zmień
$s.Length
na const1110
Restrukturyzowany konstruktor ciągów, usunięto 1 instrukcję join i zastosowano
++$s
zamiast niej($s+1)
, aby zaoszczędzić trochę bajtów dzięki @AdmBorkBorkAdmBorkBork zwraca uwagę, że dwukrotne użycie łańcucha jest w rzeczywistości krótsze niż enkapsulacja, a następnie
.ToLower()
„odłożenie go” - co wiele mówi o tym, jak pełna jest PowerShell, -3!w zasadzie przewiń przez długość łańcucha, ułóż tablicę z trzech części: przed-wielką, wielką i post-dużą, odejmij 32 od środkowej litery, a następnie przekonwertuj z powrotem na znak, aby uzyskać wielkie litery, na szczęście nie też nie zamienisz spacji w widoczną postać, mam nadzieję, że jest to do przyjęcia?
źródło
$s
i.ToLower()
wklejać. -'Hello world';$s='hello world';
Zespół CP-1610 , 50 DECLE = 63 bajty
Ten kod jest przeznaczony do uruchamiania na Intellivision .
Kod operacji CP-1610 jest kodowany z 10-bitową wartością, znaną jako „DECLE”. Ten program ma 50 DECLE długości, zaczynając od 4800 $, a kończąc na 4831 $.
Wynik
źródło
MATL , 30 bajtów
Wypróbuj w MATL Online!
źródło
PHP,
767471 bajtówDziękuję @hd za opóźnienie trwające pełną sekundę i bez ułamka!
Dzięki @ user63956 za 2 bajty i @aross za 3 bajty.
Uruchom z
-nr
.źródło
sleep(print"$s\r")
.C,
97wycofanych106 bajtówze znakami ucieczki liczonymi jako 1 bajt
Uwaga:
Skomentowałem opóźnienie czasowe dlaniepowiązanego TIO, ponieważ czeka on na zakończenie przed wyświetleniem danych wyjściowych, nie wydaje się również rozpoznawać zwrotów karetki i umieszcza nowe wiersze. Ponadto, jeśli korzystasz z systemu Windows, sen trwa w milisekundach, a nie sekundach, więcsleep(1)
powinno się to staćsleep(1000)
.Uwaga 2: Wycofałem ten wpis na chwilę, dopóki błędy wyjściowe nie zostaną usunięte.źródło
^C
to zatrzymać. (też jestem naJavaScript (ES6),
141 139131 bajtówOszczędność 8B dzięki Apsillers
Wyjaśnienie
Tworzy to funkcję bez argumentów, która dzieli ciąg
hello world
na tablicę znaków i wielką literęd+1
zastępuje .d
jest licznikiem rozpoczynającym się0
i zwiększanym za każdym razem.Stosowanie
źródło
_=>
pan zrobić mieć kompletny program (na przykład, jeśli zatrzymany go w pliku, node.js będzie działać poprawnie to do końca). Moje rozumienie zakazu „fragmentów kodu” jest przeciwne pisaniu kodu, który domyślnie przyjmuje pewne dane wejściowe jako zmienną, np. „Jeśli założymy, żei
już ma dane wejściowe, możemy to zrobić…”, co nie dzieje się tutaj, ponieważ jest to wyraźnie brak wejścia.Noodel , 22 bajty
Spróbuj:)
Jak to działa
Fragment używa 25-bajtowej wersji, która zapętla się w sposób ciągły.
źródło
Bash + coreutils,
9998 bajtówźródło
Perl 6 ,
6561 bajtówGIF:
Jak to działa
Sekwencja ucieczki ANSI
\ec
czyści ekran.W każdej iteracji
i
ciąg znaków „na stałe” jest zastępowany wersją pisaną wielkimi literami. Funkcja zawsze powraca , który jest przekazywany do funkcji, która interpretuje ją jako snu sekund.say
True
1
źródło
Rubin,
8281 bajtów^ H to ascii 8 (backspace) i ma tylko 1 bajt.
źródło
C, 87 bajtów
Kompiluje i działa w systemie Linux.
źródło
Mathematica,
130128123110108 bajtówObjaśnienie: Od
i=1
do 11, drukuj od 1 do (i-1) znaku „hello world”, wielkie litery"hello world"[i]
, a następnie drukuj resztę łańcucha, zwiększająci
jednocześnie.źródło
Java
215212204203 bajtówNie golfowany:
źródło
interface A
(ze spacją)? Dodatkowo możesz usunąć odstęp między,
iCharacter.toUpperCase
.R ,
106103 bajtówPo prostu prosta pętla, czyszczenie konsoli
cat('\f')
wydaje się nieco zależne od systemu, ale nie znam lepszego sposobu.źródło
utf8ToInt
. To nie zadziałało, przestrzeń musi być traktowana jako specjalny przypadek. W trakcie procesu odkryłem, żecat("\014")
wydaje się , że działa lepiej niż praca tam, gdziecat("\f")
nie. ale nie w TIOC, 122 bajty
Krótszy niż C #: D
źródło
i<11
zamiasti<10
w pętliPerl, 75 bajtów
Używa kodu ANSI, ESCcaby wyczyścić konsolę i przesuwać kursor w lewym górnym rogu przy każdej iteracji, ale nadal potrzebuje
\n
na końcu łańcucha zamiany, aby uniknąć utraty całej animacji w buforze linii.Pomyślne wywołanie
print
zwraca wartość 1, którą można przekazać bezpośrednio dosleep
.źródło
$`
i$'
zaoszczędzić na tym kilka bajtów(.{$_})(.)(.*)
(nie będzie działać w terminalu, ale to nie jest problem). Wymaga to modyfikując trochę resztę kodu jednak:"hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger
. (Napisałem prawie ten dokładnie kod, a kiedy szukałem, czy ktoś napisał już odpowiedź na perla, znalazłem twój). I mały szczegół na temat liczby bajtów: możesz użyć nowej linii literowej, aby zapisać bajt, a może jakiegoś rodzaju literału\33c
(choć nie jestem zbyt pewien tego ostatniego).SmileBASIC,
9071 bajtówźródło
Galaretka ,
2421 bajtówJest to niladyczne łącze / funkcja, która drukuje do STDOUT. To nie działa jako pełny program.
Kod nie może być testowany na TIO; używa znaków kontrolnych, a TIO nie ma emulatora terminali (jeszcze).
Jak to działa
źródło
(Strings are cast to Boolean.)
To przebiegłe!C, 122 bajty
Jako ćwiczenie napisałem to, aby zapewnić bardziej optymalny format wyjściowy niż niektóre inne odpowiedzi. Oznacza to również, że kursor znajduje się za ostatnią wielką literą podczas przerw.
(Nowe linie i wcięcia kosmetyczne i nie są częścią liczby bajtów)
Teraz niektórzy czytelnicy mogą zauważyć, że wymaga to trochę masowania, aby uruchomić się na nowoczesnych maszynach (magiczna inkantacja
-static -Wl,-N
), ale tak właśnie zachowywały się rzeczywiste implementacje języka C, więc myślę, że jest to poprawne. Zakłada również, że zestaw znaków to ASCII i nie drukuje końcowego nowego wiersza.Bonus: Za EBCDIC wersji, można zastąpić
8
z22
i64
z32
, i przełączyć na logikęp[1]
ip[2]
. Aby przetestować w systemie innym niż EBCDIC, możesz dokonać kompilacji-funsigned-char -fexec-charset=cp037
.Dane wyjściowe to 43 bajty:
Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD
źródło
Scala, 92 bajty
Bez golfa
źródło
h(i)toUpper
Partia, 184 bajty
Co ciekawe, wiersz polecenia dla
timeout/t>nul 1
ulega uszkodzeniu, jeśli nie ma końcowego nowego wiersza, więc nie mogę go umieścić na końcu pliku.źródło
Rubinowy, 108 bajtów
Pierwszy raz student pierwszego roku. To nie jest orzeł, ale jestem przynajmniej trochę dumny.
źródło
Pascal,
187152 bajtówNie do końca najskuteczniejszy lub najkrótszy, ale działa całkiem dobrze!
Testowane i działa na Free Pascal Compiler 2.6+.
Dzięki @manatwork za oszczędność 35 bajtów!
Użyłem http://www.onlinecompiler.net/pascal do skompilowania pliku i uruchomienia go w systemie Windows.
Jak dotąd nie widziałem z tym żadnego problemu.
źródło
UpCase
Funkcja istnieje od dawnych czasów Turbo. (Tam obsługiwane tylkoChar
, ale w Free Pascal obsługuje również ciągi znaków).Word
(lubByte
); zrób P a,const
aby wyprowadzał typ z wartości inicjalizacji; gdy tam jest, uczyń X inicjalizowaną stałą, aby pozbyć się osobnegovar
słowa kluczowego (to może nie działać we wszystkich wariantach Pascala, ale na pewno działa w Wolnym Pascalu); użyj,ClrScr
aby przejść do lewego górnego rogu; zastąpić, żeif
z jednym wyrażeniem:X:=X*Ord(X<11)+1
. pastebin.com/FfaixkESconst X:Word=1;P='hello world';
i toconst X:Word=1;P='hello world';
było możliwe. Nauczyłem się Pascala na Turbo Pascal 7, który może nie być z tym zgodny. I zupełnie zapomniałemupcase
. Dziękuję bardzo!C
12011010496 bajtówWersja bez golfa
@Pakk Dziękujemy za zapisanie niektórych bajtów, świetny pomysł. :)
@Pakk @KarlNapf Dzięki chłopaki za wasze wkłady.
można jeszcze skrócić !? :)
źródło
-=
i+=
. Ponadto zmienna wskaźnikowa może zapisać,[]
ale nie jestem pewien.char *j,s[]="hello world";
aby zaoszczędzić jeszcze kilka znaków.f(){char*j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(1));}
89 bajtów.Python 2,
220189179 bajtówRozwiązanie bez użycia łańcuchów i
capitalize()
liczby bajtów, jak to jest:I nieco dłuższy wariant (191 znaków) bez resetowania wielkości liter:
źródło
C ++,
88125 bajtówWersja bez golfa:
Kompilowany z TDM-GCC na komputerze z systemem Windows 10 z Dev-C ++.
Edycja: Zapomniałem dołączeń w mojej pierwszej wersji.
źródło
for
pętli, przenosząc powrót karetki na początek łańcucha. Pomogę ci również: Wykonaniefor(int c=1;;c++)
pozwoli Ci zaoszczędzić 1 bajt.for(int c=1;;)
a następniea[c++]-=32;
zapisać kolejny bajt.