Viết toàn bộ holed bằng cách sử dụng unoled


55

Các ký tự ASCII từ mã thập phân 33 đến 126 là:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Lưu ý rằng trong hầu hết các phông chữ, 25 trong số các ký tự này có "lỗ hổng" trong đó: (một chi lớn hơn 0 bạn có thể nói)

#$%&04689@ABDOPQRabdegopq

68 nhân vật "không được đào tạo" khác là:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Nhiệm vụ của bạn là viết chương trình ngắn nhất có thể bằng cách chỉ sử dụng các ký tự không được tạo ra, xuất ra từng ký tự chính xác một lần theo bất kỳ thứ tự nào.

Vì Không gian, Tab và dòng mới (Nguồn cấp dữ liệu và / hoặc Trả lại vận chuyển) là không gian trống, chúng có thể xuất hiện trong chương trình của bạn hoặc đầu ra của nó. Họ vẫn tính vào số lượng nhân vật. Các ký tự ASCII khác có thể không được sử dụng (và chắc chắn không phải là các ký tự không phải ASCII).

Ghi chú

  • Bạn không phải sử dụng tất cả các nhân vật không được đào tạo cũng không chỉ một trong số các nhân vật.
  • Đầu ra có thể không chứa các ký tự không bị xóa.
  • Các ngôn ngữ Khoảng trắng có thể được sử dụng.
  • Đầu ra nên đi đến thiết bị xuất chuẩn hoặc có thể đi đến một tệp. Không nên có đầu vào.

Phần thưởng: Chỉ để cho vui, hãy thử in tất cả các ký tự không sử dụng bằng các ký tự holed. Tôi nghi ngờ rằng nó có thể được thực hiện bằng một ngôn ngữ hiện có.


9
+1 cho tiêu đề. Chúng tôi yêu những thứ như thế này .
Jacob

1
Giải pháp Perl ở đâu?!
Pierre Arlaud

4
Vâng, không có giải pháp trong Haskell hoặc C; nếu đó là một chương trình bạn muốn, thì bạn cần đánh vần main.
Rhymoid

2
Tiền thưởng có thể được thực hiện bằng cách sử dụng khoảng trắng.
Joshua

1
Làm thế nào mà không ai nhận ra rằng tôi đã quên ~??
Sở thích của Calvin

Câu trả lời:


18

Pyth , 43 35 ký tự

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

Hãy thử nó ở đây .

In các ký tự theo thứ tự ngoại trừ 9 ở đầu, dòng mới được tách ra.

Chuỗi chứa tất cả các ký tự 7 lớn hơn các ký tự cần thiết, ngoại trừ 9 ký tự sẽ trở thành @, do đó, nó là trường hợp đặc biệt. Thuật toán nhờ @Howard.

Giải trình:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.

24

GolfScript, 37 36 ký tự

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Hãy thử mã ở đây .

Chuỗi chứa các ký tự bị cấm xor'ed với 25. May mắn là tất cả các ký tự được ánh xạ tới các ký tự hợp lệ.


22

Brainfuck 119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.

uh, --lúc bắt đầu ... Bạn có đang quay trở lại 254 trên đăng ký ban đầu không?
WallyWest

1
Yup :) Làm cho vòng lặp ngắn hơn 36 (để đến 35)
Teun Pronk

Chà, nó chắc chắn đánh bại con số 275 của tôi ... được thực hiện tốt ...
WallyWest

Xin lỗi, sở thích của Calvin Tôi khá chắc chắn không cho phép nhập liệu, xin lỗi. OP có thể muốn làm rõ, mặc dù.
isaacg

@isaacg Tôi biết, đó là lý do tại sao mã chính của tôi không nhận đầu vào và ví dụ cuối cùng không phải là một vấn đề nghiêm trọng :)
Teun Pronk

20

Phần thưởng - dc, 179 ký tự

Oh tốt, một thách thức thiết lập nhân vật hạn chế nơi Pđược phép.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

dcrõ ràng là đủ tối nghĩa để yêu cầu giải thích (lạ đối với tôi khi xem xét những thứ kỳ lạ ở đây!) Đây là một tổng quan:

Đây chủ yếu là một máy tính RPN với số học chính xác tùy ý. Nhưng đối với thử thách này, tôi đang sử dụng Plệnh, diễn giải một số là một chuỗi các ký tự trong cơ sở 256 và in chúng. Ví dụ: 65 Pbản in A(mã ASCII 65). 16706 Pbản in AB(16706 = 65 * 256 + 66).

Bên cạnh đó, tính năng thú vị duy nhất khác là nó nhận ra tất cả các chữ số thập lục phân 0-9A-Fngay cả khi chúng không được chứa trong một số thập lục phân. Đầu vào thập phân là mặc định, vì vậy mã thông báo đầu vào 999có nghĩa 9 hundreds + 9 tens + 9ABCcó nghĩa là 10 hundreds + 11 tens + 12làm cho nó tương đương với 1122.

