Ular di sekitar


12

Tantangan

Tantangannya sederhana: cetak ular .
Anda akan mendapatkan panjang ular sebagai input.
Seekor ular panjang 2 terlihat seperti ini:

==(:)-

Ular dengan panjang 7 terlihat seperti ini:

=======(:)-

Dengan kata lain, panjang ular adalah berapa banyak tanda yang sama di depan kepala .

Pemakaian

Katakanlah saya membuat implementasi C ++ dan mengompilasinya ./getsnake.
Saya bisa menjalankannya seperti ini:

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

Klarifikasi

  • Celah standar tidak diijinkan.
  • Anda bisa mendapatkan input dan output dengan cara apa pun yang dapat diterima.
  • Anda dapat menganggap semua input yang diberikan adalah bilangan bulat positif.
  • Anda dapat menulis fungsi alih-alih program biasa.

8
Tidak ada gunanya meninggalkan tantangan di Sandbox hanya setengah jam. Anda memang mendapatkan beberapa umpan balik, tetapi biasanya lebih baik meninggalkannya di Sandbox selama 24-72 jam. (Juga, Anda harus menyempurnakan bagian "Origins" atau menghapusnya.)
El'endia Starman

Apakah fungsinya cukup atau Anda ingin program lengkap?
betseg

Fungsi @betseg sudah cukup
InitializeSahib

4
Saya khawatir semua jawaban My Squiggly Lamp mudah dibawa-bawa untuk ini.
manatwork

3
Bilangan bulat negatif harus menyebabkan ular menelan dirinya sendiri.
GuitarPicker

Jawaban:


18

Hexagony , 33 byte

Tidak akan menang, tapi tetap keren. Mungkin bisa mendapatkan golf lebih banyak.

Cobalah online!

Golf:

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

Diformat:

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

Berwarna (Dibuat menggunakan Hexagony Colorer Timwi )

kamu menemukan da rahasia snek!  ======= (:) -

Penjelasan:

Ulangi, cetak "=" hingga penghitung mencapai 0.

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

Cetak "("

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

Cetak ":"

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

Cetak ")"

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

Nilai-nilai di atas dihasilkan menggunakan skrip python sederhana. Namun, saya agak kehabisan ruang untuk "-". Jadi, saya harus menggunakan trik yang lebih maju.

Ketika program mencetak ")", nilai sel tidak 41, itu 1065. Hexagony hanya mengubah nilai saat mencetak. Ternyata, (1065 * 1000 + 4)% 256 = 44, hanya satu dari 45, nilai ascii untuk "-". Kemudian, saya hanya menambah, mencetak, dan menyisipkan @ di suatu tempat setelah pencetakan.

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

Bagaimana itu bisa disebut bahasa pemrograman ketika .j4 /; is ... Print "(" ??? Bagian mana dari .j4 /; adalah cetakan dan bagian mana yang merupakan string untuk dicetak?
Fogmeister

