গন্তব্য নোট - একটি কর্মীদের উপর একটি নোট রাখুন


19

জম্বি অ্যাপোক্যালাইপস এসেছে, এবং বিশ্বটি শেষ হচ্ছে। হঠাৎ করেই, কেউ এমন একটি সূত্র আবিষ্কার করেন যা বর্তমান ঘন্টা, মিনিট এবং দিন নেয় এবং পিয়ানোতে বাজানোর জন্য নিখুঁত নোটটি ছুঁড়ে দেয় যা তত্ক্ষণাত শুনেছে এমন প্রতিটি জম্বি হত্যা করে। দুর্ভাগ্যক্রমে, বিশ্বে কেবলমাত্র একটি পিয়ানো প্লেয়ার রয়ে গেছে এবং তিনি নোটগুলি কীভাবে পড়বেন তা ভুলে গেছেন, তবে কীভাবে শীট সংগীত পড়তে হয় তা তিনি এখনও জানেন। অবশ্যই এটি খুব সময় সংবেদনশীল জিনিস, তাই কম্পিউটার এটি করা স্বাভাবিক বলে মনে হয়। 1

আপনার চ্যালেঞ্জটি হ'ল কোনও নোট নেওয়া, যেমন Gএবং কোনও স্টাফের উপরে রাখা নোটটি আউটপুট করা (ট্রিবল ক্লাফের মধ্যে), এটি:

-----

-----
   |
---|-
   |
--O--

-----

স্পেসিফিকেশন:

  • আপনার অবশ্যই -----(5 টি ড্যাশ) এবং একটি ফাঁকা লাইনের বিকল্প লাইনের একটি কর্মীকে আউটপুট দিতে হবে । -----মোট 5 টি হবে। নোটটি অবশ্যই এই কর্মীদের উপরে imp
  • নোটটি কোথায় রয়েছে তা ইনপুট উল্লেখ করবে। ইনপুটটি হ'ল:
    • একটি alচ্ছিক Hবা L, "উচ্চ" বা "নিম্ন" নির্দিষ্ট করে
    • কাছ থেকে চিঠি Aথেকে G, পিচ উল্লেখ
    • একটি alচ্ছিক #বা b, ধারালো বা সমতল উল্লেখ করে।
  • "নোট" হিসাবে সংজ্ঞায়িত করা হয়:
    • একটি O(মূলধন ও) নোটের জায়গায় থাকা কর্মীদের মাঝখানে সংযুক্ত হয়েছে। (উপরের লাইনটি HF(হাই এফ), এবং নীচের লাইনটি E(একটি সাধারণ ই)))
    • তিনটি |(উল্লম্ব বার), স্টেম, যা হবে:
      • নোটটির বাম দিকে একটি স্থান এবং নীচের দিকে যাবেন (নোটের নীচে একটি স্থান শুরু করুন) যদি নোটটি মাঝের লাইনে ( B) বা উপরে থাকে, বা
      • যদি নোটটি মাঝের লাইনের নীচে থাকে তবে নোটের ডানদিকে একটি জায়গা এবং উপরের দিকে (নোটের উপরে একটি স্পেস শুরু করা)।
    • ইনপুটটিতে নির্দিষ্ট করা থাকলে নোটের বামে সরাসরি একটি #বা bএক স্থান।
  • নোটটি খুব বেশি বা কম হলে লেজার লাইনগুলি অবশ্যই যুক্ত করতে হবে। এই রেখাগুলি হবে ---(প্রস্থে মাত্র 3 টি ড্যাশ, 5 এর বিপরীতে) এবং কেবল তখনই উপস্থিত হবে যখন নোটটি উপরে বা নীচে / উপরে থাকবে (যথাক্রমে উপরের / নীচের খাত্তরের লাইনগুলির জন্য) খাত্তরের লাইনগুলি।
  • আপনার যে কোনও জায়গায় এক্সট্রানাস স্পেস স্থাপন করা যেতে পারে; উদাহরণস্বরূপ, খালি রেখাগুলিতে ফাঁকা স্থান তৈরি করতে পারে বা খালি লাইনগুলির পরে স্থান থাকতে পারে যদি এটি কোনও অক্ষর সংরক্ষণে সহায়তা করে।

লাইনের পাশে থাকা সমস্ত নোটের নাম সহ আরও সহজে স্পেসিফিকেশনটি বোঝার জন্য এখানে একটি দৃশ্যায়ন দেওয়া হয়েছে:

      HB
 ---  HA
      HG
----- HF
      HE
----- HD
      HC
