Main gauche contre main droite - Défi des dactylos

32

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( \x0aet / 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.

Dom Hastings
la source
6
Pourquoi H est la main gauche?
tsh
1
@tsh Je voulais diviser le clavier 6/6 (ou aussi près que possible) juste pour essayer de garder un nombre plus pair de symboles pour chaque "main".
Dom Hastings
8
// Peut-être que je devrais apprendre les espaces blancs et revenir plus tard ...
tsh
@tsh, je suppose qu'une réponse d'espaces est inévitable! Je ne sais pas à quel point ce serait compétitif! J'aurais peut-être dû aborder cela trop tard maintenant!
Dom Hastings
Est-ce correct si le programme a une autre sortie (non blanche) aussi longtemps qu'il inclut les textes demandés?
Grzegorz Oledzki

Réponses:

12

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 à -Epartir de la ligne de commande) pour activer à saynouveau 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"

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

Essayez-le en ligne!

Droite 173

Exécuter avec l' -poption (qui comprend également les bons caractères)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

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, $_et sub{}rend difficile la sortie

Essayez-le en ligne!

Ton Hospel
la source
Pas du tout préoccupé par les drapeaux, je suis heureux que cela soit valide. Une solution beaucoup plus courte que ce que j'ai bricolé comme je l'ai appelé evalvia &{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}!
Dom Hastings
12

Espace blanc , 1175 1143 655 645 638 632 639 578 (293 + 285) octets

Cela 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é pumpkincomme pumkin.. (Merci d'avoir remarqué, @ fəˈnɛtɪk .)

Lettres S(espace), T(tabulation) et N(nouvelle ligne) ajoutées comme surbrillance uniquement.
[..._some_action]ajouté à titre d'explication uniquement.

Côté gauche Pollinium milk; plump pumpkin; lollipop?:

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

Essayez-le en ligne (avec des espaces bruts, des onglets et des nouvelles lignes uniquement).

Côté droit Weatherheaded sweetheart haberdasheress!:

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

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 pile
  • S: Poussez ce qui suit sous forme de nombre dans la pile
  • S/ T: Bit de signe où Sest positif et Tnégatif
  • Certains Tet Ssuivis d'un N: Mettez un nombre binaire dans la pile ( T=1et S=0).

Ensuite, il fera une boucle sur la pile inversée et imprimera tout sous forme de caractères. Il procède comme suit:

  1. Appuyez sur 0 ( SSSN)
  2. Appuyez sur tous les chiffres indiquant les caractères inversés comme expliqué ci-dessus
  3. Créer un Label_0( NSSN)
    1. Dupliquez le haut de la pile ( SNS)
    2. Si cette valeur est 0: Aller à Label_1( NTSTN)
    3. Sinon: Pop et imprimer le haut de la pile en tant que caractère ( TNSS)
    4. Aller à Label_0( NSNN)
  4. Créer 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:

  1. 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 110102 101

    • Appuyez sur 110 ( SSSTTSTTTSN) dans le programme 1 ou 101 ( SSSTTSSTSTN) dans le programme 2
    • Pop et ajoutez les deux premières valeurs de la pile avec l'autre, et le résultat est le nouveau haut de la pile ( TSSS)
  2. Je l' ai aussi utilisé SNSdans certains cas pour dupliquer le haut de la pile, qui est utilisé pour le golf le ll, ll, eeet ss.

  3. 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 ).

  4. Il est possible de copier une n'e valeur depuis le haut de la pile (avec STS+ 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 pdans pop( STSSTN(copie 1ère) est plus court que SSSTTSSN(créer le numéro pour 'p')), le second ldans lol( STSSTN(copie 1er) est plus court que SSSTSSSN(créer le numéro pour 'l') )), le second pdans p p( STSSTN(copier le 1er) est plus court que SSSTTSSN(créer le numéro pour 'p')), le second pdans pumlp( STSSTTN(copier le 3e) est plus court que SSSTTSSN(créer le numéro pour 'p')), le second pdans pmup( STSSTSN( copie 2e) est plus courte queSSSTTSSN(créer un numéro pour 'p')), le second mdans m m( STSSTN(copier le 1er) est plus court que SSSTSSTN(créer le numéro pour 'm')), le second idans ini( STSSTN(copier le 1er) est plus court que SSSTSTN(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 ereou ded, 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.

  5. Dans les deux programmes, j'ai changé l'étape 1 de la boucle de SSSN(Push 0) en SSN(Push error_value) et supprimé les étapes 3.1 ( SNSDuplicate) et 3.2 ( NTSTNIf 0: Exit). Maintenant, il se terminera simplement avec une erreur qui SSNest une valeur inconnue dès qu'il essaie d'y accéder.

  6. Suppression SSNcomplè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.

  7. Modification des valeurs constantes de 100et 102vers 110et 101respectivement. Voici le programme Java utilisé pour générer la 110constante; et ici le programme Java utilisé pour générer la 101constante. 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.

