วาดโดมิโนให้ฉัน


35

ท้าทาย

ให้ตัวเลขสองหลักเป็นอินพุต 0-9 ให้ส่งออกโดมิโน (จากชุดโดมิโนสองครั้งที่เก้า ) ด้วยจำนวนจุด (จุด) เหล่านี้บนใบหน้าทั้งสอง ใบหน้าทั้งสิบที่เป็นไปได้มีลักษณะดังนี้ (คั่นด้วยท่อ):

     |     |    o|    o|o   o|o   o|o o o|o o o|o o o|o o o
     |  o  |     |  o  |     |  o  |     |  o  |o   o|o o o
     |     |o    |o    |o   o|o   o|o o o|o o o|o o o|o o o

หรือแยกบรรทัด:

     
     
     
-----
     
  o  
     
-----
    o
     
o    
-----
    o
  o  
o    
-----
o   o
     
o   o
-----
o   o
  o  
o   o
-----
o o o
     
o o o
-----
o o o
  o  
o o o
-----
o o o
o   o
o o o
-----
o o o
o o o
o o o

รูปแบบอินพุต

คุณสามารถป้อนข้อมูลในรูปแบบที่เหมาะสมรวมถึง แต่ไม่ จำกัด เพียง:

  • สองจำนวนเต็มแยกสตริงหรืออาร์เรย์เดี่ยว;
  • จำนวนเต็มเดียวจาก 0-99;
  • อาร์เรย์ของจำนวนเต็มสองจำนวน
  • สตริงสองหลัก

รูปแบบเอาต์พุต

  • ใบหน้าทั้งสองอาจจัดเรียงในแนวนอนคั่นด้วยท่อดังนี้:
    o|o   o
     |  o  
o    |o   o
  • หรือพวกเขาอาจจัดแนวตั้งคั่นด้วยเครื่องหมายยัติภังค์เช่น:
    o
     
o    
-----
o   o
  o  
o   o
  • คุณสามารถส่งออกเส้นขอบรอบโดมิโนได้หากต้องการ
  • คุณอาจเลือกที่จะแสดงรายการของเส้นรายการของสองใบหน้าหรือการรวมกันของเหล่านี้
  • คุณสามารถใช้อักขระที่ไม่ใช่ช่องว่างสำหรับ pips (ฉันใช้o)
  • หากคุณต้องการจริงๆคุณสามารถใช้0สำหรับช่องว่างและ1สำหรับจุดหรือFalse/ True(หรือเทียบเท่าภาษาของคุณ) ถ้าเอาท์พุทอาร์เรย์
  • คุณสามารถลบช่องว่างระหว่างคอลัมน์; นี่เป็นเอาต์พุตที่ถูกต้องสำหรับ 7, 7:
ooo|ooo
 o | o 
ooo|ooo
  • ใบหน้าใด ๆ อาจหมุนได้ 90 องศา นี่เป็นเอาต์พุตที่ถูกต้องสำหรับ 7, 7:
o   o|o o o
o o o|  o  
o   o|o o o
  • คุณอาจมีช่องว่างนำหน้า / ตามหลังเท่าที่คุณต้องการตราบใดที่ส่วนหลักของผลลัพธ์ยังคงสอดคล้องกับข้อ จำกัด อื่น ๆ
  • ใบหน้าแต่ละหน้าจะต้องมีความสูง 3 บรรทัดแม้ว่าเส้นนั้นจะว่างเปล่า สำหรับ 0, 1 คุณไม่สามารถส่งออกสิ่งนี้:
-----

  o

แต่คุณสามารถเอาท์พุทนี้:




-----

  o

ในทำนองเดียวกันถ้าคุณกำลังแสดงผลรายการสองรายการของเส้นที่คุณสามารถทำได้แต่ไม่[["", "", ""], ["", " o", ""]][[""], [" o "]]

เกณฑ์การให้คะแนน

นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์ในแต่ละภาษาจะชนะ


ดังนั้นสำหรับอินพุต[2, 1]ฉันสามารถส่งออกได้[[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]หรือไม่
เดนนิส

@Dennis ถูกต้อง
ETHproductions

2
ตัวคั่นระหว่างใบหน้าต้องมีเครื่องหมายขีดคั่นหรืออาจเป็นค่าที่สอดคล้องกันอื่น ๆ ได้หรือไม่
Jo King

@JoKing ฉันจะบอกว่าคุณสามารถใช้อักขระที่สอดคล้องกันนอกเหนือจากที่คุณใช้อยู่
ETHproductions

[0,5,21,29,31]เป็นตัวเลขที่สำคัญทั้งหมดที่นี่เพื่อนของฉัน
Magic Octopus Urn

คำตอบ:


14

Python 2 , 101 97 92 68 64 ไบต์

lambda*a:[[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]]for n in a]

