Ăn Skittles như một người bình thường


47

Skittles là kẹo màu trong đó có 5 hương vị riêng biệt; nho, táo xanh, chanh, cam và dâu đại diện bởi (p) urple, (g) reen, (y) ellow, (o), và (r) ed tương ứng. Tôi đã từng ăn skittles bằng cách sắp xếp tất cả các màu khác nhau, sau đó ăn chúng theo trình tự. Sau khi nhận được một vài cái nhìn kỳ lạ trong văn phòng, bây giờ tôi giả vờ ăn chúng như một người bình thường. Nhiệm vụ của bạn là mô phỏng điều này:

Mã của bạn (chương trình hoặc chức năng đầy đủ) sẽ nhận được một mảng skittles (10x10) làm đầu vào (ở bất kỳ định dạng hợp lý nào). Mảng này sẽ đại diện cho một đống skittles chưa được sắp xếp. Nhiệm vụ của bạn là "ăn" chúng từ màu yêu thích nhất đến màu yêu thích. Đơn hàng ưa thích của tôi là nho, táo xanh, chanh, cam, dâu tây, nhưng bạn có thể tự do chọn bất kỳ đơn hàng nào miễn là nó được thực thi một cách nhất quán (vui lòng liệt kê sở thích của bạn trong bài đăng của bạn để tôi có thể đánh giá bạn về nó). Sau khi ăn từng miếng kẹo, mã của bạn sẽ xuất ra (theo cùng định dạng bạn lấy đầu vào), đống còn lại với miếng đã ăn được thay thế bằng khoảng trắng. Bạn sẽ lặp lại cho đến khi chỉ còn lại yêu thích của bạn. Bạn có thể chọn bất kỳ món ăn vặt nào để ăn (có thể là ngẫu nhiên hoặc xác định). Không gian lưu trữ phải được giữ.

Ví dụ: chuỗi đầu ra của bạn có thể trông như thế này (sử dụng 5x5 cho ngắn gọn và hiển thị khoảng trắng dưới dạng .)

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...

Đây là , vì vậy mã ngắn nhất tính bằng byte thắng

Quy tắc TL; DR:

  • Đệ trình có thể là chương trình đầy đủ hoặc chức năng
  • Đầu vào có thể được lấy theo bất kỳ định dạng hợp lý nào (chuỗi, danh sách, ma trận, v.v.) bằng bất kỳ phương thức hợp lý nào (STDIN, đối số hàm, v.v.). Tuy nhiên, phải có một số phân định giữa các hàng
  • Đầu ra phải được sản xuất theo cùng định dạng với đầu vào bằng bất kỳ phương thức hợp lý nào (STDOUT, trả về hàm, ect.). Đầu ra trung gian có thể hoặc không thể được phân định
  • Đầu ra đầu tiên sẽ là đầu vào đầu tiên
  • Không gian lưu trữ phải được bảo tồn
  • Bất kỳ thứ tự màu nào có thể được sử dụng (liệt kê trong câu trả lời của bạn)
  • Bất kỳ màu sắc nào của màu hiện tại có thể được ăn
  • Đầu ra cuối cùng sẽ chỉ là màu sắc và không gian yêu thích của bạn
  • Nếu có thể, hãy bao gồm một liên kết đến trình biên dịch trực tuyến để kiểm tra trình của bạn

4
@MukulKumar, đúng rồi, bạn muốn họ trở nên tốt hơn khi bạn đi cùng
wnnmaw 6/12/2016

2
Chúng ta có thể chấp nhận các skittles như một chuỗi 100 skittle duy nhất, không ngắt dòng hay bất cứ điều gì không?
Gabriel Benamy

1
Do đầu ra trung gian cần phải được phân tách bởi bất cứ điều gì?
Chọc


8
Tôi đã cân nhắc tham gia thử thách này và sau đó đọc " vui lòng liệt kê sở thích của bạn trong bài đăng của bạn để tôi có thể đánh giá bạn về nó ". Tôi nghĩ rằng mọi người đã quá phán xét sở thích của tôi!
Toby Speight

Câu trả lời:


16

Thạch , 16 14  13 byte

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

Dùng thử trực tuyến!

Hầu hết đến ít yêu thích nhất, như đối với bất kỳ ai nghiêm túc về OCD của họ, là bảng chữ cái!