2
@Fogmeister [Bagian 1/2] Dalam Hexagony, setiap karakter alfabet mengatur nilai sel memori saat ini ke nilai ascii dari karakter itu. "j" memiliki nilai ascii 106, sehingga memori diatur. Selain itu, dan karakter numerik mengalikan nilai sel saat ini dengan 10, lalu menambahkannya ke dalamnya (ini memungkinkan konstruksi angka yang mudah, seperti 61 di awal.
Biru

3
[Bagian 2/2] Jadi, j4 mengatur sel memori ke 1064. Ketika IP mencapai "/", ia akan dipantulkan menjadi ";", yang mencetak karakter ascii yang sesuai dengan sel memori saat ini% 256. 1064% 256 = 40, nilai ascii untuk "(". Saya harap ini menjawab pertanyaan Anda.
Biru

Terima kasih. Ya itu. Saya kira ini lebih merupakan bahasa untuk digunakan sebagai cara menguji otak Anda. Daripada cara menulis program itu? Menarik.
Fogmeister

@ Fogmeister ada banyak bahasa pemrograman esoteris yang lebih banyak latihan memutar otak daripada berguna untuk melakukan pekerjaan nyata, meskipun mereka BISA melakukan pekerjaan nyata jika Anda berusaha cukup keras.
Sparr

12

Cinnamon Gum, 7 byte

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

Cobalah online.

Sudah 6 byte dengan psintaks lama : /

Penjelasan

Dekompres ke p~=~(:)-, ppanggung kemudian hanya membaca input dan mengulangi =n kali.


Bisakah Anda menautkan ke spesifikasi bahasa untuk ini?
Robert Fraser

@RobertFraser Saya tidak memiliki spesifikasi formal atau dokumentasi apa pun saat ini, tetapi Anda dapat memeriksa sumbernya di repo GitHub: github.com/quartata/cinnamon-gum
a spaghetto

12

Brian & Chuck , 31 byte

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

Input dalam bentuk nilai byte , jadi mis. Input !memberikan panjang ular 33.

Cobalah online!

Sudah lama ...

Penjelasan

Primer Brian & Chuck yang cepat:

  • Baris pertama dari program ini adalah Brian, yang kedua adalah Chuck.
  • Brian dan Chuck adalah dua contoh seperti Brainfuck. Tangkapan utama adalah bahwa program Chuck adalah rekaman Brian dan sebaliknya. Kaset kepala / penunjuk petunjuk mulai pada sel pertama dari setiap rekaman dan eksekusi dimulai pada Brian.
  • Adapun perintah, ada beberapa perbedaan. Hanya Brian yang dapat menggunakan ,(input) dan hanya Chuck yang dapat menggunakan .(output). Selain <dan >ada {dan }yang memindahkan kepala kaset ke sel nol berikutnya (atau dalam kasus {ke ujung kiri kaset jika tidak ada sel nol di jalan). Alih-alih [...], satu-satunya aliran kontrol ?yang beralih kontrol ke contoh lain jika sel saat ini adalah nol. Instruksi pertama yang dieksekusi pada sel lain adalah yang setelah kondisi. Dan akhirnya, _hanyalah alias untuk null-byte, untuk kenyamanan.

Sekarang kodenya. Brian mulai dengan ini:

,{-?

Ini membaca input ke sel pertama Chuck, kemudian memindahkan kepala kaset ke kiri dengan {(tidak melakukan apa-apa sekarang) dan mengurangi input dengan -sebelum beralih kontrol untuk Chuck jika nilainya masih nol. Ini memulai loop utama. Chuck kemudian menjalankan bit ini:

}<<.{?

Ini menggerakkan kepala pita pada Brian sampai akhir, memindahkan dua sel ke kiri =dan mencetaknya di depan kepala pita sepenuhnya ke kiri dan mengalihkan kendali kembali ke Brian. Beginilah umumnya loop bekerja dalam B&C.

Setelah input dikurangi menjadi nol, ?kaset Brian tidak akan melakukan apa pun. Kemudian Brian mengeksekusi bagian ini:

>}-):(=?

The ):(=tidak-ops, sehingga kode yang sebenarnya hanya >}-?. Kami pindah dari sel nol dengan >, naik ke _dengan }, menurunkannya untuk membuatnya tidak nol dan beralih ke Chuck ?. Kemudian bit terakhir pada Chuck dijalankan:

<.<.<.<.<.

Ini cukup mencetak lima karakter di depan Chuck, yaitu =(:)-. Perhatikan bahwa kita perlu mencetak yang lain =karena loop utama hanya dilakukan N-1kali untuk input N.


10
Selamat atas 100k
Gila


6

Retina , 10 byte

.+
$*=(:)-

Cobalah online!

Ini adalah penggantian regex sederhana.

Cocok dengan .+yang cocok dengan seluruh input, dan kemudian gantikan dengan $*=(;)-.

Ini $*adalah fitur unik di Retina: ini adalah operator khusus pengulangan karakter.

Sebagai contoh, 5$*xakan menjadi xxxxx.

Dalam hal argumen sebelumnya tidak ada, seluruh kecocokan digunakan sebagai argumen default.


5

Python, 21 byte

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

Ide itu!


Anda dapat memotong 3 byte dengan melakukan:"="*input()+"(:)-"
gowrath

@gowrath Maka tidak akan mencetak apa pun
Leaky Nun

Ini akan menampilkannya jika Anda dalam penerjemah, bukan? Op mengatakan Anda bisa mendapatkan output dengan cara apa pun.
gowrath

@gowrath Anda tidak dapat berasumsi bahwa kami berada di REPL
Leaky Nun

Apakah itu aturan umum untuk bermain golf kode? Baru di sini :)
gowrath

