Bạn có muốn mã người tuyết?


176

Đây là một người tuyết nghệ thuật ASCII đơn giản :

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

Hãy làm cho anh ta một vài người bạn. Đây sẽ là mô hình chung cho người tuyết nghệ thuật ASCII của chúng tôi:

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

Các không gian hàng đầu và dấu ngoặc đơn luôn giống nhau cho tất cả người tuyết. Các chữ cái khác nhau đại diện cho các phần của mẫu có thể thay đổi riêng lẻ. Mỗi phần có chính xác bốn cài đặt trước cho những gì các ký tự ASCII có thể điền vào nó. Bằng cách trộn và kết hợp các cài đặt trước này cho tất cả tám phần, chúng ta có thể tạo ra nhiều người tuyết khác nhau.

Tất cả các cài đặt trước

(Lưu ý rằng các khoảng trắng được đặt trên các dòng trống khác để hình dạng phần luôn luôn chính xác.)

H là dành cho Mũ

  1. Mũ rơm

         
    _===_
  2. Mũ Mexico

     ___ 
    .....
    
  3. Fez

      _  
     /_\ 
    
  4. Mũ Nga

     ___ 
    (_*_)
    

N là dành cho Mũi / Miệng

  1. Bình thường ,

  2. Chấm .

  3. Hàng _

  4. không ai

L là dành cho mắt trái

  1. Chấm .

  2. Chấm lớn hơn o

  3. Chấm lớn nhất O

  4. Đã đóng -

R là dành cho mắt phải

(Danh sách giống như mắt trái.)

X là dành cho cánh tay trái

  1. Cánh tay bình thường

     
    <
  2. Cánh tay hướng lên

    \
     
  3. Cánh tay hướng xuống

     
    /
  4. không ai

     
     

Y là dành cho cánh tay phải

  1. Cánh tay bình thường

     
    >
  2. Cánh tay hướng lên

    /
     
  3. Cánh tay hướng xuống

     
    \
  4. không ai

     
     