Lấy đầu vào và đầu ra dưới dạng văn bản (tức là các hàng được phân cách bằng các dòng mới).

3 byte được lưu bằng cách đảo ngược hướng và sử dụng một phương pháp khác: lên cấp thay vì tìm các ký tự từ bảng chữ cái.

Làm sao?

Ṅ⁶ỤṪ$¦µ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)

8

JavaScript (ES6), 74 75 74 byte

Hương vị được đặt hàng như mô tả trong thử thách: nho, táo xanh, chanh, cam, dâu tây.

Đầu ra trung gian được phân tách bằng dòng mới.

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

Trường hợp thử nghiệm

Trường hợp thử nghiệm này đang sử dụng ví dụ 5x5. Bất kỳ kích thước lưới khác nên làm việc như mong đợi.


8

Bash, 48, 46 byte

CẬP NHẬT:

  • Đã lưu hai byte bằng cách sử dụng tham số thô để printf;

Chơi gôn

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

Đưa đầu vào tại stdin, in ra thiết bị xuất chuẩn. Ăn màu tím, xanh lá cây, vàng và cam.

Một chương trình sed tương đương sẽ là:

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

Đầu ra mẫu (dấu phân cách chỉ rõ ràng)

-----
 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   
-----

Hãy thử trực tuyến!


7

Python 2, 60 57 56 byte

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

thay thế

Hàm đệ quy ăn theo thứ tự bảng chữ cái ngược, để lại màu xanh cho lần cuối.

Đầu vào slà một chuỗi có một dấu phân cách hàng với số thứ tự nhỏ hơn một chuỗi 'g'(ví dụ: một dòng mới hoặc dấu phẩy).

Hàm in đầu vào của nó và sau đó đệ quy nếu đầu vào đó chứa bất cứ thứ gì lớn hơn 'g', chuyển đầu vào với lần xuất hiện đầu tiên của ký tự tối đa được thay thế bằng khoảng trắng.

(Gần như một cổng câu trả lời Jelly của tôi .)


6

Perl, 53 46 + 2 = 48 byte

Chạy với -0n

-10 byte nhờ @Dada

Chỉnh sửa: Cũng nhờ @Dada đã chỉ ra, tôi đã quên in đầu vào là đầu ra đầu tiên. Điều đó đã được sửa.

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

Có một chút mánh khóe liên quan đến câu trả lời này, vì vậy tôi sẽ phá vỡ những gì đang diễn ra.

Trước hết, Perl không thích thông số nhiều dòng được thông qua. Biến $/là dấu phân tách bản ghi đầu vào và bất cứ khi nào bất kỳ đầu vào nào gặp ký tự được lưu trong đó, trình thông dịch sẽ chấm dứt đầu vào đó và bắt đầu một đầu vào mới. Nội dung mặc định là ký tự dòng mới \n, có nghĩa là không thể truyền chuỗi nhiều dòng. Để làm điều đó, chúng ta phải bỏ đặt $/từ nội dung của nó. Đó là nơi -0cờ xuất hiện: cài đặt -0sẽ lưu trữ nulltrong biến $/, cho phép trình thông dịch đọc mọi thứ vào biến ẩn $_cùng một lúc.

Một chút mánh khóe tiếp theo là evaltuyên bố. Chính xác thì chúng ta đang làm evalgì? Chúng tôi đang evalnhận kết quả của sprintftuyên bố, được chia nhỏ như sau:

Điều đầu tiên sprintfđược thông qua là chuỗi được "say while s/%s/./;"lặp lại 4 lần, vì vậy:

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

Sau đó, sprintfđược thông qua bốn ký tự bareword p,o,g,r, được nội suy vào sprintfcâu lệnh, thay thế từng trường hợp của %s. Những gì chúng ta sau đó nhận được là chuỗi sau, được truyền cho evalhàm:

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

Mỗi whilevòng lặp đánh giá biểu thức s/[color]/./, thay thế thể hiện đầu tiên của bất kỳ màu nào trong biến ẩn $_bằng một dấu chấm. Nếu một sự thay thế được thực hiện, nó trả về 1, nếu không nó sẽ trả về không có gì. Vì s///có tác dụng phụ, nó sửa đổi biến ban đầu $_, có nội dung được in qua say. Bốn phiên bản của vòng lặp này được thực hiện, thay thế cho các loại tinh khiết, cam, xanh lục và sau đó là màu đỏ, chỉ để lại màu vàng.

