เอาท์พุทเส้นทางไบนารีจากจำนวน


22

สำหรับจำนวนเต็มที่nพอใจn > 0เขียนค่าเป็นเส้นทางจากมากไปหาน้อยขึ้นอยู่กับการเป็นตัวแทนไบนารี

กฎระเบียบ

  • บิตชุดแรก (สำคัญที่สุด) จะอยู่ที่มุมซ้ายบนเสมอ
  • เมื่อตั้งค่าบิตถัดไป (a 1) ให้วาดอักขระ ("เติม") บนบรรทัดถัดไปในคอลัมน์เดียวกันกับอักขระก่อนหน้าที่วาด ลองใช้ช่องว่าง ("ว่างเปล่า") เพื่อเติม แต่อักขระใด ๆ ก็ตามที่จะทำตราบใดที่มันยังคงเหมือนเดิม
  • เมื่อบิตถัดไปไม่ได้ถูกตั้งค่า (a 0 ) ให้วาดอักขระ ("เติม") บนบรรทัดเดียวกันทางด้านขวาของอักขระก่อนหน้าที่วาดไว้ทันที
  • รหัสของคุณจะต้องรองรับตัวเลขอย่างน้อย 20 บิตที่สำคัญ
  • เขียนโปรแกรมเต็มฟังก์ชั่นแลมบ์ดา ฯลฯ แต่ไม่มีข้อมูลโค้ด
  • ไม่อนุญาตให้มีช่องว่างนำหน้า (หรือ "ว่าง" ถ่าน) / บรรทัด
  • จำนวนช่องว่างต่อท้ายใด ๆ (หรือ "ช่องว่าง" ถ่าน) / บรรทัดที่อนุญาต
  • ยอมรับอินพุต 1D ทุกชนิด: หมายเลข, สตริง, อาเรย์ของบูลีน, ฯลฯ เก็บลำดับของบิตโดยไม่แตะต้อง
  • สามารถรับเอาต์พุต 2D visual ชนิดใดก็ได้: ใน stdout, สตริง (ด้วยค่าที่แตกต่างสองค่าใด ๆ ที่แสดงว่า "เต็ม" และ "ว่างเปล่า") คุณสามารถส่งออกเมทริกซ์ได้หากคุณต้องการ รายการตัวเลขดูเหมือนยากที่จะปรับให้เข้ากับกฎ "ไม่มีส่วนหัว" แต่ฉันเปิดดูได้ถ้าคุณหาวิธีใช้ หมายเหตุ: หากคุณเลือกที่จะพิมพ์หรือส่งคืนสตริงอักขระที่ใช้ต้องเป็นอักขระ ASCII ในช่วง codepoints [32-126]
  • ช่องโหว่มาตรฐานถูกแบน
  • นี่คือ codegolf เพื่อให้ได้รหัสที่สั้นที่สุดชนะ

ตัวอย่าง

อินพุต: 1

*

อินพุต: 2

**

อินพุต: 3

*
*

อินพุต: 4

***

อินพุต: 5

**
 *

อินพุต: 6

*
**

อินพุต: 7

*
*
*

อินพุต: 25

*
***
  *

อินพุต: 699050

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

อินพุต: 1047552

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

อินพุต: 525311

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


ไม่"เข้าแถวรับอนุญาตของ booleans"หมายความว่าการป้อนข้อมูลในรูปแบบของการแสดงจำนวนไบนารีที่เป็นอาร์เรย์ที่ได้รับอนุญาต?
นิด

3
@Nit อินพุต 1D ทุกชนิด ดังนั้นถ้าจำนวนเป็น 5 คุณอาจมีอาร์เรย์อินพุทคล้ายกับ[1,0,1]ใช่
Olivier Grégoire

ดังนั้นรูปแบบนั้นฟรีจริง ๆ ฉันต้องการที่จะใช้จำนวนเป็นตัวเลขไบนารีแรก 1 ย้ายไปท้ายที่สุดดังนั้นตั้งแต่9เป็นฉันต้องการการป้อนข้อมูลของฉันจะ1001 0011ไม่เป็นไร?
Ton Hospel

การมีบิต1แรกเป็นอันดับแรกเป็นส่วนหนึ่งของความท้าทายและ (อีกครั้ง) การเคลื่อนย้ายบิตนั้นจะทำให้ความท้าทายเป็นเรื่องเล็กน้อยดังนั้นฉันจึงกลัวว่า คุณสามารถลบออกจากอินพุตของคุณในโปรแกรมได้
Olivier Grégoire

