Rắn khắp nơi


12

Thử thách

Thử thách rất đơn giản: in một con rắn .
Bạn sẽ nhận được chiều dài của con rắn làm đầu vào.
Một con rắn có chiều dài 2 trông như thế này:

==(:)-

Một con rắn có chiều dài 7 trông như thế này:

=======(:)-

Nói cách khác, chiều dài của một con rắn là có bao nhiêu dấu bằng nhau trước đầu .

Sử dụng

Giả sử tôi đã thực hiện C ++ và biên dịch nó ./getsnake.
Tôi có thể chạy nó như vậy:

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

Làm rõ

  • Sơ hở tiêu chuẩn là không được phép.
  • Bạn có thể nhận đầu vào và đầu ra theo bất kỳ cách nào được chấp nhận.
  • Bạn có thể giả sử tất cả các đầu vào được đưa ra là số nguyên dương.
  • Bạn có thể viết một hàm thay vì một chương trình thông thường.

8
Thật vô ích khi để lại một thử thách trong Sandbox chỉ trong nửa giờ. Bạn đã nhận được một số phản hồi, nhưng tốt nhất là để nó trong Sandbox trong 24-72 giờ. (Ngoài ra, bạn nên bỏ phần "Nguồn gốc" hoặc xóa phần đó.)
El'endia Starman

Là một chức năng đủ hoặc bạn muốn một chương trình đầy đủ?
betseg

Hàm @betseg là đủ
Khởi

4
Tôi sợ tất cả các câu trả lời Đèn Squiggly của tôi dễ dàng di chuyển đến đây.
manatwork

3
Số nguyên âm nên khiến con rắn tự nuốt.
GuitarPicker

Câu trả lời:


18

Lục giác , 33 byte

Không chiến thắng, nhưng vẫn ngầu. Có thể có được chơi golf nhiều hơn.

Hãy thử trực tuyến!

Chơi gôn

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

Định dạng:

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

