Saya suka ikan sarden

33

Saya suka ikan sarden, saya tidak bisa mendapatkan cukup dari mereka, dan begitu pula komputer saya, Omnilang 5000, yang merupakan bahasa agnostik.

Untuk memberi komputer saya kegembiraan mengalami sarden, saya telah memutuskan untuk memberinya sejumlah program yang mampu ditampilkan di layar kaleng sarden dalam berbagai orientasi, dan menampilkan hingga sepuluh sarden.

Dalam tantangan ini, Anda akan bertanggung jawab untuk membuat program berdasarkan parameter ini:

Input

Nomor (antara 0 dan 10) dan surat dari salah satu "LR" berikut (masing-masing mewakili Kiri atau Kanan) Misalnya: 3L atau 5R; bagaimana input ini ke dalam program terserah Anda.

Keluaran

Sebuah kaleng sarden terbuka dengan sarden menghadap ke arah yang ditunjukkan, dengan kunci (diwakili oleh karakter " %") dan tutup kupas (digulung timah di ujung diwakili oleh karakter " @") yang terletak di bagian atas kaleng.

  • Semua ikan sarden harus menghadap ke arah yang ditunjukkan oleh input.
  • Semua ikan sarden memiliki panjang lima karakter di antara insang (" )" atau " (") dan ekor " ><"
  • Gulungan tutup kunci dan kupas akan selalu menghadap ke arah yang berlawanan dengan sarden.
  • Kaleng harus memiliki tampilan 3-D seperti ditunjukkan pada contoh di bawah ini.
  • Tinggi minimum timah adalah 3 sarden. Jadi, jika angka kurang dari 3, kaleng 3 sarden tingginya harus ditampilkan, dengan jumlah sarden yang dimasukkan. Kalau tidak, timah haruslah jumlah ikan sarden tinggi yang ditunjukkan dalam input. Jadi masukan 0Ratau0L akan menunjukkan kaleng sarden kosong.
  • Input lain apa pun yang tidak dapat divalidasi tidak akan menampilkan apa pun.

Misalnya, untuk " 3L"

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

Untuk " 7R"

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

Untuk " 2L"

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

Untuk " 0R"

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

" 0L"

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

Input tidak valid tidak akan mengembalikan apa pun ...

  • Ini adalah kode golf, sehingga jumlah karakter terkecil akan memenangkan tantangan ini.
  • Tidak ada celah seperti biasa.
WallyWest
sumber

Jawaban:

39

> <> , 250 235 + 3 = 238 byte

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

Cobalah online , atau tonton di taman bermain ikan ! Baca "L" atau "R" dari STDIN dan anggap jumlah ikan sarden sudah ada di tumpukan (perlu -vbendera untuk +3 byte).

Karena tentu saja saya harus menulis ini di> <>.

Bukan pohon
sumber
3
Menulis solusi ini di Fish terinspirasi ...
WallyWest
Bagaimana cara kerja taman bermain ikan? Saya tidak bisa menjalankannya. Di mana saya menempatkan input?
JAD
@JarkoDubbeldam, setelah menyalin kode ke jendela dan mengirimkannya, Anda harus meletakkan jumlah ikan sarden di mana dikatakan "tumpukan awal" (mensimulasikan -vbendera), dan arah ("L" atau "R") di bawah "beri masukan ke program "lalu klik" berikan ". (Saya sudah mengedit jawaban agar mudah-mudahan menjadi lebih jelas.)
Bukan sebatang pohon
1
Luar biasa: D Pasti menyenangkan saat debugging juga
JAD
15

Emojicode , 456 448 byte

๐Ÿ‹๐Ÿš‚๐Ÿ‡๐Ÿ–๐ŸŸd๐Ÿš‚๐Ÿ‡๐Ÿฆa๐Ÿ˜›0d๐ŸŠa๐Ÿ‡๐Ÿ˜€๐Ÿ”ค __________โŒn(__________@%๐Ÿ”ค๐Ÿ‰๐Ÿ“๐Ÿ‡๐Ÿ˜€๐Ÿ”ค  __________โŒn%@__________)๐Ÿ”ค๐Ÿ‰๐Ÿ”‚iโฉ0๐Ÿ•๐Ÿ‡๐ŸŠa๐Ÿ‡๐Ÿ˜€๐Ÿ”ค|<*)_____><||๐Ÿ”ค๐Ÿ‰๐Ÿ“๐Ÿ‡๐Ÿ˜€๐Ÿ”ค||><_____(*>|๐Ÿ”ค๐Ÿ‰๐Ÿ‰๐ŸŠโ–ถ๏ธ4๐Ÿ•๐Ÿ‡๐Ÿ”‚iโฉ0โž–3๐Ÿ•๐Ÿ‡๐ŸŠa๐Ÿ‡๐Ÿ˜€๐Ÿ”ค|          ||๐Ÿ”ค๐Ÿ‰๐Ÿ“๐Ÿ‡๐Ÿ˜€๐Ÿ”ค||          |๐Ÿ”ค๐Ÿ‰๐Ÿ‰๐Ÿ‰๐ŸŠa๐Ÿ‡๐Ÿ˜€๐Ÿ”ค'==========''๐Ÿ”ค๐Ÿ‰๐Ÿ“๐Ÿ‡๐Ÿ˜€๐Ÿ”ค''=========='๐Ÿ”ค๐Ÿ‰๐Ÿ‰๐Ÿ‰

Membawa 2 argumen: yang pertama adalah baris, yang kedua adalah arah (0 atau 1).

Cobalah online!

"Dapat dibaca" versi ungolfed dan versi 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 "''=========='"
    {
  }
}
๐Ÿ‘ต
betseg
sumber
2
Tidak pernah menemukan Emojicode sebelumnya tetapi itu adalah pikiran f ** k setengah ... Gila! Suka!
WallyWest
... mengapa bahasa ini ada? Maksudku, aku menyukainya, tapi mengapa? dan berapa lama waktu yang Anda butuhkan untuk mempelajarinya?
Taylor Scott
1
@AylorScott 1) โ€‹โ€‹tidak tahu, saya tidak membuatnya. 2) beberapa jam sungguh
betseg
6

