Terminalinizdeki metni canlandırın


46

Terminalinizdeki metni canlandırın

Amaç

Amaç, çıktınızdaki "Merhaba dünya" dizesini "canlandırmak", böylece her karakter birbiri ardına büyük harfle yazılabilir.

Her harf büyük harfle yazıldıktan sonra programınız çıkabilir.

Örneğin;

# 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

Dizgiyi yalnızca bir kez hareketlendirmeli ve her durum arasında 1 saniye gecikmeli olmalıdır.

Giriş

Giriş gerekmez, ancak "Merhaba dünya", "animasyonlu" olan dize olmalıdır.

Çıktı

"Merhaba dünya" dizgisi animasyonlu olmalıdır. Bir tür dalga animasyonu oluşturmak için çıktı 1 satır olmalıdır. Boş bir sondaki yeni satıra izin verilir. Örnek gif;

https://i.gyazo.com/be12b693063b463540c5bf1f03d2454a.gif

Bunu bir metasploit youtube videosunda gördüm ve etkinin oldukça havalı olduğunu düşündüm.

Bu , en düşük bayt sayımı kazanan sayılır.

Sandbox Bağlantısı


Bir hatayla çıkıp durabilir mi?
Stewie Griffin,

@StewieGriffin, animasyon görüntülenebilir olduğu sürece elbette.
38'te

1 saniyelik gecikmenin mücadeleye katılacağını sanmıyorum. Buna benzer bir demet yaşadık ve her seferinde aynı kazan plakası eklendiği gibi görünüyor.
xnor

2
@xnor Gecikme süresinin açıkça 1 saniye olması mı demek istiyorsunuz yoksa herhangi bir gecikme mi demek istiyorsunuz?
Sonuncusu,

1
@Metoniem Hayır, yalnızca hedefte açıklananları. Yanlış anlamadığım sürece. Her harf yalnızca bir defa soldan sağa büyük harfle yazılmalıdır, "merhaba" da "H" ile başlayan ve "dünya" da "D" ile biten
ʰᵈˑ

Yanıtlar:


33

Vim 26 bayt

ihello world<ESC>qq~gsul@qq0@q

Açıklama (henüz no .gif):

İlk önce 'merhaba dünya' metnine girmeliyiz. Bu oldukça basit. Bu sadece:

ihello world<ESC>

Bu noktada, imleç 'dünya’daki is d ’üzerindedir. Sonraki:

qq              " Start recording into register 'q'
  ~             " Swap the case of the character underneath the cursor, and move the cursor to the right
   gs           " Sleep for one second
     u          " Undo the last change (of swapping case).
      l         " Move one character to the right (Get it? 'l' == 'Right' because vim is intuitive!)
                " This will cause the error to break on the last character of the input.
       @q       " Call register 'q'
         q      " Stop recording
          0     " Move to the first character
           @q   " Call the recursive macro

Ayrıca bulduğum diğer iki bayt sürümü de var:

ihello world<ESC>qq~gsulq011@q
ihello world<ESC>011@='~gsul'<cr>

Havalı adam! İşte çıktı: i.gyazo.com/52d0b9268446aed36ce7eb641c40ff6c.gif (bunun yarısı olsa da, Gyazo kaydı durdurdu)
ʰᵈˑ

Döngüyü~ kırdığını sanmıyorum . Sanırım bu zor iş yaparl
Kritixi Lithos

@KritixiLithos Ah, test ettikten sonra haklı görünüyorsunuz. İyi nokta, ben bunu düzenleyeceğim
DJMcMayhem

1
Onaylayabilir - Bu işe yarıyor.
SIGSTACKFAULT

15

Python 2, 98 94 90 bayt

for x in range(11):s='hello world';print'\r'+s[:x]+s[x:].capitalize(),;[1for y in' '*8**8]

@ElPedro sayesinde -9 -4 bayt @JonathanAllan ve @Rod sayesinde -4 bayt


3
PPCG'ye hoşgeldiniz, güzel ilk mesaj c:
Rod

2
Güzel mesaj! Gerçi aynı anda sermaye "H" ve "W" var gibi görünüyor repl.it/Fhii It "H" küçük harfe değil görünüyor -
ʰᵈˑ

1
Yazdırma sorunu hakkında, -uargüman iletebilir ve kullanabilirsiniz print"\t"+s[:x]+s[x:].title(),;(takip eden virgül notu) . Bu da bayt sayınızı değiştirmeyecektir (çünkü argüman +2 bayt ekleyecektir)
Rod

