Quine Challenge I


12

Виклик

У цьому завданні ви повинні написати програму, яка буде приймати на вхід ціле число N (-1e9 <= N <0 && 0 <N <= + 1e9) , а потім обчислити T = (abs (N)% M + 1) , якщо N позитивний, тоді виведіть T-го символу з початку, інше виведіть T-й символ з кінця вашого джерела.

M - розмір вашого джерела в байтах.

Приклад: Якщо ваш джерело:abcd efg/hi

Вхід:

 2

Вихід:

 c

Вхід :

-3

Вихід:

g 

Вхід :

-9249678

Вихід:

b 

Вхід :

-11

Вихід:

i 

Обмеження

  • Не використовуйте жодної операції FILE
  • Ви можете використовувати будь-яку мову на ваш вибір
  • Постарайтеся уникати або, скоріше, не використовувати 1 байт подання, оскільки це псує все задоволення.
  • Найкоротше рішення виграє!

EDIT: Постановка проблеми була змінена, щоб рішення можна було оцінити за допомогою випадкових даних тестування (і однакових даних для всіх рішень), отже, будь ласка, оновіть рішення, вибачте за незручності (якщо такі є).


У прикладі тесту наведеного прикладу, якщо вхід 5 або -7, вихід повинен бути єдиним пробілом: "" (без лапок).
Кіхотично

Що робити, якщо N дорівнює 0?
aaaaaaaaaaaa

@eBusiness: Дякую за вказівку на це, я змінив заяву про проблему, я не думаю, що зараз може виникнути $ 0 $ :-)
Кіхотичний

3
Це Сорт продовжує бути дивне відображення, тепер символ пропускається при стрибку від 0 до 1: -2 -> / -1 -> h 0 -> i 1 -> b 2 -> c. Але принаймні карти зараз одностайні.
aaaaaaaaaaaa

1
Я думаю, що &&в першому реченні мається на увазі бути ||?
Paŭlo Ebermann

Відповіді:


12

збірка x86 (32-бітний Linux, синтаксис AT&T): 548

Немає нового рядка в кінці файлу:

pushl 8(%esp)
call atoi
mov $274,%ebx
cmp $0,%eax
jg a
dec %eax
a:cdq
idiv %ebx
cmp $0,%edx
jge p
add %ebx,%edx
p:add $s,%edx
cmp $s+273,%edx
jl l
push $34
mov %esp,%edx
l:mov $4,%eax
mov $1,%ebx
mov %edx,%ecx
mov $1,%edx
int $128
mov $0,%ebx
mov $1,%eax
int $128
s:.ascii "pushl 8(%esp)
call atoi
mov $274,%ebx
cmp $0,%eax
jg a
dec %eax
a:cdq
idiv %ebx
cmp $0,%edx
jge p
add %ebx,%edx
p:add $s,%edx
cmp $s+273,%edx
jl l
push $34
mov %esp,%edx
l:mov $4,%eax
mov $1,%ebx
mov %edx,%ecx
mov $1,%edx
int $128
mov $0,%ebx
mov $1,%eax
int $128
s:.ascii "

Я склав його gcc -nostartfiles -m32 qc1.S -o qc1

Перевірка, додатні цифри:

$ for i in $(seq 548 1095); do ./qc1 $i; done | cmp - qc1.S && echo Good
Good

Підтвердження, від’ємні числа:

$ for i in $(seq -1095 -548); do ./qc1 $i; done | cmp - qc1.S && echo Good
Good

Правка зрозуміла правильно про дивну схему нумерації. Я думаю. Це не змінило довжину.


+ 1, Це геніальна робота, щоб зробити це в зборі, але одна невелика річ я змінив проблему, щоб зробити тестування одноголосним, тому, будь ласка, модифікуйте своє рішення на кшталт, спасибі.
Кіхот

Хе, досить круто. І дивна річ, незважаючи на настільки різні мови, це схоже на моє рішення GolfScript з 44 символами.
aaaaaaaaaaaa

1
@Debanjan: Я справді не можу, можу, обернути голову навколо схеми нумерації. Чи можете ви надати відповідні лінії підтвердження? (Постановка проблеми буде прекрасним місцем)
JB

+1, це ваш другий "недійсний" статус тут (код-гольф мудрий), який вартий надбавки :)
Eelvex

@Eelvex: для запису інший був дійсним на момент публікації.
JB

10

Whaddaya знаю, HQ9 + робить своє велике повернення!

Q

Індексувати не потрібно, коли на вибір є лише один символ!


Це займає якісь дані?
Кіхотично