T là dành cho Torso

  1. nút :

  2. Áo vest ] [

  3. Cánh tay hướng nội > <

  4. không ai

B là dành cho cơ sở

  1. nút :

  2. Đôi chân " "

  3. Bằng phẳng ___

  4. không ai

Thử thách

Viết chương trình lấy một chuỗi tám ký tự (thông qua stdin hoặc dòng lệnh) theo định dạng HNLRXYTB, trong đó mỗi chữ cái là một chữ số từ 1 đến 4 biểu thị cài đặt sẵn nào được sử dụng cho phần tương ứng của người tuyết. In đầy đủ người tuyết đến thiết bị xuất chuẩn.

Ví dụ, đầu vào 11114411là người tuyết ở đầu trang. (Thứ nhất 1: anh ấy có một chiếc mũ rơm, thứ hai 1: anh ấy có một chiếc mũi bình thường, v.v.)

Một ví dụ khác, người tuyết cho đầu vào 33232124:

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

Chi tiết

  • Bất kỳ số lượng và kết hợp của không gian hàng đầu / dấu và dòng mới hàng đầu / cuối đều được cho phép miễn là ...

    • người tuyết có tất cả các phần của họ được sắp xếp chính xác đối với nhau và
    • không bao giờ có nhiều hơn 64 ký tự khoảng trắng (mẫu chung chỉ có 7 × 5, vì vậy bạn có thể sẽ không đạt giới hạn này).

    Bạn không cần in các hàng / cột của mẫu nếu chúng chỉ chứa khoảng trắng. ví dụ: dòng trống của mũ rơm là không cần thiết.

  • Bạn phải sử dụng thứ tự của các bộ phận như chúng được đưa ra ở trên.

  • Thay vì một chương trình, bạn có thể viết một hàm lấy chuỗi chữ số làm đối số. Đầu ra phải được in bình thường hoặc trả lại dưới dạng chuỗi.

  • Bạn có thể coi đầu vào là số nguyên thay vì chuỗi nếu muốn.

Chấm điểm

Mã ngắn nhất tính bằng byte thắng.

Câu hỏi thưởng: Người tuyết nào trong số 65536 người bạn yêu thích?


19
Tôi thích thiên thần 14441133 . Ngoài ra, quái vật bốn mắt nhỏ mắt. Lựa chọn của bạn
Sp3000

14
Nó có phải là người tuyết không?

54
Nó không phải là một người tuyết. (Tuyên bố miễn trừ trách nhiệm: Có thể phải là người tuyết)
Joshpbarron

3
Bình luận dí dỏm thỉnh thoảng là tốt, nhưng để thảo luận mở rộng, vui lòng sử dụng trò chuyện thay vì bình luận. Tôi đã dọn dẹp cái này một chút.
Martin Ender

36
Câu hỏi cần làm tiếp theo: "Mã không bao giờ làm phiền tôi"
Sở thích của Calvin

Câu trả lời:


39

CJam, 135 134 132 130 126 125 byte

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*

Để tạo tệp trên máy của bạn, hãy thực thi xxd -r > snowman.cjam, dán hexdump có thể đảo ngược từ trên xuống, nhấn Entervà cuối cùng Ctrl+ D.

Ngoài ra, bạn có thể thử mã trực tuyến bằng trình thông dịch CJam .

Thêm

Người tuyết yêu thích của tôi là Olaf:

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

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

Mùa đông là thời điểm tốt để ở lại và ôm ấp, nhưng hãy đưa tôi vào mùa hè và tôi sẽ là một người tuyết hạnh phúc!

Ý tưởng

Chuỗi hex

dd7382d6bfab28707190992f240c362ee510262bd07a7708
556de9dcdb566c676817c2b87f5ecb8bab145dc2f2f76e07

mã hóa các lựa chọn có thể cho tất cả các bộ phận của người tuyết, bao gồm cả những người cố định. Hãy gọi chuỗi này P .

Để giải mã nó, chúng tôi chuyển đổi P (ở đây được coi là một mảng các số nguyên) từ cơ sở 256 sang cơ sở 20 và thay thế từng số nguyên kết quả bằng ký tự tương ứng của chuỗi M :

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

Điều này dẫn đến chuỗi T :

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

Dòng đầu tiên mã hóa tất cả các lựa chọn mũ, cuối cùng là tất cả các bộ phận cơ thể cố định. Các dòng khác chứa 28 phần cơ thể biến.

Chúng tôi chia T tại các nguồn cấp dữ liệu và chia các chuỗi của mảng kết quả thành bốn phần có độ dài bằng nhau. Sau đó, chúng tôi đọc đầu vào từ STDIN, đẩy mảng các chữ số của nó trong cơ sở 10 và chọn các phần tử tương ứng của chuỗi phân tách. Chúng tôi tận dụng thực tế là các mảng bao quanh trong CJam, vì vậy phần tử ở chỉ số 4 của một mảng có độ dài 4 thực sự là phần tử đầu tiên. Chuỗi được chia cuối cùng không tương ứng với bất kỳ đầu vào nào, vì vậy nó sẽ được chọn hoàn toàn.

Chúng tôi xử lý mũ bằng cách dịch chuyển phần tử đầu tiên ra khỏi mảng kết quả. Chỉ số trong M của ký tự đầu tiên, được đọc dưới dạng số 4 cơ sở, cho thấy số lượng khoảng trắng và dấu gạch dưới trong dòng đầu tiên của chiếc mũ. Chúng tôi in các ký tự đó, nguồn cấp dữ liệu, khoảng trắng và phần còn lại của chuỗi đã dịch chuyển. Sau đó, chúng tôi đẩy một linefeed bổ sung ở dưới cùng của ngăn xếp.

Đối với các bộ phận cơ thể, chúng tôi nối chuỗi tương ứng với tất cả chúng. Hãy gọi chuỗi này S . Để lắp ráp các bộ phận cơ thể, chúng tôi thực hiện phiên âm: chúng ta lấy từng ký tự của chuỗi M , tính toán chỉ số của nó trong loại (M) và thay thế nó bằng các ký tự tương ứng của S . Chúng tôi lợi dụng thực tế là toán tử chuyển ngữ tự động đệm S để khớp với độ dài sắp xếp (M) bằng cách lặp lại ký tự cuối cùng của S nhiều lần nếu cần.

Cuối cùng, chúng tôi chia chuỗi kết quả thành các chuỗi con có độ dài 7 và đặt một đường truyền giữa mỗi cặp chuỗi con.

Giả sử rằng các biến MPchứa các chuỗi MP .

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 byte

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]||' ')

