Her yerde yılanlar


12

Meydan okuma

Zor basit: bir yılan yazdırın .
Giriş olarak yılanın uzunluğunu elde edersiniz.
Uzunluğu 2 olan bir yılan şöyle görünür:

==(:)-

Uzunluğu 7 olan bir yılan şöyle görünür:

=======(:)-

Başka bir deyişle, bir yılanın uzunluğu kafadan önce kaç eşit işarettir .

kullanım

Diyelim ki bir C ++ uygulaması yaptım ve derledim ./getsnake.
Ben böyle çalıştırmak olabilir:

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

Açıklamalar

  • Standart boşluklara izin verilmez.
  • Kabul edilebilir herhangi bir şekilde girdi ve çıktı alabilirsiniz.
  • Verilen tüm girdilerin pozitif tamsayı olduğunu varsayabilirsiniz.
  • Normal bir program yerine bir işlev yazabilirsiniz.

8
Sadece yarım saat boyunca Sandbox'ta bir meydan okuma bırakmak işe yaramaz. Biraz geri bildirim aldınız, ancak genellikle 24-72 saat boyunca Sandbox'ta bırakmak en iyisidir. (Ayrıca, "Kökenler" bölümünü etmelisiniz veya kaldırmalısınız.)
El'endia Starman

Bir işlev yeterli mi yoksa tam bir program mı istiyorsunuz?
betseg

@betseg işlevi yeterlidir
InitializeSahib

4
Korkarım My Squiggly Lamp cevapları zahmetsizce taşınabilir.
manatwork

3
Negatif tamsayı yılanın kendisini yutmasına neden olmalıdır.
GuitarPicker

Yanıtlar:


18

Altıgen , 33 bayt

Kazanmayacak, ama yine de havalı. Daha fazla golf oynayabilir.

Çevrimiçi deneyin!

golfed:

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

biçimlendirilmiş:

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