5

Haskell, 25 byte

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

'='<$[1..n]setara dengan replicate n '='.


5

Java 8, 52 byte

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

Suite uji. (Kompilasi> Jalankan)

Kredit .

cara tradisional, 61 54 53 byte

7 byte berkat Kevin Cruijssen.

Terima kasih 1 byte untuk Dom Hastings.

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

+1 Oh, dan untuk yang tradisional: for(int i=0;i<n;i++)dapat digunakan untuk golf for(;n>0;n--), karena Anda tidak memerlukan input untuk apa pun selain for-loop.
Kevin Cruijssen

@KevinCruijssen Terima kasih, diedit
Leaky Nun

Pengujian melalui tautan yang Anda berikan sepertinya Anda dapat mengubah loop for ke: for(;n-->0;)untuk menyimpan byte lain!
Dom Hastings

@HomHastings diedit dengan ucapan terima kasih
Leaky Nun


4

C, 38

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

Cobalah di ideone.


1
Tidak lebih pendek, tapi lebih dingin: f(n){~-printf(n?"=":"=(:)-")||f(~-n);}.
orlp

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

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ - Itu tidak menampilkan kepala.
owacoder

@owacoder Yah, C bukan bahasa utama saya ...
Erik the Outgolfer

1
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Dan itu sebabnya Anda tidak boleh memposting saran golf yang belum diuji (terutama jika Anda membutuhkan waktu 5 detik untuk menguji saran Anda dengan tautan yang disediakan dalam jawaban).
Martin Ender

4

05AB1E, 10 9 byte

'=×"ÿ(:)-

Penjelasan

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

Cobalah online

1 byte disimpan berkat Adnan.


'=×"ÿ(:)-untuk 9 byte :). Ini menggunakan interpolasi string.
Adnan

1
@ Adnan: Aaah, jadi begitu ÿya :)
Emigna

4

Javascript, 23 byte

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

1
Saya baru saja memposting kode itu! Kalahkan aku! Punya suara
positif

Hari ini saya belajar tentang fungsi panah . Terima kasih. Tidak tahu itu sesuatu
bobkingof12vs

Bagaimana Anda menyebut instance fungsi itu? Saya baru saja mencoba n(3)dan menerima Uncaught ReferenceError: n is not definedkesalahan ...
WallyWest

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

@ eithedog Maka bukankah seharusnya jawabannya memiliki awal x=dan diubah menjadi 25 karakter?
WallyWest

4

C #, 28 byte

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

Saya selalu tertarik dengan potongan lambda. bagaimana Anda bisa menjalankan ini?
downrep_nation

@downrep_nation mengambil int dan secara otomatis mengembalikan string karena hanya satu pernyataan
TheLethalCoder

Jawabannya harus berupa program atau fungsi lengkap, bukan hanya cuplikan. Jadi jawaban ini sepertinya tidak lengkap.
raznagul

@raznagul Ini adalah fungsi anonim oleh karena itu selesai
TheLethalCoder

@TheLethalCoder: Mungkin mencoba tautan daring akan membantu memahaminya. ( csharppad.com )
raznagul

4

Python , 24 byte.

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

input() mendapat masukan dari pengguna

*, ketika digunakan pada string dan integer, membuat string baru, yang terbuat dari salinan asli. Misalnya: "hello "*3keluaran hello hello hello.

Dengan mengalikan =dan input(), Anda mendapatkan string =dengan panjang yang ditentukan pengguna.

Menggunakan +gabungan dua string, dalam hal ini, tubuh "=…="kita dengan kepala kita, "(:)-"untuk membuat ular.

print menampilkan hasilnya.


3

GolfScript, 11 10 byte

~"="*"(:)-"

Kalikan "=" dengan input, dan tambahkan head.