Đây là một chức năng ẩn danh; bạn sử dụng nó bằng cách thực hiện ([function code])('42232124'). Phần tăng nặng nhất của điều này là các cánh tay, chiếm 2 dòng, vì vậy tôi phải bao gồm mã cho cả trên và dưới.

Đoạn mã dưới đây có mã nhận xét không mã hóa, không có ES6, được bình luận. Và bạn có thể sử dụng nó để dễ dàng kiểm tra mã và thử các kết hợp khác nhau. Chỉnh sửa: Tôi có quá nhiều niềm vui với điều này. Tôi đã thêm một số tính năng mới, bao gồm cả cách tạo người tuyết ngẫu nhiên.

Cảm ơn Yair Rand vì đã tiết kiệm sáu byte.

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 Rất thông minh, tốt hơn nhiều so với của tôi
edc65

23
'GUI' khá tuyệt.
Topher

7
Tuyệt vời, hãy xem người tuyết nhện 8 mắt: 22112333
Claudiu

1
Tôi thích con cú Nga đang ngủ: 41444442
ETHproductions 7/10/2015

1
Bạn có thể lưu sáu byte bằng cách xóa từng khoảng trống trong một khe ( 1 1-> 11) và thêm ||' 'vào cuối.
Yair Rand

30

CJam, 164 byte

Tạo người tuyết từ trái sang phải, từ trên xuống dưới. Điều này giúp loại bỏ sự cần thiết cho bất kỳ loại hoạt động nối hoặc định vị lại chuỗi nào, vì tôi chỉ để lại mọi phần của người tuyết trên ngăn xếp. Và sau đó, do kết xuất ngăn xếp tự động ở cuối chương trình:

CJam muốn xây dựng một snowman!

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

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

Thêm

Suy nghĩ bên ngoài hộp! 32443333cho một cô dâu tuyết (wo). Bạn đã phải thử một chút để xem nó, nhưng có những cánh tay hướng vào trong, fez + cánh tay hướng xuống = tấm màn che, và cái đầu thực sự nằm trong fez / mạng che mặt. Hình thức thường lớn là chiếc váy cuồn cuộn, và "mắt" và "mũi" là những nếp gấp trong chiếc váy.

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

Các lựa chọn "mắt" khác là một chút nguy hiểm ...


17
Đối với tôi, phần thưởng của bạn trông giống một thành viên KKK hơn là một cô dâu.
ace_HongKongInependence

26

Python, 276 289 byte

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]+")"

Mã này có thêm 8 byte ( \* 4) để dễ đọc.

Xây dựng người tuyết lên từng chút một.

Thêm

F("44444432") cho "gấu Nga buồn ngủ":

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

13
Gấu Nga buồn ngủ bây giờ cũng là yêu thích của tôi.
Sở thích của Calvin

1
Hàng trên cùng gạch dưới dường như không chính xác trên mũ fez và Nga. ví dụ: Đó là tặng một chiếc mũ chống đỡ ..
Sở thích của Calvin

@ Calvin'sHob sở thích: Chiếc mũ của Nga vẫn ổn, nhưng chiếc mũ fez đã bị rối tung. Tôi đã sửa nó bây giờ và kiểm tra tất cả các trường hợp khác quá. Tôi phải cẩn thận hơn trong tương lai!
Claudiu

siêu muộn đến bữa tiệc, nhưng TIO này nói rằng đây là 297 đối với tôi. Intellij nói 299. Tôi có thiếu thứ gì không?
tuyết rơi

21

Python 2, 354 280 241 261 byte

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]+")"

Gọi s('33232124')cho:

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

Nhưng sở thích của tôi là 4424212341341144:

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

1
Khi tôi thực hiện s('33232124')các dấu gạch chéo không được rút ra. Trong thực tế, nửa dưới của chiếc mũ bị thiếu trong rất nhiều trường hợp. Ngoài ra, 0không phải là một trong những lựa chọn.
Sở thích của Calvin

@ Calvin'sHob sở thích Cảm ơn, tôi đã sửa nó.
Cees Timmerman