ลองออนไลน์!

เครดิต


@ Mr.Xcoder อัปเดตอีกครั้ง
Neil

1
การจัดรูปแบบเป็นตัวเลือก การส่งคืนเมทริกซ์คู่หนึ่งจะช่วยประหยัดอย่างน้อย 22 ไบต์
เดนนิส

1
68 ไบต์ที่ไม่มีการจัดรูปแบบ (โปรดสังเกตว่า0และFalseมีค่าเท่ากันใน Python ดังนั้นควรเป็น OK)
Jonathan Allan

@JonathanAllan ฉลาดมากอัปเดตแล้ว
Neil

64 ไบต์ หากคุณต้องทำแลมบ์ดาความเข้าใจในรายการอาจสั้นลง
มนุษย์

12

C (gcc) , 252 242 269 262 241 235 220 ไบต์

ฉันอยู่ในกองล้นสำหรับซ็อกเก็ตในหลามเมื่อสิ่งนี้โผล่ขึ้นมาพูดว่าทำไมไม่ รหัสแรกกอล์ฟดังนั้นฉันไม่แน่ใจทั้งหมดถ้าฉันทำตามกฎ 100% (และถ้าไม่และมีคนต้องการขโมยคุกกี้สุภาษิตของฉันและแก้ไขได้ดังนั้นไม่ว่าจะเป็น) ด้วย 'o' และ '', 255 245 272 265 244 238 228 ไบต์ แทนที่ +48 ด้วย * 79 + 32

#define Q(P,R)(R>>P&1)+48
char a[11];i=0;f(char*c){char b=c[0];a[3]=a[7]='\n';a[5]=Q(0,b);a[1]=a[9]=Q(3,b);a[2]=a[8]=Q(2,b)|a[1];a[0]=a[10]=Q(1,b)|a[2];a[4]=a[6]=a[1]|Q(2,b)&Q(1,b);puts(a);if(i++<1){puts("---");f(c+1);}}

ลองออนไลน์!

วิธีการทำงาน:
ฉันใช้การเลื่อนบิตและระดับบิตและเพื่อค้นหาว่าจุดใดควรจะชัดเจนหรือ pip แล้วชดเชย 0 หรือ 1 ให้เป็นค่า ASCII ที่ถูกต้อง มันเลอะในวันที่ 4 และ 5 ดังนั้นพวกเขาจึงต้องการการแก้ไข เพิ่มจริงสองสามไบต์ สามารถลบหลายไบต์ด้วยการลบ mask และใช้เพียง 1 (doh)

ขอขอบคุณเป็นพิเศษกับ Mr. Xcoder สำหรับ 7 ไบต์ที่น้อยลงโดยการลบ #define
Changes ออก: memset ที่ลบ -21 ไบต์ เปลี่ยน bit ตรรกะเป็น 6, 4, 2 เพื่อพึ่งพา 8 | 4 & 2, 8 | 4, 8 | 4 | 2, ตามลำดับ -6 ไบต์ ลบ newlines พิเศษด้วยการใช้ put แทน printf ซึ่งสั้นกว่าเช่นกัน ทำให้อาร์เรย์สั้นลงเป็น 11 โดยลบการกำหนดค่าพิเศษออก -15 ไบต์ ตอนนี้ฉันคิดว่านั่นเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้


7
ยินดีต้อนรับสู่ PPCG!
Shaggy

สวัสดียินดีต้อนรับสู่ PPCG! คุณสามารถย่อรหัสของคุณให้สั้นลงอีก245ไบต์
Mr. Xcoder

'\n'10จะถูกแทนที่ด้วย (เพราะใน C ชนิดข้อมูลถ่านนอกจากนี้ยังมีจำนวนเต็มชนิดข้อมูล) บางคนอาจจะสามารถถูกแทนที่ด้วยchar int(หรือละเว้นทั้งหมด)
user202729

ลงไปที่ 184 ไบต์ที่นี่แต่นั่นก็ยังมากกว่ากอล์ฟ c ดังนั้น
Andrew Baumher


10

เยลลี่ , 20 ไบต์

“¤o.ƤẸʠṚ’B¬s5ŒBị@s€3

ลองออนไลน์!

เวอร์ชันสำรองเอาต์พุตดั้งเดิม33 32 31 ไบต์