----- B
      A
----- G
      F
----- E
      D
 ---  C
      LB
 ---  LA
      LG
 ---  LF
... (bottom cut off for brevity, you get the idea anyway)

আপনার প্রোগ্রামটি পরীক্ষা করতে আপনি আরও কয়েকটি উদাহরণ ব্যবহার করতে পারেন:

ইনপুট: HG#

 #O
-|---
 |
-|---

-----

-----

-----

ইনপুট: LAb

-----

-----

-----

-----

-----
   |
 --|
   |
 bO-

ইনপুট: HB

  O
 |--
 |
-|---

-----

-----

-----

-----

ইনপুট: C

-----

-----

-----

-----
   |
---|-
   |
 -O-

এই , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!

1: সর্বাধিক বাস্তবসম্মত প্রকাশ! :-P


2
বাম দিকের চেয়ে নোটের ডানদিকে #বা bডানদিকে রাখা খুব অদ্ভুত দেখাচ্ছে ; এটি কি আসলে প্রয়োজন?
টমাস বারুচেল 21

2
বি # এবং এর মতো কী? 1. প্লট যেমন রয়েছে; 2. প্রত্যাখ্যান; ৩. নিঃশব্দে সি তে রূপান্তর করবেন?
ডিজিটাল ট্রমা

2
এটি স্পষ্টতই বলা উচিত যে এটি ট্রিবল ক্লাফের মধ্যে হওয়া উচিত।
ব্যবহারকারী 12205


3
@ এজেএম হ্যাঁ, এটি ASCII শিল্প হতে হবে।
ডুরকনব

উত্তর:


1

গল্ফস্ক্রিপ্ট, 211 210 209 197 195 192 অক্ষর

(এই পোস্ট হিসাবে) জয়ের জন্য আসছি, আমার সর্বশেষ পাইথন সংস্করণের একটি গল্ফস্ক্রিপ্ট সংস্করণ :

"J"\+[0]+.1=71>>3<{}/@7*2/246-@3+7%-:z;:c;21,{..3z<3z
if<\11z>11z
if>|{;}{...2>\12<&\2%.{'-'' 'if}:Q~:9;&Q\.z={c!9{[c]''+}if}{..z>\4z+<&8z>&'|'9if}if\.z='o'9if\..z
4-\<\z<&7z<&'|'9if\;3$n}if}/

এখানে এটি পরীক্ষা করে দেখুন (প্রথম 2 টি লাইন ব্যবহারকারী-ইনপুট, সাধারণত এটি স্টিডিন থেকে আসে)।

'পঠনযোগ্য' সংস্করণ:

;"HCb"

"J"\+[0]+       #process input
.1=71>>3<       #first char is HJL, second is letter, third is #b or space
{}/             #spill chars onto stack, now we working with ints
@7*2/246-@3+7%- #convert HC/JD/LE etc to a number from 0 to 20
:z;:c;
21,{            #for r in range(21):
  ..3z<3z if<           #either out-of-bounds or process the line
  \11z>11z if>|
  {;}{
    ...2>\12<&\2%.{'-'' 'if}:Q~:9;&Q\        #1st char
    .z={c!9{[c]''+}if}                       #2nd char accidental
       {..z>\4z+<&8z>&'|'9if}if\            #2nd char stem or row
    .z='o'9if\                              #3rd char
    ..z 4-\<\z<&7z<&'|'9if\                 #4th char stem or row
    ;3$                                      #5th char=1st char
    n
  }if
}/

আআআআআআন্ড আবার গল্ফস্ক্রিপ্ট দ্বারা পরাজিত। :) ...
মার্টিন এন্ডার

@ এম.বায়েটনার: হাহাহা, শেষ হয় না .. অবাক হলেও বন্ধ!
ক্লদিউ

1
উত্তম! এখন আমাকে ধরার জন্য কেবল আমার 6/9 বাইটগুলি খুঁজে পাওয়া দরকার: ডি (যদিও আমি এটি করব তা আমি দেখতে পাই না)
মার্টিন ইন্দার

@ এম.বয়েটনার: আরও 2 বাইট নিচে! প্রত্যেকে এতটাই নির্মম যদিও ... আমাকে আপাতত থামতে হবে। শুভকামনা!
ক্লদিউ

2
ওহ রক্তাক্ত নরক ... ঠিক তখনই যখন আমি ভেবেছিলাম আপনার 209 কে মারলাম I আমি মনে করি আমি হাল ছেড়ে দিচ্ছি। গল্ফস্ক্রিপ্ট বিরাজ করে। ;)
মার্টিন ইন্ডার

