กิน Skittles เหมือนคนปกติ


47

Skittles เป็นลูกอมสีที่มี 5 รสชาติที่แตกต่างกัน องุ่น, แอปเปิ้ลเขียว, มะนาว, ส้มและสตรอเบอร์รี่แสดงโดย (p) urple, (g) reen, (y) ellow, ช่วง (o) และ (r) ed ตามลำดับ ฉันเคยกิน skittles โดยการเรียงลำดับสีที่แตกต่างกันทั้งหมดแล้วกินตามลำดับ หลังจากดูภาพแปลก ๆ ในออฟฟิศตอนนี้ฉันแกล้งทำเป็นกินพวกเขาเหมือนคนปกติ งานของคุณคือเลียนแบบสิ่งนี้:

รหัสของคุณ (โปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ) จะได้รับอาร์เรย์ของ skittles (10x10) เป็นอินพุต (ในรูปแบบที่เหมาะสม) อาร์เรย์นี้จะเป็นตัวแทนของ skittles ที่ไม่เรียงลำดับ งานของคุณคือ "กิน" พวกเขาจากสีที่คุณชอบน้อยที่สุดไปเป็นสีโปรด คำสั่งซื้อที่ฉันชอบคือองุ่นแอปเปิ้ลเขียวมะนาวส้มสตรอเบอร์รี่ แต่คุณมีอิสระที่จะเลือกคำสั่งใดก็ได้ตราบใดที่มีการบังคับใช้อย่างต่อเนื่อง (โปรดระบุรายการที่คุณต้องการในการส่งของคุณ หลังจากกินขนมแต่ละชิ้นรหัสของคุณจะถูกส่งออก (ในรูปแบบเดียวกับที่คุณป้อนข้อมูล) กองที่เหลือด้วยชิ้นส่วนที่ถูกแทนที่ด้วยช่องว่าง คุณจะทำซ้ำจนกว่าจะเหลือเพียงที่คุณชื่นชอบ คุณอาจเลือกทานแบบเบาบาง (อาจเป็นแบบสุ่มหรือแบบกำหนดเองได้) ต้องเว้นช่องว่างต่อท้าย

ตัวอย่างเช่นลำดับเอาต์พุตของคุณอาจมีลักษณะเช่นนี้ (ใช้ 5x5 สำหรับความกะทัดรัดและการแสดงช่องว่างเป็น.)

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

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

TL; DR กฎ:

  • การส่งอาจเป็นโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ
  • อินพุตอาจถูกนำมาใช้ในรูปแบบที่สมเหตุสมผล (สตริง, รายการ, เมทริกซ์, ฯลฯ ) โดยวิธีการที่สมเหตุสมผล (STDIN, อาร์กิวเมนต์ของฟังก์ชัน ฯลฯ ) อย่างไรก็ตามจะต้องมีการแบ่งระหว่างแถว
  • เอาต์พุตจะต้องผลิตในรูปแบบเดียวกับอินพุตโดยวิธีการที่เหมาะสม (STDOUT, return function, ect.) เอาต์พุตระดับกลางอาจหรือไม่ก็ได้
  • เอาต์พุตแรกจะเป็นอินพุตแรก
  • ช่องว่างต่อท้ายจะต้องเก็บรักษาไว้
  • อาจใช้คำสั่งสีใดก็ได้ (รายการในคำตอบของคุณ)
  • สีที่มีสีใด ๆ ในปัจจุบันอาจถูกกินได้
  • ผลลัพธ์สุดท้ายจะเป็นเพียงสีและช่องว่างที่คุณชื่นชอบ
  • ถ้าเป็นไปได้ให้ใส่ลิงค์ไปยังคอมไพเลอร์ออนไลน์เพื่อทดสอบการส่งของคุณ

4
@MukulKumar ถูกต้องคุณต้องการให้พวกเขาดีขึ้นตามที่คุณไป
wnnmaw

2
เราสามารถยอมรับ skittles เป็นสตริง 100 skittle เดียวไม่มีตัวแบ่งบรรทัดหรืออะไร?
Gabriel Benamy

1
เอาท์พุทระดับกลางจำเป็นต้องแยกจากกันด้วยอะไรหรือไม่?
Poke


8
ฉันพิจารณาเข้าสู่การท้าทายนี้แล้วอ่าน " โปรดระบุรายการที่คุณต้องการในการส่งของคุณเพื่อที่ฉันจะได้ตัดสินคุณได้ " ฉันคิดว่าผู้คนก็ตัดสินตามความชอบของฉันด้วยเช่นกัน!
Toby Speight

คำตอบ:


16

เยลลี่ , 16 14  13 ไบต์

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

TryItOnline!

ที่ชื่นชอบมากที่สุดถึงน้อยที่สุดสำหรับทุกคนที่จริงจังเกี่ยวกับโรคของพวกเขาเป็นตัวอักษร!

รับอินพุตและเอาต์พุตเป็นข้อความ (เช่นแถวถูกคั่นด้วยบรรทัดใหม่)

บันทึกได้ 3 ไบต์โดยสลับทิศทางและใช้วิธีการอื่น: ให้เกรดมากกว่าการค้นหาอักขระจากตัวอักษร

อย่างไร?

Ṅ⁶ỤṪ$¦µ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 ไบต์

รสชาติถูกจัดเรียงตามที่อธิบายไว้ในความท้าทาย: องุ่นแอปเปิ้ลเขียวมะนาวส้มสตรอเบอร์รี่

เอาต์พุตระดับกลางจะถูกคั่นด้วยบรรทัดใหม่

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

กรณีทดสอบ

กรณีทดสอบนี้ใช้ตัวอย่าง 5x5 ขนาดกริดอื่น ๆ ควรทำงานตามที่คาดไว้


8

ทุบตี, 48, 46 ไบต์

UPDATE:

  • บันทึกสองไบต์โดยใช้พารามิเตอร์ raw เพื่อ printf;

แข็งแรงเล่นกอล์ฟ

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

รับอินพุตที่ stdin พิมพ์ไปที่ stdout กินสีม่วงสีเขียวสีเหลืองและสีส้มแล้ว

เทียบเท่าsedโปรแกรมจะเป็น:

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

เอาต์พุตตัวอย่าง (ตัวคั่นใช้สำหรับความชัดเจนเท่านั้น)

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

ลองออนไลน์!


7

Python 2, 60 57 56 ไบต์

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

repl.it

ฟังก์ชั่นวนซ้ำที่กินตามลำดับตัวอักษรแบบย้อนกลับปล่อยให้ผักอยู่ได้นาน

อินพุตsเป็นสตริงที่มีตัวคั่นแถวที่มีลำดับน้อยกว่าของ'g'(ตัวอย่างเช่นบรรทัดใหม่หรือเครื่องหมายจุลภาค)

ฟังก์ชั่นพิมพ์อินพุตและจากนั้นเรียกซ้ำถ้าอินพุตนั้นมีอะไรมากกว่า 'g' ส่งผ่านอินพุตด้วยการปรากฏตัวครั้งแรกของอักขระสูงสุดแทนที่ด้วยช่องว่าง

(เกือบเป็นคำตอบของ Jelly ของฉัน )


6

Perl, 53 46 + 2 = 48 ไบต์

ทำงานด้วย -0n

-10 ไบต์ขอบคุณ @Dada

แก้ไข: ขอบคุณ @Dada สำหรับการชี้ให้เห็นฉันลืมพิมพ์อินพุตเป็นเอาต์พุตแรก ถูกแก้ไขแล้ว

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

มีกลอุบายเล็กน้อยที่เกี่ยวข้องกับคำตอบนี้ดังนั้นฉันจะแยกแยะว่าเกิดอะไรขึ้น

ก่อนอื่น Perl ไม่ชอบพารามิเตอร์หลายบรรทัดที่ถูกส่งผ่าน ตัวแปร$/คือตัวคั่นเรคคอร์ดอินพุตและเมื่อใดก็ตามที่อินพุตพบอักขระที่เก็บไว้ในนั้นล่ามจะยุติอินพุตนั้นและเริ่มต้นอินพุตใหม่ เนื้อหาเริ่มต้นคืออักขระขึ้นบรรทัดใหม่\nซึ่งหมายความว่าเป็นไปไม่ได้ที่จะส่งผ่านสตริงหลายบรรทัด ในการทำเช่นนั้นเราต้องยกเลิกการตั้งค่า$/จากเนื้อหา นั่นคือที่มาของการ-0ตั้งค่าสถานะ: การตั้งค่า-0จะเก็บไว้nullในตัวแปร$/ทำให้ล่ามสามารถอ่านทุกอย่างลงในตัวแปรโดยนัยได้$_ในครั้งเดียว

กลอุบายถัดไปคือevalคำแถลง เพียงแค่ว่าสิ่งที่เรากำลังevalไอเอ็นจี? เรากำลังevalนำผลลัพธ์ของsprintfคำแถลงซึ่งถูกแบ่งย่อยดังนี้:

สิ่งแรกที่sprintfส่งผ่านคือสตริง"say while s/%s/./;"ซ้ำ 4 ครั้งดังนั้น:

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

จากนั้นsprintfจะถูกส่งผ่านสี่ตัวอักษร bareword, p,o,g,rซึ่งจะสอดแทรกเข้าไปในคำสั่งแทนที่อินสแตนซ์ของแต่ละsprintf %sสิ่งที่เราได้รับคือสตริงต่อไปนี้ซึ่งถูกส่งผ่านไปยังevalฟังก์ชัน:

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

แต่ละwhileลูปจะประเมินการแสดงออกs/[color]/./ซึ่งจะแทนที่อินสแตนซ์แรกของสีใดก็ตามที่อยู่ในตัวแปรโดยนัย$_ด้วยจุด หากทำการทดแทนมันจะส่งกลับ1มิฉะนั้นจะส่งคืนอะไรเลย เนื่องจากs///มีผลข้างเคียงก็ปรับเปลี่ยนตัวแปรเดิมมีเนื้อหาซึ่งถูกพิมพ์แล้วผ่านทาง$_ sayมีการดำเนินการวนสี่รุ่นนี้แทนที่สีม่วงส้มเขียวและแดงแล้วเหลือเพียงสีเหลือง

เหตุผลที่สีเหลืองนั้นเป็นเพราะyไม่สามารถเป็น bareword ได้จริง ๆ แล้วมันเป็นหน้าที่และการมีyตัวอักษรตัวใดตัวหนึ่งแทนที่จะเป็นข้อผิดพลาด ฉันสามารถเปลี่ยนสิ่งนี้ได้โดยใส่เครื่องหมายคำพูดไว้รอบ ๆ (+2 ไบต์) หรือใช้ตัวพิมพ์ใหญ่ Y และสร้าง regex case-insensitive (+1 byte) แต่สำหรับทุก ๆ ไบต์ฉันจึงตัดสินใจว่าฉันชอบมะนาว skittles มากที่สุด

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


-0การตั้งค่าสถานะควรช่วยคุณประมาณ 10 ไบต์
Dada

นอกจากนี้ฉันเกรงว่าคุณพลาดกฎFirst output shall be the first input
Dada

1
ดีสำหรับคุณที่จะเสียสละความชอบส่วนตัวของคุณเพื่อประหยัดสองไบต์
wnnmaw

4

Perl, 30 31 33 + 2 = 32 33 35 ไบต์

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

วิ่งด้วย-n0(โทษ 2 ไบต์)

เห็นได้ชัดว่าฉันชอบกิน Skittles ตามลำดับตัวอักษรเพราะโปรแกรมจะสั้นลง โปรแกรมไม่ต้องการคำอธิบายมากนัก: -n0อ่านอินพุตโดยปริยาย ( -nหมายถึง "อ่านอินพุตโดยปริยาย", -0หมายถึง "ไม่ต้องหยุดอินพุตบนบรรทัดใหม่"); for$x(g..r)วิ่งห่วงกับ$xชุดจากตัวอักษรแต่ละตัวจากgไปrในทางกลับกัน; say;พิมพ์อินพุตปัจจุบันหลังจากการกลายพันธุ์ใด ๆ s/$x/ /แทนที่หนึ่งสำเนา$x(โดยเฉพาะอันแรก) ด้วยช่องว่างหากเป็นไปได้ และ&&redoทำซ้ำรหัสภายในวงเล็บปีกกา (โดยไม่ต้องเลื่อนตัวนับลูป) หากการแทนที่สำเร็จ

โปรแกรมนี้สามารถทำให้เป็นมาตรฐานของ Skittle ได้ง่ายขึ้นโดยไม่ต้องเปลี่ยนความยาวและสามารถทำงานกับกองขนาดใดก็ได้

นี่คือลิงค์ Ideone ที่คุณสามารถทดสอบได้ (Ideone ไม่อนุญาตให้คุณระบุตัวเลือกบรรทัดคำสั่งดังนั้นฉันต้องเพิ่มสองบรรทัดเมื่อเริ่มตั้งค่า-n0และ-M5.010คุณจะได้รับฟรี)


1
ฉันไม่แน่ใจว่าคุณได้รับอนุญาตให้พิมพ์กองซ้อนเดียวกันหลาย ๆ ครั้งหลายครั้ง .. (อันที่จริงฉันคิดว่าคุณทำไม่ได้) อาจจะเปลี่ยนเป็นsay;for$x(g..r){say while s/$x/ /}?
Dada

อ่าใช่มั้ย ฉันเคยมีfor$x(p,o,g,r)ซึ่งจะไม่ say whileยาวเพียงหนึ่งไบต์และบางสิ่งที่ฉันคิดว่าเป็นทางเลือกดังนั้นฉันสามารถเปลี่ยนมันได้

และคุณต้องเริ่มต้นด้วยsay;เพราะกฎบอกว่าFirst output shall be the first input
Dada

โอ้ในกรณีนี้ฉันจะกลับไปเป็นfor$x(g,o,p,r)เวอร์ชั่นที่คัดลอกอินพุตก่อน (ใช้เวลาค้นหาเพิ่มเติมเล็กน้อยหากมีสีขาดหายไป แต่คุณไม่คาดหวังว่าจะมีสีขาดหายไปในชุดของ skittles) สำหรับเรกคอร์ดเวอร์ชันที่มีsay;อันดับแรกจะมีขนาด 37 ไบต์

ความคิดเห็นดั้งเดิมของ Dada ยังคงมีอยู่แม้ว่า - รหัสที่ย่อมาจากนั้นจะพิมพ์การกำหนดค่าเดียวกันสองครั้งในแถว (บางครั้งที่จุดสิ้นสุดของกรีนและอีกครั้งที่จุดเริ่มต้นของส้มเช่น)
DLosc

4

C #, 134 148 ไบต์

ใบสั่ง: 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;};