màu (Được tạo bằng Công cụ tô màu lục giác của Timwi's )

u tìm thấy bí mật da snek!  ======= (:) -

Giải trình:

Lặp lại, in ra "=" cho đến khi bộ đếm đạt 0.

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

In "("

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

In ":"

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

In ")"

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

Các giá trị trên được tạo bằng tập lệnh python đơn giản. Tuy nhiên, tôi đã hết chỗ cho "-". Vì vậy, tôi đã phải dùng đến các thủ thuật nâng cao hơn.

Khi chương trình in ra ")", giá trị của ô không phải là 41, là 1065. Hexagony chỉ sửa đổi giá trị khi in. Khi nó bật ra, (1065 * 1000 + 4)% 256 = 44, chỉ cách 45, giá trị ascii cho "-". Sau đó, tôi chỉ tăng, in và chèn @ ở đâu đó sau khi in.

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

Làm thế nào nó có thể được gọi là ngôn ngữ lập trình khi .j4 /; là ... In "(" ??? Phần nào của .j4 /; là bản in và phần nào là chuỗi để in?
Fogmeister

2
@Fogmeister [Phần 1/2] Trong Hexagony, bất kỳ ký tự chữ cái nào cũng đặt giá trị của ô nhớ hiện tại thành giá trị ascii của ký tự đó. "j" có giá trị ascii là 106, vì vậy đó là những gì bộ nhớ được đặt thành. Ngoài ra, và các ký tự số nhân giá trị của ô hiện tại với 10, sau đó tự thêm vào nó (điều này cho phép dễ dàng xây dựng các số, như số 61 ở đầu.
Blue

3
[Phần 2/2] Vì vậy, j4 đặt ô nhớ thành 1064. Khi IP đạt đến "/", nó sẽ được phản ánh thành ";", in ra ký tự ascii tương ứng với ô nhớ hiện tại% 256. 1064% 256 = 40, giá trị ascii cho "(". Tôi hy vọng điều này trả lời câu hỏi của bạn.
Blue

cảm ơn. Vâng nó làm. Tôi đoán đây là một ngôn ngữ để sử dụng như một cách kiểm tra bộ não của bạn. Thay vì một cách để viết chương trình sau đó? Hấp dẫn.
Fogmeister

@Fogmeister có nhiều ngôn ngữ lập trình bí truyền là những bài tập vặn vẹo não hơn là hữu ích để thực hiện công việc thực tế, mặc dù chúng CÓ THỂ làm việc thực sự nếu bạn cố gắng hết sức.
Sparr

12

Quế Gum, 7 byte

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

Hãy thử trực tuyến.

Sẽ có 6 byte với pcú pháp cũ : /

Giải trình

Giải nén sang p~=~(:)-, pgiai đoạn sau đó chỉ cần đọc đầu vào và lặp lại =n lần.


Bạn có thể liên kết đến thông số ngôn ngữ cho việc này?
Robert Fraser

@RobertFraser Hiện tại tôi không có thông số kỹ thuật chính thức hoặc bất kỳ tài liệu nào, nhưng bạn có thể kiểm tra nguồn tại repo GitHub: github.com/quartata/cinnamon-gum
một spaghetto

12

Brian & Chuck , 31 byte

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

Đầu vào ở dạng giá trị byte , vì vậy, ví dụ đầu vào !cho con rắn có chiều dài 33.

Hãy thử trực tuyến!

Đã được một lúc rồi ...

Giải trình

Một mồi nhanh Brian & Chuck:

  • Dòng đầu tiên của chương trình là Brian, dòng thứ hai là Chuck.
  • Brian và Chuck là hai trường hợp giống như Brainfuck. Điều hấp dẫn chính là chương trình của Chuck là băng của Brian và ngược lại. Các đầu băng / con trỏ chỉ dẫn bắt đầu trên ô đầu tiên của mỗi băng và thực hiện bắt đầu trên Brian.
  • Đối với các lệnh, có một vài sự khác biệt. Chỉ Brian có thể sử dụng ,(đầu vào) và chỉ Chuck có thể sử dụng .(đầu ra). Ngoài <>{}di chuyển đầu băng lên đến ô 0 tiếp theo (hoặc trong trường hợp ở {đầu bên trái của băng nếu không có ô số 0 trên đường). Thay vào đó [...], luồng điều khiển duy nhất là ?chuyển đổi điều khiển sang thể hiện khác nếu ô hiện tại khác không. Lệnh được thực hiện đầu tiên trên ô khác là lệnh sau điều kiện. Và cuối cùng, _chỉ là một bí danh cho null-byte, để thuận tiện.

Bây giờ là mã. Brian bắt đầu với điều này:

,{-?

Thao tác này đọc đầu vào vào ô đầu tiên của Chuck, sau đó di chuyển đầu băng sang trái bằng {(không làm gì ngay bây giờ) và giảm đầu vào với -trước khi chuyển đổi điều khiển cho Chuck nếu giá trị vẫn khác không. Điều này bắt đầu vòng lặp chính. Chuck sau đó chạy bit này:

}<<.{?

Thao tác này sẽ di chuyển đầu băng vào Brian đến tận cùng, di chuyển hai ô bên trái lên =và in nó trước khi đầu băng sang bên trái và chuyển điều khiển trở lại Brian. Đây là cách các vòng lặp thường hoạt động trong B & C.

Khi đầu vào đã giảm xuống 0, băng ?trên của Brian sẽ không làm gì cả. Sau đó, Brian thực hiện phần này:

>}-):(=?

Không ):(=có op-op, vì vậy mã thực tế là chỉ >}-?. Chúng tôi di chuyển ra khỏi ô 0 >, di chuyển lên _với }, giảm dần để biến nó thành khác không và chuyển sang Chuck với ?. Sau đó, bit cuối cùng trên Chuck được chạy:

<.<.<.<.<.

Điều này chỉ đơn giản là in năm ký tự trước Chuck, tức là =(:)-. Lưu ý rằng chúng ta cần in một cái khác =vì vòng lặp chính chỉ được thực hiện N-1lần cho đầu vào N.


10
Chúc mừng 100k
điên rồ


6

Võng mạc , 10 byte

.+
$*=(:)-

Hãy thử trực tuyến!

Đây là một sự thay thế regex đơn giản.

Nó phù hợp .+với toàn bộ đầu vào, và sau đó thay thế nó bằng $*=(;)-.

Đây $*là một tính năng độc đáo trong Retina: đó là toán tử đặc biệt lặp lại ký tự.

Ví dụ, 5$*xsẽ trở thành xxxxx.

Trong trường hợp đối số trước đó vắng mặt, toàn bộ kết quả được sử dụng làm đối số mặc định.


5

Python, 21 byte

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

Nghĩa là nó!


Bạn có thể cắt 3 byte bằng cách thực hiện:"="*input()+"(:)-"
gowrath

@gowrath Sau đó, nó sẽ không được in bất cứ điều gì
Leaky Nun

Nó sẽ xuất nó nếu bạn trong trình thông dịch không? Op cho biết bạn có thể nhận được đầu ra bằng mọi cách.
Gowrath

@gowrath Bạn không thể cho rằng chúng tôi đang ở REPL
Leaky Nun

Đó có phải là một quy tắc chung cho việc chơi golf mã? Mới ở đây :)
gowrath

5

Haskell, 25 byte

f n=('='<$[1..n])++"(:)-"

'='<$[1..n]tương đương với replicate n '='.


5

Java 8, 52 byte

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

Bộ thử nghiệm. (Biên dịch> Thực thi)

Tín dụng .

Cách truyền thống, 61 54 53 byte

7 byte nhờ Kevin Cruijssen.

1 byte nhờ có Dom Hastings.

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

+1 Ồ, và đối với cách truyền thống: for(int i=0;i<n;i++)có thể được chơi thành golf for(;n>0;n--), vì bạn không cần đầu vào cho bất cứ điều gì khác ngoài vòng lặp for.
Kevin Cruijssen

@KevinCruijssen Cảm ơn, đã chỉnh sửa
Leaky Nun

Kiểm tra thông qua liên kết bạn cung cấp có vẻ như bạn có thể thay đổi vòng lặp for thành: for(;n-->0;)để lưu một byte khác!
Dom Hastings

@DomHastings được chỉnh sửa với lời cảm ơn
Leaky Nun


4

C, 38

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

Hãy thử nó trên ideone.


1
Không ngắn hơn, nhưng mát hơn : f(n){~-printf(n?"=":"=(:)-")||f(~-n);}.
orlp

f(n){for(;n;printf(n--?"=":"(:)-"));}Cho 1.
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ - Điều đó không tạo ra đầu.
owacoder

@owacoder Chà, C không phải là ngôn ngữ chính của tôi ...
Erik the Outgolfer

1
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Và đó là lý do tại sao bạn không nên đăng các đề xuất chơi golf chưa được kiểm tra (đặc biệt là nếu bạn mất 5 giây để kiểm tra đề xuất của bạn với liên kết được cung cấp trong câu trả lời).
Martin Ender

4

05AB1E, 10 9 byte

'=×"ÿ(:)-

Giải trình

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

Dùng thử trực tuyến

Lưu 1 byte nhờ Adnan.


'=×"ÿ(:)-cho 9 byte :). Điều này sử dụng nội suy chuỗi.
Ad Nam

1
@Adnan: Aaah, vậy đó là những gì ÿ:)
Emigna

