สัญลักษณ์กับตัวอักษร


17

สัญลักษณ์กับตัวอักษร

อักขระ ASCIIได้ถูกแบ่งออกครั้งเดียวอีกครั้ง ! ชุดของคุณมีจดหมายและสัญลักษณ์

จดหมาย

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

สัญลักษณ์

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

ภารกิจคือการเขียนโปรแกรมสองโปรแกรม:

  1. พิมพ์ตัวอักษรแต่ละตัวเพียงครั้งเดียวโดยไม่ต้องใช้ตัวอักษรใด ๆ ในโปรแกรมของคุณ

  2. พิมพ์The Symbolsแต่ละครั้งโดยไม่ต้องใช้สัญลักษณ์ใด ๆ ในโปรแกรมของคุณ

กฎระเบียบ

  • ช่องว่างอาจปรากฏในโปรแกรมหรือผลลัพธ์ของคุณ
  • ไม่อนุญาตให้ใช้อักขระที่ไม่ใช่ ASCII
  • เอาท์พุทไปที่ออกมาตรฐานหรือไฟล์เป็นเนื้อหาหรือชื่อของไฟล์
  • ไม่มีอินพุต
  • เอาต์พุตต้องมีอักขระ ASCII จากชุดหนึ่งหรืออีกชุดเท่านั้น
  • โปรแกรมสามารถเขียนในภาษาต่าง ๆ หรือภาษาเดียวกันโดยมีข้อยกเว้นหนึ่งข้อ:
  • ภาษาช่องว่างอาจจะใช้เฉพาะสำหรับโปรแกรมใดโปรแกรมหนึ่ง
  • ช่องโหว่มาตรฐานใช้

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

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

คะแนนต่ำสุดชนะ!

บันทึก:

เพื่อสนับสนุนการส่งมากขึ้นคุณยังอาจโพสต์คำตอบด้วยวิธีแก้ปัญหาสำหรับหนึ่งในโปรแกรม คุณจะไม่สามารถชนะ แต่คุณจะยังสามารถอวดสิ่งที่ยอดเยี่ยม

ขอขอบคุณที่คาลวินอดิเรกสำหรับแรงบันดาลใจความคิดของเขากับคำถามก่อนหน้านี้


4
นี่เป็นไปไม่ได้ในภาษาส่วนใหญ่ ... ตัวอย่างใน Haskell = ไม่สามารถหลบหนีได้
ภูมิใจ haskeller

1
@proudhaskeller ส่วนหนึ่งของความท้าทายคือการเลือกภาษาที่เป็นไปได้
hmatt1

(ฉันรู้ว่าฉันควรคิดถึงสิ่งนี้ในขณะที่คำถามอยู่ในกล่องทราย แต่) เนื่องจากกฎ "ช่องว่างอาจปรากฏในผลลัพธ์" นี่หมายถึงลำดับของ (ตัวอักษร | สัญลักษณ์) ไม่สำคัญหรือไม่
FireFly

@FireFly คำสั่งใด ๆ ก็ดี
hmatt1

อนุญาตให้มีอักขระควบคุม (codepoints 0 ถึง 31 และ 127) ในโปรแกรมของคุณหรือไม่
FUZxxl

คำตอบ:


7

ทั้งหมด: 53 ตัวอักษร

รวมเป็นภาษาเดียว: 230 ตัวอักษร Pyth

ตอนที่ 1: Golfscript, 15

91,65>123,97>++

ขาออก:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

คำอธิบาย:

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.

ส่วนที่ 2: Pyth , 38

JhCeGLjkmCdbsrCdCPhGsrhCPeGChGsrJhhhhJ

ขาออก:

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

คำอธิบาย:

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)))

ทางออกโบนัส:

ส่วนที่ 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

คำอธิบาย:

$"%\143"$=> "% c" $สวิทช์ไปและกลับจากสไตล์การแยกหลามและในหลามสตริงแยกเป็นลำดับหนีฐานแปด\143 cคำตอบนี้เทียบเท่ากับรหัสสไตล์ Python ต่อไปนี้:

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

แน่นอนว่าวิธีนี้ใช้ไม่ได้กับ Python เนื่องจากการพิมพ์ใน Python ใช้printแต่การพิมพ์ใน Pyth นั้นเป็นนัยดังนั้นจึงใช้งานได้


โซลูชัน Pyth ไม่ใช้คุณสมบัติใด ๆ ที่เพิ่มเข้ามานับตั้งแต่มีการถามคำถาม