@Debanjan: впевнений:echo '-1' | hq9+ qc1
JB

Вибачте, це не має великого сенсу для мене, у мене є одне подібне рішення в PHP, але хіба це рішення не зіпсує все задоволення? Дякую,
Кіхот

Вам не доведеться приймати це, якщо ви не думаєте, що він підходить, знаєте! Вам навіть не доведеться це підтверджувати. Ви можете навіть спростувати це, хоча я особисто не оціню ;-)
JB

Ні, мова не йде про прийняття чи відхилення, я просто зазначав точку, і я хотів би проголосувати за неї, оскільки я дізнаюся щось нове :-)
Кіхотичний

5

Рубін 1,9, 66 символів

z=gets.to_i;s="z=gets.to_i;s=%p;$><<(s%%s)[z%%66]";$><<(s%s)[z%66]

Насправді, велика різниця у нормальної квітки.

  • Редагувати: Дотримуйтесь нових специфікацій зараз.

5

26 символів GolfScript

{':f`f'+1/\~.1<- 26%=}:f`f

Квіни були цікавішими до винаходу динамічних мов.

Редагувати: Для whiners, ось "справжня" GolfScript quine, no `і ~ використовується лише для розбору вхідних даних.

Інвалід GolfScript 44 символи

'"\x27"\+1/\~.1<- 22%='"\x27"\+1/\~.1<- 22%=

Зауважте, як добре, що одна і та ж струна повторюється двічі, тому буквальному рядку просто потрібен 'злом перед нею і він готовий до використання.


1
Я не знаю GolfScript, але ваш коментар підштовхує мене до думки, що ваш код схиляється до категорії обмежень "FILE Operation". Хочете розширити свої нутрощі?
JB

Магія відбувається за допомогою оператора `я в основному визначаю функцію, зберігаю її в змінній, конвертую функцію у її власне представлення рядків (` робить це), а потім запускаю функцію, яка може тривільно закінчити завдання так як у нього є власні нутрощі в рядку.
aaaaaaaaaaaa

+1: to Quines were more fun before the invention of dynamic languages.:-)
Кіхотик

3
Ну, я впевнений, що б чорт не намагався цього в мові складання ...
JB

6
Почешіть це. Я зробив спробувати це на мові асемблера.
JB

2

Ленгуага, 4 байти

Вихідний код складається з 4 нульових байтів. Незалежно від введення, висновок повинен, таким чином, бути нульовим байтом, що виконується однією .інструкцією.


0

Smalltalk, 94 90 59 52

наприклад, у класі Object складіть:

q:n|s|s:=thisContext method source.^s at:n\\s size+1

потім надішліть q: <n> до будь-якого об'єкта; тут ціле число:

перевірка:

1 q: 0 -> q
1 q: 1 ->:
1 q: 2 -> n
...
1 q: -1 ->)
1 q: -2 ->)
1 q: -3 -> 1

або краще:
(0 до: 100) збирати: [: n | 1 q: n] як: String
->')q:n|s m|s:=thisContext method source.m:=s size.^s at:(n>=0ifTrue:n-1\\m+1ifFalse:m-(0-n\\m))q:n|s m|'

(-1 вниз до: -500) збирати: [: n | 1 q: n] як: String
->')m\\n-0(-m:eslaFfi1+m\\1-n:eurTfi0=>n(:ta s^.ezis s=:m.ecruos dohtem txetnoCsiht=:s|m s|n:q))m\\n-0('

Пояснення для не
малих подій : thisContext - це поточний кадр стека, який може бути запитаний для його методу , який можна запитати для його джерела .


0

Рунічні чари , 17 байт

"3X4+kSq:l͍iS%%@

Спробуйте в Інтернеті!

Просто використовує стандартний quine для генерування рядка програми, потім використовує рядковий модуль-оператор 1 для отримання символу в заданому індексі (який в основному підтримує негативні та позитивні показники, поведінку, на яку впливає Python).

  1. Команда ,"ділити" розрізає рядок на шматки (достатньо логічне зворотне *дублювання строкових xстроків), +об'єднує і -видаляє xсимволи з кінця (логічно досить обернено +). Таким чином, %команда виконує роль charAt(x): єдиної основної операції з рядком, що залишилася (після операцій, схожих на стек, обробляються тими ж командами, що стосуються стека; наприклад l, розмір стека і довжина рядка).

0

JavaScript (ES6), 28 байт

f=n=>("f="+f).substr(n%28,1)

Модифікована квінка.

Значенням більше 28 обробляється %28, а значенням менше 0 обробляється .substr().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.