4

Javascript, 23 byte

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

1
Tôi chỉ định đăng chính xác mã đó! Đánh tôi đi Có một upvote
MayorMonty

Hôm nay tôi đã học về các chức năng mũi tên . Cảm ơn bạn. Không biết đó là một điều
bobkingof12vs

Làm thế nào để bạn gọi ví dụ đó của chức năng? Tôi vừa thử n(3)và nhận được một Uncaught ReferenceError: n is not definedlỗi ...
WallyWest

@WallyWest - thửx=n=>"=".repeat(n)+"(:)-"; x(7);
lấy

@eithedog Sau đó, không nên trả lời ban đầu x=và thay đổi thành 25 ký tự?
WallyWest

4

C #, 28 byte

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

tôi luôn luôn quan tâm bởi các đoạn lambda. Làm thế nào bạn thậm chí có thể chạy này?
downrep_nation

@downrep_nation phải mất một int và tự động trả về chuỗi vì đó chỉ là một câu lệnh
TheLethalCoder

Câu trả lời phải là một chương trình đầy đủ hoặc một chức năng, không chỉ là một đoạn trích. Vì vậy, câu trả lời này có vẻ không đầy đủ.
raznagul

@raznagul Đây là một chức năng ẩn danh do đó nó đã hoàn tất
TheLethalCoder

@TheLethalCoder: Có thể thử liên kết trực tuyến sẽ giúp hiểu được nó. ( csharppad.com )
raznagul

4

Python , 24 byte.

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

