Makan Skittles Like a Normal Person

47

Skittles adalah permen berwarna di mana ada 5 rasa yang berbeda; anggur, apel hijau, lemon, jeruk, dan stroberi diwakili oleh (p) urple, (g) reen, (y) ellow, (o) range, dan (r) ed masing-masing. Saya biasa makan skittles dengan menyortir semua warna yang berbeda, lalu memakannya secara berurutan. Setelah mendapatkan beberapa penampilan aneh di kantor, saya sekarang berpura-pura memakannya seperti orang normal. Tugas Anda adalah untuk meniru ini:

Kode Anda (program atau fungsi lengkap) akan menerima larik skittles (10x10) sebagai input (dalam format apa pun yang masuk akal). Array ini akan mewakili tumpukan skittles yang tidak disortir. Tugas Anda adalah "memakannya" dari warna favorit Anda hingga warna favorit. Pesanan pilihan saya adalah anggur, apel hijau, lemon, jeruk, stroberi, tetapi Anda bebas memilih pesanan apa pun asalkan secara konsisten diberlakukan (sebutkan pilihan Anda dalam kiriman Anda sehingga saya dapat menilai Anda untuk itu). Setelah memakan setiap bagian dari permen, kode Anda akan menampilkan (dalam format yang sama dengan yang Anda input) tumpukan yang tersisa dengan potongan yang dimakan diganti dengan spasi. Anda akan mengulang sampai hanya tersisa favorit Anda. Anda dapat memilih skittle untuk dimakan (mungkin acak atau deterministik). Ruang trailing harus dijaga.

Misalnya, urutan output Anda dapat terlihat seperti ini (menggunakan 5x5 untuk singkatnya dan menunjukkan spasi sebagai .)

start   1     2     3     4     5        n 
.org. .org. .org. .org. .or.. .or..    ..r..
prgrg .rgrg .rgrg .rgrg .rgrg .r.rg    .r.r.
gggpr gggpr ggg.r ggg.r ggg.r ggg.r    ....r
oyyor oyyor oyyor oyyor oyyor oyyor    ....r
.r.p. .r.p. .r.p. .r... .r... .r...    .r...

Ini adalah , jadi kode terpendek dalam byte menang

TL; Aturan DR:

  • Pengajuan mungkin program atau fungsi penuh
  • Input dapat diambil dalam format apa pun yang wajar (string, daftar, matriks, dll) dengan metode apa pun yang masuk akal (STDIN, argumen fungsi, dll.). Namun harus ada penggambaran di antara baris
  • Output harus diproduksi dalam format yang sama dengan input dengan metode yang masuk akal (STDOUT, pengembalian fungsi, dll.). Output menengah mungkin atau mungkin tidak dibatasi
  • Output pertama akan menjadi input pertama
  • Ruang trailing harus dilestarikan
  • Urutan warna apa pun dapat digunakan (sebutkan jawaban Anda)
  • Potongan kecil dari warna saat ini dapat dimakan
  • Output terakhir hanya warna dan ruang favorit Anda
  • Jika memungkinkan, sertakan tautan ke kompiler online untuk menguji kiriman Anda
wnnmaw
sumber
4
@MukulKumar, benar, Anda ingin mereka menjadi lebih baik saat Anda mengikuti
wnnmaw
2
Bisakah kita menerima skittles sebagai string 100 skittle, tanpa putus garis atau apa pun?
Gabriel Benamy
1
Apakah output antara perlu dipisahkan oleh apa pun?
Poke
8
Saya mempertimbangkan untuk memasuki tantangan ini, dan kemudian membaca " sebutkan preferensi Anda dalam kiriman Anda sehingga saya dapat menilai Anda untuk itu ". Saya pikir orang sudah terlalu menghakimi preferensi saya!
Toby Speight

Jawaban:

16

Jelly , 16 14  13 byte

Ṅ⁶ỤṪ$¦µQL>3µ¿