คำตอบ:


7

เยลลี่ขนาด 8 ไบต์

¬œṗ+\Ṭz0

ลิงค์ monadic ยอมรับตัวเลขเป็นรายการของคนและศูนย์ (เช่น13คือ[1,1,0,1] ) ส่งคืนรายการของรายการค่าหนึ่งและศูนย์โดยที่รายการแรกคือแถวแรก

ลองออนไลน์! หรือดูรูปแบบชุดทดสอบ

อย่างไร?

¬œṗ+\Ṭz0 - Link: list L           e.g. [1,1,0,0,1,1,0,1] (i.e. 205)
¬        - logical NOT L               [0,0,1,1,0,0,1,0]
    \    - cumulative reduce L by:
   +     -   addition                  [1,2,2,2,3,4,4,5]
 œṗ      - partition @ truthy indices  [[1,2],[2],[2,3,4],[4,5]]
     Ṭ   - un-truth (vectorises)       [[1,1],[0,1],[0,1,1,1],[0,0,0,1,1]]
      z0 - transpose with filler 0     [[1,0,0,0],[1,1,1,0],[0,0,1,0],[0,0,1,1],[0,0,0,1]]
         -                        i.e.  1000
                                        1110
                                        0010
                                        0011
                                        0001

11

MATL , 14 ไบต์

J_iB^YsJ+'o-'&XG

สร้างเอาต์พุตกราฟิกเป็นพา ธ เริ่มต้นที่พิกัด (0,0) ลองที่MATL Online! หรือดูตัวอย่างออฟไลน์ด้านล่าง:

  • อินพุต7:

    ป้อนคำอธิบายรูปภาพที่นี่

    เอาท์พุท:

    ป้อนคำอธิบายรูปภาพที่นี่

  • อินพุต699050:

    ป้อนคำอธิบายรูปภาพที่นี่

    เอาท์พุท:

    ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการคุณสามารถดูเส้นทางเป็นพิกัดที่ซับซ้อนได้9 ไบต์ :

J_iB^YsJ+

ลองออนไลน์!

คำอธิบาย

J_      % Push -1j (minus imaginary unit)
i       % Push input number
B       % Convert to binary. Gives an array of 0 and 1 digits
^       % Power, element-wise. A 0 digit gives 1, a 1 digit gives -1j
Ys      % Cumulative sum. Produces the path in the complex plane
J+      % Add 1j, element-wise. This makes the complex path start at 0
'o-'    % Push this string, which defines plot makers
&XG     % Plot

7

MATL 10 ไบต์

YsG~YsQ1Z?

อินพุตอาร์เรย์ของตัวเลขฐานสอง ส่งออกเมทริกซ์

ลองออนไลน์!

คำอธิบาย

Ys    % Implicit input: array of binary digits. Cumulative sum. This gives the
      % row coordinates
G     % Push input again
~     % Negate: change 0 to 1 and 1 to 0
Ys    % Cumulative sum
Q     % Add 1. This gives the column coordinates
1Z?   % Matrix containing 1 at those row and column coordinates and 0 otherwise.
      % Implicit display


6

Charcoal , 22 20 19 11 10 ไบต์

F⮌S¿Iι↑*←*

เฉพาะคำตอบถ่านครั้งที่สองของฉันป่านนี้

รับอินพุตเป็น binary-String (เช่น699050as 10101010101010101010)

-9 ไบต์ขอบคุณ@Neilแนะนำให้วนซ้ำไปข้างหลัง

ลองออนไลน์

คำอธิบาย:

อ่าน STDIN เป็นสตริงในลำดับที่กลับกัน:

Reverse(InputString())
⮌S

วนซ้ำเลขฐานสองเป็นสตริงι:

For(Reverse(InputString()))
F⮌S

หากιย้อนกลับไปที่ตัวเลขคือ 1 ให้พิมพ์ด้าน*บนขึ้นมามิฉะนั้นให้พิมพ์*ทางด้านซ้าย

If(Cast(i)) Print(:Up,"*"); Else Print(:Left,"*");
¿Iι↑*←*

1
นี่จะเป็นครึ่งหนึ่งถ้าคุณพิมพ์สตริงในสิ่งที่ตรงกันข้ามโดยเริ่มต้นที่จุดสิ้นสุดและทำงานและซ้าย
Neil

