Simbol vs. Surat

17

Simbol vs. Surat

The karakter ASCII telah dibagi sekali lagi ! Set Anda adalah The Letters and The Symbols .

Surat-surat

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Simbol

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

Tugasnya adalah menulis dua program:

  1. Cetak masing-masing Surat tepat sekali tanpa menggunakan salah satu dari mereka dalam program Anda.

  2. Cetak masing-masing Simbol tepat sekali tanpa menggunakan salah satu dari mereka dalam program Anda.

Aturan

  • Ruang kosong dapat muncul di program Anda atau output.
  • Karakter non-ASCII tidak diperbolehkan.
  • Output pergi ke standar keluar atau ke file sebagai isi atau nama file.
  • Tidak ada input
  • Output hanya harus mengandung karakter ASCII dari satu set atau yang lain.
  • Program dapat ditulis dalam berbagai bahasa atau bahasa yang sama dengan satu pengecualian:
  • Bahasa Whitespace hanya dapat digunakan untuk salah satu program.
  • Celah standar berlaku.

Mencetak gol

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

Menang skor terendah!

catatan:

Untuk mendorong lebih banyak kiriman, Anda masih dapat memposting jawaban dengan solusi hanya untuk salah satu program. Anda tidak akan bisa menang, tetapi Anda masih bisa memamerkan sesuatu yang keren.

Terima kasih kepada Calvin Hobbies karena mengilhami gagasan itu dengan pertanyaan sebelumnya .

hmatt1
sumber
4
Ini tidak mungkin di sebagian besar bahasa ... Misalnya di Haskell = tidak dapat dihindari
bangga haskeller
1
@proudhaskeller bagian dari tantangannya adalah memilih bahasa yang memungkinkan.
hmatt1
(Saya sadar saya seharusnya memikirkan hal ini ketika pertanyaannya ada di kotak pasir, tetapi) mengingat aturan "spasi putih mungkin muncul dalam output", apakah ini berarti urutan (huruf | simbol) tidak masalah?
FireFly
@ FireFly pesanan apa pun baik-baik saja.
hmatt1
Apakah diizinkan memiliki karakter kontrol (titik kode 0 hingga 31 dan 127) di program Anda?
FUZxxl

Jawaban:

7

Total: 53 karakter

Total dalam satu bahasa: 230 karakter, Pyth

Bagian 1: Golfscript, 15

91,65>123,97>++

Output:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Penjelasan:

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.

Bagian 2: Pyth , 38

JhCeGLjkmCdbsrCdCPhGsrhCPeGChGsrJhhhhJ

Output:

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

Penjelasan:

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

Solusi bonus:

Bagian 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

Penjelasan:

$"%\143"$=> "% c". $beralih ke dan dari gaya parsing Python, dan dalam string parsing Python, \143adalah urutan pelarian oktal untuk c. Dengan demikian, jawaban ini setara dengan kode gaya Python berikut:

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

Tentu saja, ini tidak berfungsi dalam Python, karena mencetak menggunakan Python print, tetapi mencetak dalam Pyth adalah implisit, jadi ia bekerja.


Solusi Pyth tidak menggunakan salah satu fitur yang ditambahkan sejak pertanyaan diajukan.

isaacg
sumber
Di mana saya belajar Pyth? Dari contohnya?
Soham Chowdhury
@SohamChowdhury Contoh-contohnya adalah tempat yang baik untuk memulai. Membaca dokumen mungkin adalah langkah selanjutnya - doc.txt di direktori utama. Langkah terakhir adalah mulai bermain sendiri, menggunakan flag -d (debug). Perangkat lunak ini sangat baru dan tidak ada yang lebih baik. Sejauh yang saya tahu, hanya 3 orang yang pernah menggunakannya, dan saya satu-satunya yang menggunakannya secara teratur. Semoga beruntung, selamat menikmati.
isaacg
23

Python (Simbol, 87 82)

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

Saya suka modul string Python ...

Edit:

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

Keluaran:

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

FALSE (Letters, 21) DUP (Letters, 20):

Solusi SALAH:

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

Solusi DUP (1 char lebih pendek)

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

Output (untuk keduanya):

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Penerjemah untuk FALSE.


Total: 102

ɐɔıʇǝɥʇu
sumber
1
Wow bagus! Saya pernah melihat orang mengatakan ini tidak bisa dilakukan dengan python, bagus sekali.
hmatt1
from string import*berfungsi sama baiknya dan mengurangi jumlah byte.
aglasser
5
@ aglasser ... tetapi menggunakan *dilarang dalam konteks ini ...
22ıʇǝɥʇuʎs
4
Anda benar, tidak percaya saya lupa * adalah simbol haha. Itu menjelaskan mengapa Anda tidak melakukan from string import punctuation, digitskeduanya. Solusi bagus yang mengikuti aturan. Maaf tentang kesalahan saya!
Aglasser
13

GolfScript (14 karakter) + Deadfish x (116 karakter) = 130 karakter

91,65>{.32+}%+

dan

xxcxxcdddKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKxKDxxxccxxxxxxxxxxKxKxKxKxKxKDxxxcxxcxxKxKxKxK
Peter Taylor
sumber
2
+1 untuk menjadi yang pertama dari empat pos sejauh ini sebenarnya menjawab kedua bagian.
Geobits
10