input() nhận đầu vào từ người dùng

*, khi được sử dụng trên các chuỗi và một số nguyên, tạo ra một chuỗi mới, được tạo từ các bản sao đã nối của bản gốc. Ví dụ: "hello "*3đầu ra hello hello hello.

Bằng cách nhân =input(), bạn có được một chuỗi =độ dài mà người dùng chỉ định.

Sử dụng +nối hai dây, trong trường hợp này, cơ thể "=…="của chúng ta với đầu của chúng ta, "(:)-"để làm cho con rắn.

print đưa ra kết quả.


3

GolfScript, 11 10 byte

~"="*"(:)-"

Bội số "=" theo đầu vào và thêm đầu.

-1 nhờ Leaky Nun


3

Toán học, 21 20 byte

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

Chức năng ẩn danh. Lấy một số n làm đầu vào và trả về một con rắn có chiều dài n làm đầu ra. "="~Table~#tạo một danh sách {"=", "=", ..., "="}có độ dài n<>"(:)-"nối các phần tử của danh sách và nối "(:)-"vào chuỗi kết quả.


1
chơi gôn thêm một byte:"="~Table~#<>"(:)-"&
LLlAMnYP

3

R, 32 27 byte

Giải pháp này khá đơn giản, rephàm lặp lại phần tử đầu tiên ( "=") scan(), thực tế là đầu vào của người dùng.

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

CHỈNH SỬA :

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

Câu trả lời ngắn hơn một chút, sử dụng scan()trực tiếp.

Ngoài ra,

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

cho một con rắn không băm nhỏ ( 34 byte )


Tôi muốn nói sep=""là cần thiết ở đây, nếu không con rắn của bạn trông giống như con đường đi qua đường sắt : = = = (:)-.
manatwork

Con rắn được sản xuất ở đây thực sự là một chút băm nhỏ, nhưng OP ký gửi chỉ nói rằng chiều dài của con rắn là số lượng các dấu bằng nhau trước đầu. Tuy nhiên, tôi sẽ thêm sepghi chú bên cạnh;)
Frédéric

3

Mẻ, 68 byte

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


2

Perl 6 ,  16 15  12 byte

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

Giải trình:

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

Sử dụng:

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

put snake 10;

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

2

JAISBaL , 9 byte

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

Đã thử nghiệm với JAISBaL-0.0.7 (.jar đã được biên dịch vừa được đẩy, nhưng nguồn đã được tăng lên trong một thời gian)


Sử dụng #trước tên ngôn ngữ để làm cho nó trông giống như mọi người khác.
Michael Klein

@MichaelKlein được rồi
Socratic Phoenix

2

PowerShell v2 +, 19 byte

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

Chương trình đầy đủ. Lấy đầu vào $args[0], sử dụng phép nhân chuỗi để xây dựng phần thân, sau đó nối chuỗi để giải quyết trên đầu.

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

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

Kudos cho bạn, tôi đã đến 26:"$("="*[int]$args[0])(:)-"
Chirishman

2

C, 46 45 43 byte

đã lưu 2 byte nhờ owacoder! tiết kiệm được 3 byte nhờ rici!

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

Hãy thử nó trên Ideone!


3
Người -->điều khiển bí ẩn lại tấn công.
Nữ tu rò rỉ

@LeakyNun Phiên bản 46 byte không có toán tử, tôi nhớ là đi đến toán tử;)
betseg

1
Bạn có thể loại bỏ >0và lưu hai byte.
owacoder

Hơi ngắn:f(n){while(4-printf("=\0(:)-"+2*!n--));}
rici

2

Cheddar, 15 byte (không biên dịch)

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

Một câu trả lời thẳng thắn.



1

K, 17 byte

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

Thí dụ;

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

Giải trình;

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

Là gì -1(... );?
Adám

Lưu một byte:{(x#"="),"(:)-"}
Adám

Cảm ơn Adam. -1 In ra bàn điều khiển. -1 "Xin chào"; sẽ in Hello
Chromozorz

Nhưng không in ấn ngầm?
Adám

Có nhưng nó bao gồm dấu ngoặc kép ... "==== (:) -" chứ không phải; ===== (:) -
Chromozorz

1

Perl, 16 + 1 ( -pcờ) = 17 byte

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

Cần -pcờ, vì vậy hãy chạy với:

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.