周りのヘビ


12

チャレンジ

課題は簡単です。蛇を印刷します。
入力として蛇の長さを取得します。
長さ2のヘビは次のようになります。

==(:)-

長さ7のヘビは次のようになります。

=======(:)-

言い換えれば、蛇の長さは頭の前に等号がいくつあるかということです。

使用法

C ++実装を作成してにコンパイルしたとしましょう./getsnake
次のように実行できます。

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

明確化

  • 標準の抜け穴は許可されていません。
  • 受け入れ可能な方法で入力と出力を取得できます。
  • 与えられた入力はすべて正の整数であると仮定できます。
  • 通常のプログラムの代わりに関数を書くことができます。

8
サンドボックスに30分だけチャレンジを残しても意味がありません。フィードバックはありましたが、通常はサンドボックスに24〜72時間置いておくのが最善です。(また、「Origins」部分を肉付けするか、削除する必要があります。)
El'endia Starman

機能は十分ですか、または完全なプログラムが必要ですか?
-betseg

@betseg機能は十分にある
InitializeSahib

4
私のすべてのSquiggly Lampの答えは、これに簡単に移植できると思います。
マナトワーク

3
負の整数は、蛇がそれ自体を飲み込む原因になります。
GuitarPicker

回答:


18

六角形、33バイト

勝つつもりはないが、それでもクールだ。もっとゴルフができるかもしれません。

オンラインでお試しください!

ゴルフ済み:

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

フォーマット済み:

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

Colored(TimwiのHexagony Colorerを使用して作成

u found da secret snek! =======(:)-

説明:

ループし、カウンターが0になるまで「=」を出力します。

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

「(」を印刷

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

「:」を印刷

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

「)」を印刷

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

上記の値は、単純なpythonスクリプトを使用して生成されました。ただし、「-」のスペースが足りませんでした。そのため、私はより高度なトリックに頼らなければなりませんでした。

プログラムが「)」を出力するとき、セルの値は41ではなく、1065です。Hexagonyは、印刷時に値を変更するだけです。判明したように、(1065 * 1000 + 4)%256 = 44、「-」のASCII値である45から1つだけ離れています。次に、印刷後、インクリメントして印刷し、@を挿入します。

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

.j4 /の場合、どのようにプログラミング言語と呼ぶことができますか。is ... Print "(" ??? .j4 /のどの部分が印刷で、どの部分が印刷する文字列ですか?
Fogmeister