20

CJam, 150 145 byte

Cơ sở chuyển đổi tất cả mọi thứ!

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

SE mangles không thể in được, vì vậy đây là một bản sao trên Pastebin. Đảm bảo bạn sao chép phần "RAW Paste Data", không phải phần bên cạnh số dòng. Bạn có thể dùng thử trực tuyến , nhưng permalink có thể không hoạt động trong một số trình duyệt.

Giải trình

Phần "b8li'U9gN;|"125:Kb8bptạo ra mảng

[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]

ánh xạ từng chữ số của đầu vào đến nơi chữ số được sử dụng. Bất cứ điều gì chung cho tất cả các đầu vào (ví dụ: khoảng trắng đầu và ()) được gán tùy ý 0, ngoại trừ đầu tiên được gán 1 để chuyển đổi cơ sở có thể hoạt động.

l:~f=sau đó chuyển đổi từng chữ số thành một số nguyên và ánh xạ tương ứng, ví dụ như 14441133chúng ta có được

[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= đưa ra chuỗi

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

sau đó chúng tôi nhân đôi, thay thế /<[(bằng \>])và nối thêm để đưa ra một chuỗi dài. Sau đó, chúng tôi chia chuỗi thành các nhóm 4 và ánh xạ theo một mảng khác "r pL|P3{cR`@L1iT"Kb21b, do đó nhận được một chuỗi các chuỗi có độ dài 4 mô tả tất cả các tùy chọn có thể có ở mỗi ô (ví dụ: _=./tất cả các tùy chọn có thể có cho ký tự thứ hai trên dòng thứ hai, bắt đầu từ Mũ Nga).

Cuối cùng, chúng tôi ánh xạ các tùy chọn cho các đầu vào tương ứng .=, chia thành các hàng có độ dài 7 7/và riffle trong một số dòng mới N*.

Chạy thử

11111111

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

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

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

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

19

TI-BASIC, 397 byte

Quan trọng: Nếu bạn muốn kiểm tra điều này, hãy tải xuống từ đây và gửi tệp đó đến máy tính của bạn. Đừng không cố gắng sao chép mã dưới đây vào trình soạn thảo chương trình TI-Connect CE hoặc SourceCoder 3 hoặc một cái gì đó để xây dựng và gửi nó đến máy tính của bạn; trong trường hợp của TI-Connect, nó sẽ nói rằng nó có mã thông báo không hợp lệ. SC3 sử dụng dấu gạch chéo ngược làm dấu phân cách nhận xét ( //bắt đầu nhận xét trong SC3; /\/tuy nhiên, sẽ xuất dưới dạng //) và do đó, nó sẽ không xuất khẩu vũ khí và mũ và như vậy, khiến chương trình hiển thị các bộ phận cơ thể không chính xác và ném LRI: DOMAIN mỗi giờ và sau đó. Công cụ thú vị!

Quan trọng # 2: Hiện tại tôi quá lười để sửa lỗi tải xuống, vì vậy khi bạn chuyển nó sang calc, hãy thay đổi 7dòng thứ ba từ dưới lên X+6. Mã dưới đây là cố định nếu bạn cần so sánh.

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

Tiền thưởng: Tôi đặc biệt thích 12341214.

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

Một số lưu ý:

  • Nó chắc chắn có thể được chơi golf nhiều hơn, không có câu hỏi về điều đó. Tôi gần như tích cực rằng tôi có thể kết hợp đa số, nếu không phải tất cả, xuất ra thành một vòng lặp For (vòng lặp. Ngoài ra, tôi khá chắc chắn rằng tôi có thể hợp nhất một số chuỗi với nhau.
  • Trong Str4 (đôi mắt) tôi sử dụng "dấu chấm cốt truyện" ( [2ND] → [0]CATALOG → [3]θ → scroll down, it's between ﹢ (small plus) and · (interpunct)) trái ngược với một khoảng thời gian để đôi mắt không thẳng hàng với dấu phẩy, bởi vì nó trông kỳ lạ như địa ngục.
  • Trong Str8 (cơ sở), tôi đã phải sử dụng một diaeresis () thay vì dấu ngoặc kép vì không có cách nào để thoát các ký tự trong TI-BASIC và dấu ngoặc kép được sử dụng để bắt đầu / kết thúc chuỗi.
  • Trong TI-BASIC, không cần phải đóng dấu ngoặc đơn và dấu ngoặc nếu chúng được theo sau bởi dấu hai chấm, dòng mới hoặc → (được sử dụng để gán var) và dấu ngoặc kép (chuỗi) có thể không được tiết lộ khi theo dòng mới hoặc →.

1
Đầu tiên, trong dòng thứ hai, length(Ansnên được length(Str9; Thứ hai, bạn đã thử kết hợp Str3 qua Str6 thành một chuỗi chưa?
lirtosiast 17/05/2015

Ôi, rất tiếc! Tôi nghĩ rằng đó là cố định trong tải về, mặc dù. Bên cạnh đó, tôi đã không nhìn vào điều này nhiều kể từ khi tôi thực hiện nó, nhưng tôi đã đề cập rằng tôi có thể có thể hợp nhất một số chuỗi với nhau; Thỉnh thoảng tôi sẽ xem xét điều đó vào hôm nay / tuần này.
MI Wright

18

C, 280 272 264 byte

Chỉ chơi golf một phần vào thời điểm này, nhưng đây là một thử thách thú vị.

#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);}

(Có thêm một số \ n cho khả năng đọc.) Tôi hy vọng definesẽ biến mất khi chơi gôn.

Một phiên bản dễ đọc hơn là

#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 byte

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];}

Một phiên bản có thể đọc được:

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];
}

Tôi lấy ý tưởng từ câu trả lời của Reto Koradi . Có một số cải tiến thú vị mà tôi đã làm, có thể đảm bảo đăng một câu trả lời riêng:

  • Chuyển đổi từ chức năng sang chương trình (+10)
  • Đã chuyển dòng mới vào chuỗi điều khiển (-7)
  • Đã thêm 3 vào tất cả các mã ký tự để có ít ký tự thoát hơn như \"(-3)
  • Đọc từ chuỗi với autoincrement; cũng được thay thế t[i++]bằng *t++(-4)
  • Thay thế whilebởi for; đã xóa {}(-4)
  • Chấm dứt vòng lặp đơn giản: đọc cho đến \0(-9)
  • Chuyển đổi t[...],t+=4để(...)[t+=4] loại bỏ toán tử dấu phẩy (-1)

Tại sao tất cả những rắc rối đó? Để chia sẻ một yêu thích của tôi, ma tuyết:

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

Có thể đặt dcác parens phía saumain
trần mèo

10

JavaScript, 489 (không có dòng mới và tab)

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'));

chạy với node snowman.js 33232124


6
Chào mừng bạn đến với Code Golf! Một vài gợi ý: Bạn có thể không cần một parseIntcuộc gọi, vì phép trừ tự động cố gắng truyền toán hạng chuỗi thành số. Ngoài ra, bạn có thể thoát khỏi functiongói và chỉ dẫn i=process.argv[2], trừ khi bạn đang sử dụng nó cho đệ quy hoặc phạm vi biến. Ngoài ra, bạn có thể thoát khỏi shoàn toàn và chỉ cần làm console.log([ ... ].join('\n')).
apsillers

3
Trên thực tế, bạn hoàn toàn có thể loại bỏ hoàn toàn việc chuyển đổi chuỗi thành mảng nếu bạn đặt dấu phẩy hàng đầu trong mỗi mảng để tăng chỉ mục của từng mục. Nó thêm 7 ,ký tự, nhưng nó cho phép bạn loại bỏ hơn 50. Cuối cùng, một tối ưu hóa rất tinh vi sẽ được sử dụng q=j[4]-1thay vì q=j[4]==1(và sau đó lật lại việc sử dụng q!q) của bạn. Điều này sẽ gây qđược 0(một giá trị falsey) khi j[4]1, và nếu không một giá trị khác truthy. Điều này trái ngược hoàn toàn với các giá trị đúng / sai hiện tại của bạn, vì vậy bạn chỉ cần chuyển đổi q!q.
apsillers

Xin lỗi vì gò phản hồi về câu trả lời đầu tiên của bạn! Cá nhân tôi thấy việc sửa đổi bài nộp của mình là một trong những phần thú vị nhất của việc chơi golf; lời xin lỗi của tôi nếu bạn không chia sẻ cảm xúc của tôi. :)
apsillers 06/05/2015

@apsillers phản hồi của bạn được đánh giá rất cao! Tôi chuẩn bị đi ngủ đêm qua và sau đó viết nó cho vui với ý định mở rộng nó xuống đơn giản nhất có thể sau này. Tôi sẽ thực hiện một số chỉnh sửa tối nay!
Christopher Reid

9

Bình, 203 byte

M@GCHgc"  ___

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

Cười ngả nghiêng. Dùng thử trực tuyến: Trình biên dịch / thực thi Pyth

Giải trình

Đầu tiên tôi xác định hàm trợ giúp g, lấy danh sách và char làm đầu vào, chuyển đổi char thành giá trị ASCII của nó và lấy phần tử tương ứng (gói mô-đun).

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

Những thứ khác chỉ là in từng dòng. Ví dụ, dòng đầu tiên là:

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

Btw. Tôi đã thử nghiệm một chút với .F"{:^7}", trong đó tập trung vào một chuỗi. Sử dụng nó, tôi có thể lưu một vài khoảng trống trong mã của mình, nhưng cuối cùng nó không lưu bất kỳ byte nào.


9

R, 436 437 byte

Đây là lần thử đầu tiên của tôi về , sử dụng R không phải là ngắn nhất nhưng vẫn vui. Ít nhất là tôi đang đánh bại JavaScript (bây giờ) ...

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="")}