ฉันจะเรียน Pyth ได้ที่ไหน จากตัวอย่างเหรอ?
Soham Chowdhury

@SohamChowdhury ตัวอย่างเป็นจุดเริ่มต้นที่ดี การอ่านเอกสารน่าจะเป็นขั้นตอนต่อไป - doc.txt ในไดเรกทอรีหลัก ขั้นตอนสุดท้ายคือการเริ่มเล่นด้วยตัวเองโดยใช้แฟล็ก -d (debug) ซอฟต์แวร์ใหม่มากและไม่มีอะไรดีกว่าอยู่แล้ว เท่าที่ฉันรู้มีเพียง 3 คนที่เคยใช้มันและฉันก็เป็นคนเดียวที่ได้ใช้มันเป็นประจำ ขอให้โชคดีเพลิดเพลินไปกับ
isaacg

23

Python (สัญลักษณ์, 87 82)

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

ฉันรักโมดูลสตริงของ Python ...

แก้ไข:

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

เอาท์พุท:

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

FALSE (ตัวอักษร, 21) DUP (ตัวอักษร, 20):

โซลูชัน FALSE:

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

DUP sollution (สั้นลง 1 ถ่าน)

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

เอาต์พุต (สำหรับทั้งคู่):

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

ล่ามสำหรับ FALSE


ทั้งหมด: 102


1
ว้าวดีมาก! ฉันเคยเห็นคนพูดว่านี่ไม่สามารถทำได้ในหลามทำได้ดีมาก
hmatt1

from string import*ทำงานได้ดีเท่า ๆ กันและลดจำนวนไบต์
aglasser

5
@aglasser ... แต่การใช้*ถูกห้ามในบริบทนี้ ...
--ıʇǝɥʇuʎs

4
คุณพูดถูกไม่น่าเชื่อว่าฉันลืม * เป็นสัญลักษณ์ฮ่าฮ่า นั่นอธิบายว่าทำไมคุณไม่ทำfrom string import punctuation, digitsอย่างใดอย่างหนึ่ง ทางออกที่ดีที่เป็นไปตามกฎ ขออภัยเกี่ยวกับความผิดพลาดของฉัน!
aglasser

13

GolfScript (14 ตัวอักษร) + Deadfish x (116 ตัวอักษร) = 130 ตัวอักษร

91,65>{.32+}%+

และ

xxcxxcdddKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKDxxxccxxxxxxxxxxKxKxKxKxKxKDxxxcxxcxxKxKxKxK

2
+1 สำหรับการโพสต์แรกของสี่โพสต์จริงๆแล้วตอบทั้งสองส่วน
Geobits

10

ส่วนที่ 1 และ 2 ใน Ruby 2, 56 + 484 = 540

ส่วนที่ 1:

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับทับทิมสไตล์นี้ลองดูสิ narfnme

ส่วนที่ 2 (บิตนี้เป็น Ruby 2.0+ เท่านั้นทำงานได้อย่างสมบูรณ์แบบกับ ruby-2.1.0 แต่อาจให้คำเตือนในรุ่นก่อนหน้า):

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

อันนั้นยาก โทรในตัววิธี Fixnum ชอบchrและsuccต้องเปิดขึ้นชั้น Fixnum และกําหนดinspectตั้งแต่ฉันสามารถเรียกเรียกร้องให้มีx.inspect p xฉันต้องการตรวจสอบเพื่อส่งคืนnilเพื่อที่pจะพิมพ์บรรทัดใหม่เท่านั้นสตริงใด ๆ จะถูกใส่กรอบด้วยเครื่องหมายคำพูดคู่ แต่เป็นผลข้างเคียงก็ลูป ฉันสามารถยุติลูปแรกและลูปที่สองโดยใช้การเปรียบเทียบสตริงเพื่อดูเมื่อฉันถึงช่วงตัวอักษร แต่เนื่องจากฉันไม่สามารถเขียนสตริงตัวอักษรฉันต้องได้รับหนึ่งโดยการโทรString()สัญลักษณ์กลับ (ในทับทิม 2) โดยdefคำหลัก เนื่องจากเป็นไวยากรณ์หลายบรรทัดและฉันสามารถทำการเปรียบเทียบสตริงได้เท่านั้นcaseซึ่งไม่สามารถใช้สำนวนหลายบรรทัดได้ฉันต้องห่อหุ้มตัวอักษรด้วยวิธีการ (เนื่องจากเห็นได้ชัดว่าฉันไม่สามารถทำงานได้) ลูปสุดท้ายยากต่อการยกเลิก ~ฉันต้องการมันจะหยุดที่ โชคดีที่ตัวละคร ascii ในช่วงนั้นเพื่อตรวจจับเมื่อฉันอยู่ที่จุดสิ้นสุดและหยุดการวนซ้ำ~ เป็นคนเดียวที่สามารถเรียกใช้บน Fixnum โดยไม่มีข้อโต้แย้งโดยไม่เพิ่มข้อผิดพลาดดังนั้นฉันจึงสามารถใช้ send chr

