Bir kardan adam kodlamak ister misiniz?


176

İşte basit bir ASCII sanat kardan adam:

_===_
(.,.)
( : )
( : )

Ona biraz arkadaş edelim. Bu, ASCII sanat kardan adamlarımızın genel yapısı olacaktır:

 HHHHH
 HHHHH
X(LNR)Y
X(TTT)Y
 (BBB)

Baştaki boşluklar ve parantezler her zaman kardan adamlar için aynıdır. Farklı harfler, desenin tek tek değiştirebilecek bölümlerini temsil eder. Her bölüm, ASCII karakterlerinin doldurması için tam olarak dört hazır ayara sahiptir. Sekiz bölümün tamamı için bu ön ayarları karıştırıp eşleştirerek, çeşitli kar yağışı yapabiliriz.

Tüm hazır ayarlar

(Boşlukların aksi taktirde boş satırlara yerleştirildiğine dikkat edin, böylece bölüm şekli her zaman doğrudur.)

H Şapka için

  1. Hasır Şapka

         
    _===_
  2. Meksika şapkası

     ___ 
    .....
    
  3. Fes

      _  
     /_\ 
    
  4. Rusça şapka

     ___ 
    (_*_)
    

N Burun / Ağız içindir

  1. Normal ,

  2. Nokta .

  3. Hat _

  4. Yok

L Sol Göz içindir

  1. Nokta .

  2. Büyük Nokta o

  3. En Büyük Nokta O

  4. Kapalı -

R Sağ Göz içindir

(Sol gözle aynı liste.)

X Sol Kol içindir

  1. Normal kol

     
    <
  2. Yukarı kol

    \
     
  3. Aşağı doğru kol

     
    /
  4. Yok

     
     

Y Sağ Kol içindir

  1. Normal kol

     
    >
  2. Yukarı kol

    /
     
  3. Aşağı doğru kol

     
    \
  4. Yok

     
     

T Torso için

  1. Düğmeler :

  2. Yelek ] [

  3. İç kollar > <

  4. Yok

B Base içindir

  1. Düğmeler :

  2. Ayaklar " "

  3. Düz ___

  4. Yok

Meydan okuma

Formatında sekiz karakterli bir karakter dizisi (stdin veya komut satırı aracılığıyla) alan bir program yazın HNLRXYTB; burada her harf 1'den 4'e kadar olan bir rakamdır ve kar sahibinin karşılık gelen bölümü için hangi ön ayarın kullanılacağını belirtir. Snowderson'ı stdout'a yazdır.

Örneğin, giriş 11114411sayfanın üstündeki kardan adamdır. (Birincisi 1: hasır şapkası var, ikincisi 1: normal bir burnu var, vs.)

Başka bir örnek, giriş için kar küreci 33232124:

   _
  /_\
\(o_O)
 (] [)>
 (   )

ayrıntılar

  • Baştaki / sondaki alanların ve sondaki / sondaki yeni satırların tüm miktarlarına ve kombinasyonlarına izin verilir.

    • Snowperson'un tüm bölümleri birbirlerine göre doğru bir şekilde düzenlenmiş durumda.
    • hiçbir zaman toplam 64'ten fazla boşluk karakteri olmaz (genel desen yalnızca 7 × 5'tir, bu nedenle muhtemelen bu sınıra ulaşmazsınız).

    Yalnızca boşluk içeriyorsa desenin satırlarını / sütunlarını yazdırmanız gerekmez. Örneğin hasır şapka boş hattı gerekli değildir.

  • Parçaların sıralamasını yukarıda verilen şekilde kullanmalısınız.

  • Bir program yerine, rakam dizesini argüman olarak alan bir işlev yazabilirsiniz. Çıktı normal şekilde yazdırılmalı veya bir dize olarak döndürülmelidir.

  • İsterseniz girişi bir dize yerine bir tamsayı olarak kabul edebilirsiniz.

puanlama

Bayt cinsinden en kısa kod kazanır.

Bonus soru: 65536 ayrı kar yağışı hangisi en sevdiğinizdir?


19
14441133 meleğini seviyorum . Alternatif olarak, küçük gözlü dört kollu canavar. Senin seçimin.
Sp3000,

14
Bir kardan adam olmak zorunda mı?

54
Bir kardan adam olmak zorunda değil. (Feragatname: Bir kardan adam olması gerekebilir)
Joshpbarron

3
Arada bir esprili yorum güzel, ancak uzun tartışmalar için lütfen yorumlar yerine sohbet kullanın. Bunu biraz temizledim.
Martin Ender

36
Daha sonra yapılacaklar: "Kod zaten beni asla rahatsız etmedi"
Calvin'in Hobileri

Yanıtlar:


39

CJam, 135 134 132 130 126 125 bayt

