Các biểu tượng so với các chữ cái


17

Các biểu tượng so với các chữ cái

Các ký tự ASCII đã được chia một lần nữa ! Bộ của bạn là The Letters and The Symbols .

Bức thư

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Các biểu tượng

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

Nhiệm vụ là viết hai chương trình:

  1. In từng Thư chính xác một lần mà không sử dụng bất kỳ thư nào trong chương trình của bạn.

  2. In từng Biểu tượng chính xác một lần mà không sử dụng bất kỳ biểu tượng nào trong chương trình của bạn.

Quy tắc

  • Khoảng trắng có thể xuất hiện trong chương trình của bạn hoặc đầu ra.
  • Các ký tự không phải ASCII không được phép.
  • Đầu ra đi ra tiêu chuẩn hoặc một tệp dưới dạng nội dung hoặc tên của tệp.
  • Không có đầu vào.
  • Đầu ra chỉ phải chứa các ký tự ASCII từ bộ này hoặc bộ kia.
  • Các chương trình có thể được viết bằng các ngôn ngữ khác nhau hoặc cùng một ngôn ngữ với một ngoại lệ:
  • Các ngôn ngữ Khoảng trắng chỉ có thể được sử dụng cho một trong những chương trình này.
  • Tiêu chuẩn áp dụng.

Chấm điểm

# of characters in program 1 +# of characters in program 2 =Score

Điểm số thấp nhất chiến thắng!

Ghi chú:

Để khuyến khích gửi nhiều hơn, bạn vẫn có thể đăng câu trả lời với một giải pháp cho chỉ một trong các chương trình. Bạn sẽ không thể giành chiến thắng, nhưng bạn vẫn có thể thể hiện điều gì đó hay ho.

Cảm ơn Sở thích của Calvin đã truyền cảm hứng cho ý tưởng này bằng câu hỏi trước đó của anh ấy .


4
Điều này không thể thực hiện được trong hầu hết các ngôn ngữ ... Ví dụ: trong Haskell = không thể truy cập được
tự hào

1
@proudhaskeller một phần của thử thách là chọn một ngôn ngữ có thể.
hmatt1

(Tôi nhận ra rằng tôi nên nghĩ về điều này trong khi câu hỏi nằm trong hộp cát, nhưng) với quy tắc "khoảng trắng có thể xuất hiện trong đầu ra", điều này có nghĩa là thứ tự của (các ký hiệu | ký hiệu) không thành vấn đề?
FireFly

@FireFly mọi đơn hàng đều ổn.
hmatt1

Có được phép có các ký tự điều khiển (điểm mã 0 đến 31 và 127) trong chương trình của bạn không?
FUZxxl

Câu trả lời:


7

Tổng cộng: 53 ký tự

Tổng cộng trong một ngôn ngữ: 230 ký tự, Pyth

Phần 1: Golfs, 15

91,65>123,97>++

Đầu ra:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Giải trình:

91,           Make the list, [0 1 .. 90]
65>           Take elements after the 65th, [65 66 .. 90]
123,97>       Same, but [97 98 .. 122]
+             Add the list above to the newline character that is automatically pushed to 
              the stack. List + str coerces to string by ascii encoding.
+             Same, for the other list.

Phần 2: Pyth , 38

JhCeGLjkmCdbsrCdCPhGsrhCPeGChGsrJhhhhJ

Đầu ra:

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

Giải trình:

G = "abcdefghijklmnopqrstuvwxyz"   Implicit.
k = ""                             Implicit.
d = " "                            Implicit.
JhCeG                              J = 1 + chr(end(G))          # J = 123
L                                  def d(b): return
 jk                                                k.join(
   m                                                      map(lambda d:
    Cd                                                                 chr(d),
    b                                                                  b))