Kiểm tra:

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

Tôi thực sự vật lộn với XYbị đa năng nhưng với những thứ ở giữa, cuối cùng đã tách ra từng dòng trong ( X, S) và ( Y, U).

function và chuyển đổi từ chuỗi sang số nguyên cũng rất dài dòng.

Chỉnh sửa 436 => 437

Phải sửa một khoảng trống bị thiếu được chú ý bởi @OganM

Tôi có thể giảm xuống còn 428 thay thế các ngắt dòng giữa các biến bằng ;, nhưng mã "một dòng" trông rất tệ và không thể đọc được Tôi sẽ không tham lam như vậy.


bạn cần và thêm char cho chiếc mũ thứ 4
OganM

@OganM Cảm ơn vì thêm byte! :( Đã sửa.
Molx

Khi thực hiện codegolf, chúng ta thường tính mỗi dòng mới là một ký tự (như trên * nix) trái ngược với hai (như trong Windows). Vì vậy, không quan trọng bạn sử dụng dấu chấm phẩy hay dòng mới.
ace_HongKongInependence

@ace Cảm ơn các mẹo, tốt để biết!
Molx

8

Haskell, 361 306 289 byte

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

Sử dụng:

putStrLn $ p "12333321"

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

Cách thức hoạt động: lập chỉ mục cho mọi thành phần của danh sách [hat options, left upper arm options, left eye options, ..., base options]với số đầu vào tương ứng và nối nó thành một danh sách. Tôi đã chia cánh tay trái và tay phải thành một phần trên và dưới, để tôi có thể xây dựng người tuyết theo từng dòng.

Yêu thích của tôi là cổ điển 11112211.

Chỉnh sửa: chuyển từ danh sách chuỗi sang chuỗi cho các bộ phận (mũ, mắt, ...). Cần một tham số thứ hai, độ dài của chuỗi con cần thực hiện.

Chỉnh sửa II: trích xuất các chuỗi con phổ biến


8

C, 233 230 byte

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("");}}