“¤o.ƤẸʠṚ’ṃ⁾ os5ŒBị@s€3K€€Zj€”|Y

ขอบคุณ @ user202729 สำหรับการตีกอล์ฟ 1 ไบต์!

ลองออนไลน์!

มันทำงานอย่างไร

ครั้งแรก“¤o.ƤẸʠṚ’- ตามตัวอักษรจำนวนเต็มในฐาน bijective 250 - กำหนดค่าตอบแทนเพื่อ1086123479729183

จากนั้นแปลงค่าส่งคืนเป็นไบนารี่และรับค่าตรรกะไม่ใช่ของแต่ละหลักทำให้ได้อาร์เรย์

00001001000010110100101011110011101111101111100000

ถัดไปs5ŒBแยกอาร์เรย์ที่เป็นชิ้นความยาว5แล้วตีกลับแต่ละก้อนหันABCDEเข้าabcdedcbaยอม

000010000 001000100 001010100 101000101 101010101

111000111 111010111 111101111 111111111 000000000

ตอนนี้ị@ดึงรายการj thและk thของอาร์เรย์นี้โดยที่j, kเป็นอาร์กิวเมนต์แรกของโปรแกรม โปรดทราบว่าการจัดทำดัชนีนั้นใช้ 1 และโมดูลาร์ดังนั้นองค์ประกอบของศูนย์คือสิบ

ในที่สุดs€3แยกแต่ละอันที่มีความยาวเก้าออกเป็นสามส่วนยาวสามส่วน


1
ยังคงดูเหมือนเวทมนตร์สำหรับฉัน แต่ฉันขอขอบคุณที่พยายามอธิบาย ฉันจะยอมรับความผิดอาจเป็นของฉันเพราะฉันเป็นเพียงผู้พัฒนาเว็บ PHP ที่ต่ำต้อย
ArtisticPhoenix

การ3ใช้0สำหรับ pips ไม่1เหมือนคนอื่น ๆ ทั้งหมด
Jonathan Allan

“¤o.ƤẸʠṚ’ควรทำงาน.
Jonathan Allan

@JanathanAllan ขอบคุณ! ไม่แน่ใจว่ามันเกิดขึ้นได้ยังไง ...
Dennis

8

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

⁽½ÑD<;ḂŒBs3µ€

ลองออนไลน์!

การรวมความคิดของเดนนิสเกี่ยวกับการใช้ŒB(เด้ง) ในคำตอบนี้และการสังเกตของXcaliในคำตอบนี้เพื่อให้ได้ 13 ไบต์


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

(พร้อมพิมพ์สวย)

ตอนนี้ฉันรู้แล้วว่าตัวอักษรของสตริงวุ้นถูกยกเลิกโดยอัตโนมัติ ...

⁽½ÑD<;ḂŒBị⁾o Ks6Yµ€j“¶-----¶

ลองออนไลน์!


เห็นได้ชัดว่าวิธีการของฉัน⁽½ÑDนำไปสู่จำนวนน้อยกว่าคำตอบของ EriktheOutgolfer “¤¦¢¬‘ ที่นี่
user202729

จะเป็นการดีที่สุดหรือไม่ที่จะเรียงลำดับฟังก์ชันใหม่เพื่อให้ 13 ไบต์ (outgolfing Dennis) ขึ้นด้านบนและสามารถมองเห็นได้ง่ายขึ้น?
Zacharý

@ Zacharýวิธีแก้ปัญหาชั่วคราว จะแก้ไขในภายหลัง
user202729

6

PHP 155 , 150 ไบต์

function d($a){foreach($a as$n){$o="---";for($i=0;$x=2**$i,$i<9;++$i)$o.=([0,16,68,84,325,341,365,381,495,511])[$n]&$x?0:' ';echo chunk_split($o,3);}}

มันต้องใช้อาร์เรย์ของจำนวนเต็มเป็นอินพุต สำหรับการทดสอบ:

d([1,2]);

echo "=========\n";

d([0,1,2,3,4,5,6,7,8,9]);

รูปแบบเอาท์พุท:

---

 0 

---
  0

0  

ตรวจสอบการถ่ายทอดสดที่นี่

โซลูชันของฉัน

สำหรับวิธีการแก้ปัญหาของฉันฉันใช้เมทริกซ์ที่ประกอบด้วยตัวเลขจำนวนบิต (พลังของ 2) มันสามารถมองเห็นได้เช่นนี้

 1  |  2  |  4
 8  | 16  | 32
 64 | 128 | 256