TryItOnline!

Paling favorit untuk paling, seperti bagi siapa pun yang serius tentang OCD mereka, adalah abjad!

Mengambil input dan output sebagai teks (yaitu baris dibatasi oleh baris baru).

3 byte disimpan dengan membalik arah dan menggunakan metode yang berbeda: tingkatkan alih-alih menemukan karakter dari alfabet.

Bagaimana?

Ṅ⁶ỤṪ$¦µQL>3µ¿ - Main link: Skittle text
      µ    µ  - monadic chain separation
            ¿ - while
       Q      - unique items
        L     - length
         >3   - greater than 3 (until only new lines, spaces and 'g's remain)
Ṅ             -     print z and a line feed, yield z
    $         -     treat last two links as a monad
  Ụ           -         grade up (get indices of: new lines; spaces; gs; os; ps; rs; ys)
   Ṫ          -         tail (the last of those, so last y if there is one, else last r, ...)
 ⁶            -     space character
     ¦        -     apply at index (replace that index with a space)
Jonathan Allan
sumber
8

JavaScript (ES6), 74 75 74 byte

Rasa dipesan sebagaimana dijelaskan dalam tantangan: anggur, apel hijau, lemon, jeruk, stroberi.

Output antara dipisahkan oleh baris baru.

f=(s,n=3,r=s)=>(S=s.replace('oygp'[n],' '))!=s&&(r+=`
`+S)||n--?f(S,n,r):r

Kasus cobaan

Kasing uji ini menggunakan contoh 5x5. Setiap ukuran kisi lain harus berfungsi seperti yang diharapkan.

Arnauld
sumber
8

Pesta, 48, 46 byte

MEMPERBARUI:

  • Menyimpan dua byte dengan menggunakan parameter mentah ke printf;

Golf

sed -nz "p;:a;`printf "s/%s/ /p;ta;" p g y o`"

Mengambil input di stdin, mencetak ke stdout. Makan ungu, hijau, kuning dan kemudian oranye.

Program sed yang sederajat adalah:

p;:a;s/p/ /p;ta;s/g/ /p;ta;s/y/ /p;ta;s/o/ /p;ta

Output sampel (pembatas hanya untuk kejelasan)

-----
 org 
prgrg
gggpr
oyyor
 r p 
-----
-----
 org 
 rgrg
gggpr
oyyor
 r p 
-----
-----
 org 
 rgrg
ggg r
oyyor
 r p 
-----
-----
 org 
 rgrg
ggg r
oyyor
 r   
-----
-----
 or  
 rgrg
ggg r
oyyor
 r   
-----
-----
 or  
 r rg
ggg r
oyyor
 r   
-----
-----
 or  
 r r 
ggg r
oyyor
 r   
-----
-----
 or  
 r r 
 gg r
oyyor
 r   
-----
-----
 or  
 r r 
  g r
oyyor
 r   
-----
-----
 or  
 r r 
    r
oyyor
 r   
-----
-----
 or  
 r r 
    r
o yor
 r   
-----
-----
 or  
 r r 
    r
o  or
 r   
-----
-----
  r  
 r r 
    r
o  or
 r   
-----
-----
  r  
 r r 
    r
   or
 r   
-----
-----
  r  
 r r 
    r
    r
 r   
-----

Cobalah online!

zeppelin
sumber
7

Python 2, 60 57 56 byte

def f(s):print s;q=max(s);q>'g'and f(s.replace(q,' ',1))

repl.it

Fungsi rekursif yang makan dalam urutan abjad terbalik, meninggalkan hijau untuk yang terakhir.

Input sadalah string dengan pembatas baris dengan ordinal kurang dari 'g'(misalnya baris baru atau koma).

Fungsi mencetak inputnya, dan kemudian berulang jika input itu mengandung sesuatu yang lebih besar dari 'g', melewati input dengan kemunculan pertama karakter maksimum digantikan oleh spasi.