2
@Fogmeister [パート1/2] Hexagonyでは、アルファベット文字は現在のメモリセルの値をその文字のASCII値に設定します。「j」のASCII値は106であるため、メモリが設定されます。また、数値、文字、現在のセルの乗算値10によって、それに自分自身を追加します(これは最初の61のように、数字を容易に構築することができます。
ブルー

3
[パート2/2]したがって、j4はメモリセルを1064に設定します。IPが「/」に達すると、「;」に反映され、現在のメモリセル%256に対応するASCII文字が出力されます。 256 = 40、 "("のASCII値。これがあなたの質問に答えることを願っています
ブルー

ありがとう。うん。これは、あなたの脳をテストする方法として使用する言語のようなものだと思います。それではプログラムを書く方法ではなく?面白い。
フォグマイスター

@Fogmeisterには、実際の作業に役立つよりも脳をひねる演習である難解なプログラミング言語がたくさんありますが、十分に努力すれば実際の作業を行うことができます。
スパー

12

シナモンガム、7バイト

0000000: 7043 dc95 6d4f ce                        pC..mO.

オンラインでお試しください。

古いp構文では6バイトだったでしょう:/

説明

に解凍しp~=~(:)-pステージは入力を読み取り、=n回繰り返します。


このための言語仕様にリンクできますか?
ロバートフレイザー

私は現在、正式な仕様、または任意のドキュメントを持っていないが、あなたはGitHubのでソースをチェックアウトすることができ@RobertFraserレポ:github.com/quartata/cinnamon-gumを
spaghetto

12

ブライアン&チャック、31バイト

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

バイト値の形式で入力。たとえば!、長さ33のスネークが入力されます。

オンラインでお試しください!

久しぶりです...

説明

ブライアン&チャック入門:

  • プログラムの最初の行はブライアンで、2行目はチャックです。
  • ブライアンとチャックは2つのBrainfuckのようなインスタンスです。主な問題は、チャックのプログラムがブライアンのテープであり、逆もまた同様であることです。テープヘッド/命令ポインタは各テープの最初のセルから始まり、実行はブライアンから始まります。
  • コマンドに関しては、いくつかの違いがあります。ブライアンのみが使用,(入力)でき、チャックのみが使用.(出力)できます。加え、<そして>存在する{}次のゼロのセルにテープヘッドを移動する(またはの場合には{、テープの左端に向かう途中にはゼロのセルが存在しない場合)。の代わりに[...]?現在のセルがゼロ以外の場合に制御を他のインスタンスに切り替える唯一の制御フローです。他のセルで最初に実行された命令は、条件の後の命令です。そして最後に、_便宜上、nullバイトの単なるエイリアスです。

これでコード。ブライアンはこれで始まります:

,{-?

これにより、入力がChuckの最初のセルに読み込まれ、テープヘッドが左に移動し{(現在は何もしません)-、値がまだ0以外の場合、Chuckの制御を切り替える前に入力が減少します。これでメインループが始まります。チャックはこのビットを実行します:

}<<.{?

これにより、ブライアンのテープヘッドが最後まで移動し、2つのセルが左に移動し=、テープヘッドの前まで印刷され、コントロールがブライアンに戻ります。これは、一般にB&Cでループが機能する方法です。

入力がゼロに減ると、?ブライアンのテープは何もしなくなります。次に、ブライアンはこの部分を実行します。

>}-):(=?

):(=何-OPSではないので、実際のコードがちょうどです>}-?。ゼロのセル>から移動し、上に移動_}、それをデクリメントしてゼロ以外にし、でチャックに切り替え?ます。次に、チャックの最後のビットが実行されます。

<.<.<.<.<.

これは、Chuckの前に5文字を印刷するだけ=(:)-です。=メインループはN-1inputに対してのみ実行されるため、別の出力が必要であることに注意してくださいN


10
おめでとうございます
非常識


6

網膜、10バイト

.+
$*=(:)-

オンラインでお試しください!

これは単純な正規表現の置換です。

.+入力全体に一致するものに一致し、それをに置き換え$*=(;)-ます。

$*は、Retinaに固有の機能です。これは、文字反復の特殊演算子です。

たとえば、5$*xになりxxxxxます。

前の引数が存在しない場合、一致するもの全体がデフォルトの引数として使用されます。


5

Python、21バイト

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

イデオネ!


あなたは行って、3つのバイトをカットすることができます"="*input()+"(:)-"
gowrath

@gowrathその後、何も印刷されなくなります
リーキー修道女

インタプリタにいる場合は出力しますか?Opは、どのような方法でも出力を取得できると述べました。
-gowrath

@gowrath私たちがREPLにいると仮定することはできません
漏れの修道女

それはコードゴルフの一般的なルールですか?ここに新しい:)
gowrath


5

Java 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(int i=0;i<n;i++)ゴルフすることができますfor(;n>0;n--)、とにかくforループ以外のもののための入力を必要としないので。
ケビンCruijssen 16

@KevinCruijssenありがとう、編集
Nun

指定したリンクを介してテストすると、forループを次のように変更できるように見えfor(;n-->0;)ます。
ドムヘイスティングス

@DomHastingsのおかげで編集
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
エリックアウトゴルファー16

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ-それは頭を出力しません。
-owacoder

@owacoderまあ、Cは私の第一言語ではありません...
エリック・ザ・アウトゴルファー

1
@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ And that's why you shouldn't post untested golfing suggestions (especially if it would have taken you 5 seconds to test your suggestion with the link provided in the answer).
Martin Ender

4

05AB1E, 10 9 bytes

'=×"ÿ(:)-

Explanation

'=         # push equal-sign
  ×        # repeat input nr of times
   "ÿ(:)-  # interpolate snake body with head as a string
           # implicitly display

Try it online

1 byte saved thanks to Adnan.


'=×"ÿ(:)- for 9 bytes :). This uses string interpolation.
Adnan

1
@Adnan: Aaah, so that's what ÿ does :)
Emigna

4

Javascript, 23 bytes

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

1
I was just about to post exactly that code! Beat me to it! Have an upvote
MayorMonty

Today I learned about arrow functions. Thank you. Didn't know that was a thing
bobkingof12vs

How do you call that instance of the function? I just tried n(3) and received a Uncaught ReferenceError: n is not defined error...
WallyWest

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

@eithedog Then shouldn't the answer have the initial x= and changed to 25 chars?
WallyWest

4

C#, 28 bytes

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

im always interested by the lambda snippets. how can you even run this?
downrep_nation

@downrep_nation it takes in an int and automatically returns the string because it is only one statement
TheLethalCoder

The answer should be a full program or a function, not just a snippet. So this answer seems incomplete.
raznagul

@raznagul This is an anonymous function therefore it is complete
TheLethalCoder

