Символи проти букв


17

Символи проти букв

У символах ASCII були розділені коли - то знову ! Ваші набори - Букви та Символи .

Букви

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Символи

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

Завдання - написати дві програми:

  1. Роздрукуйте кожне з листів рівно один раз, не використовуючи жодного з них у своїй програмі.

  2. Роздрукуйте кожен із символів рівно один раз, не використовуючи жодного з них у своїй програмі.

Правила

  • У вашій програмі або на виході може з’явитися пробіл.
  • Символи, що не належать до ASCII, заборонені.
  • Вихідні дані надходять у стандартний режим або у файл як вміст, так і ім'я файлу.
  • Немає даних.
  • Вихідні дані повинні містити лише символи ASCII з одного чи іншого набору.
  • Програми можуть бути написані різними мовами або однією і тією ж мовою за одним винятком:
  • Мова Whitespace може використовуватися лише для однієї з програм.
  • Застосовуються стандартні лазівки .

Оцінка балів

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

Найнижчий рахунок виграє!

Примітка:

Щоб заохотити більше подань, ви все ще можете опублікувати відповідь із рішенням лише для однієї з програм. Ви не зможете перемогти, але ви все одно зможете показати щось класне.

Дякуємо хобі Кальвіна, що надихнув ідею своїм попереднім запитанням .


4
Це неможливо на більшості мов ... Наприклад, у Haskell = неминуче
гордий haskeller

1
@proudhaskeller частина завдання - вибір мови, де це можливо.
hmatt1

(Я розумію, що я повинен був подумати про це, поки питання було в пісочниці, але) враховуючи правило "пробіл може з’явитися у вихідному" правилі, чи це означає, що порядок (літер | символів) не має значення?
FireFly

@FireFly будь-яке замовлення добре.
hmatt1

Чи дозволяється мати у вашій програмі контрольні символи (кодові точки від 0 до 31 та 127)?
FUZxxl

Відповіді:


7

Всього: 53 символи

Всього однією мовою: 230 символів, Pyth

Частина 1: Гольфскрипт, 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: Піт , 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: Піт, 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". $перемикається на стиль і з розбору стилю Python, і в синтаксичному розборі рядків Python \143є восьмеричною послідовністю відходу для c. Таким чином, ця відповідь еквівалентна наступному коду стилю Python:

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

Звичайно, це не працює в Python, оскільки для друку в Python використовується print, але друк у Pyth неявний, тому він працює.


Рішення Pyth не використовують жодної з функцій, доданих з моменту запитання.


Де я дізнаюся Pyth? З прикладів?
Soham Chowdhury

@SohamChowdhury Приклади - це гарне місце для початку. Читання документів, ймовірно, наступний крок - doc.txt у первинному каталозі. Останній крок - почати грати з ним самостійно, використовуючи прапор -d (налагодження). Програмне забезпечення дуже нове, тому нічого кращого не існує. Наскільки я знаю, його використовували лише 3 людини, і я єдиний, хто регулярно користувався нею. Удачі, насолоджуйтесь.
isaacg

23

Пітон (символи, 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
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

ХЛІБНА (Літери, 21) DUP (Літери, 20):

ЛІЖНЕ рішення:

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

Забруднення DUP (на 1 char коротше)

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

Вихід (для обох):

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Інтерпретатор для БАЖ.


Всього: 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 за те, що є першим із чотирьох досі повідомлень, насправді відповідає обом частинам.
Геобіц

10

Частини 1 і 2 у Ruby 2, 56 + 484 = 540

Частина 1:

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

Щоб дізнатися більше про цей стиль Ruby, перегляньте 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() символ, що повертається (у Ruby 2) за defключовим словом. Оскільки це синтаксис багаторядкових, і я можу тільки порівняти рядки черезcase, який не може приймати багаторядкові вирази, мені потрібно обернути буквальний метод (оскільки я, очевидно, не можу виконувати завдання). Останню петлю важче закінчити. Мені потрібно це зупинитися ~. На щастя, з символів ascii в цьому діапазоні щоб визначити, коли я в кінці, і припинити циклічно.~ це єдиний, кого можна викликати на Fixnum без аргументів без помилки, тому я можу використовувати send chr

Не найкращий бал у цій темі, але поки що єдиний, який використовує однакову мову для обох частин. Так, Рубі.


1
+ 1'є ще до вашої 2-ї відповіді, бо 'знав, що воно настане. Повага до підштовхування гнучкості Рубі до меж.
Векторизований

+1 за першу / єдину відповідь, яка надає обидві програми однією і тією ж мовою. Поки що це явний переможець ІМО. Я не встановив Ruby 2, але довіряю, що це працює.
Digital Trauma

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 Дякую за те, що я помітив, це я пропустив.
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: DC GNU, 189 байт

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzPzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzPzzPzzPzzPzzPzzBDPBEdPBFPdkvZP

Вихід:

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

2

Ну, знаєте, хтось повинен це зробити.

Частина 1 у BrainFuck: 174 байти

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

1

Частина 1: Рубін, 45 байт

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

Пояснення

  • Діапазон, що містить az ( ?@...?[), і діапазон, що містить AZ ( ?`...?{), стають елементами масиву _за допомогою оператора splat (* ).
  • 0-й елемент ( "@") і 27-й елемент ( "`") масиву _встановлені на nil.
  • Масив _об'єднується разом за допомогою Array#*та друкується до stdout ( $>)

Ви можете замінити *$_на другому рядку на p(або []).
Йордан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.