Votre tâche consiste à opposer chaque côté du clavier et à créer deux programmes, dans la même langue, l'un utilisant uniquement les touches sur le côté gauche d'un clavier standard qui sort Pollinium milk; plump pumpkin; lollipop?
, et l'autre en utilisant les touches sur la droite qui sort Weatherheaded sweetheart haberdasheress!
.
Règles
Les touches exactes autorisées pour le programme de gauche sont:
123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB
et pour le programme de droite:
7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?
Il existe quatre touches libres Esc
( \x1b
), Tab
( \x09
), Space
( \x20
) et Enter
( \x0a
et / ou \x0d
) qui peuvent être utilisées dans l'une ou l'autre, ou dans les deux solutions.
Votre score sera le nombre total d'octets pour les deux programmes. Bien que j'aie utilisé le terme program
, vos soumissions peuvent être soit des programmes complets, soit des fonctions comme d'habitude, et les deux peuvent être de types différents (par exemple, un programme complet et une fonction).
Votre résultat doit inclure le texte souhaité, toute quantité d'espace blanc de début et de fin est correcte, tant que le texte exact y apparaît.
Les échappatoires standard sont interdites .
Les solutions les plus courtes dans chaque langue gagnent.
la source
Réponses:
Perl 5 , 261 = 88 + 173 octets
Ceci est un exemple où "les options de langue ne comptent pas" est un problème. La solution côté droit utilise
-p
, pas le côté gauche. Est-ce que cela compte ou non comme la même langue? Et les options devraient-elles provenir du jeu de caractères gauche / droite?Gauche 88
utilisez
-M5.10.0
(ou à-E
partir de la ligne de commande) pour activer àsay
nouveau discutable si cette option doit compter comme code et doit venir du côté gauche ou si elle tombe sous "options pour définir la version de langue ne compte pas"Essayez-le en ligne!
Droite 173
Exécuter avec l'
-p
option (qui comprend également les bons caractères)Cela peut presque certainement être amélioré, mais pour l'instant, il était assez difficile de faire fonctionner quelque chose. Ne pas avoir accès à
print
,say
,$_
etsub{}
rend difficile la sortieEssayez-le en ligne!
la source
eval
via&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
!Espace blanc ,
11751143655645638632639578 (293 + 285) octetsCela devait être fait ..; p
Peut certainement être joué au golf en remplissant la pile inversée et en imprimant le tout à la fin dans une sorte de boucle, mais ce n'est que mon deuxième programme Whitespace, donc je n'ai pas encore compris ..EDIT: Golfé.+7 octets parce que j'ai mal orthographié
pumpkin
commepumkin
.. (Merci d'avoir remarqué, @ fəˈnɛtɪk .)Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées comme surbrillance uniquement.[..._some_action]
ajouté à titre d'explication uniquement.Côté gauche
Pollinium milk; plump pumpkin; lollipop?
:Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Côté droit
Weatherheaded sweetheart haberdasheress!
:Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).
Explication:
Il a d'abord construit la pile inversée. Pousser un nombre se fait comme suit:
S
au début: activer la manipulation de la pileS
: Poussez ce qui suit sous forme de nombre dans la pileS
/T
: Bit de signe oùS
est positif etT
négatifT
etS
suivis d'unN
: Mettez un nombre binaire dans la pile (T=1
etS=0
).Ensuite, il fera une boucle sur la pile inversée et imprimera tout sous forme de caractères. Il procède comme suit:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)Label_1
(NSSTN
)C'est ci-dessus la disposition par défaut pour les deux programmes. Voici le journal des modifications de cette disposition par défaut qui a encore réduit le nombre d'octets:
Tous les nombres sont abaissés du même montant ( dans le premier programme et dans le second) pour diminuer les chiffres binaires utilisés pour les nombres désormais inférieurs, et entre les étapes 3.2 et 3.3, les deux sous-étapes suivantes sont ajoutées:
100
110
102
101
SSSTTSTTTSN
) dans le programme 1 ou 101 (SSSTTSSTSTN
) dans le programme 2TSSS
)Je l' ai aussi utilisé
SNS
dans certains cas pour dupliquer le haut de la pile, qui est utilisé pour le golf lell
,ll
,ee
etss
.De plus, l'étape 4 (créer
Label_1
) a été complètement supprimée. Il se terminera avec une erreur, mais affichera toujours tout correctement ( ce qui est autorisé selon la méta ).Il est possible de copier une
n
'e valeur depuis le haut de la pile (avecSTS
+ 0 indexén
), ce qui est plus court que de créer un nouveau nombre dans certains cas.Dans le premier programme pour lequel j'ai fait cela: le second
p
danspop
(STSSTN
(copie 1ère) est plus court queSSSTTSSN
(créer le numéro pour 'p')), le secondl
danslol
(STSSTN
(copie 1er) est plus court queSSSTSSSN
(créer le numéro pour 'l') )), le secondp
dansp p
(STSSTN
(copier le 1er) est plus court queSSSTTSSN
(créer le numéro pour 'p')), le secondp
danspumlp
(STSSTTN
(copier le 3e) est plus court queSSSTTSSN
(créer le numéro pour 'p')), le secondp
danspmup
(STSSTSN
( copie 2e) est plus courte queSSSTTSSN
(créer un numéro pour 'p')), le secondm
dansm m
(STSSTN
(copier le 1er) est plus court queSSSTSSTN
(créer le numéro pour 'm')), le secondi
dansini
(STSSTN
(copier le 1er) est plus court queSSSTSTN
(créer le numéro pour 'i')) ).Dans le deuxième programme, cela n'est fait pour personne. La distance entre certains est assez courte, comme
ere
ouded
, mais la création du nombre pour 'e' (SSTTN
) ou 'd' (SSTTSN
) est à la fois plus courte ou de longueur égale à la copie 1st (STSSTN
), donc je ne pouvais pas appliquer cette astuce dans le deuxième programme pour enregistrer les octets. REMARQUE: Après l'étape de golf 7, tous ces éléments ne s'appliquent plus.Dans les deux programmes, j'ai changé l'étape 1 de la boucle de
SSSN
(Push 0) enSSN
(Push error_value) et supprimé les étapes 3.1 (SNS
Duplicate) et 3.2 (NTSTN
If 0: Exit). Maintenant, il se terminera simplement avec une erreur quiSSN
est une valeur inconnue dès qu'il essaie d'y accéder.Suppression
SSN
complète de (error_value) dans les deux programmes. Il s'arrêtera maintenant avec l'erreur " Can't do Infix Plus " lorsqu'il essaie de faire la fonction Add sans rien sur la pile.Modification des valeurs constantes de
100
et102
vers110
et101
respectivement. Voici le programme Java utilisé pour générer la110
constante; et ici le programme Java utilisé pour générer la101
constante. Notez qu'il y a maintenant moins de copie utilisée que décrit au point 4 ci-dessus, car les nouvelles valeurs sont dans de nombreux cas plus courtes que les copies, donc les repousser est plus court.la source
Lenguage, ce nombre d' octets
Le côté gauche est 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 répétitions du
a
caractère, ce qui équivaut au programme Brainfuck suivant:Essayez-le en ligne!
Le côté droit est 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 répétitions du
p
caractère, ce qui équivaut au programme Brainfuck suivant:Essayez-le en ligne!
la source
CJam , 128 + 192 = 320 octets
Essayez-le en ligne!
Essayez-le en ligne!
la source
Fission , 958 + 752 = 1710 octets
._.
La gauche
Essayez-le en ligne!
Droite
Essayez-le en ligne!
OK, nous sommes ici avec de la chance, en fait ._.
La première fonctionnalité intéressante de Fission est qu'il dispose de 4 commandes pour créer des pointeurs de commande, des atomes AKA:,
RLDU
j'ai donc deux commandes pour les groupes gauche et droit.Le deuxième porte-bonheur porte sur 2 commandes de sortie
!
etO
, qui se produisent dans différents groupes.Troisième fois le charme. Les deux commandes de sortie produisent l'équivalent ASCII de la masse des atomes. Je dois donc le changer un peu. J'ai de la chance! Les deux
+ (+1 mass)
et_ (-1 mass)
sont dans un groupe et tous besoin de trois$ (+1 energy)
,~ (-1 energy)
,@ (swap mass and energy)
sont dans un autre groupe.Il n'y a donc rien pour m'arrêter, mais ce ne peut pas être compact, en définissant des masses pas à pas.
Premier programme
Le premier programme ne comprend que
Dz^@$~!V
Le démarrage peut être plus simple (juste
R
), mais l'utilisation de la division enregistre certains octets pour la première lettre.Atom, qui va à gauche, s'enroule et rencontre
V
, ce qui le fait descendre et enrouler indéfiniment, sans rien faire.Le deuxième atome va droit et rencontrera un tas de motifs répétés
@...@!
pour chaque lettre à produire.Finalement, il rencontrera
V
et partagera le sort du premier atome. Il n'y a aucun moyen de les détruire ou de s'arrêter avec la partie gauche du clavier.Deuxième programme
Le deuxième vient avec ses hauts et ses bas. J'ai des commandes pour changer la masse directement, mais la commande de sortie
O
détruit les atomes, donc je dois les préserver d'une manière ou d'une autre.Le programme démarre à droite de l'
L
atome à gauche.Motif répété:
'
met le code ASCII du caractère suivant dans la masse des atomes, de sorte que le code de certainsX
est stocké en premier, puis la masse est modifiée par_
et+
à la valeur exacte.Parfois, il
X'
est ignoré, s'il est plus court à utiliser juste_
et+
.L'atome vient de la gauche, réfléchit deux fois et frappe
}
de la gauche. Dans ce cas,}
fonctionne comme un cloneur, envoyant deux atomes identiques de haut en bas. L'atome descendant se réfléchit par le miroir et va à gauche. L'atome s'enroule, frappe le même miroir mais d'en bas et reflète donc à droite, rencontreO
et imprime.À la fin, le dernier atome rencontre la finale
O
pour être détruit.la source