6

রুবি - 271 267 252 249 234 229 220 214 টি অক্ষর

আমি আক্ষরিকভাবে এই জন্য রুবি শিখেছি। সুতরাং এটি নিচে গলানোর উন্নতির অবশ্যই অবকাশ আছে। বা সত্যিই কিছু করছেন। তবে আমার পরিবর্তনীয় স্ট্রিং সহ একটি ভাষা প্রয়োজন। :)

def f(n)s=[0]*20
s.fill{|i|i%2>0?i<3||i>11?" ---":?-*5:" "*5}
s[l=(3-n[(p="H_L".index n[0])?1:0].ord)%7+7*(p||1)][1,2]=("#b"[n[-1]]||s[l][1])+?O
s[l+3-2*o=l>7?3:1,3].map{|t|t[o]=?|}
puts s[[3,l].min..[11,l].max]end

কিছুটা নাড়িত:

def f(note)
  staff=[]
  0.step(20) {|i| staff[i] = " "*5}
  1.step(19,2) {|i| staff[i] = " ---"}
  3.step(11,2) {|i| staff[i] = "-"*5}
  level = 7
  if !(pos="HL".index note[i=0]).nil?
    level = 14*pos
    i += 1
  end
  level += (73-note[i].ord)%7
  staff[level][2] = "O"
  mark = note[-1]
  if !"#b".index(mark).nil?
    staff[level][1] = mark
  end
  offset = (level > 7) ? 3 : 1
  staff[level-2*offset+3,3].map {|line| line[offset] = "|"}
  first = [3,level].min
  last = [11,level].max
  puts s[first..last]
end

নেতৃস্থানীয় ফাঁকা রেখার অনুমতি থাকলে আমি এটি আরও 2 টি অক্ষর দিয়ে 212 টি অক্ষরে কেটে ফেলতে পারি । এই দ্রষ্টব্যটি যে লাইনগুলি যেভাবেই ছাপা হয় না তা পূরণ করে না:

def f(n)s=[]
[3,l=(3-n[(p="H_L".index n[0])?1:0].ord)%7+7*(p||1)].min.step(l>11?l:11){|i|s[i]=i%2>0?i<3||i>11?" ---":?-*5:" "*5}
s[l][1,2]=("#b"[n[-1]]||s[l][1])+?O
s[l+3-2*o=l>7?3:1,3].map{|t|t[o]=?|}
puts s
end

লাম্বদার ফর্সা খেলা? তারপরে আমি প্রথম পদ্ধতির সাথে 210 টি অক্ষর পেতে পারি

f=->n{s=[0]*20
s.fill{|i|i%2>0?i<3||i>11?" ---":?-*5:" "*5}
s[l=(3-n[(p="H_L".index n[0])?1:0].ord)%7+7*(p||1)][1,2]=("#b"[n[-1]]||s[l][1])+?O
s[l+3-2*o=l>7?3:1,3].map{|t|t[o]=?|}
puts s[[3,l].min..[11,l].max]}

বা অতিরিক্ত ফাঁকা লাইন সহ 207 টি অক্ষর :

f=->n{s=[]
[3,l=(3-n[(p="H_L".index n[0])?1:0].ord)%7+7*(p||1)].min.step(l>11?l:11){|i|s[i]=i%2>0?i<3||i>11?" ---":?-*5:" "*5}
s[l][1,2]=("#b"[n[-1]]||s[l][1])+?O
s[l+3-2*o=l>7?3:1,3].map{|t|t[o]=?|}
puts s}

অবশ্যই, এখন আপনার করা দরকার f.call("HGb")


সম্পূর্ণ নতুন ভাষা শেখার জন্য হা, +1! ;-) এখানে একটি পরামর্শ: !x.nil?সমান !x। এবং এক লাইন ifs জন্য, if x;y;end;সমান y if x। এছাড়াও আপনি সেই স্ট্রিংয়ে একটি আক্ষরিক নিউলাইন ব্যবহার করতে পারেন।
ডোরকনবব

@ ডুরকনব ধন্যবাদ, আমি এগুলিতে কাজ করার চেষ্টা করব!
মার্টিন এন্ডার

@ ডুরকনব এইচএম, আমি কেবল ifকাজটি করতে পেরেছি । যদি আমি ব্যবহার করি ?\n(যদি এটিই আপনি বোঝাতে চেয়েছিলেন) তবে আমার একটি স্থান যুক্ত করা দরকার, তাই আমি কিছুই লাভ করি না। এবং .nil?গুলি অপসারণ মোটেই কার্যকর হয়নি (সর্বদা মূল্যায়ন করা true)।
মার্টিন ইন্ডার

