ИЮПАК в своей невыносимой мудрости создал систематическое название элемента для любого вновь созданного элемента. Это временное имя элемента, пока они, наконец, не примут решение о действительном имени. Это работает так: каждой цифре номера элемента присваивается префикс в зависимости от его значения. Префиксы объединяются с 'ium' в конце. Когда это будет сделано, и если вы получите двойные i (ii) или тройные n (nnn), замените их на одинарные i и двойные n. Символом для элемента является первая буква каждого используемого префикса, конкатенированная и результат с заглавной буквы. Используемые префиксы приведены ниже.
0 nil 5 pent
1 un 6 hex
2 bi 7 sept
3 tri 8 oct
4 quad 9 enn
Поэтому для этого гольфа ваш код должен генерировать как имя элемента, так и его символ для заданного положительного целого числа. Так что, если вашему коду был присвоен 137, он должен вывести на стандартный вывод или вернуть оба untriseptium
и Uts
. Он должен быть действителен от 118 до 558 . Любое значение выше, если оно не увеличивает длину вашего кода.
Пример Python, показывающий метод:
def elename(n):
'''Return name and symbol of new element for given element number.'''
prefixes=['nil','un','bi','tri','quad','pent','hex','sept','oct','enn']
nmeFixes, symFixes = [], []
while n: # each digit of element number is assigned a prefix
n, i = divmod(n, 10)
pf = prefixes[i]
symFixes.append(pf[0]) # symbol uses only first letter of prefix
nmeFixes.append(pf)
# loop assembled prefixes in reverse order
nmeFixes.reverse()
symFixes.reverse()
nmeFixes.append('ium') # suffix
name = ''.join(nmeFixes)
symb = ''.join(symFixes).capitalize()
# apply rule about too many n's or i's
name = name.replace('nnn','nn') # can happen with -90-
name = name.replace('ii','i') # -2ium or -3ium
return name, symb
Эрик Тауэрс побеждает с кадмиевыми байтами!
Ответы:
Mathematica 10.1,
индий (49),кадмий (48)В этом решении используется встроенная библиотека свойств элементов, включая имена и сокращения IUPAC. (Я не рассматривал это как технику, которую следует избегать в Гольфе. Кажется, это поощряется. Но это может быть (возможно, более) приемлемым - Mathematica реализует эту библиотеку (и многие другие), загружая данные из Серверы Wolfram в первый раз, когда вы используете его (и я предполагаю, что время от времени проверяет наличие обновлений).)
Как бы это сравнить с использованием elements.py или periodtable.py в Python?
Редактировать: Месяцы спустя: Заметил, что я опечатал вывод аббревиатуры для 122. Я перезапустил код и подтвердил, что я сделал эту ошибку, а не Mathematica.
источник
f
себе чистую функцию:f=ElementData@@@{{#,"Abbreviation"},{#,"Name"}}&
.Python 3, Unhexseptium (167) байтов
Это результаты, когда программа запускается на каждом номере от 1 до 999 (включительно).
источник
Пип ,
ториевыйактинийрадон (86)(Не вдыхайте эту запись, она даст вам рак легких.)
Принимает номер элемента в качестве аргумента командной строки и выводит имя и аббревиатуру в отдельных строках.
Объяснение (несколько не в гольфе):
ii
Иnnn
обработки использует регулярное выражение замены с функцией обратного вызова (добавлена в последней версии Пип): для каждого матчаii|nnn
, принять все , кроме первого персонажа и использовать в качестве замены.источник
GNU sed, 171 (unseptunium)
Я предполагаю, что не имеет значения, в каком порядке возвращаются имя и символ. Здесь символ стоит первым:
источник
g
; единственными случаями будутbiium
/triium
иennnil
, все из которых могут произойти только один раз в числах до 1000.Mathematica, unhexunium
163161 байттеперь заглавные буквы
Это Mathematica без встроенного
ElementData
.Тест на 10 случайных чисел:
источник
JavaScript (ES6) 164 (негексквадиум)
171Капитализация является сложной частью. (Тест в FireFox)
Редактировать 3 байта сохранены thx user2786485
источник
*enium
вместо*ennium
всего, что есть*9
[...n]
потерпит неудачу для параметра int. Задача оa given positive integer
replace(/i(i)|n(nn)/g,'$1$2')
Рубин -
163156147143134 (Untriquadium) байтовЯ надеюсь играть в гольф таким образом вниз
Редактировать: Спасибо за @steveverrill за сбрить 9 байтов!
Edit2: Спасибо за @steveverrill еще раз за 4 байта! (Действительно умное решение!)
источник
each_char
тебя можно использоватьchars
. Согласно официальной документации Ruby , это «устаревшая» (но не в codegolf!) Вы, вероятно , лучше сeach_byte
илиbytes
тоc.to_i
становится, напримерi%48
. 2. Также случайно\n
есть код ASCII 10, так что, возможно, вы можете избавиться отchop
и включитьium
в свой массив (отлично работает для имени элемента, но добавляет ложныйi
символ элемента).tr_s
этого:o=u='';gets.bytes{|c|k=%w[Nil un bI trI quad pent hex sept oct enN Ium][c%48];o+=k;u+=k[0]};puts o.tr_s('IN','in'),u[0..-2].downcase.capitalize
u.chop
корочеu[0..-2]
. Возможно, я должен был опубликовать свой собственный ответ, но моя первоначальная идея состояла в том, чтобы сделать это так же, как вы. Было весело помогать тебе в этом. Мне совершенно не хватало того, что тебе не нужноdowncase
раньшеcapitalize
.Pyth, 67 байт (гольмий)
Попробуйте это онлайн в Pyth Compiler / Executor .
Как это устроено
источник
JavaScript (ES6),
210202 байта (BiunniliumBinilbium)Минус октия (8) байтов, благодаря @ edc65!
130 159 147 байт (Untrinilium Unpentennium Unquadseptium)Ввод как
f(324)
. Тьфу, я чувствовал себя таким гольфом.источник
CJam,
7472717069 байт (тулия)Обратите внимание, что код содержит непечатаемые символы.
Спасибо @ Sp3000 за то, что он указал на ошибку в моей первоначальной ревизии и предложил
)/
подход.Попробуйте онлайн в интерпретатором CJam: .
Как это устроено
источник
Matlab, 170 (Unseptnilium)
Работает на всех входах, которые вы можете добавить,
nilium
вплоть до, насколько вам захочется. Я добрался доennennennennennennennennennennennennennennennennennennennennennennium
того, как сдался нажатием клавиши 9.И объяснение:
источник
TI-BASIC,
223218 байтЭлемент номер N может иметь только тройное «n», если оно заканчивается на 90, и может иметь только двойное «i», если последняя цифра 2 или 3. Мы используем математику для проверки этих случаев.
Магическое число
1.5154
, которое хранит длину каждого префикса, было найдено с помощью сценария Python искать все десятичные длины ≤7 с помощью функцийcosh(
,cos(
иe^(
.Пока не закончил игру в гольф, но двухбайтовые строчные буквы TI-BASIC и отсутствие команд манипуляции со строками, как всегда, повредят счету этой программы.
источник
Python 3, unpentquadium (
156155154) байтовВместо того, чтобы заменять
ii
на,i
мы запускаем любыеi
s перед темium
, как связать их , так как это единственный возможный источник двойныхi
s. Точно так же мы удаляемn
s, проверяяenn/nil
случай.источник
Retina,
206196186179 (Unseptennium) байт ( Попробуйте онлайн )Спасибо @ MartinBüttner ( https://codegolf.stackexchange.com/users/8478/martin-b%C3%BCttner ) за обучение этому языку.
Спасибо @FryAmTheEggman за удаление 7 байт.
Ueh-байтовая версия: здесь
Bnh-байтовая версия: здесь
источник
CJam, 95 байт
Попробуйте онлайн
Это конкурирует в категории «языки без регулярных выражений и только с использованием печатных символов». ;) Не ожидал, что он будет таким же коротким, как некоторые из уже опубликованных решений, но мне было любопытно, как долго это закончится. И так как я получил это сейчас, я мог бы также опубликовать это.
Объяснение:
источник
Go, 322 байта (трибибиум)
Читает три символа из STDIN, больше игнорируется, меньше приводит к сбою. Так что это работает для каждого числа между
unnilnilium
иennennennium
.источник
PowerShell,
170168165 (Unhexpentium)Довольно просто и никаких сюрпризов здесь. За исключением, может быть, того, что я решил проблему с заглавными буквами, заключив в нижний регистр все, кроме первой части и имея отдельные части уже в заглавном регистре. Агрессивно встроено в настоящее время, чтобы избежать потери символов для простых переменных назначений.
Бонус после последнего изменения: теперь работает и для длинных номеров элементов:
источник
C на x86, 192 (Unennbium)
Читает цифры из
stdin
и печатает результаты вstdout
. Полагается наsizeof(char*) == sizeof(int)
.Безголовая версия:
источник
Хаскелл, бипентбий (
305271269265261259253252 байт)Побрил 34 байта благодаря Ними.
источник
nnn
иii
дел вr
, то естьr('i':'i':a)='i':r a;r('n':'n':'n':a)="nn"++r a;r(x:a)=x:r a;r x=x
и вызвать его без аргументов:t=r.m.p
.concatMap
есть>>=
, то естьp n=(n>>=(words"..."!!))++"ium "
GNU sed, unhexunium (161 байт)
Сначала я сгенерировал символ, затем спрятал его в трюмное пространство и создал имя. Цикл является более подходящим, чем использование
/g
для четырех или более замен (у нас может быть только одинii
и / или одинnnn
, поэтому они не должны быть внутри цикла, но это не повредит). Наконец, найдите и добавьте удерживаемый символ.(Примечание: я не видел существующего ответа sed, когда писал это)
Контрольные примеры
Эти упражнения
ii
иnnn
специальные правила:И смешной, показывающий, сколько дает этот код по сравнению с физическим миром:
источник
T-SQL 329 байт
отформатирован:
источник
PHP, 152
153163байта, unpentbiumНу, по крайней мере, на этот раз PHP где-то примерно на среднем уровне.
Запускается из командной строки, например:
Выход:
Ungolfed
редактировать
array()
-инициализатор на[]
'ium '
использованием дополнительной конкатенации.' '.
источник
Perl, 109 (Unnilennium) байтов
Код 108 + 1 переключатель
Принимает ввод из STDIN как одно число в строке.
источник
Java 8 216 байт
источник
ii
иnnn
, как объясняется в вопросе. 3. Цель Code Golf - сделать код максимально коротким. Ответ должен содержать свою оценку в заголовке. Вы можете уменьшить свой счет, устраняя пробелы и сокращая имя переменной.C #
229 (Bibiennium)198 байтов unennoctiumТрюк "n-'0" - это способ преобразования из ascii в int. Char 9 = ASCII 57. Char 0 = ASCII 48, поэтому 57-48 = 9.
статическая приватная строка ToText (int v) {return (string.Join ("", v.ToString (). Select ((char n) => "nil un bi tri quad pent hex sect oct enn" .Split () [n -'0 '])) + "ium"). Replace ("nnn", "nn"). Replace ("ii", "i") + "" + string.Join ("", v.ToString () .Select ((char n) => "nubtqphsoe" [n-'0 '])); }Этот подход принимает int, преобразует в строку, затем выполняет выбор символов LINQ, который запускает лямбду.
Лямбда генерирует массив на лету (меньше символов, чем определяет его), разбивая строку префиксов. Затем он извлекает индекс префикса для использования, просматривая значение int текущего символа (трюк n-'0 ', упомянутый выше).
Все, что заключено в строку. Соединение, которое объединяет все результаты LINQ вместе. Нажмите на «ium», а затем на несколько операторов .Replace в конце, чтобы очистить nnn 'и ii's.
Добавлен недостающий вывод символов. Я думаю, что есть более эффективный способ слияния двух LINQ, но слишком поздно, чтобы продолжать в этом ковыряться.
источник
n-'0'
почему бы и нетn-30
?C
210204unennennium (199) bytesЭто требует ASCII в качестве набора символов времени выполнения.
Я попробовал рекурсивное решение (которое избавляет от необходимости
p
иo
), но это оказалось дольше.Я особенно горжусь / стыдно за совпадение для регулярного выражения
90|[23]$
, которое опирается9
и0
является самыми дальними разделенными цифрами (и, следовательно, единственной парой, которая отличается на 9 -39
в коде является следствиемj
целочисленного значения и*n
все же ASCII символ) и тем2
и3
отличаются только в последнем бите, поэтому деление на 2 объединяет их.Расширенный код:
Испытательный жгут:
источник
R, 278 байт
Не самый лучший ... но я все еще изучаю R, поэтому я решил опубликовать свою попытку. Любые предложения, чтобы сделать это лучше? Теперь, когда я думаю об этом, возможно, возможно разместить подмножество в строке nth-1, а не тратить пространство на создание имен строк.
Пример использования
Ungolfed
k
0-9
для легкой идентификацииx
, преобразовать в символ, разделить его (например, 137 на «1», «3», «7»)k
на основе ввода раздельного числа и возврата записей-ium
k
используя подстроку, чтобы получить первую букву совпадений. Это объединяется с выходными данными шага 5 с пробелом между нимиsub()
для заменыnnn
иii
шаблоновисточник
Javascript - 169 байт
Как ни странно, мои попытки использовать карту были длиннее цикла for.
РЕДАКТИРОВАТЬ: Ой, забыл проверить дату.
источник
PHP, 131 + 1 байт (нетриний)
все еще ужасно долго
Запустите как трубу с
-nR
или попробуйте онлайн .источник
Python, 154 байта
источник