Jedzenie kręgli jak normalna osoba

47

Kręgle to kolorowe cukierki, w których występuje 5 różnych smaków; winogrono, zielone jabłko, cytryna, pomarańcza i truskawka reprezentowane odpowiednio przez (p) urple, (g) reen, (y) ellow, (o) i (r) ed. Zwykłem jeść kręgle, sortując wszystkie kolory, a następnie je kolejno. Po kilku dziwnych spojrzeniach w biurze udaję, że jem jak normalna osoba. Twoim zadaniem jest naśladowanie tego:

Twój kod (pełny program lub funkcja) otrzyma tablicę kręgli (10x10) jako dane wejściowe (w dowolnym rozsądnym formacie). Ta tablica będzie reprezentować stos nieposortowanych kręgli. Twoim zadaniem jest „zjedzenie” ich od najmniej ulubionego do ulubionego koloru. Moim preferowanym zamówieniem jest winogrono, zielone jabłko, cytryna, pomarańcza, truskawka, ale możesz dowolnie wybierać dowolne zamówienie, o ile jest ono konsekwentnie egzekwowane (podaj swoje preferencje w zgłoszeniu, aby móc Cię za niego osądzić). Po zjedzeniu każdego cukierka Twój kod wyświetli (w tym samym formacie, w którym pobierasz dane) pozostały stos z zjedzonym kawałkiem zastąpiony spacją. Powtórzysz, dopóki pozostanie tylko twoja ulubiona. Możesz wybrać dowolną kręgle do zjedzenia (może być losowe lub deterministyczne). Spacje końcowe muszą być zachowane.

Na przykład sekwencja wyjściowa może wyglądać następująco (użycie zwięzłości 5x5 i wyświetlanie spacji jako .)

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

To jest , więc wygrywa najkrótszy kod w bajtach

Zasady TL; DR:

  • Zgłoszenie może być pełnym programem lub funkcją
  • Dane wejściowe można przyjmować w dowolnym rozsądnym formacie (łańcuch, lista, macierz itp.) Dowolną rozsądną metodą (STDIN, argumenty funkcji itp.). Jednak między rzędami musi być pewne rozgraniczenie
  • Dane wyjściowe muszą być wytwarzane w tym samym formacie co dane wejściowe dowolną rozsądną metodą (STDOUT, powrót funkcji, itp.). Wyjściowy wynik pośredni może, ale nie musi być ograniczony
  • Pierwsze wyjście będzie pierwszym wejściem
  • Końcowe spacje muszą zostać zachowane
  • Można użyć dowolnej kolejności kolorów (lista w odpowiedzi)
  • Można zjadać każdy kręcik bieżącego koloru
  • Ostatnim wyjściem będzie tylko twój ulubiony kolor i przestrzenie
  • Jeśli to możliwe, dołącz link do kompilatora online, aby przetestować swoje zgłoszenie
wnnmaw
źródło
4
@MukulKumar, zgadza się, chcesz, aby były lepsze w miarę
postępów
2
Czy możemy zaakceptować kręgle jako pojedynczy ciąg 100 kręgli, bez łamania linii itp.?
Gabriel Benamy,
1
Czy produkty pośrednie należy od siebie oddzielić?
Poke
8
Zastanawiałem się nad podjęciem tego wyzwania, a następnie przeczytałem „ proszę podać swoje preferencje w zgłoszeniu, aby móc Cię za to osądzić ”. Myślę, że ludzie są już zbyt osądni wobec moich preferencji!
Toby Speight,

Odpowiedzi:

16

Galaretka , 16 14  13 bajtów

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

TryItOnline!

Najbardziej lubiani, jak na każdego, kto poważnie myśli o ich OCD, jest alfabetyczny!

Pobiera dane wejściowe i wyjściowe jako tekst (tzn. Wiersze są oddzielone nowymi wierszami).

3 bajty zapisane przez odwrócenie kierunku i zastosowanie innej metody: ocenianie zamiast znajdowania znaków z alfabetu.

W jaki sposób?

Ṅ⁶ỤṪ$¦µ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
źródło
8