(Hampir port jawaban Jelly saya .)

Jonathan Allan
sumber
6

Perl, 53 46 + 2 = 48 byte

Jalankan dengan -0n

-10 byte berkat @Dada

Sunting: Juga terima kasih kepada @Dada karena menunjukkannya, saya lupa mencetak input sebagai output pertama. Itu sudah diperbaiki.

say;eval sprintf"say while s/%s/./;"x4,p,o,g,r

Ada sedikit tipu daya yang terlibat dalam jawaban ini, jadi saya akan memecah apa yang terjadi.

Pertama-tama, Perl tidak suka parameter multi-line dilewatkan. Variabel $/adalah pemisah rekaman input, dan setiap kali input menemukan karakter yang tersimpan di dalamnya, interpreter mengakhiri input itu dan memulai input baru. Konten default adalah karakter baris baru \n, yang berarti melewatkan string multi-baris tidak dimungkinkan. Untuk melakukan itu, kita harus $/menghapus dari isinya. Di situlah -0flag masuk: pengaturan -0akan disimpan nulldalam variabel $/, memungkinkan penerjemah membaca semuanya ke dalam variabel implisit $_sekaligus.

Sedikit tipu daya berikutnya adalah evalpernyataan. Sebenarnya apa yang sedang kita lakukan eval? Kami sedang evalmembuat sprintfpernyataan, yang dirinci sebagai berikut:

Hal pertama yang sprintfdilewatkan adalah string yang "say while s/%s/./;"diulang 4 kali, jadi:

say while s/%s/./;say while s/%s/./;say while s/%s/./;say while s/%s/./;

Kemudian, sprintfdilewatkan empat karakter bareword p,o,g,r,, yang diinterpolasi ke dalam sprintfpernyataan, menggantikan setiap instance dari %s. Apa yang kemudian kita dapatkan adalah string berikut, yang diteruskan ke evalfungsi:

say while s/p/./;say while s/o/./;say while s/g/./;say while s/r/./;

Setiap whileloop mengevaluasi ekspresi s/[color]/./, yang menggantikan instance pertama dari warna apa pun itu dalam variabel implisit $_dengan titik. Jika substitusi dilakukan, ia akan kembali 1, jika tidak maka tidak akan menghasilkan apa pun. Karena s///memiliki efek samping, ia memodifikasi variabel asli $_, yang isinya kemudian dicetak say. Empat versi loop ini dilakukan, menggantikan ungu, jeruk, hijau, dan merah, hanya menyisakan kuning.

Alasan mengapa kuning ditinggalkan adalah karena ytidak bisa menjadi kata kunci, karena itu sebenarnya fungsi, dan memiliki yalih - alih salah satu dari surat-surat itu akan menimbulkan kesalahan. Saya dapat mengubah ini dengan meletakkan tanda kutip di sekitarnya (+2 byte), atau menggunakan huruf kapital Y dan membuat regex case-insensitive (+1 byte), tetapi untuk , setiap byte penting, jadi saya memutuskan bahwa saya benar - benar suka lemon skittles paling.

TL; DR: Grape, Orange, Green Apple, Strawberry, Lemon

Gabriel Benamy
sumber
-0bendera akan menyelamatkan Anda sekitar 10 byte
Dada
Juga, saya khawatir Anda melewatkan aturanFirst output shall be the first input
Dada
1
Bagus untuk Anda karena mengorbankan preferensi pribadi Anda sendiri untuk menghemat dua byte
wnnmaw
4

Perl, 30 31 33 + 2 = 32 33 35 byte

for$x(g,o,p,r){say;s/$x/ /&&redo}

Jalankan dengan -n0(penalti 2 byte).

