<(“<) Kuş Dansçısı (>”)>


22

Kuşunuz bazı egzersizler için kaşınıyor ve sürekli statik pozisyonlarda sıkışmaktan bıkmış durumda. Dans hareketine bağlı olarak her 100ms * n veya 200ms * n'de bir güncellenen rastgele dans eden bir ascii kuşu gösterecek bir program yazın. Kuş her zaman dans hareketi ile başlar <(")>.

Program uyku aralığını ( n >= 0 && n <= 50) ile çarpmak için bir sayı olan bir girişi kabul etmelidir .

100ms Hamle

^(")v
v(")^
^(")^
v(")v

200ms Hamle

(>")>
<(")>
<("<)

Ekstra Detaylar

  • Rastgele düzgün olmak zorunda değildir, ancak her dans hareketinin makul bir gelişme şansı olması gerekir (en az 60'ta 1'i adil görünüyor, aynı hareket üst üste iki kez gerçekleşirse sorun değil)
  • Bir seferde görüntülenen yalnızca bir kuş olmalı, birden çok kuş değil
  • İzleyen boşlukta izin verilir (ancak diğer izleyen karakterlere izin verilmez)
  • Uykudan önce bir kuş gösterilmelidir

Python 3'deki örnek

import random, time, sys

birds = """(>")>
<(")>
<("<)
^(")v
v(")^
^(")^
v(")v"""
birds = birds.split()

interval = int(input("Sleep for 100ms*"))
selection = -1

while True:
    if selection == -1:
        selection = 1
    else:
        selection = random.randint(0, len(birds)-1)
    sys.stdout.write('\r'+birds[selection])
    if selection > 2:
        time.sleep(0.1*interval)
    else:
        time.sleep(0.2*interval)

Kazanan


Kuşun gözleri çift tırnak mı yoksa iki tek tırnak işareti mi?
Pavel

@Pavel, double quote
redstarcoder

6
Bugün, python'da çok satırlı dizelerde alıntı işaretlerinden kaçmak zorunda olmadığınızı öğrendim.
Pavel,

Dilim çıktıları değiştiremezse, her 100/200 ms'de bir yeni kuş çıkartabilir miyim?
devRicher

1
İdeone kullanarak , Lua \rkaçış , tıpkı bir gibi davranıyor gibi görünüyor \n. os.execute("cls")Orada da kullanamam . @ redstarcoder
devRicher

Yanıtlar:


3

MATL , 53 bayt

xXx`'./U;HbG#3@@!{uu'F'v^<>(")'Za7e 7YrY)D5M3>QG*&XxT

Hareketler eşit olarak rasgele.

Aşağıda örnek bir çalışman = 2 . Veya MATL Online'da deneyin ! (Tercüman deneyseldir. Başlangıçta çalışmazsa, tekrar "Çalıştır" düğmesine basmayı veya sayfayı yenilemeyi deneyin).

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

açıklama

x                   % Take input n and delete it
Xx                  % Clear screen
`                   % Do...while
  './U;HbG#3@@!{uu' %   Push this (compressed) string
  F                 %   Specify source alphabet for decompression
  'v^<>(")'         %   Push target alphabet
  Za                %   Base conversion (decompress)
  7e                %   Reshape as a 7-row char matrix. Each row is a move
  7Yr               %   Push random integer from 1 to 7
  Y)                %   Select that row from the char matrix
  D                 %   Display it
  5M                %   Push the integer again
  3>                %   Does it exceed 3? Gives false (0) or true (1)
  Q                 %   Add 1
  G*                %   Multiply by n
  &Xx               %   Pause that many tenths of a second and clear screen
  T                 %   Push true
                    % End (implicit). Since top of the stack is true, this causes
                    % and infinite loop

6

Matlab, 125 117 bayt

Maalesef bu, TIO’da gösterilemez çünkü çıkışın “akışı” yoktur. İşte 1bunun yerine bir giriş için bir gif :

t=input('')*.1;a='^(")vv(")^^(")^v(")v(>")><(")><("<)';while 1;n=randi(7);clc;disp(a(n*5-4:n*5));pause(t+t*(n>4));end

-8 bayt için @LuisMendo teşekkürler!


5

*> <> , 103 101 bayt

<vD[3'(")'
1x<.5
S\:43_C43CdooI:o@:o@:o@Do
R!"^"x"v">
>:2* _"><"92.
x '>)">('u.02S*2:oooooodO<'<("<)'

Burada dene!( nilk yığına yazın yoksa bir hata alırsınız)

100 baytlık cevap almamış olduğum için meydan okumama karar verdim. yern yığın ve uzağa gitmek! Bu, (")bazı baytları kaydetmek için karakterleri yeniden kullanır .

açıklama

Bafllatma

<vD[3'(")'

Burada (")daha sonra kullanmak üzere saklıyoruz.

<           move the IP left
   [3'(")'  push '(")' to a new stack
  D         move back down to a clean stack
 v          move the IP down into "dance chooser"

Dans seçicisi

1x<.5
 \

Bu, ne tür bir dans üreteceğimizi seçmek için sıklıkla yürütülür.

 x         generate a 100ms dance or a 200ms dance
1  .5      jump to "200ms dance"
 \         mirror IP into "100ms dance"

Bir var vyukarıda xve <de bunun sağında. Bunlar x, IP'yi yanlış yöne hareket ettirmeye çalışırlarsa tekrar çalıştırılmasını sağlar.

100ms dans üret

S\:1*43_C43CdooI:o@:o@:o@Do

Burada 100ms dans hareketlerinden birini üretiyoruz.

 \                         mirror the IP right
  :                        copy n
   43 C43C                 call "generate '^' or 'v'" twice
     _                     ignored mirror
          do               output a carriage return
            o              output the first hand of the bird
             I:o@:o@:o@D   select, copy, and output '(")'
                        o  output the second hand of the bird
S                          sleep for previous n*100ms
 \                         mirror IP back to "dance chooser"

43C - "^" veya "v" oluşturun

R!"^"x"v">

Bu, "^" veya "v" üreten basit bir fonksiyondur ve daha sonra döner. xIP’nin yalnızca sola veya sağa hareket etmesini sağlamak için etrafta talimatlar verdiği dans seçicisine benzer şekilde çalışır .

     x      generate "^" or "v"
R!"^"    >  push "^" to stack and return
R     "v"   push "v" to stack and return

200ms dans oluştur

Bu başka bir şeyle başlar x. İki bölüme ayrılacaktır: <(")>diğeri (>")> and <("<), çünkü bunlar iki ayrı bölümdür ve xpaylaştıkları tek şeydir.

<(")>

>:2* _"><"b2.

Bu, temel olarak generate 100ms dancerutinin başlangıcını yapar , ancak kuşların ellerini ><rastgele bir ^vkombinasyon yerine doldurur . nBu sefer de iki ile çarpıyor . Bu generate 100ms dance, tüm kuşun çıktısını almak için rutini kullanarak tüm kurulum işlemini yapar ve bunun yerine 200 ms bekler.

>              move IP right
 :2*           copy n and do n*2
     _         ignored mirror
      "><"     push "><" to stack
          b2.  jump to "output carriage return" in "generate 100ms dance"

(>")> ve <("<)

x '>)">('u.02S*2:oooooodO<'<("<)'

Bu küçük açıklama (>")>ve <("<)nesil hakkındadır, ancak xIP onun dışına gönderebilir (aşağıda açıklanmıştır).

x                                  move to "choose dance", generate (>")>, <("<), or <(")> (previous routine)  
  '>)">('                          push '(>")>' to the stack
                          '<("<)'  push '<("<)' to the stack
         u              O<         ensure inner code block is always executed with IP moving left
                      od           output carriage return
                 ooooo             output bird
             S*2:                  sleep for n*200ms
          .02                      jump to "dance chooser"

3

JavaScript (ES6) + HTML5: 118 116 + 8 = 124 bayt

Javascript: 119 bayt

f=n=>{a.innerHTML='(>")>0<(")>0<("<)0^(")v0v(")^0^(")^0v(")v'.split(0)[r=+new Date%7],setTimeout(f,(1+(r<3))*100*n,n)}

Bir rasgele-ish numarası üretmek için çağdan beri milisaniye kullanıyorum. Teorik olarak, bu her zaman aynı (sayıyı) sayı (lar) üretecektir, ancak bilgisayarımdaki bir test bana oldukça rastgele bir sonuç verdi (çoğu sayı eşit ya da daha az belirdi). Ayrıca, bir kimliğe sahip html öğelerinin JavaScript'teki global pencere nesnesine eklenmesi gerçeğini kullanmak da document.getElementById()gerekmez.

HTML: 8 bayt

<b id=a>

Burada alıntıları atlıyorum ve betiketi kapatmıyorum. Geçerli bir html değil, ancak tüm tarayıcılar etiketi yine de otomatik olarak kapatıyor. Bunu cesurlaştırdım çünkü btek karakterli bir HTML öğesi ve kuşumun dansının fark edilmeyi hakettiği için.


1
F kendisini tekrar aradığında, tekrar n'yi geçmez. Benim için en azından bu ilk kez ancak ondan sonra sıfır (veya tanımsız) onurlandırıyor gibi görünüyor. Ayrıca bazen çıktı tanımsızdır. % 7 olmalı mı?
Chris M

Haklısın, geçmeyi unuttum Gerçekten de% 7 olmalı. Kuş pozlarının miktarını yanlış saydım. Düzeltme için teşekkürler, şimdi düzeltildi.
Luke

Üzgünüm bayt sayınızı arttırmaya devam ediyorum! Serin golf, rastgele işlev ve sıfır bölme seviyorum
Chris M

Teşekkürler. Cevabımı düzenlerken 4B'lik bir iyileştirme buldum, bu da 2B'yi biriktirdiğim için tamam oldu. ES5 ve önceki sürümlerinde bayt kaydetmek için kullanılan sıfır bölme, ancak ES6'dan bu yana şablon dizeleriyle parantezleri atlayabilirsiniz, bu yüzden artık yararlı değil. Farklı bir yaklaşımın geri kalanı (setInterval için ilk argüman olarak bir şablon dizesini kullandım).
Luke

2

PowerShell , 124 117 bayt

(Teşekkürler TimmyD )

for(){(-split'^(")v v(")^ ^(")^ v(")v (>")> <(")> <("<)')[($i=0..6|random)];sleep -m((100,200)[$i-gt3]*$args[0]);cls}

Çevrimiçi deneyin! (TIO'da işe yarayacak değil ...)


$b117'ye düşmek için yalancı bir üçlüyü ortadan kaldırabilir ve kullanabilirsiniz - for(){(-split'^(")v v(")^ ^(")^ v(")v (>")> <(")> <("<)')[($i=0..6|random)];sleep -m((100,200)[$i-gt3]*$args[0]);cls}... Daha kısa olduğunu düşünüyorum; Hala onu dürtüyorum.
AdmBorkBork

Sadece beni @TimmyD'den kurtarmaya devam ediyorsun (teşekkürler)! Bence bu değişiklikler kendi cevabınızı garanti altına alacak kadar önemli;
kodumda

Hayır, onlar sadece kodunuzdaki küçük düzeltmelerdir. Genel mantık aynıdır. Yap.
AdmBorkBork

2

Noodel , rakipsiz 67 bayt

ʠƘṣḳƑðẉḤż’ṀỴ(EḞ4ĊḌṀY%¤ĠẸG^ḞðxỌð
ḊḢðḞ’ṀḌcṀḌcİ8c¬ððɲḷṛḋʠṡʠạÇƥƥạƥḋʠ⁺µḍ

Bu zorluk Noodel için çok zordu çünkü herhangi bir akıllı aritmetik ya da karşılaştırmalı tabanlı operatöre sahip değildi. Ancak bu mücadeleyi yaptıktan sonra Noodel'in ilk sürümü için hazır olduğunu düşünüyorum .

Dene:)

Nasıl çalışır

                                                                     # Note: The input is immediately pushed onto the stack.
ʠ                                                                    # Moves the pointer for the top of the stack down one.
 ƘṣḳƑðẉḤż’ṀỴ(EḞ4ĊḌṀY%¤ĠẸG^ḞðxỌð                                      # Creates a string based off of the key "ƘṣḳƑðẉḤż" and the compressed text "ṀỴ(EḞ4ĊḌṀY%¤ĠẸG^ḞðxỌð" to create "^(")vðv(")^ð^(")^ðv(")vð(>")>ð<(")>ð<("<)" which then gets split by the null character "ð" to create an array of strings which gets pushed to the stack.
                               \n                                    # A new line to separate the literals.
                                 ḊḢðḞ’ṀḌcṀḌcİ8c¬ðð                   # Creates a string based off of the key "ḊḢðḞ" and the compressed text "ṀḌcṀḌcİ8c¬ðð" to create "100ð100ð100ð100ð200ð200ð200" which then gets split the same way as before.
                                                  ɲ                  # Turns each element in the array into a number creating the array of delays.
                                                   ḷ                 # Loops the rest of the code unconditionally.
                                                    ṛ                # Generates a random number from 0 to the length-1 of the array on top of the stack.
                                                     ḋ               # Duplicates the random number.
                                                      ʠ              # Moves the stack pointer down to save one of the random numbers for later.
                                                       ṡ             # Swap the array with the random number such that the array is on top again.
                                                        ʠ            # Moves the stack pointer down such that the random number is on top.
                                                         ạ           # Uses the random number to access the bird array which is now after the random number and pushes the element onto the stack.
                                                          Ç          # Clears the screen and pops the bird and pushes it to the screen.
                                                           ƥƥ        # Moves the stack pointer up two times such that the random number is the top.
                                                             ạ       # Use the random number to access the array with delays and pushes that item onto the stack.
                                                              ƥ      # Moves the stack pointer up in order to have the input on top.
                                                               ḋ     # Duplicates the users input.
                                                                ʠ    # Moves the stack pointer back down in order to have the user input on top followed by the random item from the delay array.
                                                                 ⁺µ  # This command pops two numbers off and multiplies them and pushes the result back on.
                                                                   ḍ # Pops off of the stack and uses that as a delay in milliseconds.

64 bayt

İşte kod pasajı olarak çalışan bir sürüm.

ʠƘṣḳƑðẉḤż’ṀỴ(EḞ4ĊḌṀY%¤ĠẸG^ḞðxỌð EAð¶’Ṁ|ṢĿ<h4¶¬ȥḷṛḋʠṡʠạÇƥƥạƥḋʠ⁺µḍ

<div id="noodel" code="ʠƘṣḳƑðẉḤż’ṀỴ(EḞ4ĊḌṀY%¤ĠẸG^ḞðxỌð EAð¶’Ṁ|ṢĿ<h4¶¬ȥḷṛḋʠṡʠạÇƥƥạƥḋʠ⁺µḍ" input="2" cols="5" rows="3"></div>

<script src="https://tkellehe.github.io/noodel/release/noodel-1.1.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


1

Python, 157 bayt

import time,random;n,m=5,int(input())
while 1:print('(>")><(")><("<)^(")vv(")^^(")^v(")v'[n:n+5]);time.sleep((.1+(n<15)/10)*m);n=(n+random.randint(1,6)*5)%35

Ayrıca, tavuk ascii sanatı olmadan da yapmaya çalıştım, ama bu çok daha uzundu.

import time,random;n,m=5,int(input())
while 1:
  print(['^v'[n%2]+'(")'+'v^'[0<n<3],''.join(map(chr,[40+20*(n>4),62-22*(n>4),34,41+19*(n>5),62-21*(n>5)]))][n>3])
  time.sleep((.1+(n>3)/10)*m);n=(n+random.randint(1,6))%7

1

Ruby, 97 + 1 = 98 bayt

-nBayraktan +1 bayt .

a=1;loop{puts %w{^(")v <(")> v(")^ (>")> ^(")^ <("<) v(")v}[a];sleep$_.to_i*0.1*(1+a%2);a=rand 7}

1

Clojure, 185 178 bayt

+18 bayt, çünkü başlamadı <(")>.

-7 bayt inline birdsederek ve onlardan kurtulmak let.

#(loop[m nil r(or m 1)](print"\r"((clojure.string/split"(>\")> <(\")> <(\"<) ^(\")v v(\")^ ^(\")^ v(\")v"#" ")r))(flush)(Thread/sleep(*(if(> r 2)100 200)%))(recur 1(rand-int 7)))

Kuşları boşluklara ayırır, 0-6 arasında rastgele bir indeks alır, seçilen kuşu görüntüler, o zaman seçilen indeks 2'den büyükse, 100ms bekler, 200ms bekler.

Clojure gerçekten splitçekirdekte bir string metoduna ihtiyaç duyar .

Ungolfed:

(defn dancing-bird [n]
  (loop [m nil]
    (let [birds (clojure.string/split "(>\")> <(\")> <(\"<) ^(\")v v(\")^ ^(\")^ v(\")v" #" ")
          rand-i (or m 1)]
      (print "\r" (birds rand-i))
      (flush)
      (Thread/sleep (* (if (> r 2) 100 200) n))
      (recur (rand-int 7)))))
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.