ใช้บางสิ่งที่คล้ายกันจากคำตอบของ @ Poke ซึ่งในขณะนี้ค่อนข้างนานเนื่องจากฉันต้องแปลงอาร์เรย์อักขระเป็นสตริง; (


ฮา! เอาชนะคุณด้วย 3 ตัวอักษร !!!
Mukul Kumar

4

Java 7, 139 135 130 151 138 135 ไบต์

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

กิน skittles ในการสั่งซื้อ: สีเหลือง, สีส้ม, สีเขียว, สีม่วง, สีแดง

ฉันเดาว่านี่ดีกว่าคำสั่งการพิมพ์ 2 คำ>.>


1
แน่นอนว่าฟังก์ชั่นของคุณชื่อ skit: P -3 อยู่ตรงนั้น!
Yodle

1
@Yodle อุ๊ปส์! ฮ่าฮ่าฮ่า
Poke

1
หากเราได้รับกริด 10 x 10 เสมอฉันสามารถฮาร์โค้ดความยาวแทนที่จะใช้s.length
Poke

1
เราไม่จำเป็นต้องพิมพ์ออกมาหนึ่งครั้งก่อนเริ่มรับประทาน: s
Yodle

1
@Yodle นั่นเป็นเหตุผลที่ฉันกิน "!" Skittles แรก;) ... รอฉันคิดว่าฉันยากจนว่าเคล็ดลับ
Poke