Renkli ( Timwi'nin Hexagony Renklendirici kullanılarak üretilmiştir )

u gizli gizli buldum!  ======= () -

Açıklama:

Döngü, sayaç 0'a ulaşıncaya kadar "=" çıktısını alın.

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

Yazdır "("

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

Yazdır ":"

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

Yazdır ")"

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

Yukarıdaki değerler basit bir python betiği kullanılarak oluşturulmuştur. Ancak, tür "-" için oda tükendi. Bu yüzden, daha gelişmiş numaralara başvurmak zorunda kaldım.

Program ")" çıktısını aldığında, hücrenin değeri 41 değil, 1065'tir. Hexagony, yazdırma sırasında yalnızca değeri değiştirir. Anlaşıldığı üzere, (1065 * 1000 + 4)% 256 = 44, 45'ten sadece bir tane, "-" için ascii değeri. Ardından, yazdırdıktan sonra bir yere @ ekler, yazdırır ve eklerim.

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

.J4 /; ... Yazdır "(" ??? .j4 / 'nin hangi kısmı baskıdır ve hangi kısmı yazdırılacaktır?
Fogmeister

2
@Fogmeister [Part 1/2] Hexagony'de herhangi bir alfabetik karakter, geçerli bellek hücresinin değerini, o karakterin ascii değerine ayarlar. "j" değeri ascii değeri 106'dır, bu nedenle hafızanın değeri budur. Ayrıca, sayısal karakterler mevcut hücrenin değerini 10 ile çarpar, sonra kendilerini buna ekler (bu, başlangıçta 61 gibi sayıların kolay oluşturulmasına izin verir.
Blue

3
[Bölüm 2/2] Böylece, j4 bellek hücresini 1064 olarak ayarlar. IP "/" değerine ulaştığında, geçerli bellek hücresine karşılık gelen ascii karakterini yazdıran ";" biçimine yansıtılır% 256. 1064% 256 = 40, "(" için ascii değeri. Umarım bu soruya cevap verir.)
Blue

Teşekkürler. Evet öyle. Sanırım bu, beyninizi test etmenin bir yolu olarak kullanılacak bir dildir. O zaman program yazmanın bir yolu değil mi? İlginç.
Fogmeister

@Fogmeister , yeterince çalıştığınız takdirde gerçek iş yapabilmelerine rağmen, gerçek iş yapmak için yararlı olmaktan çok beyin bükme egzersizleri olan birçok ezoterik programlama dili vardır.
Sparr

12

Tarçın Sakızı, 7 bayt

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

Çevrimiçi deneyin.

Eski psözdizimi ile 6 bayt olurdu : /

açıklama

Sıkıştırır p~=~(:)-, psahne daha sonra girişi okur ve =n kez tekrarlar .


Bunun için dil spesifikasyonlarına bağlantı verebilir misiniz?
Robert Fraser

Ben resmi bir şartname veya şu anda herhangi bir belgelerine yok ama GitHub'dan azından, kaynak kontrol edebilirsiniz @RobertFraser Repo: github.com/quartata/cinnamon-gum
Bir Spaghetto

12

Brian ve Chuck , 31 bayt

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

Bir bayt değeri biçiminde girdi, yani girdi !33 boyunda bir yılan verir.

Çevrimiçi deneyin!

Bir süre oldu ...

açıklama

Hızlı Brian & Chuck astarı:

  • Programın ilk satırı Brian, ikincisi Chuck.
  • Brian ve Chuck, Brainfuck benzeri iki örnektir. Ana yakalama, Chuck'ın programının Brian'ın kaseti olduğu ya da tam tersi. Kaset kafaları / talimat işaretçileri her kasetin ilk hücresinde başlar ve Brian üzerinde uygulama başlar.
  • Komutlara gelince, birkaç fark var. Sadece Brian ,(giriş) kullanabilir ve sadece Chuck .(çıkış) kullanabilir . İlave olarak <ve >orada {ve }bir sonraki sıfır hücreye bant başını hareket ettiği (veya halinde {bant sol ucuna giderken bir sıfır hücre yoksa). Bunun yerine [...], tek kontrol akışı, ?geçerli hücre sıfırdan farklıysa kontrolü diğer örneğe geçirir. Diğer hücrede ilk yürütülen talimat, koşuldan sonraki talimattır. Ve son olarak, _sadece boş bayt için, kolaylık sağlamak için bir takma addır.

Şimdi kod. Brian bununla başlar:

,{-?

Bu, girişi Chuck'ın ilk hücresine okur, ardından bant kafasını sola hareket ettirir {(şu anda hiçbir şey yapmaz) ve -değer hala sıfır değilse Chuck için kontrolü değiştirmeden önce girişi azaltır . Bu ana döngüyü başlatır. Chuck daha sonra bu biti çalıştırır:

}<<.{?

Bu, Brian üzerindeki bant kafasını sonuna kadar hareket ettirir, kalan iki hücreyi üzerine taşır =ve bant kafasından önce sola doğru yazdırır ve kontrolü Brian'a geri döndürür. Döngüler genellikle B&C'de bu şekilde çalışır.

Giriş sıfıra düşürüldüğünde ?, Brian'ın kasetinde hiçbir şey yapılmaz. Sonra Brian bu bölümü yürütür:

>}-):(=?

):(=Gerçek kod sadece bu yüzden, hiç op vardır >}-?. Biz sıfır hücreye kapalı hareket >yukarı taşımak, _ile }, eğer sıfır ve Chuck anahtarı ile yapmak olarak azaltmak ?. Sonra Chuck'ın son biti çalıştırılır:

<.<.<.<.<.

Bu, Chuck'ın önündeki beş karakteri basar, yani =(:)-. =Ana döngü yalnızca N-1giriş için yürütüldüğünden başka bir yazdırmamız gerektiğini unutmayın N.


10
Tebrikler 100k
Deli


6

Retina , 10 bayt

.+
$*=(:)-

Çevrimiçi deneyin!

Bu basit bir normal ifade ikamesidir.

.+Tüm girdiyle eşleşen ile eşleşir ve ardından yerine geçer $*=(;)-.

$*Retina benzersiz bir özelliktir: bu karakter tekrarlama özel operatörüdür.

Örneğin, 5$*xolur xxxxx.

Önceki bağımsız değişkenin olmaması durumunda, tüm eşleşme varsayılan bağımsız değişken olarak kullanılır.


5

Python, 21 bayt

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

Boşver!


Aşağıdakileri yaparak 3 bayt kesebilirsiniz:"="*input()+"(:)-"
gowrath

@gowrath O zaman hiçbir şey basmayacak
Leaky Nun

Eğer tercümandaysanız çıktısını alırsınız hayır? Op, herhangi bir şekilde çıktı alabileceğinizi söyledi.
gowrath

