Kocham Sardynki

33

Uwielbiam sardynki, nie mam ich dość, podobnie jak mój komputer Omnilang 5000, który jest obojętny językowo.

Aby dać komputerowi radość z doświadczania sardynek, postanowiłem nakarmić go wieloma programami, które są w stanie wyświetlać na ekranie puszki sardynek w różnych orientacjach i wyświetlać do dziesięciu sardynek.

W tym wyzwaniu będziesz odpowiedzialny za tworzenie programów w oparciu o następujące parametry:

Dane wejściowe

Liczba (od 0 do 10) i litera z jednego z następujących „LR” (odpowiednio lewy lub prawy) Na przykład: 3Llub 5R; jak to jest wprowadzane do programu, zależy od ciebie.

Wydajność

Otwarta puszka sardynek z sardynkami skierowanymi we wskazanym kierunku, z kluczem (reprezentowanym przez %znak „ ”) i obraną pokrywką (zwinięta puszka na końcu reprezentowanym przez @znak „ ”) umieszczoną na górze puszki.

  • Wszystkie sardynki muszą być skierowane w kierunku wskazanym przez dane wejściowe.
  • Wszystkie sardynki będą miały ciała o długości pięciu znaków między skrzelem („ )” lub „ (”) a ogonem „ ><
  • Klucz i obrana rolka wieczka zawsze będą skierowane w przeciwnym kierunku niż sardynki.
  • Puszka musi mieć wygląd trójwymiarowy, jak pokazano poniżej w przykładach.
  • Minimalna wysokość puszki wynosi 3 sardynki. Jeśli więc liczba jest mniejsza niż 3, należy pokazać puszkę o wysokości 3 sardynek z wprowadzoną liczbą sardynek. W przeciwnym razie puszka musi być liczbą sardynek wysoką wskazaną na wejściu. Więc wkład 0Rlub 0Lpokaże pustą puszkę sardynek.
  • Wszelkie inne dane wejściowe, których nie można zweryfikować, niczego nie pokażą.

Na przykład dla „ 3L

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

Dla „ 7R

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

Dla „ 2L

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

Dla „ 0R

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

0L

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

Nieprawidłowe wprowadzenie niczego nie zwróci ...

  • To jest golf golfowy, więc najmniejsza liczba postaci wygra to wyzwanie.
  • Bez luk jak zwykle.
WallyWest
źródło

Odpowiedzi:

39

> <> , 250 235 + 3 = 238 bajtów

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

Wypróbuj online lub obejrzyj na placu zabaw dla ryb ! Odczytuje „L” lub „R” ze STDIN i zakłada, że ​​liczba sardynek jest już na stosie (wymaga -vflagi dla +3 bajtów).

Ponieważ oczywiście musiałem to napisać w> <>.

Nie drzewo
źródło
3
Pisanie tego rozwiązania w Fish jest inspirowane ...
WallyWest
Jak działa plac zabaw dla ryb? Nie mogę go uruchomić. Gdzie mam umieścić dane wejściowe?
JAD,
@JarkoDubbeldam, po skopiowaniu kodu do okna i przesłaniu go, musisz umieścić liczbę sardynek w miejscu, w którym jest napisane „początkowy stos” (symulacja -vflagi), a kierunek („L” lub „R”) pod „podaj wejście do programu „następnie kliknij„ daj ”. (Zredagowałem odpowiedź, aby, mam nadzieję, wyjaśnić.)
Nie drzewo,
1
Wspaniale: D Musi być też miły podczas debugowania
JAD
15

Emojicode , 456 448 bajtów

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

Przyjmuje 2 argumenty: pierwszy to linie, drugi to kierunek (0 lub 1).

Wypróbuj online!

Wersja „nieczytelna” i wersja pseudokodu „czytelna”:

🐋 🚂 🍇
  🐖 🐟  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
