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


17

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

В символах ASCII были разделены когда - то снова ! Ваши наборы - Письма и Символы .

Письма

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Символы

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

Задача - написать две программы:

  1. Напечатайте каждое письмо ровно один раз, не используя ни одного из них в вашей программе.

  2. Напечатайте каждый из символов ровно один раз, не используя ни одного из них в вашей программе.

правила

  • Пробелы могут появиться в вашей программе или на выходе.
  • Не-ASCII символы не допускаются.
  • Вывод идет в стандартный вывод или в файл как содержимое или имя файла.
  • Нет ввода.
  • Вывод должен содержать только символы ASCII из одного набора или другого.
  • Программы могут быть написаны на разных языках или на одном языке с одним исключением:
  • Язык пробелов можно использовать только для одной из программ.
  • Применяются стандартные лазейки .

счет

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

Самый низкий балл побеждает!

Замечания:

Чтобы поощрять больше заявок, вы все равно можете опубликовать ответ с решением только для одной из программ. Вы не сможете выиграть, но вы все равно сможете показать что-то классное.

Спасибо Calvin's Hobbies за то, что вдохновили идею своим предыдущим вопросом .


4
Это невозможно в большинстве языков ... Например, в Haskell = неизбежно
гордый haskeller

1
@proudhaskeller частью проблемы является выбор языка там, где это возможно.
hmatt1

(Я понимаю, что должен был подумать об этом, пока вопрос находился в песочнице, но), учитывая правило «пробелы могут появиться в выходных данных», означает ли это, что порядок (букв | символов) не имеет значения?
FireFly

@FireFly любой заказ в порядке.
hmatt1

Разрешено ли иметь управляющие символы (кодовые точки от 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: Пиф , 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- восьмеричная escape-последовательность для c. Таким образом, этот ответ эквивалентен следующему коду в стиле Python:

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

Конечно, это не работает в Python, потому что печать в Python использует print, но печать в Pyth неявна, поэтому она работает.


Решения Pyth не используют ни одной из добавленных функций, так как вопрос был задан.


Где я могу выучить Pyth? Из примеров?
Сохам Чоудхури

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

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

ЛОЖЬ (Буквы, 21) DUP (Буквы, 20):

ЛОЖНОЕ решение:

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

Раствор DUP (на 1 символ короче)

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

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

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Переводчик для FALSE.


Всего: 102


1
Вау круто! Я видел, как люди говорят, что это не может быть сделано в Python, хорошо сделано.
hmatt1

from string import*работает одинаково хорошо и сокращает количество байтов.
aglasser

5
@aglasser ... но использование *запрещено в этом контексте ...
Augıʇǝɥʇ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]

Для больше на этом стиле 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чтобы определить, когда я нахожусь в конце, и остановить цикл.

Не лучший результат в этой теме, но пока единственный, который использует один и тот же язык для обеих частей. Yay Ruby.


1
+1 я сказал еще до твоего второго ответа, потому что знал, что оно придет. Уважение к расширению гибкости Ruby.
векторизовано

+1 за первый / единственный ответ, который предоставляет обе программы на одном языке. Пока что это явный победитель ИМО. Я не установил 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
Я знал, что будет растворение Apple. Здесь есть +1.
Augıʇǝɥʇ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.

Символы, АльфаБета , 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: Pure Bash, 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]=*$_
$><<_*''

объяснение

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

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