Quine Challenge I


12

Défi

Dans cette tâche, vous devez écrire un programme qui prendra en entrée un entier N (-1e9 <= N <0 && 0 <N <= + 1e9) , puis calculez T = (abs (N)% M + 1) , si N est positif puis sortez le T-ème caractère depuis le début sinon sortez le T-ème caractère depuis la fin de votre source.

M est la taille de votre source en octets.

Exemple: si votre source est:abcd efg/hi

Contribution:

 2

Production:

 c

Entrée :

-3

Production:

g 

Entrée :

-9249678

Production:

b 

Entrée :

-11

Production:

i 

Contraintes

  • N'utilisez aucune opération FILE
  • Vous pouvez utiliser la langue de votre choix
  • Essayez d'éviter ou plutôt de ne pas utiliser les soumissions de 1 octet, car cela gâche tout le plaisir.
  • La solution la plus courte gagne!

EDIT: L' énoncé du problème a été modifié afin que les solutions puissent être jugées à l'aide de données de test aléatoires (et des mêmes données pour toutes les solutions), veuillez donc mettre à jour votre solution en conséquence, désolé pour le désagrément (le cas échéant).


Dans l'exemple de test donné, si l'entrée est 5 ou -7, la sortie doit être un seul espace: "" (sans guillemet).
Quixotic

Et si N est 0?
aaaaaaaaaaaa

@eBusiness: Merci d'avoir souligné cela, j'ai changé l'énoncé du problème, je ne pense pas que $ 0 $ puisse se produire maintenant :-)
Quixotic

3
Il sorta continue d'être une correspondance étrange, maintenant un personnage est sauté au saut de 0 à 1: -2 -> / -1 -> h 0 -> i 1 -> b 2 -> c. Mais au moins la cartographie est maintenant unanime.
aaaaaaaaaaaa

1
Je suppose que la &&première phrase est censée être un ||?
Paŭlo Ebermann,

Réponses:


12

Assemblage x86 (Linux 32 bits, syntaxe AT&T): 548

Pas de nouvelle ligne à la fin du fichier:

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 "

Je l'ai compilé avec gcc -nostartfiles -m32 qc1.S -o qc1

Vérification, nombres positifs:

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

Vérification, nombres négatifs:

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

Edit a bien compris le schéma de numérotation étrange. Je pense. Cela n'a pas changé la longueur.


+ 1, c'est un travail génial de le faire en assemblage, mais une petite chose, j'ai modifié le problème pour que les tests soient unanimes, veuillez donc modifier votre solution de la même manière, merci.
Quixotic

Hé, plutôt cool. Et une chose amusante, malgré le fait que les langues soient si différentes, cela semble ressembler à ma solution GolfScript à 44 caractères.
aaaaaaaaaaaa

1
@Debanjan: Je ne peux vraiment pas sembler être capable de faire le tour du schéma de numérotation. Pourriez-vous fournir les lignes de vérification appropriées? (l'énoncé du problème serait un bon endroit)
JB

+1, c'est votre deuxième réponse «invalide» ici (code-golf sage) qui mérite un vote positif :)
Eelvex

@Eelvex: pour mémoire, l'autre était valide au moment de sa publication.
JB

10

Whaddaya sait, HQ9 + fait son grand retour!

Q

Pas besoin de s'embêter à indexer quand il n'y a qu'un seul personnage à choisir!


Faut-il une entrée?
Quixotic

@Debanjan: sûr:echo '-1' | hq9+ qc1
JB

Désolé, cela n'a pas beaucoup de sens pour moi, j'ai une solution similaire en PHP mais ce type de solution ne gâche-t-il pas tout le plaisir? Merci,
Quixotic

Vous n'êtes pas obligé de l'accepter si vous ne pensez pas qu'il s'intègre, vous savez! Vous n'avez même pas besoin de voter. Vous pouvez même le déprécier, même si personnellement je n'apprécierais pas ;-)
JB

Non, ce n'est pas une question d'acceptation ou de rejet, je disais simplement un point aussi je voudrais le voter de façon positive puisque j'apprends quelque chose de nouveau :-)
Quixotic

5

Ruby 1.9, 66 caractères

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

Pas beaucoup de différence avec un quine normal, en fait.

  • Modifier: suit les nouvelles spécifications maintenant.

5

GolfScript 26 caractères

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

Les quines étaient plus amusantes avant l'invention des langages dynamiques.

Edit: Pour les pleurnichards, voici un "vrai" GolfScript quine, no `et ~ uniquement utilisé pour l'analyse de l'entrée.

GolfScript handicapé 44 caractères

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

Remarquez à quel point c'est la même chaîne répétée deux fois, donc la chaîne littérale a juste besoin d'être 'piratée devant elle et elle est prête à l'emploi.


1
Je ne connais pas GolfScript, mais votre commentaire me pousse à penser que votre code penche vers la catégorie de contraintes "Opération FILE". Envie d'agrandir ses entrailles?
JB

La magie opère par l'utilisation de l'opérateur `, fondamentalement, je définis une fonction, je la stocke dans une variable, convertis la fonction en sa propre représentation sous forme de chaîne (` fait cela), puis j'exécute la fonction, ce qui peut trivialement terminer la tâche car il a ses propres entrailles dans la chaîne.
aaaaaaaaaaaa

+1: à Quines were more fun before the invention of dynamic languages.:-)
Quixotic

3
Eh bien, je suis sûr que l'enfer n'essaierait pas celui- ci en langage assembleur ...
JB

6
Grattez ça. Je l'ai fait essayer celui - ci en langage assembleur.
JB

2

Lenguage, 4 octets

Le code source se compose de 4 octets nuls. Quelle que soit l'entrée, la sortie doit donc être un octet nul, ce qui est accompli par une .instruction.


0

Smalltalk, 94 90 59 52

par exemple, dans la classe Object, compilez:

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

puis envoyez q: <n> à n'importe quel objet; ici un entier:

vérification:

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

ou mieux:
(0 à: 100) collecter: [: n | 1 q: n] as: 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 downTo: -500) collect: [: n | 1 q: n] as: 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('

explication pour les non-Smalltalkers:
thisContext est le cadre de pile actuel, qui peut être demandé pour sa méthode , qui peut être demandé pour sa source .


0

Enchantements runiques , 17 octets

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

Essayez-le en ligne!

Utilise simplement le quine standard pour générer la chaîne de programme, puis utilise l'opérateur modulo basé sur une chaîne 1 pour obtenir le caractère à un index donné (qui supporte nativement les indices négatifs et positifs, comportement influencé par Python).

  1. La ,commande "diviser" coupe la chaîne en morceaux (assez inverse logique de la *duplication des xtemps de chaîne ), +concatène et -supprime les xcaractères de la fin (un inverse assez logique de +). Ainsi, la %commande prend le rôle de charAt(x): la seule opération de chaîne de base restante (après que les opérations de type pile soient gérées par les mêmes commandes qui traitent la pile; par exemple, lest la taille de la pile ainsi que la longueur d'une chaîne).

0

JavaScript (ES6), 28 octets

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

Un quine modifié.

Une valeur supérieure à 28 est gérée par %28, une valeur inférieure à 0 est gérée par .substr().

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.