Rupanya, saya suka makan Skittles dalam urutan abjad, karena programnya ternyata lebih pendek. Program tidak benar-benar membutuhkan banyak penjelasan: -n0membaca input secara implisit ( -nberarti "membaca input secara implisit", -0berarti "jangan memecah input pada baris baru"); for$x(g..r)menjalankan loop dengan $xset dari setiap huruf dari gmenjadi rpada gilirannya; say;mencetak input saat ini, setelah mutasi; s/$x/ /mengganti satu salinan $x(khusus, yang pertama) dengan spasi jika memungkinkan; dan &&redoulangi kode di dalam kurung kurawal (tanpa memajukan penghitung putaran) jika penggantian berhasil.

Program ini dapat dengan mudah digeneralisasi ke lebih banyak rasa Skittle tanpa mengubah panjangnya, dan akan bekerja dengan tumpukan ukuran berapa pun.

Inilah tautan Ideone tempat Anda dapat mengujinya. (Ideone tidak memungkinkan Anda menentukan opsi baris perintah, jadi saya harus menambahkan beberapa baris di awal untuk mengatur -n0dan -M5.010yang Anda dapatkan secara gratis.)


sumber
1
Saya tidak yakin Anda diizinkan mencetak beberapa kali tumpukan skittles yang sama beberapa kali .. (Sebenarnya saya pikir Anda tidak bisa) Mungkin beralih ke say;for$x(g..r){say while s/$x/ /}?
Dada
Ah benar. Saya awalnya punya for$x(p,o,g,r)yang tidak akan. say whilehanya satu byte lebih lama, dan sesuatu yang saya anggap sebagai alternatif, jadi saya bisa mengubahnya.
Dan Anda harus mulai dengan say;karena aturan mengatakanFirst output shall be the first input
Dada
Oh, dalam hal ini saya akan kembali ke for$x(g,o,p,r)versi yang menyalin input terlebih dahulu. (Butuh beberapa waktu ekstra untuk mencari jika ada warna yang hilang, tetapi Anda tidak akan berharap memiliki warna yang hilang dalam paket skittles.) Sebagai catatan, versi dengan yang say;pertama akan menjadi 37 byte.
Komentar asli Dada masih tetap berdiri - kode yang berdiri akan mencetak konfigurasi yang sama dua kali berturut-turut kadang-kadang (sekali di ujung hijau dan kedua di awal jeruk, misalnya).
DLosc
4

C #, 134 148 byte

Memesan: G -> O -> Y -> P -> R

I=>{var v=new string(I)+";\n";int i,j=0,c;for(;j<4;){c="goyp"[j++];for(i=0;i<I.Length;i++)if(I[i]==c){ I[i]='.';v+=new string(I)+";\n";}}return v;};

Menggunakan beberapa hal serupa dari jawaban @ Poke, saat ini sedikit lebih lama karena saya perlu mengubah array karakter menjadi string; (

Yodle
sumber
HA! mengalahkanmu dengan 3 karakter !!!
Mukul Kumar
4

Java 7, 139 135 130 151 138 135 byte

void t(char[]s){int i,j=-1;for(;++j<5;)for(i=-1;++i<109;)if(j>3|s[i]=="yogp!".charAt(j)){System.out.println(s);if(j>3)return;s[i]=32;}}

Makan skittles dalam urutan: Kuning, Oranye, Hijau, Ungu, Merah

Saya kira ini lebih baik dari 2 pernyataan cetak>.>

Menyodok
sumber
1
Tentu saja Anda bisa, fungsi Anda dinamai sandiwara: P -3 di sana!
Yodle
1
@Yodle oops! hahaha
Poke
1
Jika kita selalu menerima kisi 10x10, saya bisa membuat hardcode lebih panjang daripada menggunakans.length
Poke
1
Bukankah kita perlu mencetaknya sekali di awal sebelum makan apa pun: s
Yodle
1
@Yodle itu sebabnya saya makan "!" skittles first;) ... tunggu saya pikir saya memecahkan trik itu
Poke
4

C 145 - 5 - 18 - 1 = 121 byte