@ Neil Ok ตอนนี้มันควรได้รับการแก้ไข ขอบคุณ! -8 ไบต์
Kevin Cruijssen

1
บันทึกไบต์อื่นด้วยการลบ{}s
Neil

1
Baseค่าใช้จ่ายเพียง 1 ไบต์ในขณะที่คุณไม่จำเป็นต้องที่ทั้งหมด:Cast F⮌↨N²¿ι↑*←*
Neil

1
@KevinCruijssen ขออภัยสำหรับการตอบกลับล่าช้า แต่เพื่อตอบคำถามของคุณ: ไม่มีทางย้อนกลับ-vเนื่องจาก Charcoal ได้รับการออกแบบเป็นภาษากอล์ฟและฉันได้เพิ่มโหมด verbose เพื่อให้พิมพ์และเข้าใจได้ง่ายขึ้น (ฉันสามารถเพิ่มได้ถ้าคุณต้องการ) -aสั้นสำหรับ--astฉันเพิ่ม (รูปแบบที่นำมาจาก PyTek btw) เพื่อช่วยให้ฉันเข้าใจรหัสรวบรัดด้วยความพยายามน้อยที่สุดเท่าที่จะทำได้: P (และมันช่วยได้จริงๆเมื่อคุณสับสนกับคำสั่งโต้แย้ง) นอกจากนี้ไม่ว่า-lจะเป็นตัวเลือกที่แยกจากกัน (เพียงทำ-hเพื่อขอความช่วยเหลือ / คำอธิบายของบรรทัดคำสั่ง)
ASCII- เท่านั้น

6

C # (. NET Core) , 155 123 120 113 101 ไบต์

32 ไบต์ที่บันทึกไว้เนื่องจากอินพุตสามารถรับเป็นอาร์เรย์ของบิตได้
บันทึกแล้ว 7 ไบต์ขอบคุณ @auhmaan
บันทึก 10 ไบต์ด้วย @KevinCruijssen

n=>{var m="";for(int i=0,c=1;i<n.Length;)m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);return m;}

ลองออนไลน์!


คุณไม่สามารถเปลี่ยน+new string(' ',c)+"*"ไป+"*".PadLeft(c)(ประหยัด 7 bytes)?
auhmaan

@auhmaan คุณพูดถูกต้องขอบคุณ!
Ian H.

-4 ไบต์โดยการพิมพ์0แทน*: if(n[i++]<1){m+="*";c++;}ไปยังif(n[i++]<1)m+=c++%1;และ"*".PadLeft(c);ไป"0".PadLeft(c);
Kevin Cruijssen

การแก้ไขก็จริง -12 ไบต์เพราะm+=ตอนนี้อาจเป็นแบบไตรภาค - ถ้า:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
เควิน Cruijssen

1
@KevinCruijssen ขอบคุณการใช้0และการใช้งานผู้ประกอบการที่ยอดเยี่ยมนั้นยอดเยี่ยมจริงๆ! ฉันได้แก้ไขกรณี699060โดยเพียงตั้งค่าcเป็นจุดเริ่มต้นฉันพลาดที่ขณะตรวจสอบกรณีทดสอบ
เอียนเอช

5

05AB1E , 18 17 14 ไบต์

γ€gć¸s>«1IÔ·ÌΛ

ลองออนไลน์!

คำอธิบาย

γ€g             # Push the input as the array as chuncks of consecutive elements, map with length
   ć¸s>«        # Increment each value except the first one
        1I      # Push 1 and the input       
          Ô     # Push connected uniquified input (first elements of each chunck of consecutive elements in the input)
           ·Ì   # Map each with 2 * a + 2
             Λ  # Draw canvas :-)
  • 3 ไบต์ขอบคุณ @Emigna

คำอธิบายของผ้าใบ 05AB1E


1
γ€gć¸s>«1IÔ·ÌΛควรบันทึก 4 ไบต์
Emigna

@Emigna Brilliant ขอบคุณ! ลืมไปอย่างสิ้นเชิงว่ามีตัว +2 ตัวอยู่ภายใน:
Kaldo


3

Haskell , 65 ไบต์

f(a:b)|a="*":f b|(x:y)<-f b=('*':x):map(' ':)y
f[]=["*"]
f.tail

ลองออนไลน์!

