나는 정어리를 좋아한다


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.