2
@Rod Python için kabul edilebilir bir çağrı olduğundan bayrak bir bayt olarak sayılır python -c 'code here'. Bayrağa göre, çağrı python -uc 'code here'bir bayt farklıdır.
Mego

1
Sürümünüzün hemen hemen tamamı, ancak 95 bayt ve ekranı temizler (Windows 7-64 üzerinde 2.7.8 ile test ettim). Çevrimiçi Deneyin, yalnızca satır satır sonuçtan oluşan bir animasyon vermez.
Jonathan Allan,

13

Commodore 64, 168 162 137 133 BASIC (ve tokenized) bayt kullanılır

 0s=1024:?"{control+n}{clear home}hello world":fOi=.to1:fOj=.to11:x=pE(s+j):pokes+j,x+64
 1x=pE(1023+j):pO1023+j,abs(x-64):pO1029,32:pO1035,32:fOz=.to99:i=.:nEz,j,i

Bunu gerçek bir C64 veya emülatöre girmek için BASIC anahtar kelime kısaltmalarını kullanmanız gerekir (veya programı Commodore 128'e girin ve C64 modunda tekrar yükleyin, ancak bunun 128 üzerinde de çalışması gerekir). {control+n}Sadece açılış alıntı sonra / ekranı çalışacaktır. Kısaca kullanılır chr$(14)ve bu nedenle bazı baytları kaydeder ve karakter kümesini işletme moduna veya büyük / küçük harf karakterlerine geçirir.

Sizin için bazı kısaltmalar ekledim, siz de. {clear home}Karakter basılarak yapılır Shiftve CLR/HOMEbaşlangıç tırnak işaretinden sonra tuşuna basın.

Açıklayıcı amaçlar için, yasaklanmamış liste aşağıdaki gibi girilebilir:

 0 let s=1024
 1 print chr$(14); chr$(147); "hello world"
 2 for i=0 to 1
 3  for j=0 to 11
 4   let x=peek(s + j)
 5   poke s + j, x + 64
 6   let x=peek(1023 + j)
 7   poke 1023 + j, abs(x - 64)
 8   poke 1029, 32
 9   poke 1035, 32
10   for z=0 to 99
11    let i=0
12   next z
13  next j
14 next i

PETSCII karakter grubunu işletme moduna geçirerek (büyük / küçük harf) ve merhaba dünya dizesini 0400 $ 'lık bellek konumunda bulunan ekranın üst satırına yazarak çalışır, daha sonra sonraki konum için her bir konumdaki değeri alır. Oradan 11 bayt ve her bir değeri 64 artırın (büyük harf eşdeğeri). J sayacı> 0 ise, önceki hafıza konumunu tekrar 64 azaltmak için 2. satırdaki bir rutini çağırır.

Satır 3 bir duraklamadır, ayrıca $ 0405 ve $ 040b konumlarına bir boşluk yazar, bu bir hata düzeltmesidir (muhtemelen bazı baytları kurtarmak için kaldırılabilir).

Commodore C64 animasyonlu merhaba dünya


Şunu eklemeliyim ki fori=0to1step0... nextitemelde while(true){...}daha modern dillerde olduğu gibi sonsuz (goto'suz) bir döngü yaratıyor .
Shaun Bebbers

1
Neden sonsuz bir döngü yerine sadece bir goto kullanmıyorsunuz? Eklenmesi gereken 2 yeni satırla bile, baytları kurtarır. Ayrıca RAM baytları, kodunuzdaki bayt sayısıyla aynı değildir.
MilkyWay90

Çünkü GO TOyasaklı, doğru ;-) Biri CLR, kırık FRE(0)işlevli boş kalan baytlarda çalışmaya başlamadan önce bu listeyi kolayca kendi başına
halledebilir

1
oh bunun için üzgünüm
MilkyWay90

11

C #, 230 215 193 161 135 134 130 bayt

C # yani uzun doğru! :-( Ama bazı yardım ve aramalardan sonra, ben (ve diğerleri, gerçekten) tam olarak 100 baytı çıkarmayı başardım.

golfed

()=>{for(int i=1;;){var b="\rhello world".ToCharArray();b[i++]-=' ';System.Console.Write(b);System.Threading.Thread.Sleep(1000);}}

Ungolfed

class P
{
    static void Main()
    {
        for (int i = 1;;)
        {
            var b = "\rhello world".ToCharArray();
            b[i++] -= ' ';
            System.Console.Write(b);
            System.Threading.Thread.Sleep(1000);
        }
    }
}

Ekran görüntüsü

1 saniye gecikmeli animasyon Her ne kadar döngü ve daha hızlı daha iyi görünüyor olsa da ..

Güncellemeler

  • Bunun yerine satır başı kullanarak 15 bayt kaybetti, Clear()bu da bir System.Consolesatır içi ile bir kullanım yerine kullanmamı sağladı .

  • @DevRicher sayesinde 23 byte tasarruf sağlayan lambda ile değiştirilen program

  • Bu noktada @devRicher ile bir işbirliği oldu , bazı önerilerim sayesinde 32 bayt daha kaybetmeyi başardım!
  • Tarafından sayesinde 2 gerçekten akıllı ve ilginç öneri @Kratz I yerine başardı new string(b)ile bve b[i]=char.ToUpper(b[i])ile b[i]-=' 'bana başka 26 bayt tasarruf!
  • @Snowfirei++ sayesinde hareket ederek 1 bayt daha az
  • Dizesinin başlangıcına satırbaşı hareketli ve kaldırarak 4 bayt az i<11benim gelen fordöngü

1
Birkaç bayt class P{static void Main(){ ... }}ayırmak ()=>{ ... }için değiştirin . PPCG fonksiyonları cevap olarak kabul eder, bu yüzden bir lambda iyi çalışır.
devRicher

@devRicher Ah Daha önce hiç lambas kullanmamıştım, ama bu harika bir gelişme gibi görünüyor. Teşekkürler!
Metoniem

Bunları nasıl kullanacağınızı bilmiyorsanız (veya istemiyorsanız), basit bir işlem için hala iyidir void g(){ ... }.
devRicher

char g = string j[x]Yaklaşık 50 bayttan tasarruf etmek için dizi indekslerine sahip dizgelere ( ) erişebilirsiniz :()=>{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);}}
devRicher