4

C 145 - 5 - 18 - 1 = 121 ไบต์

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

ไม่สวย + สวย

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

ที่นี่a[][11]หมายถึงการรับ n-string ความยาว 11 โดยที่ 1 char จำเป็นสำหรับการยกเลิกดังนั้นในทางเทคนิคจะมีเพียง 10 ตัวอักษรที่มองเห็นได้

คำสั่ง: เรียงตามตัวอักษร
ฟังก์ชั่นนี้จะตรวจสอบ'g'ในอินพุตที่กำหนดและกำจัดมันออก 1/1 จากนั้นจะเพิ่มการถือตัวแปร'g'จนกว่าจะพบการแข่งขันครั้งต่อไป (อาจเป็นตัวอักษร'o') แล้วกำจัดอักขระที่ตรงกัน
ข้อเสียคือฟังก์ชั่นนี้ระวังเกินไปดังนั้นหาก skittels ของคุณมี26สีต่างกันที่ชื่อรหัสจากตัวอักษร az ฟังก์ชั่นนี้จะจัดการอินพุตนั้นด้วย ...


ตอนนี้มากกว่า 3: P
Yodle

yeah..thanks @Yodle #defineแมโครคุณสามารถกำหนดด้วย นั่นลดลง 19 ไบต์
Mukul Kumar