Lý do mà các màu vàng bị bỏ lại là vì ykhông thể là một bareword, bởi vì nó thực sự là một chức năng và ythay vì bất kỳ chữ cái nào trong số đó sẽ gây ra lỗi. Tôi có thể thay đổi điều này bằng cách đặt dấu ngoặc kép xung quanh nó (+2 byte) hoặc sử dụng chữ Y viết hoa và làm cho biểu thức không phân biệt chữ hoa chữ thường (+1 byte), nhưng đối với , mỗi byte đều được tính, vì vậy tôi quyết định rằng tôi thực sự thích chanh skittles nhất.

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


-0cờ sẽ giúp bạn tiết kiệm khoảng 10 byte
Dada

Ngoài ra, tôi sợ bạn bỏ lỡ quy tắcFirst output shall be the first input
Dada

1
Tốt cho bạn vì đã hy sinh sở thích cá nhân của riêng bạn để tiết kiệm hai byte
wnnmaw

4

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

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

Chạy với -n0(hình phạt 2 byte).

Rõ ràng, tôi thích ăn Skittles theo thứ tự bảng chữ cái, bởi vì chương trình hóa ra ngắn hơn theo cách đó. Chương trình không thực sự cần nhiều lời giải thích: -n0đọc đầu vào ngầm ( -ncó nghĩa là "đọc đầu vào ngầm", -0nghĩa là "không ngắt đầu vào trên dòng mới"); for$x(g..r)chạy một vòng lặp với $xtập hợp từ mỗi chữ cái gđến rlần lượt; say;in đầu vào hiện tại, sau bất kỳ đột biến nào; s/$x/ /thay thế một bản sao $x(cụ thể là bản đầu tiên) bằng một khoảng trắng nếu có thể; và &&redolặp lại mã bên trong dấu ngoặc nhọn (không tiến bộ đếm vòng lặp) nếu việc thay thế thành công.

Chương trình này có thể dễ dàng được khái quát thành nhiều hương vị của Skittle mà không thay đổi độ dài của nó, và sẽ hoạt động với một đống có kích thước bất kỳ.

Đây là một liên kết Ideone nơi bạn có thể kiểm tra nó. (Ideone không cho phép bạn chỉ định các tùy chọn dòng lệnh, vì vậy tôi đã phải thêm một vài dòng khi bắt đầu để đặt -n0và tùy chọn -M5.010mà bạn nhận được miễn phí.)


1
Tôi không chắc chắn rằng bạn được phép in nhiều lần cùng một đống skittles vài lần .. (Thật ra tôi nghĩ bạn không thể) Có thể chuyển sang say;for$x(g..r){say while s/$x/ /}?
Dada

À đúng rồi. Ban đầu tôi for$x(p,o,g,r)không có. say whilechỉ dài hơn một byte và một cái gì đó mà tôi coi là một thay thế, vì vậy tôi có thể chỉ cần thay đổi nó.

Và bạn cần bắt đầu với một say;vì các quy tắc nóiFirst output shall be the first input
Dada

Ồ, trong trường hợp đó tôi sẽ quay lại for$x(g,o,p,r)phiên bản sao chép đầu vào trước. (Phải mất thêm thời gian để tìm kiếm nếu thiếu màu, nhưng bạn sẽ không bị thiếu màu trong một gói skittles.) Đối với bản ghi, phiên bản say;đầu tiên sẽ là 37 byte.

Mặc dù vậy, nhận xét ban đầu của Dada vẫn đứng - mã khi nó đứng sẽ in cùng một cấu hình hai lần liên tiếp (một lần ở cuối green và lần thứ hai ở đầu cam, ví dụ).
DLosc

4

C #, 134 148 byte

Đặt hàng: 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;};

Đã sử dụng một số điều tương tự từ câu trả lời của @ Poke, hiện tại lâu hơn một chút vì tôi cần chuyển đổi mảng ký tự thành chuỗi; (


HẠ! đánh bại bạn bằng 3 ký tự !!!
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;}}

Ăn skittles theo thứ tự: Vàng, Cam, Xanh, Tím, Đỏ