1
Bir artımı for yan tümcesinden kaldırarak ve onu dizi erişimine koyarak başka bir baytı kaydedebilirsiniz b[i++]-=' '. İşe yarayacaktı, çünkü o zaman for döngüsündeki durumu kaldırabilir ve sadece yazabilirsiniz for(int i=0;;). OP, programın bir hatayla çıkabileceğini belirtti, bu yüzden bir IndexOutOfRangeException
Snowfire

10

Powershell, 126 119 107 104 Bayt

'Hello world';$s='hello world';1..10|%{sleep 1;cls;-join($s[0..($_-1)]+[char]($s[$_]-32)+$s[++$_..11])}

görüntü tanımını buraya girin

Düzeltmeler (büyük olasılıkla birçok olacaktır):

$s.LengthConst 1011 olarak değiştir

Yeniden yapılandırılmış string oluşturucu, 1 join ifadesini kaldırdı ve ++$syerine @AdmBorkBork($s+1) bazı baytları kaydetmek için kullanıldı

AdmBorkBork, yalnızca iki kez dizenin kullanılmasının, kapsüllemekten ve daha sonra kullanmaktan daha kısa olduğuna dikkat çekiyor .ToLower()- bu da, ayrıntılı powershell'in ne kadar olduğu hakkında çok şey söylüyor, -3!


temel olarak dizginin uzunluğu boyunca döngü yapar, üç bölümden oluşan bir dizi oluşturur: ön-kapital, büyük ve büyük-harften sonra ortadaki harften 32'yi alır, daha sonra büyük harf almak için bir karaktere geri döner, neyse ki bu boşluğu da görünür bir karaktere dönüştürmeyin, umarım bu kabul edilebilirdir?


2
Sadece dize baskı ziyade içine kaydederek önünde kapalı üç bayt kaydedebilir $sve .ToLower()bunu ing. -'Hello world';$s='hello world';
AdmBorkBork


9

CP-1610 montajı, 50 DECLE = 63 bayt

Bu kod bir Intellivision'da çalıştırılmak üzere tasarlanmıştır .

Bir CP-1610 opcode 'DECLE' olarak bilinen 10 bitlik bir değerle kodlanır. Bu program 50 DECLEs uzunluğunda, 4800 dolardan başlayıp 4831 dolardan başlıyor.

                                  ROMW  10          ; use 10-bit ROM
                                  ORG   $4800       ; start program at address $4800

                          main    PROC
4800 0002                         EIS               ; enable interrupts (to enable display)

4801 0001                         SDBD              ; load pointer to string in R4
4802 02BC 0026 0048               MVII  #@@str, R4