0000000: 4e22285b200a5c225f2a295c2d2e2f6f2c3e4f3a3c3d5d225f  N"([ .\"_*)\-./o,>O:<=]"_
0000019: 2422dd7382d6bfab28707190992f240c362ee510262bd07a77  $".s....(pq../$.6...&+.zw
0000032: 08556de9dcdb566c676817c2b87f5ecb8bab145dc2f2f76e07  .Um...Vlgh....^....]...n.
000004b: 22323536624b623224663d4e2f7b5f2c342f2f7d25723a7e2e  "256bKb2$f=N/{_,4//}%r:~.
0000064: 3d2828342423346222205f0a20222e2a6f6f736572372f4e2a  =((4$#4b" _. ".*ooser7/N*

Makinenizde dosyayı oluşturmak için xxd -r > snowman.cjam, tersinir hexdump dosyasını yukarıdan yapıştırın, yukarı Enterve Ctrl+ tuşlarına basın D.

Alternatif olarak, CJam yorumlayıcısını kullanarak kodu çevrimiçi deneyebilirsiniz .

Bonus

En sevdiğim kardan adam Olaf:

$ LANG=en_US cjam snowman.cjam <<< 12222212

 _===_
\(o.o)/
 ( : ) 
 (" ")

Kış kalmak ve kucaklamak için iyi bir zaman, ama yaz aylarında beni koyun ve ben mutlu bir kardan adam olacağım!

Fikir

Altıgen dize

dd7382d6bfab28707190992f240c362ee510262bd07a7708
556de9dcdb566c676817c2b87f5ecb8bab145dc2f2f76e07

Sabit olanlar dahil, kardan adamların tüm bölümleri için olası seçenekleri kodlar. Bu dize P diyelim .

Kodunu çözmek için P'yi (burada bir tamsayı dizisi olarak işlem görür) taban 256'dan taban 20'ye dönüştürür ve sonuçtaki her bir tam sayıyı M dizesinin karşılık gelen karakteri ile değiştiririz :

([ 
"_*)\-./o,>O:<=]

Bu T dizesinde sonuçlanır :

/(_*_)"_===_/....., /_\ 
 ,._
-.oO
-.oO
   <\  /
   >/  \
    : ] [> <
    : " "___
 ((()

İlk satır, tüm şapka seçeneklerini, son olarak da tüm sabit gövde parçalarını kodlar. Diğer çizgiler 28 değişken gövde parçasını içerir.

Bu bölme T linefeeds de ve eşit uzunlukta dört parçaya elde edilen dizinin dizeleri bölün. Daha sonra, girişi STDIN'den okuruz, 10 rakamındaki basamaklarının dizisine basar ve dizgelerin karşılık gelen elemanlarını seçeriz. Dizilerin CJam'de dolanmasından yararlanıyoruz, bu nedenle 4 dizisinin 4. dizinindeki öğe aslında ilk öğedir. Son bölünmüş dize hiçbir girişe karşılık gelmez, bu yüzden tamamen seçilecektir.

İlk elemanı, sonuçtaki diziden kaydırarak şapkayı ele alıyoruz. 4 karakterde okunan ilk karakterin M deki indeksi , şapkanın ilk satırındaki boşluk ve alt çizgi sayısını gösterir. Bu karakterleri, satır beslemesini, boşluğu ve kaydırılan dizginin kalanını yazdırırız. Sonra, yığının altına ek bir satır besleme iter.

Gövde parçaları için, hepsine karşılık gelen dizgiyi birleştirdik. Bu dizeye S diyelim . Gövde parçalarını monte etmek için, harf çevirisi yaparız: M dizisinin her karakterini alırız, dizini M (M) cinsinden hesaplar ve karşılık gelen S karakteriyle değiştiririz . Harf çevirisi operatörünün , S'nin son karakterini gerektiği kadar tekrarlayarak, (M) türünün uzunluğuna uyması için otomatik olarak S'yi doldurması gerçeğinden faydalanırız .

Son olarak, elde edilen dizgiyi 7 uzunluğundaki alt dizgilere bölüyoruz ve her iki alt dizinin arasına bir satır beslemesi yerleştiriyoruz.

kod

Değişkenlerin Mve M ve PP dizelerinin içerdiğini varsayalım .

N        e# Push a linefeed.
M_$      e# Push M and a sorted copy.
P256bKb  e# Push P and convert it from base 256 to base 20.
2$       e# Push a copy of M.
f=       e# Compute T by retrieving the proper chars from M.
N/       e# Split T at linefeeds.
{_,4//}% e# Divide each string into four substrings of equal length.
r:~      e# Read a number from STDIN and push the array of its digits in base 10.
.=       e# Get the corresponding chunks from T.
((       e# Shift out the first string and that string's first character.
4$#      e# Find its index in M.
4b       e# Compute its digits in base 4.
" _
 ".*     e# Repeat the space and underscore that many times in place.
oo       e# Print the result and the shifted string.
s        e# Flatten the remainder of the array. This pushes S.
er       e# Perform transliteration.
7/       e# Split into chunks of length 7.
N*       e# Join using linefeeds.

60

JavaScript ES6, 210 208 202 bayt

s=>` 0
8(213)9
4(6)5
 (7)`.replace(/\d/g,p=>`_===_1 ___
 .....1  _
  /_\\1 ___
 (_*_)1,1.1_11.1o101-1.1o101-1<11/11>11\\11 : 1] [1> <1   1 : 1" "1___1   11\\11 11/11 `.split(1)[s[p>7?p-4:p]-1+p*4]||' ')

Bu anonim bir işlevdir; yürüterek kullanırsınız ([function code])('42232124'). Bunun en ağırlaştırıcı kısmı 2 satır alan kollardı, bu yüzden üst ve alt için kod eklemek zorunda kaldım.

Aşağıdaki Yığın Parçacığı ESG un-unied ungolfed, kodunu yorumladı. Ayrıca kodu kolayca test etmek ve farklı kombinasyonları denemek için kullanabilirsiniz. Düzenleme: Bununla çok eğleniyorum. Rastgele bir kardan adam oluşturmanın bir yolu da dahil olmak üzere birçok yeni özellik ekledim.

Altı bayt kaydettiğiniz için Yair Rand'a teşekkür ederiz.

var f=function(s){
  return' 0\n8(213)9\n4(6)5\n (7)' // Start with a placeholder string with all the static components
    .replace(/\d/g,function(p){ // Go through each placeholder number to replace it with its value
    // The massive string below holds all the possible body parts, separated by 1 for easy splitting.
    // The two at the end are for the top of the arms
    return'_===_1 ___\n .....1  _\n  /_\\1 ___\n (_*_)1,1.1_11.1o101-1.1o101\
-1<11/11>11\\11 : 1] [1> <1   1 : 1" "1___1   11\\11 11/11 '.split(1)
    [s[p>7?p-4:p]-1 // Get the value from the input string. If the current body part
                    // is the top of the two-line arms (8 or 9), drop it down to 4 or 5
                    // Subtract 1 to account for the 0-indexed array.
     +p*4] // multiply by 4 to skip to the relevant code
     ||' ' // To save bytes in the above string, spaces are empty strings, so replace them here
  })
}

// Code for the interactive version follows
// http://codepen.io/hsl/pen/bdEgej
function updateRadios(){$('input[type="radio"]').each(function(){if($(this).is(":checked")){var t=$(this).data("p"),i=$(this).data("v");input[t]=i}}),inputS=input.join(""),update()}var input=[],inputS=$("#code").val(),update=function(){$("#p").text(f(inputS)),$("#code").val(inputS)};$('input[type="radio"]').change(updateRadios),$("#code").keyup(function(){inputS=$(this).val(),update()}),updateRadios(),$("#random").click(function(){for(var t=0;8>t;t++)$("div:eq("+t+") input:eq("+Math.floor(4*Math.random())+")").prop("checked",!0);updateRadios()});
body{font-family:sans-serif}h2{font-size:18px;font-weight:400}label{display:block}div{display:inline-block;margin:0 10px}#code{width:70px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div><h2>Hat</h2><label><input type="radio" name="p1" data-p="1" data-v="1"> Straw hat</label><label><input type="radio" name="p1" data-p="1" data-v="2"> Mexican hat</label><label><input type="radio" name="p1" data-p="1" data-v="3"> Fez</label><label><input type="radio" name="p1" data-p="1" data-v="4" checked> Russian hat</label></div><div><h2>Nose/mouth</h2><label><input type="radio" name="p2" data-p="2" data-v="1"> Normal</label><label><input type="radio" name="p2" data-p="2" data-v="2" checked> Dot</label><label><input type="radio" name="p2" data-p="2" data-v="3"> Line</label><label><input type="radio" name="p2" data-p="2" data-v="4"> None</label></div><div><h2>Left eye</h2><label><input type="radio" name="p3" data-p="3" data-v="1"> Dot</label><label><input type="radio" name="p3" data-p="3" data-v="2" checked> Bigger dot</label><label><input type="radio" name="p3" data-p="3" data-v="3"> Biggest dot</label><label><input type="radio" name="p3" data-p="3" data-v="4"> Closed</label></div><div><h2>Right eye</h2><label><input type="radio" name="p4" data-p="4" data-v="1"> Dot</label><label><input type="radio" name="p4" data-p="4" data-v="2"> Bigger dot</label><label><input type="radio" name="p4" data-p="4" data-v="3" checked> Biggest dot</label><label><input type="radio" name="p4" data-p="4" data-v="4"> Closed</label></div><div><h2>Left arm</h2><label><input type="radio" name="p5" data-p="5" data-v="1"> Normal</label><label><input type="radio" name="p5" data-p="5" data-v="2" checked> Upwards</label><label><input type="radio" name="p5" data-p="5" data-v="3"> Downwards</label><label><input type="radio" name="p5" data-p="5" data-v="4"> None</label></div><div><h2>Right arm</h2><label><input type="radio" name="p6" data-p="6" data-v="1" checked> Normal</label><label><input type="radio" name="p6" data-p="6" data-v="2"> Upwards</label><label><input type="radio" name="p6" data-p="6" data-v="3"> Downwards</label><label><input type="radio" name="p6" data-p="6" data-v="4"> None</label></div><div><h2>Torso</h2><label><input type="radio" name="p7" data-p="7" data-v="1"> Buttons</label><label><input type="radio" name="p7" data-p="7" data-v="2" checked> Vest</label><label><input type="radio" name="p7" data-p="7" data-v="3"> Inward arms</label><label><input type="radio" name="p7" data-p="7" data-v="4"> None</label></div><div><h2>Base</h2><label><input type="radio" name="p8" data-p="8" data-v="1"> Buttons</label><label><input type="radio" name="p8" data-p="8" data-v="2"> Feet</label><label><input type="radio" name="p8" data-p="8" data-v="3"> Flat</label><label><input type="radio" name="p8" data-p="8" data-v="4" checked> None</label></div><br><button id="random">Randomize</button><pre id="p"></pre><input type="text" id="code">


3
+1 Çok akıllı, benimkinden çok daha iyi
edc65

23
'GUI' oldukça lanet olası.
Topher

7
Sweet, 8 gözlü örümcek kardan adamına bakın: 22112333
Claudiu

1
Uyuyan Rus baykuşunu seviyorum: 41444442
ETHproductions

1
Bir yuvadaki ( 1 1-> 11) her bir boşluğu kaldırarak ||' 've sonuna ekleyerek altı bayttan tasarruf edebilirsiniz .
Yair Rand

30

CJam, 164 bayt

Soldan sağa, yukarıdan aşağıya kardan adam oluşturur. Bu, kardan adamların her bir parçasını yığının üzerinde bıraktığım için her türlü ip birleştirme veya yeniden konumlandırma işlemine duyulan ihtiyacı ortadan kaldırıyor. Ve sonra, programların sonundaki otomatik yığın dökümü nedeniyle:

CJam kardan adam yapmak istiyor!

q:Q;SS"
 _===_,___
 ....., _
  /_\,___
 (_*_)"',/0{Q=~(=}:G~N" \ "4G'(".oO-"_2G",._ "1G@3G')" / "5GN"< / "4G'(" : ] [> <   "3/6G')"> \ "5GNS'(" : \" \"___   "3/7G')

Çevrimiçi deneyin.

Bonus

Kutunun dışında düşünmek! 32443333kar (wo) adam gelini verir. Görmek için biraz denemek zorundasın, ama içeride kollar var, fez + aşağı kollar = peçe ve kafa aslında fez / peçe içinde. Genel olarak büyük form dalgalı elbisedir ve "gözler" ve "burun" elbise içindeki kıvrımlardır.

   _
  /_\
 (-.-) 
/(> <)\
 (___)

Diğer "göz" seçenekleri biraz risklidir ...


17
Bana göre, bonusunuz bir gelinden çok bir KKK üyesine benziyor.
ace_HongKongIndependence

26

Python, 276 289 bayt

V='.oO-'
def F(d):
 D=lambda i:int(d[i])-1
 print"  "+("","___"," _ ","___")[D(0)]+"\n "+\
"_. (=./_=._*=.\\__. )"[D(0)::4]+"\n"+\
" \\  "[D(4)]+"("+V[D(2)]+',._ '[D(1)]+V[D(3)]+")"+" /  "[D(5)]+'\n'+\
"< / "[D(4)]+"("+" ]> :    [< "[D(6)::4]+")"+"> \\ "[D(5)]+"\n ("+\
' "_ : _  "_ '[D(7)::4]+")"

Bu kod \okunabilirlik için 8 ekstra bayta ( * 4) sahiptir.

Kardan adamı yavaş yavaş kurar.

Bonus

F("44444432") "uykulu rus ayısı" veriyor:

  ___    
 (_*_)
 (- -)
 (> <)
 (" ")

13
Uykulu rus ayı da benim favorim.
Calvin'in Hobileri

1
Üst sıradaki alt çizgi, fes ve rus şapkalarında doğru görünmüyor. örn. İtici bir şapka veriyor ..
Calvin'in Hobileri

@ Calvin's Hobbies: Rus şapkası iyiydi ama fes şapkası berbattı. Şimdi düzelttim ve diğer tüm durumları da kontrol ettim. Gelecekte daha dikkatli olmalıyım!
Claudiu

partiye süper geç, ama bu TIO bunun benim için 297 olduğunu söylüyor. Intellij, 299 diyor.
snowe

21

Python 2, 354 280 241 261 bayt

def s(g):H,N,L,R,X,Y,T,B=[int(c)-1for c in g];e='.oO-';print(' '*9+'_ _ ___ _ _\n\n\n\n    _. (=./_=._*=.\\__. )')[H::4]+'\n'+' \\  '[X]+'('+e[L]+',._ '[N]+e[R]+')'+' /  '[Y]+'\n'+'< / '[X]+"("+' ]> :    [< '[T::4]+')'+'> \\ '[Y]+'\n ('+' "_ : _  "_ '[B::4]+")"

Çağrı s('33232124')verir:

   _ 
  /_\ 
\(o_O) 
 (] [)>
 (   )

Ancak favorilerim 44242123ve 41341144:

  ___      ___
 (_*_)    (_*_)
\(o -)    (O,-) 
 (] [)>  <(   )>
 (___)    (   )

1
Yaparken s('33232124')fes slashes çizilmez. Aslında, şapkanın alt yarısı birçok durumda eksiktir. Ayrıca, 0seçeneklerden biri değil.
Calvin'in Hobileri

@ Calvin's Hobbies Teşekkürler, tamir ettim.
Cees Timmerman

20

CJam, 150 145 bayt

Base her şeyi dönüştürün !

"b8li'
U9gN;|"125:Kb8bl:~f="r  pL|P3{cR`@L1iT"Kb21b"G.HMtNY7VM=BM@$^$dX8a665V"KbFb"=_./ <[(*-oO,\":"f=_"/<[(""\>])"er+4/f=.=7/N*

SE yazdırılamaz yazdırır , bu yüzden burada Pastebin bir kopyası. Satır numaralarının yanındaki kısmı değil, "RAW Veri Yapıştır" kısmını kopyaladığınızdan emin olun. Şunları yapabilirsiniz çevrimiçi denemek ama permalink bazı tarayıcılarda çalışmayabilir.

açıklama

"b8li'U9gN;|"125:Kb8bpBölüm dizisi oluşturur

[1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 2 1 3 0 5 4 0 6 6 6 0 5 0 0 7 7 7 0]

Bu, girişin her basamağını, basamağın kullanıldığı yere eşler. Tüm girdiler için ortak olan her şeye (örneğin, öncü boşluklar ve ()), temel dönüştürücünün çalışabilmesi için 1 atanmış olan dışında, isteğe bağlı olarak 0 atanır.

l:~f=sonra her basamağı bir int'ye dönüştürür ve buna göre eşler, örneğin 14441133biz

[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 2 4 1 2 1 1 3 3 3 1 2 1 1 4 4 4 1]

"G.HMtNY7VM=BM@$^$dX8a665V"KbFb"=_./ <[(*-oO,\":"f= dize verir

"_=./  /  < /  [<(((((_. _ _     _ __*=._-.oO ,._  \"_ :   : _"

bundan sonra biz çoğaltmak yerine /<[(sahip \>])ve uzun dize vermek ekleyin. Daha sonra dizgiyi 4 gruba ayırır ve başka bir diziye göre eşleriz "r pL|P3{cR`@L1iT"Kb21b, böylece her hücrede olası tüm seçenekleri tanımlayan bir uzunluk-4 dizisi elde _=./ederiz (örneğin , ikinci satırdaki ikinci karakter için tüm olası seçenekler, yani Rus şapka).

Sonunda seçenekleri buna göre girişlere eşler .=, uzunluk 7'ye bölünür 7/ve bazı yeni hatlara gireriz N*.

Test çalıştırması

11111111

 _===_ 
 (.,.) 
<( : )>
 ( : )

22222222
  ___  
 ..... 
\(o.o)/
 (] [) 
 (" ")

33333333
   _   
  /_\  
 (O_O) 
/(> <)\
 (___)

44444444
  ___  
 (_*_) 
 (- -) 
 (   ) 
 (   )

19

TI-BASIC, 397 bayt

Önemli: Bunu test etmek istiyorsanız, buradan indirin ve bu dosyayı hesap makinenize gönderin. Do not TI-Bağlan CE'nin programı editörü veya SourceCoder 3 veya oluşturmak ve hesap göndermek için bir şey haline aşağıdaki kodu kopyalayıp deneyin; TI-Connect'in durumunda geçersiz bir belirteci olduğunu söyler. SC3 ters eğik çizgiyi yorum sınırlayıcı olarak kullanır ( //SC3'te bir yorum başlatır; /\/ancak yine de dışa aktarır //) ve böylece kolları ve şapkayı ve böylece doğru şekilde dışa aktarmaz, böylece programın hem yanlış gövde parçalarını göstermesine hem de HATA: DOMAIN her şimdi ve sonra. Eğlenceli şeyler!

Önemli # 2: İndirme işlemini şu anda düzeltmek için çok tembelim, bu nedenle hesaplamayı hesabınıza aktarırken 7, üçüncü satırda alttan üste doğru değiştirin X+6. Karşılaştırma yapmanız gerekirse aşağıdaki kod sabittir.

Input Str9
seq(inString("1234",sub(Str9,I,1)),I,1,length(Ans→L1
"      ___   _   ___ →Str1
"_===_..... /_\ (_*_)→Str2
",._ →Str3
"•oO-→Str4
"<\/ →Str5
">/\ →Str6
" : ] [> <   →Str7
" : ¨ ¨___   →Str8
"Str1Str2Str3Str4Str5Str6Str7Str8→Str0
For(X,3,5
Output(X,2,"(   )
End
L1
Output(3,3,sub(Str4,Ans(3),1)+sub(Str3,Ans(2),1)+sub(Str4,Ans(4),1
Ans(5
Output(4-(Ans=2),1,sub(Str5,Ans,1
L1(6
Output(4-(Ans=2),7,sub(Str6,Ans,1
L1-1
For(X,1,2
Output(X+3,3,sub(expr(sub(Str0,X+6,1)),1+3Ans(X+6),3
Output(X,2,sub(expr(sub(Str0,X,1)),1+5Ans(1),5
End

Bonus: Özellikle düşkünüm 12341214.

 _===_
 (O.-)/
<( : )
 (   )

Bazı notlar:

  • Kesinlikle daha fazla golf oynayabilir, bunun hakkında soru yok. Çıktının çoğunluğunu, hepsi olmasa da, tek bir For (döngü) olarak birleştirebildiğim için neredeyse pozitifim. Ayrıca bazı dizeleri bir araya getirebileceğimden de eminim.
  • Str4'te (gözler) [2ND] → [0]CATALOG → [3]θ → scroll down, it's between ﹢ (small plus) and · (interpunct)Bir döneme zıt olarak "arsa noktasını" ( ) kullanırım, böylece gözler virgülle aynı hizada olmaz, çünkü bu cehennem gibi garip görünüyor.
  • Str8'de (tabanda) çift tırnak işareti yerine bir diaerez (¨) kullanmak zorunda kaldım çünkü TI-BASIC'de karakterlerden kaçmanın yolu yoktu ve karakterleri başlatmak / bitirmek için çift tırnaklar kullanılıyordu.
  • TI-BASIC’de, parantez ve parantezleri kapatmanız gerekmez; bunlar bir kolon, newline veya → (var atama için kullanılır) tarafından izlenirse ve çift tırnak (string), yeni bir satır veya → tarafından kapatılmadan kalabilir.

1
Birinci, ikinci satırında, length(Ansolmalıdır length(Str9; ikincisi, Str3 ila Str6'yı tek bir dizgede birleştirmeyi denediniz mi?
lirtosiast

Ah, ahbap! Sanırım indirme işleminde sabit bir durum var. Bunun yanı sıra, ben yaptım beri bu kadar bakmadım ama did muhtemelen bazı dizeleri birlikte birleştirebilir söz; Bunu bugün / bu hafta araştıracağım.
MI Wright

18

C, 280 272 264 bayt

Bu noktada sadece kısmen golf oynadı, ancak bu eğlenceli bir mücadele.

#define P(n)[s[n]&3],
f(char*s){printf("  %.3s\n %.5s\n%c(%c%c%c)%c\n%c(%.3s)%c\n (%.3s)",
"___   ___ _"+*s%4*3,"(_*_)_===_..... /_\\"+*s%4*5,"  \\ "P(4)"-.o0"P(2)    
" ,._"P(1)"-.o0"P(3)"  /"P(5)" < /"P(4)"    : ] [> <"+s[6]%4*3," > \\"P(5)
"    : \" \"___"+s[7]%4*3);}

(Okunabilirlik için biraz fazla \ n ile.) Daha definefazla golf oynamayı bekliyorum.

Daha okunaklı bir sürüm

#define P(n)[s[n]&3],
f(char *s) {
  printf("  %.3s\n"
         " %.5s\n"
         "%c(%c%c%c)%c\n"
         "%c(%.3s)%c\n"
         " (%.3s)",
         "___   ___ _"+*s%4*3,                  /* Top of hat. */
         "(_*_)_===_..... /_\\"+*s%4*5,         /* Lower hat. */
         "  \\ "P(4)                            /* Upper left arm. */
         "-.o0"P(2)                             /* Left eye. */
         " ,._"P(1)                             /* Nose. */
         "-.o0"P(3)                             /* Right eye. */
         "  /"P(5)                              /* Upper right arm. */
         " < /"P(4)                             /* Lower left arm. */
         "    : ] [> <"+s[6]%4*3,               /* Torso. */
         " > \\"P(5)                            /* Lower right arm. */
         "    : \" \"___"+s[7]%4*3              /* Base. */
         );
}

12

C, 212 bayt

d;main(){char*t="##3#b#b3#bbb3#b#b##\r#3b1#+3@12b3@1b-3@1_b3b1#,#\r7#_##+51rR04/1b#61rR0,8#2##\r7?#2#+9#`A#9=###9#^?#,8A#_#\r#+:#%b#:=#b#:#%b#,#",p[9];for(gets(p);d=*t++;putchar(d-3))d=d<51?d:(p[d-51]-53)[t+=4];}

Okunabilir bir sürüm:

d;
main()
{
    char *t = "##3#b#b3#bbb3#b#b##\r"
              "#3b1#+3@12b3@1b-3@1_b3b1#,#\r"
              "7#_##+51rR04/1b#61rR0,8#2##\r"
              "7?#2#+9#`A#9=###9#^?#,8A#_#\r"
              "#+:#%b#:=#b#:#%b#,#",
        p[9]; // 9 bytes is just enough for the input string of length 8

    for (gets(p); d = *t++; putchar(d-3))
        d = d < 51 ? d : (p[d - 51] - 53)[t += 4];
}

Bu fikri Reto Koradi'nin cevabından aldım . Ayrı bir cevap göndermeyi garanti edebileceğim birkaç eğlenceli gelişme oldu:

  • İşlevden programa dönüştürüldü (+10)
  • Yeni satırları kontrol dizesine getirdi (-7)
  • \"(-3) gibi daha az çıkış karakterine sahip olmak için tüm karakter kodlarına 3 eklendi
  • Dizimden autoincrement ile okuma; Ayrıca ikame t[i++]ile *t++(-4)
  • whileTarafından değiştirildi for; kaldırıldı {}(-4)
  • Basitleştirilmiş döngü sonlandırma: \0(-9) 'a kadar okuma
  • Dönüştürülmüş t[...],t+=4için(...)[t+=4] virgül operatörünü ortadan kaldırmak için (1)

Neden tüm bu sorun? Favori olanı paylaşmak, kar hayaleti:

   _
  /_\
\(. .)/
 (   )
 (___)

dArkasında parens koyabilir miyimmain
ceilingcat

10

JavaScript, 489 (yeni satırlar ve sekmeler olmadan)

x=' ';
d="   ";
h=['\n_===_',' ___ \n.....','  _  \n /_\\ ',' ___ \n(_*-)'];
n=[',','.','_',x];
e=['.','o','O','-'];
y=['>',,'\\',x];
u=['<',,'/',x];
t=[' : ','[ ]','> <',d;
b=[' : ','" "',"___",d];

j=process.argv[2].split('').map(function(k){return parseInt(k)-1});
q=j[4]==1;
w=j[5]==1;

console.log([
    h[j[0]].replace(/(.*)\n(.*)/g, " $1\n $2"),
    (q?'\\':x)+'('+e[j[2]]+n[j[1]]+e[j[3]]+')'+(w?'/':x),
    (!q?u[j[4]]:x)+'('+t[j[6]]+')'+(!w?y[j[5]]:x),
    x+'('+b[j[7]]+')'].join('\n'));

koşmak node snowman.js 33232124


6
Code Golf'a Hoşgeldiniz! Birkaç işaretçi: Bir parseIntçağrıya ihtiyacınız olmayabilir , çünkü çıkarma otomatik olarak string operand'ları sayılara dönüştürmeye çalışır. Ayrıca, özyineleme veya değişken kapsam belirleme için kullanmıyorsanız , functionambalajdan kurtulabilir ve önünüzden geçebilirsiniz i=process.argv[2]. Ek olarak, stamamen kurtulabilirsiniz ve sadece yapabilirsiniz console.log([ ... ].join('\n')).
apsillers

3
Aslında, her bir dizinin dizilimini arttırmak için dizilerinizin her birine bir öncül virgül koyarsanız, dizeden diziye giriş dönüşümünü tamamen ortadan kaldırabilirsiniz. 7 ,karakter ekler , ancak 50'den fazla kaldırmanıza olanak tanır. Son olarak, bir çok hassas optimizasyon q=j[4]-1yerine q=j[4]==1(ve sonra kullanmanızdan qve saygısızlığı !q) kullanmaktan yararlanır . Bu neden olur qolduğu 0, (a Falsey değeri) j[4]olan 1ve aksi takdirde truthy sıfır olmayan bir değer. Bu, geçerli doğru / yanlış değerlerin tam tersidir, bu nedenle basitçe qve arasında geçiş yapın !q.
apsillers

İlk cevabınızdaki geri bildirim için üzgünüm! Şahsen başvurumun revizyonu golfün en eğlenceli parçalarından biri olarak görüyorum; Eğer hislerimi paylaşmazsan özür dilerim. :)
apsillers

@ apsillers görüşleriniz büyük beğeni topluyor! Dün gece uyumak üzereydim ve sonra eğlenmek için yazdım, daha sonra mümkün olan en basitine yaymak niyetindeydim. Bu gece bazı düzenlemeler yapacağım!
Christopher Reid

9

Pyth, 203 bayt

M@GCHgc"  ___

  ___
   _"bhzgc" (_*_)
 _===_
 .....
  /_\\"bhzs[g"  \ "@z4\(g"-.oO"@z2g" ,._"@z1g"-.oO"@z3\)g"  / "@z5)s[g" < /"@z4\(gc"   
 : 
] [
> <"b@z6\)g" > \\"@z5)++" ("gc"   
 : 
\" \"
___"bez\)

Lol. Çevrimiçi deneyin: Pyth Compiler / Executor

açıklama

İlk önce gbir liste ve girdi olarak bir karakter alan bir karakter işlevi tanımladım , karakter karakterini ASCII değerine dönüştürür ve karşılık gelen eleman alır (modüler sarma).

M@GCH  def g(G,H): return G[ord(H)]

Diğer şeyler sadece satır satır basmaktır. Örneğin, ilk satır:

 c"  ___\n\n  ___\n   _"b     split the string "  ___\n\n  ___\n   _" at "\n"
                         hz   first char in input
g                             apply g and print

Btw. .F"{:^7}"Bir ipi deneyen biraz deneme yaptım . Kullanarak, kodumda birkaç boşluk bırakabilirim ama sonunda bayt kaydetmez.


9

R, 436 437 bayt

İşte üzerinde ilk denemem, en kısa ama yine de eğlenceli olmayan R kullanarak. En azından JavaScript'i yeniyorum (şimdilik) ...

H=c("_===_"," ___\n .....","  _\n  /_\\"," ___\n (_*_)")
N=c(",",".","_"," ")
L=c(".","o","O","-")
X=c(" ","\\"," "," ")
S=c("<"," ","/"," ")
Y=c(" ","/"," ","")
U=c(">"," ","\\","")
T=c(" : ","] [","> <","   ")
B=c(" : ","\" \"","___","   ")
f=function(x){i=as.integer(strsplit(x,"")[[1]]);cat(" ",H[i[1]],"\n",X[i[5]],"(",L[i[3]],N[i[2]],L[i[4]],")",Y[i[6]],"\n",S[i[5]],"(",T[i[7]],")",U[i[6]],"\n"," (",B[i[8]], ")",sep="")}

Test yapmak:

> f("12344321")
 _===_
 (O.-) 
 (] [)\
 ( : )

Aslında , çok satırlı olmakla Xve mücadele Yetmekle zorlandım, ancak aradaki şeyler, ( X, S) ve ( Y, U) satırlarını birbirinden ayırdı .

function dize'den tamsayıya dönüşüm de çok ayrıntılı.

Düzenleme 436 => 437

@OganM tarafından fark edilen bir boş alanı düzeltmek zorunda kaldım

Değişkenler arasındaki satır sonlarını değiştirerek 428'i azaltabilirim ;, ancak "tek çizgili" kod çok kötü görünüyor ve okunamaz görünüyor Bu açgözlü olmayacağım.


4. şapka için ekstra karaktere ihtiyacınız var
OganM

@OganM Bu ekstra bayt için teşekkürler! :( Sabit.
Molx

Codegolf yaparken genellikle her yeni satırı bir karakter (* nix'te olduğu gibi) (ikisinde olduğu gibi) (Windows'ta olduğu gibi) sayıyoruz. Bu yüzden noktalı virgül veya yeni bir satır kullanmanızın bir önemi yoktur.
ace_HongKongIndependence

@ace Bahşiş için teşekkürler, bilmek güzel!
Molx

8

Haskell, 361 306 289 bayt

o l a b=take a$drop((b-1)*a)l
n="\n"
p i=id=<<["  ",o"    \n _===____ \n ..... _  \n  /_\\ ___ \n (_*_)"11a,n,o" \\  "1e,o"(.(o(O(-"2c,o",._ "1 b,o".)o)O)-)"2d,o" /  "1f,n,o"< / "1e,o"( : )(] [)(> <)(   )"5g,o"> \\ "1f,n," (",o" : )\" \")___)   )"4h]where[a,b,c,d,e,f,g,h]=map(read.(:[]))i

Kullanımı:

putStrLn $ p "12333321"

 _===_
 (O.O) 
/(] [)\
 ( : )

Nasıl çalışır: listedeki her öğeyi [hat options, left upper arm options, left eye options, ..., base options]karşılık gelen giriş numarasıyla indeksleyin ve tek bir listede birleştirin. Sol ve sağ kolu, üst ve alt kısımlara böldüm, böylece kardan adamın çizgisini hatta oluşturabiliyorum.

Benim favorim klasik 11112211.

Düzenleme: dizeler listesinden parçalar için dizelere geçilir (şapka, göz, ...). Alınacak alt dizinin uzunluğunun ikinci bir parametreye ihtiyacı var.

Düzenleme II: ayıklanan ortak alt diziler


8

C, 233 230 bayt

char*t="  0 _ _0 ___0 _ _   0_. (0=./_0=._*0=.\\_0_. ) 4 \\  (2.oO-1,._ 3.oO-)5 /  4< / (6 ]> 6:   6 [< )5> \\  (7 \"_ 7: _ 7 \"_ ) ";i,r,d;f(char*p){while(r++<35){d=t[i]-48;putchar(t[d<0?i:i+p[d]-48]);i+=d<0?1:5;r%7?0:puts("");}}

Daha iyi okunabilirlik için newlines ve boşluk ile:

char* t = "  0 _ _0 ___0 _ _   0_. (0=./_0=._*0=.\\_0_. ) 4 \\  (2.oO-1,._ 3.oO-)5 /  4< / (6 ]> 6:   6 [< )5> \\  (7 \"_ 7: _ 7 \"_ ) ";
i, r, d;
f(char* p)
{
    while (r++ < 35)
    {
        d = t[i] - 48;
        putchar(t[d < 0 ? i : i + p[d] - 48]);
        i += d < 0 ? 1 : 5;
        r % 7 ? 0 : puts("");
    }
}

Her şey oldukça kaba bir kuvvettir. 35 (7 uzunluğunda 5 satırlık) karakterlerin her biri için bir giriş içeren bir tablo kullanır. Tablodaki her giriş ya:

  • Sürekli bir karakter: , (, ). Tablo girişi uzunluğu 1 karakterdir.
  • Gövde parçasının indeksi, ardından girdideki parça seçimine bağlı olarak 4 olası karakter. Tablo girişi uzunluğu 5 karakterdir.

Kod daha sonra 35 karakterin üzerinde döner ve tablodaki değeri arar.


8

R 414 Bayt

Molx versiyonunun biraz değiştirilmiş versiyonu

W =c("_===_"," ___\n .....","  _\n  /_\\"," ___\n (_*_)",",",".","_"," ",".","o","O","-"," ","\\"," "," ","<"," ","/"," "," ","/"," ","",">"," ","\\",""," : ","] [","> <","   "," : ","\" \"","___","   ")
f=function(x){i=as.integer(strsplit(x,"")[[1]]);cat(" ",W[i[1]],"\n",W[i[5]+12],"(",W[i[3]+8],W[i[2]+4],W[i[4]+8],")",W[i[6]+20],"\n",W[i[5]+16],"(",W[i[7]+28],")",W[i[6]+24],"\n"," (",W[i[8]+32], ")",sep="")}

Sadece ayrı değişkenleri bire birleştirdi. X=c(Rutin olarak kullanılan bir yerin sallanması .


7

CJam, 200 191 bayt

Bu kesinlikle çok fazla golf oynayabilir. (Özellikle temel kodlarsam). Ama burada yeni başlayanlar için de geçerli:

7S*"_===_  ___  .....   _    /_\   ___  (_*_)"+6/2/Nf*",._ "1/".oO-"1/_" <\  /   >/  \  "2/4/~" : ] [> <    : \" \"___   "3/4/~]l~Ab:(]z::=:L0=N4{L=}:K~0='(2K1K3K')5K0=N4K1='(6K')5K1=NS'(7K')

Giriş STDIN'e giriyor. Örneğin, giriş 23232223:

  ___ 
 .....
\(o_O)/
 (] [) 
 (___)

Burada çevrimiçi deneyin


7

Haskell, 333 bayt

İlk gönderimim! Kardan adam yukarıdan aşağıya, soldan sağa oluşturur. Kolları her kol için, başın yanındaki kısım ve vücudun yanındaki kısım için iki fonksiyona böldüm.

S işlevi tam sayıların bir listesini alır ve girişin doğru alt listeleri verilen gövde parçalarını üreten fonksiyonların çıktısını birleştirir.

a=y["\n _===_\n","  ___ \n .....\n","   _  \n  /_\\ \n","  ___ \n (_*_)\n"]
d=y",._ "
c=y".oO-"
e=y"< / "
j=y" \\  "
f=y"> \\ "
k=y" /  "
y w n=w!!(n-1)
h=y[" : ","] [","> <","   "]
b=y[" ( : ) \n"," (\" \") \n"," (___) \n"," (   ) \n"]
s(m:x:o:p:n:q:t:l:_)=putStr$a m++j x:'(':c o:d n:c p:')':k q:'\n':e x:'(':h t++')':f q:'\n':b l

İşleve dayanır

y :: [a] -> Int -> a
y w n=w!!(n-1)

verilen listenin nth elemanını döndürür. Bu, bir şeydeki şapkaların listesine ve bunun gibi şeylere izin verir

k=y" /  "

bu işlevlerin tümü bir beta azaltma kullanır, böylece argümanları y işlevine dizin olarak iletilir.

Çıktı:

λ> s $ repeat 1

 _===_
 (.,.) 
<( : )>
 ( : ) 

λ> s $ repeat 2
  ___ 
 .....
\(o.o)/
 (] [) 
 (" ") 

λ> s $ repeat 3
   _  
  /_\ 
 (O_O) 
/(> <)\
 (___) 

λ> s $ repeat 4
  ___ 
 (_*_)
 (- -) 
 (   ) 
 (   ) 

@ Calvin's Hobbies Teşekkürler, sanırım şimdi düzelttim.
Craig Roy

7

Python 3, 349 336 254 251 bayt

Tezimi yaptığım için çok fazla.

İşte snowman.py dosyasının içeriği :

l='_===_| ___\n .....|  _\n  /_\| ___\n (_*_)| : |] [|> <|   |>| |\| | : |" "|___|   '.split('|')
l[4:4]=' \  .oO-,._ .oO- /  < / '
def s(a):print(' {}\n{}({}{}{}){}\n{}({}){}\n ({})'.format(*[l[4*m+int(a[int('0421354657'[m])])-1]for m in range(10)]))

İşte en sevdiğim kardan adamımı şüphe ediyorum:

s('11112311')

 _===_ 
\(.,.) 
 ( : )\
 ( : ) 

açıklama

# Create a list containing the 4 * 10 body parts of the snowman in order of drawing:
#   hats,
#   upper left arms, left eyes, noses, right eyes, upper right arms,
#   lower left arms, torso's, lower right arms,
#   bases
l='_===_| ___\n .....|  _\n  /_\| ___\n (_*_)| : |] [|> <|   |>| |\| | : |" "|___|   '.split('|')
l[4:4]=' \  .oO-,._ .oO- /  < / '
# This is the function that draws the snowman
# All the lines of this function are golfed in a single statement, but seperated here for clearity
def s(a):
    # In this list comprehension I put the elements of l that are chosen according to the parameters
    list_comprehension = []
    # m is the number of the body part to draw
    for m in range(10):
        # Get the index for the choice of the m-th bodypart
        # (example: the 2nd bodypart (m = 1: the upper left arm) is in the 4th place of the arguments list)
        choice_index = int('0421354657'[m])
        # n is the parameter of the current bodypart
        n = int(a[choice_index]) - 1
        # Add the body part from list l to the list comprehenseion
        list_comprehension.append( l[4 * m + n] )
    # Print the list comprehension with the static parts
    print(' {}\n{}({}{}{}){}\n{}({}){}\n ({})'.format(*list_comprehension))

Sen arasındaki hat 2'de yer kaldırabilir [int(i)]ve for. Benzer şekilde arasındaki hat 7'de yer kaldırabilir f(int(i))ve for. Ayrıca, print()ifadenizde son alanı yazdırmanıza gerek yok - bu kardan adamın bir parçası değil. Son olarak, print()aramanızı tek bir hatla değiştirin print("{}\n{}({}{}{}){}\n{}({}){}\n ({})".format(*c)). Bunların her biri 1 bayt kurtarmalı, toplam 4 bayt kurtarmalı :)
ace_HongKongIndependence

1
Ayrıca, global değişkeni kullanmak yerine, nbir işlev niteliği tanımlayabilirsiniz f. Böylece 5-6 satırlarını şununla değiştirebilirsin: def f(m):f.n+=1;return l[4*m+int(b[f.n])-1]<newline> f.n=-1. Bu 3 bayt daha azaltır.
ace_HongKongIndependence

1
@ace Teşekkürler, daha önce hiç fonksiyon özelliğini duymamış, yeni bir şey öğrenmiş!
Matty,

6

PowerShell , 199 bayt

Esinlenerek Reto Koradi ve anatolyg .

for($t='  0 _ _0 ___0 _ _
 0_. (0=./_0=._*0=.\_0_. )
4 \  (2.oO-1,._ 3.oO-)5 /  
4< / (6 ]> 6:   6 [< )5> \ 
 (7 "_ 7: _ 7 "_ )';$d=$t[$i++];$r+="$d"){if($d-ge48){$d=$t[$i+"$args"["$d"]-49]
$i+=4}}$r

Çevrimiçi deneyin!

Not: Satır 3, 2 iz boşluğuna, hat 4 ise bir iz boşluğuna sahiptir.

En sevdiğim 44444444"uykulu rus bekçi":

 ___
(_*_)
(- -)
(   )
(   )

5

JavaScript (ES6), 247

@ NinjaBearMonkey's: İyi bir reklam değil :(

Snippet'te test et (Firefox ile)

S=p=>([h,n,c,d,l,r,t,b,e,x]=[...p,' .oO-',`1_===_1 ___
 .....1  _
  /_\\1 ___
 (_*_)1 : 1] [1> <1   1 : 1" "1___1   `.split(1)],` ${x[h]}
${'  \\  '[l]}(${e[c]+' ,._ '[n]+e[d]})${'  /  '[r]}
${' < / '[l]}(${x[3-~t]})${' > \\ '[r]}
 (${x[7-~b]})`)

// TEST // 

function go()
{
  var n=N.value
  if (/^[1-8]{8}$/.test(n)) {
    s=S(n)
    OUT.innerHTML = s+'\n'+n+'\n\n'+ OUT.innerHTML
  }
  else N.focus()
}
  
<input id=N maxlength=8><button onclick="go()">Test</button>
<pre id=OUT></pre>


3

05AB1E , 137 135 128 122 bayt

…( )7ÝJ»•αγʒδÓ₂©8¥ŽQxΣxêÿ•12вèJIvN”</[(
._-=:"ÆŸ,*”º•DùÙÂ+;Èγтáì³ÓW©ÎÂ_`ƒ≠îj*ΓçÊ~ÞÒ¸β¦oåb/õ47/vÎΓ”›≠øØZµλݺ•20в趡Nè4äyè.;

-Grimy sayesinde -6 bayt .

Çevrimiçi deneyin ya da birkaç test vakası daha doğrulayın .

Açıklama:

Önce template-string'i yaratırız:

…( )         # Push string "( )"
7ÝJ          # Push a list in the range [0,7] joined together: "01234567"
»            # Join both by a newline: "( )\n01234567"
•αγʒδÓ₂©2°ćì₂òη₆½•
             # Push compressed integer 80545642885242518310229085147411483894
 12в         # Convert it to Base-12 as list: [1,4,4,4,4,4,3,1,4,4,4,4,4,3,8,0,6,5,7,2,9,3,8,0,10,10,10,2,9,3,1,0,11,11,11,2]
    è        # Index each into the string: [" ","0","0","0","0","0","\n"," ","0","0","0","0","0","\n","4","(","2","1","3",")","5","\n","4","(","6","6","6",")","5","\n"," ","(","7","7","7",")"]
     J       # And join it to a single string: " 00000\n 00000\n4(213)5\n4(666)5\n (777)"

Bunun gibi görünüyor:

 00000
 00000
4(213)5
4(666)5
 (777)

Sonra girişin rakamlarını değiştiriyorum:

I            # Get the input
 v           # Loop `y` over each of its digits:

Ve aşağıdakileri yapın: Listenin
(0 indeksli) dizinine basın N:

  N          # Push the index of the loop

Mümkün olan tüm parçaları karakter listeleri listesi olarak itin:

  ”</[(
  ._-=:"ÆŸ,*”
            "# Push dictionary string "</[(\n._-=:" Oo,*"
   º         # Mirror each line: "</[()]\>\n._-=:" Oo,**,oO ":=-_."
  DùÙÂ+;Èγтáì³ÓW©ÎÂ_`ƒ≠îj*ΓçÊ~ÞÒ¸β¦oåb47/vÎΓ”›≠øØZµλݺ•
             # Push compressed integer 492049509496347122906361438631265789982480759119518961177677313610613993948059787418619722816092858096158180892708001681647316210
   20в       # Convert it to Base-20 as list: [15,10,10,10,15,3,10,19,10,4,15,15,15,15,15,10,12,12,12,10,15,10,10,10,15,9,9,9,9,9,15,15,10,15,15,15,1,10,6,15,8,15,18,9,10,8,11,9,17,16,8,11,9,17,16,8,15,15,15,0,6,15,15,1,8,15,15,15,7,1,15,15,6,8,15,15,15,15,13,15,5,15,2,7,15,0,8,15,15,15,15,13,15,14,15,14,10,10,10]
      è      # Index each into the string: [" ","_","_","_"," ","(","_","*","_",")"," "," "," "," "," ","_","=","=","=","_"," ","_","_","_"," ",".",".",".",".","."," "," ","_"," "," "," ","/","_","\"," ","\n"," ",",",".","_","\n","-",".","o","O","\n","-",".","o","O","\n"," "," "," ","<","\"," "," ","/","\n"," "," "," ",">","/"," "," ","\","\n"," "," "," "," ",":"," ","]"," ","[",">"," ","<","\n"," "," "," "," ",":"," ","""," ",""","_","_","_"]
       ¶¡    # Split it by the newline character: [[" ","_","_","_"," ","(","_","*","_",")"," "," "," "," "," ","_","=","=","=","_"," ","_","_","_"," ",".",".",".",".","."," "," ","_"," "," "," ","/","_","\"," "],[" ",",",".","_"],["-",".","o","O"],["-",".","o","O"],[" "," "," ","<","\"," "," ","/"],[" "," "," ",">","/"," "," ","\"],[" "," "," "," ",":"," ","]"," ","[",">"," ","<"],[" "," "," "," ",":"," ","""," ",""","_","_","_"]]

NŞu anda üzerinde çalıştığımız parçanın karakter listesini almak için döngü dizinini kullanın :

  Nè         # Index the loop index into it
             #  i.e. 6 → [" "," "," "," ",":"," ","]"," ","[",">"," ","<"]

Ardından, karakter listesini dört eşit parçaya bölün ve girdi ydizinini (1 indeksli olan) dizine eklemek için kullanın. (NOT:. 05AB1E 0 endeksli olmakla giriş 1-endeksli olduğundan, endeksleme önce 1 ile haneyi azaltmak için mantıklı olurdu Ancak, 05AB1E otomatik wraparound (yani indeksleme beri 3listede [1,3,5]neden olur 1), ben sadece parçaları bir kez döndürülmüş, böylece meydan okuma tarifinde nr 4 olan parçalar listelerin önündedir.

    4ä       # Split it into 4 equal parts
             #  i.e. [[" "," "," "],[" ",":"," "],["]"," ","["],[">"," ","<"]]
      yè     # Index the input-digit `y` into it (with automatic wraparound)
             #  i.e. 4 → [" "," "," "]

Ve sonra ilk önce ittiğimiz döngünün 0 indeksli indeksini birer birer parça karakterlerle değiştirin:

  .;         # Replace first; every index of the loop `N` in the template-string
             # is replaced one by one with the characters

Sonunda sonuç örtük olarak çıktı.

Benim bu 05AB1E ucu bakın (bölüm ne kadar büyük tamsayılar sıkıştırmak için? Ve tamsayı listeleri sıkıştırmak nasıl? ) Sıkıştırma parçaları nasıl çalıştığını anlamak için.


Favori olarak, Java çözümümü gönderdiğimde 1.5 yıl önceki ile hala aynı 'kar tavşanı' var :

44114432:
   _  
 (_*_)
 (. .) 
 (> <) 
 (" ")

-4 , CJam'ı yenecek kadar!
Grimy

1
122'ye kadar ve ayrıca ilk başta sahip olduklarınıza daha yakın.
Grimy

@Grimy 122 byte versiyonunuz 0arasında gözleri var. :)
Kevin Cruijssen

Sadece bir baz-12 kodlama hatası, düzeltmesi kolay olmalı!
Grimy

@Grimy Haklısın. Dün fazla zamanım olmadı, ama listedeki gerçekten basit bir düzeltme. -6 için teşekkürler! :)
Kevin Cruijssen

2

Java 8, 548 545 432 401 399 bayt

a->{int q=50,H=a[0]-49,N=a[1],L=a[2],R=a[3],X=a[4],Y=a[5];return"".format(" %s%n %s%n%c(%c%c%c)%c%n%c(%s)%c%n (%s)",H<1?"":H%2<1?" ___":"  _","_===_s.....s /_\\s(_*_)".split("s")[H],X==q?92:32,L<q?46:L<51?111:L<52?79:45,N<q?44:N<51?46:N<52?95:32,R<q?46:R<51?111:R<52?79:45,Y==q?47:32,X<q?60:X%2<1?32:47,"   s : s] [s> <".split("s")[a[6]%4],92-(Y%3+Y%6/4)*30,"   s : s\" \"s___".split("s")[a[7]%4]);}

Burada dene.

Açıklama:

a->{             // Method with character-array parameter and String return-type
  int q=50,      //  Temp integer with value 50 to reduce the byte-count
      H=a[0]-49, //  The hat-character as unicode value minus 49: 1=0; 2=1; 3=2; 4=3
      N=a[1],L=a[2],R=a[3],X=a[4],Y=a[5];
                 //  Most of the other characters as unicode values: 1=49; 2=50; 3=51; 4=52
  return"".format(" %s%n %s%n%c(%c%c%c)%c%n%c(%s)%c%n (%s)",
                                               // Return the snowman with:
    H<1?"":H%2<1?" ___":"  _",                 //  The top of the hat
    "_===_s.....s /_\\s(_*_)".split("s")[H],   //  + the bottom of the hat
    X==q?92:32,                                //  + the top of the left arm
    L<q?46:L<51?111:L<52?79:45,                //  + the left eye
    N<q?44:N<51?46:N<52?95:32,                 //  + the nose
    R<q?46:R<51?111:R<52?79:45,                //  + the right eye
    Y==q?47:32,                                //  + the top of the right arm
    X<q?60:X%2<1?32:47,                        //  + the bottom of the left arm
    "   s : s] [s> <".split("s")[a[6]%4],      //  + the torso
    92-(Y%3+Y%6/4)*30,                         //  + the bottom of the right arm
    "   s : s\" \"s___".split("s")[a[7]%4]);}  //  + the feet

Benim favorim:

44114432:
   _  
 (_*_)
 (. .) 
 (> <) 
 (" ")

Nedenini bilmiyorum ama çok tatlı görünüyor. Kulakları yerine Rus şapkası olan bir tavşan gibi.


1

F #, 369 bayt

let f(g:string)=
 let b=" "
 let p=printfn
 let i x=int(g.[x])-49
 p"  %s  "["";"___";" _ ";"___"].[i 0]
 p" %s "["_===_";".....";" /_\ ";"(_*_)"].[i 0]
 p"%s(%c%c%c)%s"[b;"\\";b;b].[i 4]".oO-".[i 2]",._ ".[i 1]".oO-".[i 3][b;"/";b;b;b].[i 5]
 p"%s(%s)%s"["<";b;"/";b].[i 4][" : ";"] [";"> <";"   "].[i 6][">";b;"\\";b].[i 5]
 p" (%s) "[" : ";"\" \"";"___";"   "].[i 7]

Çevrimiçi deneyin!

Çünkü gbir dizidir erişimci kullanır, ben açıkça bir şekilde işlev tanımında türünü belirtmek gerekir stringfonksiyon tanımı vardır yüzden, (g:string).

Bunun dışında, genellikle stringsbir dizin tarafından erişilen bir dizi . Şapka, ayrı hatlara giden sol ve sağ kollar ayrı üst ve alt dizilere ayrılır. iFonksiyon argüman bir sayı değiştirir gdizi indeksi içine. Ve mektup b, dizilerdeki tek boşluklu dizeleri değiştirir.

Büyük zorluk! En sevdiğim kardan adam muhtemelen 242244113:

  ___  
 ..... 
 (o o) 
 ( : ) 
 ( : ) 

seni izliyorum


1

PHP, 378 bayt

<?$f=str_split;$r=$f($argv[1]);$p=[H=>'   _===____..... _  /_\ ___(_*_)',N=>',._ ',L=>'.oO-',R=>'.oO-',X=>' <\  /  ',Y=>' >/  \  ',T=>' : ] [> <   ',B=>' : " "___   '];echo preg_replace_callback("/[A-Z]/",function($m){global$A,$p,$r,$f;$g=$m[0];return$f($f($p[$g],strlen($p[$g])/4)[$r[array_search($g,array_keys($p))]-1])[(int)$A[$g]++];},'  HHH
 HHHHH
X(LNR)Y
X(TTT)Y
 (BBB)');

Çevrimiçi deneyin!

Ben bilge bay baykuş severim 31333342

   _ 
  /_\ 
 (O,O) 
/(   )\
 (" ")

1

Python 2.7, 257 bayt (sanırım)

H,N,L,R,X,Y,T,B=map(int,i)
l='\n'
s=' '
e=' .o0-'
F='  \  / '
S=' < / \ >'
o,c='()'
print s+'      _ _ ___ _ _\n\n\n\n    _. (=./_=._*=.\__. )'[H::4]+l+F[X]+o+e[L]+' ,._ '[N]+e[R]+c+F[-Y]+l+S[X]+o+'  ]> :    [< '[T::4]+c+S[-Y]+l+s+o+'  "_ : _  "_ '[B::4]+c

buradaki 'i', bir dize olarak girdidir (örneğin "13243213")


2
PPCG'ye Hoşgeldiniz! Olduğu gibi, 256 bayttır. Ne yazık ki, girişin bir değişkende saklandığını varsayamazsınız. Bununla birlikte yerini alabilir iiçin input()262 bayt olmak üzere toplam
H.PWiz

0

Dart , 307 bayt

f(i,{r='.o0-',s=' : '}){i=i.split('').map((j)=>int.parse(j)-1).toList();return' ${['_===_',' ___ \n.....',' /_\\ ',' ___ \n (_*_)'][i[0]]}\n${' \\  '[i[4]]}(${r[i[2]]+',._ '[i[1]]+r[i[3]]})${' /  '[i[5]]}\n${'< /  '[i[4]]}(${[s,'] [','> <','  '][i[6]]})${'> \\ '[i[5]]}\n (${[s,'" "','___','   '][i[7]]})';}

Çevrimiçi deneyin!


0

Zsh, 247 bayt

çevrimiçi deneyin!

(){H='_===_h ___
 .....h  _
  /_\h ___
 (_*_)'
W=' \  ' L=.oO- N=,._\  Y=' /  '
X='< / ' T=' : ] [> <   ' Z='> \ '
B=' : " "___   '
<<<" ${H[(ws:h:)$1]}
$W[$5]($L[$3]$N[$2]$L[$4])$Y[$6]
$X[$5](${T:3*($7-1):3})$Z[$6]
 (${B:3*($8-1):3})"
} ${(s::)1}

fav kardan adam:

43232122 Cossack dancer
  ___
 (_*_)
\(o_O) 
 (] [)>
 (" ")
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.