@gowrath REPL'de olduğumuzu varsayamazsınız
Leaky Nun

Bu kod golfü için genel bir kural mı? New here :)
gowrath

5

Haskell, 25 bayt

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

'='<$[1..n]eşittir replicate n '='.


5

Java 8, 52 bayt

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

Test odası. (Derleme> Yürüt)

Krediler .

geleneksel yolla, 61 54 53 bayt

Kevin Cruijssen'e 7 bayt teşekkürler.

Dom Hastings sayesinde 1 bayt.

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

+1 Oh, ve geleneksel olan için: for(int i=0;i<n;i++)golf için kullanılabilir for(;n>0;n--), çünkü for-loop dışında bir şey için girişe ihtiyacınız yok zaten.
Kevin Cruijssen

@KevinCruijssen Teşekkürler, düzenlendi
Leaky Nun

Sağladığınız bağlantı üzerinden test yapmak için for döngüsünü şu şekilde değiştirebilirsiniz: for(;n-->0;)başka bir bayt kaydetmek için!
Dom Hastings

@DomHastings teşekkür ile düzenlendi
Leaky Nun


4

C, 38

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

İdeone üzerinde deneyin.


1
Değil kısa ama soğutucu: f(n){~-printf(n?"=":"=(:)-")||f(~-n);}.
orlp

f(n){for(;n;printf(n--?"=":"(:)-"));}1 için.
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ - Bu kafa çıktı değil.
owacoder

@owacoder Şey, C benim ana dilim değil ...
Outgolfer Erik

1
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Bu yüzden test edilmemiş golf önerileri göndermemelisiniz (özellikle, cevabınızdaki bağlantıyla önerinizi test etmeniz 5 saniye sürseydi).
Martin Ender

4

05AB1E, 10 9 bayt

'=×"ÿ(:)-

açıklama

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

Çevrimiçi deneyin

Adnan sayesinde 1 bayt kurtardı.


'=×"ÿ(:)-9 bayt için :). Bu, dize enterpolasyonunu kullanır.
Adnan

1
@Adnan: Aaah, işte bu kadar ÿ:)
Emigna

4

Javascript, 23 bayt

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

1
Tam olarak bu kodu göndermek üzereydim! Beni döv! Olumlu oy al
MayorMonty

Bugün ok fonksiyonlarını öğrendim . Teşekkür ederim. Bir şey olduğunu bilmiyordum
bobkingof12vs

Fonksiyonun bu örneğini nasıl adlandırıyorsunuz? Sadece denedim n(3)ve bir Uncaught ReferenceError: n is not definedhata
aldım

@WallyWest - deneyinx=n=>"=".repeat(n)+"(:)-"; x(7);
16:11 de eithed

@eithedog O zaman cevabın baş harfi x=ve 25 karakter olarak değiştirilmemeli mi?
WallyWest

4

C #, 28 bayt

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

im hep lambda parçacıkları ile ilgileniyorum. bunu nasıl yapabilirsin?
downrep_nation

@downrep_nation bir int alır ve dizeyi otomatik olarak döndürür, çünkü tek bir deyimdir
TheLethalCoder

Cevap sadece bir pasaj değil, tam bir program veya bir işlev olmalıdır. Yani bu cevap eksik görünüyor.
raznagul

@raznagul Bu anonim bir işlevdir, bu nedenle tamamlanmıştır
TheLethalCoder

@TheLethalCoder: Belki çevrimiçi bağlantıyı denemek onu anlamaya yardımcı olacaktır. ( Csharppad.com )
raznagul

4

Python , 24 bayt.

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

input() kullanıcıdan girdi alır

*, dizelerde ve bir tamsayıda kullanıldığında, orijinalin birleştirilmiş kopyalarından oluşan yeni bir dize oluşturur. Örneğin: "hello "*3çıkışlar hello hello hello.

Çarparak =ve input(), sen bir dizi olsun =kullanıcı belirttiği bu uzunluk.

Kullanma +bu durumda, vücudumuz, iki dizeyi katılır "=…="bizim kafa ile, "(:)-"yılan yapmak.

print sonucu çıkarır.


3

GolfScript, 11 10 bayt

~"="*"(:)-"

Girdi ile "=" değerini çarpar ve kafa ekler.