รับอินพุตเป็นรายการบูลีน

แกง PAKCS ขนาด 70 ไบต์

u(a:b)=('*':a):map(' ':)b
f(a:b)|a="*":f b|1>0=u$f b
f[]=["*"]
f .tail

ท่าเรือคำตอบ Haskell แต่เพราะไม่ทำงานในแกงเราต้องทำให้ฟังก์ชั่นผู้ช่วย<- uนอกจากนี้เรายังต้องเพิ่มช่องว่างระหว่างfและ.เพื่อให้แกงกะหรี่เป็นการแยกวิเคราะห์เป็นจุดแทนที่จะเป็นจุด

สิ่งนี้ยังใช้งานได้ใน MCC Curry แต่ไม่สามารถใช้งานใน Sloth Curry (ซึ่งเป็น TIO เดียวที่ได้รับการสนับสนุน)


3

Haskell , 74 70 67 62 ไบต์

tail.("\n"%)
s%(x:r)=([1..x]>>s)++'*':(s++[' '|x<1])%r
s%[]=""

ลองออนไลน์! รับรายการค่าศูนย์และรายการที่เป็นอินพุตและส่งคืนสตริงที่คั่นด้วยบรรทัดใหม่

แรงบันดาลใจจากคำตอบของ XNOR


1
การแข่งขันที่เป็นมิตรเล็ก ๆ น้อย ๆ
ข้าวสาลีตัวช่วยสร้าง

1
@ user56656 ตาคุณอีกครั้ง :)
Laikoni

3

อิโมจิโคด , 251 ไบต์

🐖🎅🏿🍇🍦b🔡🐕2🍦c🔤*🔤🍮e🔤🔤🍮y🔤🔤🍦k🍡b🔂i k🍇🍊😛🔡i🔤1🔤🍇🍊😛y e🍇🍉🍓🍇😀y🍉🍮y🔤🔤🍮y🍪e c🍪🍉🍓🍇🍮y🍪y c🍪🍮e🍪🔤 🔤 e🍪🍉🍉😀y🍉

ลองออนไลน์!

นี่ไม่ใช่ทางออกสำหรับเล่นกอล์ฟแน่นอน แต่ไม่มีคนที่มีชีวิตที่จะพิจารณาใช้รหัสภาษาอิโมจิของกอล์ฟ อย่างไรก็ตามในกระบวนการของการทำให้ตัวเองต้องเผชิญกับความน่าสะพรึงกลัวซึ่งเป็นรูปแบบของอีโมจิโค๊ดในการสอนภาษาที่น่าประหลาดใจนี้ฉันรู้สึกประหลาดใจมากที่มันมีประสิทธิภาพและมีประสิทธิภาพ😀

ชี้แจง:

🐋 🚂 🍇    👴 Define Class
🐖🎅🏿🍇    👴 Define Method
🍦b🔡🐕2    👴Convert Input integer to binary string
🍦c🔤*🔤    👴 asterisk string
🍮e🔤🔤    👴 Spacing string
🍮y🔤🔤    👴 output string
🍦k🍡b    👴 translate to iteratable
🔂i k🍇    👴 for-in loop to iterate over each digit 
🍊😛🔡i🔤1🔤🍇    👴 if digit is 1:
🍊😛y e🍇🍉    👴 don't print initial newline
🍓🍇😀y🍉    👴 print spaces + asterisks
🍮y🔤🔤    👴 reset output string
🍮y🍪e c🍪🍉    👴 add correct number of spaces and one asterisk
🍓🍇    👴 if digit is 0:
🍮y🍪y c🍪    👴 add an asterisk to the output string
🍮e🍪🔤 🔤 e🍪    👴 add another space to the space string
🍉🍉
😀y    👴 print one last output string
🍉🍉
🏁🍇    👴 Start Program
 🎅🏿 699050    👴 Call Method
🍉

2

JavaScript (ES6), 48 ไบต์

รูปแบบ I / O เดียวกันและตรรกะเดียวกันกับเวอร์ชันแบบเรียกซ้ำด้านล่าง

a=>a.map((n,i)=>n?i&&p+0:+(p+=' '),p=`
`).join``

ลองออนไลน์!

หรือ42 ไบต์หากรูปแบบนี้เป็นที่ยอมรับ


เวอร์ชันแบบเรียกซ้ำ 56 ไบต์