3

ES6 (Javascript) 72, 71 ไบต์

การแก้ไข:

  • ลบ 1 ไบต์โดยใช้เทมเพลตตัวอักษรกับของ

รุ่นที่ไม่ใช่แบบเรียกซ้ำใน Javascript

แข็งแรงเล่นกอล์ฟ

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

อินพุตและเอาต์พุตคือสตริงหลายบรรทัดกินยาตามลำดับ "purple => orange => green => yellow"

ทดสอบ

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 ไบต์

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

โปรแกรมกิน Skittles ในลำดับนี้ Orange Red Green Yellow Purple-

แก้ไข - ขอบคุณFlp.Tkcที่ช่วยลด 24 ไบต์!

อินพุต - 
ygro goppr rppog rppog สนุกสนานกันอย่างเป็นบ้าเป็นหลัง

ผลผลิต - 
ygro goppr rppog rppog สนุกสนานกันอย่างเป็นบ้าเป็นหลัง
ygr goppr rppog rppog สนุกสนานกันอย่างเป็นบ้าเป็นหลัง
ygr g ppr rppog rppog สนุกสนานกันอย่างเป็นบ้าเป็นหลัง
ygr g ppr rpp g rppog สนุกสนานกันอย่างเป็นบ้าเป็นหลัง
ygr g ppr rpp g rpp g สนุกสนานกันอย่างเป็นบ้าเป็นหลัง
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  

