64 বিট ASCII বয়ন


18

ইনপুট

দুটি পূর্ণসংখ্যা:

  • বুনন উল্লেখ করে 0 থেকে 2 ^ 64-1 অবধি মধ্যে একটি অ-নেতিবাচক পূর্ণসংখ্যার ডাব্লু
  • পার্শ্বের দৈর্ঘ্য উল্লেখ করে 1 থেকে 255 ব্যাপ্তির মধ্যে একটি ধনাত্মক পূর্ণসংখ্যার এস

এগুলি আপনার পক্ষে যে কোনও অর্ডার অনুসারে নেওয়া যেতে পারে।

আউটপুট

একটি এস দ্বারা এস অনুরোধ বুনা এর ASCII উপস্থাপনা ( এস সম্পর্কে newline পৃথক স্ট্রিং এস একটি ঐচ্ছিক চিহ্ন রাখুন NEWLINE অক্ষর)। তাঁতটি বুনা নম্বর ডাব্লু দ্বারা নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:

ডাব্লু বাইনারি রূপান্তর করুন এবং 8 বাইট মধ্যে বিভক্ত। প্রথম (সর্বাধিক তাৎপর্যপূর্ণ) বাইট বাম থেকে (সর্বাধিক তাৎপর্যপূর্ণ বিট) ডান থেকে শীর্ষ সারিটি সংজ্ঞায়িত করে। পরের বাইটটি পরের সারিটি সংজ্ঞায়িত করে এবং আরও 8 টি সারির জন্য। বুনন নম্বরটি একটি 8 বাই 8 বর্গক্ষেত্রকে সংজ্ঞায়িত করে যা উপরের বাম দিক থেকে শুরু করে প্রয়োজনীয় অঞ্চলটি টাইল করা উচিত। অর্থাৎ, এর শীর্ষ বাম কোণটি beাকাতে অঞ্চলটির উপরের বাম কোণের সাথে সামঞ্জস্য করা উচিত।

প্রত্যেককে 0একটি হিসাবে প্রদর্শিত হবে |এবং প্রত্যেককে 1একটি হিসাবে প্রদর্শিত হবে-

উদাহরণ

ইনপুট: 0 8

Ouput:

||||||||
||||||||
||||||||
||||||||
||||||||
||||||||
||||||||
||||||||

ইনপুট: 3703872701923249305 8

আউটপুট:

||--||--
|--||--|
--||--||
-||--||-
||--||--
|--||--|
--||--||
-||--||-

ইনপুট: 3732582711467756595 10

আউটপুট:

||--||--||
--||--||--
--||--||--
||--||--||
||--||--||
--||--||--
--||--||--
||--||--||
||--||--||
--||--||--

ইনপুট: 16141147355100479488 3

আউটপুট:

---
|||
---

লিডারবোর্ড স্নিপেট

( মার্টিনের টেম্পলেট ব্যবহার করে )

উত্তর:


10

কে, 20

{y#y#'"|-"8 8#0b\:x}

             0b\:x    // convert to binary
         8 8#         // reshape into an 8x8 boolean matrix
     "|-"             // index into this char vector using the booleans as indices  
  y#'                 // extend horizontally
y#                    // extend vertically

k){y#y#'"|-"8 8#0b\:x}[3703872701923249305j;10]
"||--||--||"
"|--||--||-"
"--||--||--"
"-||--||--|"
"||--||--||"
"|--||--||-"
"--||--||--"
"-||--||--|"
"||--||--||"
"|--||--||-"

k){y#y#'"|-"8 8#0b\:x}[3703872701923249305j;8]
"||--||--"
"|--||--|"
"--||--||"
"-||--||-"
"||--||--"
"|--||--|"
"--||--||"
"-||--||-"

এটি সত্যিই এর চেয়ে সহজ বা আরও সহজবোধ্য হয় না!
জন

1
@ জন এই বিষয়টি কেবলমাত্র যারা কে বোঝেন তাদের ক্ষেত্রে সত্য;)
অ্যালেক্স এ।

14