รับอินพุตเป็นอาร์เรย์ของจำนวนเต็ม (0 หรือ 1) ใช้0สำหรับเติมและพื้นที่ว่างเปล่า

f=([n,...a],p=`
`,x=0)=>1/n?(n?x+0:+(p+=' '))+f(a,p,p):a

ลองออนไลน์!

แสดงความคิดเห็น

f = (               // f = recursive function taking:
  [n, ...a],        //   n = current bit; a[] = remaining bits
  p = `\n`,         //   p = padding string, initialized to a linefeed
  x = 0             //   x = 0 on the 1st iteration / equal to p after that
) =>                //
  1 / n ?           // if n is defined:
    ( n ?           //   if n = 1:
        x + 0       //     append x + 0 --> either the integer 0 on the first iteration
                    //                      or the padding string followed by a '0'
      :             //   else:
        +(          //     append the integer 0 (whitespace coerced to a number)
          p += ' '  //     and append a space to the padding string
        )           //
    ) + f(a, p, p)  //   append the result of a recursive call with x = p
  :                 // else:
    a               //   append the empty array a[], forcing coercion to a string

2

ยูทิลิตี Bash + GNU, 38

dc -e?2op|sed 's/\B1/^K^H*/g;s/[10]/*/g'

ที่นี่^Kและ^Hเป็นตัวอักษรแนวตั้งแท็บและตัวควบคุม backspace สิ่งเหล่านี้แสดงผลไม่ดีบนเบราว์เซอร์ดังนั้นสคริปต์นี้อาจถูกสร้างขึ้นใหม่ดังนี้:

base64 -d <<< ZGMgLWU/Mm9wfHNlZCAncy9cQjEvCwgqL2c7cy9bMTBdLyovZyc= > binpath.sh

ทำงานในอาคารผู้โดยสาร อินพุตคือผ่าน STDIN

คำตอบนี้อาจขยายข้อกำหนดไปไกลเกินไป - ในความเป็นจริงไม่มีอักขระนำหน้าในแต่ละบรรทัดของเอาต์พุต - การวางตำแหน่งทั้งหมดทำด้วยอักขระควบคุม หากนี่เป็นการยืดออกมากเกินไปผลลัพธ์อาจถูกไพพ์ไป|col -x|tacที่ 11 ไบต์พิเศษ


2

แบตช์ 113 ไบต์

@set s=
:l
@shift
@if %1.==0. set s=%s%+&goto l
@echo %s%+
@if not %s%.==. set s=%s:+= %
@if %1.==1. goto l

รับรายการบิตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ใช้+แทน*เพราะ*มีความหมายพิเศษภายใน%s:...=...%การขยาย


2

Java 10, 100 106 ไบต์

b->{var s="";int i=0,j;for(var c:b){if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}return s.substring(1);}

รับอาร์เรย์เป็นบูลีนและคืนค่าสตริง ( 0s ว่างเปล่า1เติมเต็ม s) ลองออนไลน์ได้ที่นี่

ขอบคุณOlivier Grégoireที่ช่วยให้ฉันเล่นกอล์ฟได้มากขึ้นและแจ้งเตือนฉันถึงความจริงที่ว่ารูปแบบผลลัพธ์ของฉันไม่ได้มาตรฐาน

เวอร์ชันที่ไม่ถูกปรับแต่ง:

b -> { // lambda taking an array of booleans as argument
    var s = ""; // the output String
    int i = 0,  // the number of "empty" characters to output
    j;          // iterator variable for outputting the "empty" characters
    for(var c : b) { // iterate over the boolean array (the binary digits)
        if(c) // if it's a '1'
            for(s += "\n", // output a newline
            j = i; j-- > 0;) s += 0; // output the "empty" characters
        else // if it's a '0'
            ++i; // move one to the right on the next line
        s += 1; // output the "filled" character
    }
    return s.substring(1); // output the constructed String, minus the leading newline
}