ไม่ใช่คะแนนที่ดีที่สุดในหัวข้อนี้ แต่จนถึงตอนนี้มีเพียงภาษาเดียวที่ใช้ภาษาเดียวกันสำหรับทั้งสองส่วน ยายทับทิม


1
+1 ก่อนที่คำตอบที่ 2 ของคุณจะรู้ว่ามันจะมา เคารพการผลักดันความยืดหยุ่นของ Ruby ให้ถึงขีด จำกัด
Vectorized

+1 สำหรับคำตอบแรก / คำตอบเดียวที่ให้ทั้งสองโปรแกรมในภาษาเดียวกัน จนถึงตอนนี้เป็น IMO ผู้ชนะที่ชัดเจน ฉันไม่ได้ติดตั้ง Ruby 2 แต่เชื่อใจได้ว่างานนี้
บาดเจ็บทางดิจิตอล

8

ส่วนที่ 2 ใน Applescript, 654

รอ ... หน้า " เคล็ดลับสำหรับการเล่นกอล์ฟใน Applescript " อยู่ที่ไหน

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

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันรู้ว่าจะมีการแก้ปัญหา Applescript ที่นี่มี +1
ɐɔıʇǝɥʇuʎs

4

CJam + AlphaBeta 62 ไบต์


ตัวอักษรCJamขนาด 12 ไบต์

"[{"{,-26>}/

ลองออนไลน์!

เอาท์พุต

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

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

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

สัญลักษณ์, AlphaBeta , 50 ไบต์

ZaaAccctFUaCLOrEbbCLbCLbCLbCLdddACLbCLbCLgDLgDLgDL

ลองออนไลน์!

ล่าม C ++ อย่างเป็นทางการมีข้อผิดพลาดที่ทำให้เกิดลูปเป็นไปไม่ได้และฉันไม่สามารถหาวิธีใช้ล่าม Lua ได้ ฉันแก้ไขข้อผิดพลาดนั้น คุณสามารถตรวจสอบว่ามันทำงานได้ตามที่ตั้งใจไว้โดยการรันโปรแกรมตัวอย่างจากหน้า EsoLang

เอาท์พุต

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

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

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

ส่วนที่ 1 ใน BrainFuck: 80 74 ไบต์

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

คุณอาจสูญเสียอันดับแรก>เนื่องจากการเยื้องรหัสที่ขาดหายไป ดังนั้นจึงแสดงเป็นคำพูด
Falko

@Falko ขอบคุณสำหรับการสังเกตฉันพลาด
spocot

3

รวม 318 ไบต์

ฉันหวังว่าจะได้คำตอบสำหรับโปรแกรมทั้งสองในภาษาเดียวกัน แต่ก็ยังไม่มีอะไรเกิดขึ้น นี่คือสิ่งนี้แทน:

ส่วนที่ 1: ทุบตีบริสุทธิ์ 129 ไบต์

_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,,}

เอาท์พุท:

$ ./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
$ 

ส่วนที่ 2: GNU dc, 189 ไบต์

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzBDPBEdPBFPdkvZP

เอาท์พุท:

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

2

คุณก็รู้ว่าบางคนควรจะทำมันต่อไป

ส่วนที่ 1 ใน BrainFuck: 174 ไบต์

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

1

ส่วนที่ 1: ทับทิม 45 ไบต์

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

คำอธิบาย

  • ช่วงที่มี az ( ?@...?[) และช่วงที่มี AZ ( ?`...?{) กลายเป็นองค์ประกอบของอาร์เรย์_โดยใช้ตัวดำเนินการเครื่องหมาย (* )
  • องค์ประกอบ 0 ( "@") และองค์ประกอบที่ 27 ( "`") ของอาร์เรย์มีการกำหนดให้_nil
  • อาร์เรย์_ถูกรวมเข้าด้วยกันโดยใช้Array#*และพิมพ์ไปยัง stdout ( $>)

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