#define l(a)for(a=0;a<10;a++)
i,j,k,b='a';F(char a[][11]){while(b++<'x')l(i)l(j)if(a[i][j]==b){a[i][j]=32;l(k)puts(a[k]);puts("");}}  

tidak cantik + cantik

#include<stdio.h>
#include<windows.h>
i,j,k;
F(char a[][11])
{
    char b='a';
    while(b++<'x')
        for(i=0;i<10;i++)
            for(j=0;j<10;j++)
                if(a[i][j]==b)
                {
                    system("cls");
                    a[i][j]=32;
                    for(k=0;k<10;k++)
                        puts(a[k]);
                    puts("");
                    Sleep(35);
                }
}
main()
{
    char a[][11]={
            "gggggggggg",
            "goooooooog",
            "goppppppog",
            "goprrrrpog",
            "gopryyrpog",
            "gopryyrpog",
            "goprrrrpog",
            "gopppppppg",
            "goooooooog",
            "gggggggggg"
    };
    for(i=0;a[i][j];)
        puts(a[i++]);
    F(a);
}  

Di sini a[][11]berarti mengambil n-string dengan panjang 11 di mana 1 karakter diperlukan untuk penghentian jadi, secara teknis hanya 10 karakter yang terlihat.

order: sesuai abjad
fungsi ini memeriksa 'g'input yang diberikan dan menghilangkannya 1/1 kemudian meningkatkan penahanan variabel 'g'sampai menemukan kecocokan berikutnya (mungkin huruf 'o') dan kemudian menghilangkan karakter yang cocok.
Kelemahannya adalah fungsi ini terlalu hati-hati. Jadi, jika skittel Anda memiliki 26warna yang berbeda dengan nama kode dari huruf az, fungsi ini akan menangani input itu juga ...

Mukul Kumar
sumber
Lebih dari 3 sekarang: P
Yodle
@Yodle yeah..terima kasih kepada macro yang bisa Anda definisikan #define. Itu mengurangi 19 byte
Mukul Kumar
3

Oktaf, 49 byte

Makan skittles dalam urutan abjad, kode ascii tertinggi terlebih dahulu.

A=input("");do [~,p]=max(A(:));A(p)=32 until A<33
Rainer P.
sumber
3

ES6 (Javascript), 72, 71 byte

EDIT:

  • Minus 1 byte, dengan menggunakan templat literal dengan of

Versi non-rekursif dalam Javascript.

Golf

s=>{r=s;for(c of`pogy`)while(s!=(s=s.replace(c,' ')))r+=`
`+s;return r}

Input dan output adalah string multiline, makan pil dalam urutan "ungu => oranye => hijau => kuning".

Uji

S=s=>{r=s;for(c of`pogy`)while(s!=(s=s.replace(c,' ')))r+=`
`+s;return r}

console.log(
S(` org 
prgrg
gggpr
oyyor
 r p `)
);

zeppelin
sumber
2

Python 3 - 141 99 75 byte

s=input();[exec("print(s);s=s.replace(c,' ',1);"*s.count(c))for c in'orgy']

Program makan skittles dalam urutan ini - Orange Red Green Yellow Purple.

Sunting - Terima kasih kepada Flp.Tkc yang membantu mengurangi 24 byte!

Memasukkan - 
ygro goppr rppog rppog orgy

Keluaran - 
ygro goppr rppog rppog orgy
ygr goppr rppog rppog orgy
ygr g ppr rppog rppog orgy
ygr g ppr rpp g rppog orgy
ygr g ppr rpp g rpp g orgy
ygr g ppr rpp g rpp g rgy
yg g ppr rpp g rpp g rgy
yg g pp rpp g rpp g rgy
yg g pp pp g rpp g rgy
yg g pp pp g pp g rgy
yg g pp pp g pp g gy
yg pp pp g pp g gy
y pp pp g pp g gy
y pp pp pp g gy
y pp pp pp gy
y pp pp pp y
        pp pp pp y
        pp pp pp  

