Màn hình Woz


17

Thử thách

Gần đây tôi đã nhận được vào máy tính 8 bit và say mê với hoạt động của chúng và những người khác; do đó, mục tiêu của môn đánh gôn này là tái tạo một phần của Màn hình Woz, được thiết kế bởi Steve Wozniak cho Apple I.

Bạn phải lưu trữ một mảng gồm 22 giá trị thập lục phân với độ rộng hai byte, (giá trị tối thiểu $ 10 , giá trị tối đa $ FF ), sau đó lấy số n của đầu vào. (Thông thường hai ngôn ngữ như Brainfuck có thể có một thời gian khó khăn).
Các đầu vào sẽ đề cập đến nơi trong mảng bắt đầu in và dừng ở đâu; một đầu vào với hành vi được xác định sẽ có giá trị bắt đầu của chúng nhỏ hơn hoặc bằng giá trị kết thúc. Chương trình của bạn sau đó phải có khả năng in mọi giá trị thập lục phân giữa và bao gồm cả các hình lục giác được nhập vào.

Một ví dụ về điều này:

Array
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15

Values
FF F4 B6 D7 40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6 A5

input first num:
04
input second num:
14
40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6

Bây giờ phần thú vị của bài tập này, là bạn có thể sử dụng bất cứ thứ gì bạn muốn để kiểm tra giới hạn của đầu vào của người dùng. Người đầu vào hellovà chương trình của bạn có hành vi không xác định? Nó thoát mà không báo trước? Cả hai đều hợp lệ.

Các quy tắc duy nhất là:

1. Bạn phải bao gồm các giá trị của 22 giá trị thập lục phân như một phần của chương trình trước khi bắt đầu, (không thể yêu cầu người dùng nhập dữ liệu).
2. Đầu ra của các giá trị thập lục phân phải tuân theo định dạng chính xác: 00 FF 00 FF 00Trailing space, tab hoặc lines là OK. Nhân vật thì không.
3. Chương trình không phải yêu cầu đầu vào bằng một tin nhắn. Để trống "tin nhắn" nếu bạn muốn. Tuy nhiên, người dùng phải nhập các giới hạn hex.
4. Giống như các giá trị của 22 hexadecimals tùy thuộc vào bạn quyết định, bạn phải tạo một chương trình thực sự tìm nạp các giá trị từ bộ lưu trữ, trái ngược với việc bắt chước một chương trình bằng cách in các giá trị. (chẳng hạn như danh sách $ 00 's).
5. n - lượng đầu vào, đề cập đến lượng đầu vào cần thiết cho ngôn ngữ bạn chọn để nhận ra hệ thập lục phân có độ rộng hai byte. ví dụ. (Brainfuck sẽ yêu cầu hai đầu vào trên mỗi hex, làm cho bốn đầu vào cho hai).

Hãy bình luận nếu bạn cần làm rõ.

Đây là mã golf, vì vậy câu trả lời ngắn nhất trong số byte là người chiến thắng.

Bảng xếp hạng

Dưới đây là bảng xếp hạng tạo ra đoạn trích lịch sự của Martin Ender .

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

# Ruby, <s>104</s> <s>101</s> 96 bytes


Chúng tôi yêu cầu người dùng cho hai đầu vào hoặc n? Chúng ta có chọn 22 giá trị hex là gì không?
xnor

Có, 22 giá trị là của bạn để quyết định. Các giá trị đầu vào, chúng có thể là bất kỳ số tiền nào. Tôi đã nói nbởi vì Brainfuck không thể nhận chuỗi 2 ký tự, bạn sẽ cần nhập byte đầu tiên, sau đó là chuỗi thứ hai cho giá trị đầu tiên và sau đó thực hiện lại cho giá trị thứ hai, tổng cộng 4 đầu vào. Họ có thể được nhiều như bạn muốn.
Finn Rayment

Tuy nhiên, với các giá trị, bạn không thể có tất cả chúng là 00 và có một chương trình bắt chước những gì thực sự sẽ đọc các mảng. Cập nhật câu hỏi.
Finn Rayment

Nó nên bọc hoặc đọc ngược lại nếu đầu vào 2 nhỏ hơn đầu vào 1?
Jonathan Allan

@Jonathan ALLan Điều đó hoàn toàn phụ thuộc vào bạn. Chỉ cần nhớ, đảm bảo đầu vào là chính xác có thể làm cho mã của bạn lớn hơn. Như được viết ngay phía trên các quy tắc, bạn có thể cho phép bất kỳ hình thức nhập liệu nào (tùy thuộc vào bạn), dẫn đến hành vi hoặc lỗi không xác định nếu bạn muốn.
Finn Rayment

Câu trả lời:


4

Thạch , 24 21 byte

w@€ØHḅ⁴
ɠǵɠÇr@b⁴ịØHK

Giá trị được chọn: [00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 1F 10 11 12 13 14 15]

Dùng thử

Nếu đầu vào thứ hai nhỏ hơn đầu vào thứ nhất, nó sẽ xuất chuỗi đảo ngược.
Hành vi ngoài giới hạn không được xác định (ví dụ: "foo", "14" trả về 38 giá trị, hầu hết trong số đó thậm chí không nằm trong mảng và nhiều trong số đó không có độ dài 2)

Làm sao?

w@€ØHḅ⁴ - Link 1, parse a string as a 1-based hex value e.g. "14"
w@€      - first index (1-based) of each character in
   ØH    - hex digits: "0123456789ABCDEF"                   [2,5]
     ḅ⁴ - convert from base 16                                 37

ɠǵɠÇr@b⁴ịØHK - Main link
ɠ  ɠ          - read a line from stdin               e.g. "04"  "14"
 Ç  Ç         - call the last link (1) as a monad          21    37
  µ           - monadic chain separation
     r@       - inclusive range, with reversed arguments  [   21,   22,...,   36,   37] 
       b⁴     - convert to base 16                        [[1,5],[1,6],...,[2,4],[2,5]]
         ị    - index into
          ØH  - hex digits: "0123456789ABCDEF"            [ "04", "05",..., "13", "14"]
            K - join with spaces

À, xin lỗi tôi. Bạn đã thực sự chính xác. Hoàn thành tốt, và có vị trí bảng xếp hạng # 1. :)
Finn Rayment

1
có, tôi vừa di chuyển và thay đổi một giá trị bù (bây giờ 1F), nghĩa là tôi không cần phải "giải thích" chính xác các đầu vào hex hoặc thêm 16 để cung cấp cho tôi hai chữ số hex để chuyển đổi lại.
Jonathan Allan

4

JavaScript (ES6), 118 115 112 102 82 81 byte

Đã lưu 1 byte nhờ vào ETHproductions

Giá trị được chọn:

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15
-----------------------------------------------------------------
10 10 11 14 10 10 15 15 11 14 10 10 15 15 11 14 10 10 15 15 10 11
  • Nhắc về giới hạn dưới, sau đó cho giới hạn trên (ví dụ 0x04/ 0x0f).
  • Giới hạn dưới không hợp lệ sẽ được hiểu là 0x00(giá trị tối thiểu).
  • Giới hạn trên không hợp lệ sẽ được hiểu là 0x15(giá trị tối đa).
  • Đầu ra không có gì nếu giới hạn dưới lớn hơn giới hạn trên.

alert((1/7+'789').replace(/./g,(v,i)=>i<a|i>b?'':(v|10)+' ',p=prompt,b=p(a=p())))

Phiên bản trước (97 byte)

Tạo danh sách giả ngẫu nhiên các giá trị thập lục phân 'đúng':

alert((1/7+'789').replace(/./g,(v,i)=>i<a|i>b?'':(v*7|16).toString(16)+' ',p=prompt,a=p(),b=p()))

Sự nối tiếp:

10 10 17 1c 1e 38 33 31 17 1c 1e 38 33 31 17 1c 1e 38 33 31 38 3f

"message": "Uncaught SyntaxError: Mục tiêu chuyển nhượng hủy hoại không hợp lệ"
Finn Rayment

@frayment - Đây là Chrome, phải không? Điều đó thật kỳ lạ bởi vì nó không phàn nàn về [a,b]=prompt().split(' ')dòng lệnh. Dù sao, câu trả lời cập nhật của tôi nên khắc phục điều đó.
Arnauld

Làm tốt! Hoạt động ngay bây giờ. Thật kỳ lạ khi Chrome làm điều đó. Tôi đã thử nghiệm nó trên trình kiểm tra JS của bạn và trong bảng điều khiển Nhà phát triển của tôi. Cùng một lỗi. Chào mừng đến với bảng xếp hạng.
Finn Rayment

Bạn có thể lưu một số byte bằng các đầu vào như 0x04
Hedi

1
Anh bạn, không có gì sai với người thay thế của bạn, nó hoạt động tốt ở đây và là trong các quy tắc. Cập nhật bài viết của bạn! :)
Finn Rayment