Tôi đoán điều này tốt hơn 2 câu lệnh in>.>


1
Tất nhiên bạn có thể, chức năng của bạn được đặt tên là skit: P -3 ngay đó!
Yodle

1
@Yodle ôi! hahaha
Chọc

1
Nếu chúng tôi luôn nhận được lưới 10x10, tôi có thể mã hóa độ dài thay vì sử dụngs.length
Poke

1
Chúng ta không cần phải in nó ra một lần khi bắt đầu trước khi ăn bất kỳ: s
Yodle 6/12/2016

1
@Yodle đó là lý do tại sao tôi đang ăn "!" skittles trước;) ... chờ tôi nghĩ rằng tôi đã phá vỡ mánh khóe đó
Chọc

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("");}}  

vô duyên + xinh

#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);
}  

Ở đây a[][11]có nghĩa là lấy n chuỗi có độ dài 11 trong đó yêu cầu 1 char để chấm dứt, vì vậy về mặt kỹ thuật chỉ có 10 ký tự hiển thị.

Thứ tự: theo thứ tự chữ cái
, hàm này kiểm tra 'g'trong đầu vào đã cho và loại bỏ nó 1/1 sau đó tăng biến giữ 'g'cho đến khi tìm thấy kết quả khớp tiếp theo (có thể là chữ cái 'o') và sau đó loại bỏ các ký tự trùng khớp đó.
Nhược điểm là chức năng này quá cẩn thận. Vì vậy, nếu skittels của bạn có 26các màu khác nhau được đặt tên mã từ các chữ cái az, chức năng này cũng sẽ xử lý đầu vào đó ...


Nhiều hơn 3 giờ: P
Yodle 7/12/2016

@Yodle yeah..cảm ơn các macro bạn có thể xác định #define. Điều đó đã cắt giảm 19 byte
Mukul Kumar

3

Octave, 49 byte

Ăn skittles theo thứ tự bảng chữ cái, mã ascii cao nhất đầu tiên.

A=input("");do [~,p]=max(A(:));A(p)=32 until A<33

3

ES6 (Javascript), 72, 71 byte

CHỈNH SỬA:

  • Trừ 1 byte, bằng cách sử dụng mẫu theo nghĩa đen với các

Một phiên bản không đệ quy trong Javascript.

Chơi gôn

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

Đầu vào và đầu ra là các chuỗi nhiều dòng, ăn các viên thuốc theo thứ tự "tím => cam => xanh => vàng".

