Intro
Chaque année, Dyalog Ltd. organise un concours d’étudiants. Le défi consiste à écrire un bon code APL. Il s'agit d'une édition code-golf indépendante du langage et du huitième problème de cette année.
J'ai la permission explicite de poster ce défi ici de l'auteur original du concours. N'hésitez pas à vérifier en suivant le lien fourni et en contactant l'auteur.
Problème
Avec une liste booléenne *, "éteignez" toutes les vérités après la première vérité.
Aucune vérité? Aucun problème! Il suffit de retourner la liste non modifiée.
Exemples
[falsy,truthy,falsy,truthy,falsy,falsy,truthy]
→ [falsy,truthy,falsy,falsy,falsy,falsy,falsy]
[]
→ []
[falsy,falsy,falsy,falsy]
→ [falsy,falsy,falsy,falsy]
* Toutes vos vérités doivent être identiques et toutes vos fausses doivent être identiques. Cela inclut la sortie.
Réponses:
Python 2 , 35 octets
Essayez-le en ligne! L'entrée et la sortie sont des lignes True / False.
Basé sur la solution de Dennis . Redéfinissent la variable
True
d'êtreFalse
après uneTrue
entrée est rencontrée. De cette façon, toute autre entrée deTrue
sera évaluéeFalse
et imprimée en tant que telle.La redéfinition est
True&=b<1
, à savoirTrue = True & (b<1)
. Lorsque l'entréeb
estTrue
,(b<1)
False (depuisTrue==1
)True
devient ainsiFalse
.la source
True, False = False, True
.APL , 2 octets
Evalue à la fonction "numériser avec moins que". Essayez-le en ligne!
Explication
Dans APL, l'opérateur
\
(scan) réduit chaque préfixe non vide d'un tableau en utilisant la fonction fournie. Par exemple, étant donné le tableau0 1 0
, il calcule0
(préfixe de longueur 1),0<1
(préfixe de longueur 2) et0<(1<0)
(préfixe de longueur 2) et place les résultats dans un nouveau tableau; les parenthèses s'associent à droite. Réduire par<
de la droite a pour résultat le1
moment exact où se1
trouvent le dernier élément du tableau et le reste0
, ainsi le préfixe correspondant au plus à gauche1
est réduit à1
et les autres à0
.la source
Aceto ,
1917 octets non concurrentsNouvelle version (17 octets):
Cette nouvelle version prend les caractères un par un et est mieux exécutée avec l'
-F
option. Cela fonctionne de manière similaire, mais pas identique à la solution précédente:Ancienne réponse (19 octets):
(Non compétitif car j'ai dû corriger deux bugs dans l'interprète)
C’est la première réponse Aceto qui souligne ce qu’elle peut faire relativement bien, je dirais. Les "listes" sont des flux d'entrée, avec une entrée par ligne, "1" pour vrai et "0" pour faux, avec une chaîne vide indiquant la fin de la liste.
Les programmes Aceto fonctionnent sur une courbe de Hilbert, commençant en bas à gauche et se terminant en bas à droite. Premièrement, nous
r
lisons une chaîne, nous lad
mettons en uplicate et la nions (!
), transformant les chaînes vides en True, tout le reste en False. Ensuite, il y a un miroir horizontal conditionnel (|
): si l'élément supérieur de la pile est la vérité, faites-le miroir horizontalement. Cela se produit lorsque la chaîne était vide. Si nous procédons en miroir, nous atterrissons sur leX
qui tue l’interprète.Sinon, nous convertissons la copie restante de la pile en un
i
entier et faisons un autre miroir horizontal conditionnel: Cette fois, parce que 1 est la vérité et 0 est la fausseté, nous reflétons si nous voyons la (première) valeur vraie. Si nous ne reflétons pas (nous avons donc vu un 0), nousp
imprimons ce qu'il y a sur la pile (puisque la pile est vide, un zéro) etO
passons à la rigin de la courbe, à l'endroit où nous avons commencé, en recommençant tout le processus.Sinon, lorsque nous voyons un 1, nous reflétons et atterrissons sur la
u
, ce qui inverse la direction dans laquelle nous nous déplaçons sur la courbe de Hilbert.1p
affiche un 1, et maintenant nous suivons le même chemin queO
si nous avions vu un 0, mais puisque nous sommes en "mode inversé", notre origine est en bas à droite , nous sautons donc là.Maintenant nous
r
lisons une autre chaîne et la nions. Si la chaîne était vide, et donc de la résistance de la pile est truthy,`
ne pas échapper à la commande suivante (X
), nous faire arrêter de fumer.Dans le cas contraire (si la chaîne n'a pas été vide), nous n'échapper à la et l' ignorer. Dans ce cas, nous allons à gauche ( ), rint 0 (car la pile est vide), et retournons à la rigin.
X
<
p
O
la source
Java8,
2419 octetsJ'espère que c'est légal; J'ai l'impression que les entrées / sorties ne doivent pas être évaluées comme vraies / fausses dans la langue. Prend un long comme entrée et en donne un comme sortie, avec les vrais et les zéros faux dans la représentation binaire. Par exemple, binaire 00101 est 5 et renverrait binaire 00100, qui est 4.
Cinq octets grâce à @puhlen
la source
Long::highestOneBit
qui produit le résultat identique avec une syntaxe plus courtejava.lang
paquet est importé par défaut. A partir de la spécification de langue "Une unité de compilation a automatiquement accès à tous les types déclarés dans son package et importe également automatiquement tous les types publics déclarés dans le package prédéfini java.lang."Retina , 6 octets
Essayez-le en ligne!
L'entrée est une liste de
0
s (pour False) et de1
s (pour True).Correspond à tous
1
et remplace chacun sauf le premier (1>
) par un0
.la source
V , 7 octets
Essayez-le en ligne!
Ma première soumission en V! \ o /
Comment ça fonctionne
la source
r0
entre<C-x>
pour réduire ceux-ci et enregistrer un octet.Haskell , 25 octets
Fonction anonyme prenant et renvoyant une liste de
Bool
s.Utiliser comme
(foldr(\x l->x:map(x<)l)[])[False,True,False,False]
.Essayez-le en ligne!
Comment ça fonctionne
x
est l'élément à ajouter à la sous-listel
.False
comparent moins queTrue
,map(x<)l
transformeront toutTrue
sl
enFalse
six
estTrue
.la source
Gelée , 4 octets
Essayez-le en ligne!
Voici un algorithme assez différent de la plupart des autres solutions linguistiques de golf (bien que, après l'avoir posté, j'ai remarqué que la solution R utilisait également cet algorithme) et lié au détenteur actuel du record Jelly.
Explication
Tant que tous les éléments à gauche d'un élément sont 0, la somme cumulative d'un élément sera égale à l'élément lui-même. À droite du premier 1, les deux sont différents (car nous ajoutons maintenant le total non nul des éléments à gauche). Ainsi,
+\=
nous donne une liste contenant 1 (c'est-à-dire vrai) jusqu'au premier élément de vérité inclus. Enfin, ET logique avec la liste initiale nous donnera 1 pour que le premier élément de truthy.la source
JavaScript (ES6),
33 à26 octetsI / O est dans les tableaux de 0 et 1.
la source
05AB1E , 6 octets
Code:
Explication:
Utilise le codage 05AB1E . Essayez-le en ligne!
la source
1k>sƶ-_
est un autre, pire cependant. L'lift
idée peut avoir du potentiel cependant.Simulateur de machine de Turing , 39 octets
Essayez-le en ligne!
la source
brainfuck , 55 octets
Essayez-le en ligne!
la source
Gelée , 4 octets
Un port de ma réponse 05AB1E.
Explication (argument α ):
Essayez-le en ligne!
la source
R , 24 octets
Essayez-le en ligne!
Exemple:
Pour les
FALSE TRUE TRUE FALSE
cumsum(T<-scan(,F))==T
retours d' entréeTRUE TRUE FALSE FALSE
. Le F dans le balayage assure une entrée logique.FALSE TRUE TRUE FALSE
etTRUE TRUE FALSE FALSE
estFALSE TRUE FALSE FALSE
. Un seul&
fait une comparaison élémentaire.la source
Octave, 23 octets
Essayez-le en ligne!
Première différence de maximum cumulatif de la liste.
la source
J , 3 octets
Définit un verbe monadique. Ceci est un port trivial de ma réponse APL . Essayez-le en ligne!
la source
Python, 58 octets
Si
x[i]
est faux, la sortie est fausse; sinon, cela indique si l'élément est ou non la première occurrence dans le tableau de lui-même.la source
PHP, 37 octets
la source
Perl 5, 20 octets
La vérité est
1
et Falsey est''
(une chaîne vide).Explication:
map
boucle sur les éléments de la liste it@_
, les arguments passés au sous-programme, définissant chaque élément sur $ _ localement et renvoyant un tableau des valeurs de retour calculées à partir de chaque élément.$_&&!$x++
sorties$_
si$_
est falsey et!$x++
si c'est la vérité. (Notez que && est en court-circuit et!$x++
n'est donc exécuté que lorsque la première valeur de vérité est atteinte).$x++
retourne0
(ce qui est falsey) la première fois qu'il est exécuté, puis incrémente à chaque fois (et reste donc la vérité). La!
négation$x++
, et donc il renvoie la vérité la première fois qu'il est rencontré et falsey par la suite.la source
sub{...}
).Pyth - 9 octets
Essayez-le ici
la source
m&!~|Z
.Python 2 ,
4536 octetsL'entrée et la sortie correspondent à un booléen ( vrai ou faux ) par ligne.
Essayez-le en ligne!
la source
C #, 77 octets
Compile a
Func<bool[], bool[]>
. Rien d'intelligent, juste une solution simple.la source
sed ,
1619 octets1518 octets code source + 1 octet pour l'indicateur -r (ou l'indicateur -E pour BSD sed).Essayez-le en ligne!
Edit: Merci Riley pour avoir signalé une erreur.
la source
Gelée , 4 octets
Essayez-le en ligne!
Comment?
Cela fait ce qui a été demandé dans un sens littéral:
la source
c (avec les commandes gcc), 40
Une approche légèrement différente:
Cela peut être considéré comme invalide - dans ce cas, je marquerai volontiers ceci comme non compétitif.
Les "tableaux" d'entrée et de sortie sont des entiers non signés de 32 bits - ceci limite la taille de la liste d'entrée à exactement 32 - cela peut être un disqualifiant. Si l'entrée a moins de 32 bits de long, elle peut être complétée avec zéro bit à la fin.
Essayez-le en ligne .
la source
Lot,
8573 octetsPrend l'entrée en tant qu'arguments de ligne de commande. Pour exemple:
1.bat 0 1 0 1 0 0 1
La version précédente
la source
Brain-Flak , 230 octets
J'expliquerai bientôt mais ma mère m'a cuisiné des pommes de terre fritesEssayez-le en ligne!
Remerciement spécial
Un merci spécial à Wheat Wizard et à Riley de m'avoir aidé énormément avec le code!
la source
Python 3,
696664605453 octetsPrend un tableau de
false
s ettrue
s. Ceci est une compréhension de la liste defalse
s sauf si la valeur de l'itération en cours esttrue
et qu'elle est la premièretrue
de l'entrée.Cela semble un peu long (et c'est mon premier lambda), donc si vous pouviez trouver un moyen de jouer au golf, ce serait grandement apprécié!
la source
0 for
0for
.Brain-Flak ,
146144 octetsEssayez-le en ligne!
la source
Perl 5 , 12 octets
10 octets code + 2 pour
-pl
.Essayez-le en ligne!
la source