จากนั้นอาร์เรย์หน่วยเก็บข้อมูลประกอบด้วยตำแหน่งบิตสำหรับ pips ของแต่ละโดมิโนที่สัมพันธ์กันโดยดัชนีหมายเลข:

[0,16,68,84,325,341,365,381,495,511]

ดังนั้นเพียงแค่ชี้แจง:

  • ตัวอย่าง 0: ดัชนี0หรือค่า0จะเป็นโดมิโนเปล่าซึ่งเป็นเท็จเสมอ
  • ตัวอย่างที่ 1: ดัชนี1หรือค่าจะเป็นหนึ่งในจำนวนโดมิโนและเมทริกซ์ที่อยู่ในศูนย์1616
  • ตัวอย่าง 2: ดัชนี2หรือค่า68จะเป็นจำนวนโดมิโนอันดับสองและในเมทริกซ์ที่อยู่ด้านบนขวา4และล่างซ้าย64 หรือ4|64
  • ตัวอย่างที่ 3: ดัชนี5หรือค่า341จะเป็นเลขห้าตัวโดมิโนและในเมทริกซ์นั่นคือ1|4|16|64|256
  • ตัวอย่างที่ 4: ดัชนี9หรือค่า511จะเป็นจำนวนโดมิโนที่เก้าและในเมทริกซ์เป็นการรวมกันของบิตทั้งหมด

หลังจากที่มีการจัดตั้งขึ้นเป็นเรื่องที่ค่อนข้างง่ายของบ่วงสำหรับ 9 ตำแหน่งในเมทริกซ์และการตั้งค่า$xไป2กับอำนาจของ$i

for($i=0;$x=2**$i,$i<9;++$i)

จากนั้นเราก็ทำอะไรสักหน่อยและ&ในขณะที่เราย้ำผ่านจุดเหล่านั้น ดังนั้นสำหรับตัวอย่างสาเกจะใช้ตัวอย่าง 2 จากด้านบนและฉันจะใช้xช่องว่างแทนเพื่อความชัดเจนของภาพ:

  • การวนซ้ำ 1 68 & 1 ? 0 : 'x'ซึ่งส่งผลให้'x'
  • ซ้ำ 2 68 & 2 ? 0 : 'x'ซึ่งส่งผลให้'x'
  • ซ้ำ 3 68 & 4 ? 0 : 'x'ซึ่งส่งผลให้0
  • ซ้ำ 4 68 & 8 ? 0 : 'x'ซึ่งส่งผลให้'x'
  • ซ้ำ 5 68 & 16 ? 0 : 'x'ซึ่งส่งผลให้'x'
  • ซ้ำ 6 68 & 32 ? 0 : 'x'ซึ่งส่งผลให้'x'
  • การ68 & 64 ? 0 : 'x'คำนวณซ้ำ 7 ซึ่งส่งผลให้0
  • การทำซ้ำ 8 68 & 128 ? 0 : 'x'ซึ่งส่งผลให้'x'
  • การทำซ้ำ 9 68 & 256 ? 0 : 'x'ซึ่งส่งผลให้'x'

เมื่อลูปเสร็จสมบูรณ์เราจะปิดท้ายด้วยสตริง"xx0xxx0xx"นี้

จากนั้นเราเพิ่มชายแดน"---xx0xxx0xx"กับมัน(ที่จริงผมเริ่มต้นด้วยชายแดน แต่อะไรก็ตาม)

และในที่สุดเราก็chunk_split ()มันเป็น 3 สำหรับ:

---
xx0
xxx
0xx

อย่าลังเลที่จะแจ้งให้เราทราบว่าคุณคิดอย่างไร


คุณสามารถย่อให้สั้นลงได้อีกโดยใช้โอเปอเรเตอร์ exponentiation ที่**แนะนำใน PHP 5.6 แทนpow() php.net/manual/en/language.operators.arithmetic.php
Daniel

@Daniel - ขอบคุณที่บันทึกไว้ 5 ไบต์! ฉันไม่ทราบว่าพวกเขาเสริมว่าฉันมักจะพยายามใช้^แต่มัน bitters XOR ... ฮ่า ๆ
ArtisticPhoenix

ฉันไม่คิดว่าคุณได้รับอนุญาตให้พิมพ์เส้นขอบพิเศษ
12Me21

แสดงให้ฉันดูว่ามันอยู่ที่ไหนในที่ห่างไกลจากคำแนะนำใน OP
ArtisticPhoenix