-1 Leaky Nun sayesinde


3

Mathematica, 21 20 bayt

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

Anonim işlev. Giriş olarak n sayısını alır ve çıkış olarak n uzunluğunda bir yılan döndürür . n uzunluğunun "="~Table~#bir listesini oluşturur ve listenin öğelerini birleştirir ve elde edilen dizeye ekler .{"=", "=", ..., "="}<>"(:)-""(:)-"


1
bir bayt daha "="~Table~#<>"(:)-"&
golf

3

R, 32 27 bayt

Bu çözüm oldukça basittir, repfonksiyon ilk eleman ( "=") scan()kez tekrarlanır , bu aslında kullanıcının girdisidir.

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

DÜZENLE :

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

Doğrudan kullanarak çok daha kısa cevap scan().

Alternatif olarak,

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

doğranmış olmayan bir yılan için ( 34 bayt )


Diyorum ki sep=""demiryolu geçilen gibi aksi takdirde yılan görünüyor, burada ihtiyaç duyulan: = = = (:)-.
manatwork

Burada üretilen yılan gerçekten biraz kıyılmış, ancak OP'nin konsinye sadece yılanın uzunluğunun kafadan önce eşit işaretlerin sayısı olduğunu söylüyor. sepYine de bir yan not olarak ekleyeceğim ;)
Frédéric

3

Toplu, 68 bayt

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


2

Perl 6 ,  16 15  12 bayt

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

Açıklama:

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

Kullanımı:

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

put snake 10;

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

2

JAISBaL , 9 bayt

t=*Qb(:)-

ayrıntılı:

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

İle test edilmiştir JAISBaL-0.0.7 (derlenmiş .jar sadece itildi ama kaynak bir süre Git üzerinde olmuştur)


#Herkesin diline benzemesini sağlamak için dil adından önce a kullanın .
Michael Klein

@MichaelKlein okay
Phoenix

2

PowerShell v2 +, 19 bayt

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

Tam program. Girdiyi alır $args[0], gövdeyi oluşturmak için dize çarpımını kullanır, sonra kafaya yapışmak için dize birleştirmeyi kullanır.

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

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

Sana "$("="*[int]$args[0])(:)-"
şerefim

2

C 46 45 43 bayt

Owacoder sayesinde 2 bayt tasarruf etti! rici sayesinde 3 bayt tasarruf etti!

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

Ideone üzerinde deneyin!


3
Gizemli -->operatör tekrar saldırıyor.
Leaky Nun

@LeakyNun 46 bayt sürümü operatöre gider, daha önce operatöre gider;)
betseg

1
>0İki baytı kaldırabilir ve kaydedebilirsiniz.
owacoder

Biraz daha kısa:f(n){while(4-printf("=\0(:)-"+2*!n--));}
rici

2

Cheddar, 15 bayt (rakipsiz)

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

Basit bir cevap.



1

K, 17 Bayt

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

Misal;

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

Açıklama;

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

Nedir -1(... );?
Adám

Bir bayt kaydet:{(x#"="),"(:)-"}
Adám

Teşekkürler Adam. -1 Konsola yazdırır. -1 "Merhaba"; Merhaba
Chromozorz

Ancak yazdırma örtük değil mi?
Adám

Evet, ancak çift tırnak işareti içeriyor ... "==== (:) -"; ===== (
:)

1

Perl, 16 + 1 ( -pbayrak) = 17 bayt

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

İhtiyaç -pbayrak, böylece birlikte çalıştırın:

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

1

Minkolang 0.15 , 12 bayt

"=(:)-"nD$O.

Burada deneyin!

açıklama

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

Kullanıcıdan sayısal girdi alır, sonra yılanı yazdırır.

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

1

Matlab / Oktav, 22 bayt

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

Bu anonim bir işlevdir.

Ideone üzerinde deneyin .

açıklama

Varsayın n= 5.

1:nsatır vektörü üretir [1 2 3 4 5].

~(1:n)her girişi reddeder, böylece verir [0 0 0 0 0].

...+6161her girişe ekler , böylece verir [61 61 61 61 61]. 61karakterin ASCII değeridir =.

[... '(:)-']bunu dizeyle birleştirir '(:)-'. Bu , birleştirme işleminden önce otomatik olarak [61 61 61 61 61]dizeye dönüştürülür '====='.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.