JavaScript (ES6), 74 75 74 bajtów

Aromaty są zamawiane zgodnie z opisem w wyzwaniu: winogrono, zielone jabłko, cytryna, pomarańcza, truskawka.

Wyjścia pośrednie są oddzielone znakami nowej linii.

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

Przypadek testowy

W tym przypadku testowym użyto przykładu 5x5. Każdy inny rozmiar siatki powinien działać zgodnie z oczekiwaniami.

Arnauld
źródło
8

Grzmotnąć, 48, 46 bajtów

AKTUALIZACJA:

  • Zaoszczędzono dwa bajty, używając nieprzetworzonych parametrów do printf;

Grał w golfa

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

Pobiera dane wejściowe na standardowe wejście, drukuje na standardowe wejście. Zjada fioletowy, zielony, żółty, a następnie pomarańczowy.

Równoważny program sed byłby:

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

Przykładowe dane wyjściowe (ograniczniki służą wyłącznie przejrzystości)

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

Wypróbuj online!

zepelin
źródło
7

Python 2, 60 57 56 bajtów

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

repl.it

Funkcja rekurencyjna, która je w odwrotnej kolejności alfabetycznej, pozostawiając zielone na koniec.

Dane wejściowe sto ciąg znaków z ogranicznikiem wiersza z liczbą porządkową mniejszą niż 'g'linia (na przykład nowa linia lub przecinek).

Funkcja drukuje dane wejściowe, a następnie powtarza się, jeśli dane wejściowe zawierają coś większego niż „g”, przekazując dane wejściowe przy pierwszym wystąpieniu maksymalnego znaku zastąpionego spacją.

(Prawie część mojej galaretki .)

Jonathan Allan
źródło
6

Perl, 53 46 + 2 = 48 bajtów

Biegnij z -0n

-10 bajtów dzięki @Dada

Edycja: Również dzięki @Dada za wskazanie tego, zapomniałem wydrukować dane wejściowe jako pierwsze wyjście. To zostało naprawione.

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

W tej odpowiedzi jest trochę podstępu, więc podzielę się tym, co się dzieje.

Przede wszystkim Perl nie lubi przekazywania parametrów wieloliniowych. Zmienna $/jest separatorem rekordów wejściowych i za każdym razem, gdy dowolne wejście napotka znak w nim przechowywany, interpreter przerywa to wejście i rozpoczyna nowe wejście. Domyślną zawartością jest znak nowej linii \n, co oznacza, że ​​przekazanie ciągu wieloliniowego nie jest możliwe. Aby to zrobić, musimy cofnąć się $/od jego zawartości. Tam właśnie -0pojawia się flaga: ustawienie -0zapisze się nullw zmiennej $/, umożliwiając interpreterowi odczytanie wszystkiego do zmiennej niejawnej $_naraz.

Kolejną sztuczką jest evalstwierdzenie. Czym dokładnie jesteśmy eval? Sprawdzamy evalwynik sprintfinstrukcji, która jest podzielona w następujący sposób:

Pierwszą rzeczą, która sprintfjest przekazywana, jest ciąg "say while s/%s/./;"powtórzony 4 razy, więc:

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

Następnie sprintfprzekazywane są cztery znaki bez słowa, p,o,g,rktóre są interpolowane w sprintfinstrukcji, zastępując każde wystąpienie %s. Następnie otrzymujemy następujący ciąg znaków, który jest przekazywany do evalfunkcji:

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

Każda whilepętla ocenia wyrażenie s/[color]/./, które zastępuje pierwszą instancję dowolnego koloru w zmiennej niejawnej $_kropką. Jeśli zostanie dokonana zamiana, zwraca 1, w przeciwnym razie nic nie zwraca. Ponieważ s///ma skutki uboczne, modyfikuje oryginalną zmienną $_, której zawartość jest następnie drukowana say. Wykonuje się cztery wersje tej pętli, zastępując fioletowe, pomarańczowe, zielone, a następnie czerwone, pozostawiając tylko żółte.