Saya percaya itu bisa golf lebih lanjut karena terlihat sangat sederhana.

Gurupad Mamadapur
sumber
2
Sepertinya ini memakan semua satu warna pada satu waktu sedangkan seharusnya hanya makan satu per satu
wnnmaw
1
Juga, Anda mengambil input sebagai daftar sarang, tetapi menghasilkan string, harap modifikasi kode Anda sehingga baik input dan output format yang sama
wnnmaw
@wnnmaw Perubahan dibuat. Saya harap sekarang baik-baik saja :)
Gurupad Mamadapur
1
Saya tahu sudah ada solusi yang lebih pendek, tetapi tetap dengan algoritma ini Anda dapat golf lebih ke sesuatu seperti ini .
FlipTack
3
Saya suka bagaimana Anda secara khusus memilih pemesanan yang mengarah ke orgy.
Nic Hartley
2

Vim 57 55 byte

Menyimpan dua byte dengan menghapus pembatas baris saya. Sayangnya itu membuatnya jauh lebih sulit untuk membaca dan memeriksa kebenarannya :(.

:set ws!
yGP/o
qqnr G9kyGGp@qq@q/y
@q/p
@q/g
@qdG

Tidak dapat dicetak:

:set ws!
yGP^O/o
^Oqq^Hnr G9kyGGp@qq@q/y
^O@q/p
^O@q/g
^O@qdG

TryItOnline

Makan dalam urutan oypg, meninggalkan semua r untuk akhirnya :)

nmjcman101
sumber
1

Mathematica, 67 byte

