이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

다음 디브온 코드골프 문제

출처: http://agile.egloos.com/5774107

디브온에서 미니대안언어축제가 진행되던 M2 밖에 텍스트큐브 부스에서 재미있는 코드골프 문제 풀기가 있었습니다. 150자 이하로 푸신 분들에게는 즉석에서 제공되는 원두커피와 텀블러가 상으로 주어졌다고 합니다.

문제는 아래와 같습니다. 이 결과가 나와야 하는데 언어 제약은 없답니다.

     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *

2014/03/15 23:18

pahkey

61개의 풀이가 있습니다.

파이썬입니다.

마름모를 출력하는 코드에서 힌트를 얻었습니다.

크기는 총 116바이트입니다. (두 번째 들여쓰기는 공백이 아닌 탭문자(\t)로 해야 116바이트가 나옵니다.)

r=range(-5,6)
for y in r:
 l=""
 for x in r:
    a,b=abs(x),abs(y)
    l+=(" ","*")[a+b==4or(5,0)in[(a,b),(b,a)]]
 print l

여기에는 총 2가지의 파이썬 골프기교가 사용되었습니다. (저도 오늘 배웠습니다. ^^)

  1. 들여쓰기: 첫번째 들여쓰기는 ' '(공백한개), 두번째 들여쓰기는 탭(\t)문자
  2. (a,b)[조건식]: 조건식이 참인 경우 1 이되어 b, 조건식이 거짓인 경우 0 이되어 a

참고 : 파이썬 골프 Tips

2014/03/17 09:46

pahkey

안그래도 삼항연산자를 더 짧게 쓰고 싶었는데, 정말 좋은 팁이군요!! 감사합니다 :) - vegan, 2015/05/15 09:32

안녕하세요 python 2.7.6

4의숫자를 바꾸면 크기변경 가능하게 한줄로

print'\n'.join([[l[0]]+l+l[-2::-1]+[l[0]]for l in[[s[0]+s+s[-2::-1]+s[0]for s in[' '*(4-x)+'*'+' '*x for x in range(4+1)]]]][0])

128 바이트

띄어쓰기를 남기고 싶었지만.(158 바이트 ㅜ)

ㅡㅡ 추가 ㅡㅡ

다시 바이트로 하드코딩.

00100
01010
10001
01010
00100

이런식으로

s=[32,32,80,136,260,1539]
for x in s+s[-2::-1]:
    o=''
    while x:o+=x&1 and'*'or' ';x/=2
    print o

99바이트

출력하는부분을 수정하면 더줄일수있겟는데 더 모르겟어요.

ㅡㅡ 추가 ㅡㅡ

bin() 의 존제를 알고 다시해봣지만.

s=[32,32,80,136,260,1539]
for x in s+s[-2::-1]:print ''.join([' *'[int(b)]for b in bin(x)[:1:-1]])

99바이트.

2014/03/17 17:12

BangC

아... 이건 추천입니다. ^^ - pahkey, 2014/03/18 14:25
+1 조금 수정 해 봤습니다. s=[32,32,80,136,260,1539] for x in s+s[-2::-1]: o='' while x:o+=(' ','*')[x&1];x/=2 print o 들여쓰기를 1칸으로 줄이고, 조건식을 조금 수정했더니 94바이트 나오네요.. ^^ - pahkey, 2014/03/18 14:29
+1 역시 이게 좋네요. 한번더 (' ','*')[x&1] => ' *'[x&1] 이렇게 바꾸고. s=[32,32,80,136,260,1539] for x in s+s[-2::-1]: o='' while x:o+=' *'[x&1];x/=2 print o 93바이트(/n/r라인2바이트로) - BangC, 2014/03/18 14:56

예전에 풀어봤던 문제네요. 루비 82자. 더 못 줄이겠던데 ㅜ

"FFtldӝdltFF".codepoints{|p|puts (p-64).to_s.gsub(/([0-9])/){" "*($1.to_i-1)+"*"}}

2014/03/17 21:54

nacyot

오~ 이런게 가능하군요.. 대단합니다. - pahkey, 2014/03/17 23:04
+1 동일한 내용으로 파이썬3 버전으로 만들어 봤어요 ^^ for i in "FFtldӝdltFF": for a in str(ord(i)-64):print(' '*(int(a)-1)+"*",end='') print() 90바이트네요. - pahkey, 2014/03/17 23:55
[0-9] -> . 로 4자 절약 되요. ```ruby "FFtldӝdltFF".codepoints{|p|puts (p-64).to_s.gsub(/(.)/){" "*($1.to_i-1)+"*"}} ``` - Shim Won, 2014/12/13 00:21