আমি আক্ষরিকভাবে দুটি উক্তিটির মধ্যে একটি নতুন লাইন যুক্ত করতে চাইছিলাম। এবং আমি মনে করি অপসারণ করার সময় আপনার অতিরিক্ত প্যারেনগুলির প্রয়োজন .nil?, তবে এটি অক্ষরগুলির জন্য এটি মূল্যবান।
ডুরকনব

@Doorknob অই, কোন !x.nil?হল !!x। :)
মার্টিন ইন্ডার

2

পাইথন, 329 309 295 286 280 277 টি অক্ষর

এখন আরও কিছুটা গল্ফ করল। তবুও উন্নত করা যেতে পারে, তবে নিশ্চিত না যে আমি এই পদ্ধতির সাহায্যে রুবি বা গল্ফস্ক্রিপ্ট সমাধানগুলি পরাজিত করতে পারি কিনা।

R=range
N='J'+raw_input()+' '
X=N[1]>'G'
a,b,c=N[X:3+X]
z=266-ord(a)/2*7+(ord(b)-4)%7
Z=[list((' '*5,(' ---','-'*5)[8<r<18])[r%2])for r in R(21)]
Z[z][2]='o'
if' '<c:Z[z][1]=c
Q=(z<13)*2
for i in(1,2,3):Z[z+i*Q-i][Q+1]='|'
for r in R(max(17,z),min(z-1,8),-1):print''.join(Z[r])

প্রথমদিকে আমি লাইন বাই লাইন মুদ্রণ করছিলাম, তবে এটি খুব বেশি পরিমাণে নেমেছে, তাই আমি একটি স্ট্রিং গ্রিড উত্পন্ন করি এবং তারপরে যা পূরণ করা দরকার তা পূরণ করি In ইনপুট হ'ল কমান্ড লাইন থেকে, যেমন:

>echo HG# | python note2_golf.py
 #o
-|---
 |
-|---

-----

-----

-----

5
নং

@ace: ধন্যবাদ, মিস যে এক
Claudiu

2

গল্ফস্ক্রিপ্ট - 243 232 228 227 টি অক্ষর

আমি আমার কফিস্ক্রিপ্ট উত্তরটি গল্ফস্ক্রিপ্টে অনুবাদ করেছি, যা স্ট্রিং ম্যানিপুলেশনের জন্য অনেক বেশি উপযুক্ত।

সম্পাদনা: ইনক্রিমেন্ট অপারেটরটি যথাযথভাবে ব্যবহার করে ছয়টি অক্ষর সংরক্ষণ করা হয়েছে, তিনটি স্ট্যাকের ভাল ব্যবহার করে, ছয়জনকে আমি ব্যবহার করছি না এমন দায়িত্বহীনভাবে পুনরায় সংজ্ঞায়িত করে আরও একটি এবং গ্রেস লাইনের পরে পিছনে স্থান প্রিন্ট না করে।

পুরো গল্ফড:

