스네이크


12

도전

도전은 간단합니다 : 뱀을 인쇄하십시오 .
뱀 길이를 입력으로 얻습니다.
길이 2의 뱀은 다음과 같습니다.

==(:)-

길이가 7 인 뱀은 다음과 같습니다.

=======(:)-

다시 말해, 뱀의 길이는 머리 앞의 등호가 몇 개인 지 입니다.

용법

C ++ 구현을 만들어서 컴파일했다고 가정 해 봅시다 ./getsnake.
나는 그렇게 실행할 수 있습니다 :

$ ./getsnake 10
==========(:)-

설명

  • 표준 허점은 허용되지 않습니다.
  • 허용되는 방식으로 입력 및 출력을 얻을 수 있습니다.
  • 주어진 모든 입력이 양의 정수라고 가정 할 수 있습니다.
  • 일반 프로그램 대신 함수를 작성할 수 있습니다.

8
샌드 박스에 30 분만 도전하는 것은 쓸모가 없습니다. 피드백을 받았지만 일반적으로 24-72 시간 동안 샌드 박스에 두는 것이 가장 좋습니다. (또한 "
원본

기능이 충분합니까, 아니면 전체 프로그램을 원하십니까?
betseg

@betseg 함수는 충분하다
InitializeSahib

4
모든 Squiggly Lamp 답변이 쉽게 이식 할 수 있습니다.
manatwork

3
음의 정수는 뱀이 스스로 삼키도록해야합니다.
GuitarPicker

답변:


18

헥사 고니 , 33 바이트

이길 수는 없지만 여전히 시원합니다. 골프를 더 많이 할 수 있습니다.

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

골프 :

61}?.$)@$j;(3<./;.}l/.400;5\j;.'\

형식화 :

    6 1 } ?
   . $ ) @ $
  j ; ( 3 < .
 / ; . } l / .
  4 0 0 ; 5 \
   j ; . ' \
    . . . .

컬러 ( Timwi의 Hexagony Colorer를 사용하여 제작 )

당신은 비밀 스 ek을 발견!  ======= (:)-

설명:

루프, 카운터가 0에 도달 할 때까지 "="를 인쇄하십시오.

    6 1 } ?
   . $ . . $
  . . ( . . .
 / . . } . . .
  . . . ; . .
   . . . ' .
    . . . .

"("인쇄

    . . . .
   . . . . .
  . . . . . .
 / ; . . . . .
  4 . . . . .
   j . . . .
    . . . .

":"인쇄

    . . . .
   . . . . .
  . ; ( 3 < .
 . . . } l / .
  . . . . . .
   . . . . .
    . . . .

")"인쇄

    . . . .
   . . . . .
  j . . . . .
 . . . . . . .
  . . . ; 5 \
   . . . . \
    . . . .

위의 값은 간단한 파이썬 스크립트를 사용하여 생성되었습니다. 그러나 나는 "-"를위한 공간이 부족하다. 그래서 나는 더 고급의 트릭에 의지해야했습니다.

프로그램이 ")"를 출력 할 때 셀의 값은 41이 아니라 1065입니다. Hexagony는 인쇄 할 때 값을 변경합니다. 결과적으로, "-"에 대한 ASCII 값인 45에서 하나만 떨어진 (1065 * 1000 + 4) % 256 = 44입니다. 그런 다음 인쇄 후 어딘가에서 @를 증가시키고 인쇄하고 삽입합니다.

    . . . .
   . $ ) @ $
  j . . 3 . .
 / . . } . . .
  4 0 0 . 5 \
   . ; . . \
    . . . .

.j4 / 일 때 어떻게 프로그래밍 언어라고 부를 수 있습니까? is ... Print "("??? .j4 /;의 어느 부분이 인쇄되고 어떤 부분이 인쇄 될 문자열입니까?
Fogmeister