4805 02A2                         MVI@  R4,     R2  ; R2 = length of string
4806 0091                         MOVR  R2,     R1  ; R1 = uppercase counter

4807 02BD 0214            @@loop  MVII  #$214,  R5  ; R5 = video memory pointer
4809 0093                         MOVR  R2,     R3  ; R3 = character counter

480A 02A0                 @@next  MVI@  R4,     R0  ; R0 = next character
480B 0338 0020                    SUBI  #32,    R0  ; minus 32 -> character #
480D 004C                         SLL   R0,     2   ; multiply by 8 to get the
480E 0048                         SLL   R0          ; correct GROM card
480F 03F8 0007                    XORI  #7,     R0  ; add 7 (for white)

4811 014B                         CMPR  R1,     R3  ; uppercase? ...
4812 020C 0002                    BNEQ  @@draw

4814 0338 0100                    SUBI  #256,   R0  ; ... yes: sub 32*8

4816 0268                 @@draw  MVO@  R0,     R5  ; draw character
4817 0013                         DECR  R3          ; decrement character counter
4818 022C 000F                    BNEQ  @@next      ; process next character or stop

481A 0001                         SDBD              ; R0 = spin counter to wait ~1 second
481B 02B8 0038 00D3               MVII  #$D338, R0  ;    = 54072 = 13518 * 60 / 15
                                                    ; (assuming 13518 cycles per frame)

481E 0010                 @@spin  DECR  R0          ; 6 cycles
481F 022C 0002                    BNEQ  @@spin      ; 9 cycles
                                                    ; -> 15 cycles per iteration

4821 0114                         SUBR  R2,     R4  ; reset pointer to beginning of string
4822 0011                         DECR  R1          ; decrement uppercase counter
4823 022C 001D                    BNEQ  @@loop      ; process next iteration or stop

4825 0017                         DECR  PC          ; infinite loop

4826 000B 0068 0065 006C  @@str   STRING 11, "hello world"
482A 006C 006F 0020 0077
482E 006F 0072 006C 0064
                                  ENDP

Çıktı

görüntü tanımını buraya girin


7

MATL , 30 bayt

11:"10&Xx'hello world't@)Xk@(D

MATL Online'da deneyin !