3

JavaScript (ES6), 107 152 137 byte

p=prompt,f=(a=+p(),b=+p(),[x,y,...s]='FFF4B6D7402011A4F0D0FF3D9C2165C4A22890E7D6A5')=>a?f(a-1,b-1,s):x+y+' '+(b?f(a,b-1,s):'');alert(f())

Giá trị được chọn:

FF F4 B6 D7 40 20 11 A4 F0 D0 FF 3D 9C 21 65 C4 A2 28 90 E7 D6 A5

Đầu vào:

  • Định dạng đầu vào là 0x14
  • Nếu bất kỳ đầu vào nào là âm hoặc đầu vào thứ 1 lớn hơn đầu vào thứ 2: InternalError: too much recursion
  • Sẽ in NaNra ngoài giới hạn.

Các giải pháp trước đây:
152 byte:

i=parseInt,p=prompt,f=(a=i(p()),b=i(p()),[x,y,...s]='FFF4B6D7402011A4F0D0FF3D9C2165C4A22890E7D6A5')=>a?f(a-1,b-1,s):x+y+' '+(b?f(a,b-1,s):'');alert(f())

107 byte, giải pháp không hợp lệ (thiếu đầu vào):

f=(a,b,[x,y,...s]='FFF4B6D7402011A4F0D0FF3D9C2165C4A22890E7D6A5')=>a?f(a-1,b-1,s):x+y+' '+(b?f(a,b-1,s):'')

1
Đóng! Nhưng bạn cần có thể yêu cầu người dùng nhập liệu. Tôi thích những gì bạn đã làm với console.log(...)mặc dù. ;)
Finn Rayment

@frayment var và cuối cùng ;không phải là một phần của câu trả lời. Nó chỉ dành cho đoạn trích, đó là lý do tại sao tôi đã thêm linebreak. Tôi sẽ chỉnh sửa câu trả lời.
Hedi

@Hedi xấu của tôi, xin lỗi về điều đó.
Finn Rayment

2

Python, 88 87 86 byte

Lưu 1 byte nhờ @Jonathan ALLan
Lưu lại 1 byte vào @Jonathan ALLan

Cũng thay đổi cơ sở của mã, bây giờ đẹp hơn nhiều.

a,b=[int(x,16)for x in raw_input().split()];l=[0]*22
while a<=b:print"%02x"%l[a],;a+=1

Giá trị được chọn: 00cho tất cả mọi thứ.

Ý tưởng tương tự như câu trả lời C của tôi. Tuy nhiên, lần này, mã lấy một đầu vào từ người dùng, yêu cầu khoảng trắng giữa cả hai giá trị, tách chúng, chuyển chúng thành giá trị hex và in mọi hex trong lmảng bao gồm và giữa hai giá trị được nhập. Vì Python có một hệ thống bắt lỗi tuyệt vời, không có lỗi tràn bộ đệm và do đó mã an toàn hơn nhiều. Chương trình an toàn trước hành vi không xác định theo nghĩa là nó sẽ không thực thi khi giá trị cao hơn được gửi trước giá trị thấp hơn.

Điều này sẽ hoạt động trên cả Python 2.x và 3.x; Vui lòng sửa lại cho tôi nếu tôi sai, vì tôi không có quyền truy cập vào cả hai phiên dịch do hệ thống của tôi không hỗ trợ cả hai.


2

C ++, 98 95 93 byte

#include <iostream>
int _[22],a,b;int main(){for(std::cin>>a>>b;b/a++;)printf("%02x ",_[a]);}

Giá trị tôi chọn là tất cả 0


