เขียนโปรแกรมที่สั้นที่สุดซึ่งจะนำสตริงตัวเลข ( ความยาวไม่เกิน 20 ตัวขึ้นไป) เป็นอินพุตและแสดงผลลัพธ์โดยใช้หมายเลขสไตล์นาฬิกาดิจิตอลมาตรฐาน เช่นอินพุท 81 โซลูชันที่มี ascii จะให้:
_
|_| |
|_| |
เอาท์พุทกราฟิกยังเป็นที่ยอมรับถ้ามันช่วย
เขียนโปรแกรมที่สั้นที่สุดซึ่งจะนำสตริงตัวเลข ( ความยาวไม่เกิน 20 ตัวขึ้นไป) เป็นอินพุตและแสดงผลลัพธ์โดยใช้หมายเลขสไตล์นาฬิกาดิจิตอลมาตรฐาน เช่นอินพุท 81 โซลูชันที่มี ascii จะให้:
_
|_| |
|_| |
เอาท์พุทกราฟิกยังเป็นที่ยอมรับถ้ามันช่วย
คำตอบ:
{3 3⍴' _|'[1+⍵⊤⍨9⍴3]}¨⎕UCS'ા8धगɯેࣃଏ૽'[1+⍎¨⍞]
สตริงા8धगɯેࣃଏ૽
เป็นอักขระ Unicode 2750 56 2343 2327 623 2759 2777 2243 2831 2813
(อย่างไรก็ตามคุณควรจะสามารถคัดลอกและวางได้) พวกเขาเข้ารหัสตัวเลข โปรแกรมอ่านบรรทัดจากแป้นพิมพ์
คำอธิบาย:
1+⍎¨⍞
: อ่านบรรทัดจากแป้นพิมพ์แยกอักขระแต่ละตัวเป็นตัวเลขแล้วเพิ่ม 1 ไปยังแต่ละหมายเลข (อาร์เรย์ APL เป็นแบบ 1 ตามค่าเริ่มต้น)⎕UCS'ા8धगɯેࣃଏ૽'[
... ]
: เลือกตัวละครที่เป็นตัวเลขของตัวเลขที่คุณป้อนและค้นหาค่า Unicode{
... }¨
: สำหรับแต่ละค่าเหล่านี้ให้ทำ:1+⍵⊤⍨9⍴3
: รับ 9 ฐาน -3 หลักแรกจากค่าตามที่แสดงในฐาน -3 และเพิ่ม 1 (เพราะอาร์เรย์เป็นฐาน 1)' _|'[
... ]
: เลือกช่องว่างเส้นแนวนอนหรือเส้นแนวตั้งขึ้นอยู่กับตัวเลขเหล่านี้3 3⍴
: จัดรูปแบบเป็นกล่อง 3-by-3ไม่ใช่ภาษาที่เหมาะสำหรับการเล่นกอล์ฟ ... แต่ไม่ว่าอย่างไรฉันพยายามรักษาขนาดรหัสให้เล็กที่สุดเท่าที่จะทำได้ - เป็นความท้าทายที่แตกต่างจากภาษา“ ปกติ” นี่คือ1555 ตัวอักษรหรือ3110 ไบต์ (หากเข้ารหัสเป็น UTF-16; UTF-8 ใหญ่กว่า)
นี่คือภาพหน้าจอของโปรแกรมที่กำลังทำงาน มันใช้งานได้จริง :)
เนื่องจากสิ่งนี้ดูน่าเกลียดใน StackExchange เนื่องจากระยะห่างบรรทัดเพิ่มเติมให้ลองเรียกใช้รหัสต่อไปนี้ในคอนโซล JavaScript ของเบราว์เซอร์ของคุณเพื่อแก้ไขปัญหา: $('pre').css('line-height',1)
╓─╖ ╔╗┌─╖ ┌─╖
║ʜ║ ║╟┤↔╟┐ ┌┤‼╟┐
╙┬╜ ╚╝╘═╝│ │╘╤╝│
╔═╗ ┌┴────┐ │┌┴╖ ┌┴╖
║0║ ┌┴─┐ ┌┴─┐└┤ʜ╟─┤·╟┐
╚╤╝┌┴╖┌┴╖┌┴╖┌┴╖╘╤╝ ╘╤╝│
┌┘┌┤·╟┤ɦ╟┤·╟┤?╟ │ ┌┴╖│
│ │╘╤╝╘╤╝╘╤╝╘╤╝ └──┤‼╟┘
│┌┴╖│ ┌┴╖┌┘╔═╧╗ ╘═╝
└┤?╟┘┌┤?╟┘┌╢10║ ┌─────────┐
╘╤╝ │╘╤╝┌┘╚══╝ ┌─┬┘╔══╗┌──╖┌┴╖ ╓─╖
┘ └───┘╔════╗│┌┴┐║21╟┤>>╟┤·╟┐║ɦ║
╔════════╗║1005╟┘└┬┘╚══╝╘═╤╝╘╤╝│╙┬╜ ┌─┐
║14073768║╚════╝ ┌┴╖ ┌─╖ ┌┴╖┌┴╖└─┴─────────┘┌┴╖
║7584800 ╟───────┤?╟─┤‼╟─┤ʜ╟┤·╟─────────────┤·╟┐╔═══════╗╔══╗
╚════════╝ ╘╤╝ ╘╤╝ ╘╤╝╘╤╝ ╔══╗┌─╖┌┐╘╤╝│║2097151║║21╟┐
╔═══════════════╗│ ┘ │ │ ║48╟┤−╟┤├─┤┌┘╚══╤════╝╚══╝│
║140737555464224╟┘ ┌────┘┌┬┘ ╚══╝╘╤╝└┘┌┘│╓─╖ │┌┐┌─╖┌─╖┌┴─╖
╚═══════════════╝ │ ┌───┘└─────────┐┌┴─╖ │┌┘║↔║ ├┤├┤‼╟┤↔╟┤>>║
┌────────────┐┌────┐┌┴╖│┌────────────┐├┤<<║ ││ ╙┬╜┌┘└┘╘╤╝╘═╝╘╤═╝
│ ╔══╗╔═══╗├┘╓─╖ └┤·╟┘│ ╔══╗╔═══╗├┘╘╤═╝ │└─┐└─┤╔═╗┌┴╖ ┌──┘
│ ║95║║892║│┌╢‡╟┐ ╘╤╝ │ ║95║║877║│ ┌┘╔══╧═╗│ │║0╟┤?╟┬┘
│ ╚═╤╝╚═╤═╝││╙─╜│ │ │ ╚═╤╝╚═╤═╝│╔╧╗║2097║│ │╚═╝╘╤╝│
│╔══╗┌┴╖┌┐│ ││┌─╖│ ┌┴╖ │╔══╗┌┴╖┌┐│ │║1║║151 ║│ └──────┘
│║32╟┤?╟┤├┤ │└┤‼╟┘┌┤‡║ │║32╟┤?╟┤├┤ │╚═╝╚════╝│
│╚══╝╘╤╝└┘└──┴┐╘╤╝ │╘╤╝ │╚╤═╝╘╤╝└┘└──┴┐ ┌─┘
│ ┌┴╖ ┌┴╖┌─╖│ │ ┌┴╖│ ┌┴╖ ┌┴╖ ┌─╖┌┴╖
│ │‼╟─────┤·╟┤‼╟┘ │┌┤·╟┘ │‼╟─────┤·╟─┤‼╟┤‡║
└┐┌┐ ╘╤╝ ╘╤╝╘╤╝ ││╘╤╝┌┐ ╘╤╝ ╘╤╝ ╘╤╝╘╤╝
├┤├┐┌┴╖╔══╗ └──┐┌┐ │└┐├─┤├┐┌┴╖╔══╗ ├──┐└ │
│└┘└┤?╟╢32║╔═══╗├┤│┌┴╖││ └┘└┤?╟╢32║╔═╧═╗│┌┐┌┴╖╔══╗
╔╧══╗╘╤╝╚══╝║881╟┘│├┤?╟┘│ ╘╤╝╚══╝║325║└┤├┤?╟╢32║
║927║╔╧══╗ ╚═══╝ └┘╘╤╝╔╧═══╗╔╧══╗ ╚═══╝ └┘╘╤╝╚══╝
╚═══╝║124╟───────────┘ ║1019║║124╟───────────┘
╚═══╝ ╚════╝╚═══╝
มันอาจจะเล็กกว่านี้หากฉันไม่ได้ทำผิดพลาดเนื่องจากการส่งออกกลับไปข้างหน้า ฉันแก้ไขโดยการเพิ่มฟังก์ชั่นพิเศษเพื่อย้อนกลับอินพุต ไม่เช่นนั้นฉันอาจจะต้องเขียนมันใหม่ทั้งหมด
ฉันยังทำผิดพลาดอีกครั้ง (การสลับตัวถูกดำเนินการในการเรียกสองครั้ง‼
) ซึ่งทำให้จำเป็นต้องประกาศ‡
ฟังก์ชั่นพิเศษแต่อันนี้มีขนาดเล็กมากมันพอดีกับในฟังก์ชั่นหลักและจึงไม่เพิ่มอักขระใด ๆ !
import wx, wx.gizmos as g
class T(wx.Frame):
def __init__(_):
wx.Frame.__init__(_, None, size = (800, 60))
l = g.LEDNumberCtrl(_, -1)
l.Value = raw_input()
class M(wx.App):
def OnInit(_):
T().Show()
return 1
M().MainLoop()
ทดสอบ
echo -n 81 | python codegolf-997-wx.py
PS: ไม่ใช่รายการที่จริงจัง แต่ดูเหมือนว่าเอาต์พุตกราฟิกก็เป็นที่ยอมรับดังนั้นฉันจึงลองดู :-)
"placeholder text for userscript which counts chars ";
xxd
: (ใช้xxd -r
เพื่อเปลี่ยนกลับ)
0000000: 332c 7b3a 533b 2e7b 3438 2d22 5e70 285d 3,{:S;.{48-"^p(]
0000010: 7025 d3c4 4ab1 7d4a b8dc 4469 ce41 2222 p%..J.}J..Di.A""
0000020: f303 227b 6261 7365 7d2f 3330 2f53 3d33 .."{base}/30/S=3
0000030: 2f3d 7b22 5f20 7c22 3d7d 257d 256e 407d /={"_ |"=}%}%n@}
0000040: 2f3b /;
นี้ต่อไปนี้มากที่สุดของคำตอบอื่น ๆ ในการที่มีช่องว่างระหว่างตัวเลขและช่องว่างต่อท้ายไม่ถูกเก็บไว้ใน. พื้นที่ระหว่างตัวเลขที่สามารถเพิ่มได้อย่างง่ายดายด้วยก่อน1+
{"_ |"=}%
บรรจุลงในหมายเลขฐาน 3 จากนั้นเป็นฐาน 243 ลงในสตริง
[ อัพเดต:ใช้การเข้ารหัส Unicode (1 ไบต์):
,./(10 3 3$((90$3)#:256#.24x-~3&u:'%ė¨ÔW/~º»sy¡ăì<t÷²'){' _|'){~"./.Y
NB. utf characters are: 37 279 168 212 87 47 126 186 187 115 121 161 259 236 60 116 247 178
ทำงานเหมือนก่อน:]
,./(10 3 3$((90$3)#:1219424106940570763878862820444729939648410x){' _|'){~"./. '58321'
_ _ _ _
|_ |_| _| _| |
_||_| _||_ |
กุญแจอยู่ในการเข้ารหัสของตัวเลขเป็นจำนวนเต็มฐาน 3 ศูนย์ตัวอย่างเช่น:
:
_
| |
|_|
หรือ' _ | ||_|'
ซึ่งกลายเป็น 010202212 3 = 2750
http://codegolf.stackexchange.com/q/1000
)
i = IntegerDigits; t = Thread; r = Rule;
z@n_ := Row@i@n /. t[r[Range[0, 9], Grid[Partition[ReplacePart[Characters@" _ |_||_|",
t[r[#, ""]]], 3], Spacings -> 0] &
/@ (i /@ {5, 24578, 49, 47, 278, 67, 6, 4578, , 78})]]
การใช้
z@1234567890
148 145
เนื่องจาก JavaScript ไม่มีอินพุต / เอาต์พุตมาตรฐานจึงถูกเขียนเป็นฟังก์ชันที่รับสตริงและส่งคืนเอาต์พุตเป็นสตริง
function r(n){for(i=o="",b=" |_\n|",L=n.length;i<3*L;)o+=b[(c="ǪĠòƲĸƚǚĢǺƺ".charCodeAt(n[i%L])>>(i++/L|0)*3)&1]+b[c&2]+b[c&4]+b[i%L?0:3];return o}
เว้นระยะ:
function r(n)
{
for (i = o = "", b = " |_\n|", L = n.length; i < 3*L; )
o += b [ (c = "ǪĠòƲĸƚǚĢǺƺ".charCodeAt(n[i%L]) >> (i++/L|0)*3) & 1 ] +
b [ c&2 ] +
b [ c&4 ] +
b [ i%L ? 0 : 3 ]; // space or newline
return o
}
นี่คือวิธีการทำงาน:
สามบิตแรกสำหรับแถวแรกและอื่น ๆ
ในแต่ละกลุ่มของสามบิตตัวแรกระบุว่าอักขระตัวแรกคือ|
หรือเว้นวรรคตัวที่สองไม่ว่าจะเป็น_
หรือเว้นวรรคและตัวที่สามอีกครั้ง|
หรือเว้นวรรค
ทั้งสามบิตจะถูกดึงมาเป็นc&1
, c&2
และซึ่งถูกนำมาใช้เป็นดัชนีลงในสตริงc&4
b
ที่การวนซ้ำแต่ละครั้งi%L
คือ“ x-Coordinate” คือตัวเลขภายในอินพุตn
ที่การวนซ้ำแต่ละครั้งi/L
คือ“ y-Coordinate” คือแถว แต่เราต้อง|0
ทำให้มันเป็นจำนวนเต็ม
สุดท้ายช่องว่างระหว่างตัวเลขและการขึ้นบรรทัดใหม่ระหว่างบรรทัดที่มียังเรียกโดยการจัดทำดัชนีลงไปb
อีกครั้งโดยใช้อักขระช่องว่างและตำแหน่งที่ไม่ได้ใช้อย่างอื่นที่ 3 ในสตริงที่! :)
' _ _ _ _ _ _ _ _
| | | _| _||_||_ |_ ||_||_|
|_| ||_ _| | _||_| ||_| _|'.lines{|l|puts x.chars.map{|i|l[i.to_i*3,3]}*''}
x
คาดว่าการป้อนข้อมูลในตัวแปร ตัวอย่าง:
x = '321'
# _ _
# _| _| |
# _||_ |
x = '42'
# _
# |_| _|
# ||_
$i="$input"[0..99]
'☺ ☺☺ ☺☺☺☺☺','♠☻♥♥♦♣♣☻♦♦','♦☻♣♥☻♥♦☻♦♥'|%{$c=$_
""+($i|%{('···0·_·0··|0·_|0|_|0|_·0|·|'-split0)[$c[$_-48]]})}
เนื่องจากสตริงมีอักขระที่ไม่พึงประสงค์ในการเขียนจึงเป็น hexdump เพื่อความสะดวกของคุณ:
000: 24 69 3D 22 24 69 6E 70 │ 75 74 22 5B 30 2E 2E 39 $i="$input"[0..9
010: 39 5D 0A 27 01 00 01 01 │ 00 01 01 01 01 01 27 2C 9]◙'☺ ☺☺ ☺☺☺☺☺',
020: 27 06 02 03 03 04 05 05 │ 02 04 04 27 2C 27 04 02 '♠☻♥♥♦♣♣☻♦♦','♦☻
030: 05 03 02 03 04 02 04 03 │ 27 7C 25 7B 24 63 3D 24 ♣♥☻♥♦☻♦♥'|%{$c=$
040: 5F 0A 22 22 2B 28 24 69 │ 7C 25 7B 28 27 20 20 20 _◙""+($i|%{('
050: 30 20 5F 20 30 20 20 7C │ 30 20 5F 7C 30 7C 5F 7C 0 _ 0 |0 _|0|_|
060: 30 7C 5F 20 30 7C 20 7C │ 27 2D 73 70 6C 69 74 30 0|_ 0| |'-split0
070: 29 5B 24 63 5B 24 5F 2D │ 34 38 5D 5D 7D 29 7D )[$c[$_-48]]})}
เวอร์ชั่นใหม่:
: s query parse-word bounds s" D@DD@DDDDDb`ddfFF`fff`Fd`df`f`" bounds do cr 2dup do i c@ '0 - j + c@ 3 0 do dup 3 and s" _|" drop + 1 type 4 / loop drop loop 10 +loop bye ; s
อันที่จริงแล้วสิ่งนี้รบกวนการออก (+3 ตัวอักษร) เช่นกัน :) นี่คือรุ่นที่อ่านได้มากขึ้นมันมีการบรรจุบิตเพื่อลดขนาด LUT ลงเหลือ 1/3 แต่โค้ดผลลัพธ์นั้นซับซ้อนกว่าดังนั้นจึงไม่ประหยัดมาก:
: 7s query parse-word bounds
s" D@DD@DDDDDb`ddfFF`fff`Fd`df`f`"
bounds do
cr
2dup do
i c@ '0 - j + c@
3 0 do
dup 3 and
s" _|" drop + 1 type
4 / \ shorter than an rshift
loop
drop
loop
10 +loop bye ;
7s
เวอร์ชั่นเก่า:
: s query parse-word bounds s" _ _ _ _ _ _ _ _ | | | _| _||_||_ |_ ||_||_||_| ||_ _| | _||_| ||_| |" bounds do cr 2dup do i c@ '0 - 3 * j + 3 type loop 30 +loop ; s
การทำเช่นนี้ทำให้สแต็กไม่สมดุลและไม่ต้องออกจากล่าม นี่เป็นเวอร์ชั่นที่อ่านง่ายกว่านี้
: 7s query parse-word bounds
s" _ _ _ _ _ _ _ _ | | | _| _||_||_ |_ ||_||_||_| ||_ _| | _||_| ||_| |"
bounds do
cr
2dup do
i c@ '0 - 3 * j + 3 type
loop
30 +loop 2drop bye ;
7s
static void Main(string[] a){var b = new[] {123,72,61,109,78,103,119,73,127,111};var g = new[]{" _ ","|","_","| ","|","_","| "};a[0].ToCharArray().SelectMany((x,w)=>g.Select((y,i)=>new{s=((b[x-48]>>i&1)==1)?y:new String(' ',y.Length),j=i,v=w})).GroupBy(z=>(z.j+2)/3).ToList().ForEach(q=>Console.WriteLine(String.Join("", q.OrderBy(l=>l.v).Select(k=>k.s).ToArray())));}
ฉันสามารถตัดอักขระบางตัวออกได้อย่างง่ายดาย ประเด็นก็ยิ่งเป็นการละเมิด LINQ :)
พื้นที่ว่างเพิ่มเติม:
static void Main(string[] a)
{
var b = new[] {123, 72, 61, 109, 78, 103, 119, 73, 127, 111};
var g = new[] { " _ ", "|", "_", "| ", "|", "_", "| " };
a[0].ToCharArray().SelectMany(
(x,w)=>g.Select(
(y,i)=>new{s=((b[x-48]>>i&1)==1)?y:new String(' ',y.Length),j=i,v=w}))
.GroupBy(z=>(z.j+2)/3).ToList().ForEach(
q=>Console.WriteLine(
String.Join("", q.OrderBy(l=>l.v).Select(k=>k.s).ToArray())));
}
using
s (409) จากนั้นมีช่องว่างที่ไม่จำเป็นซึ่งสามารถลบออกได้ (402) งานระบุว่าช่องว่างระหว่างตัวเลขจะถูกละเว้น (399)
g
จะใช้เพียงครั้งเดียวดังนั้นคุณจึงสามารถบันทึกได้ 7 ตัวอักษรโดยการขีดเส้นใต้
b
ยังใช้เพียงครั้งเดียวดังนั้นคุณจึงสามารถอินไลน์ได้เช่นกัน นอกจากนี้คุณสามารถบันทึกอักขระจำนวนมากได้หากคุณเปลี่ยนอาร์เรย์จำนวนเต็มเป็น"{H=mNgwI\x7fo"
หรือสั้นลงหากคุณเปลี่ยน\x7f
เป็นอักขระจริง # 127 (ซึ่งไม่สามารถพิมพ์ได้ แต่อนุญาตได้) >>
จะยังคงทำงานเนื่องจากมีการแปลงนัยจากการchar
int
.ToCharArray()
และ.ToArray()
มีทั้งความซ้ำซ้อนคุณก็สามารถลบออก :)
โซลูชัน Java: 585 570 Chars
ฉันไม่คิดว่าฉันจะพยายามเล่นกอล์ฟใน Java อีกต่อไป
import java.util.*;
public class CG997{public static void main(String[]args){
short[][]lets=new short[][]{{0,1,3,2,0,4,2,1,4},{0,0,3,0,0,4,0,0,4},{0,1,3,0,1,
4,2,1,3},{0,1,3,0,1,4,0,1,4},{0,0,3,2,1,4,0,0,4},{0,1,3,2,1,3,0,1,4},{0,1,3,2,1
,3,2,1,4},{0,1,3,0,0,4,0,0,4},{0,1,3,2,1,4,2,1,4},{0,1,3,2,1,4,0,0,4}};
String[]syms=new String[]{" ","_","|"," ","| "};
String s=new Scanner(System.in).nextLine();
for(int o=0;o<3;o++){for(char c:s.toCharArray()){for(int i =0;i<3;i++)
System.out.print(syms[lets[Short.parseShort(c+"")][i+o*3]]);
}System.out.println();}}}
b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)
ด้วยตัวแบ่งบรรทัด:
b=map(int,raw_input())
a=map(int,bin(914290166014670372457936330)[2:])
p=lambda k:''.join(' |'[a[9*n+k]]+' _'[a[9*n+1+k]]+' |'[a[9*n+2+k]]for n in b)+'\n'
print p(6)+p(0)+p(3)
toilet "$i"
ใช่ฉันรู้ว่าฉันกำลังนอกใจ
คุณต้องติดตั้งห้องน้ำ
figlet
ก็จะทำงานเช่นกัน
public class DigitalNumber {
public static void main(String args[]){
char[][] panel = new char[3][120]; //A 20 digit panel!
int digXIndex = 0;int digYIndex = 0;
for (int i=0;i<args[0].length(); i++){
int dig=Integer.parseInt(""+args[0].charAt(i));
panel[digXIndex][digYIndex]=32;
digYIndex++;
if (dig!=1 && dig!=4)
panel[digXIndex][digYIndex]='_';
else
panel[digXIndex][digYIndex]=32;
digYIndex++;
panel[digXIndex][digYIndex]=32;
digYIndex=3*i;
digXIndex++;
if (dig!=1 && dig!=2 && dig!=3 && dig!=7)
panel[digXIndex][digYIndex]='|';
else
panel[digXIndex][digYIndex]=32;
digYIndex++;
if (dig!=1 && dig!=0 && dig!=7)
panel[digXIndex][digYIndex]='_';
else
panel[digXIndex][digYIndex]=32;
digYIndex++;
if (dig!=6 && dig!=5)
panel[digXIndex][digYIndex]='|';
else
panel[digXIndex][digYIndex]=32;
digYIndex=3*i;
digXIndex++;
if (dig!=6 && dig!=8 && dig!=2 && dig!=0)
panel[digXIndex][digYIndex]=32;
else
panel[digXIndex][digYIndex]='|';
digYIndex++;
if (dig!=7 && dig!=4 && dig!=1)
panel[digXIndex][digYIndex]='_';
else
panel[digXIndex][digYIndex]=32;
digYIndex++;
if (dig!=2)
panel[digXIndex][digYIndex]='|';
else
panel[digXIndex][digYIndex]=32;
digXIndex=0;
digYIndex+=(i*3)+1;
}
for (int i=0; i<3; i++){
for (int j=0; j<120; j++)
if (panel[i][j]!=0)
System.out.print((char)(panel[i][j]));
else
System.out.print("");
System.out.println();
}
}
}
ตัวอย่าง I / O
java DigitalNumber 98765432109876543210
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|_||_| ||_ |_ |_| _| _| || ||_||_| ||_ |_ |_| _| _| || |
_||_| ||_| _| | _||_ ||_| _||_| ||_| _| | _||_ ||_|
import std.stdio;void main(string[]a){string[3]o;foreach(c;a[1]){int n=cast(int)(c)-48;auto e=" ";o[0]~=n!=1&&n!=4?" _ ":" ";o[1]~=!n||n>3&&n!=7?"|":e;o[1]~=n>1&&n!=7?"_":e;o[1]~=n<5||n>6?"|":e;o[2]~=!(n&1)&&n!=4?"|":e;o[2]~=!n||n>1&&n!=4&&n!=7?"_":e;o[2]~=n!=2?"|":e;}foreach(l;o)writeln(l);}
ชัดเจนยิ่งขึ้น:
import std.stdio;
void main(string[] a)
{
string[3] o;
foreach(c; a[1])
{
int n = cast(int)(c) - 48;
auto e = " ";
o[0] ~= n != 1 && n != 4 ? " _ " : " ";
o[1] ~= !n || n > 3 && n != 7 ? "|" : e;
o[1] ~= n > 1 && n != 7 ? "_" : e;
o[1] ~= n < 5 || n > 6 ? "|" : e;
o[2] ~= !(n&1) && n != 4 ? "|" : e;
o[2] ~= !n || n > 1 && n != 4 && n != 7 ? "_" : e;
o[2] ~= n != 2 ? "|" : e;
}
foreach(l; o)
writeln(l);
}
let t=function|'1'|'4'->" "|_->" _ "let m=function|'0'->"| |"|'1'|'7'->" |"|'2'|'3'->" _|"|_->"|_|"|'5'|'6'->"|_ "let b=function|'0'|'8'->"|_|"|'1'|'4'|'7'->" |"|'2'->"|_ "|_->" _|"let f s=let g h=String.iter(fun c->print_string(h c))s;print_newline()ing t;g m;g b
เวอร์ชันที่อ่านได้
let t = function
| '1'
| '4' -> " "
| _ -> " _ "
let m = function
| '0' -> "| |"
| '1'
| '7' -> " |"
| '2'
| '3' -> " _|"
| _ -> "|_|"
| '5'
| '6' -> "|_ "
let b = function
| '0'
| '8' -> "|_|"
| '1'
| '4'
| '7' -> " |"
| '2' -> "|_ "
| _ -> " _|"
let f s =
let g h =
String.iter (fun c -> print_string (h c)) s;
print_newline () in
g t;
g m;
g b
#!perl -l
$_=<<7;
_ _ _ _ _ _ _ _
| | | _| _||_||_ |_ ||_||_|
|_| ||_ _| | _||_| ||_| _|
7
@b=map{[/(...)/g]}split/\n/;@d=split//,<>;for$p(@b){print map$p->[$_],@d}
อ่านจาก STDIN
$ perl 7segment.pl
1234567890987654321
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| _| _||_||_ |_ ||_||_|| ||_||_| ||_ |_ |_| _| _| || |
||_ _| | _||_| ||_| _||_| _||_| ||_| _| | _||_ ||_|
แก้ไข: การทดแทนเพิ่มเติม ลบช่องว่างระหว่างตัวเลข
แก้ไข:ทดแทนมากขึ้น วนรอบหลักตอนนี้ดูเหมือนว่ามันทำอะไร!
/F{forall}def[48<~HUp;::1ncBInp~>{1 index 1 add}F
pop/*{dup
2 idiv exch
2 mod
1 eq}/P{print}/#{( )P}/?{ifelse
P}/O{{( )}?}/|{*{(|)}O}/_{*{(_)}O}>>begin[[[[ARGUMENTS{{load
# _ #}F()=]2{{| _ |}F()=]}repeat]pop[[[[}F
คุณลักษณะอาร์กิวเมนต์ประมวลผลใช้ Ghostscript ของ: gs -dNODISPLAY -- digit.ps 012 345 6789
วิงวอนกับ
ไม่ใกล้พอที่จะชนะ แต่มันก็สนุกดีที่จะทำ ^. ^
const asc: array[0..9] of array[0..2] of string = ((' _ ','| |','|_|'),(' ',' |',' |'),(' _ ',' _|','|_ '),(' _ ',' _|',' _|'),(' ','|_|',' |'),(' _ ','|_ ',' _|'),(' _ ','|_ ','|_|'),(' _ ',' |',' |'),(' _ ','|_|','|_|'),(' _ ','|_|',' _|'));var s,l:string;x,i:integer;begin Readln(s);s:=StringReplace(s,' ','',[rfReplaceAll]);for I := 0 to 2 do begin l:='';for x := 1 to length(s) do l := l + asc[StrToInt(s[x])][i];writeln(l);end;readln;end.
const
asc: array[0..9] of array[0..2] of string = (
(' _ ','| |','|_|'),
(' ',' |',' |'),
(' _ ',' _|','|_ '),
(' _ ',' _|',' _|'),
(' ','|_|',' |'),
(' _ ','|_ ',' _|'),
(' _ ','|_ ','|_|'),
(' _ ',' |',' |'),
(' _ ','|_|','|_|'),
(' _ ','|_|',' _|'));
var
s,l:string;
x,i:integer;
begin
Readln(s);
s:=StringReplace(s,' ','',[rfReplaceAll]);
for I := 0 to 2 do
begin
l:='';
for x := 1 to length(s) do
l := l + asc[StrToInt(s[x])][i];
writeln(l);
end;
readln
ปลาย
ฉันสามารถบันทึก5 7 ได้มากขึ้นด้วย ascii แบบขยาย: แต่ละอันสำหรับ"| _"
และ linebreak, สามสำหรับ~"z/]{4lno~|"
(การปฏิเสธแบบ bitwise จะทำให้ทุกอย่างเป็นอักขระ ascii แบบขยาย = ไม่มีอักขระพิเศษ, และ PHP ไม่จำเป็นต้องมีเครื่องหมายคำพูด), สองตัวสำหรับ-1
( มีเพียงเพื่อให้แผนที่อยู่ในมาตรฐาน ASCII) แต่สำหรับความสามารถในการอ่านและความเข้ากันได้ฉันยังคงใช้มาตรฐาน ASCII
for(;""<$c=$argv[1][$i++];)for($n=753754680;$n>>=3;)$r[$p++%3].="| _"[ord(~"z/]{4lno~|"[$c])-1>>$n%8&1?:$n&2];echo join("
",$r);
บิตแมป
_
, |_|
, |_|
บิต-6-
, 024
, 135
(บิตจำนวนและ 2 คือ 0 สำหรับไฟ LED แนวตั้ง)[123,48,94,124,53,109,111,112,127,125]
"z/]{4lno~|"
~"z/]{4lno~|"
(อนุญาตการจดชวเลขสามครั้งในการเลือกอักขระ)แม่แบบ
7
สำหรับช่องว่าง -> 767
, 024
,135
701
, 623
, 745
(วาทกรรม$p=0
เก่า)547326107
(อ่านแผนที่จากขวาไปซ้ายอนุญาตการวนซ้ำทางคณิตศาสตร์)5473261070
(อนุญาตให้รวมการเปลี่ยนแปลงกับการทดสอบในลูปเฮด)753754680
(สั้นกว่าสองไบต์: หนึ่งหลักและส่วนนำหน้า)ทำให้พังถล่ม
for(;""<$c=$argv[1][$i++];) // loop through input characters
for($n=753754680;$n>>=3;) // loop through template
$r[$p++%3].="| _"[ // append character to row $p%3:
ord(~"z/]{4lno~|"[$c])-1// decode bitmap
>>$n%8&1 // test bit $n%8 (always 1 for bit 7)
? // if set: 1 (space)
:$n&2 // else: 2 (underscore) for bits 2,3,6; 0 (pipe) else
];
echo join("\n",$r); // print result
ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
interface M{static void main(String[]a){String x="",y=x,z=x;for(int c:a[0].getBytes()){c-=48;x+=" "+(c==4|c==1?" ":"_")+" ";y+=(c==7|c>0&c<4?" ":"|")+(c==7|c<2?" ":"_")+(c>4&c<7?" ":"|");z+=(c%2<1&c!=4?"|":" ")+(c%3==1?" ":"_")+(c==2?" ":"|");}System.out.print(x+"\n"+y+"\n"+z);}}
คำอธิบาย:
interface M{ // Class
static void main(String[]a){ // Mandatory main-method
String x="", // String for row 1, starting empty
y=x, // String for row 2, starting empty
z=x; // String for row 3, starting empty
for(int c:a[0].getBytes()){ // Loop over the bytes of the input
c-=48; // Convert the byte to integer
x+= // Append to row 1:
" " // a space
+(c==4|c==1? // +If the digit is a 1 or 4:
" " // Append a space
: // Else:
"_") // Append an underscore
+" "; // + another space
y+= // Append to row 2:
(c==7|c>0&c<4? // If the digit is 1, 2, 3, or 7:
" " // Append a space
: // Else:
"|") // Append a pipe
+(c==7|c<2? // +If the digit is 0, 1, or 7:
" " // Append a space
: // Else:
"_") // Append an underscore
+(c>4&c<7? // +If the digit is 5 or 6:
" " // Append a space
: // Else:
"|"); // Append a pipe
z+= // Append to row 3:
(c%2<1&c!=4? // If the digit is 0, 2, 6 or 8:
"|" // Append a pipe
: // Else:
" ") // Append a space
+(c%3==1? // +If the digit is 1, 4, or 7:
" " // Append a space
: // Else:
"_") // Append a pipe
+(c==2? // +If the digit is 2:
" " // Append a space
: // Else:
"|"); // Append a pipe
} // End of loop
System.out.print(x+"\n"+y+"\n"+z);
// Print the three rows
} // End of main-method
} // End of class
ในฐานะที่เป็นฟังก์ชั่นนี้จะเป็น218 ไบต์แทน
a=" ";b=" _ ";c="|_|";d="| |";e="| ";f=" |";g="|_ ";h=" _|"
z=[[b,d,c],[a,f,f],[b,h,g],[b,h,h],[a,c,f],[b,g,h],[b,g,c],[b,f,f],[b,c,c],[b,c,h]]
x=map(int,raw_input())
for i in range(3):
for j in x:
print z[j][i],
print
เรียบง่ายและตรงไปตรงมา
Perl, 145 ตัวอักษร
$i=<>;for$s(6,3,0){for($i=~/./g){$v=(175,9,158,155,57,179,183,137,191,187)[$_]>>$s;$o.=($v&4?'|':$").($v&2?'_':$").($v&1?'|':$")}$o.="
"}print$o
Ungolfed:
# Read STDIN
$i = <>;
# Amount to bit shift later
for $s (6,3,0)
{
# For each character C from STDIN
for ($i =~ /./g)
{
# Get the Cth array index, bit shifted right by $s
$v = (175, 9, 158, 155, 57, 179, 183, 137, 191, 187)[$_]>>$s;
# Concatenate each character if the bitwise masked value says it should be there
$o .= ($v & 4 ? '|' : $") .
($v & 2 ? '_' : $") .
($v & 1 ? '|' : $");
}
# Concatenate a newline
$o .= "
";
}
# Print the result
print $o;
สิ่งล่อใจที่จะแก้ปัญหานี้ก็ดีเกินไปที่จะไม่ลงทะเบียนและตอบ = P
ฉันค่อนข้างใหม่กับ Python ดังนั้นฉันจึงจัดรูปแบบโปรแกรมของฉันให้ดีและเรียบร้อย (หรืออย่างน้อยฉันก็ทำ) การปรับปรุงชื่นชมอย่างมาก!
import sys;l1,l2,l3,l4,l5="";num=input()
for c in num:
if c=="1":
l1+=" oo ";l2+=" o ";l3+=" o ";l4+=" o ";l5+="oooo "
if c=="2":
l1+="oooo ";l2+=" o ";l3+="oooo ";l4+="o ";l5+="oooo "
if c=="3":
l1+="oooo ";l2+=" o ";l3+=" ooo ";l4+=" o ";l5+="oooo "
if c=="4":
l1+="o o ";l2+="o o ";l3+="oooo ";l4+=" o ";l5+=" o "
if c=="5":
l1+="oooo ";l2+="o ";l3+="oooo ";l4+=" o ";l5+="oooo "
if c=="6":
l1+="oooo ";l2+="o ";l3+="oooo ";l4+="o o ";l5+="oooo "
if c=="7":
l1+="oooo ";l2+=" o ";l3+=" o ";l4+=" o ";l5+=" o "
if c=="8":
l1+="oooo ";l2+="o o ";l3+="oooo ";l4+="o o ";l5+="oooo "
if c=="9":
l1+="oooo ";l2+="o o ";l3+="oooo ";l4+=" o ";l5+="oooo "
if c=="0":
l1+="oooo ";l2+="o o ";l3+="o o ";l4+="o o ";l5+="oooo "
print(l1+"\n"+l2+"\n"+l3+"\n"+l4+"\n"+l5)
แก้ไข: ชื่อตัวแปรแบบย่อ, ใช้แล้ว; เพื่อย่อให้มีเพียงหนึ่งช่องว่างที่ส่วนท้ายของหมายเลขผลลัพธ์ตัวแปรที่กำหนดทั้งหมดพร้อมกัน
บรรทัดใหม่คือ 2 ไบต์ (CRLF) และฉันใช้แท็บแทนช่องว่าง 4
?INPUT N$DIM A[14]COPY A,@A@A
DATA 1,0,0,1,3,1,1,3,0,4,3,4,1,6FOR D=0 TO LEN(N$)-1X=ASC("w$]m.k{%\o"[VAL(N$[D])])FOR I=0TO 6T=I*2IF X<<31THEN GBOX A[T]+D*5,A[T+1],A[T]+D*5+!(I MOD 3),A[T+1]+!!(I MOD 3)
X=X/2NEXT
NEXT
ใช้กราฟิกแทนข้อความเพราะอาจสั้นกว่านี้
คำอธิบาย:
PRINT 'so the input and output don't overlap
INPUT NUMBER$ 'get number
DIM PTS[7*2] 'locations of segments
COPY PTS,@PTDATA 'copy data into array
@PTDATA
DATA 1,0,0,1,3,1,1,3,0,4,3,4,1,6 'stored as x,y,x,y,...
FOR DIGIT=0 TO LEN(NUMBER$)-1
NUM=ASC("w$]m.k{%\o"[VAL(NUMBER$[DIGIT])]) 'get digit data. That data string doesn't have any non-ASCII characters, except \ which is 127 in SB.
FOR I=0 TO 7-1 'draw each segment
T=I*2 'position of point in array
IF X AND 1 THEN GLINE PTS[T]+DIGIT*5,PTS[T+1],PTS[T]+DIGIT*5+!(I MOD 3),PTS[T+1]+!!(I MOD 3) 'draw segment. I MOD 3 determines whether it's horizontal or vertical.
X=X>>1 'shift to next bit
NEXT
NEXT
#import<iostream>
#define d for(auto
std::string v[3],t,g="|_| =2$0^262\'032;2$2?272";main(){std::cin>>t;d i:t)d j:{0,1,2})d k:{0,1,2})v[k]+=g[g[i*2-92+!k]>>j+k/2*3&1?j:3];d j:v)std::cout<<j<<'\n';}
อ่านจาก stdin และเอาต์พุตไปยัง stdout
คำอธิบาย:
#import<iostream> // string inside
std::string v[3], t, g="|_| " // symbol on different horizontal position
"=2$0^262\'032;2$2?272"; // space(0) or not(1) for each number and position
// binary representation, last 6 bits is used
// even positions are for row 1, 2; odds are for row 0
main() {
std::cin>>t; // input
for (auto i:t) // for each character
for (auto j:{0,1,2}) // for each horizontal position
for (auto k:{0,1,2}) // for each vertical position
v[k]+=g[ // use first four chars only
g[i*2-92 // i*2-96 is number*2, +4 to skip first four
+!k] // row 0 uses another character
>>j+k/2*3 // (k==2?3:0)+j, the expected bit
&1 // extract the bit
?j:3 // space or not space
];
for (auto j:v) std::cout<<j<<'\n'; // output
}
param($a)6,3,0|%{$l=$_
-join($a|% t*y|%{(' 0 _ 0 _|0|_ 0| |0 |0|_|'-split0)[(+('f-SR5Z^mvr'["$_"])-shr$l)%8]})}
สคริปต์ทดสอบ:
$f = {
param($a)6,3,0|%{$l=$_
-join($a|% t*y|%{(' 0 _ 0 _|0|_ 0| |0 |0|_|'-split0)[(+('f-SR5Z^mvr'["$_"])-shr$l)%8]})}
}
&$f "1234567890"
&$f "81"
เอาท์พุท:
_ _ _ _ _ _ _ _
| _| _||_||_ |_ ||_||_|| |
||_ _| | _||_| ||_| _||_|
_
|_| |
|_| |
แนวคิดหลัก:
หมายเลขสไตล์นาฬิกาดิจิตอลมาตรฐานแต่ละหมายเลขมี 3 บรรทัด ยิ่งกว่านั้นบรรทัดแรกมีเพียง 2 ตัวเลือก ทั้งหมด 6 ตัวเลือก ดังนั้น 7 บิตก็เพียงพอที่จะเข้ารหัสแต่ละหลัก
line str=@(' ', ' _ ', ' _|', '|_ ', '| |', ' |', '|_|')
# line str binary dec ASCII
- -------- --------- --- -----
0 -> 1
4
6 -> 1 100 110 -> 102 -> 'f'
1 -> 0
5
5 -> 0 101 101 -> 45 -> '-'
...
8 -> 1
6
6 -> 1 110 110 -> 118 -> 'v'
9 -> 1
6
2 -> 1 110 010 -> 114 -> 'r'
ดังนั้นสตริงจึงf-SR5Z^mvr
เข้ารหัสเซกเมนต์ทั้งหมดสำหรับหมายเลขสไตล์นาฬิกาดิจิตอลมาตรฐานทั้งหมด
หมายเหตุ: คำสั่งของได้รับการคัดเลือกมาเป็นพิเศษเพื่อให้รหัสทั้งหมดอยู่ในช่วงline str
32..126