11:              % Push [1 2 ... 11]
  "              % For each k in [1 2 ... 11]
  10&Xx          %   Pause for 10 tenths of a second and clear screen
  'hello world'  %   Push this string
  t              %   Duplicate
  @)             %   Get the k-th character from the duplicated string
  Xk             %   Convert to uppercase
  @(             %   Write into the k-th position of the string
  D              %   Display
                 % Implicit end

5

PHP, 76 74 71 bayt

Gecikmenin bir saniye olması ve hiçbir kesimi olmaması için @hd teşekkür ederiz!
2 byte @ user63956 ve 3 byte @ aross teşekkürler.

for(;$c=($s="hello world")[$i];sleep(print"$s\r"))$s[$i++]=ucfirst($c);

İle koş -nr.


1
İle 2 bayt kaydedebilirsiniz sleep(print"$s\r").
user63956

1
3 byte kaydet ucfirst
aross

4

C, 97 , 106 bayt çekilmiş

kaçış karakterleri 1 bayt olarak sayılır

char*a="HELLO\0WORLD\xED";b,c;m(){for(b=0;b<156;putchar(a[c]+32*(b/12^c||c==5)))(c=b++%12)||fflush(sleep(1));}

Not: Bağlantısız TIO'daki zaman gecikmesini yorumladım, çünkü çıktısını görüntülemeden önce tamamlanmasını bekler, ayrıca satırbaşını tanımaz ve yeni satırlar koyar gibi görünmez. Ayrıca, Windows kullanıyorsanız, uyku saniyeler yerine milisaniye cinsindendir, öyle sleep(1)olmalıdır sleep(1000).

Not 2: Bu girişi çıkış hataları ütülenene kadar bir süre için geri çektim.


Bazı nedenlerden dolayı, bu benim
makineme

Pencerelerdeyseniz, gecikmeyi değiştirmeniz gerekecek, ayrıca bir taşıma iadesinde de bitecek, böylece 130'dan 129'a değiştirmek isteyebilirsiniz, böylece son yineleme sırasında yazdırılmasını önler.
Ahemone,

Benim için bu program hiç bitmiyor ve hiçbir şey çıkmıyor. ^CDurdurmak için el ile yapmak zorunda kaldım . (ayrıca
mac'tayım

Baskı tamponu sorunu olduğuna inanıyorum, şimdilik girişimi geri çekeceğim.
Ahemone,

4

JavaScript (ES6), 141 139 131 bayt

Apsillers sayesinde 8B tasarrufu

_=>a=setInterval("b=[...`hello world`],c.clear(b[d]=b[d].toUpperCase(++d>10&&clearInterval(a))),c.log(b.join``)",1e3,c=console,d=0)

açıklama

Bu, dizgiyi hello worldbir karakter dizisine bölen ve d+1th karakterini büyük harf yapan , argümansız bir işlev oluşturur . her seferinde dbaşlayan 0ve artan bir sayaçtır .

kullanım

f=_=>a=setInterval("b=[...`hello world`],c.clear(b[d]=b[d].toUpperCase(++d>10&&clearInterval(a))),c.log(b.join``)",1e3,c=console,d=0)
f()

Zekice, güncelleyeceğim.
Luke,

Ayrıca, bunun bir işlev yapması için hiçbir neden göremiyorum, çünkü girdi gerektirmiyor - sadece kodu çalıştırın, değil mi?
apsillers

Soru bir program olması gerektiğini söylüyor, ancak bu durumda bir işlev de sunabilirsiniz. Kod parçacıklarına genellikle izin verilmez.
Luke,

Bu çok hoş gg!
45'te

Bu durumda izin verilmeyen bir "program" ile izin verilmeyen bir "kod pasajı" anlayışınızı ayırt edebilir misiniz? Sadece lider kaldırırsanız _=>size yapmak tam program var (bir dosyaya takılıp örneğin, node.js tamamlanma başarıyla çalıştırmak olacaktır). “Kod pasajlarına” karşı yasağı anlama, bazı girişleri bir değişken olarak doğrudan kabul eden bir kod yazmamasına karşıdır, “eğer izaten bir girişi varsa, yapabiliriz ...” gibi, burada olmadığı için giriş yok.
apsillers

4

Erişte , 22 bayt

”<8@\|DḶ|\6þıHḶƥɲSḍsɲS

Dene:)


Nasıl çalışır

”<8@\|DḶ|\6þ           # Displays the string "hello¤world".
”<8@\|DḶ|\6            # Decompresses to the array ["h", "e", "l", "l", "o", "¤", "w", "o", "r", "l", "d"] and pushes it on top of the stack.
           þ           # Pushes a copy of the array to the screen which since is an array is done by reference.

            ı          # Makes the array on the top of the stack the new stack.

             HḶƥɲSḍsɲS # Loops eleven times creating the animation.
             H         # Pushes the string "H" on to the top of the stack.
              Ḷ        # Consumes the "H" that gets evaluated as a base 98 number which comes out to eleven.
               ƥ       # Move the stack pointer up one.
                ɲS     # Switch the case of the top of the stack which will show up on the screen because the array is done by reference.
                  ḍs   # Delay for one second.
                    ɲS # Switch the case back.
                       # Implicit end of the loop.

Snippet, sürekli döngü yapan 25 baytlık bir sürüm kullanıyor .

<div id="noodel" cols="10" rows="2" code="”<8@\|DḶ|\6þıḷʠ*HḶƥɲSḍsɲS" input=""/>
<script src="https://tkellehe.github.io/noodel/release/noodel-2.5.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


4

Bash + coreutils, 99 98 bayt

x=hello\ world
for((;n<11;)){
echo -en "\r${x:0:n}"`tr a-z A-Z<<<"${x:n:1}"`"${x:n+++1}"
sleep 1
}

3

Perl 6 , 65 61 bayt

for 3..12 ->\i{sleep say "\echello world".&{S:nth(i)/./{$/.uc}/}}

(sleep say S:nth(3+$++)/./{$/.uc}/with "\echello world")xx 11

GIF: görüntü tanımını buraya girin

Nasıl çalışır

ANSI kaçış dizisi \ecekranı temizler.
Her yineleme, isabit kodlu dizenin 'karakteri, büyük harf sürümüyle değiştirilir. Her zaman işlevini verir hangi yorumlayıp onu uyku işlevine geçirilir, ikinci.
sayTrue1


3

Ruby, 82 81 bayt

12.times{|a|$><<?^H*11;'Hello world'.chars{|y|$><<((0!=a-=1)?y:y.upcase)};sleep 1}

^ H, ascii 8'dir (geri alma) ve yalnızca 1 bayttır.


3

C 120 110 104 96 bayt

f(){char *j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(‌​1));}

Ungolfed versiyonu