Chào mừng bạn đến với Câu đố lập trình & Code Golf! Đây là một câu trả lời được đánh golf tốt, nhưng tôi không nghĩ rằng nó đáp ứng các yêu cầu của thử thách. Bạn có phiền bao gồm 22 giá trị thập lục phân đã chọn của bạn không?
Sản xuất ETH

Gần đó rồi! Vấn đề duy nhất là, khi tôi nhập các giá trị 0406, tôi chỉ nhận lại được hai giá trị. Tôi nghi ngờ đây là những giá trị 0506. Bạn cần cung cấp tất cả các giá trị giữa và bao gồm các giá trị được nhập.
Finn Rayment

1
@frayment, oh đúng rồi, đã sửa rồi!
Fatih BAKIR

1

Perl, 79 45 41 byte

"Giá trị tối thiểu $ 10" - ví dụ có tối thiểu $ 00- đó có phải là lỗi chính tả không?

Đây là một câu trả lời perl khá nhàm chán trong 41 byte (Đã 46 và sau đó tôi tiếp tục nhìn thấy các khoảng trắng, parens tôi có thể bỏ qua). Đưa đầu vào thành hai dòng.

printf'%02X ',$_ for(4..26)[hex<>..hex<>]

Dữ liệu là danh sách 04..1A

Trước khi tôi quá thông minh với gói & giải nén. Các byte đầu vào của nó được nhập cùng một lúc được làm nhòe với nhau, ví dụ: "020E" sẽ in các mục thứ 2 -14

printf'%02X ',$_ for sub{(4..26)[shift..shift]}->(unpack'CC',pack'H4',<>)

Có thể thử chơi golf nhiều hơn bằng cách sử dụng tất cả 0 substrprintf'%*vX'... không làm cho câu trả lời của tôi dài hơn. 48 ký tự (sử dụng chuỗi ascii '7', hex 37 làm dữ liệu)

printf'%*vX',' ',substr 7x22,$s=hex<>,1+hex<>-$s

1

CJam, 22 byte

{r:~Gb}2*37m!s2/\)<>S*

Giá trị được chọn:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15
-----------------------------------------------------------------
13 76 37 53 09 12 26 34 50 46 31 59 79 58 15 80 90 24 00 00 00 00

Dùng thử trực tuyến


1

Scala, 45 byte

(_:Int)to(_:Int)map(x=>f"$x%02X")mkString " "

Ung dung:

(a:Int,b:Int)=>a.to(b).map(x=>f"$x%02X").mkString(" ")

Sử dụng 00để FFnhư các giá trị, nhưng công trình lên đến 2147483647.