Khả năng sử dụng các chữ số ABDtrong thập phân một phần bù cho việc không thể sử dụng 12357, và việc lựa chọn thứ tự và nhóm làm phần còn lại. (Nếu tôi cần một số con số x, y, zvà họ không được biểu diễn bằng các con số cho phép, sau đó tôi cố gắng đại diện x*256*256+y*256+zthay thế.)

Chương trình có thể được thực hiện ngắn hơn một chút bằng cách sử dụng các nhóm lớn hơn. Tôi đã không vượt quá 3 byte mỗi số.


1
@DigitalTrauma theo cách khác là Tiền thưởng ở cuối bản tuyên bố vấn đề.

Hà! Tôi bỏ lỡ điều đó! Xuất sắc! +1
Chấn thương kỹ thuật số

Bạn có thể giải thích điều này? Và có một nơi chúng ta có thể chạy này?
Sở thích của Calvin

4
Một nơi bạn có thể chạy nó? dc không phải là một ngôn ngữ ngớ ngẩn được thiết kế để tạo ra các chương trình khó đọc, nó là một máy tính nghiêm túc. Chạy nó trên bất kỳ máy unix (hoặc cygwin). vi.wikipedia.org/wiki/Dc_(computer_program)

@ Calvin'sHobbies Nếu bạn có quyền truy cập vào bất kỳ máy Linux hoặc Unix nào (bao gồm cả OSX), chỉ cần lưu dưới dạng tệp văn bản, ví dụ: Bonus.dc, sau đó chạy dc bonus.dc. dc là một trong những ngôn ngữ lâu đời nhất ngoài kia và đã là vật cố định vĩnh viễn trong * nix trong nhiều thập kỷ theo nghĩa đen. Mặc dù vậy, nó không được biết đến nhiều, có lẽ là do cú pháp RPN phức tạp và không dễ đọc của nó. Tuyệt vời cho một số thử thách chơi gôn mã ;-)
Chấn thương kỹ thuật số

12

Bash + coreutils, 56 byte

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

Như may mắn sẽ có, thêm 7 vào giá trị ascii của các ký tự holed mang lại tất cả các ký tự không bị xóa (ngoại trừ "9"). Vì vậy, chúng tôi chỉ thực hiện chuyển đổi này theo chiều ngược lại, sau đó chuyển đổi tương tự (trừ 12 từ "E") để có được "9".

Đầu ra:

#$%&0468@ABDOPQRabdegopq
9

7
Tôi thích cách dòng đầu tiên trừ 7 từ một loạt các ký tự và nó chứa một -7cách hiển thị rõ ràng giữa các ký tự dấu chấm câu và 2 sự thật đó không liên quan gì đến nhau.

@ WumpusQ.Wumbley tôi thậm chí không nhận thấy điều đó :)
Chấn thương kỹ thuật số

6

Perl - 49 byte

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

Đây là khá nhiều phiên bản Perl của giải pháp của Howard. XOR chuỗi với 25. Đầu ra là một tệp có tên #$%&04689@ABDOPQRabdegopq. Tôi có ý tưởng sử dụng symlinkvà tên tệp là định dạng đầu ra vì mọi thứ khác đều bị cấm.

Đây là một giải pháp Perl khác mà tôi đã đưa ra. Nó có thể được cải thiện rất nhiều và nó khá dài, vì vậy bây giờ tôi đang để lại một định dạng dễ đọc.

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

Cái này xuất ra nhiều tệp, tên của mỗi cái là một trong các ký tự. Tôi không thể tìm ra cách nối các chuỗi mà không sử dụng ký tự bị cấm.

for, while, map, say, print, eval, s///e, Và bất kỳ tên biến không thể được sử dụng (các biến bắt đầu với @hoặc $trong Perl) mà thực hiện điều này khó khăn.

Hy vọng rằng tên tệp ổn ở định dạng đầu ra vì tôi khá chắc chắn rằng mọi cách khác để thông tin đầu ra sử dụng một trong các ký tự bị cấm.


Tôi sẽ cho bạn +1 cho sự sáng tạo! Sử dụng mã rất thông minh!
WallyWest

Tôi biết điều này khá cũ, nhưng có thể in đầu ra ra màn hình và lưu một vài byte bằng -pcờ và *_=\(... ): Hãy thử trực tuyến!
Dom Hastings

@DomHastings mát mẻ! Tôi nghĩ rằng -pcờ sẽ bị cấm mặc dù pcó một lỗ.
hmatt1

5

MATLAB, 36 byte

SO ĐÓNG .... Chỉ nhiều hơn 1 byte so với người chiến thắng hiện tại (isaacg)! Mà, khi kiểm tra thêm, đã làm những gì tôi đặt ra để làm quá. Chà, không có hại trong việc phát minh lại bánh xe ...

Tôi biết đây là một thử thách cũ, nhưng tôi chỉ nhận ra rằng sau khi tôi có hứng thú với nó.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Giá như tôi có thể khiến MATLAB hiểu rằng tôi muốn một chuỗi không có ''... gợi ý riêng biệt , có ai không?