Bagian 1 dan 2 di Ruby 2, 56 + 484 = 540

Bagian 1:

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

Untuk lebih lanjut tentang gaya Ruby ini, periksa narfnme .

Bagian 2 (bit ini hanya untuk Ruby 2.0+, berfungsi sempurna dengan ruby-2.1.0 tetapi dapat memberikan peringatan di versi sebelumnya):

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

Yang itu susah. Memanggil metode Fixnum built-in suka chrdan succmembutuhkan membuka kelas Fixnum dan mendefinisikan ulang inspect, karena saya dapat memicu panggilan untuk x.inspectdengannya p x. Saya perlu memeriksa untuk kembali nilsehingga phanya akan mencetak baris baru, string apa pun akan dibingkai dengan tanda kutip ganda. Tetapi sebagai efek samping, itu loop. Saya dapat mengakhiri loop pertama dan loop kedua menggunakan perbandingan string untuk melihat ketika saya telah mencapai rentang huruf, tetapi karena saya tidak dapat menulis string literal saya perlu mendapatkannya dengan memanggil String()simbol yang dikembalikan (dalam Ruby 2) oleh defkata kunci. Karena itu adalah sintaks multiline dan saya hanya bisa melakukan perbandingan string melaluicase, yang tidak dapat mengambil ekspresi multiline, saya perlu membungkus literal dalam suatu metode (karena saya jelas tidak dapat melakukan tugas). Loop terakhir lebih sulit untuk diakhiri. Saya membutuhkannya untuk berhenti ~. Untungnya, dari karakter ascii dalam rentang itu, ~adalah satu-satunya yang dapat dipanggil pada Fixnum tanpa argumen tanpa memunculkan kesalahan, jadi saya dapat menggunakannya send chruntuk mendeteksi kapan saya di akhir dan berhenti mengulang.

Bukan skor terbaik di utas ini, tetapi sejauh ini satu-satunya yang menggunakan bahasa yang sama untuk kedua bagian. Yay Ruby.

histokrat
sumber
1
Diberi +1 bahkan sebelum jawaban kedua Anda, karena tahu itu akan datang. Penghargaan karena mendorong fleksibilitas Ruby hingga batasnya.
Vektor
+1 untuk jawaban pertama / hanya yang menyediakan kedua program dalam bahasa yang sama. Sejauh ini jelas pemenang IMO. Saya belum menginstal Ruby 2, tetapi percaya ini berhasil.
Digital Trauma
8

Bagian 2 dalam Applescript, 654

tunggu ... di mana halaman " tips untuk bermain golf di 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

Keluaran:

masukkan deskripsi gambar di sini

Trauma Digital
sumber
1
Saya tahu akan ada pembubaran Applescript. Di sini, dapatkan +1.
ɐɔıʇǝɥʇu
4

CJam + AlphaBeta , 62 byte


Surat, CJam , 12 byte

"[{"{,-26>}/

Cobalah online!

Keluaran

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Bagaimana itu bekerja

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

Simbol, AlphaBeta , 50 byte

ZaaAccctFUaCLOrEbbCLbCLbCLbCLdddACLbCLbCLgDLgDLgDL

Cobalah online!

Penerjemah resmi C ++ memiliki bug yang membuat loop tidak mungkin dan saya tidak tahu bagaimana cara menggunakan juru bahasa Lua. Saya memperbaiki bug itu. Anda dapat memverifikasi bahwa itu berfungsi sebagaimana dimaksud dengan menjalankan contoh program dari halaman EsoLang.

Keluaran

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

Bagaimana itu bekerja

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.
Dennis
sumber
3

Bagian 1 di BrainFuck: 80 74 byte

>-[+>+<[+<]>]>+.<<+++++[>+++++[>+.<-]<-]>>+++++++.<<+++++[>+++++[>+.<-]<-]
spocot
sumber
Anda mungkin kehilangan yang pertama >karena lekukan kode yang hilang. Jadi itu diberikan sebagai kutipan.
Falko
@ Falko Terima kasih telah memperhatikan, saya melewatkan itu.
spocot
3

Total 318 byte

Saya benar-benar berharap untuk menemukan jawaban dengan kedua program dalam bahasa yang sama, tetapi sejauh ini tidak ada. Ini dia sebagai gantinya:

Bagian 1: Bash murni, 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,,}

Keluaran:

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

Bagian 2: GNU dc, 189 byte

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzBDPBEdPBFPdkvZP

Keluaran:

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

Nah, Anda tahu, seseorang harus melakukannya.

Bagian 1 di BrainFuck: 174 byte

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+++++++
.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.
Yasen
sumber
1

Bagian 1: Ruby, 45 byte

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

Penjelasan

  • Rentang yang mengandung az ( ?@...?[) dan Rentang yang mengandung AZ ( ?`...?{) menjadi elemen dari array _menggunakan operator percikan (* ).
  • Elemen 0th ( "@") dan 27th elemen ( "`") dari array _diatur ke nil.
  • Array _digabung bersama menggunakan Array#*dan dicetak ke stdout ( $>)
britishtea
sumber
Anda dapat mengganti *$_di baris kedua dengan p(atau []).
Jordan