error: ')' expected but string literal found.vào lúca.to(b).map(
Finn Rayment

Không biết đó chỉ là tôi hay sao. : / Tôi nên thử chạy nó trong cái gì?
Finn Rayment

@frayment có lẽ là do phép nội suy chuỗi, được giới thiệu trong Scala 2.10.0
corvus_192

Vì vậy, phiên bản nào bạn đã xây dựng này trong? 2.9?
Finn Rayment

@frayment Tôi đã sử dụng REPL
2.11.7

1

C, 176 175 161 byte

Tiết kiệm 1 byte nhờ
@Jonathan ALLan Trợ giúp lớn nhờ @Downvoter đã giúp tôi tiết kiệm 14 byte!

int main(){int a[44]={0};char s[2];scanf("%s",s);int b=(int)strtol(s,0,16);scanf("%s",s);int c=(int)strtol(s,0,16);while(b<=c){printf("%d%d ",a[b],a[b+1]);b++;}}

Hãy thử trực tuyến!

Giá trị được chọn: 00cho tất cả mọi thứ.

Câu trả lời không được đánh gôn:

int main() {
    int a[44] = {0};
    char s[2];
    scanf("%s", s);
    int b = (int) strtol(s, 0, 16);
    scanf("%s", s);
    int c = (int) strtol(s, 0, 16);
    while (b <= c) {
        printf("%d%d ", a[b], a[b+1]);
        b++;
    }
}

Thủ thuật cho vấn đề này là sử dụng hai đầu vào và cố gắng chuyển đổi chúng thành các chuỗi thập lục phân và sau đó chuyển sang số nguyên. Vì không có kiểm tra lỗi hoặc bất cứ điều gì tương tự, hành vi không xác định chỉ đơn giản là ném lỗi và phá vỡ chương trình. Người dùng cần nhập hai đầu vào, tuy nhiên trình biên dịch CDT Eclipse của tôi dường như cho phép tôi nhập cả hai đầu vào trên cùng một dòng với khoảng trắng ở giữa.

Chúng phải theo đúng thứ tự, vì yêu cầu giá trị lớn hơn trước khi giá trị nhỏ hơn sẽ không chạy while-loop.

Vấn đề là, cũng không có bảo vệ chống tràn bộ đệm, vì vậy tôi có thể chỉ cần yêu cầu một cái gì đó vô lý, chẳng hạn như phạm vi từ $ 0 đến $ FFFF, và tôi sẽ nhận được mọi thứ trong bộ nhớ máy tính của mình từ khi bắt đầu cấp phát bộ nhớ cho a[44]mảng , tất cả các cách để 65536 giá trị sau này.


Một ký tự khoảng trắng duy nhất trong định dạng đầu vào khớp với bất kỳ khoảng trắng nào trong luồng đầu vào, mặc dù hầu hết các định dạng scanf đều bỏ qua khoảng trắng, nói về điều đó, tại sao không cắt bỏ người trung gian và sử dụng %xtrực tiếp?
Neil

Tại sao không sử dụng char s[2]thay vì các malloccông cụ? mallocGiá trị trả về của đúc không cần thiết trong C anyway.
cadaniluk

@Neil Nếu bạn nói về printf("%d%d ", ...)phần này, bằng cách thay thế định dạng bằng cách %xchỉ trả về 0thay vì 00'và không loại bỏ chúng.
Finn Rayment

@Downvoter Cảm ơn bạn rất nhiều! Tôi đã không nghĩ về điều đó. Chỉnh sửa câu trả lời ngay bây giờ.
Finn Rayment

Không, tôi vẫn đang nói về scanf.
Neil

1

GNU sed, 209 + 1 (cờ r) = 210 byte

1{h
s:.*:,00 FF,01 F4,02 B6,03 D7,04 40,05 00,06 00,07 A4,08 F0,09 00,0A FF,0B 0D,0C 9C,0D 21,0E 65,0F C4,10 02,11 28,12 90,13 E7,14 D6,15 A5:
H;d}
G;s:\n(.*)\n.*(,\1.*):\n\2:
s:(.*)\n(.*,\1 ..).*:\2:
s:,..::g

Hãy thử trực tuyến! Một không gian hàng đầu có mặt trong đầu ra, tôi hy vọng nó được cho phép.

Chạy ví dụ:

me@LCARS:/PPCG$ echo -e "06\n0F" | sed -rf table_lookup.sed
 00 A4 F0 00 FF 0D 9C 21 65 C4
me@LCARS:/PPCG$ echo -e "13\n13" | sed -rf table_lookup.sed
 E7

Giải thích: 22 giá trị thập lục phân được lưu trữ giống như các giá trị từ ví dụ của OP

value | FF F4 B6 D7 40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6 A5
-------------------------------------------------------------------------
index | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15

Các chỉ mục bắt đầu và kết thúc được đọc trên các dòng riêng biệt. Đầu ra là một dòng duy nhất với các giá trị bảng trong phạm vi chỉ mục đó (đã bao gồm). Đầu vào không xác định sẽ ghi nhiều dòng đầu ra không hợp lệ.

# store START index in hold space
1{h
# generate the table
s:.*:,INDEX1 VALUE1,INDEX2 VALUE2,°°°:
# append table to hold space and delete pattern space
H;d}
# read END index, append hold space (pattern space format is: END\nSTART\nTABLE)
G
# delete table entries up to, but excluding, the START index (END\nTABLE')
s:\n(.*)\n.*(,\1.*):\n\2:
# delete table entries starting from, but excluding, the END index (TABLE'')
s:(.*)\n(.*,\1 ..).*:\2:
# remove the indexes and print (implicitly) the resulting values
s:,..::g

1

PHP, 106 105 104 96 + 2 byte

eval($s='for($a=a;$a++<c;)$$a=hexdec($argv[++$i]);while($b<=$c)printf("%02X ",ord($s[$b++]));');

hoặc là

eval($s='for($a=a;$a++<c;)$$a=hexdec($argv[++$i]);');while($b<=$c)printf("%02X ",ord($s[$b++]));

Chạy với php -nr '<code>' <lowindex> <highindex>; thoát các dấu ngoặc đơn trong mã.
... Hoặc kiểm tra trực tuyến .

dechexdiễn giải đầu vào dưới dạng các chuỗi thập lục phân cho đến các ký tự là các chữ số hex,
0nếu đầu vào bắt đầu bằng một số khác.

không in gì nếu giá trị thứ nhất lớn hơn giây.

các giá trị được chọn:

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15
-----------------------------------------------------------------
66 6F 72 28 24 61 3D 61 3B 24 61 2B 2B 3C 63 3B 29 24 24 61 3D 68

(22 mã ascii đầu tiên của mã được thực thi)

hoặc là

for($a=a;$a++<c;)eval($s='$$a=hexdec($argv[++$i]);');while($b<=$c)printf("%02X ",ord($s[$b++]));

với các giá trị sau:

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15
-----------------------------------------------------------------
24 24 61 3D 68 65 78 64 65 63 28 24 61 72 67 76 5B 2B 2B 24 69 5D 

Làm câu trả lời thường kết hợp <?phpchunk?
Finn Rayment

@frayment không nếu bạn sử dụng -r. Và nếu tôi cần lưu trữ nó vào một tập tin, tôi sử dụng thẻ mở ngắn <?.
Tít

Các hằng số a, zProgramingPuzles_CGolfkhông xác định. Trường hợp nào đã ProgramingPuzles_CGolfđến từ đâu? : /
Finn Rayment

@frayment Đó là những thông báo. Định tuyến lại stderrđể /dev/nullnếu bạn không thích chúng. PHP đánh giá các hằng số không xác định thành chuỗi.
Tít

Nhưng chúng xuất hiện dưới dạng Lỗi cú pháp, tôi không thể chạy chương trình.
Finn Rayment

1

Lắp ráp Apple II 6502, 75 byte

Mã byte:

A9 46 85 36 A9 10 85 37 A0 00 98 20 DA FD A9 A0 
20 ED FD C0 42 D0 F3 20 93 FE A2 FC 20 1B FD 9D 
04 01 E8 D0 F7 86 31 A9 8D 8D 04 02 20 A7 FF B5 
3C 0A 75 3C 95 3C CA 10 F6 A6 3D BD 05 02 20 ED 
FD E8 E4 3C D0 F5 99 05 02 C8 60

Tháo gỡ:

  LDA    #<+
  STA    CSWL
  LDA    #>+
  STA    CSWH    ;redirect stdout
  LDY    #$00
- TYA
  JSR    PRBYTE  ;print number
  LDA    #$A0    ;space
  JSR    COUT    ;print space
  CPY    #$42    ;22*3
  BNE    -
  JSR    SETVID  ;restore stdout
  LDX    #$FC
- JSR    KEYIN   ;fetch a key
  STA    $0104,X ;store to $200+
  INX
  BNE    -       ;four keys
  STX    MODE    ;set internal flags
  LDA    #$8D
  STA    $0204   ;set key delimiter
  JSR    GETNUM  ;convert keys to hex values
- LDA    A1L,X   ;fetch value
  ASL
  ADC    A1L,X   ;multiply by 3
  STA    A1L,X   ;store value
  DEX
  BPL    -       ;both inputs
  LDX    A1H     ;first input
- LDA    $0205,X ;fetch from index
  JSR    COUT    ;print character
  INX
  CPX    A1L
  BNE    -       ;until second input
+ STA    $0205,Y ;fall through to save a byte
  INY
  RTS

Nó tạo thành một mảng trong bộ nhớ trông giống như đầu ra. Các giá trị được chọn là:

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15
-----------------------------------------------------------------
00 03 06 09 0C 0F 12 15 18 1B 1E 21 24 27 2A 2D 30 33 36 39 3C 3F

Người dùng nhấn bốn phím để đặt đầu vào.


Oooo sử dụng mã riêng của Táo. Hoàn thành rất tốt.
Finn Rayment
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.