Python 2 , 155 byte

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+"''"])

Cobalah online!

Input terdiri dari panjang 2 tuple. Elemen pertama menunjukkan jumlah ikan sarden. Elemen kedua menunjukkan arah; 0untuk kiri,1 kanan.

-84 byte menggunakan sihir lambda berkat notjagan dan officialaimm

HyperNeutrino
sumber
1
174 byte (agak mendapat ninja'd oleh @officialaimm di sana).
notjagan
1
Dapatkan lebih jauh hingga 161 byte!
notjagan
1
@ notjagan Lambda untuk 155
officialaimm
1
@officialaimm cukup menarik, jika diberikan dengan nilai negatif, itu memperluas ukuran timah, tetapi tidak memasukkan ikan sarden.
Pavel
3
@Phoenix Ya. Tidak masalah, karena OP telah menentukan kisaran 0 to 10. PS` -10` akan mencetak kaleng kosong, karena itu menandakan ada 10ikan sarden, tetapi Anda sudah memakannya. : D
officialaimm
5

Memancing , 1311 byte

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]

Mengambil input dari stdindalam bentuk:

5
R

Memancing tidak ada di Try It Online , tetapi ada juru bahasa di Ruby di halaman esolang yang ditautkan.

Ini adalah program pertama yang saya buat di Perikanan - sebenarnya, ini adalah program pertama yang saya buat dalam bahasa 2D - jadi mungkin bisa jauh lebih pendek. Tips golf dipersilahkan (meskipun saya tidak akan terkejut jika tidak ada yang memberi, mengingat bahwa saya tidak tahu apa yang baru saja saya tulis).

Berikut adalah GIF dari jalur yang diambil oleh program untuk mendapat masukan 1R(maaf karena kualitas rendah):

GIF

(Ini dibuat menggunakan juru bahasa yang saya buat; tidak ada program yang tersedia untuk umum yang "memvisualisasikan" Memancing, sejauh yang saya tahu)

masukkan_name_di sini
sumber
Sintaks C dan D sepertinya berkontribusi terhadap bloat ... Apakah ada steno yang tersedia untuk mengurangi itu?
WallyWest
Sebenarnya goreskan itu, sepertinya itu bagian integral dari kode ... Pilihan bahasa yang menarik! :)
WallyWest
4

Arang , 49 byte

๏ผกโŒˆโŸฆ๏ผฉฮธยณโŸงฮถ๏ผขฯ‡ยฒ_โ†โ†“(โ†“ฮถ'ร—=ฯ‡''โ†–๏ผฐโ†‘ฮถโ†โ†‘ฮถ@%๏ผฆ๏ผฎโ€œ#โˆจโ€น๏ผถ๏ผขโ€œยซjiโ€๏ผฆ๏ผฎโ€–๏ผด

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Argumen pertama adalah jumlah ikan sarden, kedua adalah arah (0 = kiri, 1 = kanan).

Neil
sumber
Kerja bagus, Neil. Terima kasih telah menyediakan tautan kompiler!
WallyWest
2
Jangan berterima kasih padaku, terima kasih @ Dennis karena telah membuat TIO yang menghasilkan semua pelat untuk Anda.
Neil
3

SOGL V0.12 , 51 48 byte

!gXโดโ€˜gjโฐ%!โตโ€˜bโŒก"ฮบNโ•ฅโ–ˆ*โ‰คโŒกโ•‘)โ€˜3b-"รทAZโดโ€˜โˆ™_"ฮงccฯƒยซโ€˜โฐe?ยฑโ†”

Coba Di Sini!
Diharapkan input sebagai yang pertama adalah hitungan dan yang kedua - kiri atau kanan diwakili oleh 1 atau 0.

Penjelasan:

..โ€˜..โ€˜                          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
dzaima
sumber
2

R, 334 byte, 311 byte

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=""))}}