Przyczyną pozostawienia żółci jest to, że ynie może być gołym słowem, ponieważ w rzeczywistości jest to funkcja, a użycie yzamiast którejkolwiek z tych liter spowodowałoby błąd. Mógłbym to zmienić, umieszczając wokół niego cudzysłowy (+2 bajty) lub używając dużej litery Y i czyniąc rozróżnianie wyrażeń regularnych (+1 bajt), ale w przypadku każdy bajt się liczy, więc zdecydowałem, że naprawdę mi się podoba cytryna kręci się najbardziej.

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

Gabriel Benamy
źródło
-0flaga powinna zaoszczędzić około 10 bajtów
Dada
Obawiam się też, że nie przestrzegałeś zasadyFirst output shall be the first input
Dada
1
Dobrze, że poświęciłeś swoje osobiste preferencje, by zaoszczędzić dwa bajty
wnnmaw
4

Perl, 30 31 33 + 2 = 32 33 35 bajtów

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

Uruchom z -n0(kara 2 bajty).

Najwyraźniej lubię jeść Skittles w kolejności alfabetycznej, ponieważ program okazuje się w ten sposób krótszy. Program tak naprawdę nie potrzebuje wielu wyjaśnień: -n0odczytuje dane wejściowe niejawnie ( -nznaczy „odczytuje dane wejściowe niejawnie”, -0oznacza „nie przerywaj danych wejściowych w nowym wierszu”); for$x(g..r)uruchamia pętlę z $xzestawem od każdej litery od gdo rz kolei; say;wypisuje bieżący sygnał wejściowy, po wszelkich mutacjach; w miarę możliwości s/$x/ /zastępuje jedną kopię $x(konkretnie pierwszą) spacją; i &&redopowtarza kod w nawiasach klamrowych (bez przesuwania licznika pętli), jeśli zamiana zakończyła się powodzeniem.

Ten program można łatwo uogólnić na więcej smaków Skittle bez zmiany jego długości i będzie on działać ze stosem dowolnej wielkości.

Oto link Ideone, w którym możesz go przetestować. (Ideone nie pozwala ci określić opcji wiersza poleceń, więc musiałem dodać kilka linii na początku, aby ustawić, -n0a -M5.010otrzymasz za darmo.)


źródło
1
Nie jestem pewien, czy możesz drukować kilka razy ten sam stos kręgli kilka razy (Właściwie myślę, że nie możesz) Może przełączyć się na say;for$x(g..r){say while s/$x/ /}?
Dada,
Ah, tak. Pierwotnie miałem, for$x(p,o,g,r)co nie. say whilejest tylko jeden bajt dłuższy i jest to coś, co uznałem za alternatywę, więc mogę po prostu przejść do tego.
I musisz zacząć od, say;ponieważ zasady mówiąFirst output shall be the first input
Dada
Och, w takim przypadku wrócę do for$x(g,o,p,r)wersji, która najpierw kopiuje dane wejściowe. (Przeszukanie zabiera trochę czasu, jeśli brakuje kolorów, ale nie spodziewałbyś się, że zabraknie koloru w paczce kręgli.) Dla przypomnienia, wersja z say;pierwszym to 37 bajtów.
Oryginalny komentarz Dady jest jednak nadal aktualny - kod w obecnej postaci drukuje czasami tę samą konfigurację dwa razy z rzędu (raz na końcu zieleni i drugi raz na początku pomarańczy, np.).
DLosc
4

C #, 134 148 bajtów

Zamówienie: 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;};

Użyłem podobnych rzeczy z odpowiedzi @ Poke, obecnie jednak nieco dłuższych, ponieważ muszę przekonwertować tablicę znaków na ciąg znaków; (

Jodła
źródło
HA! pokonałem cię 3 znakami !!!
Mukul Kumar,
4

Java 7, 139 135 130 151 138 135 135 bajtów

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

Zjada kręgle w kolejności: żółty, pomarańczowy, zielony, fioletowy, czerwony

Myślę, że to lepsze niż 2 wyciągi drukowane>.>

Szturchać
źródło
1
Oczywiście, że możesz, twoja funkcja nazywa się skit: P -3 tutaj!
Yodle,
1
@Yodle oops! hahaha
Poke
1
Jeśli zawsze otrzymujemy siatkę 10x10, mógłbym zakodować długość raczej niż przy użycius.length
Poke
1
Czy nie musimy go drukować raz na początku przed zjedzeniem jakiegokolwiek: s
Yodle
1
@Yodle dlatego jem „!” najpierw kręgle;) ... poczekaj, myślę, że złamałem ten trik
Poke
4