$argvผมคิดว่าเรื่องนี้จะเป็นปฏิบัติการที่สั้นกว่าบน ฟังก์ชั่นค่าใช้จ่ายใน PHP มักจะ 13 ไบต์
ติตัส

6

Perl 5 , 107 76 70 + 1 ( -a) = 70 ไบต์

Perl 5 , 70 ไบต์

$,="
---
";say map{$_='351
7 7
153'=~s/\d/$_>$&||0/ger=~s/ /$_%2/er}<>

ลองออนไลน์!

ใช้ 0 สำหรับช่องว่างและ 1 สำหรับ pips วิธีการง่ายๆ: สังเกตว่าเมื่อตัวเลขเพิ่มขึ้นเมื่อ pip เป็น "เปิด" จะไม่มีการ "ปิด" ยกเว้นค่าที่อยู่ตรงกลาง ในตำแหน่งตรงกลางมันจะเปิดสำหรับหมายเลขคี่ทั้งหมด ดังนั้นสำหรับแต่ละตำแหน่งมันเป็นเรื่องง่ายในการตรวจสอบว่าตัวเลขนั้นมากกว่าหลักสุดท้ายที่มันปิดอยู่หรือไม่ ||0สร้างผลผลิตเมื่อเงื่อนไขเป็นเท็จ ใน Perl เท็จเป็นundefผลลัพธ์ที่เป็นโมฆะ


4

JavaScript (ES6), 79 78 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @ETHproductions

รับอินพุตในรูปแบบ currying (a)(b)และส่งออก ASCII โดมิโนแนวตั้ง

a=>b=>(g=n=>`351
707
153`.replace(/./g,d=>' o'[(+d?n>d:n)&1]))(a)+`
---
`+g(b)

การสาธิต


รุ่นแนวนอน80 79 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @ETHproductions

รับอินพุตเป็นอาร์เรย์จำนวนเต็ม 2 และส่งออก ASCII โดมิโนแนวนอน

a=>`240|351
686|797
042|153`.replace(/\d/g,d=>' o'[(d<8?(x=a[d&1])>(d|1):x)&1])

การสาธิต


ดีมากคล้ายกับสิ่งที่ฉันมี บันทึกไบต์ด้วยn>d|0หรือ(+d?n>d:n)&1
ETHproductions

4

APL (Dyalog) 25 ไบต์

2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨

ลองออนไลน์!

-2 ขอบคุณที่NGN

รูปแบบผลลัพธ์แปลก ๆ เล็กน้อยฟังก์ชั่นนี้จะคืนค่าอาร์เรย์ที่มีสองรูปร่าง - 3,3 อาร์เรย์แต่ละชุดประกอบด้วย 0 วินาทีและ 1 วินาที


เขียนใหม่สำหรับ -2 ไบต์:2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
ngn

@ngn ขอบคุณนั่นคือฉลาด: p
Erik the Outgolfer


2

Javascript (ES6), 87 ไบต์

a=>b=>[(s=n=>[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]].map(c=>c.map(b=>+b)))(a),s(b)]

f=a=>b=>[(s=n=>[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]].map(c=>c.map(b=>+b)))(a),s(b)]
<div oninput="o.innerText=JSON.stringify(f(a.value)(b.value))"><input id=a type=number min=1 max=9 value=1><input id=b type=number min=1 max=9 value=1><pre id=o>



2

Haskell - 88 ตัวอักษร

map$zipWith(zipWith($))[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]].repeat.repeat

ใช้รายการตัวเลขสองตัวที่ระบุใบหน้าส่งกลับรายการของรายการบูล ไม่สั้น แต่ฉันคิดว่าวิธีแก้ปัญหาที่น่าสนใจ


คุณสามารถใช้mapแทนrepeatและzipWith: map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)ลองออนไลน์!
Laikoni

Non-pointfree ช่วยเพิ่มสองไบต์: ลองออนไลน์!
Laikoni

2

Pip , 32 27 24 21 ไบต์

-3 ไบต์ขอบคุณ @DLosc

FcgP[Yc>_M3517c%2RVy]

ลองออนไลน์!

คำอธิบาย:

F                      For each
 c                       character $c
  g                      in the list of inputs:
   P                     Print
    [               ]      an array consisting of
                             an array of bits representing whether
      c>                       $c is greater than
        _M                       each of
          3517                     3, 5, 1, and 7
     Y                       (call this bit array $y),
              c%2            $c mod 2,
                 RV          and the reverse
                   y           of $y.

