আমাকে উইন্ডো ম্যানেজার করুন!


14

আমি কোড ব্লোট ঘৃণা!

তাই আমি আমার উইন্ডোজ 7 সিস্টেমটি একটি গল্ফযুক্ত সংস্করণ দ্বারা প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছি। তবে, আমি জানি যে এটি সহজ নয়, তাই প্রথমে একটি প্রোটোটাইপ তৈরি করা যাক। এটি ব্যবহারকারীর কাছ থেকে উইন্ডোগুলির একটি তালিকা নেবে এবং মান আউটপুটটিতে সিউডো-গ্রাফিক ডিসপ্লে ব্যবহার করে তাদের দেখায়।

উদাহরণস্বরূপ: ব্যবহারকারী ইনপুট:

0,0,15,10
15,10,20,15
10,13,15,15
9,1,16,3
17,5,20,7
11,2,17,4
15,4,19,6
13,3,18,5

কোড গল্ফ ® উইন্ডো ম্যানেজার ™ আউটপুট:

┌──────────────┐
│ :::::::: ┌─────┴┐
│ :::::::: │: ┌────┴┐
│ :::::::: └─┤: ┌───┴┐
│ :::::::::: └─┤ :::: ├┐
│ :::::::::::: └─┬──┘├┐
│ :::::::::::::: ├─┬─┘│
│ :::::::::::::::: │ └──┘
│ :::::::::::::: │
│ :::::::::::::: │
└──────────────┼────┐
               │ :::: │
               │ :::: │
          ┌────┤ :::: │
          │ :::: │ :::: │
          └────┴────┘

ইনপুট:

  • স্ট্যান্ডার্ড ইনপুট থেকে নেওয়া (বা যদি আপনার সিস্টেমে না থাকে তবে stdinকোনও পদ্ধতি যা ইনপুটটির বিভিন্ন লাইন সরবরাহ করতে পারে)
  • প্রতিটি লাইনে 4 টি সংখ্যা থাকে, কমা দ্বারা সীমিত - একটি উইন্ডোর স্থানাঙ্ক
  • প্রথম দুটি সংখ্যা: উপরের-বাম কোণে; শেষ দুটি সংখ্যা: নিম্ন-ডানদিকে
  • x,yস্বরলিপি ব্যবহার

আউটপুট:

  • এটি স্ট্যান্ডার্ড আউটপুটে লিখুন (বা, যদি আপনার সিস্টেমে কোনও stdoutকিছুই না থাকে যা মনসোপসিত পাঠ্য প্রদর্শন করে)
  • উইন্ডো সীমানা আঁকার জন্য কোড পৃষ্ঠা 437 থেকে একক বক্স-অঙ্কনের অক্ষর ব্যবহার করুন
  • উইন্ডোজ পরে নির্দিষ্ট করা ইনপুটটিতে পরে নির্দিষ্ট করা হয়েছে
  • কোলন চরিত্রের সাথে উইন্ডোগুলি পূরণ করুন: :
  • নেতৃস্থানীয় এবং পিছনের স্থানগুলি ঠিক আছে, যতক্ষণ না তারা উইন্ডোগুলির প্রান্তিককরণ ভঙ্গ করে না

মন্তব্য:

  • সর্বাধিক রেজোলিউশন আমি সমর্থন করতে চাই: 76 76 (অনুভূমিক) 57 (উল্লম্ব) দ্বারা
  • খারাপ ইনপুট সমর্থন করার প্রয়োজন নেই
  • উইন্ডোজ সর্বাধিক সংখ্যা: 255 (আপনার যদি সীমা প্রয়োজন হয়)
  • আমার উইন্ডোজ 7 cmdশেলটি কোডডেজ 437 অক্ষর ডিফল্টরূপে প্রদর্শন করে; যদি কারও কাছে লিনাক্সে (এটি ব্যবহার করে xtermবা যাই হোক না কেন) করার উপায় থাকে তবে দয়া করে এখানে এটি বর্ণনা করুন

রেফারেন্সের জন্য, অক্ষর কোডগুলি হ'ল:

┌da   ─c4   ┬c2   ┐bf

│b3   :3a   │b3   │b3

├c3   ─c4   ┼c5   ┤b4

└c0   ─c4   ┴c1   ┘d9

মোট: 12 টি আলাদা অক্ষর।


নোট করুন যে আপনি ব্রাউজারের অ্যাড্রেস বারে নিম্নলিখিত কোডটি পেস্ট করলে আপনি এই পৃষ্ঠায় সুন্দর উইন্ডো প্রদর্শন করতে পারেন:javascript:$('pre').css('line-height','1em')
মাইকেল এম।

আমি নির্দেশাবলী অনুসরণ করে জিনোম-টার্মিনাল সঠিক প্রদর্শন পেয়েছিলাম stackoverflow.com/questions/5509829/...
BRM

উত্তর:


3

পাইথন, 397 টি অক্ষর