2
@Fogmeister [Part 1/2] Hexagony에서 알파벳 문자는 현재 메모리 셀의 값을 해당 문자의 ASCII 값으로 설정합니다. "j"는 106의 ASCII 값을 가지므로 메모리가 설정됩니다. 또한 숫자는 현재 셀의 값에 10을 곱한 다음 셀에 더합니다 (처음에는 61과 같이 숫자를 쉽게 구성 할 수 있습니다)
Blue

3
[2 부] 따라서 j4는 메모리 셀을 1064로 설정합니다. IP가 "/"에 도달하면 ";"에 반영되어 현재 메모리 셀 % 256에 해당하는 ASCII 문자를 인쇄합니다. 1064 % 256 = 40, "("의 ascii 값.이 질문에 대한 답변이
Blue

감사. 그래 나는 이것이 당신의 두뇌를 테스트하는 방법으로 사용하는 언어의 더 많은 것 같아요. 그렇다면 프로그램을 작성하는 방법보다? 흥미 롭군
Fogmeister

@Fogmeister 당신이 충분히 노력하면 실제 작업을 수행 할 수 있지만 실제 작업을 수행하는 데 유용한 것보다 뇌 트위스트 연습보다 많은 난해한 프로그래밍 언어가 있습니다.
Sparr


12

Brian & Chuck , 31 바이트

,{-?>}-):(=?
#}<<.{?_<.<.<.<.<.

바이트 값 의 형태로 입력, 예를 들어 입력 !은 길이가 33 인 뱀을 제공합니다.

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

오랜만이야...

설명

빠른 Brian & Chuck 입문서 :

  • 프로그램의 첫 번째 줄은 Brian이고 두 번째 줄은 Chuck입니다.
  • Brian과 Chuck은 Brainfuck과 같은 두 인스턴스입니다. 주요 문제점은 척의 프로그램이 브라이언의 테이프이고 그 반대도 마찬가지입니다. 테이프 헤드 / 명령 포인터는 각 테이프의 첫 번째 셀에서 시작되고 실행은 Brian에서 시작됩니다.
  • 명령은 몇 가지 차이점이 있습니다. Brian만이 ,(입력)을 사용할 수 있고 Chuck만이 .(출력)을 사용할 수 있습니다 . 이외에도 <하고 >있다 {그리고 }다음 제로 셀로 테이프 헤드를 이동하는 (또는 경우에 {테이프의 좌단 방식에는 제로 셀이없는 경우). 대신에 현재 셀이 0이 아닌 경우 [...]제어 플로우가 ?다른 인스턴스로 제어를 전환하는 것이 유일한 제어 플로우입니다 . 다른 셀에서 첫 번째로 실행 된 명령어는 조건 이후의 명령어입니다. 그리고 마지막으로 _편의상 널 바이트의 별명입니다.

이제 코드입니다. 브라이언은 이것으로 시작합니다 :

,{-?

이것은 입력을 Chuck의 첫 번째 셀로 읽은 다음 테이프 헤드를 왼쪽으로 이동하고 {(지금은 아무것도하지 않음) -값이 여전히 0이 아닌 경우 Chuck에 대한 제어를 전환하기 전에 입력을 줄 입니다. 메인 루프가 시작됩니다. 그런 다음 척은이 비트를 실행합니다.

}<<.{?

이렇게하면 Brian의 테이프 헤드가 맨 끝으로 이동하고 두 개의 셀이 왼쪽으로 이동 한 =다음 테이프 헤드의 왼쪽 끝까지 인쇄 된 다음 컨트롤이 Brian으로 다시 전환됩니다. 이것이 일반적으로 B & C에서 루프가 작동하는 방식입니다.

입력이 0으로 줄어들면, ?Brian의 테이프는 아무 것도하지 않습니다. 그런 다음 Brian은이 부분을 실행합니다.

>}-):(=?

):(=실제 코드 그냥 그래서, 어떤 작전 없습니다 >}-?. 우리와 제로 세포 떨어져 이동 >까지 이동, _}, 그 영이 아닌 척에 스위치를 만들기 위해를 감소 ?. 그런 다음 척의 마지막 비트가 실행됩니다.

<.<.<.<.<.

이렇게하면 Chuck 앞에 5 개의 문자가 인쇄 =(:)-됩니다. =메인 루프는 N-1입력을 위해서만 실행되므로 다른 것을 인쇄해야합니다 N.


10
100k
Insane


6

망막 , 10 바이트

.+
$*=(:)-

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

이것은 간단한 정규식 대체입니다.

.+전체 입력과 일치 하는 항목을 찾은 다음로 대체합니다 $*=(;)-.

$*망막의 독특한 기능입니다 : 그것은 문자 반복 특수 연산자입니다.

예를 들어, 5$*x될 것입니다 xxxxx.

이전 인수가없는 경우 전체 일치가 기본 인수로 사용됩니다.


5

파이썬, 21 바이트

lambda n:"="*n+"(:)-"

무시 했어!


다음을 수행하여 3 바이트를 줄일 수 있습니다."="*input()+"(:)-"
gowrath

@gowrath 그러면 아무것도 인쇄되지 않습니다
Leaky Nun

통역사에 있으면 출력됩니다. Op는 어떤 식 으로든 출력을 얻을 수 있다고 말했다.
gowrath

@gowrath 우리는 REPL에 있다고 가정 할 수 없습니다
Leaky Nun

이것이 코드 골프의 일반적인 규칙입니까? 새로운 기능 :)
gowrath