1
ขอแสดงความยินดีกับการชนะรางวัล Pip ตอนนี้ระยะเวลาเงินรางวัลที่มีมากกว่าผมสามารถบอกคุณ: บันทึก 3 ไบต์โดยทำแผนที่เพื่อเกลาแทนของรายการ3517 [3 5o7];)
DLosc

1

> <> , 57 + 3 = 60 ไบต์

>{:3)$:5)$:1)$:7)$:2%$\ao \
\?%cl999)3$)5:$)1:$)7:/nnn<rp

ลองออนไลน์ เอาต์พุตเป็น domino แนวตั้งที่มี 1s สำหรับจุด, 0s สำหรับช่องว่างและ 9s สำหรับตัวคั่นดังนี้:

001
000
100
999
111
111
111

ในทางเทคนิคสามารถขยายได้ถึง 12 ค่าที่ป้อนเข้า

เวอร์ชั่นเก่า:

> <> , 76 + 3 = 79 ไบต์

>{:3)$:5)$:1)$a$:7)$:2%$:7)\&?o~?!n\
\?(*a3la"---"a)3$)5:$)1:$a$/$&:)9::<r~p

ลองออนไลน์ ส่งออกเป็นโดมิโนแนวตั้งที่มี 1s สำหรับจุดและ 0s สำหรับช่องว่างเช่น:

001
000
100
---
111
111
111

1

ถ่าน , 46 44 43 39 ไบต์

EE²℅§@APQTUVW^_NE⪪E⁹§ o÷ιX²↔⁻⁴λ³⪫λ M⁵↑⁵

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

EE²℅§@APQTUVW^_N

อ่านจำนวนเต็มสองจำนวนและแมปไว้ในตารางการค้นหา จากนั้นแผนที่เหนือผลลัพธ์ (สิ่งนี้จะบันทึกผลลัพธ์ในชั่วคราว)

  E⁹                Loop `l` (!) from 0 to 8
            ⁻⁴λ     Subtract from 4
           ↔        Absolute value
         X²         Power of 2
       ÷ι           Divide into the looked-up value `i`
    § o             Convert to space or o
 ⪪             ³    Split into (3) groups of 3
E                   Map over each group
                ⪫λ  Join the 3 characters with spaces

ผลลัพธ์จะถูกพิมพ์โดยปริยายบนบรรทัดแยกโดยมีบรรทัดว่างพิเศษระหว่างใบหน้าแต่ละอันเนื่องจากผลลัพธ์ซ้อนกัน

M⁵↑⁵

เลื่อนขึ้นและวาดเส้นแบ่งระหว่างใบหน้า

เวอร์ชันแนวนอน 43- ไบต์ก่อนหน้า:

↶P³M⁷←FE²℅§@APQTUVW^_NF⁹«F¬﹪κ³⸿⸿§ o÷ιX²↔⁻⁴κ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

ทำงานในแนวตั้ง

P³

พิมพ์เส้นแบ่ง

M⁷←

ตำแหน่งถึงจุดเริ่มต้นของใบหน้าแรก

FE²℅§@APQTUVW^_N

อ่านจำนวนเต็มสองจำนวนและแมปไว้ในตารางการค้นหา

F⁹«

เตรียมส่งออกสูงสุด 9 oวิ

F¬﹪κ³⸿⸿

แต่เริ่มคอลัมน์ใหม่ทุก ๆ สามoวินาที

§ o÷ιX²↔⁻⁴κ

แปลง 5 บิตต่ำกว่าของรหัส ASCII ให้เป็นเลขฐานสองจากนั้นทำมิรเรอร์เอาต์พุตสำหรับส่วนที่เหลืออีก 4 oวินาที


รูปแบบผลลัพธ์ค่อนข้างอิสระซึ่งควรบันทึกสองสามไบต์
เดนนิส

1
คาถานี้คืออะไร
ArtisticPhoenix

@Dennis จริง ๆ แล้วรูปแบบเอาต์พุตดั้งเดิมนั้นมีประโยชน์มากที่สุดเพราะมันทำให้ฉันมีพื้นที่ว่างในการวาดเส้นแบ่ง
Neil

โอ้พระเจ้ามีสองนีล
Zacharý

2
@ Zachary จริงตามหน้าผู้ใช้มีแปดหรือ 40 ถ้าคุณรวมถึงคนที่มีชื่อประกอบด้วยนี ...
นีล

1

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

>⁽¤xb8¤;ḂŒḄs3
Ç€

ลองออนไลน์!