#coding:437
import os
J=range
M=[[0]*76 for _ in J(57)]
for A,C,B,D in[map(int,q.split(','))for q in os.read(0,9999).split('\n')]:
 for x in J(A+1,B):
    for y in J(C+1,D):M[C][A]|=5;M[C][B]|=6;M[D][A]|=9;M[D][B]|=10;M[C][x]|=3;M[D][x]|=3;M[y][A]|=12;M[y][B]|=12;M[y][x]=16;M[y][x-1]&=~1;M[y][x+1]&=~2;M[y-1][x]&=~4;M[y+1][x]&=~8
C=" rl─d┌┐┬u└┘┴│├┤┼:"
for l in M:print''.join((C+C[1:])[m]for m in l)

পরিবর্তন C="...করুন C=u"...এবং এটি পরিবর্তে ইউনিকোডে মুদ্রণ করবে! ফাইলটি যথাযথভাবে সংরক্ষণ করা পেতে অসুবিধা হতে পারে কারণ কোড পৃষ্ঠা 437 টি অক্ষর এড়ানো যায়নি (প্রথম 'কোডিং' মন্তব্য লাইনের প্রয়োজন)।

পদ্ধতিটি হ'ল বিট-ওয়াইজ অপারেটরগুলি ব্যবহার করে ক্রমান্বয়ে একটি মানচিত্র তৈরি করা। মন্তব্য সহ কম গল্ফ সংস্করণ:

#coding:437
import os
J=range
# set up the field
# Each element is a bitfield. Flags are:
# 16 - inside a window?
# 8  - up
# 4  - down
# 2  - left
# 1  - right
M=[[0]*76 for _ in J(57)]
# for each window...
for A,C,B,D in[map(int,q.split(','))for q in os.read(0,9999).split('\n')]:
    # add the directions for the corners
    M[C][A]|=5;M[C][B]|=6;M[D][A]|=9;M[D][B]|=10
    # add the top and bottom edges
    for y in J(C+1,D):M[y][A]|=12;M[y][B]|=12
    # add the left and right edges
    for x in J(A+1,B):M[C][x]|=3;M[D][x]|=3 
    # deal with the middle
    for x in J(A+1,B):
       for y in J(C+1,D):
           # Clear the current spot by setting to inside a window
           M[y][x]=16
           # Remove the right direction from the left spot, top from the bottom, etc
           M[y][x-1]&=~1;M[y][x+1]&=~2;M[y-1][x]&=~4;M[y+1][x]&=~8
 # print it out
 C=u" rl─d┌┐┬u└┘┴│├┤┼:"
 for l in M:print''.join((C+C[1:])[m]for m in l)

6

জাভাস্ক্রিপ্ট ES6 (এফএফ ≥ 31.0), 404 অক্ষর

w=s=>{a=[];for(i=0;i<57;)a[i++]=Array(76).fill(0);s.split('\n').map(e=>{r=e.split(',');a[x=r[1]][w=r[0]]|=5;a[x][y=r[2]]|=6;a[z=r[3]][w]|=9;a[z][y]|=10;for(i=x;++i<z;)a[i][w]|=12,a[i][w]&=14,a[i][y]|=12,a[i][y]&=13;for(i=w;++i<y;)a[x][i]|=3,a[x][i]&=11,a[z][i]|=3,a[z][i]&=7;for(i=x;++i<z;)for(j=w;++j<y;)a[i][j]=16});console.log(a.map(e=>e.map(t=>t==16?':':' xx─x┌┐┬x└┘┴│├┤┼'[t&15]).join('')).join('\n'))}

ES6 ছাড়াই:

function w(s){a=[];for(i=0;i<57;i++){a[i]=[];for(j=0;j<76;j++)a[i][j]=0}s.split('\n').forEach(function(e){r=e.split(',');a[r[1]][r[0]]|=5;a[r[1]][r[2]]|=6;a[r[3]][r[0]]|=9;a[r[3]][r[2]]|=10;for(i=r[1];++i<r[3];)a[i][r[0]]|=12,a[i][r[0]]&=14,a[i][r[2]]|=12,a[i][r[2]]&=13;for(i=r[0];++i<r[2];)a[r[1]][i]|=3,a[r[1]][i]&=11,a[r[3]][i]|=3,a[r[3]][i]&=7;for(i=r[1];++i<r[3];)for(j=r[0];++j<r[2];)a[i][j]=16});console.log(a.map(function(e){return e.map(function(t){return t==16?':':' xx─x┌┐┬x└┘┴│├┤┼'[t&15]}).join('')}).join('\n'))}

w('0,0,15,10\n15,10,20,15\n10,13,15,15\n9,1,16,3\n17,5,20,7\n11,2,17,4\n15,4,19,6\n13,3,18,5'); ওপির উদাহরণটি সঠিকভাবে আউটপুট করে।

উইন্ডোজের প্রান্তগুলি বিটওয়াইড অপারেটরগুলি (আপ = 8, নীচে = 4, বামে = 2, ডান = 1) ব্যবহার করে নির্মিত।


নিখুঁতভাবে পরীক্ষা করা হয়নি, তবে 548 টি অক্ষরে অ্যারের পরিবর্তে স্ট্রিং আক্ষরিক দিয়ে ভাল কাজ করা বলে মনে হচ্ছে। (কেবলমাত্র ফায়ারফক্সে পরীক্ষিত))
ম্যান্যাটওয়ার্ক