void f()
{
  char *j;
  char s[]="hello world";
  j=s; 

   for (;*j;j++)
   {
      *j-=32;  
       printf(s); // print the string and right after change the same char to lower case
       *j+=32;
      fflush(0);
      sleep(1);
   }

}

@Pakk Bazı baytları kaydettiğiniz için teşekkürler, harika bir fikir. :)

@Pakk @KarlNapf Girişleriniz için teşekkürler.

hala kısaltılabilir! :)


Kullanım -=ve +=. Ayrıca, bir işaretçi değişkeni kurtarabilir, []ancak emin değilim.
Karl Napf

1
char * j; f () {char s [] = "merhaba dünya"; (j = s; * j; j ++) için {* j- = 32; printf ("\ r% s", s); * j + = 32; fflush (0); uyku (1);}} (103 karakter)

1
Önceki yorumun arkasındaki fikir: Printf sonra tekrar küçük harf yapın, sonra j-1 olup olmadığını kontrol etmeniz gerekmez. Bazı karakterleri kaydetmek için işaretçiler kullanın.

2
char *j,s[]="hello world";birkaç karakter daha kaydetmek için.

1
f(){char*j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(1));}89 bayt.
Karl Napf

3

C, 87 bayt

m(){char*f,a[]="\rhello world";for(f=a;*++f;*f&=95,printf(a),*f|=32,fflush(sleep(1)));}

Linux üzerinde derler ve çalışır.


3

Mathematica, 130 128 123 110 108 bayt

Dynamic@o
s="hello world";i=1;t=StringTake;Do[o=t[s,{1,i-1}]<>Capitalize@t[s,{i}]<>t[s,{++i,11}];Pause@1,11]

Açıklama: i=111'den 11'e kadar, "merhaba dünya" nın 1'den (i-1) inci karakterine kadar "hello world"[i]yazdırın, sonra büyük harfle yazın , ardından iaynı anda artan şekilde dizenin geri kalanını yazdırın .


3

Java 215 212 204 203 bayt

interface A{static void main(String z[])throws Exception{for(int i=0;i<10;i++){char[]b="helloworld".toCharArray();b[i]=Character.toUpperCase(b[i]);System.out.println(new String(b));Thread.sleep(1000);}}}

Ungolfed:

 interface A {
 static void main(String z[]) throws Exception {
    for (int i = 0; i < 10; i++) {
        char[] b = "helloworld".toCharArray();
        b[i] = Character.toUpperCase(b[i]);
        System.out.println(new String(b));
        Thread.sleep(1000);
    }
  }
}

1
Olmamalı mı interface A(boşlukla)? Ayrıca ,ve arasındaki boşluğu kaldırabilirsiniz Character.toUpperCase.
NoOneIsHere 19

2
Siteye Hoşgeldiniz!
DJMcMayhem

NoNoOIIs için KudosHer 3 puan için
Geliştirme Geliştirme

Thanks @DJMcMayhem, Her zaman zorlukları okumayı sevdim ve sonunda birine cevap verdim!
Geliştirme Geliştiricisi

3

R , 106 103 bayt

x=el(strsplit("hello world",""))
for(i in 1:11){y=x;y[i]=toupper(y[i]);cat('\f',y,sep='');Sys.sleep(1)}

Sadece basit bir döngü, konsolu temizlemek cat('\f')biraz sisteme bağımlı görünüyor, ancak daha iyi bir yoldan haberdar değilim.


Bunu kullanarak aşmayı denedim utf8ToInt. Bu işe yaramadı, alanın özel bir durum olarak ele alınması gerekiyor. Süreçte bunun cat("\014")daha iyi çalıştığını ve sonrasında çalışmadığı yerlerde bulunduğunu keşfettim cat("\f"). ama
TIO'da

2

C, 122 bayt

i;f(){char s[]="Hello world\r";for(i=0;i<11;i++){s[i]=toupper(s[i]);s[i-1]=tolower(s[i-1]);printf(s);fflush(0);sleep(1);}}

C # 'dan daha kısa: D


1
Ayrıca son karenin görünür olması için for- i<11i<10
loop'unuz

2

Perl, 75 bayt

sleep print"\33c".("hello world"=~s/(.{$_})(.)(.*)/$1\U$2\E$3\n/r)for 0..10

ESCcKonsolu temizlemek ve her yinelemede imleci sol üste taşımak için ANSI kodunu kullanır , ancak \ntüm animasyonun satır arabelleğinde kaybolmasını önlemek için yine de dizenin sonunda gerekir .

Başarılı bir çağrı print, doğrudan iletilebilecek 1 değerini döndürür sleep.