ใช้กลยุทธ์และการบีบอัดฐานของนีลเพื่อสร้างคุณค่า เอาต์พุตเป็นอาร์เรย์ไบนารี ใช้รายการเป็นอินพุต

คำอธิบาย:

Ç€
 € for €ach input,
Ç  execute the previous line.

>⁽¤xb8¤;ḂŒḄs3
 ⁽¤xb8¤       the array [3, 5, 1, 7]
>             1 if the input is greater than each element, 0 otherwise
       ;Ḃ     append input % 2
         ŒḄ   bounce array
           s3 split into chunks of 3

0

APL + WIN, 49 47 ไบต์

4⌽'|',⌽⍉6 3⍴,⍉(9⍴2)⊤(+\∊0 241 52 24 114,¨16)[⎕]

แก้ไขตามความเห็นของอดัมขอบคุณที่ทำงานด้วยดัชนีแหล่งกำเนิดศูนย์

แสดงพร้อมต์สำหรับอินพุตหน้าจอเป็นเวกเตอร์ของจำนวนเต็มหนึ่งค่าสำหรับแต่ละหน้า

เอาท์พุทเป็นรูปแบบ:

1 1 1 | 0 0 1    0 0 0 | 1 0 1
0 1 0 | 0 1 0    0 0 0 | 0 1 0
1 1 1 | 1 0 0    0 0 0 | 1 0 1

สำหรับอินพุต7 3และ0 5

คำอธิบาย:

(+\∊0 241 52 24 114,¨16) create a vector of integers whose binaries
                         represent the dots on the domino faces

[1+⎕] take input integers as indices to select from above vector

⍉6 3⍴,⍉(9⍴2)⊤ convert selected integers to a 9x2 binary matrix and reshape
              to match the orientation of the domino faces

4⌽'|',⌽ rotate, concatenate centre line markers and rotate again to centre 

ทำไมไม่ใช้⎕IO←0เพื่อช่วยตัวเอง1+?
อดัม

@ อดัมทำไมไม่จริง - สันหลังยาว;)
เกรแฮม

0

Python 2 , 121 ไบต์

lambda x,y,d="001155777702020202570044557777":[("%03d"%int(bin(int(o))[2:]),"---")[o=="3"]for o in d[x::10]+"3"+d[y::10]]

ลองออนไลน์!

ลดเหลือ 121 ด้วยแลมบ์ดาหลังจากกลับไปอ่านกฎใหม่อีกครั้ง ตอนนี้แสดงรายการของบรรทัด

รุ่นก่อนหน้านี้ที่มีรูปแบบผลลัพธ์ที่ดี:

Python 2 , 156 153 147 141 bytes

x,y=input()
d="001155777702020202570044557777"
a=["%03d"%int(bin(int(o))[2:])for o in d[x::10]+d[y::10]]
for x in a[:3]+["---"]+a[3:]:print x

ลองออนไลน์!

-3 ด้วยขอบคุณ @NieDzejkob

รับอินพุตเป็นจำนวนเต็ม 2 และเอาต์พุตในรูปแบบแนวตั้งที่มี 0 = ช่องว่างและ 1 = จุด



0

Pyt , 220 154 ไบต์

ความพยายามครั้งที่สอง (154 ไบต์)

46281ᴇ8264áĐ9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ⇹9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ5⑴9△*Ƈǰ⇹Ƈǰ64ȘƇǰ6↔ŕ↔ŕ↔

คำอธิบาย:

46281ᴇ8264áĐ                                    Pattern matching for every cell but the middle
9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș                              Non-pip characters
←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ⇹     Make top cell
9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș                              Non-pip characters
←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ      Make bottom cell
5⑴9△*Ƈǰ⇹Ƈǰ64ȘƇǰ6↔ŕ↔ŕ↔                          Make boundary and combine



ความพยายามครั้งแรก (220 ไบต์):