C 145 - 5 - 18 - 1 = 121 bajtów

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

bez golfa + ładna

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

Tu a[][11]oznacza n-sobą ciągi o długości 11, jeżeli wymagana jest jeden znak zakańczania więc technicznie tylko 10 widocznych znaków.

kolejność: alfabetycznie
funkcja ta sprawdza 'g'w danych wejściowych i eliminuje ją 1/1, a następnie zwiększa wartość zmiennej trzymającej, 'g'aż znajdzie następne dopasowanie (prawdopodobnie litera 'o'), a następnie eliminuje te dopasowane znaki.
Minusem jest to, że ta funkcja jest po prostu zbyt ostrożna, więc jeśli twoje kręgle były w 26różnych kolorach o nazwie kodowej od liter az, ta funkcja również poradzi sobie z tym wejściem ...

Mukul Kumar
źródło
Znacznie więcej niż 3 teraz: P
Yodle
@ Yodle tak .. dzięki makrom, które możesz zdefiniować #define. To skróciło 19 bajtów
Mukul Kumar,
3

Oktawa, 49 bajtów

Zjada kręgle w kolejności alfabetycznej, najpierw najwyższy kod ascii.

A=input("");do [~,p]=max(A(:));A(p)=32 until A<33
Rainer P.
źródło
3

ES6 (JavaScript), 72, 71 bajtów

EDYCJE:

  • Minus 1 bajt, za pomocą szablonu z dosłownym z

Wersja nierekurencyjna w JavaScript.

Grał w golfa

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

Dane wejściowe i wyjściowe są ciągami wieloliniowymi, zjadają tabletki w kolejności „fioletowy => pomarańczowy => zielony => żółty”.

Test

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

zepelin
źródło
2

Python 3 - 141 99 75 bajtów

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

Program zjada kręgle w tej kolejności - Orange Red Green Yellow Purple.

Edycja - Podziękowania dla Flp.Tkc, który pomógł zmniejszyć 24 bajty!

Wejście - 
ygro goppr rppog rppog orgia

Wynik - 
ygro goppr rppog rppog orgia
ygr goppr rppog rppog orgia
ygr g ppr rppog rppog orgia
ygr g ppr rpp g rppog orgia
ygr g ppr rpp g rpp g orgia
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 pp g gy
y pp pp pp pp gy
y pp pp pp pp y
        pp pp pp pp y
        pp pp pp  

Wierzę, że można go jeszcze bardziej pograć w golfa, ponieważ wygląda to bardzo prosto.

Gurupad Mamadapur
źródło
2
Wygląda na to, że zjada wszystkie kolory na raz, podczas gdy powinien jeść tylko jeden na raz
wnnmaw
1
Również bierzesz dane wejściowe jako listę gniazd, ale produkujesz ciągi, zmodyfikuj kod tak, aby zarówno dane wejściowe, jak i wyjściowe
miały ten
@wnnmaw Dokonane zmiany. Mam nadzieję, że teraz jest w porządku :)
Gurupad Mamadapur
1
Wiem, że jest już krótszy rozwiązanie, ale pobyt z tego algorytmu możesz golf to bardziej coś jak ten .
FlipTack,
3
Podoba mi się, jak konkretnie wybrałeś kolejność, która do tego doprowadziła orgy.
Nic Hartley,
2

Vim 57 55 bajtów

Zapisywanie dwóch bajtów poprzez usunięcie mojego separatora linii. Niestety znacznie trudniej jest go odczytać i sprawdzić poprawność :(.

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

Materiały niedrukowalne:

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

TryItOnline

Zjada w kolejności oypg, pozostawiając wszystkie r na koniec :)

nmjcman101
źródło
1

Mathematica, 67 bajtów

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

