Faire tandis que faux
Au travail aujourd'hui, un de mes collègues décrivait le cas d'utilisation de do while (false). La personne à qui il parlait a pensé que c'était ridicule et aussi simple que de simples déclarations. Nous avons ensuite passé la moitié de notre journée à discuter de la meilleure façon d’écrire quelque chose d’équivalent à:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
C’est un idiome qui se trouve assez souvent dans c. Votre programme devrait produire le même résultat que le pseudo-code ci-dessous en fonction des conditions.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Par conséquent, l'entrée pourrait être:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
et le résultat devrait être:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
C'est du code-golf, donc les réponses seront jugées sur des octets. Les échappatoires standard sont interdites.
Oui, c’est simple, mais j'espère que nous trouverons des réponses créatives. J'espère que la simplicité encouragera les gens à utiliser des langues avec lesquelles ils ont moins confiance.
return result
à la place debreak
. Ensuite, vous bénéficiez des bonus de réutilisation et de simplification du code d'appel. Mais peut-être que je manque quelque chose.goto
utiliser parce que leurgoto
forme est mauvaise :)do{}while(false)
est dans les macros. Un simpleif
ne suffit pas, car il interagit mal avec deselse
objets potentiellement présents. Sans macro, vous pouvez également supprimer ledo
etwhile
.Réponses:
Python 3, 31
Sauvegardé 1 octet grâce à xnor.
Un seul octet de distance de ES6. : / Stupid Python et sa syntaxe de fonction anonyme longue.
Hourra pour un paquebot!
Cas de test:
la source
x*"AB"
, vous pouvez économiser de l'espace après.λ
un synonyme delambda
serait génial :)JavaScript ES6,
302625 octetsUne simple fonction anonyme prenant deux entrées. Attribuer à une variable à appeler. Mise à jour : Passons au mouvement d'index. Il sauve 4 octets. J'ai sécurisé mon avance sur Python . Enregistré un octet en currying la fonction; appeler comme
(...)(a)(b)
. Merci Patrick Roberts!Ancienne version originale, 30 octets (inclus pour ne pas fondre dans la réponse en python
(;
):la source
:b?
Macro de préprocesseur C, 34
Essayez-le en ligne .
la source
Haskell, 28 octets
Exemple d'utilisation:
False # True
->"ACD"
.Utiliser les valeurs d'entrée directement en tant que gardes.
la source
MATL , 15
17octetsLes entrées sont
0
ou1
sur des lignes séparées. Alternativement,0
peut être remplacé parF
(MATLfalse
) et1
parT
(MATLtrue
).Essayez-le en ligne!
la source
Brainfuck, 65 octets
Cela suppose que C1 et C2 sont entrés sous forme brute de 0 ou 1 octet. par exemple
Golfé:
Ungolfed:
Je pense qu'il est intéressant de noter que cette solution est en fait basée sur la rupture des boucles while.
la source
GNU Sed, 21
Idéone .
la source
NTFJ , 110 octets
Plus lisible:
C'était certainement amusant. Essayez-le ici , en utilisant deux caractères (
0
ou1
) comme entrée.En utilisant la méthode de conversion de ETHProduction en 0, 1 (caractères) en bits, cela devient plus simple.
C'est la dite méthode. En
##~~~~~#@
appuyant sur 193 ( ), appuyez sur NAND (|
) avec la valeur d'entrée supérieure (dans ce cas, le premier code de caractère, a 48 ou 49). Cela donne 254 pour 1 et 255 pour 0. NAND avec 255 (########@
) donne 0 ou 1 bit en fonction de l'entrée.Ceci imprime un
A
, puisque toutes les entrées commencent parA
.*
apparaîtA
lors de l’impression pour que la pile reste inchangée par rapport à son état précédent.Cas 1: le premier bit est
1
, et(
active le code à l'intérieur.~#~~~~#~@*
imprimeB
et########@^
pousse 255 et saute à cette position dans le code. Ceci étant la fin du programme, il se termine.Cas 2: le premier bit est
0
.(
passe à)
et le code continue.Ceci affiche un
C
, car c'est le caractère suivant.Ceci convertit notre deuxième entrée en un peu.
Si notre deuxième bit est un 1, nous procédons à l'impression d'un fichier
E
.Ceci est la représentation NAND de la négation booléenne de notre bit:
A NAND (0 NAND A) = NOT A
.Ceci s’active maintenant si le bit était un
0
et imprimeE
.la source
Pyth, 16 octets
Suite de tests
Ternaires!
Explication:
Entrée sur deux lignes consécutives.
la source
CJam, 15
1617octetsEssayez-le en ligne!
Un octet à l’aide de @randomra et un octet à l’aide de @Dennis
Explication:
Ancienne version (16 octets):
Explication:
la source
Pyth, 13 caractères, 19 octets
Prend la saisie sous forme [a, b]
Explication
Essayez-le ici
Ou utilisez une suite de tests
la source
«
1 octet chacun (2 octets en UTF-8). Les deuxwc
et cela convient que c'est 19 octets.C, 76 octets
J'ai renommé
c1
àc
,c2
àC
etresult
àr
. C les programmeurs vont aux extrêmes pour évitergoto
. Si vous avez un problème avec la syntaxe absurde en C, c'est probablement parce que vous ne l'avez pas utiliségoto
.Ungolfed
la source
char r[4]="A";
? Mon C est rouillé."AC"
et de remplacer tout der[1]=67
àr[2]=69;
avecr[2]=c2?68:69;
C, 41 octets
Je ne sais pas si la question nécessite un programme, une fonction ou un extrait de code.
Voici une fonction:
Il obtient l'entrée dans deux paramètres, qui doivent être 0 ou 1 (enfin,
b
doit), et imprime sur stdout.Définit
a
à l'un des0x4241
,0x454341
ou0x444341
. Lorsqu'il est imprimé sous forme de chaîne, sur un système ASCII little-endian, donne la sortie requise.la source
R ,
413937 octetsEssayez-le en ligne!
Dans R,
TRUE
etFALSE
sont forcés à1
et0
respectivement lorsque vous essayez de les utiliser comme nombres. Nous pouvons convertir ces chiffres en indices1
,2
et3
par la formule1+a+a^b
.Ces valeurs sont ensuite utilisées pour indexer la liste
ACD
,ACE
,AB
pour obtenir la sortie correcte.Enregistré deux octets grâce à JayCe.
Si vous préférez une version avec une
if
instruction, voici ce qui suit pour 41 octets:Essayez-le en ligne!
la source
^
Mathematica,
35 à30 octetsTrès simple. Fonction anonyme.
la source
Rétine, 22 octets
Essayez-le en ligne
la source
^
avecm`
pour le faire fonctionner pour une entrée multiligne, ce qui n'est pas nécessaire pour la question, mais facilite les tests.JavaScript, 38 octets
Utilisez sans délimiteur
0
ou à la1
place defalse
/true
la source
split` `
au lieu desplit(" ")
+('0b'+prompt())
au lieu deparseInt(prompt(),2)
Caché ObjectScript , 27 octets
la source
ArnoldC , 423 octets
Comme ArnoldC ne semble pas avoir d'entrée formelle, il suffit de remplacer les 2 premières
YOU SET US UP
valeurs par 0 ou 1.Explication
Ceci est juste un tas d'instructions conditionnelles qui représentent toutes les sorties possibles. Pourquoi, vous pouvez demander? ArnoldC n'a pas vraiment de compréhension des cordes. Il ne peut même pas concaténer des chaînes! En conséquence, nous devons recourir à la méthode la plus ... inefficace ....
la source
Java, 28 octets
Même passe-partout que beaucoup de réponses. le type est
BiFunction<Boolean,Boolean, String>
.la source
(c,d)->
pouvez jouer au golf par octetc->d->
lorsque vous utilisez ajava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pyth, 21 octets
Essayez-le ici!
L'entrée est prise comme 0 ou 1 au lieu de vrai / faux pendant que C1 vient en premier.
Explication
En utilisant simplement le fait qu'il n'y a que 4 résultats possibles. Fonctionne en interprétant l'entrée en tant que binaire, en la convertissant en base 10 et en l'utilisant pour choisir le bon résultat dans la chaîne de recherche.
la source
Y , 20 octets
Dans le cas où la première entrée est une, une seule entrée est prise. Je suppose que ce comportement est autorisé. Essayez-le ici!
Ungolfed:
A expliqué:
Cela pousse les personnages
B
puisA
à la pile.Cela prend une entrée, l'incrémente, l'affiche et se déplace sur ce nombre de sections.
Cas 1:
j1 = 0
. C'est le plus intéressant.r$
inverse la pile et affiche une valeur,'C'E
pousse des caractèresC
etE
.@
convertitE
en son équivalent numérique, en soustrait la deuxième entrée et le reconvertit en un caractère.r
annule la pile. Ensuite, le programme voit le lien C, passe au lien suivantp
et imprime la pile.Cas 2: le programme passe au dernier lien
p
, qui affiche simplement la pile entière.la source
PowerShell, 40 octets
Tableaux imbriqués indexés par entrée. Dans PowerShell,
$true
/1
et$false
/0
sont pratiquement équivalents (grâce à une conversion de texte très lâche), ce qui permet de les indexer correctement dans un tableau à deux éléments. C’est vraiment aussi proche d’un ternaire que PowerShell, et je l’ai utilisé à de nombreuses reprises au golf.Exemples
la source
K, 37 octets
la source
Vitsy , 26 octets
Attend les entrées sous forme de 1 ou de 0 via STDIN avec une nouvelle ligne de séparation.
J'ai en fait découvert un problème sérieux avec les déclarations if lors de ce défi. D: Ceci est posté avec la version cassée, mais cela fonctionne très bien. (Je mettrai à jour ceci après avoir résolu le problème)Veuillez noter que j'ai mis à jour Vitsy avec un correctif de if / ifnot. Ce changement ne me donne aucun avantage, mais seulement une clarification.Explication:
Essayez-le en ligne!
la source
cire d'abeille , 26 octets
Interpréter
0
comme faux,1
comme vrai.Sortie:
Cloner mon interprète en cire d'abeille à partir de mon référentiel Github .
la source
C,
4745 octetsComme il n'y a que 3 résultats différents, nous pouvons choisir l'une des trois chaînes suivantes:
Merci à Herman L pour 2 octets
Démo
la source
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 octets
Nécessite le
-E
|-M5.010
flag et prend les entrées 1 et 0:Solution alternative qui nécessite
-p
et qui est 22 + 1 = 23 octets:la source
say-<>?AB:-<>?ACD:ACE
est deux octets plus court.05AB1E ,
23 à20 octetsCode:
Essayez-le en ligne!
la source
i„ABë„AC69I-çJ
essayez-le en ligne ou vérifiez tous les cas de test .I
. ; pJapt, 19 octets
Testez-le en ligne!
Fait amusant: Ce serait 16 octets s'il n'y avait pas de bogue:
la source