Kevin Cruijssen
la source
Le truc ST est juste pousser le nombre comme binaire, avec un espace comme 0, tab comme 1. La sortie est le TNSS, donc vous avez deux espaces supplémentaires au début de chaque programme. Il enregistre également probablement des octets à dupliquer, puis ajoute / soustrait pour chaque caractère et boucle sur les valeurs à la fin.
Jo King
1
Vous avez mal écorcé la citrouille.
fəˈnɛtɪk
@ fəˈnɛtɪk Whoops lol .. Devrait être corrigé maintenant, merci de l'avoir remarqué.
Kevin Cruijssen
4

Lenguage, ce nombre d' octets

Le côté gauche est 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 répétitions du acaractère, ce qui équivaut au programme Brainfuck suivant:

-[--->+<]>-----.[--->+<]>-.---..---.+++++.-----.++++++++++++.--------.[->+++++<]>-.+[----->+<]>.----.+++.-.--[->+++<]>.+[-->+<]>++.[-->+++++++<]>.----.+++++++++.--------.+++.[------->++<]>.[-->+++++++<]>.+++++.--------.+++.-----.--.+++++.[-->+<]>++++.+[-->+<]>++.++[--->++<]>.+++.---..---.+++++++.-.+.[--->++++<]>-.

Essayez-le en ligne!

Le côté droit est 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 répétitions du pcaractère, ce qui équivaut au programme Brainfuck suivant:

+[--->++<]>+.++[->++++<]>+.----.--[--->+<]>-.------------.---.+++++++++++++.----------.---.----.+++.+.-.-[--->+<]>-.---[->++++<]>-.++++.[->+++<]>..[--->+<]>---.------------.---.----.--[--->+<]>---.++.[---->+<]>+++.-[--->++<]>--.-------.+.+++.+++++++++++++.--------------.---.--[--->+<]>--.-----------.---.+++++++++++++.-------------.[--->+<]>----..+[-->+++++<]>-.

Essayez-le en ligne!

MD XF
la source
3

CJam , 128 + 192 = 320 octets

64G^c111c111Z^cT$111c6^111X^c1$116X^c111Y^c32c1$6$Y3#$111c4^56Z^c32c112c13$A$A$3$5$1$4$4$4$12$22$22$14$32c13$111c1$T$7$A$4$1$63c

Essayez-le en ligne!

'U))'i(((('_))'u('i('i(((('p))'i('i(((('_))'_)))))'i(((('_)))))'&(((((('u(('u))'i(((('i(((('u('i('i(((('_))'p))'u('&(((((('i('_))'_)))'i(((('p))'_)))))'_))'u(('i('i(((('p))'i(((('u(('u(('&(((((

Essayez-le en ligne!

Lynn
la source
3

Fission , 958 + 752 = 1710 octets

._.

La gauche

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

Essayez-le en ligne!

Droite

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

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:, RLDUj'ai donc deux commandes pour les groupes gauche et droit.
Le deuxième porte-bonheur porte sur 2 commandes de sortie !et O, 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 existe également des miroirs pour contrôler les atomes dans les deux groupes! Mais je ne les ai pas utilisés dans le premier programme

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

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

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.

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

Finalement, il rencontrera Vet 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 Odétruit les atomes, donc je dois les préserver d'une manière ou d'une autre.
Le programme démarre à droite de l' Latome à gauche.

Motif répété:

} \
/O\...X'

'met le code ASCII du caractère suivant dans la masse des atomes, de sorte que le code de certains Xest 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, rencontre Oet imprime.
À la fin, le dernier atome rencontre la finale Opour être détruit.

Possum mort
la source