5

자바 8, 52 바이트

n->new String(new char[n]).replace("\0","=")+"(:)-";

테스트 스위트. (컴파일> 실행)

크레딧 .

전통적인 방식, 61 54 53 바이트

Kevin Cruijssen 덕분에 7 바이트.

Dom Hastings 덕분에 1 바이트.

n->{String s="";for(;n-->0;)s+="=";return s+"(:)-";};

+1 아, 그리고 기존의 것 : for-loop 이외의 다른 것에 대한 입력이 필요하지 않기 때문에에 for(int i=0;i<n;i++)골프를 칠 수 있습니다 for(;n>0;n--).
Kevin Cruijssen

@KevinCruijssen 감사합니다, 편집 됨
Leaky Nun

제공 한 링크를 통한 테스트는 for 루프를 다음 for(;n-->0;)으로 변경하여 다른 바이트를 절약 할 수있는 것처럼 보입니다 !
Dom Hastings

@DomHastings 감사와 함께 편집
Leaky Nun


4

C, 38

f(n){for(;n--;printf(n?"=":"=(:)-"));}

아이디어로 사용해보십시오.


1
더 짧지는 않지만 더 시원 f(n){~-printf(n?"=":"=(:)-")||f(~-n);}합니다.
orlp

f(n){for(;n;printf(n--?"=":"(:)-"));}-1.
아웃 골퍼 에릭 17

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ-헤드를 출력하지 않습니다.
owacoder

@owacoder 글쎄요, C는 제 기본 언어가 아닙니다.
Erik the Outgolfer

1
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 그리고 당신은 당신이 테스트하지 않은 골프 제안을 게시해서는 안되는 이유입니다 (특히 답변에 제공된 링크를 사용하여 제안을 테스트하는 데 5 초가 걸리는 경우).
Martin Ender


4

자바 스크립트, 23 바이트

n=>"=".repeat(n)+"(:)-"

1
그 코드를 정확히 게시하려고했습니다! 날 이길! upvote에이
MayorMonty

오늘 나는 화살표 기능 에 대해 배웠다 . 감사합니다. 그것이 뭔지 몰랐어요
bobkingof12vs

함수의 해당 인스턴스를 어떻게 호출합니까? 방금 시도 n(3)하고 Uncaught ReferenceError: n is not defined오류가 발생했습니다.
WallyWest

@WallyWest-시도x=n=>"=".repeat(n)+"(:)-"; x(7);
eithed

@eithedog 그러면 대답에 초기 x=문자가 25 문자로 변경되어서는 안됩니까?
WallyWest