2`↔←Đ4≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ6≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ2≥Đ6²⁺3**⇹¬5«+1ᴇ⇹3ȘĐ8≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ2%Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ8≥Đ6²⁺3**⇹¬5«+1ᴇ⇹3ȘĐ2≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ6≥Đ6²⁺3**⇹¬5«+2⁵⇹3Ș4≥Đ6²⁺3**⇹¬5«+1ᴇ9△ĐĐĐĐ1ᴇ↔⁻łŕ↔ŕŕŕŕŕŕáƇǰ

คำอธิบาย:

2                           Push 2 (this is how many 'cells' to make)
`     ... ł                 While the top of the stack is not zero, loop
↔                           Flip the stack (useless at the beginning, undoes the flip at the end of the loop)
←Đ4≥Đ6²⁺3**⇹¬5«+            Set top-left pip
2⁵⇹3Ș                       Space
Đ6≥Đ6²⁺3**⇹¬5«+             Set top-middle pip
2⁵⇹3Ș                       Space
Đ2≥Đ6²⁺3**⇹¬5«+             Set top-right pip
1ᴇ⇹3Ș                       New line
Đ8≥Đ6²⁺3**⇹¬5«+             Set middle-left pip
2⁵⇹3Ș                       Space
Đ2%Đ6²⁺3**⇹¬5«+             Set center pip
2⁵⇹3Ș                       Space
Đ8≥Đ6²⁺3**⇹¬5«+             Set middle-right pip
1ᴇ⇹3Ș                       New line
Đ2≥Đ6²⁺3**⇹¬5«+             Set bottom-left pip
2⁵⇹3Ș                       Space
Đ6≥Đ6²⁺3**⇹¬5«+             Set bottom-middle pip
2⁵⇹3Ș                       Space
4≥Đ6²⁺3**⇹¬5«+              Set bottom-right pip
1ᴇ                          New line
9△ĐĐĐĐ                      Add 5 dashes
1ᴇ                          New line
↔⁻ł                         Decrement counter (if >0, loop; otherwise, exit loop)
ŕ↔ŕŕŕŕŕŕ                    Remove all unnecessary items on the stack
áƇǰ                         Push stack to an array, get characters at unicode codepoints given by values in the array, join characters with empty string


ลองออนไลน์!


0

05AB1E , 34 ไบต์

•ΩõIº•R2ô¹2÷è¹È-bDg5s-ú.∞3ô»TR„ o‡

ลองออนไลน์!


นี่เป็นเรื่องยากเพราะ 05AB1E มีช่องว่างภายในที่ไม่ดี


คำอธิบายพื้นฐาน:

  • มี 4 รูปแบบที่สำคัญที่นี่ซึ่งมี 2, 4, 6 และ 8
  • 3,5,7 และ 9 เป็นรูปแบบอื่นบวก 1
  • 1 ไม่มีนัยสำคัญเนื่องจากความสมมาตรหากอินพุตยังคงลบ 1 เพื่อสลับบิตกลาง
  • การสลับ LSB ช่วยให้บิตกลางพลิกเนื่องจากการมิเรอร์

0

SmileBASIC, 92 69 ไบต์

INPUT N,M
DEF Q?N>3;N>5;N>1?N>7;1AND N;N>7?N>1;N>5;N>3
END
Q?777N=M
Q

ตัวอย่าง:

? 7,2
111
010
111
777
001
000
100

นี่คือสิ่งที่เกิดขึ้นเมื่อกฎของคุณไม่เข้มงวดพอ


0

FALSE, 116 80 78 70 69 66 63 61 59 58 ไบต์

[$3[>_$.\$]$p:!5p;!1p;!"
"7p;!%1&.."
"..."
"]$s:!"---
"s;!

ยังคงทำงานกับสิ่งนี้ ...


0

ชิป ,142 135 ไบต์

! CvDvB
>v-]-x.
|Z-]-]e
|Z]xe|
|ZR(-'
|Zx.AD
|Zxx]x.
|Zx^-]e
|Z<,(-.
|Zx]xe|
|Zx-]-]e
|Zx-]-x'
|Z<C^D^B
|>x~s
|Zx.
|Zx<
|Zxb
|Z+^~f
`zd

ลองออนไลน์!

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

แต่ละตัวZ(หรือz) สอดคล้องกับตัวละครหนึ่งตัวซึ่งอยู่ในตำแหน่งที่จะยิงตามลำดับจากบนลงล่าง ตัวพิมพ์ใหญ่A, BและC, Dสอดคล้องกับอินพุตสี่บิตต่ำ (นั่นคือทั้งหมดที่เราดูดังนั้น"34" == "CD" == "st" ...) พิมพ์เล็กb, d, e, fสอดคล้องกับบิตต่างๆของการส่งออก

สามารถสร้างโดมิโนที่มีความยาวไม่ จำกัด ด้วยเช่นกัน ลองให้0123456789เป็นอินพุต


0

PHP, 116 ไบต์

while($i<6)echo strtr(sprintf("%03b",[_011557777,_202020267,_044557777][$i/2][$argv[$i%2+1]]),10,"o "),"|
"[$i++%2];

ต้องการ PHP 5.5 หรือใหม่กว่า ทำงานด้วย-nrหรือลองออนไลน์


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