Votre patron vient de vous envoyer par courrier électronique une liste de 12 tâches de programmation dont il a besoin d’être effectuée dès que possible. Les tâches sont assez simples, mais votre patron, étant un jeune magnat du logiciel séduit par les réseaux sociaux, insiste sur le fait que vos solutions peuvent s’intégrer dans un seul tweet Twitter .
Cela signifie que vous ne disposez que de 140 octets de code pour résoudre toutes les tâches, soit une moyenne de 11,67 octets par tâche. (Oui, Twitter compte les caractères, mais votre patron a spécifiquement indiqué des octets.)
Vous réalisez qu'il n'y a aucun moyen de résoudre les 12 tâches sur 140 octets, mais vous pensez que votre supérieur ne testera pas toutes vos solutions. Vous devez donc résoudre autant de tâches que vous le pouvez, en en sautant complètement certaines. Votre état d' esprit est qu'il n'a pas d' importance qui sous - ensemble des tâches que vous complet, il importe seulement que le sous - ensemble est aussi grand que possible .
Combien de tâches pouvez-vous accomplir?
Défi
Ecrivez jusqu'à 12 programmes différents, dont chacun résout avec précision l'une des 12 tâches énumérées ci-dessous. La somme cumulée des longueurs de ces programmes ne peut dépasser 140 octets.
Alternativement, vous pouvez écrire un programme unique ne dépassant pas 140 octets prenant un entier compris entre 1 et 12 et (idéalement) procédant à la résolution de la tâche correspondante, en prenant plus d'entrées si nécessaire. Toutes les tâches ne doivent pas nécessairement fonctionner, mais seules celles qui comptent pour votre score. Les tâches qui ne fonctionnent pas sont autorisées à commettre des erreurs ou à faire autre chose.
Dans les deux cas, un "programme" peut en fait être une fonction qui prend l’entrée comme argument ou qui l’invite, puis l’affiche ou la renvoie. Ainsi, par exemple, vous pouvez écrire une fonction de 140 octets qui ressemble à f(taskNumber, taskInput)
, ou vous pouvez écrire des extraits de code séparés pour chaque tâche, certains en tant que fonctions et d'autres en tant que programmes à part entière.
Autres détails:
Tout le code doit être écrit dans la même langue.
Comme d'habitude, l'entrée doit provenir de stdin, de la ligne de commande, d'un argument de fonction ou de ce qui est habituel pour votre langue. La sortie est imprimée sur stdout ou l'alternative la plus proche de votre langue, ou renvoyée dans un type approprié.
Une quantité raisonnable de formatage d’entrée suffit. Par exemple, des guillemets autour de chaînes ou à la
\n
place des sauts de lignes réels.La sortie doit correspondre exactement à ce qui est demandé, sans mise en forme superflue ni espace. L'exception est une nouvelle ligne de fin unique.
Le code qui ne fonctionne que dans un environnement REPL ne constitue pas un programme ou une fonction.
Vous ne pouvez pas écrire plusieurs programmes qui résolvent plusieurs tâches. C'est soit un programme qui (idéalement) résout toutes les tâches, soit (idéalement) 12 programmes qui résolvent chacun une tâche unique.
La publication d'une solution de tâche que vous n'avez pas écrite ou que vous n'avez que légèrement modifiée n'est pas autorisée sans attribution à l'auteur d'origine et, idéalement, pour obtenir l'autorisation également. Si votre réponse compose principalement les solutions les plus courtes parmi toutes les autres réponses, il devrait s'agir d'un wiki de communauté.
Notation
La soumission qui accomplit le plus de tâches est le gagnant. Si deux soumissions sont égales, celle qui a le moins d'octets gagne. Si le nombre d'octets est égal, la soumission la plus ancienne l'emporte. Les réponses du wiki de la communauté ne sont pas autorisées à gagner.
Assurez-vous de nous dire quelles tâches vous avez résolues, pas seulement combien!
Handicap pour les non-golfeurs:
Il est probable que ce défi sera dominé par les langues de golf . Beaucoup de langues peuvent avoir du mal à résoudre même une ou deux tâches sur 140 octets. Par conséquent, vous pouvez soumettre une réponse non compétitive lorsque la limite est de 3 tweets, soit 420 octets. Toutes les autres règles restent les mêmes.
les tâches
Tâche 1 - Trois nombres peuvent-ils former un triangle?
Prendre trois nombres entiers positifs et sortir une valeur de vérité / fausseté indiquant si trois lignes avec ces longueurs peuvent former un triangle . Vous ne pouvez pas supposer que les chiffres sont dans un ordre particulier.
Exemples de vérité (un par ligne):
20 82 63
1 1 1
2 3 4
1 2 2
Exemples de fausseté:
6 4 10
171 5 4
1 1 2
1 2 3
Tâche 2 - Plus proche du million
Avec une chaîne contenant exactement 7 chiffres décimaux (0 à 9), réorganisez-les pour obtenir un nombre aussi proche que possible du million. C'est, abs(1000000 - rearrangedNumber)
devrait être minimisé.
Imprimer ou renvoyer le nombre obtenu sous forme de nombre entier et non de chaîne (il ne devrait donc pas y avoir de zéros au début, à moins que ce ne soit la norme pour votre langue).
Par exemple, une entrée de 9034318
doit avoir pour résultat 984331
(et non 1033489
).
2893984
devrait devenir 2348899
.
0001000
devrait devenir 1000000
.
0000020
devrait devenir 200000
.
Tâche 3 - Simulateur de clavier simple
Prenez une chaîne de lettres minuscules (az), des espaces et des crochets <>
. Lue de gauche à droite, cette chaîne représente les touches sur lesquelles vous avez appuyé sur un clavier standard alors qu'un éditeur de texte initialement vide était ouvert. Les lettres et les espaces correspondent à leurs touches normales mais <
correspondent à la flèche gauche et >
à la flèche droite, qui déplacent le curseur lorsqu'elles sont enfoncées.
<
déplace le curseur d'un caractère à gauche, ou ne fait rien si le curseur se trouve au début de la chaîne.
>
déplace le curseur d'un caractère à droite, ou ne fait rien si le curseur se trouve à la fin de la chaîne.
Affiche la chaîne qui serait dans l'éditeur de texte une fois que toutes les touches de la chaîne ont été enfoncées. La sortie de codes d'échappement pour déplacer le curseur n'est pas autorisée.
Il y aura toujours au moins un caractère de touche non-flèche dans l'entrée.
par exemple, l'entrée ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
devrait donner the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
devrait donner llammoptimizer
.
e< <c<b<a
devrait donner abc e
.
<<<>><><<><toast>><<>><><<>><
devrait donner toast
.
Tâche 4 - Lettres FILTHE
Dans de nombreuses polices, 6 des lettres de l' alphabet anglais majuscules se composent uniquement de lignes horizontales et verticales: E
, F
, H
, I
, L
et T
. Nous les appellerons les lettres FILTHE.
Prenez une chaîne de lettres majuscules (AZ) et comptez le nombre de lignes dans les lettres FILTHE, en générant le nombre entier résultant.
E
, F
, H
, I
, L
, Et T
ont 4, 3, 3, 3, 2 et 2 lignes , respectivement.
Par exemple, GEOBITS
4 + 3 + 2 = 9 lignes font-elles partie des lettres FILTHE (pour .E..IT.
), le résultat devrait donc être 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
devrait sortir 17
.
ABCDGJKMNOPQRSUVWXYZ
devrait sortir 0
.
FILTHYLINESINLETTERS
devrait sortir 39
.
Tâche 5 - Alex récursif A.
Notre modérateur Alex A. a une initiale assez mystérieuse, "A".
Maintenant, je ne suis pas certain, mais je pense que cela A.
signifie .A xelA
. Et je suis aussi à peu près sûr que .A
cela représente furtivement Alex A.
.
Ainsi, pour obtenir le nom complet d'Alex, nous devons développer les A.
'et .A
':
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Demandez à votre programme de prendre un entier non négatif et de le développer Alex A.
plusieurs fois, en générant la chaîne résultante.
Ainsi
0
deviennent Alex A.
,
1
deviennent Alex .A xelA
,
2
deviennent Alex Alex A. xelA
,
3
deviennent Alex Alex .A xelA xelA
,
4
deviennent Alex Alex Alex A. xelA xelA
,
5
deviennent Alex Alex Alex .A xelA xelA xelA
,
et ainsi de suite.
(J'ai fait cela parce que je me sentais mal d'avoir laissé Alex par inadvertance en dehors de mon défi hommage mod .: P)
Tâche 6 - Rotation du pavé numérique
Prenez un entier de 1 à 9 inclus (vous pouvez le prendre comme une chaîne). Affiche le carré 3 × 3 de chiffres
789
456
123
tourné par incréments de 90 ° de sorte que le chiffre saisi apparaisse n'importe où sur la rangée supérieure. Quand 5
est entrée, toute rotation est une sortie valide car il est 5
impossible de faire pivoter vers le haut.
par exemple quand 3
est entrée, les deux
963
852
741
et
321
654
987
sont des sorties valides.
Pour entrée 4
seulement
147
258
369
est une sortie valide.
Tâche 7 - Scinder les chiffres en dizaines
Prenez une chaîne non vide de chiffres décimaux (0-9) et indiquez une valeur de vérité si elle peut être scindée en sections contiguës où tous les chiffres de chaque section totalisent exactement 10. Si cela n'est pas possible, indiquez une valeur de fausseté.
par exemple, 19306128
peuvent être scindés de la manière suivante 19|3061|28
: les sections totalisant toutes 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8), une valeur de vérité doit donc être sortie.
Exemples de vérité (un par ligne):
19306128
073
730
0028115111043021333109010
2222255
Exemples de fausseté:
6810410
9218
12341
5222225
000
Tâche 8 - Horloge carrée
Prenez une chaîne multiligne de taille constante.
Sortie 12
si l'entrée est
_ _
| | |
|_ _|
Sortie 3
si l'entrée est
_ _
| |_|
|_ _|
Sortie 6
si l'entrée est
_ _
| | |
|_|_|
Sortie 9
si l'entrée est
_ _
|_| |
|_ _|
Il n'y a pas d'autres cas d'entrée.
Tâche 9 - Art du support
Prendre dans une chaîne de 4 octets contenant l' un de chacun des supports de gauche (
, [
, {
, et <
dans un ordre quelconque.
Ajoutez les crochets droits correspondants pour que la chaîne ait une longueur de 8 octets et une ligne de symétrie verticale. par exemple [<({
devient [<({})>]
.
Inversez ensuite tous les crochets de cette chaîne. par exemple [<({})>]
devient ]>)}{(<[
.
Affiche la chaîne de 8 octets d'origine avec la version inversée en haut et en bas sur des lignes séparées.
Donc, le résultat final pour l'entrée [<({
serait
]>)}{(<[
[<({})>]
]>)}{(<[
De même, la sortie pour <({[
devrait être
>)}][{(<
<({[]})>
>)}][{(<
L'entrée (<<[
est invalide car il {
manque et il y a un extra <
.
Tâche 10 - Périmiterise
Prenez une grille rectangulaire de texte (1 × 1 au plus petit) constituée de .
's représentant des espaces vides et de X
' qui représentent des carreaux pleins. Les cellules situées au-delà des limites de la grille sont considérées comme vides. Vous pouvez supposer que chacune des 4 lignes et colonnes du bord de la grille en contient au moins une X
.
Par exemple, une entrée valide pourrait être:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Générez une autre grille de texte rectangulaire dans laquelle toutes les cellules vides adjacentes à une X
orthogonale ou diagonale, y compris celles situées en dehors de la grille de saisie , deviennent o
. Donc, essentiellement, un périmètre de o
'est dessiné autour de toutes les portions de carreaux pleins. La nouvelle grille ne devrait pas être plus grande que nécessaire.
Ainsi, le résultat de l'exemple ci-dessus serait:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
De même, la sortie d’entrée XXX..X.X
devrait être
oooooooooo
oXXXooXoXo
oooooooooo
et sortie
oooooooooo.
oXXXooXoXo.
oooooooooo.
serait invalide puisque la colonne la plus à droite vide est inutile.
Vous pouvez utiliser tous les 3 distincts ASCII imprimables caractères à la place .
, X
et o
.
Tâche 11 - Place Sator
Sortez le carré Sator :
SATOR
AREPO
TENET
OPERA
ROTAS
N'importe laquelle des lettres peut être en minuscule ou en majuscule, donc
SatOR
aRePO
tenet
OPERa
RoTaS
est également une sortie valide.
Il n'y a pas d'entrée.
Tâche 12 - Prime Tweet
Ne faites aucune entrée, mais générez une chaîne ASCII imprimable de 140 octets contenant au moins un de chacun des 95 caractères ASCII imprimables. (Donc, 45 caractères seront des doublons.)
La somme des codes de caractère de tous les 140 octets de cette chaîne doit être un nombre premier de Sophie Germain , c’est-à-dire un nombre premier p
tel qu’il 2p+1
soit également premier. Le code de caractère pour l'espace est 32, 33 pour !
, 34 pour "
, et ainsi de suite jusqu'à 126 pour ~
. La somme pourrait être calculée en Python comme sum(map(ord, myString))
.
Un exemple de sortie est:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
La somme de code de caractère est le nombre premier 12203 dont le nombre premier sûr est 24407.
import
s? Disons que j'écris 5 fonctions pour lesquelles 2 ont besoin du même module (par exemple import Math
), est-ce compté deux fois?