..0="HL"?2+3%:o)2%.@="CDEFGAB"?7o*+:`2%45 32if:r;
).2$,<{=}{;;r}if:&;
[" "5*:|" ---":g]4*[|"-"5*]5*+[|g|]+.
[`<~]\[`>([0=:^&79r^]''+\~]
+17`<`)18if<9`>`9if:j>:t 13`>.2*):x;
4,1>{`j-\2${+}{-}if}%\;
{.@<\t>(:v[x<'|'+x)v>+]\++:t}
/-1%n*

মন্তব্য সহ:

# extract octave
..0="HL"?2+3%:o

# extract note
2%1\-.@="CDEFGAB"?7o*+:k

# line spacer
2%45 32if:r;

# extract accidental
1+.2$,<{=}{;;r}if:a;

# staff
[" "5*:|" --- ":g]4*[|"-"5*]5*+[|g|]+.

# lines below
[k<~]\

# note line and above
[k>([0=:w a 79r w]''+\~]+

# cut off just what we need
17k<1k+18if<
9k>k 9if:j>:t;

# and the note stem
13k>.2*1+:x;4,1>{k j-\2${+}{-}if}%\;

{
  .t<\
  t>(:v[x<'|'+1x+v>+]\++:t;
}/

# now output the note
t-1%n*

আমি যদি এমন কোনও ভাষায় গল্ফস্ক্রিপ্ট সমাধানটি মারতে পারি যেটিতে আমার কোনও অভিজ্ঞতা নেই; তবে আমি অবাক হয়ে যেতাম;)
মার্টিন এন্ডার

1
আমি কোনও গল্ফস্ক্রিপ্ট বিশেষজ্ঞ নই তবে আমি মনে করি যে আমি যে সমস্ত চরিত্রগুলি এ থেকে বেরিয়ে যাব তার সম্পর্কে আমি ঠিক বের করেছি, সুতরাং যদি আপনি আরও দুটি সন্ধান করতে পারেন তবে আপনি সোনার!
কাউচাঁদ

Goএটি টাইপ করার চেষ্টা করুন । এটি আউটপুট করবে oo|||:)
জেমি

1

পাইথন, 250 245 242 235 টি অক্ষর

একটি অন্যরকম পদ্ধতি যা আমার অন্যটিকে মারধর করে! ইনপুট প্রসেসিং কোড অনুরূপ তবে এটি প্রায়।

M=' -'
N=raw_input()+M
a,b,c=('J'+N)[N>'G':][:3]
z=ord(a)*7/2-246-(ord(b)+3)%7
for r in range(21):
 L=M[r%2];F=M[2<r<12and r%2]
 if min(3,z)<=r<=max(11,z):print F+((L,'|')[8>z<r<z+4],(L,c)[M<c])[r==z]+(L,'o')[r==z]+(L,'|')[z-4<r<z>7]+F

আমি সারি এবং কলামের উপর ভিত্তি করে প্রতিটি চরিত্রের মান ম্যাপ করেছি এবং তারপরে মুদ্রণটি গল্ফ করেছি:

#given row r, with note on row n, how to print each char?
#rows are:
#       HB : 0
#  ---  HA : 1
#       HG : 2
# ----- HF : 3
#       HE : 4
# ----- HD : 5
#       HC : 6
# ----- B  : 7
#       A  : 8
# ----- G  : 9
#       F  : 10
# ----- E  : 11
#       D  : 12
#  ---  C  : 13
#       LB : 14
#  ---  LA : 15
#       LG : 16
#  ---  LF : 17
#       LE : 18
#  ---  LD : 19
#       LC : 20
#chars are:
# 0 | 1 | 2 | 3 | 4
#
# 0,4:
#    if r%2:
#      if 2<r<12: '-'
#      else ' '
#    else: ' '
# 1: ' -b#|'
#    if r==n:
#      if A: c
#      else: ' -'[r%2]
#    elif n<8 and n<r<n+4: '|'
#    else: ' -'[r%2]
# 2: ' -o'
#    if r==n: 'o'
#    else: ' -'[r%2]
# 3: ' -|'
#    if n>7 and n-4<r<n: '|'
#    else: ' -'[r%2]

+1, শেষ লাইনে পাইথোনিক স্টাফের চেয়ে পার্লের কালো যাদুটি বেশি মনে হচ্ছে
অ্যান্টোনিও রাগাগনিন

1

জাভা - 921 907 863 টি অক্ষর

আমি প্রতিটি স্ট্রিং আলাদা করে তৈরি করি, প্রতিটি স্ট্রিংকে অ্যারেতে স্টোর করি। তারপরে অ্যারে থেকে লুপ করুন এবং প্রতিটি লাইন মুদ্রণ করুন।

public class D{public static void main(String[]a){char[]z=a[0].toCharArray();char[]y=new char[3];y[0]=('H'==z[0]||'L'==z[0])?z[0]:'N';int o=(y[0]=='N')?0:1;y[1]=z[o++];y[2]=z.length>o?z[o]:'!';int n=y[1]<'C'?((int)(y[1]-'A'))+6:((int)(y[1]-'C'))+1;n=(y[0]=='N')?n+7:(y[0]=='H'?n+14:n);String s="     ";String b=" --- ";String[]u=new String[22];for(int i=1;i<=21;i+=2){u[i]=s;}for(int i=10;i<=18;i+=2){u[i]="-----";}u[20]=n>19?b:s;u[2]=n<3?b:s;u[4]=n<5?b:s;u[6]=n<7?b:s;u[8]=n<9?b:s;char c=u[n].charAt(0);char e=u[n].charAt(1);char[]h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c};u[n]=new String(h);for(int i=0;i<22;i++){if(n<14&&i-n<4&&i>n)u[i]=u[i]!=null?u[i].substring(0,3)+"|"+u[i].charAt(4):s;else if(n>13&&n-i<4&&n>i)u[i]=u[i]!=null?u[i].substring(0,3)+"|"+u[i].charAt(4):s;}for(int i=21;i>=0;i--)if(!(i>n&&i>18||i<n&&i<10))System.u.println((u[i]==null)?s:u[i]);}}

ওহ দয়া করে আমাকে ঘৃণা করবেন না, এটি আমার প্রথমবার। আমি কোনও FAQ / ভূমিকা খুঁজে পাচ্ছি না তাই আমি আশা করি আমার পোস্টিং ফর্ম্যাটটি ঠিক আছে। চরিত্রের গণনা সম্পর্কে লোকেরা কীভাবে গুরুতর পেল তা নিশ্চিত নয় .... কোডটির সাধারণ সংস্করণ - অতিরিক্ত হ'ল লাইনব্রেক / স্পেস (1313 টি অক্ষর):

public class DisplayNote
{
  public static void main(String[] args)
  {
    char[] z=args[0].toCharArray();
    char[] y=new char[3];
    y[0]=('H'==z[0]||'L'==z[0])?z[0]:'N';
    int o=(y[0]=='N')?0:1;
    y[1]=z[o++];
    y[2]=z.length>o?z[o]:'!';

    int noteValue=y[1]<'C'?((int) (y[1] - 'A')) + 6:((int) (y[1] - 'C')) + 1;
    noteValue=(y[0]=='N')?noteValue+7:(y[0]=='H'?noteValue+14:noteValue);
    String s="     ";
    String b=" --- ";
    String[] out=new String[22];
    for (int i=1;i<=21;i+=2){out[i]=s;}
    for (int i=10;i<=18;i+=2){out[i]="-----";}
    out[20]=noteValue>19?b:s;
    out[2]=noteValue<3?b:s;
    out[4]=noteValue<5?b:s;
    out[6]=noteValue<7?b:s;
    out[8]=noteValue<9?b:s;

    char c=out[noteValue].charAt(0);
    char e=out[noteValue].charAt(1);
    char[] h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c};
    out[noteValue]=new String(h);
    for (int i=0;i<22;i++)
    {
      if (noteValue<14&&i-noteValue<4&&i>noteValue)
        out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;
      else if (noteValue>13&&noteValue-i<4&&noteValue>i)
        out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;        
    }

    for (int i=21;i>=0;i--)
      if (!(i>noteValue&&i>18||i<noteValue&&i<10))
        System.out.println((out[i]==null)?s:out[i]);
  }
}

আমি প্রচুর অপ্রয়োজনীয় শ্বেতস্পেস (বিশেষত সেমিকোলন এবং অপারেটর এবং বন্ধনী এবং পেরেনগুলির পরে) এবং দীর্ঘ পরিবর্তনশীল নামগুলি (যেমন args) দেখতে পাচ্ছি ।
ডুরকনব

চরিত্র গণনা জমা দেওয়ার ক্ষেত্রে: 921 টি অক্ষর, সমস্ত সাদা জায়গা চলে গেছে: পি
উইল_61১

হোয়াইটস্পেসের সাথে সর্বত্র দ্বিতীয় জমাটি হ'ল লোকেদের কোডটি পড়তে দেওয়া, যেমন আমি বলেছিলাম যে এটি আমার প্রথমবার তাই নিশ্চিত নয় যে আমরা 1 টি জমা দিতে চাইছি এবং 1 যেখানে আপনি চরিত্রের সীমা হ্রাস করার চেষ্টা করছেন ... বা কী?
উইল_61

না; আমি সেই সংস্করণে প্রচুর পরিমাণে অকেজো সাদা জায়গা দেখছি। উদাহরণ হিসেবে বলা যায়, স্পেস সেমিকোলন পর, অপারেটর প্রায় স্পেস, স্পেস পর [], প্রথম বন্ধনী, ইত্যাদি প্রায় শূণ্যস্থান
Doorknob

এগুলি এখনই সরিয়ে দেওয়া হয়েছে (আমি মনে করি) ধন্যবাদ :)
উইল__১

1

হাস্কেল 377 সি

import Data.Char
(<.)=elem
n(c:r)|elem c"HL"=let(s,a)=n r in(s+case c of 'H'->7;_-> -7,a)|1<2=(mod(ord c-67)7-2,case r of[]->' ';[x]->x)
r(s,a)y x=c where d|s>4= -1|1<2=1;c|x<.[0,4]&&(y<0||y>8)=' '|x==2&&y==s='o'|y==s&&x==1&&' '/=a=a|x==2+d&&y<.[s+k*d|k<-[1..3]]='|'|1<2="- "!!mod y 2
g p@(s,a)=unlines$[map(r p y)[0..4]|y<-reverse[min 0 s..max 8 s]]
main=getLine>>=putStr.g.n

অবরুদ্ধ সংস্করণ:

import Data.Char

fromName ('H':s) = let (step, alter) = fromName s in ((step + 7), alter)
fromName ('L':s) = let (step, alter) = fromName s in ((step - 7), alter)
fromName (x:s) = (mod (ord x - 67) 7 - 2, if null s then ' ' else head s)

renderChar :: (Int, Char) -> Int -> Int -> Char
renderChar (step, alter) y x = let
    dir = if step >  4 then -1 else 1
    normal = "- "!!mod y 2
    stemYs = [step + k * dir | k <- [1..3]]
    c | elem x [0,4] && not(elem y [0,2,4,6,8]) = ' '
      | x == 2 && y == step = 'o'
      | y == step && x == 1 && alter /= ' ' = alter
      | elem y stemYs && x == 2 + dir = '|'
      | otherwise = normal
  in c

render :: (Int, Char)-> String
render (step, alter) = unlines [map (renderChar (step, alter) y) [0..4] | y <- ys] 
  where
    ys = reverse [min 0 step .. max 8 step]

main = getLine >>= (putStr.render.fromName)

0

সাহিত্যের কফিস্ক্রিপ্ট - 497 527 টি অক্ষর

আমি নিশ্চিত গ্রিডটি তৈরি করার আরও ভাল উপায় আছে তবে আমি তা বুঝতে পারি না।

একজন গল্ফ সহায়ক।

_=(q)->->q.split ""

এসি মেজর স্কেল এবং স্টাফ।

s=_("CDEFGAB")()
l=_ "-----"
e=_ "     "
g=_ " --- "
t=->
  o=[e(),l(),e(),l(),e(),l(),e(),l(),e(),l(),e(),g(),e()]
  o.unshift e(),g() for [0..3]
  o

আমাদের স্বরলিপি ফাংশন একটি নোটের স্ট্রিং প্রতিনিধিত্ব গ্রহণ করবে।

f=(i)->
  o=1
  m=t()

প্রথমে আমরা অষ্টকটি নির্ধারণ করব।

  if /L|H/.test i[0]
    if i[0]=="L" then o=0 else o=2
    i=i[1..]

তারপর নোট এবং দুর্ঘটনা। ডিকনস্ট্রাকচারিং অ্যাসাইনমেন্ট পছন্দ করি।

  [n,a]=i

আসুন নোট এবং অষ্টভাকে একটি সূচীতে রূপান্তর করুন এবং নোটটি প্লট করুন।

  x=7*o+s.indexOf n

  m[x][1]=a if a
  m[x][2]='O'

এখন আমরা আমাদের প্রয়োজন যতটা কর্মী কাটাব।

  j=9
  k=17
  if x>17
    k=x
  else if x<9
    j=x
  u=x-j
  m=m[j..k]

এবং নোট স্টেম।

  if x<13
    m[x][3]='|' for x in [u+3...u]
  else
    m[x][1]='|' for x in [u-3...u]

এখন ফলাফল আউটপুট করা যাক।

  m.map((p)->p.join '').reverse().join '\n'

অবশেষে, আমরা কনসোল পরীক্ষার জন্য ফাংশনটি রফতানি করব। এই অক্ষরগুলি মোটের দিকে গণনা করে না।

module.exports = f

কাছাকাছি তাকানো দেখে মনে হচ্ছে নোট স্টেমটি রিফ্যাক্ট করার সময় আমি বিভ্রান্ত হয়েছি, সুতরাং এটি এই মুহুর্তে অবৈধ আউটপুট উত্পাদন করে।
কাউচাঁদ

আমি এটি স্থির করেছি, তবে এতে 30 টি অক্ষর যুক্ত হয়েছে: - /
কাউচাঁদ

0

সি, 325 304

এখন 21 বাইট সংক্ষিপ্ত ধন্যবাদ @ace এর জন্য !

i;j;c;n;main(t){char
x[133];for(i;i<132;i++){x[i]="-----\n     \n"[i%12];if((i<18||i>77)&&!((i%12)&11))x[i]=32;}for(;!n;){c=getchar();if(c>71)t=c^72?2:0;else
n=7*t+7-(c-4)%7;}x[i=n*6+2]=79;if((c=getchar())>32)x[i-1]=c;for(t=0,j=n<9?i+5:i-17;t<3;t++,j+=6)x[j]='|';x[n<13?77:n*6+5]=0;puts(x+(n>4?24:n*6));}

আউটপুট:

./a.out
HBb
 bO  
 |-- 
 |   
-|---

-----

-----

-----

-----


./a.out
LG#
-----

-----

-----

-----

-----

 --| 
   | 
 --| 
 #O  

গ্লোবাল ভেরিয়েবল ডিফল্ট হিসাবে শূন্য থেকে আরম্ভ করা হয়, সুতরাং আপনার আরম্ভ করার দরকার নেই nএবং আপনি i=0প্রথম forলুপটি মুছে ফেলতে পারেন ।
ব্যবহারকারী 12205

এছাড়াও, প্রথম ifবিবৃতিতে, এর ((i%12)&11)==0সাথে প্রতিস্থাপন করা যেতে পারে !((i%12)&11)
ব্যবহারকারী 12205

অবশেষে, ?:চেয়ে খুব কম প্রাধান্য রয়েছে ^এবং <যাতে আপনি সামনে অবস্থার বন্ধনী সরাতে পারেন, ?। এবং আপনি এর printf("%s",সাথে প্রতিস্থাপন করতে পারেন puts(
ব্যবহারকারী 12205

0

জাভাস্ক্রিপ্ট 390 388

কিছুটা চ্যালেঞ্জ, আমাকে স্বীকার করতে হবে ... আমি নিশ্চিত যে এটি আরও কমানোর উপায় আছে ... আমি পরামর্শের জন্য উন্মুক্ত ...

প্রথম Iteration

C=(a,x,o,c)=>{a[x]=a[x].substr(0,o)+c+a[x].substr(o+1)};l=7;s=[];for(i=21;i--;)s[i]="    ";for(j=1;19>j;j+=2)s[j]=" ---";for(k=3;12>k;k+=2)s[k]="-----";~(p="HL".indexOf((n=prompt())[i=0]))&&(l=14*p,i++);l+=(73-n.charCodeAt(i))%7;C(s,l,2,"O");m=n[n.length-1];"#"!=m&   "b"!=m||C(s,l,1,m);o=7<l?3:1;for(z=0;3>z;C(s,t=l-2*o+3+z++,o,"|"));S=s.splice(3<=l?3:l,11>=l?11:l);console.log(S.join("\n"))

দ্বিতীয় পরিমার্জন ( n.slice(-1)পরিবর্তে ব্যবহার করে n[n.length-1]), 2 বাইট শেভ

C=(a,x,o,c)=>{a[x]=a[x].substr(0,o)+c+a[x].substr(o+1)};l=7;s=[];for(i=21;i--;)s[i]="    ";for(j=1;19>j;j+=2)s[j]=" ---";for(k=3;12>k;k+=2)s[k]="-----";~(p="HL".indexOf((n=prompt())[i=0]))&&(l=14*p,i++);l+=(73-n.charCodeAt(i))%7;C(s,l,2,"O");m=n.slice(-1);"#"!=m& "b"!=m||C(s,l,1,m);o=7<l?3:1;for(z=0;3>z;C(s,t=l-2*o+3+z++,o,"|"));S=s.splice(3<=l?3:l,11>=l?11:l);console.log(S.join("\n"))

অবরুদ্ধ সংস্করণ:

function C(a,x,o,c){
    a[x]=a[x].substr(0,o)+c+a[x].substr(o+1);
}
l=7;s=[];
for(i=21;i--;){
    s[i]="    ";
}
for(j=1;19>j;j+=2){
    s[j]=" ---";
}
for(k=3;12>k;k+=2){
    s[k]="-----";
}
i=0;n=prompt();
p="HL".indexOf(n[i]);
if(p>=0){
    l=14*p;i++;
}
l+=(73-n.charCodeAt(i))%7;
C(s,l,2,"O");
m=n.slice(-1);
if((m=="#")||m=="b"){
    C(s,l,1,m);
}
o=7<l?3:1;
for(z=0;3>z;z++){
    C(s,t=l-2*o+3+z,o,"|");
}
F=Math.min(3,l);
L=Math.max(11,l);
S=s.splice(F,L);
console.log(S.join("\n"));

অনুগ্রহ করে আপনি কি একটি বর্ণা ?্য (পঠনযোগ্য) সংস্করণ যুক্ত করতে পারেন?
মার্টিন ইন্ডার

@ এম.বয়েটনার সম্পন্ন ... আমি আশা করি এটি আমি আপনাকে কী করেছি তার আরও ভাল ধারণা দিতে সহায়তা করে :)
ওয়াল ওয়েস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.