En faisant l'examen du code, je suis tombé sur le code suivant, qui teste le statut d'une case à cocher:
if (!isNotUnchecked()) { ... }
J'ai dû faire un brainstorming pendant 30 minutes pour savoir quel statut de case à cocher le code attendait. S'il vous plaît écrivez-moi un programme qui peut simplifier ces expressions stupides!
Le programme doit accepter en entrée une chaîne représentant l'expression à simplifier (par exemple:) !isNotUnchecked()
. Le programme doit générer une expression simplifiée logiquement équivalente, isChecked()
ou !isChecked()
.
Le nom de la méthode dans l'expression d'entrée commence toujours par is
, contient 0..n Not
et se termine par Checked()
ou Unchecked()
. La méthode peut être préfixée par un nombre quelconque de !
.
Exemples
isChecked() => isChecked()
isUnchecked() => !isChecked()
isNotChecked() => !isChecked()
!isNotChecked() => isChecked()
!!!isNotNotUnchecked() => isChecked()
notunischecked
?isnotunchecked
par exemple.Réponses:
Python , 51 octets
Essayez-le en ligne!
la source
s[-8:]
'isC'+s[-8:]
est un octet plus que'isChecked'
?s[-8:]
est / fait?hecked()
.Retina , 23 octets
Essayez-le en ligne!
Explication
Tourner
Unchecked
dans!Checked
.Mettez tous
Not
s en!
. Nous avons maintenant quelque chose comme!!!is!!!!Checked()
.Trier toutes les correspondances de
is
ou!
. Depuis! < is
, cela déplace tout le!
début de la chaîne, ainsi l'exemple ci-dessus deviendrait!!!!!!!isChecked()
.Supprimez les paires de
!
pour annuler la négation répétée.la source
/// , 26 octets
Essayez-le en ligne!
Le port de ma rétine répond .
la source
Python , 43 octets
Une fonction sans nom qui prend la chaîne
s
et renvoie une chaîne.Essayez-le en ligne!
Il n'est pas nécessaire de vérifier l'existence de caractères quand
!
,Not
etUn
ils ont tous exactement un ordinal impair (etc
etC
sont tous les deux impairs). Il vous suffit donc de résumer les ordinaux et d'utiliser la valeur modulo 2 pour décider si nous en voulons un!
ou non.À part cela, le formulaire est identique à la réponse de xnor , car je n'ai rien trouvé de mieux. Ce qui suit est également 43:
la source
JavaScript (ES6),
5150 octetsFonctionne en recherchant
!
,N
et desn
personnages qui inversent l'état vérifié.split
retourne une longueur de tableau impair par défaut, donc nous ajoutons le!
lorsque lasplit
longueur est paire. Edit: 1 octet enregistré grâce à @ETHproductions. Version alternative, également pour 50 octets:la source
g
le dernier montage./!|N/i
/!|N/
sans lei
modificateurRetina , 24 octets
Essayez-le en ligne!
la source
Java 7,
10077 octetsExpanation:
Code de test:
Essayez-le ici.
Sortie:
la source
Aceto , 49 octets
yadda yadda Hilbert courbe.
Tout d’abord, nous plaçons les trois personnages importants sur la pile:
Ensuite, nous mettons un crochet et commençons par lire un seul caractère. Nous l'
d
upliquons et le nions, et si le résultat est vrai (si la chaîne était vide; l'entrée est donc terminée), nous sautons à la fin:Avec la copie restante du caractère saisi, nous vérifions s'il est contenu dans le reste de la pile (c'est-à-dire s'il s'agit de!, N, U). Si ce n'est pas le cas, nous générons une erreur et nous renvoyons à notre cible où nous lisons un autre personnage:
Sinon, nous chargeons ce qui est sur le stockage rapide (essentiellement un registre qui est initialement une chaîne vide; falsy), le nions et le renvoyons à un stockage rapide, puis nous soulevons aussi l'erreur (retour à la lecture des caractères):
Lorsque l'entrée est arrêtée, nous sommes envoyés à la fin. Là, nous inversons la direction, poussons un point d’exclamation, chargeons un stockage rapide et le nions. Si cela est vrai (c'est-à-dire que nous avons eu un nombre impair de choses négatives), nous imprimons le point d'exclamation que nous avons poussé:
Enfin, nous poussons la chaîne en deux parties et les imprimons (pour des raisons de gain de place):
Par la suite, le programme revient toujours au début d'origine, mais comme aucune commande ne génère quoi que ce soit ou n'a un comportement bouclé, cela n'a pas d'importance. En fait, la première commande non-invasive que nous atteignons lève une exception, ignorant la majorité du code car nous sautons à la cible, ce qui signifie que tout ce que Aceto voit dans cette partie est:
Depuis
U
maintenant n'est pas précédée par un guillemet simple et est donc pas considéré comme un caractère littéral, il est interprété comme une commande:U
inverse tous les éléments sur la pile (il est maintenant!
,N
,U
, du haut), et'N
et'!
pousser plus caractères, ce qui signifie que nous terminons avec la pile[U, N, !, N, !]
.Note latérale: Ceci est le premier programme Aceto écrit (en partie) avec l'aide du nouvel éditeur d' Aceto .
la source
C,
787068 octetsMerci Christoph!
Essayez-le en ligne
Sortie:
la source
c;f(char*s){for(c=1;*s;)c^=!!strchr("!NU",*s++);s="!isChecked()"+c;}
utiliser xor pour retournerc
enregistre 2 octets.Perl 5 , 31 octets
-2 octets grâce à @Dom Hastings .
30 octets de code +
-p
drapeau.Essayez-le en ligne!
y/UN!//
compte le nombre d'occurrencesUn
,Not
et!
. Le résultat est que de nombreux!
modulo 2, suivis deisChecked()
.Une autre tentative, basée sur regex, pour 38 octets (Dom Hastings a sauvegardé 1 octet sur celui-ci):
Essayez-le en ligne!
la source
c
s dansUnchecked
./g
flag). Les cas de test me semblent intéressants (voir le lien TryItOnline). Donc, je ne vois pas vraiment ce que vous voulez dire ...c
dans,Unchecked
il y en a aussi un dansChecked
, donc lorsque vous le modifiez, vous vous retrouvezCheCked
.Scala ,
39 à30 octetsEssayez-le en ligne!
Malheureusement, je n'ai pas réussi à en déduire le type de s.
Edit: Déplacé la déclaration de type dans l'en-tête (je pense que cela est autorisé, sinon je le remettrai).
la source
Ruby , 40 octets
Essayez-le en ligne!
la source
05AB1E , 22 octets
Essayez-le en ligne!
la source
05AB1E , 16 octets
Essayez-le en ligne!
Utilise l’astuce pour résumer les ordinaux de la réponse en python de Jonathan Allan .
Explication
la source
Japt ,
2423 octetsExplication
Essayez-le en ligne!
la source
o
casse est -elle sensible? Je ne savais pas que ...PHP (5.5 - 5.6),
525049 octetsEssayez-le ici .
PHP (> = 5.5),
666561Sans regex, cela devient un peu plus complexe :) Essayez-le ici .
la source
error_reporting
La valeur par défaut estE_ALL&~E_NOTICE&~E_STRICT&~E_DEPRECATED
.$b^=$a
Très belle trouvaille! Vous pouvez également le faire sans les balises PHP de même taille.for($b=b;$a=$argn[$i++];)$b^=$a;echo$b&"!"|" ","isChecked()";
Gelée ,
16 à15 octetsUn programme complet qui prend la chaîne comme argument de ligne de commande et affiche le résultat
Essayez-le en ligne!
OSḂ⁾!iṫ-7³ṫṭ⁾sC
ouOSḂ⁾!iṫ-7³ṫ⁾sC;
les deux travailleraient aussi pendant 15 ans.Comment?
Utilise la même idée que ma réponse Python , mais enregistre des octets en utilisant une construction différente de
!isC
ouisC
et certaines impressions implicites dans Jelly ...previous @ 16 octets 9 (utilisant la concaténation et l'appariement avec la même idée sous-jacente):
la source
OS1&”!x;“isC”;ṫ-7$
Perl 6 ,
3531 octetsL'essayer
Essayez-le
(nécessite une chaîne d'entrée mutable qui sera mutilée)
Étendu:
la source
Sed, 36 octets
Même idée que toutes les autres réponses de substitution directe.
la source
sed,
3738 octets37 + 1 pour le
-r
commutateur:la source
s/c/C/
posé problème pour la réponse à Perl 5 ...s/c/C/
attrapent le second "c" dans les cas sans "Un"g
et en déplaçant l's/!!//
intérieur de la boucle.Mathematica,
826160 octetsPetit tweak, ajouta un autre opérateur infixe:
Précédemment:
Comptez tous les o, n et! Puis mod 2 et mettez-en autant! devant.
Ancienne version:
la source
Excel, 90 octets
la source
Lot Windows, 120 octets
Auparavant 268 257 253 245 239 221 182 176 169 123 octets
Les programmes remplace tous les
!
enN#
. Parce que maintenant tous les signes de négation,! (Maintenant c'estN#
),Not
etUn
contientN
, le programme peut compter le nombre de comparutionsN
et déterminer si un interligne!
est requis.Chaque fois que le programme compte un an
N
, le compteur est ajouté par 5. La raison de l'ajout de 5 est que chaque valeur alternée lors de l'ajout de 5 se termine par 0 ou 5. Cela peut être utilisé pour déterminer si la valeur est impair ou pair et le premier!
nous avons ajouté si nécessaire.De plus, l'astuce des huit derniers caractères de xnor est utilisée.
la source
Jelly ,
29282521 octetsEssayez-le en ligne!
-4 octets merci à Jonathan Allan!
-4 octets merci à Jonathan Allan! (en utilisant des chaînes compressées)
la source
jellyCompress.Compress().string("is").dictionary("Checked").string("()").go()
. (Si vous exécutez une installation cmd sous Windows, passez à la police DejaVu Sans Mono et modifiez la page de codes avec la commandechcp 65001
avant de lancer Python pour que les caractères s'affichent)PHP, 55 octets
Essayez-le en ligne!
PHP, 58 octets
à la place,
"#[!NU]#"
vous pouvez utiliser"#[!N]#i"
Essayez-le en ligne!
PHP, 68 octets
Version sans regex
Essayez-le en ligne!
la source
<?=preg_match_all("#[!UN]#",$argn)&1?"!":""?>isChecked()
-2 octetscount(split())
: D @Titus bonne idée!" !"[$d&1]
enregistre un autre octet si l’espace blanc est correct.$d^=!trim($c,"UN!")
enregistre 3 octets (parce que vous n'en avez plus besoin&1
)."!"[!$d]
placeJapt , 19 octets
Essayez-le en ligne!
Déballé et comment ça marche
Utilisation de l'astuce somme-code de la solution Python de Jonathan Allan .
la source
Pascal (FPC) , 119 octets
Essayez-le en ligne!
En utilisant la méthode utilisée par presque toutes les réponses, en additionnant les points de code des caractères puis en vérifiant la parité de la somme.
la source