Most[#/.(i=0;#:>"."/;i++≤0&/@Characters@"ryop")&~FixedPointList~#]&

Makan merah, lalu kuning, lalu jeruk, lalu ungu.

JungHwan Min
sumber
Anak laki-laki saya senang tidak ada built-in untuk ini
wnnmaw
1

Java 7, 125 byte

Ungu, kuning, hijau, merah, oranye. Saya menikmati bahwa saya bisa memilih pesanan saya dalam solusi ini. : D

Golf

String s(String p){String r=p;for(String c:"pygr".split(""))for(;p.contains(c);r+="\n\n"+p)p=p.replaceFirst(c," ");return r;}

Tidak disatukan

String s(String p) {
    String r=p;
    for (String c : "pygo".split("")) {
        for (; p.contains(c); r += "\n\n" + p) {
            p = p.replaceFirst(c, " ");
        }
    }
    return r;
}

Coba di sini!

Pendekatan yang berbeda untuk jawaban Java lainnya oleh @Poke. Kami mulai dengan membuat salinan string asli. Iterasi melalui setiap warna, kami menggantinya setiap kali ditemukan dengan spasi, lalu menambahkan tata letak baru ke string output, kembali setelah kami makan semuanya kecuali oranye.

Catatan

Pemisahan antara langkah-langkah dilakukan dengan garis ganda ganda \n\n, tetapi jika kotak input dapat diambil dengan garis tambahan di akhir, itu bisa disingkat menjadi adil \n.

Xanderhall
sumber
1

Haskell, 60 byte

f x|(a,b:c)<-span(<maximum x)x,b>'g'=(:)<*>f$a++' ':c|1<2=[]

Input adalah string tunggal di mana baris dipisahkan dengan ,. Nilai kembali adalah daftar string dengan semua langkah perantara. Urutan adalah abjad, terbesar pertama, jadi sisa-sisa hijau Contoh penggunaan:

*Main> mapM_ putStrLn $ f " org ,prgrg,gggpr,oyyor, r p "
 org ,prgrg,gggpr,o yor, r p 
 org ,prgrg,gggpr,o  or, r p 
 o g ,prgrg,gggpr,o  or, r p 
 o g ,p grg,gggpr,o  or, r p 
 o g ,p g g,gggpr,o  or, r p 
 o g ,p g g,gggp ,o  or, r p 
 o g ,p g g,gggp ,o  o , r p 
 o g ,p g g,gggp ,o  o ,   p 
 o g ,  g g,gggp ,o  o ,   p 
 o g ,  g g,ggg  ,o  o ,   p 
 o g ,  g g,ggg  ,o  o ,     
   g ,  g g,ggg  ,o  o ,     
   g ,  g g,ggg  ,   o ,     
   g ,  g g,ggg  ,     ,     

Rekursi sederhana. Simpan daftar input untuk nilai kembali, ganti elemen terbesar lebih besar gdengan spasi dan panggil fungsi lagi. Kasing dasar adalah ketika tidak ada elemen yang tersisa untuk dihapus.

nimi
sumber
1

MATL, 24 byte

`tDX:t2#X>wx32w(10etun2>

Cobalah online! Saya lebih suka makan skittle saya dalam urutan abjad terbalik: hijau adalah warna favorit saya. Penjelasan:

                           % Take input implicitly.
`                          % Start do ... while loop
 tD                        % Duplicate skittle pile (nom!), but give away for display
   X:                      % Put skittles in long row (like normal people do)
     t2#X>                 % Get least favourite skittle name and number in the row
          wx               % Discard the skittle name
            32w            % Put an eaten skittle on the stack (ASCII 32)
               (           % Put the eaten skittle back in the row of skittles.
                10e        % Shape the row back into a 10x10 array
                   tun     % Check the number of unique skittles
                      2>   % Loop while this number >2 (eaten skittles + favourite skittles)
                           % Implicit end of do... while loop. 
                           % Display last iteration implicitly, since it's still on the stack.
Sanchises
sumber
0

QBasic, 125 byte

Aturan kreatif menyalahgunakan!

DATA 71,89,82,79
?INPUT$(109)
DO
READ s
FOR r=1TO 10
FOR c=1TO 10
IF s=SCREEN(r,c)THEN SLEEP 1:LOCATE r,c:?" "
NEXT
NEXT
LOOP

Kiriman ini mengasumsikan banyak hal baik-baik saja:

  • Input dan output adalah huruf besar ( GORPY)
  • Input diambil sebagai 109 penekanan tombol berturut-turut, yang tidak digaungkan ke layar sampai yang terakhir dimasukkan. Di akhir setiap baris kecuali yang terakhir, pengguna harus memasukkan carriage return.
  • Alih-alih mencetak tumpukan Skittles beberapa kali, program menampilkannya di layar dengan jeda 1 detik sebelum setiap langkah. (QBasic tidak memiliki scrollback keluaran, jadi mencetak tumpukan beberapa kali hanya akan memberi Anda 2 1/2 langkah terakhir. Selain itu, metode ini adalah gambaran yang jauh lebih baik tentang bagaimana tumpukan Skittles Anda berevolusi saat Anda memakannya.)
  • Program berakhir dengan kesalahan.

Saya juga memiliki versi 130-byte yang menggunakan huruf kecil dan tidak kesalahan.

Berikut contoh dijalankan di QB64 , dengan 109diubah ke 29untuk kisi 5x5:

Makan Skittles

Penjelasan

DATA 71,89,82,79menyimpan kode ASCII dari G, Y, R, dan O.

?INPUT$(109) mendapat 109 penekanan tombol dari pengguna dan mencetaknya.

Kami kemudian memasukkan DO ... LOOPkonstruk yang tak terbatas . Setiap kali lewat, kami READkode ASCII dari Skittle saat ini s. Kemudian kita lewati baris dan kolom dari 1 hingga 10. SCREEN(r,c)mendapatkan kode ASCII dari karakter di layar pada baris r, kolom c. Jika ini adalah sama dengan Skittle saat s, kami SLEEPselama satu detik dan kemudian mencetak ruang di r, c.

Loop utama berjalan empat kali, menghilangkan Skittles hijau, kuning, merah, dan oranye. Pada iterasi kelima, READkesalahan karena kita kehabisan data.

DLosc
sumber