ฉันเล่นกอล์ฟ 5 ไบต์:{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
Olivier Grégoire

ยิ่งไปกว่านั้น:{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Olivier Grégoire

แม้ว่าคุณจะไม่ได้พิมพ์ในบรรทัดแรก แต่จะพิมพ์ที่บรรทัดที่สอง จากการท้าทาย: "ไม่อนุญาตให้มีช่องว่าง (หรือ" ว่าง "ถ่าน) / บรรทัด"
Olivier Grégoire

@ OlivierGrégoireขอบคุณ ฉันแก้ไขแล้ว
OOBalance


1

Haskell , 126 ไบต์

(#)n=maximum.map(!!n)
f l|s<-scanl1(zipWith(+))$(\a->[1-a,a])<$>l=unlines[[last$' ':['#'|elem[x,y]s]|x<-[0..0#s]]|y<-[1..1#s]]

ป้อนข้อมูลเป็นรายการของศูนย์และคน แปลงจำนวนเป็นออฟเซ็ตโดยx↦[1-x,x]และคำนวณผลรวมบางส่วน ผลลัพธ์สุดท้ายทำด้วยสองรายการซ้อนกัน

ลองออนไลน์!


1

R , 59 ไบต์

function(n,x=sum(n|1))matrix(1:x^2%in%cumsum((n-1)%%x+1),x)

ลองออนไลน์!

รับอินพุตเป็นอาร์เรย์ของบิต

ส่งกลับเมทริกซ์บูลีนของTRUEและFALSEเป็นตัวแทน*และตามลำดับ

นอกจากนี้ยังมีบางอย่างในส่วนท้ายเพื่อพิมพ์เมทริกซ์ที่สอดคล้องกับข้อกำหนดข้างต้นเพื่อความสะดวกในการทดสอบ


1

APL + WIN, 65 หรือ 46 ไบต์

แสดงพร้อมต์สำหรับอินพุตของจำนวนเต็ม

n←+/i←((1+⌊2⍟n)⍴2)⊤n←⎕⋄m←(n,n)⍴' '⋄m[⊂[2](+\i),[1.1]1++\~i]←'*'⋄m

หรือสำหรับเวกเตอร์ตัวเลขของการแทนเลขฐานสองของจำนวนเต็ม

m←(2⍴+/n←⎕)⍴' '⋄m[⊂[2](+\i),[1.1]1++\~i]←'*'⋄m

สมมติว่าฉันได้อ่านความคิดเห็นเพื่อคำตอบที่ถูกต้องและอนุญาตให้ป้อนข้อมูลหลัง


1

Pyth, 23 ไบต์

p\*VtQINp+b*Zd.?=hZ)p\*

ลองที่นี่

คำอธิบาย

p\*VtQINp+b*Zd.?=hZ)p\*
p\*                       Print the leading *.
   VtQ                    For each bit (excluding the leading 1)...
      IN      .?   )      ... If the bit is set...
        p+b*Zd            ... Print a newline and a bunch of spaces...
                =hZ       ... Otherwise, increase the count of spaces...
                    p\*   ... Then print the next *.


1

SmileBASIC, 64 59 57 ไบต์

INPUT N@L
GPSET X,Y
B=N<0X=X+B
Y=Y+(X>B)N=N<<1ON!N GOTO@L

บิตสูงสุด (เครื่องหมายบิต) ถูกตรวจสอบและหากเป็น 1 ตำแหน่ง X จะเพิ่มขึ้น หากเครื่องหมายบิตน้อยกว่าตำแหน่ง X (นั่นคือเครื่องหมายบิตคือ 0 และ X ไม่ใช่ 0) ตำแหน่ง Y จะเพิ่มขึ้น

การเคลื่อนไหวแรกจะเป็นแนวนอนเสมอดังนั้นการเคลื่อนไหว Y จะถูกปิดกั้นจนกว่าหลังจากการเคลื่อนไหว X ครั้งแรก สิ่งนี้ทำให้มั่นใจได้ว่าตำแหน่ง Y จะไม่เพิ่มขึ้นในช่วง 0 บิตที่นำหน้า

จากนั้น N จะเลื่อนไปทางซ้ายและสิ่งนี้จะทำซ้ำจนกว่า N จะถึง 0



1

Japt , 19 17 ไบต์

Ë?R+Tî +QT©Qìx
Ë?                 // Map over the input and if the current value is 1:
  R+               // Return a new line and
    Tî +           // a space repeated T (with initial value 0) times and
        Q          // a \".
         :         // If the current value is 0:
          °T       // Increment T
            ©Q     // and return \".
              Ã    // When all of that is done,
               ¬   // turn the array into a string
                x  // and trim it, removing the excess new line at the start.

จะเข้าเป็นอาร์เรย์ของบิตที่ตัวอย่างเช่น[1,0,1], เอาท์พุทแทน" โกนไบต์ที่สองออกขอบคุณที่โอลิเวอร์*

ลองออนไลน์!


ทำได้ดีนี่. คุณสามารถแทนที่SpTด้วย- îคือการที่คล้ายกันยกเว้นเป็นค่าเริ่มต้นp " "นอกจากนี้ยังมีช็อตคัตสำหรับq :¬
โอลิเวอร์

@Oliver ขอบคุณฉันไม่รู้เกี่ยวกับîมีประโยชน์มากอย่างแน่นอน ฉันมักจะตรวจสอบโอกาสในการใช้ทางลัด แต่ฉันก็ยังคิดถึงพวกเขาอยู่เสมอขอบคุณมากสำหรับความช่วยเหลือของคุณ
นิตย์

1

Python 2, 113 Bytes

def f(a):
 o='*';r=[o]
 for i in bin(a)[3:]:
  if'0'<i:r+=[' '*len(r[-1][1:])]
  r[-1]+=o
 print'\n'.join(r)

ไม่แน่ใจว่าอันนี้นับ (ส่งออกอาร์เรย์ของแต่ละบรรทัด) แต่ถ้าเป็นเช่นนั้นฉันจะเปลี่ยนจำนวนไบต์เป็น 103:

def f(a):
 o='*';r=[o]
 for i in bin(a)[3:]:
  if'0'<i:r+=[' '*len(r[-1][1:])]
  r[-1]+=o
 print r

1

TI-Basic (TI-84 Plus CE), 85 ไบต์

Prompt L
1→X
1→Y
DelVar [A]
sum(LL
{Ans,1-Ans+dim(LL→dim([A]
1→[A](Y,X
For(I,2,dim(LL
Y+LL(I→Y
X+not(LL(I→X
1→[A](Y,X
End
[A]

แสดงพร้อมต์สำหรับรายการบูลีนส่งคืนเมทริกซ์ที่ 0 และ 1

ดูผ่านรายการเพิ่ม X ถ้า 'บิต' ถัดไปคือ 0 เปลี่ยน Y เป็นอย่างอื่นจากนั้นเพิ่ม 1 ไปยังเมทริกซ์ที่ตำแหน่งนั้นและส่งกลับเมทริกซ์ในตอนท้าย

TI-Basic เป็นlanugage โทเค็

  • 1 ไบต์: Prompt , L* 6, (ขึ้นบรรทัดใหม่) * 12, 1* 5, * 7, X* 5, Y* 5 sum(,, L* 5 {,, Ans* 2, ,* 5 -,, +* 3, dim(* 3, (* 4 For(,,I * 3, 2, not(, End= 73 ไบต์
  • 2 ไบต์: Delvar , [A]* 5 = 12 ไบต์
  • ทั้งหมด: 85 ไบต์

TI-Basic (TI-84 Plus CE), 56 ไบต์

Prompt L
1→X
1→Y
Output(Y,X,"*
For(I,2,dim(LL
Y+LL(I→Y
X+not(LL(I→X
Output(Y,X,"*
End

กระบวนการเดียวกับข้างต้น แต่ใช้เอาต์พุตกราฟิก (ถูก จำกัด โดยขนาดหน้าจอ: 10 แถว, 26 คอลัมน์, สูงสุด 10 1s และ 25 0s) ตามที่มันไปแทนที่จะเพิ่มเป็นเมทริกซ์


1

Pyth, 30 ไบต์

JZFG.BQIsGIJk)p+*ZdN.?pN=hZ)=J

ลองออนไลน์!

การใช้ประโยชน์ "แทน*แทน

Python 3 การแปล:
Q=eval(input())
Z=0
J=Z
for G in "{0:b}".format(Q):
    if int(G):
        if J:
            print()
        print(Z*' '+'"',end='')
    else:
        print('"',end='')
        Z+=1
    J=Q

1

x86 .COM, 32 ไบต์

00h: 66 D1 E6 66 0F BD CE BF 24 AD 8E DF 41 66 0F A3 
10h: CE 19 DB 81 E3 9E 00 8D 79 02 C6 05 2A E2 EE C3 

fun:
shl esi, 1
bsr ecx, esi
mov di, $ad24
mov ds, di
inc cx
lab2:
bt esi, ecx
sbb bx,bx
and bx,158
lea di,[di+2+bx]
mov [di],byte '*'
lab1:loop lab2
ret  

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.