Kiểm tra

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 `)
);


2

Python 3 - 141 99 75 byte

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

Chương trình ăn skittles theo thứ tự này - Orange Red Green Yellow Purple.

Chỉnh sửa - Cảm ơn Flp.Tkc , người đã giúp cắt giảm 24 byte!

Đầu vào - 
ygro goppr rppog orgy

Đầu ra - 
ygro goppr 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  

Tôi tin rằng nó có thể được chơi gôn hơn vì nó trông rất đơn giản.


2
Có vẻ như điều này đang ăn tất cả một màu tại một thời điểm trong khi nó chỉ nên ăn một màu một lần
wnnmaw

1
Ngoài ra, bạn đang lấy đầu vào làm danh sách lồng, nhưng tạo chuỗi, vui lòng sửa đổi mã của bạn sao cho cả đầu vào và đầu ra có cùng định dạng
wnnmaw 6/12/2016

@wnnmaw Thay đổi được thực hiện. Tôi hy vọng nó ổn bây giờ :)
Gurupad Mamadapur 6/12/2016

1
Tôi biết đã có một giải pháp ngắn hơn, nhưng với thuật toán này, bạn có thể chơi nó nhiều hơn với những thứ như thế này .
FlipTack

3
Tôi thích cách bạn đặc biệt chọn thứ tự dẫn đến orgy.
Nic Hartley

2

Vim 57 55 byte

Lưu hai byte bằng cách loại bỏ dấu phân cách dòng của tôi. Thật không may, nó làm cho việc đọc và kiểm tra tính chính xác trở nên khó khăn hơn nhiều :(.

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

Không thể in

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

Dùng thử

Ăn theo thứ tự oypg, để lại tất cả các r cho đến cuối :)


1

Toán học, 67 byte

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

Ăn màu đỏ, sau đó vàng, sau đó cam, sau đó thanh lọc.


Tôi rất vui vì không có tích hợp sẵn cho việc này
wnnmaw

1

Java 7, 125 byte

Tím, Vàng, Xanh, Đỏ, Cam. Tôi rất thích rằng tôi có thể chọn đơn hàng của mình trong giải pháp này. :CƯỜI MỞ MIỆNG

Chơi gôn

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;}

Ung dung

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;
}

Hãy thử nó ở đây!

Một cách tiếp cận khác với câu trả lời Java khác của @Poke. Chúng tôi bắt đầu bằng cách tạo một bản sao của chuỗi gốc. Lặp lại qua từng màu, chúng tôi thay thế nó mỗi lần nó được tìm thấy bằng một khoảng trắng, sau đó nối bố cục mới vào chuỗi đầu ra, trở lại sau khi chúng tôi ăn mọi thứ trừ màu cam.

Ghi chú

Phân chia giữa các bước được thực hiện với một dòng mới gấp đôi \n\n, nhưng nếu lưới đầu vào có thể được thực hiện với một dòng mới ở cuối, nó có thể được rút ngắn thành chỉ \n.


1

Haskell, 60 byte

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

Đầu vào là một chuỗi đơn trong đó các hàng được phân tách bằng ,. Giá trị trả về là một danh sách các chuỗi với tất cả các bước trung gian. Thứ tự là theo thứ tự abc, lớn nhất đầu tiên, vì vậy màu xanh vẫn còn. Ví dụ sử dụng:

*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  ,     ,     

Đệ quy đơn giản. Lưu danh sách đầu vào cho giá trị trả về, thay thế phần tử lớn nhất lớn hơn gbằng khoảng trắng và gọi lại hàm. Trường hợp cơ sở là khi không còn phần tử nào để loại bỏ.


1

MATL, 24 byte

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

Hãy thử trực tuyến! Tôi thích ăn skittles của mình theo thứ tự bảng chữ cái ngược: màu xanh lá cây là màu yêu thích của tôi. Giải trình:

                           % 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.

0

QBasic, 125 byte

Lạm dụng quy tắc sáng tạo!

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

Trình này giả định rất nhiều thứ là ổn:

  • Đầu vào và đầu ra là chữ hoa ( GORPY)
  • Đầu vào được lấy là 109 lần nhấn phím liên tiếp, không được lặp lại trên màn hình cho đến khi lần nhấn cuối cùng được nhập. Ở cuối mỗi hàng trừ hàng cuối cùng, người dùng phải nhập trở lại vận chuyển.
  • Thay vì in đống Skittles nhiều lần, chương trình sẽ hiển thị nó trên màn hình với thời gian tạm dừng 1 giây trước mỗi bước. (QBasic không có cuộn ngược đầu ra, do đó, in cọc nhiều lần sẽ chỉ cung cấp cho bạn 2 1/2 bước cuối cùng. Ngoài ra, phương pháp này là mô tả tốt hơn nhiều về cách đống Skittles của bạn phát triển khi bạn ăn chúng.)
  • Chương trình kết thúc với một lỗi.

Tôi cũng có một phiên bản 130 byte sử dụng chữ thường và không có lỗi.

Đây là một mẫu chạy trong QB64 , được 109thay đổi thành 29lưới 5x5:

Ăn Skittles

Giải trình

DATA 71,89,82,79lưu trữ các mã ASCII của G, Y, R, và O.

?INPUT$(109) được 109 phím bấm từ người dùng và in chúng.

Chúng tôi sau đó nhập một DO ... LOOPcấu trúc vô hạn . Mỗi lần, chúng tôi READnhập mã ASCII của Skittle hiện tại vào s. Sau đó, chúng tôi lặp qua các hàng và cột từ 1 đến 10. SCREEN(r,c)lấy mã ASCII của ký tự trên màn hình ở hàng r, cột c. Nếu đây là tương đương với skittle hiện tại s, chúng tôi SLEEPtrong một giây và sau đó in một không gian tại r, c.

Vòng lặp chính chạy bốn lần, loại bỏ Skittles xanh, vàng, đỏ và cam. Ở lần lặp thứ năm, READlỗi vì chúng tôi hết dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.