ฉันเชื่อว่ามันสามารถเล่นกอล์ฟต่อไปได้เพราะมันดูเรียบง่ายมาก


2
ดูเหมือนว่านี่คือการกินทุกสีในเวลาเดียวกันในขณะที่มันควรจะกินครั้งเดียวเท่านั้น
wnnmaw

1
นอกจากนี้คุณกำลังรับอินพุตเป็นรายการซ้อน แต่สร้างสตริงโปรดแก้ไขโค้ดของคุณเพื่อให้ทั้งอินพุตและเอาต์พุตเป็นรูปแบบเดียวกัน
wnnmaw

@wnnmaw ทำการเปลี่ยนแปลง ฉันหวังว่าตอนนี้จะ
เรียบร้อย

1
ฉันรู้ว่ามีอยู่แล้วเป็นทางออกที่สั้น แต่อยู่กับขั้นตอนวิธีนี้คุณสามารถกอล์ฟมันมากขึ้นเพื่อสิ่งที่ต้องการนี้
FlipTack

3
ฉันชอบวิธีที่คุณเลือกลำดับที่นำไปสู่orgyโดยเฉพาะ
Nic Hartley

2

Vim 57 55 ไบต์

บันทึกสองไบต์ด้วยการลบตัวคั่นบรรทัดของฉัน น่าเสียดายที่มันทำให้อ่านและตรวจสอบความถูกต้องได้ยากขึ้นมาก :(

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

Unprintables:

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

TryItOnline

กินตามลำดับ oypg ปล่อยให้ r ทั้งหมดจบแล้ว :)


1

Mathematica, 67 ไบต์

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

กินสีแดงแล้วสีเหลืองจากนั้นส้มและสีม่วง


เด็กผู้ชายฉันดีใจที่ไม่มีสิ่งนี้มาให้ในตัว
wnnmaw

1

Java 7, 125 ไบต์

สีม่วง, สีเหลือง, สีเขียว, สีแดง, สีส้ม ฉันสนุกที่ฉันได้เลือกคำสั่งของฉันในโซลูชันนี้ : D

แข็งแรงเล่นกอล์ฟ

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

Ungolfed

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

ลองที่นี่!

แนวทางที่แตกต่างกับคำตอบ Java อื่น ๆ โดย @Poke เราเริ่มต้นด้วยการทำสำเนาของสตริงต้นฉบับ การวนซ้ำแต่ละสีเราจะแทนที่ทุกครั้งที่พบว่ามีช่องว่างจากนั้นจึงเพิ่มเค้าโครงใหม่ให้กับสตริงเอาต์พุตกลับมาหลังจากที่เรากินทุกอย่างยกเว้นสีส้ม

