Letusan Eyjafjallajökull?


18

Tahun 2010, sebuah Islandia Vulcano, singkat bernama Eyjafjallajökull meletus, mengakibatkan penerbangan saya yang lama direncanakan dibatalkan.

Jika ini terjadi lagi, saya benar-benar ingin tahu sebelumnya, jadi tolong bantu saya membangun sistem peringatan visual yang sederhana!

Memasukkan

Ambil kode peringatan aktivitas vulkanik Kantor Meteorologi Islandia , sebagai input (string):

HIJAU - Gunung berapi dalam keadaan normal, tidak meletus.

KUNING - Gunung berapi mengalami tanda-tanda kerusuhan yang meningkat di atas tingkat latar belakang yang diketahui.

ORANGE - Gunung berapi menunjukkan kerusuhan yang meningkat dengan kemungkinan meningkatnya erupsi.

MERAH - Letusan diperkirakan akan segera terjadi dengan kemungkinan emisi abu yang signifikan ke atmosfer.

Keluaran

Peringatan grafis (seni ASCII), menggambarkan keadaan Eyjafjallajökull.

GREEN (Eyjafjallajökull sedang beristirahat)

      al   la 
     j       j
  jaf         öku
 y               l
E                 l
-------------------

KUNING (asap muncul!)

       ~   ~
         ~
      al   la 
     j       j
  jaf         öku
 y               l
E                 l
-------------------

ORANGE (lebih banyak asap!)

      ~  ~  ~
       ~   ~
         ~
      al   la 
     j       j
  jaf         öku
 y               l
E                 l
-------------------

MERAH (bahkan lebih banyak asap dan abu juga!)

   `~ ~ ~ ~ ~ ~`
    ` ~  ~  ~ ` 
     ` ~   ~ ` 
       ` ~ `  
      al   la 
     j       j
  jaf         öku
 y               l
E                 l
-------------------

Aturan

  • Anda dapat menampilkan ke layar (stdout), atau mengembalikan string
  • Ini ! Jawaban terpendek (dalam byte), menang
  • Jangan ragu untuk mengganti ö dengan o
  • Ruang tambahan diperbolehkan, tetapi tidak diperlukan
  • Paling banyak satu trailing newline diperbolehkan
  • Paling banyak 4 baris baru diizinkan (menggantikan asap)

Diucapkan: AY-JAH-FUH-JUH-AH-LAH-JUh-KUh-EW-LUH?
Guci Gurita Ajaib

@carusocomputing - Hampir! :)
zeppelin

setidaknya ini lebih pendek dari Tungnafellsjökull : P
FlipTack

@DrMcMoylex Tidak, hanya salah ketik, harus diperbaiki sekarang. Terima kasih!
zeppelin

Anda bercanda tentang nama yang tidak ringkas tetapi sebenarnya sangat deskriptif dan lebih pendek dari terjemahan bahasa Inggrisnya "island mountain gletser" dan juga terdengar jauh lebih indah. : P
Martin Ender

Jawaban:


2

Ruby, 161

Inilah pendapat saya tentang landmark Islandia yang terkenal, Menara Eyjafjallajökull.

Cukup pendek, tetapi saya belum menemukan cara yang bagus untuk menghilangkan asap.

->n{m=85-n[-3].ord>>2
%w{`~+~+~+~+~+~` `+~++~++~+` `+~+++~+` `+~+` al%3sla j%7sj jaf%9soku y%15sl E%17sl}.map{|i|(i%"").tr(?++?`*m," ").center(19)}[m,9]+[?-*19]}

Tidak digabungkan dalam program uji

f=->n{m=85-n[-3].ord>>2     #From ASCII code of 3rd from last letter, derive m=0 for RED up to 4 for GREEN (uppercase.)
  %w{`~+~+~+~+~+~` `+~++~++~+` `+~+++~+` `+~+` al%3sla j%7sj jaf%9soku y%15sl E%17sl}.
  map{|i|                   #For each line above decode as follows:
    (i%"").                 #Replace %Xs with X spaces, by inserting  empty strings and padding sprintf style. 
    tr(?++?`*m," ").        #Replace + with space. If not red, replace ` with space.
    center(19)}[m,9]+       #Centre output to 19 characters per line. Start printing at line m and go on to the end (never more than 9 lines.)
  [?-*19]                   #Add a row of --- at the bottom.
}

puts f[gets.chomp]

6

Batch, 284 byte

@set e=echo 
@%e%off
set s=      
set t=   
goto %1
:RED
set t= ` 
%e%   `~ ~ ~ ~ ~ ~`
:ORANGE
%e%   %t%~  ~  ~%t%
:YELLOW
%e%    %t%~   ~%t%
%e%%s%%t%~%t%
:GREEN
%e%%s%al   la 
%e%     j%s% j
%e%  jaf %s%  oku
%e% y %s%%s%  l
%e%E%s%%s%%s%l
%e%--------------------

Catatan: Baris 1 dan 7 memiliki satu spasi tambahan, baris 3 memiliki enam dan baris 4 memiliki tiga.


1
Penggunaan yang bagus goto.
NoOneIsHere

1

PHP, 307 288 279 byte

$o=" ";while($x<19)$o[$x+19*(($d=abs($x-9))>4?$d>7?$d-5:2:$d>3)]="Eyjafjal   lajokull"[$x++];echo strtr((($n=ord($argv[1])/8&3)-2?"":"   1~ ~ ~ ~ ~ ~2\n").($n%3?"     1~  ~  ~2\n":"").($n?"      1~   ~2\n       1 ~ 2\n":"").chunk_split(str_pad($o,114,"-"),19),12,$n-2?"  ":"`´");

