Le langage du compilateur sans acronyme prononçable, abrégé INTERCAL , est un langage de programmation très unique. Parmi ses qualités non reproductibles figurent ses opérateurs binaires.
Les deux opérateurs binaires d'INTERCAL sont entrelacés (également appelés mingle ) et select . Interleave est représenté par un changement (¢), et select est représenté par un carré (~).
Interleave fonctionne en prenant deux nombres dans la plage 0-65535 et en alternant leurs bits. Par exemple:
234 ¢ 4321
234 = 0000011101010
4321 = 1000011100001
Result: 01000000001111110010001001
Output: 16841865
Select fonctionne en prenant deux nombres dans la plage 0-65535, en prenant les bits du premier opérande qui sont dans la même position que 1s du deuxième opérande et en compressant à droite ces bits.
2345 ~ 7245
2345 = 0100100101001
7245 = 1110001001101
Taken : 010 0 10 1
Result: 0100101
Output: 37
Dans ce défi, vous recevrez une expression binaire à l'aide de l'opération d'entrelacement ou de sélection. Vous devez calculer le résultat en utilisant le moins d'octets possible.
L'expression sera donnée sous la forme d'une chaîne séparée par des espaces, composée d'un entier en 0-65535, d'un espace, soit ¢
ou ~
, soit d'un espace, et d'un entier en 0-65535.
L'entrée et la sortie peuvent se faire via n'importe quel système standard (STDIN, fonction, ligne de commande, etc.). Échappatoires standard interdites.
Exemples:
5 ¢ 6
54
5 ~ 6
2
51234 ¢ 60003
4106492941
51234 ~ 60003
422
C'est le golf de code - le moins d'octets gagne. Bonne chance.
EDIT: Étant donné que certaines langues ne prennent pas en charge le symbole de changement (¢) d'INTERCAL, vous pouvez utiliser le symbole de gros prix ($) à la place, avec une pénalité de 5 octets.
$
.FIVE ONE TWO THREE FOUR
? Et la sortie ne devrait-elle pas être en chiffres romains?Réponses:
Pyth,
323129 octetsEssayez-le en ligne: Regular Input / Test Suite
Merci à @isaacg d'avoir joué au golf sur un octet.
Explication:
la source
hMfeT
àsmmFd
et en déplaçant le double ens
dehors du ternaire. De plus, votre code actuel est de 32 octets, pas 33.Python 2,
115112 octetsLa chaîne de la deuxième ligne contient un seul caractère non imprimable
\x7d
, le caractère suivant après~
.Tous les espoirs d'une belle lambda unique sont écrasés par le format d'entrée. Il y a probablement une meilleure façon de lire l'entrée. Entrée comme
"51234 ¢ 60003"
via STDIN.La fonction
f
combine les deux fonctions récursives suivantes:(-3 octets avec l'aide de @xnor)
la source
(a%2*2+b%2)/3**d
enregistre 3 caractères mais utilise le complémentd=1-c
. Avez-vous un moyen de faire-~(3*c|b%2)
avec le complément? Au pire, il perd 2 caractères avec3-3*d
. De plus, le formatand-~x+y
peut êtreandy-~x
aussi long qu'ily
commence par un symbole ou un nombre.(b%2+5&4-d)
. Merci!CJam, 31 octets
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça marche
la source
JavaScript (ES6), 103
117 119 124modifier maintenant travailler avec des nombres au lieu de chaînes
(sans compter les espaces principaux, les nouvelles lignes et les commentaires)
Testez l'exécution de l'extrait sur n'importe quel navigateur compatible EcmaScript 6 (notamment pas Chrome ni MSIE. J'ai testé sur Firefox, Safari 9 pourrait aller)
la source
Matlab,
119113 octetsNon golfé:
Exemples:
la source
R, 145 octets
Non golfé + explication:
la source
Python 3,
174166148126Opérations de chaîne assez simples, puis reconversion en entier.
Limité aux nombres qui en binaire ont 99 chiffres (max 2 ^ 99-1 = 633825300114114700748351602687).
Merci, Sp3000 et Vioz!
Ou 165 caractères, sans limite:
Non golfé:
la source
zfill
au lieu derjust
pour le remplissage avec des zérosa,b
, il suffit de le mettrezip
avec un*
splat, 2)(i if j=='1'else'') -> i[:j>'0']
3) Vous pouvez utiliser cette astuce pour économiser sur l'autreif/else
Pyth, 43 octets
Une partie de moi se sent nerveuse de poster une si longue réponse Pyth sur la question de isaacg ...: oP
Explication:
la source
C,
127123 octets + 5 pénalités = 128scanf
compte le symbole unicode comme plus d'un caractère, ce qui complique beaucoup les choses, donc j'applique la pénalité de 5 octets pour l'utilisation$
.Les changements par rapport à la version d'origine sont les suivants:
-Le test de $ ou ~ a été révisé de
q&2
àq%7
. Cela inverse les valeurs vraies / fausses, permettant au code de l'opérateur $ d'aller avant le:
qui signifie qu'un ensemble de parenthèses peut être éliminé.-La
i
boucle compte désormais à rebours en puissance de 2 qui est plus longue, mais permet>>
de la remplacer par/
et enregistre quelques parenthèses.Version originale 127 octets
Je suis allé avec une seule boucle avec les conditions à l'intérieur pour éviter la surcharge de deux boucles. Dans les deux cas, je déplace les bits des opérandes vers le bit 1, et je crée le résultat du bit le plus significatif au moins significatif, en déplaçant le résultat à gauche (en multipliant par 2 ou 4) au fur et à mesure.
la source
main
causesq
à corrompre sur ma machine, ce qui est étrange. Je m'attends à ce que le vrai problème soit avecscanf
, mais à cause de cela je les ai laissés comme des déclarations normales.q
, la valeur zéro est garantie, mais avec la déclaration en tant que paramètre de fonctionq
contient des ordures 32 bits. Ce ne serait pas un problème si j'attribuais une valeur àq
, maisscanf
avec"%c"
uniquement les 8 bits les moins significatifs de la poubelle, laissant les 24 autres non définis. Je pourrais avoir de la chance avec un autre compilateur!K5,
5352 octetsVersion 53 octets:
Encore besoin d'un peu plus de golf.
la source
CJam,
6150464134 octetsMerci @Dennis d'avoir signalé un golf de 4 octets.
Essayez-le en ligne .
la source
]{}/
est un noop.Haskell, 77
l'entrée est donnée en appliquant l'entrée aux fonctions / opérateurs
?
et¢
définie dans le code (Haskell ne peut pas définir d'opérateur~
pour des raisons techniques).fonctionne essentiellement l'ancienne approche récursive.
la source
J, 173
attend une ligne d'entrée
l'entrée devrait se terminer après une nouvelle ligne avec EOF
la source
Javascript ES6 (3 arguments)
141138136121119 octetsTester:
Javascript ES6 (1 argument)
135133 bytesTester:
PS: la nouvelle ligne compte pour 1 octet car elle peut être remplacée par
;
.la source
Python 3, 157 octets
La version complète et explicative peut être trouvée sur mon pastebin .
la source
e
qu'une seule fois, ne pouvez-vous pas simplement l'intégrer?Mathematica, 155 octets
Évalue à une fonction anonyme prenant la chaîne en entrée. Sauts de ligne ajoutés pour plus de clarté.
f
etg
convertir en / depuis la base 2.Riffle
fait exactement ce que l' entrelacement est censé faire. Je voulais utiliserSelect
pour sélectionner maisCases
c'est mieux malheureusement. La dernière ligne est un peu de ruse; les espaces sont remplacés par~
l'opérateur infixe de Mathematica, puis la chaîne est évaluée.la source