আপনি ECMAScript: ব্যবহার করে একগুচ্ছ অক্ষর সংরক্ষণ করতে পারেন: function w(s){...}হয়ে যায় w=(s)=>{...}(এবং আপনার অন্যান্য সমস্ত ফাংশন আক্ষরিক জন্য বুদ্ধিমান মত)। এবং অক্ষর দেখার সারণী সম্ভবত একই অক্ষরগুলির সাথে একটি স্ট্রিং দ্বারা প্রতিস্থাপন করা যেতে পারে।
মার্টিন এন্ডার

পরে আজ, ফায়ারফক্স ৩১.০ প্রকাশের পরে, আপনি Array.fill()"ডেস্কটপ" থেকে আরম্ভ করতে ব্যবহার করতে সক্ষম হবেন ।
manatwork

@ মানাটওয়ার্ক, আমি এফএফ অরোরার সাথে চেষ্টা করেছিলাম [].fill([].fill(0,0,76),0,57), খুব খারাপ এটি কাজ করে না। আমি কি এর চেয়ে কম লিখতে পারি new Array(57).fill(new Array(76).fill(0))?
মাইকেল এম

লাফালাফি করার চেষ্টা করুন newঅপারেটরদের: Array(57).fill(Array(76).fill(0))
manatwork

0

পাইথন, 672 অক্ষর

কম পাঠযোগ্য সংস্করণ:

import sys
r=range
M=[0,0,0,191,0,196,218,194,0,217,179,180,192,193,195,197]
Z=[map(int,l.split(",")) for l in sys.stdin.readlines()]
S=[[[0]*5 for x in r(77) ] for y in r(58)]
for i in r(len(Z)):
 A,C,B,D=Z[i]
 for a,b,c in [(C,A,2),(C,A,3),(D,A,1),(D,A,2),(C,B,3),(C,B,4),(D,B,1),(D,B,4)]:S[a][b][c]=1
 for x in r(A+1,B):
  for a,b in [(C,2),(C,3),(C,4),(D,1),(D,2),(D,4)]:S[a][x][b]=(b+1)&1
 for y in r(C+1,D):
  for a,b in [(A,1),(A,2),(A,3),(B,1),(B,3),(B,4)]:S[y][a][b]=b&1
 for x in r(A+1,B):
  for y in r(C+1,D):S[y][x]=[i+1]+[0]*4
O=sys.stdout.write
for l in S:
 for k in l:
  c=' ';x=M[k[1]*8|k[2]*4|k[3]*2|k[4]]
  if k[0]:c=':'
  if x:c=chr(x) 
  O(c)
 O('\n')

নীচের সংস্করণ থেকে শুরু হয়েছে:

import sys

coords = [ tuple(map(int,l.strip().split(","))) for l in sys.stdin.readlines() ]

screen = [ [ [-1, [False,False,False,False]] for x in range(0, 77) ] for y in range(0, 58) ]

def mergeBorders(screen, w):
    x0,y0,x1,y1 = w
    screen[y0][x0][1][1] = True
    screen[y0][x0][1][2] = True
    screen[y1][x0][1][0] = True
    screen[y1][x0][1][1] = True
    screen[y0][x1][1][2] = True
    screen[y0][x1][1][3] = True
    screen[y1][x1][1][0] = True
    screen[y1][x1][1][3] = True

    for x in range(x0+1,x1):
        screen[y0][x][1][1] = True
        screen[y0][x][1][2] = False
        screen[y0][x][1][3] = True
        screen[y1][x][1][0] = False
        screen[y1][x][1][1] = True
        screen[y1][x][1][3] = True

    for y in range(y0+1,y1):
        screen[y][x0][1][0] = True
        screen[y][x0][1][1] = False
        screen[y][x0][1][2] = True
        screen[y][x1][1][0] = True
        screen[y][x1][1][2] = True
        screen[y][x1][1][3] = False

def paintInside(screen, w, wId):
    x0,y0,x1,y1 = w
    for x in range(x0+1,x1):
        for y in range(y0+1,y1):
            screen[y][x][0] = wId 
            screen[y][x][1] = [False, False, False, False]

for wId in range(len(coords)):
    w = coords[wId]
    mergeBorders(screen, w)
    paintInside(screen, w, wId)

borderMap = { (False, True, True, False): 0xda,
              (False, True, False, True): 0xc4,
              (False, True, True, True):  0xc2,
              (False, False, True, True): 0xbf,
              (True, False, True, False): 0xb3,
              (True, True, True, False):  0xc3,
              (True, True, True, True):   0xc5,
              (True, False, True, True):  0xb4,
              (True, True, False, False): 0xc0,
              (True, True, False, True):  0xc1,
              (True, False, False, True): 0xd9 }

def borderChar(c):
    return chr(borderMap[(c[0],c[1],c[2],c[3])])


for screenLine in screen:
    for contents in screenLine:
        c = ' '
        if True in contents[1]:
            c = borderChar(contents[1])
        elif contents[0] >= 0:
            c = ':'
        sys.stdout.write(c)
    sys.stdout.write('\n')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.