jelek besar

kerusakan

$o=" ";                                         // 0.init $o to string
while($x<19)$o[$x+19*(                      // 1.paint volcano
    ($d=abs($x-9))>4?$d>7?$d-5:2:$d>3           // 1a map [0..19] to row offsets
    )]="Eyjafjal   lajokull"[$x++];
echo strtr(                                     // 7. print
    (($n=ord($argv[1])/8&3)                     // 4.map GYOR to 0312
        -2?"":"   1~ ~ ~ ~ ~ ~2\n")             // 5a.add smoke & stuff for red
        .($n%3?"     1~  ~  ~2\n":"")           // 5b for orange
        .($n?"      1~   ~2\n       1 ~ 2\n":"")// 5c for yellow
    .chunk_split(                               // 3.insert linebreaks
        str_pad($o,114,"-")                     // 2.add ground
    ,19)
,12,$n-2?"  ":"`´");        // 6.replace stuff with ticks for red, with blanks else

1

JavaScript (ES6), 235 220 218 byte

c=>[344,592,160,640,192,32,28,2,1,~0].map(n=>(s='6222222661116600660').replace(/./g,(_,i)=>n&(1<<i|512>>i-9)?(s+'6allajjjafökuylEl')[p++]||'-':' '),p=0).join`
`.replace(/\d/g,n=>n%4<'GYOR'.search(c[0])?n&4?'`':'~':' ')


1

JavaScript (ES6), 286 262 199 194 183 byte

Masukkan input ke fungsi f(), misalnya f('GREEN').

Y=`7~3~
9~
`
f=n=>({G:'',Y,O:`5 ~2~2~
`+Y,R:'3`~ ~ ~ ~ ~ ~`\n4` ~2~2~ `\n5` ~3~ `\n7` ~ `\n'}[n[0]]+`6al3la
5j7j
2jaf9oku
 y15l
E17l
`+'-'.repeat(19)).replace(/\d+/g,n=>' '.repeat(n))

-63 byte: Digunakan Regex alih-alih fungsi untuk menghasilkan spasi.


Apakah sbenar-benar layak? Menurut hitungan saya, menghemat 4 byte ... tetapi biaya 16 byte. Di sisi lain, saya pikir Anda bisa menghemat beberapa byte dengan menggunakan _lebih banyak.
Neil

Menghasilkan hasil yang tidak valid untuk ORANGE (asap tidak selaras dengan benar)
zeppelin

@ Neil Ya, saya mengantisipasi bahwa saya akan membutuhkannya lebih sering daripada yang sebenarnya saya lakukan. : P
darrylyeo

@zeppelin Diperbaiki.
darrylyeo

sekarang gagal dengan "r tidak didefinisikan" untuk saya :(
zeppelin

1

> <> (Ikan) 351 339 302 byte

\l?!;o00.>~00.
\a"-------------------"a"l                 E"a"l               y "a"ukö         faj  "a"j       j     "a" al   la      "
\i:"R"-?!v
 " `  "a~<|.!00"   `~ ~ ~ ~ ~ ~`"a"    ` ~  ~  ~ ` "a"     ` ~   ~ ` "a"       ` ~"
\ :"G"-?!v
\}a"~         "a"~   ~       "
\{:"Y"-?!v
\~a"~  ~  ~      "

Cukup mendasar dan jelek saat ini, saya sedang berusaha menurunkannya, tetapi input 'RED' membuat lebih sulit untuk menggunakan kembali jalur.

Edit 1; Memindahkan string gunung berapi awal ke 1 baris untuk mengurangi jeda baris, memindahkan string 'RED' secara terbalik untuk mengisi ruang kosong. (12 byte disimpan)

Sunting 2; Mengambil centang 'O' dan hanya mencetak jika 3 lainnya tidak dimasukkan (tidak menentukan input non 'hijau, merah, oranye, kuning'. Juga mengeluarkan gerakan dan ruang yang digunakan dalam string untuk memotong perintah tambahan. (37 byte disimpan)

Versi online untuk diuji!


0

Python 2, 209 byte (208 karakter)

s=' '
y=' ~ '
v='ROY G'.index(input()[0])
a='` '[v>0]
print'\n'.join([s*3+a+'~'+' ~'*5+a,s*4+a+y*3+a,s*5+a+y*2+a,s*7+a+y+a,s*6+'al   la ',s*5+'j       j\n  jaf'+s*9+'öku\n y'+s*15+'l\nE'+s*17+'l','-'*19][v:])
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.