Zjada czerwienie, potem żółcie, potem pomarańcze, a następnie fioletowe.

JungHwan Min
źródło
Chłopcze, cieszę się, że nie ma wbudowanego do tego
wnnmaw
1

Java 7, 125 bajtów

Fioletowy, żółty, zielony, czerwony, pomarańczowy. Cieszę się, że w tym rozwiązaniu mogę wybrać zamówienie. :RE

Grał w golfa

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

Bez golfa

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

Wypróbuj tutaj!

Inne podejście do drugiej odpowiedzi Java autorstwa @Poke. Zaczynamy od wykonania kopii oryginalnego ciągu. Iterując po każdym kolorze, zastępujemy go za każdym razem, gdy zostanie znaleziony spacją, a następnie dołączamy nowy układ do ciągu wyjściowego, powracając po zjedzeniu wszystkiego oprócz pomarańczy.

Notatki

Separacja między krokami odbywa się za pomocą podwójnego nowego wiersza \n\n, ale jeśli siatkę wejściową można pobrać z końcowym znakiem nowej linii na końcu, można ją skrócić do just \n.

Xanderhall
źródło
1

Haskell, 60 bajtów

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

Dane wejściowe to pojedynczy ciąg, w którym wiersze są oddzielone ,. Zwracana wartość to lista ciągów znaków ze wszystkimi pośrednimi krokami. Porządek jest alfabetycznie, najpierw największy, więc pozostaje zielony. Przykład użycia:

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

Prosta rekurencja. Zapisz listę wejściową jako wartość zwracaną, zamień największy element większy gspacją i ponownie wywołaj funkcję. Przypadek podstawowy występuje wtedy, gdy nie ma już elementu do usunięcia.

nimi
źródło
1

MATL, 24 bajty

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

Wypróbuj online! Wolę jeść kręgle w odwrotnej kolejności alfabetycznej: mój ulubiony kolor to zielony. Wyjaśnienie:

                           % 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
źródło
0

QBasic, 125 bajtów

Nadużywanie reguł twórczych!

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

To przesłanie zakłada, że ​​wiele rzeczy jest w porządku:

  • Dane wejściowe i wyjściowe są pisane wielkimi literami ( GORPY)
  • Dane wejściowe są przyjmowane jako 109 kolejnych naciśnięć klawiszy, które nie są powtarzane na ekranie, dopóki nie zostanie wprowadzone ostatnie. Na końcu każdego wiersza oprócz ostatniego użytkownik musi wprowadzić znak powrotu karetki.
  • Zamiast drukować stos Skittles wiele razy, program wyświetla go na ekranie z 1-sekundową pauzą przed każdym krokiem. (QBasic nie ma przewijanego wyjścia, więc wielokrotne wydrukowanie stosu dałoby tylko ostatnie 2 1/2 kroku. Ponadto ta metoda jest o wiele lepszym obrazem ewolucji stosu Kręgli podczas ich jedzenia.)
  • Program kończy się błędem.

Mam również 130-bajtową wersję, która używa małych liter i nie zawiera błędów.

Oto przykładowy przebieg w QB64 , 109zmieniony na 29dla siatki 5x5:

Jedzenie kręgli

Wyjaśnienie

DATA 71,89,82,79przechowuje kody ASCII G, Y, R, i O.

?INPUT$(109) pobiera od użytkownika 109 naciśnięć klawiszy i drukuje je.

Następnie wchodzimy w nieskończoną DO ... LOOPkonstrukcję. Za każdym razem READwprowadzamy kod ASCII bieżącego Skittle do s. Następnie zapętlamy wiersze i kolumny od 1 do 10. SCREEN(r,c)dostaje kod ASCII znaku na ekranie w wierszu r, kolumnie c. Jeśli tak jest równa aktualnej kręgle s, my SLEEPna jedną sekundę, a następnie wydrukować w przestrzeni r, c.

Główna pętla biegnie cztery razy, usuwając zielone, żółte, czerwone i pomarańczowe kręgle. Przy piątej iteracji wystąpiły READbłędy, ponieważ nie mamy danych.

DLosc
źródło