Fungsi mengambil nilai numerik untuk n dan string untuk arah.

Ini adalah posting pertama saya, jadi saya akui saya tidak yakin bagaimana cara menghitung byte kode.

Menandai
sumber
1
Anda dapat menempelkan kode Anda ke TIO , di mana orang juga dapat menguji kode Anda :) kode ini juga menampilkan jumlah byte Anda, yaitu 310 dalam hal ini.
Ian H.
2

C ++, 307 296 292 byte

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

Penggunaan:

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

-11 byte disimpan berkat pengguna ThePirateBay -4 byte terima kasih kepada Zacharรฝ

HatsuPointerKun
sumber
1
Bisakah Anda menghapus tanda kurung dalam #definearahan? Saya tidak mengujinya tetapi tampaknya tidak perlu bagi mereka.
1
Dapat c!=82menjadi c-82dalam setiap kasus di mana Anda menggunakannya?
Zacharรฝ
1

Python 2 , 287 byte

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]

Cobalah online!

Input adalah tupel angka yang dipisahkan koma dari format ini: 2, 1 . Angka pertama adalah jumlah ikan dan yang kedua adalah 0 untuk kiri dan 1 untuk kanan.

Ini dimulai sebagai upaya untuk keluar-golf jawaban lain (saya benar-benar berpikir saya bisa), tetapi itu menyebalkan. : P Jika ada yang bisa membuat kepala dan ekor itu dan membantu golf itu (saya salahkan pada jam 12 pagi sekarang), saya akan senang.

benar-benar manusiawi
sumber
Namun, upaya besar!
WallyWest
1

C # (.NET Core), 289 byte

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

Cobalah online!

Mengambil integer dan char (L, R) sebagai parameter dan menghasilkan string yang dihasilkan.

Ugh. Harus berurusan dengan beberapa konstanta string yang mengganggu, sayangnya Anda tidak bisa melakukannya string * lengthdi C #. Dan metode dengan new string(char, length)tidak akan sebanding dengan biaya byte.


Algoritma bekerja sebagai berikut:

  1. Pada awalnya kita menentukan apakah sarden menghadap ke kanan atau kiri, karena kita kemudian akan memformat string kita sesuai. Kami membuat string untuk bagian atas, dengan beberapa operator bersyarat untuk beralih antara perspektif L dan R.
  2. Kemudian kami membuat loop yang berjalan minimal 3 kali dan input kiri paling banyak. Dengan begitu kita dapat membuat ruang kosong jika kita memiliki kurang dari 3 ikan sarden di kotak kita.
  3. Di dalam loop ini kita memformat string, tergantung pada perspektif dan juga, jika h > i, kita meletakkan sarden di dalamnya. Jikai >= h , akan ada ruang kosong di mana sarden biasanya berada.
  4. Pada akhirnya kami membuat bagian bawah kotak, sekali lagi diformat sesuai dengan perspektif.
Ian H.
sumber
1

Perl 5 , 167 + 1 (-n) = 168 byte

($n,$d)=/(\d+)([LR])/ or die;say('R'eq$d?(reverse$_)=~y/()></)(<>/r:$_)for" __________  ","(__________@%",("|<*)_____><||")x$n,("|          ||")x(3-$n),"'==========''"

Cobalah online!

Xcali
sumber
1

JavaScript (ES6), 283 273 269 251 byte

Disimpan 10 byte berkat @WallyWest

Disimpan 4 byte menghapus parens tambahan

Disimpan 18 byte berkat @ThePirateBay

Menderita kurangnya pembalikan string di perpustakaan standar. Menentukan fungsi yang mengambil input nuntuk jumlah ikan dan duntuk arah. Melempar jika dbukan "L" atau "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([`'`,_(`=`),`''`]))

Cobalah online

Jared Smith
sumber
Selamat datang di PPCG! Kami harap Anda menyukainya di sini ... Mari kita lihat apa yang bisa kami lakukan untuk menurunkan skor Anda ... Upaya awal yang bagus!
WallyWest
@WallyWest, terima kasih! Memotong 17 byte lainnya dengan mengeluarkan suatu fungsi dan mengubah if...else ifterary yang bersarang dengan tugas yang merusak. Saya kehabisan ide ...
Jared Smith
1
@WallyWest Saya menggunakan _fungsi dua kali, sekali untuk 10 garis bawah (yang digunakan dua kali), sekali untuk 10 tanda sama dengan, jadi dengan fungsi itu menghemat satu byte. Dan kecuali saya menggunakan string template yang salah, menggunakannya bukan rangkaian adalah 3 byte lebih .
Jared Smith
1
@WallyWest, terima kasih atas tipnya, dan menghapus beberapa parens yang tidak dibutuhkan menghemat 14 byte.
Jared Smith
1
@ Zacharรฝ selesai. Jika saya tidak menikmati membuat orang asing di internet bahagia, saya tidak akan berada di SE pada awalnya.
Jared Smith