źródło
2
Nigdy wcześniej nie spotkałem się z Emojicode, ale to tylko półtora umysłu ... Szalony! Kocham to!
WallyWest,
... dlaczego ten język w ogóle istnieje? To znaczy, podoba mi się, ale dlaczego? i ile czasu zajęło ci nauczenie się tego?
Taylor Scott
1
@TaylorScott 1) ​​nie wiem, nie stworzyłem go. 2) kilka godzin naprawdę
betseg
6

Python 2 , 155 bajtów

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

Wypróbuj online!

Dane wejściowe składają się z krotki o długości 2. Pierwszy element wskazuje liczbę sardynek. Drugi element wskazuje kierunek; 0na lewo, 1na prawo.

-84 bajty wykorzystujące magię lambda dzięki notjagan i officialaimm

HyperNeutrino
źródło
1
174 bajty (tam dostałem ninja przez @officialaimm).
notjagan
1
Zrobiłem to dalej do 161 bajtów!
notjagan
1
@notjagan Lambda for 155
officialaimm
1
@officialaimm wystarczająco ciekawe, jeśli dostarczone z wartością ujemną, zwiększa rozmiar puszki, ale nie wkłada sardynek.
Pavel
3
@Phoenix Tak. Nie ma to jednak znaczenia, ponieważ OP określił zakres 0 to 10. PS` -10` wydrukuje pustą puszkę, ponieważ oznacza to, że były 10sardynki, ale już je zjadłeś . : D
officialaimm
5

Wędkarstwo , 1311 bajtów

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]

Pobiera dane wejściowe z stdinformularza:

5
R

Wędkarstwo nie jest dostępne w Try It Online , ale na stronie z linkami esolangs znajduje się interpreter.

Jest to pierwszy program, który stworzyłem w wędkowaniu - w rzeczywistości jest to pierwszy program, który stworzyłem w dowolnym języku 2D - więc prawdopodobnie może być znacznie krótszy. Wskazówki dotyczące gry w golfa są mile widziane (choć nie zdziwiłbym się, gdyby nikt ich nie dał, biorąc pod uwagę, że nawet ja nie wiem, co do cholery właśnie napisałem).

Oto GIF ścieżki, którą program przyjmuje do wprowadzenia 1R(przepraszam za niską jakość):

GIF

(Zostało to stworzone za pomocą interpretera, który stworzyłem; o ile mi wiadomo, nie ma publicznie dostępnych programów, które „wizualizują” połowy)

wstaw nazwę_tutaj
źródło
Wygląda na to, że składnia C i D przyczynia się do wzdęcia ... Czy jest jakiś skrót, który mógłby to zmniejszyć?
WallyWest
Właściwie to zarysuj, wygląda na to, że są integralną częścią kodu ... Ciekawy wybór języka! :)
WallyWest
4

Węgiel drzewny , 49 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Pierwszy argument to liczba sardynek, drugi to kierunek (0 = lewy, 1 = prawy).

Neil
źródło
Świetna robota, Neil. Dziękujemy za podanie linku do kompilatora!
WallyWest,
2
Nie dziękuj mi, dziękuję @Dennis za stworzenie TIO, które generuje dla Ciebie całą płytę kotłową.
Neil
3

SOGL V0.12 , 51 48 bajtów

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

Wypróbuj tutaj!
Oczekuje, że dane wejściowe będą liczone jako pierwsze, a drugie - w lewo lub w prawo, reprezentowane przez 1 lub 0.

Wyjaśnienie:

..‘..‘                          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
źródło
2

R, 334 bajty 311 bajtów

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

Funkcja przyjmuje wartość liczbową dla n oraz ciąg znaków dla kierunku.

To mój pierwszy post, więc przyznaję, że nie jestem pewien, jak liczyć bajty kodu.

znak
źródło
1
Możesz wkleić kod do TIO , gdzie ludzie mogą również przetestować kod :) wyświetla również liczbę bajtów, która w tym przypadku wynosi 310.
Ian H.
2

C ++, 307 296 292 bajtów

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

Stosowanie :

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

-11 bajtów zapisanych dzięki użytkownikowi ThePirateBay -4 bajtów dzięki Zacharýmu