Với dòng mới và khoảng trắng để dễ đọc hơn:

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("");
    }
}

Toàn bộ điều là lực lượng khá vũ phu. Nó sử dụng một bảng chứa một mục nhập cho mỗi trong số 35 (5 dòng có độ dài 7) ký tự. Mỗi mục trong bảng là:

  • Một nhân vật thường xuyên: , (, ). Độ dài của mục nhập bảng là 1 ký tự.
  • Chỉ mục của phần cơ thể, theo sau là 4 ký tự có thể tùy thuộc vào lựa chọn phần trong đầu vào. Độ dài của mục nhập bảng là 5 ký tự.

Đoạn mã sau đó lặp lại trên 35 ký tự và tìm giá trị trong bảng.


8

R 414 byte

Phiên bản sửa đổi của phiên bản Molx

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="")}

Chỉ cần hợp nhất các biến riêng biệt thành một. Khăn choàng của một số không gian đã được sử dụng cho X=c(thói quen.


7

CJam, 200 191 byte

Điều này chắc chắn có thể được chơi golf rất nhiều. (Đặc biệt nếu tôi căn cứ mã hóa nó). Nhưng ở đây dành cho người mới bắt đầu:

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')

Đầu vào đi vào STDIN. Ví dụ: đầu vào 23232223cho:

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

Dùng thử trực tuyến tại đây


7

Haskell, 333 byte

Trình đầu tiên của tôi! Xây dựng người tuyết từ trên xuống dưới, từ trái sang phải. Tôi chia hai cánh tay thành hai chức năng cho mỗi cánh tay, phần bên cạnh đầu và phần bên cạnh cơ thể.

Các hàm s lấy một danh sách các số nguyên và nối đầu ra của các hàm tạo ra các bộ phận cơ thể được đưa ra danh sách con chính xác của đầu vào.

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

Nó dựa vào chức năng

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

trong đó trả về phần tử thứ n của danh sách được đưa ra. Điều này cho phép danh sách các mũ trong một, cũng như những thứ như

k=y" /  "

tất cả các hàm này đều sử dụng giảm beta để đối số của chúng được truyền dưới dạng chỉ mục cho hàm y.

Đầu ra:

λ> s $ repeat 1

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

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

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

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

@ Calvin'sHob sở thích Cảm ơn, tôi nghĩ rằng tôi đã sửa nó ngay bây giờ.
Craig Roy

7

Python 3, 349 336 254 251 byte

Rất nhiều cho việc làm luận án của tôi.

Đây là nội dung của tập tin snowman.py :

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)]))

