나는 정어리를 좋아한다


33

나는 정어리를 좋아하고, 그것들을 충분히 얻을 수 없으며, 언어에 구애받지 않는 내 컴퓨터 인 Omnilang 5000도 마찬가지입니다.

컴퓨터에 정어리를 경험하는 기쁨을주기 위해 정어리의 화면 깡통에 다양한 방향으로 표시 할 수 있고 최대 10 개의 정어리를 표시 할 수있는 여러 프로그램을 제공하기로 결정했습니다.

이 과제에서는 다음 매개 변수를 기반으로 프로그램을 작성해야합니다.

입력

숫자 (0과 10 사이)와 다음 "LR"중 하나의 문자 (각각 왼쪽 또는 오른쪽을 나타냄) 예 : 3L또는 5R; 이것이 프로그램에 입력되는 방법은 당신에게 달려 있습니다.

산출

정어리가 표시된 방향을 향한 열린 정어리, 키 ( " %"문자로 표시됨)와 껍질을 벗긴 뚜껑 ( " @"문자로 표시되는 끝에서 롤업 된 주석 ")이 주석 상단에 있습니다.

  • 모든 정어리는 입력이 나타내는 방향을 향해야합니다.
  • 모든 정어리에는 아가미 ( " )"또는 " (")와 꼬리 " ><" 사이에 5 자 길이의 몸체가 있습니다.
  • 열쇠와 껍질을 벗긴 뚜껑 롤은 항상 정어리와 반대 방향을 향하게됩니다.
  • 주석은 아래 예제와 같이 3D 모양이어야합니다.
  • 주석의 최소 높이는 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<

온라인으로 시도 하거나 물고기 놀이터 에서 시청하십시오 ! STDIN에서 "L"또는 "R"을 읽고 정어리 수가 이미 스택에 있다고 가정합니다 ( -v+3 바이트 의 플래그 필요 ).

물론 나는 이것을 <>로 써야했다.


3
Fish에서이 솔루션을 작성하는 것은 영감을 받았습니다 ...
WallyWest

물고기 놀이터는 어떻게 작동합니까? 나는 그것을 실행할 수 없습니다. 입력은 어디에 배치합니까?
JAD

@JarkoDubbeldam, 코드를 창에 복사하여 제출 한 후 "초기 스택"( -v플래그 시뮬레이션 ) 및 "give"아래의 방향 ( "L"또는 "R") 에 정어리 수를 넣어야합니다. "프로그램에 입력"을 클릭 한 다음 "제공"을 클릭하십시오. (나는 그것을 명확하게하기 위해 답을 편집했다.)
나무가 아니다

1
굉장 : D 디버깅 중에도 좋을 것
JAD

15

Emojicode , 456 448 바이트

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

두 개의 인수를 취합니다. 첫 번째는 행이고 두 번째는 방향 (0 또는 1)입니다.

온라인으로 사용해보십시오!

"읽을 수있는"ungolfed 버전 및 의사 코드 버전 :

🐋 🚂 🍇
  🐖 🐟  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) ​​dunno, 나는 그것을 만들지 않았다. 2) 정말 몇 시간
betseg

6

파이썬 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 터플로 구성됩니다. 첫 번째 요소는 정어리 수를 나타냅니다. 두 번째 요소는 방향을 나타냅니다. 0왼쪽, 1오른쪽

notjagan 및 officialaimm 덕분에 람다 매직을 사용하는 -84 바이트


1
174 바이트 (소라 타는 @officialaimm에 의해 닌자가 있습니다).
notjagan


1
@notjagan 155 람다
officialaimm

1
@officialaimm 충분히 음수 값을 제공하면 주석의 크기가 커지지 만 정어리는 넣지 않습니다.
Pavel

3
@Phoenix 예. OP가 범위를 지정 했으므로 중요하지 않습니다 0 to 10. PS` -10`은 빈 주석을 인쇄 10합니다. 정어리 가 있었음을 나타 내기 때문에 이미 먹었습니다. : D
officialaimm

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

낚시는 온라인 에 연결되어 있지 않지만 루비에는 연결된 esolangs 페이지에 대한 통역사가 있습니다.

이것은 제가 어업에서 만든 첫 번째 프로그램입니다. 실제로 2D 언어로 만든 첫 번째 프로그램이므로 훨씬 짧을 수 있습니다. 골프 팁은 환영합니다 (아무도 아무것도주지 않았다면 놀라지 않을 것입니다. 심지어 내가 방금 쓴 것을 알지 못한다고 생각합니다).