সিজেম, 33 31 বাইট

q~:X;2b64Te["|-"f=8/{X*X<z}2*N*

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

q~      e# Read and eval input.
:X;     e# Store the side length in X and discard it.
2b      e# Convert to base 2.
64Te[   e# Left-pad to length 64 with zeroes.
"|-"f=  e# Select '|' for 0 and '=' for 1.
8/      e# Split into chunks of 8 bits.
{       e# Do the following twice:
  X*    e#   Repeat lines X times (to ensure we have enough of them).
  X<    e#   Truncate them to exactly X lines.
  z     e#   Transpose the grid.
        e#   The transpose ensures that the second pass tiles the columns, and that the
        e#   grid is oriented correctly again after both passes are done.
}2*
N*      e# Join lines by newline characters.

2
আমি আপনাকে সাধুবাদ জানাই :)। এটি সম্ভবত পিপিসিজির ইতিহাসের দ্রুততম উত্তর
বিটা

7
@ বেটাডেখে গল্ফিং ভাষার সুবিধা হ'ল আপনার টাইপ কম হয়, তাই আপনি দ্রুত কোড করতে পারেন। : পি
মার্টিন ইন্ডার

1
গীজ, এমনকি উত্তর দেওয়ার আগে ট্যাগ সম্পাদনা করতেও সমস্যা হয়েছিল ! গল্ফ করতে কেউ খুব বেশি সময় ব্যয় করে; পি
সাবের

এই উদ্দেশ্যে আউটপুট: লিঙ্ক
অক্টাভিয়া টোগামি

@ কেনজি যে ইনপুট নম্বরটি তার চেয়ে বড় 2^64-1
মার্টিন ইন্ডার

5

জাভা, 110 109 107 বাইট

আমার কোডটি একটি বেনামে ল্যাম্বদা ফাংশনের আকারে যা গ্রহণ করে longএবং intতারপরে একটি প্রদান করে String

(w,s)->{String b="";for(int j,i=s--;i-->0;b+='\n')for(j=s;j>=0;)b+=(w>>8*(i%8)+j--%8)%2<1?'|':45;return b;}

পরীক্ষার যোগ্য ক্লাস

import java.util.function.BiFunction;
public class AsciiWeave {   
    public static void main(String[] args){
        BiFunction<Long,Integer,String> weave = 
            (w,s)->{String b="";for(int j,i=s--;i-->0;b+='\n')for(j=s;j>=0;)b+=(w>>8*(i%8)+j--%8)%2<1?'|':45;return b;}}
        ;
        System.out.println(weave.apply(Long.valueOf(args[0]),Integer.valueOf(args[1])));
    }
}

3
আমাকে অবশ্যই বলতে হবে, আমি জাভা দ্বারা মারধর করার অভ্যস্ত নই। : পি চমৎকার কাজ।
অ্যালেক্স এ।

ধন্যবাদ @ অ্যালেক্সা! ল্যাম্বডাস জবা সত্যিই গল্ফিংয়ের জন্য আরও ব্যবহারযোগ্য করে তোলে: (w,s)->পরিবর্তে String w(long w,int s)ব্যাটে ডানদিকে একটি বড় সাশ্রয় হয়।
ankh-morpork

@Ypnypn যা অবশ্যই কাজ করবে
ankh-morpork

বাহ, এটি চিত্তাকর্ষক। সাবাশ.
TheNumberOne

4

মতলব, 86 80 বাইট

function f(W,S)
a='|-';x=de2bi(typecast(W,'uint8'))+1;s=8-mod(0:S-1,8);a(x(s,s))

তাঁর পরামর্শের জন্য হকিকে ধন্যবাদ, যা আমাকে 6 বাইট বাঁচাতে পরিচালিত করেছিল।

উদাহরণ:

>> W = uint64(3732582711467756595)
W =
  3732582711467756595
>> S = uint8(10)
S =
   10
>> f(W,S)
ans =
||--||--||
--||--||--
--||--||--
||--||--||
||--||--||
--||--||--
--||--||--
||--||--||
||--||--||
--||--||--