77자입니다.

%w[5 5 41 33 25 0070 25 33 41 5 5].map{|_|puts _.gsub(/(.)/){" "*$1.to_i+?*}}

2014/12/13 01:00

Shim Won

Python

print("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *")

2017/07/19 23:58

Noname

print('''
     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *''')

2021/10/04 16:46

서현준

cat("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *")

R입니다. 그냥 아무 생각 안하고 출력해봤습니다. 110자니까 간신히 원두커피와 텀블러는 받을 수 있었겠네요 ㅋㅋ

> cat("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *")
     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *

2014/03/17 01:05

한 성탁

네, ㅎㅎ 이것보다 짧게 만들기도 어렵지요. - pahkey, 2014/03/17 08:43
와우 대박 - 김대원, 2014/04/01 09:38

정가운데를 (0,0)인 직교좌표계로 생각하면 네 개의 대각선은 각각 기울기가 1, -1이고 y절편이 4 또는 -4인 직선으로 생각할 수 있습니다.

크기는 123바이트입니다.

r=-5..5
puts r.map{|y|
r.map{|x|
t=[x.abs,y.abs].minmax
t[1]<5&&[x-y,-x-y,-x+y,x+y].any?{|a|a==4}||t==[0,5]?'*':' '
}.join}

2014/03/17 15:01

Kim Jaeju

String a="     *";
for(int i=0;i<11;i++)
System.out.println(((i==5)?"*":((i>0)?" ":""))+a.substring((i<6)?i:((i<10)?10-i:1))+((i!=5)?((i>1&&i<9)?a.substring((i<5)?(8-2*i):(2*i-12)):""):"  "+a+"*"));

자바로 196자입니다ㅠㅠ 원체 자바가 불리하네요 [수정] {}빼고 198자에서 196으로 줄였네요 ㅋㅋㅋ 사소한 한두바이트라도...ㅋㅋ

2014/03/18 00:01

Katherine

자바로 198 바이트면 완전 성공하신겁니다. ㅎㅎ - pahkey, 2014/03/18 10:59
네ㅋㅋㅋ 자바로 이보다 더 짧게 줄일수 있을까요?;ㅋㅋ - Katherine, 2014/03/18 00:23

자바스크립트입니다.

function b(n){a="";while(--n)a+=" ";return a+"*";}e="\n",c=[b(6),b(6),b(5)+b(2),b(4)+b(4),b(3)+b(6)];alert(c.join(e)+e+"**"+b(8)+"*"+e+c.reverse().join(e))

156자 입니다. 도와주세요 ㅠㅠ

2014/04/04 18:11

ggg

몇개만.. 1. a="";while(--n)a+=" "; -> for(a="";--n;)a+=" "; 2. e="\n", ... join(e) -> join(e="\n") 3. return a+"*"; -> return a+"*" - Shim Won, 2014/12/13 10:41
Console.WriteLine("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *");

2015/06/24 23:26

Steal

깊이 생각안하고 마구잡이로 하니 딱 150자나오네요.... 커피랑 텀블러만....

def p(x): print(x)
a=' '
b='*'
c='\n'
d=a*5+b
d=d+c+d
p(d)
L=[0]*3
for i in [0,1,2]:
 L[i]=a*(4-i)+b+a*(2*i+1)+b
 p(L[i])
p(b*2+a*7+b*2)
p(L[2]+c+L[1]+c+L[0])
p(d)

2016/01/09 00:23

SPJung

for i in range(-5,6):
    k=abs(i)
    s=' '*k+[' *','**'][k in[0,5]]+' '*(5-k)
    print s[:-1]+s[-3::-1]

이번엔 좀 다르게..

for n in [1,1,2,4,8,48,8,4,2,1,1]:
    s=''.join([(' ','*')[int(x)] for x in bin(n)[2:]])
    print "%6s"%s+"%-s"%s[-2::-1]

이런 방법도..90 바이트

s='5 5 41 33 25'.split()
for l in s+'0070'+s[::-1]:print''.join(' '*int(n)+'*'for n in l)

2016/01/19 23:29

상파