Và đây là cách tôi gợi lên người tuyết yêu thích của mình:

s('11112311')

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

Giải trình

# 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))

Bạn có thể xóa khoảng trắng ở dòng 2 giữa [int(i)]for. Tương tự, bạn có thể loại bỏ khoảng trắng trong dòng 7 giữa f(int(i))for. Ngoài ra, trong print()tuyên bố của bạn, bạn không cần phải in không gian cuối cùng - đó không phải là một phần của người tuyết. Cuối cùng, thay đổi print()cuộc gọi của bạn thành một dòng đơn print("{}\n{}({}{}{}){}\n{}({}){}\n ({})".format(*c)). Mỗi trong số này sẽ giúp bạn tiết kiệm 1 byte, tiết kiệm tổng cộng 4 byte :)
ace_HongKongInependence

1
Ngoài ra, thay vì sử dụng biến toàn cục n, bạn có thể xác định một thuộc tính của hàm f. Vì vậy, bạn có thể thay thế các dòng 5-6 bằng: def f(m):f.n+=1;return l[4*m+int(b[f.n])-1]<newline> f.n=-1. Điều này làm giảm thêm 3 byte.
ace_HongKongInependence

1
@ace Cảm ơn, chưa bao giờ nghe nói về thuộc tính chức năng trước đây, đã học được điều gì đó mới!
Matty

6

PowerShell , 199 byte

Lấy cảm hứng từ Reto Koradianatolyg .

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

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

Lưu ý: Dòng 3 có 2 không gian đường mòn, dòng 4 có không gian đường mòn.

Yêu thích của tôi là 44444444"bảo vệ Nga buồn ngủ":

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

5

JavaScript (ES6), 247

Không phải là quảng cáo tốt @ NinjaBearMonkey's :(

Kiểm tra trong đoạn trích (với Firefox)

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 byte

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

-6 byte nhờ @Grimy .

Hãy thử trực tuyến hoặc xác minh một vài trường hợp thử nghiệm .

Giải trình:

Trước tiên chúng ta tạo chuỗi mẫu:

…( )         # 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)"

Trông như thế này:

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

Sau đó, tôi lặp qua các chữ số của đầu vào:

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

Và làm như sau:
Đẩy chỉ mục (0-index) Ncủa danh sách:

  N          # Push the index of the loop