4

C #, 28 바이트

n=>new string('=',n)+"(:)-";

람다 스 니펫에 항상 관심이 있습니다. 어떻게 이것을 실행할 수 있습니까?
downrep_nation

@downrep_nation int를 취하고 하나의 문장이기 때문에 자동으로 문자열을 반환합니다
TheLethalCoder

답은 스 니펫뿐만 아니라 전체 프로그램 또는 기능이어야합니다. 따라서이 답변은 불완전한 것 같습니다.
raznagul

@raznagul 이것은 익명의 기능이므로 완료되었습니다
TheLethalCoder

@ TheLethalCoder : 온라인 링크를 시도하면 이해하는 데 도움이 될 것입니다. ( csharppad.com )
raznagul

4

Python , 24 바이트

print"="*input()+"(:)-"

input() 사용자로부터 입력을받습니다

*문자열 및 정수에 사용될 때 새 문자열을 작성하며, 이는 원래의 결합 된 사본으로 구성됩니다. 예를 들면 다음과 같습니다. "hello "*3outputs hello hello hello.

=및 을 곱 하면 사용자가 지정한 길이 input()의 문자열이 생성 =됩니다.

사용은 +이 경우에, 우리의 몸, 두 개의 문자열을 조인 "=…="우리의 머리는 "(:)-"뱀을 할 수 있습니다.

print 결과를 출력합니다.


3

GolfScript, 11 10 바이트

~"="*"(:)-"

"="에 입력을 곱하고 머리를 더합니다.

Leaky Nun 덕분에 -1


3

수학, 21 20 바이트

"="~Table~#<>"(:)-"&

익명의 기능. 숫자 n 을 입력으로 취하고 길이 n 의 뱀을 출력으로 반환합니다 . "="~Table~#리스트 생성 {"=", "=", ..., "="}길이를 N , 및 <>"(:)-"리스트의 요소를 추가 연접 "(:)-"결과 스트링.


1
1 바이트 이상 "="~Table~#<>"(:)-"&
골프 가능

3

R, 32 27 바이트

이 솔루션은 매우 간단합니다. rep함수는 첫 번째 요소 ( "=")를 반복합니다 scan(). 이는 실제로 사용자의 입력입니다.

a=scan();cat(rep("=",a),"(:)-")

편집 :

cat(rep("=",scan()),"(:)-")

scan()직접 사용하여 조금 더 짧은 대답 .

또는

cat(rep("=",scan()),"(:)-",sep="")

잘게 썰지 않은 뱀 ( 34 바이트 )


나는 이것이 sep=""필요 하다고 말하고 싶습니다. 그렇지 않으면 뱀이 철도를 가로 지르는 뱀처럼 보입니다 = = = (:)-.
manatwork

여기에서 생산 된 뱀은 실제로 약간 다진 것이지만 OP의 위탁자는 뱀의 길이가 머리 앞의 등호의 수라고 진술합니다. sep그럼에도 불구하고 나는 부수적으로 추가 할 것이다 ;)
Frédéric

3

배치, 68 바이트

@set h=(:)-
@for /l %%i in (1,1,%1)do @call set h==%%h%%
@echo %h%


2

펄 6 ,  16 15  12 바이트

{"{'='x$_}(:)-"}
{'='x$_~'(:)-'}
'='x*~'(:)-'

설명:

'=' x * # 「=」 string repeated by the only parameter 「*」
~        # concatenated with
'(:)-'   # the head

용법:

# store it in the lexical namespace
my &snake = '='x*~'(:)-';

put snake 10;

# put ^5 .map: &snake;
put ^5 .map: '='x*~'(:)-';
==========(:)-
(:)- =(:)- ==(:)- ===(:)- ====(:)- =====(:)-

2

JAISBaL , 9 바이트

t=*Qb(:)-

말 수가 많은:

# \# enable verbose parsing #\
push1 =        \# push = onto the stack #\
mul            \# multiply the top two values of the stack #\
popout         \# pop the top value of a stack and print it #\
print4 (:)-    \# print (:)- #\

JAISBaL-0.0.7로 테스트 (컴파일 된 .jar가 방금 푸시되었지만 소스는 잠시 동안 git에 있습니다)


#언어 이름 앞에 a 를 사용하여 다른 사람처럼 보이게하십시오.
마이클 클라인

@MichaelKlein okay
Socratic Phoenix

2

PowerShell v2 +, 19 바이트

'='*$args[0]+'(:)-'

전체 프로그램. 입력을 취하고 $args[0]문자열 곱셈을 사용하여 본문을 구성한 다음 문자열 연결을 사용하여 머리를 고정시킵니다.

PS C:\Tools\Scripts\golfing> .\snakes-all-around.ps1 7
=======(:)-

PS C:\Tools\Scripts\golfing> .\snakes-all-around.ps1 77
=============================================================================(:)-

당신에게 Kudos, 나는 26까지까지있어 :"$("="*[int]$args[0])(:)-"
Chirishman

2

씨, 46 45 43 바이트

owacoder 덕분에 2 바이트를 절약했습니다! rici 덕분에 3 바이트를 절약했습니다!

f(n){while(4-printf("=\0(:)-"+2*!n--));}

Ideone에서 사용해보십시오!


3
신비한 -->연산자 가 다시 공격합니다.
Leaky Nun

@LeakyNun 46 바이트 버전은 운영자에게 간다는 것을 기억 한 것보다 운영자에게 간다.)
betseg

1
를 제거하고 >02 바이트를 저장할 수 있습니다 .
owacoder

약간 짧음 :f(n){while(4-printf("=\0(:)-"+2*!n--));}
rici



1

K, 17 바이트

{,[x#"=";"(:)-"]}

예;

f:{,[x#"=";"(:)-"]}
-1(f'!10);          /print out the result of calling f where x is 0 1 2 3 4 5....
(:)-
=(:)-
==(:)-
===(:)-
====(:)-
=====(:)-
======(:)-
=======(:)-
========(:)-
=========(:)-

설명;

{}                 /function x is implicit and is an int
x#"="              /take (#) x of "=" --> so 3#"=" gives "==="
,[x#"=";"(:)-"]    /comma is a join that takes 2 args --> ,[x;y] gives the concatination of x and y --> "a","abc" is the same as ,["a";"abc"] and gives "aabc"

무엇입니까 -1(... );?
Adám

바이트 저장 :{(x#"="),"(:)-"}
Adám

고마워 아담 -1 콘솔에 인쇄합니다. -1 "안녕하세요";
Chromozorz

그러나 인쇄가 암시 적이 지 않습니까?
Adám

예.하지만 큰 따옴표를 포함합니다 ... "==== (:)-"보다는; ===== (:) -
Chromozorz

1

Perl, 16 + 1 ( -p플래그) = 17 바이트

$_="="x$_."(:)-"

-p플래그가 필요 하므로 다음을 실행하십시오.

perl -pe '$_="="x$_."(:)-"'


1

Befunge-98, 24 바이트

사용자로부터 숫자를 입력 한 다음 뱀을 인쇄합니다.

'=&:00pk:00gk,"-):("4k,@

1

Matlab / Octave, 22 바이트

@(n)[~(1:n)+61 '(:)-']

이것은 익명의 기능입니다.

Ideone에서 사용해보십시오 .

설명

가정하십시오 n= 5.

1:n행 벡터를 생성합니다 [1 2 3 4 5].

~(1:n)각 항목을 무효화하므로 [0 0 0 0 0].

...+6161각 항목에 추가하여을 제공합니다 [61 61 61 61 61]. 61문자의 ASCII 값입니다 =.

[... '(:)-']문자열과 연결합니다 '(:)-'. 연결하기 전에 [61 61 61 61 61]문자열로 자동 변환 됩니다 '====='.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.