หมายเหตุ

การแยกระหว่างขั้นตอนทำได้ด้วยการขึ้นบรรทัดใหม่สองครั้ง\n\nแต่ถ้าตารางอินพุทสามารถนำมาขึ้นบรรทัดใหม่ที่ท้ายได้ก็สามารถตัดให้สั้นลง\nได้


1

Haskell, 60 ไบต์

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

,การป้อนข้อมูลเป็นสายเดียวที่แถวที่จะถูกแยกออกด้วย Return value เป็นรายการของสตริงที่มีขั้นตอนกลางทั้งหมด คำสั่งซื้อคือตัวอักษรใหญ่ที่สุดเป็นลำดับแรก ตัวอย่างการใช้งาน:

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

เรียกซ้ำง่าย ๆ บันทึกรายการอินพุตสำหรับค่าส่งคืนแทนที่องค์ประกอบที่ใหญ่ที่สุดgด้วยช่องว่างและเรียกใช้ฟังก์ชันอีกครั้ง กรณีฐานคือเมื่อไม่มีองค์ประกอบที่จะลบ


1

MATL, 24 ไบต์

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

ลองออนไลน์! ฉันชอบกิน skittles ตามลำดับตัวอักษรแบบย้อนกลับ: สีเขียวเป็นสีที่ฉันชอบ คำอธิบาย:

                           % 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 ไบต์

การละเมิดกฎความคิดสร้างสรรค์!

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

สิ่งที่ส่งมานี้ถือว่าหลายสิ่งไม่เป็นไร:

  • อินพุตและเอาต์พุตเป็นตัวพิมพ์ใหญ่ ( GORPY)
  • การป้อนข้อมูลถูกใช้เป็นปุ่มกดที่ต่อเนื่องกัน 109 ครั้งซึ่งจะไม่ถูกสะท้อนไปยังหน้าจอจนกว่าจะมีการป้อนครั้งสุดท้าย ในตอนท้ายของแต่ละแถวยกเว้นแถวสุดท้ายผู้ใช้จะต้องป้อนการขึ้นบรรทัดใหม่
  • แทนที่จะพิมพ์กอง Skittles หลายครั้งโปรแกรมจะแสดงบนหน้าจอด้วยการหยุด 1 วินาทีก่อนแต่ละขั้นตอน (QBasic ไม่มี scrollback เอาท์พุทดังนั้นการพิมพ์หลาย ๆ ครั้งกองจะให้ขั้นตอน 2 1/2 ครั้งสุดท้ายเท่านั้นนอกจากนี้วิธีนี้เป็นการพรรณนาที่ดีขึ้นมากว่ากอง Skittles ของคุณวิวัฒนาการอย่างไรเมื่อคุณกินมัน)
  • โปรแกรมลงท้ายด้วยข้อผิดพลาด

ฉันยังมีรุ่น 130 ไบต์ที่ใช้ตัวพิมพ์เล็กและไม่ผิดพลาด

นี่คือตัวอย่างการรันในQB64โดย109เปลี่ยน29เป็นกริด 5x5:

การกิน Skittles

คำอธิบาย

DATA 71,89,82,79ร้านค้ารหัส ASCII ของG, Y, และRO

?INPUT$(109) รับ 109 ปุ่มกดจากผู้ใช้และพิมพ์

จากนั้นเราจะป้อนอนันต์DO ... LOOPสร้าง แต่ละคนผ่านช่วงเวลาที่เราREADรหัส ASCII sของเรื่องเหลวไหลในปัจจุบัน จากนั้นเราก็ห่วงแถวและคอลัมน์ตั้งแต่วันที่ 1 ถึง 10 SCREEN(r,c)ได้รับรหัส ASCII ของตัวอักษรบนหน้าจอที่แถวคอลัมน์r cถ้านี่เท่ากับ Skittle ปัจจุบันsเราเป็นSLEEPเวลาหนึ่งวินาทีแล้วพิมพ์พื้นที่ที่r, c.

ห่วงหลักทำงานสี่ครั้งโดยถอดกรีนสีเหลืองสีแดงและสีส้ม Skittles ในการทำซ้ำครั้งที่ห้าREADเกิดข้อผิดพลาดเพราะเราไม่มีข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.