ฉันรักปลาซาร์ดีน


33

ฉันรักปลาซาร์ดีนฉันไม่สามารถได้รับเพียงพอจากพวกเขาและคอมพิวเตอร์ของฉันคือ Omnilang 5000 ซึ่งเป็นผู้ไม่เชื่อเรื่องภาษา

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

ในการท้าทายนี้คุณจะต้องรับผิดชอบในการสร้างโปรแกรมตามพารามิเตอร์เหล่านี้:

การป้อนข้อมูล

ตัวเลข (ระหว่าง 0 ถึง 10) และตัวอักษรจาก "LR" ตัวใดตัวหนึ่งต่อไปนี้ (แทนซ้ายหรือขวาตามลำดับ) ตัวอย่างเช่น: 3Lหรือ5R; สิ่งที่อินพุตนี้เข้าสู่โปรแกรมขึ้นอยู่กับคุณ

เอาท์พุต

ดีบุกเปิดปลาซาร์ดีนปลาซาร์ดีนกับหันหน้าไปทางทิศทางที่ระบุด้วยที่สำคัญ (แสดงโดย " %" ตัวอักษร) และฝาปอกเปลือก (รีดขึ้นดีบุกในตอนท้ายที่แสดงโดย " @" ตัวอักษร) ตั้งอยู่ที่ด้านบนของดีบุก

  • ปลาซาร์ดีนทั้งหมดจะต้องเผชิญกับทิศทางที่ระบุโดยอินพุต
  • ปลาซาร์ดีนทั้งหมดจะมีเนื้อความยาวห้าตัวระหว่างเหงือก (" )" หรือ " (") และส่วนท้าย " ><"
  • ม้วนกุญแจและฝาที่ปอกเปลือกจะหันหน้าไปทางทิศทางตรงข้ามกับปลาซาร์ดีนเสมอ
  • ดีบุกต้องมีลักษณะสามมิติดังที่แสดงด้านล่างในตัวอย่าง
  • ความสูงต่ำสุดของดีบุกคือ 3 ซาร์ดีน ดังนั้นถ้าตัวเลขมีค่าน้อยกว่า 3 จะต้องแสดงดีบุกปลาซาร์ดีนความสูง 3 ตัวโดยแสดงจำนวนปลาซาร์ดีนที่ป้อนเข้าไป มิฉะนั้นดีบุกจะต้องเป็นจำนวนปลาซาร์ดีนที่สูงที่ระบุในอินพุต ดังนั้นอินพุต0Rหรือ0Lจะแสดงดีบุกซาร์ดีนที่ว่างเปล่า
  • อินพุตอื่น ๆ ที่ไม่สามารถตรวจสอบได้จะไม่แสดงผลใด ๆ

ตัวอย่างเช่นสำหรับ " 3L"

 __________
(__________@%
|<*)_____><||
|<*)_____><||
|<*)_____><||
'==========''

สำหรับ " 7R"

   __________
 %@__________)
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ||><_____(*>|
 ''=========='  

สำหรับ " 2L"

 __________
(__________@%
|<*)_____><||
|<*)_____><||
|          ||
'==========''

สำหรับ " 0R"

   __________
 %@__________)
 ||          |
 ||          |
 ||          |
 ''=========='

" 0L"

 __________