de2biআপনাকে আরও কয়েকটি অক্ষর বাঁচাবে ;-)
হকি

@Hoki! ধন্যবাদ! আমি এটি সম্পর্কে ভেবেছিলাম ... তবে এটি ফলাফলটির একটি আলাদা আদেশ দেয়
লুইস মেন্ডো

হ্যাঁ, আপনাকে ফিরে a='|-'যেতে হবে a='-|'। এবং ব্যবহার করুনx=de2bi(typecast(W,'uint8'))+1;
হকি

@ হকি আমি de2biকেবল এই 9-শব্দটি (বিপরীতে ব্যবহার করার জন্য) চালিত করতে ফিট করেছিলাম । আবার ধন্যবাদ!
লুইস মেন্ডো

3

জুলিয়া, 145 বাইট

f(w,s)=(A=map(i->i=="1"?"-":"|",reshape(split(lpad(bin(w),64,0),""),8,8))';for i=1:s A=hcat(A,A)end;for i=1:s println(join(A[i>8?i%8:i,1:s]))end)

এটি এমন একটি ফাংশন তৈরি করে যা দুটি পূর্ণসংখ্যা গ্রহণ করে এবং স্টডআউটে প্রিন্ট করে।

অবহেলিত + ব্যাখ্যা:

function f(w,s)
    # Convert w to binary, left-padded with zeros to length 64
    b = lpad(bin(w), 64, 0)

    # Create an 8x8 array of | and -
    A = transpose(map(i -> i == "1" ? "-" : "|", reshape(split(b, ""), 8, 8)))

    # Horizontally concatenate A to itself s times
    for i = 1:s
        A = hcat(A, A)
    end

    # Print the rows of A, recycling as necessary
    for i = 1:s
        println(join(A[i > 8 ? i % 8 : i, 1:s]))
    end
end

এটি বেশ দীর্ঘ এবং আমি নিশ্চিত যে এটি আরও খাটো করা যায়। চেষ্টা করছি.


3

জে, 28 বাইট

'|-'{~]$"1]$8 8$_64{.#.inv@[

ব্যবহার:

   3732582711467756595 ('|-'{~]$"1]$8 8$_64{.#.inv@[) 10
||--||--||
--||--||--
--||--||--
||--||--||
||--||--||
--||--||--
--||--||--
||--||--||
||--||--||
--||--||--

ব্যাখ্যা (ডান থেকে বাম):

#.inv@[   binary representation vector of S
_64{.     padded with 0-s from the right to length 64
8 8$      reshaped in an 8 by 8 matrix
]$"1]$    tiled to a W by W size
'|-'{~    select | or - based on matrix element values

এটি এখানে অনলাইনে চেষ্টা করুন।



2

পাইথন, 77

lambda w,s:''.join('|-'[w>>~n/s%8*8+~n%s%8&1]+'\n'[~n%s:]for n in range(s*s))

এর প্রতিটি s*sমানের জন্য n:

  • ডিভোডের মাধ্যমে স্থানাঙ্কগুলি গণনা করুন (i,j)=(n/s,n%s)
  • টাইলিংয়ের মধ্যে অবস্থানটি গণনা করুন (i%8,j%8)
  • হিসাবে উপযুক্ত বিট অবস্থান গণনা করুন 8*(i%8)+(j%8)
  • যে বিট এক্সট্র্যাক্ট wনাড়াচাড়া দ্বারা wসাথে যে অনেক স্পেস এবং গত বিট গ্রহণ &1
  • '| -' এর একটিতে সেই অবস্থানে যোগদান করুন
  • যখনই যখনই প্রতিটি সারির শেষে নিউলাইন যুক্ত করুন n%s==0

প্রকৃতপক্ষে, টাইলিংগুলি পিছনের দিকে পেতে শেষ হয়, যেহেতু এটি wশেষ থেকে পড়ে । আমরা ~nএটি জায়গায় ব্যবহার করে এটি ঠিক করি n। পরিবর্তে আমি পুনরাবৃত্তির পদ্ধতির চেষ্টা করেছি, তবে এটি কিছুটা দীর্ঘ হয়ে গেছে।

অভিব্যক্তি w>>~n/s%8*8+~n%s%8&1অপারেটর প্রাধান্যের একটি অলৌকিক ঘটনা।


1

পাইথন 2, 132 বাইট

অবশ্যই সর্বাধিক মার্জিত সমাধান নয়, এবং এটি সি থেকে সবেমাত্র খাটো, তবে এটি একটি সূচনা .. ইনপুটটি কমা-বিচ্ছিন্নভাবে নেওয়া হয়।

k,n=input()
k=[`['|-'[int(x)]for x in'{0:064b}'.format(k)]`[2::5][i*8:i*8+8]*n for i in range(8)]*n
for j in range(n):print k[j][:n]

1

সি, 160 135 বাইট

i;main(s,v)char**v;{s=atoi(v[2]);for(;i++<s*s+s;)putchar(i%(s+1)?strtoull(v[1],0,10)&1ull<<63-(i/(s+1)*8+(i%(s+1)-1)%8)%64?45:'|':10);}

এখানে আরও কিছু গল্ফিং করা যেতে পারে এবং এর একটি ব্যাখ্যা প্রয়োজন, তবে এই মুহূর্তে আমার কাছে সময় নেই :)

Ungolfed:

i;

main(s,v)
char**v;
{
    s=atoi(v[2]);
    for(;i++<s*s+s;)
        putchar(i%(s+1) ? /* print dash or pipe, unless at end of row, then print newline */
            /* Calculating which bit to check based on the position is the tough part */
            strtoull(v[1],0,10) & 1ull << 63-(i/(s+1)*8+(i%(s+1)-1)%8)%64 ? /* If bit at correct index is set, print dash, otherwise pipe */
                45 /* dash */
                : '|' /* pipe */
            : 10); /* newline */
}

আপনি কি "সি, 100 বাইট" এর মতো শিরোনামটি ফর্ম্যাট করতে পারবেন? এইভাবে এটি আরও ভালভাবে লিডারবোর্ডে প্রদর্শিত হবে।
অনুবিয়ান নুব

হ্যাঁ, দুঃখিত।
কোল ক্যামেরন

1
আপনার কোডটি আমার পরিবেশে সঠিকভাবে চালাতে আমার সমস্যা হচ্ছে। আপনি কি কোনও নির্দিষ্ট বিকল্প দিয়ে সংকলন করছেন?
ankh-morpork 22

@ দোহাকাতার 7 দেখে মনে হচ্ছে কিছু লিনাক্স পরিবেশকে stdlib.hস্পষ্টভাবে অন্তর্ভুক্ত করা দরকার। আমি যখন সেন্টোস-এ পরীক্ষা করেছিলাম তখন আমাকে এটি অন্তর্ভুক্ত করতে বাধ্য করা হয়নি (আমি বিশ্বাস করি যে এটিই ছিলাম)। এখন উবুন্টুতে, আমি এটির মতো সংকলন না করে এটি চালাতে পারি না:gcc -include stdlib.h w.c
কোল ক্যামেরন

ইন্দ্রিয় তোলে আমি উবুন্টু উপর পরীক্ষা
Ankh-morpork

1

পাইথ, 31 30 বাইট

L<*QbQjbyyMcs@L"|-".[Z64jvz2 8

ইনপুট, দুই লাইন থাকা উচিত ডব্লিউ তারপর S

এখানে চেষ্টা করুন

ব্যাখ্যা

L                              # define y(b):
  *Qb                          #   b, repeated Q (the second input) times
 <   Q                         #   cut to length Q

                        jvz2   # convert the first input to binary
                   .[Z64       # pad with 0's to length 64
             @L"|-"            # map the digits to the appropriate character
            s                  # convert the list of characters to a string
           c                 8 # chop into 8 strings
         yM                    # extend each string to the correct size
        y                      # extend the list of strings to the correct size
      jb                       # join with newlines
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.