-1 terima kasih kepada Leaky Nun


3

Mathematica, 21 20 byte

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

Fungsi anonim. Mengambil angka n sebagai input, dan mengembalikan ular panjang n sebagai output. "="~Table~#menghasilkan daftar {"=", "=", ..., "="}panjang n , dan <>"(:)-"menggabungkan elemen-elemen daftar dan menambahkan "(:)-"ke string yang dihasilkan.


1
golfable dengan satu byte lagi:"="~Table~#<>"(:)-"&
LLlAMnYP

3

R, 32 27 byte

Solusi ini cukup mudah, repfungsi mengulang elemen pertama ( "=") scan()kali, yang sebenarnya merupakan input pengguna.

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

EDIT :

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

Jawabannya sedikit lebih pendek, menggunakan scan()langsung.

Kalau tidak,

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

untuk ular tanpa cincang ( 34 byte )


Aku akan mengatakan sep=""yang dibutuhkan di sini, jika tidak ular penampilan Anda seperti yang dilalui kereta api: = = = (:)-.
manatwork

Ular yang diproduksi di sini memang sedikit cincang, tetapi OP hanya menyatakan bahwa panjang ular adalah jumlah tanda yang sama di depan kepala. Saya akan menambahkan sepsebagai catatan samping;)
Frédéric

3

Batch, 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*~'(:)-'

Penjelasan:

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

Pemakaian:

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

Diuji dengan JAISBaL-0.0.7 (.jar yang dikompilasi baru saja didorong, tetapi sumbernya telah naik pada git untuk sementara waktu)


Gunakan #sebelum nama bahasa untuk membuatnya terlihat seperti orang lain.
Michael Klein

@MichaelKlein oke
Socratic Phoenix

2

PowerShell v2 +, 19 byte

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

Program lengkap. Mengambil input $args[0], menggunakan perkalian string untuk membangun tubuh, kemudian merangkai string untuk menempel di kepala.

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

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

Kudos kepada Anda, saya mendapat sejauh 26:"$("="*[int]$args[0])(:)-"
Chirishman

2

C, 46 45 43 byte

disimpan 2 byte berkat owacoder! disimpan 3 byte berkat rici!

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

Cobalah di Ideone!


3
-->Operator misterius itu menyerang lagi.
Leaky Nun

@LeakyNun versi 46 byte tanpa pergi ke operator, daripada yang saya ingat pergi ke operator;)
betseg

1
Anda dapat menghapus >0dan menyimpan dua byte.
owacoder

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

2

Cheddar, 15 byte (tidak bersaing)

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

Jawaban langsung.


1

Sesos , 11 byte

Hexdump:

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

Cobalah 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#"=";"(:)-"]}

Contoh;

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

Penjelasan;

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

Apa itu -1(... );?
Adám

Simpan satu byte:{(x#"="),"(:)-"}
Adám

Terima kasih Adam. -1 Mencetak ke konsol. -1 "Halo"; akan mencetak Hello
Chromozorz

Tapi bukankah mencetak tersirat?
Adám

Ya tapi itu termasuk tanda kutip ganda ... "==== (:) -" daripada; ===== (
:)

1

Perl, 16 + 1 ( -pbendera) = 17 byte

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

Membutuhkan -pflag, jadi jalankan dengan:

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

1

Minkolang 0,15 , 12 byte

"=(:)-"nD$O.

Coba di sini!

Penjelasan

"=(:)-"         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 byte

Mengambil input numerik dari pengguna, lalu mencetak ular.

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

1

Matlab / Oktaf, 22 byte

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

Ini adalah fungsi anonim.

Cobalah di Ideone .

Penjelasan

Asumsikan n= 5.

1:nmenghasilkan vektor baris [1 2 3 4 5].

~(1:n)meniadakan setiap entri, sehingga memberi [0 0 0 0 0].

...+61menambah 61setiap entri, sehingga memberi [61 61 61 61 61]. 61adalah nilai karakter ASCII =.

[... '(:)-']menyatukan itu dengan string '(:)-'. Ini secara otomatis dikonversi [61 61 61 61 61]ke string '====='sebelum penggabungan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.