4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck, ngôn ngữ bí truyền tuyệt đỉnh (ngoài Whitespace);)


1
Vui lòng xóa các đoạn cũ, không tấn công.
isaacg

2
Tôi thấy bạn đã sử dụng các điều trích dẫn (không biết tên thật) cho đoạn mã của bạn. Có thể dễ dàng hơn để chọn mã của bạn và nhấn Ctrl+ K:)
Teun Pronk

@isaacg Xong. TeunPronk, xong rồi!
WallyWest

6
Hoặc chỉ cần nhấn phím cách 4 lần nếu đó chỉ là một hoặc hai dòng. @TeunPronk Cái này? `Đó là một backtick. (Cũng được gọi là một giọng nghiêm trọng, mặc dù " quote thingies " là một cái mới đối với tôi: P)
Doorknob

1
@Doorknob Sau đó, cả hai chúng tôi đã học được điều gì đó ngày hôm nay mặc dù những gì bạn học được là dù sao đi nữa: P
Teun Pronk

4

JS - 196 - hãy thử nó

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')

1
Trời ạ, điều này thật điên rồ. Có vẻ như Js là một trong những ngôn ngữ dễ sử dụng nhất =)
flawr

Có thể sử dụng được, nhưng đây chỉ là một đốm nhỏ so với mục nhập của tôi ... Xin lỗi @bebe nhưng tôi đã ra khỏi bạn lần này ...
WallyWest

1
@WallyWest tôi tuyên chiến.
bebe

1
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- nội tuyến l, rút ​​gọn m, khai báoi khi sử dụng lần đầu, tạo thêm một vài lọ cho các mẫu lặp lại (bạn có thể cải thiện điều này bằng cách điều chỉnh thứ tự các ký tự được xuất ra, nhưng điều đó vượt quá sự kiên nhẫn của tôi: P).
Alconja

2

GolfScript, 89 ký tự

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Đơn giản chỉ cần xây dựng một mảng gồm tất cả các ký tự ASCII và trừ các ký tự không "ẩn" khỏi chúng.

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string

2

Befunge 98 - 69 byte

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

Liệu nó có 3 phần. Một trong đó các giá trị ký tự không được tách biệt khác với ký tự holed bằng 5. Sau đó, các giá trị khác nhau bằng 1, và cuối cùng là danh sách các ký tự không được phân biệt khác nhau 3 so với ký tự holed. Hướng dẫn chương trình chấm dứt trong Befunge là "@" (giá trị char 64), vậy cuối cùng tôi tải "?" (giá trị char 63) thêm 1 rồi đặt mã đó vào mã với lệnh 's'.

Tôi có thể chơi golf nhiều hơn bằng cách hợp nhất ba

>:5j2 ,(differ value)_

phần, nhưng có lẽ không nhiều.


2

JavaScript 240 228

Trình ban đầu:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

Bây giờ, đây là một khởi đầu tuyệt vời, đây là cách nó bị phá vỡ ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

Và rồi tôi nghĩ ... "Phải có một cách đơn giản hơn ..." và có ...

Gửi lại sửa đổi: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

Thấy tôi có thể sử dụng eval (bằng cách ghép nó lại với nhau, cảm hứng từ @bebe; đó là nhanh hơn rất nhiều so với việc sử dụng constructorcủa một constructorcủa một number...) Tôi khoan nó xuống 228 ... Tôi biết nó có thể không giành chiến thắng này đặc biệt Golf Challenge , nhưng đây chỉ là cách tôi thể hiện mức độ bạn có thể lạm dụng JavaScript và vẫn nhận được kết quả mong muốn ...


2

Chính - Mất ngủ , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Nó xuất ra:

abdegopq04689@ABDOPQR#$%&

Tiền thưởng - Mất ngủ, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Nó xuất ra:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Tôi nghĩ rằng có thể giảm thời lượng của chương trình nếu đầu ra được sắp xếp lại, nhưng tôi cần sửa đổi chương trình tìm kiếm của mình để làm điều này.

Chỉ để hiển thị trường hợp một ngôn ngữ khác có khả năng hoạt động với số lượng ký tự bị hạn chế. Nhân tiện, nó có thể viết bất kỳ đầu ra nào chỉ với 3 ký tự duy nhất trong nguồn.

Hiện tại, đây là ngôn ngữ duy nhất có thể thực hiện cả thử thách chính và phần thưởng trong số tất cả các câu trả lời hiện có.

Thông dịch viên mất ngủ .


1

Befunge 98 - 46 byte

Phiên bản Befunge-ified của mục nhập Pyth của isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <

1

Japt , 33 byte

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

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

Thuật toán tương tự như đệ trình Pyth của isaacg , tình cờ ngắn hơn trong Japt.

Làm thế nào nó hoạt động

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

7+2           Obviously the number 9
    "..."c-7  Apply -7 on each char's charcode of this string
   +          String concatenation

Vâng, đó là JS, một trong những ngôn ngữ dễ sử dụng nhất , chỉ ngắn hơn (và bạn không cần alerthoặc console.logở đây).

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.