Đẩy tất cả các phần có thể thành một danh sách các danh sách nhân vật:

  ”</[(
  ._-=:"ÆŸ,*”
            "# 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"],[" "," "," ","<","\"," "," ","/"],[" "," "," ",">","/"," "," ","\"],[" "," "," "," ",":"," ","]"," ","[",">"," ","<"],[" "," "," "," ",":"," ","""," ",""","_","_","_"]]

Sử dụng chỉ mục vòng lặp Nđể lấy danh sách ký tự của phần chúng tôi hiện đang làm việc:

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

Sau đó chia danh sách ký tự thành bốn phần bằng nhau và sử dụng chữ số đầu vào y(được lập chỉ mục 1) để lập chỉ mục cho nó. (LƯU Ý: Vì 05AB1E được lập chỉ mục 0, nhưng đầu vào là 1 chỉ mục, nên sẽ giảm logic xuống 1 trước khi lập chỉ mục. Tuy nhiên, vì 05AB1E có tự động đóng gói (nghĩa là lập chỉ mục 3trong danh sách [1,3,5]sẽ dẫn đến 1), tôi chỉ đơn giản là xoay các phần một lần để các phần có nr 4 trong phần mô tả thử thách nằm ở phía trước danh sách.)

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

Và sau đó thay thế chỉ mục 0 chỉ mục của vòng lặp mà chúng ta đã đẩy lúc đầu, từng cái một bằng các ký tự một phần:

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

Và cuối cùng kết quả là đầu ra ngầm.

Xem mẹo 05AB1E này của tôi (phần Cách nén số nguyên lớn?Cách nén danh sách số nguyên? ) Để hiểu cách các phần nén hoạt động.


Đối với mục yêu thích của tôi, nó vẫn giống như 'thỏ tuyết' như 1,5 năm trước khi tôi đăng giải pháp Java của mình :

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

-4 , chỉ đủ để đánh bại CJam!
Grimy

1
Xuống tới 122 , và cũng gần hơn với những gì ban đầu bạn có.
Grimy

@Grimy Phiên bản 122 byte của bạn có một 0giữa hai mắt. :)
Kevin Cruijssen

Chỉ cần một lỗi mã hóa cơ sở 12, nên đủ dễ để sửa!
Grimy

@Grimy Bạn nói đúng. Tôi đã không có nhiều thời gian ngày hôm qua, nhưng đó thực sự là một sửa chữa đơn giản trong danh sách. Cảm ơn vì -6! :)
Kevin Cruijssen

2

Java 8, 548 545 432 401 399 byte

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]);}

Hãy thử nó ở đây.

Giải trình:

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

Yêu thích của tôi:

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

Tôi không biết tại sao, nhưng nó trông hơi dễ thương. Giống như một chú thỏ với chiếc mũ của Nga thay vì đôi tai.


1

F #, 369 byte

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]

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

Bởi vì gsử dụng một bộ truy cập mảng, tôi cần xác định rõ ràng loại trong định nghĩa hàm là a string, đó là lý do tại sao định nghĩa hàm có (g:string).

Ngoài ra, nó thường là một mảng stringstruy cập bởi một chỉ mục. Mũ, cánh tay trái và tay phải đi trên các đường riêng biệt được chia thành các mảng trên và dưới riêng biệt. Các ichức năng thay đổi một số trong đối số gvào chỉ số mảng. Và chữ cái bthay thế các chuỗi một không gian trong các mảng.

Thử thách lớn! Người tuyết yêu thích của tôi có lẽ là 242244113:

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

tôi đang theo dõi bạn


1

PHP, 378 byte

<?$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)');

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

Tôi thích ông Owl thông thái 31333342

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

1

Python 2.7, 257 byte (tôi nghĩ)

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

trong đó 'i' là đầu vào dưới dạng chuỗi (ví dụ: "13243213")


2
Chào mừng đến với PPCG! Khi nó xảy ra, nó là 256 byte. Thật không may, bạn không thể cho rằng đầu vào được lưu trữ trong một biến. Tuy nhiên, bạn có thể thay thế icho input()tổng số 262 byte
H.PWiz

0

Phi tiêu , 307 byte

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]]})';}

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


0

Zsh, 247 byte

thử trực tuyến !!

(){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}

người tuyết yêu thích:

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