Étant donné un tableau d'entiers positifs A
en entrée, générez un programme qui, lorsqu'il est répété plusieurs k
fois, génère la k
th (1-index) valeur du tableau.
Par exemple, si le tableau est [1,11]
, la sortie doit être un programme qui sort 1
et, si répété deux fois, sort 11
. Code comme print(end="1");
dans les travaux Python 3: print(end="1");
imprime 1 et print(end="1");print(end="1");
imprime 11
La plus petite somme de longueurs de code pour résoudre tous les cas de test gagne. Votre méta-code devrait résoudre 500 cas de test en 60s, et chacun de vos codes de solution devrait revenir en 10s. Le méta-code et le code de solution n'ont pas besoin d'être dans la même langue, mais toutes les solutions générées par votre méta-programme doivent être dans la même langue.
Les données de prétest et le générateur peuvent être consultés ici . 7 jours plus tard, la somme du temps de soumission (par exemple 12:34 signifie 1234) sera la graine aléatoire et générera un autre cas de test comme cas de test final.
La graine finale est 7335 en GMT + 8, donc les données de test finales sont ici
print(end="1");
répété 2 fois estprint(end="1");print(end="1");
x
. Ensuite,x
devrait donner le premier élément de la liste,xx
devrait donner le deuxième élément de la liste,xxx
devrait donner le troisième, et ainsi de suite.Réponses:
Python 3 , génère Stax
Cela utilise une variété de stratégies. La plupart des stratégies ne s'appliquent que sous certaines conditions, mais il existe une stratégie de secours qui est toujours utilisable. À la fin, le plus petit programme candidat est sélectionné.
Essayez-le en ligne!
Mise à jour: validation Il faudra du temps pour exécuter chaque multiplicité de chaque programme séparément. Il est possible de les exécuter tous en même temps. Pour ce faire, un petit morceau de code doit être utilisé. Il est responsable de plusieurs choses.
Faites une sortie implicite le cas échéant. Normalement, à la fin d'un programme stax, le haut de la pile est imprimé s'il n'y a pas eu d'autre sortie. Lorsque vous exécutez plusieurs programmes dans le même fichier source, cela doit être fait explicitement.
Effacez les deux piles.
Réinitialiser les registres. Pour ces programmes, seul le registre x est utilisé.
Ce passe-partout doit être appliqué après chaque programme individuel à exécuter.
Par exemple, l'entrée
[5,2,7,3]
produit le programme stax3527E|X@
. Les quatre multiplicités peuvent être testées simultanément.Essayez-le en ligne!
De cette façon, il est possible de tester toutes les multiplicités de tout le programme dans la même exécution, en supposant que rien ne casse. Ce serait probablement le plus grand programme stax jamais exécuté si les 500 étaient terminés.
la source
Perl 5
-p
, génère Perl 5-p
, frais généraux191713-1 grâce à @Dom Hastings
Le score pour une entrée sera
length of the input + 13
. Peut évidemment être amélioré en générant des programmes d'auto-décompression pour des entrées plus importantes, mais je ne m'en préoccuperai pas.Donnez le tableau d'entrée séparé par des virgules sur une ligne sur STDIN.
Essayez-le en ligne!
Exécutez la sortie concaténée
n
fois sans entrée (par exemple, rediriger depuis / dev / null)Exemple de façon de l'exécuter pour la saisie
2,6,4,7
et le programme résultant répété 4 fois:Essayez-le en ligne!
Si vous n'aimez pas que le programme résultant essaie de lire à partir de STDIN, utilisez cette version avec la surcharge 17:
Essayez-le en ligne!
Exemple de façon de l'exécuter pour la saisie
2,6,4,7
et le programme résultant répété 4 fois:Essayez-le en ligne!
Cette version se bloque après l'impression de la sortie requise
la source
s/ /,/g;$_="die say+($_)[\$-++],"
:?05AB1E , génère 05AB1E
Essayez-le en ligne!
Le programme généré pour l'entrée
[5,17,7,13,2]
est"5 17 7 13 2"#.g<è
.Suite de tests pour [5,17,7,13,2]
La longueur du programme généré est
len(input) + 5
la source
len(input)
n'est pas le nombre d'entiers, mais la longueur de la chaîne qui les contient tous. J'ai mal compris au début.APL (Dyalog Unicode)
Préfixe anonyme lambda. Renvoie un corps de programme.
Essayez-le en ligne!
Les méthodes
Cela explore diverses méthodes et renvoie la première utilisable, pour finalement retomber sur une méthode universellement applicable.
Élément unique
Si la liste ne contient qu'un seul élément, il est renvoyé tel quel.
2, 22 etc.
Un seul chiffre peut simplement être répété pour générer le nombre 11 fois plus grand,
Tous les mêmes
Nous retournons simplement le
⊢
numéro le plus à droite ( ).Linéaire
f (n) = k × n séquences insérez simplement un plus avant le premier terme.
Factorielle suivie de tous les 1
Lorsque le premier nombre n =! M et les nombres suivants sont 1, alors
!m
est une solution car!m
est n etm!m
est 1 et!1
est 1.b ab ab ab
Étant donné que tous les nombres à deux chiffres sont plus grands que tous les nombres à un chiffre, un maximum courant, où l'avant du premier numéro est collé à l'arrière du deuxième numéro, est une solution.
Le code à trois lignes
Vérifiez si une formule du type
+a×b
est valide.Remplacement de chaîne
Les séquences longues sans numéro inférieur à 5 (car 4 est un saut de ligne) peuvent être codées en tant que caractères du SBCS.
Remplacement de chaîne de décalage
S'il y a des nombres inférieurs à 5, nous augmentons de 9 pour éviter ceux-ci.
Se retirer
Concaténation de chaîne simple de la chaîne
"{⍺←⊃⋄1⌽⍺⊢⍵}"
et de l'⍕
entrée stringified ( ). Par exemple,[3,1,4]
renvoie le corps du programme{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.La partie entre accolades est une fonction ambivalente, ce qui signifie qu'elle peut être soit une fonction préfixe, soit une fonction infixe. Ainsi, l'instance la plus à gauche s'exécutera en mode préfixe, et toutes les autres en mode infixe. La différence entre les modes est de savoir si
⍺
, signifiant l'argument de gauche, a une valeur. Si ce n'est pas le cas, la fonction lui sera attribuée⊃
(en premier).Explication de la méthode de secours
{
…}
Lambda anonyme:⍺←⊃
S'il n'y a pas d'argument gauche (⍺
), affectez la fonction⊃
(en premier) à⍺
⋄
puis:À ce stade, le code suivant signifie deux choses différentes selon qu'il
⍺
s'agit d'une liste de numéros (appel infixe) ou de la fonction "premier" (appel préfixe).Si
⍺
est une liste de nombres:⍺⊢⍵
jeter l'argument de gauche en faveur de l'argument de droite1⌽
faire pivoter cette étape vers la gaucheSi
⍺
est la fonction "première":⊢⍵
donner le bon argument⍺
choisir le premier élément de cette1⌽
faites-le pivoter d'un pas (pas d'opération sur un scalaire)Exemple d'exécution de la méthode de secours
En exécutant
3 1 4
le code{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
,, assigne la "première" fonction⍺
et renvoie donc le premier élément;3
.L'exécution
{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
permet au lambda le plus à droite de "capturer" la gauche3 1 4
comme argument gauche, donc⍺
a une valeur qui est rejetée en faveur de3 1 4
laquelle est ensuite tournée d'un pas vers la gauche et donne1 4 3
le résultat. Ceci est ensuite utilisé comme seul argument pour le lambda le plus à gauche, où⍺
devient la "première" fonction, faisant du résultat le premier élément;1
.L'exécution
{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
permet au lambda le plus à droite de "capturer" le milieu3 1 4
comme son argument de gauche qui est ensuite rejeté en faveur de l'argument de droite3 1 4
, qui, une fois tourné d'un pas vers la gauche, l'est1 4 3
. Il est ensuite utilisé comme argument de droite du lambda du milieu avec l'3 1 4
argument de gauche comme argument de gauche. L'argument de gauche est ignoré pour la droite, qui tourne d'un pas vers la gauche donne4 3 1
. Cela devient alors le seul argument de la lambda la plus à gauche,⍺
devient ainsi la "première fonction", renvoyant le premier élément;4
.Notation
Lorsqu'il est temps de tester à l'aide de données réelles, utilisez ce faisceau de test (lié rempli de données de prétest). Les cas de test vont dans le champ d'entrée et la sortie sera le nombre total d'octets des 500 programmes ensemble. (Il générera également une erreur, mais c'est simplement parce qu'il essaie ensuite d'évaluer l'entrée telle quelle.)
la source
charbon
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Sortez la chaîne littérale
⎚§⪪
.Convertissez le tableau d'entrée en chaîne, joignez-y des espaces et imprimez.
Sortez la chaîne littérale
¦ Lυ⊞υω
.La sortie de par exemple
5,17,7,13,2
est⎚§⪪5 17 7 13 2¦ Lυ⊞υω
. Essayez-le en ligne! Explication:Effacez le canevas afin que seule la dernière sortie soit visible.
Prenez la longueur de la liste prédéfinie
u
. Utilisez-le pour indexer dans la liste des entiers qui ont été divisés sur des espaces et produire l'élément sélectionné.Poussez une variable fictive dans la liste prédéfinie
u
, de sorte que la copie suivante produise l'élément suivant de la liste.Longueur totale de sortie = (longueur de tous les entiers dans toutes les listes) + (nombre d'entiers dans toutes les listes) + (nombre de listes * 9) caractères (SBCS).
la source
Haskell , génère Haskell
Essayez-le en ligne! Pour le premier test,
[5,2,7,3,2,3,15,10,7,2,14,11,16,16,3,3,4,3,8,4]
il produit le programme suivant:Essayez-le une fois , doublé et triplé . Cela utilise la même approche que ma réponse Haskell: je double la source, vous doublez la sortie .
La longueur de chaque programme généré est la longueur de la liste d'entrée sous forme de chaîne plus 25, ainsi le score pour les tests actuellement disponibles est
12266 + 500 * 25 = 24766
. Cela montre que le rapport code / données est fondamentalement égal, et je doute qu'il soit possible d'écrire un code de décompression suffisamment petit qui diminuera le score. Cela pourrait être possible si les listes étaient beaucoup plus grandes.la source
Python 2 , génère Python 2
Essayez-le en ligne!
Pour l'entrée
le programme généré est
qui est de 98 octets.
Adapté de cette solution dans "Je double la source, tu double la sortie!".
Bon sang, deux réponses plus courtes sont apparues avant que j'aie fini d'écrire cette réponse.
la source
k
tempsprint
poursys.stdout.write
supprimer le "quelque chose" de fin.Java 8, génère Python 2
Essayez-le en ligne.
C'est à dire
[3,4,5,6,7]
génère ce programme Python 2:Essayez-le en ligne une fois ; Essayez-le en ligne deux fois ; Essayez-le en ligne trois fois .
Le programme Python généré est basé sur la réponse de @ Mr.Xcoder pour la troisième fois le défi du charme .
Explication:
Code Java 8:
Code Python 2:
la source
Bash, sort des programmes en Perl 5
Le programme Bash peut être appelé comme
script.sh 1,2,3
.Le programme Perl doit être appelé avec le
-E
drapeau.Le
perl
code généré pour une entrée de4,7,8
est:Jolie force brute. Supprime un élément du tableau (
perl
peu importe que le tableau n'existe pas au début), le définit s'il n'est pas déjà défini. Il fait ensuite écho au premier élément du tableau à la fin. (LeEND
bloc est exécuté en dernier). Leexec 'true'
quitte le programme, afin que les autresEND
blocs ne soient pas exécutés.Exemple:
la source
Python 2, génère C ++
Cela ne battra aucun record, j'étais principalement intéressé à savoir si je pouvais comprendre comment le faire :) Utilisez le fait que les variables globales sont exécutées avant main, et ainsi pouvez incrémenter une variable globale, puis utiliser un #ifdef pour s'assurer que main n'est défini qu'une seule fois.
la source
Enchantements runiques , génère runique
Essayez-le en ligne!
Prend l'entrée comme une liste de valeurs séparées par des espaces.
Sortie effectuée une fois
Sortie effectuée deux fois
Sortie effectuée quatre fois
Utilise la commande de mode de lecture numérique continue,
´
qui a été validée le 12 janvier et j'ai trouvé cette question le 14. Cette commande permet de coder des valeurs de longueur arbitraires car sans cette fonctionnalité, il serait très difficile de le faire (par exemple, il1392
faudrait qu'il soit représenté comme1X3+X9+X2+
, nécessitant une boucle supplémentaire au minimum); précisément le problème que je voulais résoudre lorsque j'ai créé la´
commande.Dans le code original, le
|
dans les chaînes"{Zs$;|1|l;|y"
et"UwR'10<|I+}"
sont remplacés par\n
(qui sont assis dans la grille et non pas le modifier, comme ils le feraient normalement) avec desw
commandes de rite:74akw
,94/Rakw
,c4akw
, et85akw
. Les personnages originaux peuvent être n'importe quoi.|
a été choisi pour être un espace réservé symbolique qui représentait visuellement ce que je voulais. Plusieurs octets enregistrés (si ceux qui ne sont pas marqués) en n'ayant pas à ajouter de manière réfléchie un point d'entrée, commewR'10<
écrit unR
dans un emplacement où il existe déjà (position0,1
), puis procède à remplir sa pile de déchets avant de manquer de mana, après un bouclage séquenceU"'i34
.Le code de sortie résultant fonctionne en utilisant la
w
commande rite pour changer le premier caractère de la deuxième ligne en uneR
redirection droite (donc une seule IP exécute une instruction d'impression), avec une utilisation intelligente de la longueur de pile résultant de programmes de plus en plus grands pour déterminer quel index lire. Chaque autre IP change ce même emplacement pour la même instruction et se termine. Tout le reste n'est pas utilisé.L'image est obsolète, mais suffisante pour l'explication du flux.
Chaque exécution de
1Iy
conserve la capacité de l'IP à gérer une pile de plus en plus grande (causée par lal
commande), dont la taille permet au programme de déterminer le nombre de copies du code source de base. La finale1
est utilisée pour incrémenter le précédentl
au nombre requis lors de la rotation de la pile (créée ensuite) afin d'arriver à la valeur correcte. LaZ
commande annule cette valeur afin que la pile tourne dans le bon sens.Le tableau d'entrées d'origine est ensuite codé en mode de lecture continue, amorcé avec un 0 pour éviter de modifier progressivement la même valeur, pour lire les entrées d'origine. L'espace NOP est requis pour quitter le mode de lecture continue et permettre au 0 suivant d'amorcer à nouveau la pile.
Le score doit être égal approximativement
3+v.toString().length
, pour chaque entrée de tableauv
,+23
pour chaque tableau. Environ(2.55*total length of input)
ou33837
pour l'entrée d'échantillon, si j'ai bien fait les choses.Des changements mineurs ont été introduits dans mon programme final attendu en raison d'effets secondaires introduits dans la même version en ce qui concerne la
s
commande, mais cela a abouti à un meilleur score en même temps.la source