(__________@%
|          ||
|          ||
|          ||
'==========''

อินพุตที่ไม่ถูกต้องจะไม่ส่งคืนสิ่งใด ...

  • นี่คือรหัสกอล์ฟดังนั้นจำนวนตัวละครที่น้อยที่สุดจะชนะการท้าทายนี้
  • ไม่มีช่องโหว่ตามปกติ

คำตอบ:


39

> <> , 250 235 + 3 = 238 ไบต์

</~?{"  __________"a:="L"i&
o/?=1l
:/}rv?{~$?{"()__________@%":
l< o/?=1
:&oa/&~$?(3$@0-3:
/!?:</"||><_____(*>|"av?@:$-1
 /=?/v"|<*)_____><||"a/
 \2lo/
\~&
\>:?!\1+$::{a"|"{?:"          ||"{?~
<\?=2 lo
"'":~/~?{"''==========":?{
;!?lo<

ลองออนไลน์หรือดูที่สนามเด็กเล่นปลา ! อ่าน "L" หรือ "R" จาก STDIN และถือว่าจำนวนปลาซาร์ดีนอยู่ในสแต็กแล้ว (ต้องการ-vแฟล็กสำหรับ +3 ไบต์)

เพราะแน่นอนฉันต้องเขียนมันใน> <>


3
การเขียนการแก้ปัญหานี้ในปลาเป็นแรงบันดาลใจ ...
WallyWest

สนามเด็กเล่นปลาทำงานอย่างไร ฉันวิ่งไปไม่ได้ ฉันจะใส่ข้อมูลที่ใด
JAD

@JarkoDubbeldam หลังจากคัดลอกรหัสไปที่หน้าต่างแล้วส่งมันคุณต้องใส่จำนวนปลาซาร์ดีนที่มันบอกว่า "initial stack" (จำลอง-vธง) และทิศทาง ("L" หรือ "R") ภายใต้ "ให้ ป้อนข้อมูลให้กับโปรแกรม "จากนั้นคลิก" ให้ " (ฉันได้แก้ไขคำตอบเพื่อให้ชัดเจนยิ่งขึ้น)
ไม่ใช่ต้นไม้

1
ดีเลิศ: D ต้องเป็นคนดีในระหว่างการดีบักเช่นกัน
JAD

15

อิโมจิโคด , 456 448 ไบต์

🐋🚂🍇🐖🐟d🚂🍇🍦a😛0d🍊a🍇😀🔤 __________❌n(__________@%🔤🍉🍓🍇😀🔤  __________❌n%@__________)🔤🍉🔂i⏩0🐕🍇🍊a🍇😀🔤|<*)_____><||🔤🍉🍓🍇😀🔤||><_____(*>|🔤🍉🍉🍊▶️4🐕🍇🔂i⏩0➖3🐕🍇🍊a🍇😀🔤|          ||🔤🍉🍓🍇😀🔤||          |🔤🍉🍉🍉🍊a🍇😀🔤'==========''🔤🍉🍓🍇😀🔤''=========='🔤🍉🍉🍉

รับอาร์กิวเมนต์ 2 ตัว: ตัวแรกคือเส้นส่วนที่สองคือทิศทาง (0 หรือ 1)

ลองออนไลน์!

รุ่น "ungolfed" ที่อ่านได้และรุ่น pseudocode:

🐋 🚂 🍇
  🐖 🐟  d 🚂  🍇
    🍦 a  😛 0 d

    🍊 a 🍇
      😀 🔤 __________❌n(__________@%🔤
    🍉
    🍓 🍇
      😀 🔤  __________❌n%@__________)🔤
    🍉

    🔂 i ⏩ 0 🐕 🍇
      🍊 a 🍇
        😀 🔤|<*)_____><||🔤
      🍉
      🍓 🍇
        😀 🔤||><_____(*>|🔤
      🍉
    🍉

    🍊 ▶️ 4 🐕 🍇
      🔂 i ⏩ 0  ➖ 3 🐕  🍇
        🍊 a 🍇
          😀 🔤|          ||🔤
        🍉
        🍓 🍇
          😀 🔤||          |🔤
        🍉
      🍉
    🍉

    🍊 a 🍇
      😀 🔤'==========''🔤
    🍉
    🍓 🍇
      😀 🔤''=========='🔤
    🍉
  🍉
🍉

👵
extendclass int { // this makes the first argument be an int without declaring it
  func 🐟(int d) {
    const a = 0 == d // a bool

    if a {
      print " __________\n(__________@%"
    }
    else {
      print "  __________\n%@__________)"
    }

    for i in range(1, arg) {
      if a {
        print "|<*)_____><||"
      }
      else {
        print "||><_____(*>|"
      }
    }

    if 4 > arg {
      for i in range(0, arg - 3) {
        if a {
          print "|          ||"
        }
        else {
          print "||          |"
        {
      }
    }

    if a {
      print "'==========''"
    }
    else {
      print "''=========='"
    {
  }
}
👵

2
ไม่เคยเจอ Emojicode มาก่อน แต่นั่นคือความคิด f ** k และครึ่ง ... บ้า! รักมัน!
WallyWest

... ทำไมภาษานี้ถึงมีอยู่จริง? ฉันหมายถึงฉันชอบ แต่ทำไม และใช้เวลาเรียนรู้นานเท่าไหร่?
Taylor Scott

1
@TaylorScott 1) ​​ไม่เป็นไรฉันไม่ได้สร้างมันขึ้นมา 2) ไม่กี่ชั่วโมงจริงๆ
เดิมพัน

6

Python 2 , 155 ไบต์

lambda x,y,t='_'*10:'\n'.join(x[::1-2*y]for x in[' %s  '%t,'()'[y]+t+'@%']+['|'+('<>**)(%s><<>'%t)[y::2]+'||']*x+['|'+' '*10+'||']*(3-x)+["'"+'='*10+"''"])

ลองออนไลน์!

การป้อนข้อมูลประกอบด้วยความยาว 2 tuple องค์ประกอบแรกระบุจำนวนปลาซาร์ดีน องค์ประกอบที่สองระบุทิศทาง; 0สำหรับซ้าย1สำหรับขวา

-84 ไบต์ใช้เวทมนตร์แลมบ์ดาต้องขอบคุณ notjagan และ Officialaimm


1
174 ไบต์ (sorta ได้ ninja'd โดย @officialaimm ที่นั่น)
notjagan

1
รับไปอีก161 ไบต์!
notjagan


1
@officialaimm intrestingly พอถ้ามาพร้อมกับความคุ้มค่าเชิงลบจะขยายขนาดของดีบุก แต่ไม่ได้ใส่ปลาซาร์ดีนใน.
พาเวล

3
@Phoenix ใช่ มันไม่สำคัญว่า แต่เนื่องจาก OP 0 to 10ได้กำหนดช่วง PS` -10 'จะพิมพ์ดีบุกเปล่าเพราะมันบ่งบอกว่ามี10ปลาซาร์ดีน แต่คุณกินมันไปแล้ว : D
เป็นทางการเมื่อ

5

ตกปลา 1311 ไบต์

v+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC?CCCDCC[CCCCCCCCCCCCCCCCCCCCC?CCCCCCCCCCCCCCCCCCCC[CCC[CCCCC?CCCC?DDDDD[CCCCCCCCCCCCCCCCCCC?CCCCCCCCCCCCCCCCC[?CCCCCCCCCCCCCCCC_
  `3`n{n{In{I{`L`{`  __________ `}}!{{rD}}D{{NE`%@__________)`}}!{{E`(__________@%`}}D{{NDE}}}}={d}}!  d  D{{{{{`><_____(*>`}}!{{E`<*)_____><`}}D!{{{E`|`P}PE`||`ND
                                   [DDDDDD|                     [DDDDDDDDDDDDDDDDDDDD|   D     [C?CDDDDDDDDCCCCCCCCCCCCCCCCCCC[DDDDDDDDDDDDDDDDD|[CCCCCCCCCCCCCCCC_
                                                                                         D      }=d [^+Cv-|{{{{{`          `}}                    {{{E`||`P}PE`|`ND
                                                                                         D       [CCCCCCCCCCCCCCCCCCC?DDDDDDDDD+CCCC                              D
                                                                                         D        E`''=========='`{{{= }}}r{{{ [CCCC                              D
                                                                                         D                           [^CCCCCCCv|}}}N                              D
                                                                                         |DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD]

รับอินพุตจากstdinในรูปแบบ:

5
R

การตกปลาไม่ได้อยู่ในTry It Onlineแต่มีล่ามไว้ใน Ruby ในหน้า esolangs ที่เชื่อมโยง

นี่เป็นโปรแกรมแรกที่ฉันทำในการตกปลา - อันที่จริงมันเป็นโปรแกรมแรกที่ฉันทำในภาษา 2D ใด ๆ - ดังนั้นมันอาจจะสั้นกว่านี้เยอะ ยินดีต้อนรับเคล็ดลับการเล่นกอล์ฟ (แม้ว่าฉันจะไม่แปลกใจถ้าไม่มีใครให้พิจารณาว่าแม้ฉันไม่ทราบว่าห่าฉันเพิ่งเขียน)

นี่คือเส้นทาง GIF ที่โปรแกรมใช้ในการป้อนข้อมูล1R(ขออภัยสำหรับคุณภาพต่ำ):

GIF

(สิ่งนี้ถูกสร้างขึ้นโดยใช้ล่ามที่ฉันทำไม่มีโปรแกรมสาธารณะที่ "เห็นภาพ" การตกปลาเท่าที่ฉันรู้)


ไวยากรณ์ C และ D ดูเหมือนว่ามีส่วนทำให้ Bloat ... มีชวเลขใดบ้างที่สามารถลดได้?
WallyWest

รอยขีดข่วนที่จริงดูเหมือนว่าพวกเขาเป็นส่วนหนึ่งของรหัส ... ทางเลือกที่น่าสนใจของภาษา! :)
WallyWest

4

ถ่าน , 49 ไบต์

A⌈⟦Iθ³⟧ζBχ²_←↓(↓ζ'×=χ''↖P↑ζ←↑ζ@%FN“#∨‹VB“«ji”FN‖T

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด อาร์กิวเมนต์แรกคือจำนวนปลาซาร์ดีน, ที่สองคือทิศทาง (0 = ซ้าย, 1 = ขวา)


เยี่ยมมากนีล ขอบคุณที่ส่งลิงค์คอมไพเลอร์!
WallyWest

2
ไม่ต้องขอบคุณฉันขอบคุณ @Dennis ที่สร้าง TIO ซึ่งสร้างแผ่นความร้อนทั้งหมดสำหรับคุณ
Neil

3

SOGL V0.12 , 51 48 ไบต์

!gX⁴‘gj⁰%!⁵‘b⌡"κN╥█*≤⌡║)‘3b-"÷AZ⁴‘∙_"Χccσ«‘⁰e?±↔

ลองที่นี่!
คาดว่าการป้อนข้อมูลเป็นคนที่ 1 คือการนับและคนที่ 2 - ซ้ายหรือขวาแทนด้วย 1 หรือ 0

คำอธิบาย:

..‘..‘                          push 2 compressed strings - the 1st two lines of the box - "  __________ " and "%@__________)"
      b⌡                        input times do
        "..‘                      push a line with a sardine - "||><_____(*>|"
            3b-                 push 3-input
               "..‘∙            get an array of that many "||          |"
                    _           put all the arrays contents on the stack
                     "..‘       push "''=========='" - the last line
                         ⁰      wrap all of that in an array
                          e?    if the 2nd input [is not 0]
                            ±↔    reverse the array horizontally

2

R, 334 ไบต์ 311 ไบต์

s=function(n,d){
a="__________"
b="'=========='"
if(d == "L"){cat(paste(c(" ",a,"\n(",a,"@%\n",rep("|<*)_____><||\n",n),rep("|          ||\n",max(c(3-n,0))),b,"'\n"),collapse=""))} else {cat(paste(c("  ",a,"\n%@",a,")\n",rep("||><_____(*>|\n",n),rep("||          |\n",max(c(3-n,0))),"'",b,"\n"),collapse=""))}}

ฟังก์ชั่นรับค่าตัวเลขสำหรับ n และสตริงสำหรับทิศทาง

นี่เป็นครั้งแรกที่ฉันโพสต์ดังนั้นฉันจะยอมรับว่าฉันไม่แน่ใจว่าจะนับจำนวนไบต์ของรหัสได้อย่างไร


1
คุณสามารถวางรหัสของคุณในTIOซึ่งผู้คนสามารถทดสอบรหัสของคุณได้ :) มันยังแสดงจำนวนไบต์ของคุณซึ่งก็คือ 310 ในกรณีนี้
เอียนเอช.

2

C ++, 307 296 292 ไบต์

#include<string>
auto z(int n,char c){std::string r=c-82?" __________\n(__________@%\n":"  __________\n%@__________)\n";int l=0;for(;l<n;++l)r+=c-82?"|<*)_____><||\n":"||><_____(*>|\n";for(;l<3;++l)r+=c-82?"|          ||\n":"||          |\n";r+=c-82?"'==========''":"''=========='";return r;}

การใช้งาน:

z(<number of sardines>,<'L' or 'R'>);

-11 ไบต์บันทึกขอบคุณผู้ใช้ ThePirateBay -4 ไบต์ขอบคุณZacharý


1
คุณสามารถลบวงเล็บใน#defineคำสั่งได้หรือไม่? ฉันไม่ได้ทดสอบ แต่ดูเหมือนว่าไม่จำเป็นสำหรับพวกเขา

1
สามารถc!=82ใช้ได้c-82ทุกกรณีที่คุณใช้หรือไม่
Zacharý

1

Python 2 , 287 ไบต์

n,d=input()
t,a,b,c,e,k=' __________   ','(__________@% ','|<*)_____><|| ','|          || ',"'=========='' ",'\n'
print[t+k+a+k+k.join([b]*n)+k+k.join([c]*(3-n))+k*(n<3)+e,t[::-1]+k+a[::-1].replace(*'()')+k+k.join([b[::-1].replace(*')(')]*n)+k+k.join([c[::-1]]*(3-n))+k*(n<3)+e[::-1]][d]

ลองออนไลน์!

การป้อนข้อมูลเป็นคั่นด้วยเครื่องหมายจุลภาค tuple 2, 1ของตัวเลขของรูปแบบนี้: ตัวเลขแรกคือปริมาณของปลาและที่สองคือ 0 สำหรับซ้ายและ 1 สำหรับขวา

สิ่งนี้เริ่มต้นจากความพยายามที่จะเล่นกอล์ฟคำตอบอื่น ๆ (ฉันคิดว่าฉันทำได้) แต่มันแย่มาก : P ถ้าใครสามารถทำหัวและก้อยของมันและช่วยกอล์ฟได้ (ฉันโทษว่ามันเป็นเวลา 12:00 น. ตอนนี้) ฉันจะดีใจ


ความพยายามที่ยอดเยี่ยมอย่างไรก็ตาม!
WallyWest

1

C # (. NET Core) 289 ไบต์

(h,d)=>{var l=d=='L';string r=(l?" ":"  ")+"__________\n"+(l?"(":"%@")+"__________"+(l?"@%":")")+"\n";for(int i=0;i<(h>3?h:3);i++){r+=(l?"|":"||")+(i<h?(d=='L'?"<*)_____><":(d=='R'?"><_____(*>":"")):"          ")+(l?"||":"|")+'\n';}var b=(l?"'":"''")+"=========="+(l?"''":"'");return r+b;}

ลองออนไลน์!

รับจำนวนเต็มและอักขระ char (L, R) เป็นพารามิเตอร์และส่งออกสตริงผลลัพธ์

ฮึ. ต้องจัดการกับค่าคงที่สตริงที่น่ารำคาญคุณต้องทำstring * lengthใน C # และวิธีการที่new string(char, length)จะไม่คุ้มค่ากับค่าไบต์


อัลกอริทึมทำงานดังต่อไปนี้:

  1. ในตอนเริ่มต้นเราพิจารณาว่าปลาซาร์ดีนหันหน้าไปทางซ้ายหรือขวาเนื่องจากเราจะจัดรูปแบบสตริงของเราตามนั้น เราสร้างสตริงสำหรับด้านบนโดยมีตัวดำเนินการตามเงื่อนไขบางตัวเพื่อสลับระหว่างมุมมอง L และ R
  2. จากนั้นเราสร้างลูปที่รันอย่างน้อย 3 ครั้งและเวลาอินพุทด้านซ้ายสูงสุด ด้วยวิธีนี้เราสามารถสร้างช่องว่างถ้าเรามีปลาซาร์ดีนน้อยกว่า 3 ตัวในกล่องของเรา
  3. ภายในวงนี้เราจัดรูปแบบสตริงขึ้นอยู่กับมุมมองและถ้า h > iเราใส่ปลาซาร์ดีนเข้าไป หากi >= hจะมีพื้นที่ว่างซึ่งปกติปลาซาร์ดีนจะเป็น
  4. ในตอนท้ายเราสร้างด้านล่างของกล่องจัดรูปแบบอีกครั้งตามมุมมอง


1

JavaScript (ES6), 283 273 269 251 ไบต์

บันทึก 10 ไบต์ด้วย @WallyWest

บันทึก 4 ไบต์ลบ parens พิเศษ

บันทึกแล้ว 18 ไบต์ขอบคุณ @ThePirateBay

ได้รับความเดือดร้อนจากการขาดการย้อนกลับสตริงในไลบรารีมาตรฐาน นิยามฟังก์ชันที่รับอินพุตnเป็นจำนวนของปลาและdทิศทาง โยนถ้าdไม่ใช่ "L" หรือ "R"

(n,d,_=c=>c.repeat(10),x=_(`_`),z=a=>a.reverse``.join``)=>
([p,q,g,r,s]=d>`L`?d>`R`?[]:[`)`,`(`,`>`,z,y=>z(y.split``)]:
[`(`,`)`,`<`,a=>a.join``,y=>y],` ${x}
`+r([p,x,s(`@%`)])+`
`+(r([`|`,g,`*`,q,`_____`,`><`,`||`])+`
`).repeat(n)+r([`'`,_(`=`),`''`]))

ลองออนไลน์


ยินดีต้อนรับสู่ PPCG! เราหวังว่าคุณจะชอบที่นี่ ... มาดูกันว่าเราสามารถทำอะไรให้คะแนนกอล์ฟของคุณลงได้ ... ความพยายามครั้งยิ่งใหญ่!
WallyWest

@WallyWest ขอบคุณ! ลบออกอีก 17 ไบต์ด้วยการดึงฟังก์ชั่นออกมาและเปลี่ยนค่าif...else ifเป็นเทอร์นารีที่ซ้อนกันด้วยการมอบหมายการทำลายล้าง ฉันคิดไม่ออก ...
Jared Smith

1
@WallyWest ฉันใช้_ฟังก์ชั่นสองครั้งหนึ่งครั้งสำหรับ 10 ขีดล่าง (ซึ่งถูกใช้งานสองครั้ง) สำหรับสัญญาณที่เท่ากัน 10 ครั้งดังนั้นการใช้ฟังก์ชั่นนี้จะช่วยประหยัดไบต์ได้ และถ้าฉันใช้แม่แบบสตริงที่ไม่ถูกต้องโดยใช้พวกเขาแทนการเรียงต่อกันเป็น3 ไบต์
Jared Smith

1
@WallyWest ขอบคุณสำหรับเคล็ดลับนั้นและลบ parens ที่ไม่จำเป็นบางส่วนที่บันทึกไว้ 14 ไบต์
Jared Smith

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