Bunun için birkaç bayt kullanabilir $`ve $'kaydedebilirsiniz (.{$_})(.)(.*)(bir terminalde çalışmaz, ancak bu bir problem değildir). Bu biraz değiştirerek kodunuzun olsa geri kalanını bit gerektirir: "hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger. (Neredeyse bu tam kodu yazdım, sonra birileri henüz bir perl cevabı yolladıysa bakarken ben seninkini buldum). Ve bayt sayısı ile ilgili küçük bir ayrıntı: Bir bayttan tasarruf etmek için küçük bir yeni satır kullanabilirsiniz ve belki de bir tür küçük litre kullanabilirsiniz \33c.
Dada

2

SmileBASIC, 90 71 bayt

FOR I=0TO 10CLS?"hello world
LOCATE I,0?CHR$(CHKCHR(I,0)-32)WAIT 60NEXT

2

Jöle , 24 21 bayt

”Æ⁹Œu⁸¦ȮœS
“½,⁻⁸3»Jç€

Bu, STDOUT'a basan niladik bir bağlantı / fonksiyondur. Tam bir program olarak çalışmaz.

Kod TIO'da test edilemez; kontrol karakterlerini kullanır ve TIO'da terminal emülatörü yoktur (henüz).

Nasıl çalışır

“½,⁻⁸3»Jç€  Niladic link. No arguments.

“½,⁻⁸3»     Index into Jelly's dictionary to yield "hello world".
       J    Indices; yield [1, ..., 11].
        ç€  Apply the helper link to each index, with right arg. "hello world".


”Æ⁹Œu⁸¦ȮœS  Dyadic helper link. Left argument: i. Right argument: "hello world"

Ӯ          Set the return value to '\r'.
  ⁹         Set the return value to "hello world". Implicitly prints '\r'.
   Œu⁸¦     Uppercase the i-th letter.
       Ȯ    Print.
        œS  Sleep "hello world" seconds. (Strings are cast to Boolean.)

(Strings are cast to Boolean.)Bu sapkın!
Outgolfer Erik,

2

C, 122 bayt

Bir alıştırma olarak, bunu diğer cevapların bazılarından daha optimal bir çıktı biçimi sağlamak için yazdım. Ayrıca, imlecin duraklamalar sırasında en son yazılmış harflerden sonra durduğu anlamına gelir.

main(){
    char*p=".Hello world\rH";
    write(1,p+1,13);
    do{
        sleep(1);
        *p=8;
        p[1]|=32;
        p[2]^=(p[2]>32)*32;
        write(1,p++,3);
    }while(p[4]);
}

(Newlines ve girintiler kozmetik ve bayt sayısının bir parçası değil)

Şimdi, bazı okuyucular bunun modern makinelere koşmak için bazı masajlar gerektirdiğine dikkat çekebilir (sihirli teşvik -static -Wl,-N), ama bu, C'nin gerçek uygulamalarının nasıl davrandığını, bu yüzden bunun geçerli olduğunu düşünüyorum. Ayrıca, karakter kümesinin ASCII olduğunu varsayar ve sonunda yeni bir satır yazdırmaz.

Bonus: EBCDIC sürümünde, yerini alabilir 8ile 22ve 64ile 32ve mantığını geçmek p[1]ve p[2]. EBCDIC dışı bir sistemi test etmek için derleyebilirsiniz -funsigned-char -fexec-charset=cp037.

Çıktı 43 bayttır: Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD


2

Scala, 92 bayt

val h="hello world"
0 to 10 map{i=>print("\b"*99+h.updated(i,h(i)toUpper))
Thread sleep 999}

Ungolfed

val h="hello world"    //declare a variable h with the string "hello world"
0 to 10                //create a range from 0 to 10
map { i=>              //loop with index i
  print(                 //print
    "\b" * 99              //99 backspace chars
    + h.updated(           //and h with
      i,                     //the i-th char
      h(i).toUpper           //replaced with the i-th char in uppercase
    )     
  )
  Thread sleep 999       //sleep 999 ms
}

1
+1 içinh(i)toUpper
Her zaman 2

2

Toplu iş, 184 bayt

@echo off
for %%h in (Hello hEllo heLlo helLo hellO hello)do call:c %%h world
for %%w in (World wOrld woRld worLd worlD)do call:c hello %%w
exit/b
:c
timeout/t>nul 1
cls
echo %*

İlginç bir şekilde, timeout/t>nul 1yeni bir satır yoksa , komut satırı bozulur, bu yüzden dosyanın sonuna koyamam.


2

Ruby, 108 bayt

İlk defa, birinci sınıf öğrencisi. Kartal değil ama en azından biraz gururluyum.

12.times{|i|sleep(0.1); puts "\e[H\e[2J", "hello world".sub(/(?<=.{#{Regexp.quote(i.to_s)}})./, &:upcase);}

2

Pascal, 187 152 bayt

Tam olarak en verimli ya da en kısa değil, ama oldukça iyi çalışıyor!

uses crt,sysutils;label R;const X:Word=1;P='hello world';begin
R:clrscr;write(P);gotoxy(X,1);write(upcase(P[X]));sleep(999);X:=X*Ord(X<11)+1;goto R
end.

Test edildi ve Ücretsiz Pascal Derleyicisi 2.6 ve üzerinde çalışıyor.

35 byte tasarruf için @manatwork teşekkürler !


Dosyayı derleyip Windows üzerinde çalıştırmak için http://www.onlinecompiler.net/pascal kullandım .
Şimdiye kadar bununla ilgili herhangi bir sorun görmedim.


UpCaseEski Turbo zamanlarından beri bir fonksiyon var. (Orada yalnızca işlendi Char, ancak Serbest Pascal'da da dize
işliyor

Birkaç ufak tweaks: X Word(veya Byte); P'yi bir constbaşlangıç ​​yapın, böylece başlangıç ​​değerinden bir tür girin; oradayken, X'i ayrı bir varanahtar kelimeden kurtulmak için başlangıç ​​durumuna getirilmiş bir sabit yapın (bu, tüm Pascal değişkenlerinde çalışmayabilir, ancak kesinlikle Serbest Pascal'da çalışır); ClrScrsol üst köşeye atlamak için kullanın ; Bu yerine iftek bir ifade ile: X:=X*Ord(X<11)+1. pastebin.com/FfaixkES
manatwork

Bunu gerçekten bilmiyordum const X:Word=1;P='hello world';ve bu const X:Word=1;P='hello world';mümkündü. Pascal'ı Turbo Pascal 7'de öğrendim, bununla uyumlu olmayabilir. Ve tamamen unuttum upcase. Çok teşekkür ederim!
Ismael Miguel,

2

Python 2, 220 189 179 bayt

Dizeleri ve capitalize(), bayt sayısını kullanmadan çözüm

import time,sys
from numpy import *
F=fromstring("\rhello world",int8)
for i in range(1,12):
    time.sleep(1)
    F[i]-=32
    savetxt(sys.stdout,F,fmt="%c",newline="")
    F[i]+=32

Ve büyük / küçük harf sıfırlama olmadan biraz daha uzun değişken (191 karakter):

import time,sys
from numpy import *
a=arange(11)
F=tile(fromstring("\rhello world",int8),(11,1))
F[a,a+1]-=32
for i in a:
    time.sleep(1)
    savetxt(sys.stdout,F[i],fmt="%c",newline="")

Siteye Hoşgeldiniz! Fazladan boşluk bırakmış gibisin. Özellikle de eşittir işaretleriniz
Buğday Sihirbazı

2

C ++, 88 125 Bayt

#include<iostream>#include<unistd.h>
int main(){for(int c;++c<12;){char a[]="\rhello world";a[c]-=32;std::cout<<a;sleep(1);}}

Ungolfed versiyonu:

#include <iostream>
#include <unistd.h>

int main()
{
   for (int c;++c<12;)
   {
      char a[] = "\rhello world";
      a[c]-=32;
      std::cout << a;
      sleep(1);
   }
}

Dev-C ++ ile Windows 10 makinede TDM-GCC ile derlenmiştir.

Düzenleme: İlk sürümümdeki içerikleri unuttum.


Hey, sen benim C # cevabımda bana yardım eden adamsın! Sizin C ++ yaklaşım beni fark ettirdi olabilir aslında benim o koşulunu kaldırmak foryapmak: .. Ben de yardımcı olacağım dize başlangıcına satırbaşı taşıyarak döngü for(int c=1;;c++)size 1 bayt kurtaracak.
Metoniem

Ayrıca C # cevabımda önerdiğin gibi, son yorumumla birlikte yapabileceğin for(int c=1;;)ve sonra a[c++]-=32;başka bir baytı saklayabileceğin.
Metoniem

Ama başlangıçta satır başı olsa bile, hala neden olduğundan emin
olmasam

Bu ... oldukça garip. Bu olmamalı mıydı?
Metoniem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.