s                                  print(s(                    #print is implicit.
 rCd                               range(chr(d),                 # chr(d) = 32
 CPhG                                    chr(upper(head(G))))    # chr("A") = 65
srhCPeGChG                         print(s(range(1+chr(upper(end(G))),chr(head(G)))
srJhhhhJ                           print(s(range(J, 1+1+1+1+J)))

Giải pháp thưởng:

Phần 1: Pyth, 192

%*$"%\143"$52(65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

Giải trình:

$"%\143"$=> "% c". $chuyển sang và từ kiểu phân tích cú pháp Python và trong phân tích chuỗi Python, \143là chuỗi thoát bát phân cho c. Do đó, câu trả lời này tương đương với mã kiểu Python sau:

("%c" * 52) % (65, 66, 67, ...)

Tất nhiên, điều này không hoạt động trong Python, vì in bằng Python sử dụng print, nhưng in bằng Pyth là ẩn, nên nó hoạt động.


Các giải pháp Pyth không sử dụng bất kỳ tính năng nào được thêm vào kể từ khi câu hỏi được hỏi.


Tôi học Pyth ở đâu? Từ những ví dụ?
Soham Chowdhury

@SohamChowdhury Các ví dụ là một nơi tốt để bắt đầu. Đọc tài liệu có lẽ là bước tiếp theo - doc.txt trong thư mục chính. Bước cuối cùng là bắt đầu chơi với chính nó, sử dụng cờ -d (gỡ lỗi). Phần mềm này rất mới và vì vậy không có gì tốt hơn tồn tại. Theo tôi biết, chỉ có 3 người đã từng sử dụng nó và tôi là người duy nhất sử dụng nó thường xuyên. Chúc may mắn, tận hưởng.
isaacg

23

Con trăn (Biểu tượng, 87 82)

from string import punctuation
from string import digits
print digits
print punctuation

Tôi chỉ thích mô-đun chuỗi của Python ...

Biên tập:

from string import punctuation as p
from string import digits as d
print d
print p

Đầu ra:

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

SAI (Thư, 21) DUP (Thư, 20):

Giải pháp FALSE:

65[$91\>][$,$32+,1+]#

Giải pháp DUP (ngắn hơn 1 char)

65[$91<][$,$32+,1+]#

Đầu ra (cho cả hai):

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Thông dịch viên cho FALSE.


Tổng cộng: 102


1
wow tốt đẹp Tôi đã thấy mọi người nói rằng điều này không thể được thực hiện ở trăn, cũng được thực hiện.
hmatt1

from string import*hoạt động tốt như nhau và cắt giảm số lượng byte.
aglasser

5
@aglasser ... nhưng việc sử dụng *bị cấm trong bối cảnh này ...
ɐɔI Augu ats

4
Bạn nói đúng, không thể tin rằng tôi đã quên * là một biểu tượng haha. Điều đó giải thích tại sao bạn không làm from string import punctuation, digits. Giải pháp tốt đẹp theo các quy tắc. Xin lỗi về sai lầm của tôi!
aglasser

13

GolfScript (14 ký tự) + Deadfish x (116 ký tự) = 130 ký tự

91,65>{.32+}%+

xxcxxcdddKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKDxxxccxxxxxxxxxxKxKxKxKxKxKDxxxcxxcxxKxKxKxK

2
+1 vì là bài đầu tiên trong bốn bài viết cho đến nay thực sự trả lời cả hai phần.
Geobits

10

Phần 1 và 2 trong Ruby 2, 56 + 484 = 540

Phần 1:

__=->_{(91..96)===_||$><<(''<<_);_>121||__[-~_]}
__[65]

Để biết thêm về phong cách này của Ruby, hãy xem narfnme .

Phần 2 (bit này chỉ là Ruby 2.0+, hoạt động hoàn hảo với ruby-2.1.0 nhưng có thể đưa ra cảnh báo trong các phiên bản trước):

class Fixnum
def c
String def a
end
end
def b
String def A
end
end
def x
String def z
end
end
def y
String def Z
end
end
def inspect
case chr
when c
when b
when y
p succ
else
print chr
p succ
end
p
rescue
p
end
end
def x
String def z
end
end
def y
String def Z
end
end
class String
def inspect
p size
p
end
end
p String p
class String
def inspect
p ord
p
end
end
p y
class Fixnum
def inspect
case chr
when x
p succ
else
send chr
print chr
p
end
p
rescue
print chr
p succ
p
end
end
p x

Đó là một khó khăn. Gọi các phương thức Fixnum tích hợp như chrsuccyêu cầu mở lớp Fixnum và xác định lại inspect, vì tôi có thể kích hoạt một cuộc gọi đến x.inspectvới p x. Tôi cần kiểm tra để trở lại nilđể pchỉ in một dòng mới, bất kỳ chuỗi nào sẽ được đóng khung trong dấu ngoặc kép. Nhưng như một tác dụng phụ, nó lặp lại. Tôi có thể chấm dứt vòng lặp thứ nhất và vòng lặp thứ hai bằng cách sử dụng so sánh chuỗi để xem khi nào tôi đạt đến một phạm vi chữ cái, nhưng vì tôi không thể viết một chuỗi ký tự, tôi cần lấy một chuỗi bằng cách gọi String()biểu tượng được trả về (trong Ruby 2) theo deftừ khóa. Vì đó là cú pháp đa dòng và tôi chỉ có thể thực hiện so sánh chuỗi quacase, không thể sử dụng các biểu thức đa dòng, tôi cần gói nghĩa đen theo một phương thức (vì rõ ràng tôi không thể thực hiện chuyển nhượng). Vòng lặp cuối cùng khó kết thúc hơn. Tôi cần nó dừng lại ở ~. May mắn thay, trong số các ký tự ascii trong phạm vi đó, ~là ký tự duy nhất có thể được gọi trên Fixnum mà không có đối số mà không gây ra lỗi, vì vậy tôi có thể sử dụng send chrđể phát hiện khi tôi ở cuối và dừng lặp.

Không phải là điểm số tốt nhất trong chủ đề này, nhưng cho đến nay là người duy nhất sử dụng cùng một ngôn ngữ cho cả hai phần. Yay Ruby.


1
+ 1'ed ngay cả trước câu trả lời thứ 2 của bạn, vì họ biết rằng nó sẽ đến. Tôn trọng để đẩy sự linh hoạt của Ruby đến giới hạn.
Vectorized

+1 cho câu trả lời đầu tiên / duy nhất cung cấp cả hai chương trình trong cùng một ngôn ngữ. Cho đến nay đây là IMO người chiến thắng rõ ràng. Tôi chưa cài đặt Ruby 2, nhưng tin tưởng vào công việc này.
Chấn thương kỹ thuật số

8

Phần 2 trong Applescript, 654

chờ đã ... trang " mẹo chơi golf trong Applescript " ở đâu?

global a
global b
global c
global s
on f at n
set end of b to a
end
on g at n
f at a
f at a
end
on h at n
g at a
g at a
end
on i at n
h at a
h at a
end
on j at n
repeat with t in system info
f at a
end
end
on m at n
set end of b to a
set c to count of b
set end of s to ASCII character c
end
on n at n
m at a
m at a
m at a
end
on o at n
repeat with t in system info
m at a
end
end
set a to random number
set b to a as list
j at a
j at a
set c to count of b
set s to ASCII character c
set s to s as list
o at a
n at a
n at a
n at a
n at a
n at a
j at a
i at a
g at a
f at a
n at a
m at a
m at a
j at a
i at a
g at a
n at a
m at a
display dialog s as text

Đầu ra:

nhập mô tả hình ảnh ở đây


1
Tôi biết sẽ có một bản tóm tắt Applescript. Ở đây, có +1.
ɐɔıʇǝɥʇuʎs

4

Camam + AlphaBeta , 62 byte


Bức thư, CJam , 12 byte

"[{"{,-26>}/

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

Đầu ra

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

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

"[{"{     }/   For each of the characters "[" and "{",
     ,         push an array of all ASCII characters before it
      -26>     and discard all but the last 26 characters.

Biểu tượng, AlphaBeta , 50 byte

ZaaAccctFUaCLOrEbbCLbCLbCLbCLdddACLbCLbCLgDLgDLgDL

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

Trình thông dịch C ++ chính thức có một lỗi khiến các vòng lặp không thể thực hiện được và tôi không thể tìm ra cách sử dụng trình thông dịch Lua. Tôi đã sửa lỗi đó. Bạn có thể xác minh rằng nó hoạt động như dự định bằng cách chạy các chương trình ví dụ từ trang EsoLang.

Đầu ra

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

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

Z      Switch register 4 to the position register.
aa     Set registers 1 to 2.
A      Copy the value from register 1 to register 2.
ccc    Add 30 to register 1 (result: 31).
tF     Set register 2 to the product of registers 1 and 2 (result: 64).
U      Add 10 to the position register (result: 10, i.e., the position of the next byte).
aCL    Add 1 to register 1 and print the corresponding ASCII character.
O      If register 1 != register 2, go to the position in the position register.
rEb    Set register 1 to the sum of registers 1 and 2 minus 1 (result: 127).
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
ddd    Subtract 30 from register 1 (result: 93).
A      Copy the value from register 1 to register 2.
CL     Print the ASCII character corresponding to register 1.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
bCL    Subtract 1 from register 1 and print the corresponding ASCII character.
gDL    Add 1 to register 2 and print the corresponding ASCII character.
gDL    Add 1 to register 2 and print the corresponding ASCII character.
gDL    Add 1 to register 2 and print the corresponding ASCII character.

3

Phần 1 trong BrainFuck: 80 74 byte

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

Bạn có thể đã mất đầu tiên >do thiếu thụt mã. Vì vậy, nó được kết xuất như một trích dẫn.
Falko

@Falko Cảm ơn bạn đã chú ý, tôi đã bỏ lỡ điều đó.
spocot

3

Tổng số 318 byte

Tôi đã thực sự hy vọng tìm ra một câu trả lời với cả hai chương trình trong cùng một ngôn ngữ, nhưng cho đến nay vẫn chưa có gì. Đây là cái này thay thế:

Phần 1: Bash thuần, 129 byte

_0=`$ 2>&1`
_0=${_0##*:}
_1=${_0:5:1}
_5=${_0:1:1}$_1${_0:11:1}
. <($_5<<<_2=\({${_1^}..$_1}\))
_3=${_2[@]:0:26}
$_5<<<$_3${_3,,}

Đầu ra:

$ ./letsym.sh
A B C D E F G H I J K L M N O P Q R S T U V W X Y Za b c d e f g h i j k l m n o p q r s t u v w x y z
$ 

Phần 2: GNU dc, 189 byte

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzBDPBEdPBFPdkvZP

Đầu ra:

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

2

Vâng, bạn biết đấy, ai đó nên làm cho nó đi.

Phần 1 trong BrainFuck: 174 byte

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+++++++
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.

1

Phần 1: Ruby, 45 byte

_=[*?@...?[,*?`...?{]
_[0],_[27]=*$_
$><<_*''

Giải trình

  • Phạm vi chứa az ( ?@...?[) và Phạm vi chứa AZ ( ?`...?{) trở thành các phần tử của mảng _bằng toán tử splat (* ).
  • Phần tử thứ 0 ( "@") và phần tử thứ 27 ( "`") của mảng _được đặt thành nil.
  • Mảng _được nối với nhau bằng cách sử dụng Array#*và in ra stdout ( $>)

Bạn có thể thay thế *$_trên dòng thứ hai bằng p(hoặc []).
Jordan
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.