HatsuPointerKun
źródło
1
Czy możesz usunąć nawiasy z #definedyrektywy? Nie testowałem tego, ale wydaje się, że nie ma takiej potrzeby.
1
Czy może c!=82być c-82w każdym przypadku, w którym go używasz?
Zacharý
1

Python 2 , 287 bajtów

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]

Wypróbuj online!

Wejście jest oddzielone przecinkami krotką liczby formacie: 2, 1. Pierwsza liczba to ilość ryb, a druga to 0 dla lewej i 1 dla prawej.

Zaczynało się to jako próba pokonania drugiej odpowiedzi (całkowicie myślałem, że mogę), ale jest do bani. : P Jeśli ktokolwiek może zrobić z niego głowę i ogon i pomóc w grze w golfa (obwiniam go teraz o godzinie 12), byłbym zadowolony.

całkowicie ludzki
źródło
Niemniej jednak świetna próba!
WallyWest
1

C # (.NET Core), 289 bajtów

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

Wypróbuj online!

Bierze liczbę całkowitą i znak (L, R) jako parametry i wyświetla wynikowy ciąg.

Ugh. Miałem do czynienia z irytującymi stałymi ciągów, niestety nie można tego zrobić string * lengthw języku C #. A metoda z new string(char, length)nie byłaby warta kosztu bajtu.


Algorytm działa w następujący sposób:

  1. Na początku ustalamy, czy sardynki są skierowane w prawo, czy w lewo, ponieważ odpowiednio sformatujemy nasze łańcuchy. Tworzymy ciąg dla góry, z niektórymi operatorami warunkowymi, aby przełączać się między perspektywą L i R.
  2. Następnie tworzymy pętlę, która działa co najmniej 3 razy, a maksymalnie lewe czasy wprowadzania. W ten sposób możemy stworzyć puste przestrzenie, jeśli w naszym pudełku jest mniej niż 3 sardynki.
  3. Wewnątrz tej pętli formatujemy ciąg, w zależności od perspektywy, a także, jeśli h > iwstawiamy do niego sardynkę. Jeślii >= h będzie pusta przestrzeń, w której normalnie będzie sardynka.
  4. Na końcu tworzymy dolną część pola, ponownie sformatowanego zgodnie z perspektywą.
Ian H.
źródło
1

Perl 5 , 167 + 1 (-n) = 168 bajtów

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

Wypróbuj online!

Xcali
źródło
1

JavaScript (ES6), 283 273 269 251 bajtów

Zaoszczędź 10 bajtów dzięki @WallyWest

Zaoszczędzono 4 bajty, usuwając dodatkowe pareny

Zaoszczędź 18 bajtów dzięki @ThePirateBay

Cierpi na brak odwrócenia łańcucha w bibliotece standardowej. Definiuje funkcję, która pobiera dane wejściowe ndla liczby ryb i dkierunku. Zgłasza, jeśli dnie jest „L” lub „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([`'`,_(`=`),`''`]))

Wypróbuj online

Jared Smith
źródło
Witamy w PPCG! Mamy nadzieję, że Ci się tu spodoba ... Zobaczmy, co możemy zrobić, aby obniżyć swój wynik ... Świetny wysiłek!
WallyWest,
@WallyWest dzięki! Ogolono kolejne 17 bajtów, wyciągając funkcję i zmieniając na if...else ifzagnieżdżone trójskładniki z przypisaniem niszczenia. Nie mam jednak pomysłów ...
Jared Smith,
1
@WallyWest Używam tej _funkcji dwa razy, raz dla 10 znaków podkreślenia (które są używane dwa razy), raz dla 10 znaków równości, więc posiadanie jej w funkcji oszczędza mi bajt. I chyba, że ​​źle używam ciągów szablonów, użycie ich zamiast konkatenacji to 3 bajty więcej .
Jared Smith,
1
@WallyWest dzięki za wskazówkę, że usunięcie niepotrzebnych parenów pozwoliło zaoszczędzić 14 bajtów.
Jared Smith,
1
@ Zacharý gotowe. Gdybym nie lubił uszczęśliwiać obcych w Internecie, nie byłbym na SE.
Jared Smith,