s = '*'; mul = 20; k = 2*mul+1; i = range(-((k-1)//2), ((k-1)//2)+1)
for x in i:
    x = -2*abs(x)+k-4
    if x<0:print(' '*((k-1)//2)+s+' '*((k-1)//2))
    elif x == k-4:print(s*2+' '*x+s*2)
    else:print(' '*((k-2-x)//2)+s+' '*x+s+' '*((k-2-x)//2))

mul = 크기 입니다. 파이썬 3.5.1

2016/04/15 13:07

Flair Sizz

150character만 사용해서 어떻게 해야하나 고민했었는데 그냥 단순히 출력하는 방법이있었군요! 다른 몇몇분들도 이렇게 하신 것 같습니다. 제 C++ code입니다.

#include <cstdio> 
using namespace std; 

int main(){
  printf("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *\n");
  return 0; 
}

2016/06/08 19:28

iljimae

Ruby

리스트 115 글자.

a = %w(5*5 5*5 4*1*4 3*3*3 2*5*2)
puts (a+%w(**8**)+a.reverse).map {|e|e.chars.map {|c|c>"*" ? " "*c.to_i : c}*''}

2016/07/23 16:35

rk

c언어

#include<stdio.h>
void main(){
printf("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *");
}

2017/01/19 15:20

코딩초보

javascript(ES6)

133 bytes

console.log([65,65,133,273,577,3587,577,273,133,65,65].map(v=>v.toString(2).slice(1).replace(/0/g," ").replace(/1/g,"*")).join("\n"))

그냥 찍는 것이 더 짧다는...

118 bytes

console.log("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *");

좀더 고민해보고 더 줄였습니다.

91 bytes

console.log("5\n5\n41\n33\n25\n0070\n25\n33\n41\n5\n5".replace(/\d/g,$=>" ".repeat($)+"*"))

2017/06/17 22:06

funnystyle

def s(s):
    print(str(s.center(11)),end='\n')
a='*'
b='* *'
c='*   *'
d='*     *'
e='**       **'
l=[a,a,b,c,d,e,d,c,b,a,a]
for i in l:
    s(i)

2017/07/30 15:46

다크엔젤

public class CodeGolf {
    public static void main(String[] agrs)
    {
        System.out.println("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *\n");
    }
}

2017/07/31 11:11

곽철이

파이썬 3.6

m,sl=1,['*']
print('*'.center(11))
for i in range(4):
    s='*'
    if i > 0:
        s+=' '*m+'*'
        m+=2
    print(s.center(11))
    sl.append(s)
print("**       **")
sl.reverse()
for i in sl:print(i.center(11))

2018/01/08 19:08

justbegin

# 파이썬

f=range(-5,6)
for y in f:
    l=""
    for x in f:
        x,y=abs(x),abs(y)
        l+=(" ","*")[x+y==4or(5,0)in[(x,y),(y,x)]]
    print(l)

2018/02/07 23:41

olclocr

a = ' '
b = '*'
c = '\n'
d = a*5+b+c
e = a*4+b+a+b+c
f = a*3+b+a*3+b+c
g = a*2+b+a*5+b+c
h = b*2+a*7+b*2+c
print(d+d+e+f+g+h+g+f+e+d+d)

2018/02/11 15:20

김동하

a=' '*5
c='   '
d='  '
f='*'
g='\n'
h=a+f+g
i=' '*4+f+' '+f+g
j=(c+f)*2+g
k=d+f+a+f+g
l=f*2+' '*7+f*2+g
print(h+h+i+j+k+l+k+j+i+h+h)

2018/02/19 05:05

D B

for i in [32,32,80,136,260,1539, 260, 136, 80, 32, 32] :
    print(bin(i)[2:].zfill(11).replace('1', '*').replace('0', ' '))

2018/03/08 18:16

박강민

public class DivOn {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        char[][] table = new char[11][11];
        for(int i = 0; i< 11; i++){
            for(int j=0; j < 11; j++){
                if((i == 0 || i == 1 || i == 9 || i == 10) && (j == 5) ){
                    table[i][j] = '*';
                }else if((i == 2 || i == 8) && (j == 4 || j == 6)){
                    table[i][j] = '*';
                }else if((i == 3 || i == 7) && (j == 3 || j == 7)){
                    table[i][j] = '*';
                }else if((i == 4 || i == 6) && (j == 2 || j == 8)){
                    table[i][j] = '*';
                }else if(i == 5 && (j == 0 || j == 1 || j == 9 || j == 10)){
                    table[i][j] = '*';
                }else{
                    table[i][j]  = ' ';
                }
            }
        }
        for(int i=0; i< 11; i++){
            for(int j = 0; j<11; j++){
                System.out.print(table[i][j]);
            }
            System.out.println();
        }
    }

}

2018/04/09 22:19

김태훈

^^

package main

func main() {
    a := "     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *\n"
    print(a)
}

2018/04/10 15:08

mohenjo

Swift입니다. 118바이트. 이게 젤 짧네요.

let m = """
     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *
"""
print(m)

2018/04/27 06:14

졸린하마

public class DivOn {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        char[][] table = new char[11][11];
        for(int i = 0; i< 11; i++){
            for(int j=0; j < 11; j++){
                if((i == 0 || i == 1 || i == 9 || i == 10) && (j == 5) ){
                    table[i][j] = '*';
                }else if((i == 2 || i == 8) && (j == 4 || j == 6)){
                    table[i][j] = '*';
                }else if((i == 3 || i == 7) && (j == 3 || j == 7)){
                    table[i][j] = '*';
                }else if((i == 4 || i == 6) && (j == 2 || j == 8)){
                    table[i][j] = '*';
                }else if(i == 5 && (j == 0 || j == 1 || j == 9 || j == 10)){
                    table[i][j] = '*';
                }else{
                    table[i][j]  = ' ';
                }
            }
        }
        for(int i=0; i< 11; i++){
            for(int j = 0; j<11; j++){
                System.out.print(table[i][j]);
            }
            System.out.println();
        }
    }

}

2018/05/21 17:07

배혁남

150자 생각안하고 걍 풀었습니다. Python

n_additional = 3
n = 10
width = 2*n - 1 + n_additional*2
a = "*"
ans = list()
for i in range(n_additional):
    ans.append("*".center(width, " "))
for i in range(n):
    if i != n - 1:
        ans.append((a+a[::-1][1:]).center(width, " "))
        a += " "
    else:
        ans.append(("*"*n_additional+a+a[::-1][1:]+"*"*n_additional).center(width, " "))

print(*(ans+ans[::-1][1:]), sep="\n")

2018/06/05 15:17

Taesoo Kim

그냥 출력하면 150자 이하가 되네요.

public class test {
    public static void main(String[] args) {
        System.out.print(
                "     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *");
    }
}

2018/06/12 19:07

김지훈

107 글자! 파이썬으로 출력해버리기~ 이 방법 은 아무도 없다는...ㅋㅋㅋ

print('''     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *''')

2018/07/01 23:10

재즐보프

for i in range(-5,6):
  for j in range(-5,6): x,y=abs(i),abs(j); print('*'if x+y==4or(x,y)in[(5,0),(0,5)]else' ',end='')
  print()

2018/07/18 19:41

Creator

C#

실행 가능한 최소한의 프로그램 구조(클래스 및 진입점)를 갖추면...

class P{static void Main(){System.Console.WriteLine(@"     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *");}}

2018/09/10 19:07

mohenjo

def func(st):
    print(str(st.center(11)),end='\n')
a='*'
b='* *'
c='*   *'
d='*     *'
e='**       **'
l=[a,a,b,c,d,e,d,c,b,a,a]
for i in l:
    func(i)

2018/12/21 21:03

S.H

print('''     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *''')

치졸하게 106자ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

2018/12/23 22:48

myyh2357

n = '\n'
a = 5*' ' + '*' + n
b = 4*' ' + '* *' + n
c = 2*'   *' + n
d = '  *' + '   ' + '  *' + n
e = '**' + 7*' ' + '**' + n
print(a+a+b+c+d+e+c+b+a+a[:-1])

2019/01/11 13:40

판다네밥상

마지막줄에 d가 빠진 것 같은데......... print(a+a+b+c+d+e+d+c+b+a+a[:-1]) 이거 아닐 까요? - 김영성, 2019/01/21 14:15
for x in [0,1,2,3,4,3,2,1,0]:
    a=(6-x-(1,2)[x==4])*' ',('*','**')[x==4]
    print(('     *\n     *')if x==0 else(a[0]+a[1]+' '*(2*(x)-1)+a[1]+a[0]))

길가의님의 풀이를 보고 새로운 삼항연산자같이 쓰는 방법을 알게 되었습니다.

치사하게 딱 150 글자로 맞췄습니다.

2019/01/21 14:12

김영성

print("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *")

2019/01/29 10:55

D.H.

150자는 넘지만.. 좋은 방법 배워갑니다.

l=[' '*5+'*']
for i in range(0,4):
    s=''
    for j in range(0,11):
        s+=(" ","*")[i+j==5 or j-i==5]
    l.append(s)   
print('\n'.join(l))
print('**       **') 
l.reverse()
print('\n'.join(l))

2019/03/07 11:27

쨔이

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n");
        }
    }

2019/03/10 10:58

bat

r = range(5, -6)

for x in r:
  l = ''
  for y in r:
    a, b = abs(x), abs(y)

    l += (' ', '*')[a+b==4 or (5,0) in [(a,b), (b,a)]]
  print(l)

2019/03/13 20:29

Gerrad kim

for i in range(-5,6):
 s=""
 for j in range(-5,6):
    q,w=abs(j),abs(i)
    s+=(" ","*")[q+w==4 or (5,0) in [(q,w),(w,q)]]
 print (s)

각각의 행들과 인덱스를 분석하여 규칙성을 찾는데 주로 시간을 들였던것 같읍니다. 더욱이 삼항연산자또한 알게되어서 매우 유익한 문제였읍니다.

그러나 가장 간단하며 경품까지 받을 수 있는 풀이는...

print('''
     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *

''')

의외로 103~110자 정도 나와서 150자를 안 넘더군요...;; 심지어 전자의 풀이보다 글자수가 더 적읍니다..

2019/05/04 16:21

암살자까마귀

print("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *")

딱 이 모양만 출력하면 된다는 점과 제 코딩 실력을 생각하면....ㅠㅠㅠㅠ 이게 최선인것 같아요

2019/09/26 17:19

GG

python3

r = [ ]
for i in range(5):
  o = [' ']*(5*2+1)
  o[5-i] = '*'
  o[5+i] = '*'
  r.append(o)

r[5-1][0] = '*'
r[5-1][-1] = '*'

for o in [r[0], *r, *r[-2::-1], r[0]]:
  print(''.join(o))

단어 수: 33
문자 수(공백 제외): 140

2019/10/30 18:10

조현우

print("""
     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *
     """)

2019/10/31 22:58

semipooh

r=range(-5,6)
for y in r:
    l =''
    for x in r:
        x,y=abs(x),abs(y)
        l+='*' if x+y==4or((x,y)in((5,0),(0,5))) else ' '
    print(l)

2020/04/17 11:44

Hwaseong Nam

for i in range(-5,6):
    s=""
    for j in range(-5,6):
        q,w=abs(j),abs(i)
        if q+w == 4 or (5,0) in [(q,w),(w,q)]:
            s+=("*")
        else:
            s+=(" ")
    print(s)

2020/05/12 00:27

Money_Coding

def tree(number):
    num = int(number)
    result = []
    result_print = []
    idx = int(num/2)
    for i in range(num):
        result.append(' ')
    result[idx] = '*'
    result.insert(0,' ')
    result_print.append(''.join(result))
    result = [' ' for i in range(num)]

    for i in range(num+1):
        idx1 = idx + i
        idx2 = idx - i

        if idx1 >= num:
            if idx1 == num:
                idx1 = num - (i - idx)
                idx2 = num - idx1 - 1
                result[idx1] = '*'
                result[idx2] = '*'
                result.insert(0,'*')
                result.insert(-1,'*')
                result_print[-1] = ''.join(result)
                result = [' ' for i in range(num)]
                continue
            idx1 = num - (i - idx)
            idx2 = num - idx1 - 1

        result[idx1] = '*'
        result[idx2] = '*'
        result.insert(0,' ')
        result_print.append(''.join(result))
        result = [' ' for i in range(num)]

    result[idx] = '*'
    result.insert(0,' ')
    result_print.append(''.join(result))

    for a in result_print:
        print(a)

tree(7)

2020/12/17 08:51

DSHIN

def a():
    print('     *')
def b(x):
    print(' '*(5-x)+'*'+' '*(2*x-1)+'*')  
a()
a()
b(1)
b(2)
b(3)
print('**'+' '*7+'**')
b(3)
b(2)
b(1)
a()
a()

2021/01/06 16:17

hankyu

r=range(11)
for i in r:
    l=""
    a = i - 4
    for j in r:
        if(i % 5 == 0 and j % 5 ==0 and abs(i - j) == 5 ): l+="*"                    
        elif((0< i < 6 and (j == 6 - i or j == 4 + i)) or (5 < i < 10 and (j == a or j == 10 - a))): l+="*"
        else:l+=" "
    print(l)

150자 못만들겠습니다.. 텀블러는 못 받겠군요.

2021/01/12 01:40

guma go

print("     *\n     *\n    * *\n   *   *\n  *     *\n**       **\n  *     *\n   *   *\n    * *\n     *\n     *")

2021/03/28 21:43

fox.j

r=range(-5,6)
for y in r:
 l=""
 for x in r:
    a,b=abs(x),abs(y)
    l+=(" ","*")[a+b == 4 or (5,0) in [(a,b),(b,a)]]
 print(l)

추천답안 써보면서 연습했는데 삼항연산자도 신기하고 배울점이 정말 많네요 ㅜ

2021/06/06 14:06

ss2663

#codingdojing_daum_divon_re
#다른 사람들 코드를 참고.
""" 
0b00000100000 = 32
0b00001010000 = 80
0b00010001000 = 136
0b00100000100 = 260
0b11000000011 = 1539
"""
#1
s = [32, 32, 80, 136, 260, 1539]
OX = str.maketrans('10','* ')
for x in s+s[-2::-1]:
    print((bin(x)[:-7:-1]+bin(x)[-5:]).translate(OX))

#2
s = [32, 32, 80, 136, 260, 1539]
for x in s+s[-2::-1]:
    print((bin(x)[:-7:-1]+bin(x)[-5:]).replace('1','*').replace('0',' '))

#3 1의 자리를 앞으로 보내는 개념, 풀이랑 동일버젼.
s = [32, 32, 80, 136, 260, 1539]
for x in s+s[-2::-1]:
    o=''
    while x:
        o+=' *'[x&1]
        x//=2
    print (o)

#4 수정해보자, 2를 조금 바꾸어서 뒤집는다고 생각 굳이 뒷부분을 더할필요가 없네.
s = [32, 32, 80, 136, 260, 1539]
for x in s+s[-2::-1]:
    print(bin(x)[:1:-1].translate(str.maketrans('10','* ')))

추천 풀이를 활용하여 조금씩 변형해보았습니다.

2021/08/01 16:28

Jaeman Lee

python 2.7

for i in range(-5,6):
    a=2 if i==0 else 1
    t=-abs(2*i)+7
    print('{:^11}'.format('*')) if t<0 else '{:^11}'.format("*"*a+" "*t+"*"*a)

141byte 조건부 표현식과 포매팅을 이용했습니다. python 3버전에서는 f 문자열 포매팅을 이용해서 살짝 더 짧아질 수는 있겠네요. 그래도 print함수만 사용한것보다는 길다는...ㅠㅠ

2021/09/22 17:07

이성연

for i in range(-5,6): a=abs(i) b='{0}{1}{2}{1}'.format if a>3: print(" ") elif i==0: print(b(" "0,""2," "7)) else: print(b(" "(a+1),""," "(7-2*a)))

2021/12/27 02:52

양캠부부

공백 제외 142byte

def code_golf(_string):
    for i in _string:
        print(" " * int(i),end='*')
    print("")

for i in ["5","5","41","33","25","0070","25","33","41","5","5"]:
    code_golf(i)

2022/01/09 16:36

강태호

a='00123432100'
b='91234567899'

for i in a:
    print(''.join([[' ','*'][abs(5-int(x)) == abs(int(i)%5)] for x in b]))

2022/02/09 15:15

로만가

print('     *')
print('     *')
print('    * *')
print('   *   *')
print('  *     *')
print('**       **')
print('  *     *')

2022/06/20 12:38

김시영

# 윗 분들의 풀이를 참조하여
R = [5,4,3,2,1,0]
for r in R+R[-2::-1]:
    z = ''
    for c in R+R[-2::-1]:
        z += (' ','*')[r+c==4 or (r,c) in [(0,5),(5,0)]]
    print(z)

2024/01/03 22:59

insperChoi

JAVA입니다. 아무리 짧게 만들려고 해도 한계가 있네요;;

package question4.다음_디브온_코드골프_문제;

public class Main {
    public static void main(String[] args) {
        char[][] cs = new char[11][11];
        cs[0][5] = '*';cs[5][0] = '*';cs[10][5] = '*';cs[5][10] = '*';
        for (int i = 1; i <= 5; i++) {cs[6-i][i] = '*';cs[6-i][10-i] = '*';cs[4+i][10-i] = '*';cs[4+i][i] = '*';}
        for (char[] cr : cs) {
            for (char c : cr) {
                System.out.print(c);
            }
            System.out.println("");
        }
    }

}

2025/02/23 22:05

박준우

목록으로