@TheLethalCoder: Maybe try online link would help to understand it. (csharppad.com)
raznagul

4

Python, 24 bytes.

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

input() gets input from user

*, when used on strings and an integer, creates a new string, which is made of joined copies of the original. For example: "hello "*3 outputs hello hello hello.

By multiplying = and input(), you get a string of = the length that the user specifies.

Using + joins two strings, in this case, our body "=…=" with our head, "(:)-" to make the snake.

print outputs the result.


3

GolfScript, 11 10 bytes

~"="*"(:)-"

Multiplies "=" by input, and adds head.

-1 thanks to Leaky Nun


3

Mathematica, 21 20 bytes

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

Anonymous function. Takes a number n as input, and returns a snake of length n as output. "="~Table~# generates a list {"=", "=", ..., "="} of length n, and <>"(:)-" concatenates the list's elements and appends "(:)-" to the resulting string.


1
golfable by one more byte: "="~Table~#<>"(:)-"&
LLlAMnYP

3

R, 32 27 bytes

This solution is pretty straightforward, rep function repeats the first element ("=") scan() times, which is in fact the user's input.

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

EDIT:

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

Slighly shorter answer, using scan() directly.

Alternatively,

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

for a non-chopped snake (34 bytes)


I would say the sep="" is needed here, otherwise your snake looks like the one that traversed the railway: = = = (:)-.
manatwork

The snake produced here is indeed a bit minced, but OP's consigns only state that the length of the snake is the number of equal signs before the head. I will add the sep as a side note nonetheless ;)
Frédéric

3

Batch, 68 bytes

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


2

Perl 6,  16 15  12 bytes

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

Explanation:

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

Usage:

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

put snake 10;

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

2

JAISBaL, 9 bytes

t=*Qb(:)-

Verbose:

# \# 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 (:)- #\

Tested with JAISBaL-0.0.7 (The compiled .jar was just pushed, but the source has been up on git for a while)


Use a # before the language name to make it look like everybody else's.
Michael Klein

@MichaelKlein okay
Socratic Phoenix

2

PowerShell v2+, 19 bytes

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

Full program. Takes input $args[0], uses string multiplication to construct the body, then string concatenation to tack on the head.

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

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

Kudos to you, I got as far as 26: "$("="*[int]$args[0])(:)-"
Chirishman

2

C, 46 45 43 bytes

saved 2 bytes thanks to owacoder! saved 3 bytes thanks to rici!

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

Try it on Ideone!


3
The mysterious --> operator strikes again.
Leaky Nun

@LeakyNun 46 bytes version was without the goes to operator, than I remembered the goes to operator ;)
betseg

1
You can remove the >0 and save two bytes.
owacoder

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

2

Cheddar, 15 bytes (noncompeting)

n->'='*n+'(:)-'

A straightforward answer.


1

Sesos, 11 bytes

Hexdump:

0000000: aaaa5e a0f7b4 ed4cee 5d3b                         ..^....L.];

Try it online!

Assembler:

set numin
add 61
fwd 1
get
jmp,sub 1,rwd 1,put,fwd 1,jnz
add 40,put
rwd 1,sub 3,put
fwd 1,add 1,put
add 4,put

1

K, 17 Bytes

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

Example;

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

Explanation;

{}                 /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"

What is -1(...);?
Adám

Save a byte: {(x#"="),"(:)-"}
Adám

Thanks Adam. -1 Prints to the console. -1"Hello"; will print Hello
Chromozorz

But isn't printing implicit?
Adám

Yes but it includes the double quotes... "====(:)-" rather than; =====(:)-
Chromozorz

1

Perl, 16 + 1 (-p flag) = 17 bytes

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

Needs -p flag, so run with :

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

1

Minkolang 0.15, 12 bytes

"=(:)-"nD$O.

Try it here!

Explanation

"=(:)-"         Push this to the stack in reverse order - ["-",")",":","(","="]
       n        Take number from input
        D       Pop k and duplicate top of stack (the "=") k times
         $O.    Output whole stack as characters and stop.

1

Befunge-98, 24 bytes

Takes numerical input from the user, then prints the snake.

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

1

Matlab / Octave, 22 bytes

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

This is an anonymous function.

Try it on Ideone.

Explanation

Assume n= 5.

1:n produces the row vector [1 2 3 4 5].

~(1:n) negates each entry, so it gives [0 0 0 0 0].

...+61 adds 61 to each entry, so it gives [61 61 61 61 61]. 61 is the ASCII value of character =.

[... '(:)-'] concatenates that with the string '(:)-'. This automatically converts [61 61 61 61 61] into the string '=====' before the concatenation.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.