다음은 프로그램이 입력에 사용하는 경로의 GIF입니다 1R.

GIF

(이것은 내가 만든 통역사를 사용하여 만들었습니다. 내가 아는 한 낚시를 "시각화"할 수있는 공개 프로그램은 없습니다)


C와 D 문법이 부풀어 오르는 것처럼 보이는데 ... 이것을 줄일 수있는 속기가 있습니까?
WallyWest

실제로 그것을 긁으면 코드에 없어서는 안될 것 같습니다. 흥미로운 언어 선택! :)
WallyWest

4

, 49 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 첫 번째 인수는 정어리의 수이고 두 번째 인수는 방향입니다 (0 = 왼쪽, 1 = 오른쪽).


잘 했어, 닐 컴파일러 링크를 제공해 주셔서 감사합니다!
WallyWest

2
감사합니다. 모든 보일러 플레이트를 생성하는 TIO를 만들어 주신 @Dennis에게 감사드립니다.
Neil

3

SOGL V0.12 , 51 48 바이트

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

여기 사용해보십시오!
첫 번째는 카운트이고 두 번째는 왼쪽 또는 오른쪽으로 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에 코드를 붙여 넣을 수 있습니다 .
Ian H.

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

사용자 ThePirateBay 덕분에 -11 바이트 절약 Zacharý 덕분에 -4 바이트


1
#define지시문 에서 괄호를 제거 할 수 있습니까 ? 나는 그것을 테스트하지 않았지만 그것들이 필요하지 않은 것 같습니다.

1
당신이 그것을 사용하는 모든 경우에 c!=82있을 수 있습니까 c-82?
Zacharý

1

파이썬 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]

온라인으로 사용해보십시오!

입력은 다음 형식의 쉼표로 구분 된 숫자 튜플입니다 2, 1. 첫 번째 숫자는 물고기의 양이고 두 번째 숫자는 왼쪽이 0이고 오른쪽이 1입니다.

이것은 다른 대답을 밖으로 골라내는 시도로 시작되었지만 (전적으로 가능하다고 생각했습니다), 짜증납니다. : P 누군가가 머리와 꼬리를 만들어 골프를 타게 도와 줄 수 있다면 (지금 오전 12 시라고 비난한다) 기쁘다.


그럼에도 불구하고 위대한 시도!
WallyWest

1

C # (. NET 코어), 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;}

온라인으로 사용해보십시오!

정수 및 문자 (L, R)를 매개 변수로 사용하고 결과 문자열을 출력합니다.

어. 성가신 문자열 상수를 처리해야했지만 슬프게도 string * lengthC #에서는 할 수 없습니다. 그리고이 방법 new string(char, length)은 바이트 비용 가치가 없었습니다.


알고리즘은 다음과 같이 작동합니다.

  1. 처음에는 정어리가 오른쪽 또는 왼쪽을 향하고 있는지 확인합니다. 그에 따라 문자열을 형식화하기 때문입니다. 우리는 L과 R 퍼스펙티브 사이를 전환하기 위해 일부 조건부 연산자와 함께 상단을위한 문자열을 만듭니다.
  2. 그런 다음 최소 3 번, 왼쪽 입력 시간을 최대로 실행하는 루프를 만듭니다. 그렇게하면 상자 안에 정어리가 3 개 미만이면 빈 공간을 만들 수 있습니다.
  3. 이 루프 내에서 우리는 관점에 따라 문자열의 형식을 지정하고, 경우 h > i에 내부에 정어리를 넣습니다. 인 경우 i >= h정어리가 일반적으로있는 빈 공간이 있습니다.
  4. 마지막으로 상자의 바닥을 만들고 다시 관점에 따라 형식을 지정합니다.


1

자바 스크립트 (ES6), 283 273 269 251 바이트

@WallyWest 덕분에 10 바이트 절약

여분의 파렌을 제거하여 4 바이트 절약

@ThePirateBay 덕분에 18 바이트 절약

표준 라이브러리에서 문자열 반전이 발생하지 않습니다. 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 감사합니다! 함수 if...else if를 빼고 파괴 할당으로 중첩 삼항으로 변경하여 다른 17 바이트를 제거했습니다 . 그래도 아이디어가 없습니다 ...
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.