Je majuscule le code source, vous inversez l'entrée!

Sep 18 2020

C'est encore un de ceux- ci: D

Votre tâche, si vous souhaitez l'accepter, est d'écrire un programme / une fonction ( sans majuscules ) qui sort / retourne sa chaîne d'entrée / argument. La partie délicate est que si je convertis votre code source en majuscules, la sortie doit être inversée.

Pour plus de simplicité, vous pouvez supposer que l'entrée est toujours une chaîne d'une seule ligne contenant uniquement des lettres ASCII ( a-z), des chiffres ( 0-9) et des espaces.

Vous n'avez pas besoin de gérer une entrée vide.

Exemple

Disons que votre code source est abcet que son entrée est hello. Si j'écris à la ABCplace et que je l' exécute, la sortie doit être olleh.

Réponses

46 SunnyMoon Sep 18 2020 at 01:51

05AB1E , 1 octet

r

Essayez-le en ligne en minuscules ou en majuscules !

Enfin une question à laquelle je (un cerveau stupide) peux répondre! Merci pour ce défi facile mais amusant! (Je me sens bien, même si cela demande peu d'efforts pour répondre dans 05AB1E.)

Attends, comment?

r # reverses the stack. (Which literally does not do anything since only the
  # implicit input is in the stack)
R # actually reverses the top string of the stack (Which is the implicit input).
  # at the end, the input is automatically printed.
40 JonathanAllan Sep 18 2020 at 07:56

Python 3 ,  61 50 49  48 octets

-1 merci à benrg!

r=-1;ʳ=1;ᵖʳᵢⁿᵗ(ᵢⁿᵖᵘᵗ()[::r])

boîtier inférieur / boîtier supérieur

Cela fonctionne parce que

  1. PEP-3131 a été implémenté dans Python 3.0; et
  2. Ce sont les caractères Unicode de longueur minimale sans version majuscule qui se normalisent également sous la transformation NFKC (Normalization Form Compatibility Composition ) en caractères latins de base que l'on utiliserait normalement - TIO .

Notez que les identifiants, comme ret les noms de fonction printet input, peuvent être écrits comme ceci mais pas des mots-clés, comme defou lambda.

(Voir le boîtier supérieur du code.)

15 Sisyphus Sep 18 2020 at 07:57

Python 3, 48 octets

ᵖʳᵢⁿᵗ(ᵢⁿᵖᵘᵗ()[::b'b'[0]%3-1])

Lower: Essayez-le en ligne!

ᵖʳᵢⁿᵗ(ᵢⁿᵖᵘᵗ()[::B'B'[0]%3-1])

Upper: Essayez-le en ligne!

Vous pouvez également vérifier que le programme supérieur est vraiment en majuscules .


Il est peu probable que nous puissions écrire un programme pour Python 3 simplement en utilisant ASCII - nous n'avons pas def, non lambdaet pas d'appels de fonction intégrés. De plus, toutes les propriétés des objets intégrés existants sont en minuscules, nous ne pouvons donc pas y accéder non plus. Donc, à la place, notre stratégie consiste à rechercher des caractères Unicode qui:

  • Ne sont pas en majuscules
  • NFKC normalise le personnage que nous voulons
  • NFKC normaliser au caractère que nous voulons même après la mise en majuscule

Le code suivant fait exactement cela.

from unicodedata import normalize
for c in 'printinput':
  for i in range(0x10ffff):
    if not chr(i).isupper() and normalize('NFKC', chr(i)) == normalize('NFKC', chr(i).upper()) == c:
      print(chr(i))
      break
  else:
    raise Exception('no')
12 JonathanAllan Sep 18 2020 at 00:24

Gelée , 1 octet

ṛ

boîtier inférieur / boîtier supérieur

Comment?

ṛ - Main Link: list of characters, S
ṛ - right argument (implicitly S)
  - implicitly print

Ṛ - Main Link: list of characters, S
Ṛ - reverse
  - implicitly print
8 Adám Sep 18 2020 at 00:09

APL (Dyalog Unicode) , 10 octets ( SBCS )

Fonction de préfixe tacite anonyme.

⌽⍣('a'∊⎕a)

Essayez-le en ligne!

⌽⍣(… ) Appliquer la marche arrière le nombre de fois suivant:

 'a'∊⎕a est « un » membre du majuscule un lphabet? (0)

Majuscules

⌽⍣('A'∊⎕A)

Essayez-le en ligne!

⌽⍣(… ) Appliquer la marche arrière le nombre de fois suivant:

 'A'∊⎕A "a" est-il un membre de l' alphabet A majuscule ? (1)


Dans Dyalog APL, ⎕Aest insensible à la casse et se réfère toujours à l'alphabet majuscule.

8 NahuelFouilleul Sep 18 2020 at 04:13

Perl 5 -p , 33 , 25 , 22 octets

Merci à @DomHastings qui a également eu la même idée

m;$_=/.(?{$\=$&.$\})^/

majuscule

M;$_=/.(?{$\=$&.$\})^/

Essayez-le en ligne!

7 Arnauld Sep 17 2020 at 23:57

JavaScript (ES6), 46 octets

Prend et renvoie un tableau de caractères.

En minuscules

s=>s.map?s:s["\162\145\166\145\162\163\145"]()

Essayez-le en ligne!

En majuscule

S=>S.MAP?S:S["\162\145\166\145\162\163\145"]()

Essayez-le en ligne!


JavaScript (ES6),  74  73 octets

1 octet enregistré grâce à @Shaggy

Prend et renvoie une chaîne.

En minuscules

s=>s.big?s:[...s]["\162\145\166\145\162\163\145"]()["\152\157\151\156"]``

Essayez-le en ligne!

En majuscule

S=>S.BIG?S:[...S]["\162\145\166\145\162\163\145"]()["\152\157\151\156"]``

Essayez-le en ligne!

6 RobinRyder Sep 18 2020 at 01:18

R , 122 octets

`\103`=`\162\145\166`
`\151\156\164\124\157\125\164\1468`(c(`\165\164\1468\124\157\111\156\164`(`\163\143\141\156`(,""))))

essayez-le en ligne!

ESSAYEZ-LE EN LIGNE!

Comprend une seule lettre, la seule cau milieu. Le reste utilise des codes octaux pour obtenir l'équivalent de

C=rev
intToUtf8(c(utf8ToInt(scan(,""))))

Avec les minuscules c, le cne fait aucune différence: nous convertissons l'entrée en entiers, la concaténons avec rien et la convertissons en caractères. Avec une majuscule C, le vecteur entier au milieu est inversé avant d'être reconverti.

6 WheatWizard Sep 19 2020 at 02:05

Haskell , 38 octets

_0(_1:_2)|'a'<'_'=_0 _2++[_1]
_0 _1=_1

Essayez-le en ligne! (minuscule)

_0(_1:_2)|'A'<'_'=_0 _2++[_1]
_0 _1=_1

Essayez-le en ligne! (majuscule)

Haskell exige que tout nom de variable commençant par une majuscule soit un constructeur d'un type déclaré. Cela signifie essentiellement que nous ne pouvons pas avoir d'identifiants commençant par une lettre. (Je pense que les options que nous avons en fait sont LT, GTet EQmais je n'ai pas réussi à trouver une utilisation pour aucune de celles-ci.) Heureusement, il est possible d'écrire des programmes haskell sans lettres. Nous pouvons commencer les noms de variables avec _et ajouter des nombres à la fin pour en faire un nom valide (certains symboles fonctionneraient aussi).

Pour détecter le mode dans lequel nous nous trouvons, nous utilisons le fait que les chaînes changent et faisons une comparaison entre une chaîne changeante et statique, qui 'a'<'_'évalue à Falsewhile 'A'<'_'est vrai.

6 Dingus Sep 18 2020 at 12:08

Rubis -p , 51 49 47 46 octets

Un octet enregistré en utilisant une comparaison lexicographique plus courte tirée de la réponse Haskell de @ WheatWizard .

Minuscule

?a<?_&&(f=->_{/.$/?($_=$`;f[_+=$&]):$_=_})['']

Essayez-le en ligne!

?a<?_teste si le caractère aest lexicographiquement inférieur au caractère _. Le test revient false, court-circuitant l' &&opérateur de sorte qu'aucun code restant ne soit réellement exécuté. L'entrée est imprimée automatiquement grâce au -pdrapeau.

Majuscule

?A<?_&&(F=->_{/.$/?($_=$`;F[_+=$&]):$_=_})['']

Essayez-le en ligne!

Maintenant, nous testons si Aest lexicographiquement inférieur à _. Ici, la comparaison revient truedonc nous passons &&. Le code après &&définit et appelle un lambda récursif qui inverse l'entrée, qui (à cause de -p) a été stockée dans la variable globale prédéfinie $_:

(F=->_{      # define a lambda F with parameter _
  /.$/?(     # if $_ contains at least one character, match the last one, then $_=$`; # remove that character from $_
    F[_+=$&] # recursively call F, appending that character to _ ):$_=_     # else set $_ to _, which now contains the full reversed input
})['']       # call F, initialising _ to the empty string

Enfin, $_(contenant désormais l'entrée inversée) est imprimé automatiquement grâce au -pdrapeau.

5 Neil Sep 18 2020 at 00:21

Windows NT Batch + coreutils, 28 octets

@if %os:~9%==t (tac)else cat

Explication: %OS%contient Windows_NTet la sous-chaîne commençant à la position 9est comparée à la lettre t. Si le fichier de commandes est en majuscules, la comparaison réussit et tacest invoquée dans le cas contraire cat.

5 Jonah Sep 18 2020 at 01:09

J , 21 14 octets

|.^:({.\:'a_')

Essayez-le en ligne!

-7 octets grâce à Adam!

S'inspirant de la réponse APL d' Adam .

Comment

  • |.^: Inversez le nombre de fois suivant ...
  • :({.\:'a_')Notez \:la chaîne a_et prenez le premier élément {..
    • "Note down" renvoie une liste d'index pour la chaîne, triés par ordre décroissant. Ainsi \:'abc'reviendrait 2 1 0, par exemple.
    • "Grade down" reviendra donc 0pour la chaîne a_, et 1pour la chaîne A_, puisque _est entre aet Adans l'alphabet ascii.
4 att Sep 18 2020 at 01:33

Wolfram Language (Mathematica) , 24 octets

#[[i=1;i^2;;-i^2;;i^2]]&

Essayez-le en ligne!

Iest le symbole intégré de l'unité imaginaire \$i\$. Sa valeur ne peut pas être remplacée sans l' Unprotectavoir d'abord été.

4 Bubbler Sep 18 2020 at 06:43

APL (Dyalog Extended) , 9 octets

⌽⍣(<×'a')

Essayez-le en ligne (en bas et en haut)!

Dans Extended, ×(signum) sur les lettres interroge la casse des lettres, donnant -1 pour les minuscules et 1 pour les majuscules. Alors <a un arg gauche implicite de 0, donc il teste si l'argument droit est positif (1) ou non (0). Par conséquent, <×'a'évalue à 0 et <×'A'évalue à 1.

4 James Sep 18 2020 at 22:22

V (vim) , 2 octets

væ

Essayez-le en ligne!

Et en majuscules:

Væ

Essayez-le en ligne!

Hexdump:

00000000: 76e6                                     v

Comment?

ventre en «mode visuel» et commence à sélectionner les caractères. Au début, un seul caractère sera sélectionné. Puis æinverse chaque caractère sélectionné. Inverser un seul caractère ne fait rien.

Mais Vsélectionnera chaque caractère de la ligne actuelle, puis æretournera toute la ligne.

3 xash Sep 18 2020 at 02:50

Brachylog , 3 octets

ṡ↔|

et

Ṡ↔|

Essayez-le en ligne!

ṡ↔
ṡ   if input is a square matrix,
Ṡ   if input is a string,
 ↔   it is reversed
  | otherwise return input unaltered
3 TessellatingHeckler Sep 18 2020 at 03:16

PowerShell 7+, 56 , 35 octets

-join"$args"['a'[0]-97?99..0:0..99] # save as golf.ps1 and call .\golf.ps1 "string" # e.g. (running in anonymous function &{} for demo): PS C:\> &{-join"$args"['a'[0]-97?99..0:0..99]} '123 Alice'
123 Alice
PS C:\> &{-JOIN"$ARGS"['A'[0]-97?99..0:0..99]} '123 Alice'
ecilA 321

Avec les suggestions de golf de Mazzy .

En supposant que la chaîne contient <= 100 caractères. Changez les deux 99 en notation 1e5 pour +2 octets, des entrées beaucoup plus longues et un code beaucoup plus lent.

ancienne version 56 octets

&{$a="$args";(gv a).name[0]-97?-join$a[$a.length..0]:$a}

e.g.

PS C:\> &{$a="$args";(gv a).name[0]-97?-join$a[$a.length..0]:$a} "123 Alice" 123 Alice PS C:\> &{$A="$ARGS";(GV A).NAME[0]-97?-join$A[$A.LENGTH..0]:$A} "123 Alice"
ecilA 321

Les paramètres de la fonction anonyme {}apparaissent dans la variable automatique $argset sont stockés dans la variable $a. Les guillemets de chaîne sont convertis "$args"en une seule chaîne. PowerShell est indifférent quant au cas des noms de variables, des noms de commandes, des noms de propriétés, des noms d'opérateurs, etc. donc tout le code s'exécute dans les deux cas. gvest get-variablequi recherche la avariable, la trouve .Name( aou Aselon le cas du script - la casse est préservée), obtient le caractère [0] qui est aou Aencore mais cette fois en tant que [char]type, soustrait 97 ( avaleur minuscule en ASCII), et ? :opérateurs ternaires, qu'ils atteignent zéro ou non-zéro, et imprime l'original ou inverse les indexes et les joint en une chaîne inversée. L'impression est implicite. &{}exécute la fonction anonyme.

NB. TIO.Run n'a que PowerShell 5 ou 6 au moment de l'écriture, et ternaire?: N'est pas dans cette version.

3 DLosc Sep 20 2020 at 10:24

Pip , 6 octets

[r_]@1

Ceci est une solution fonctionnelle. Comme il repose sur l' Ropérateur unaire récemment ajouté , il ne fonctionne pas sur TIO, mais une version similaire de 7 octets le fait:

[rv_]@2

essayez-le en ligne! ou ESSAYEZ-LE EN LIGNE!

Explication

Minuscule:

[  ]    Make a list containing
 r       A random number between 0 and 1;
  _      The identity function
    @1  Get the item at index 1 (the identity function)

Majuscule:

[  ]    Make a list containing
 R_      A function that reverses its argument
    @1  Get the item at index 1, with cyclical indexing (the function)

La version TIO est la même idée, mais utilise l' RVopérateur pour inverser. Il a donc trois éléments dans la liste en minuscules (y compris v, qui vaut -1) et obtient la fonction en utilisant l'index 2 au lieu de 1.

3 Bubbler Nov 13 2020 at 06:32

Forth (gforth) , 61 octets

: f 'a 65 = if bounds 1- swap 1- -do i c@ emit 1 -loop then ;

essayez-le en ligne! ESSAYEZ-LE EN LIGNE!

Un défi où l'insensibilité à la casse de Forth a une utilité ... sauf que vous n'avez pas d'inversion de chaîne intégrée, vous devez donc parcourir la chaîne elle-même en sens inverse.

Presque tous les mots de Forth sont insensibles à la casse. La seule partie sensible à la casse dans le code est 'aou 'A, où le code ASCII du caractère (97 pour a, 65 pour A) est poussé vers la pile. Nous pouvons donc le comparer avec un littéral numérique (insensible à la casse) 65. S'ils sont égaux, la chaîne est imprimée à l'envers. Sinon, la chaîne est renvoyée telle quelle.

3 Sean Nov 13 2020 at 07:14

Raku , 28 octets

{.?"{'flip'~^'    '}"()||$_}

Essayez-le en ligne!

  • $_est l'entrée de la fonction. Les appels de méthode sans appelant explicite sont appelés sur celui-ci.
  • flip est la méthode pour inverser une chaîne.
  • $obj."name"()est la syntaxe pour appeler une méthode dont le nom est une chaîne. Les guillemets doubles peuvent contenir des valeurs interpolées comme d'habitude.
  • $obj.?methoddes moyens pour appeler methodsur $objsi cette méthode est définie pour elle, et sinon retour Nil.
  • ~^ est l'opérateur stringy exclusif ou, qui exclut les caractères correspondants de ses opérandes.

En mettant tout cela ensemble, les xors de programme non capitalisés flipet une chaîne contenant quatre espaces, produisant FLIP. Cette méthode n'est pas définie pour les chaînes, donc l' .?appel de méthode retourne Nil. Puis Nil || $_évalue à la chaîne d'origine. Lorsque le code source est en majuscule, flipdevient FLIP, qui, lorsqu'il est xor-ed avec les espaces, devient flip, qui, lorsqu'il est appelé sur la chaîne d'entrée, l'inverse.

3 Giuseppe Nov 13 2020 at 08:35

SNOBOL4 (CSNOBOL4) , 61 octets

	&lcase 'a'	:f(r)
	output =input
r	output =reverse(input)
end

Essayez-le en ligne!

SNOBOL par défaut plie les identifiants et les étiquettes (à moins qu'il ne &CASEsoit défini sur 0ou que l'indicateur ne -CASE 0soit utilisé au début du programme), donc la seule chose qui change vraiment est le 'a' -> 'A', car SNOBOL utilise la correspondance de motifs sensible à la casse. Puisqu'il 'A'n'est pas minuscule, il saute à l'étiquette R, qui s'inverse.

3 WheatWizard Nov 13 2020 at 05:56

Klein 0X0, 68 octets

Fonctionne à la fois dans 000 et 010

Minuscules

"a`"1+-+?@      \
/!?:    (0)?/!?:<@?
>$:?!\?>:?!\\(  /
\   (/ \  )/

Essayez-le en ligne!

Haut de casse

"A`"1+-+?@      \
/!?:    (0)?/!?:<@?
>$:?!\?>:?!\\(  /
\   (/ \  )/

Essayez-le en ligne!


La plupart de ceci est juste un programme qui inverse l'entrée, ce qui n'est pas vraiment facile dans Klein.

>:?!\?)0(    :?!\?@
\  (//!?:<?/!?:$<
     \)  / \(   /

Essayez-le en ligne!

Pour faire la condition, nous avons le très simple

"a`"1+-+?@

Ce qui est une expression qui est exactement zéro, mais qui devient autre chose lorsqu'elle aest en majuscule. C'est à peu près la méthode exacte utilisée par toutes les autres réponses. Les ?@moyens quand il est égal à zéro , il sera immédiatement interrompu (un programme de chat). Sinon, nous continuons l'exécution au bit de programme inverse.

3 James Sep 22 2020 at 22:38

JavaScript (V8) , 46 44 puis par tch: 37 octets

$=([o,...a])=>o?o.sub?o+$(a):$(a)+o:a

Essayez-le en ligne!

Merci à tsh pour avoir sauvé 7 octets !.

La fonction récursive $prend une chaîne et la déstructure en le premier caractère oet un tableau ades caractères restants.

S'il est en minuscules, oa une propriété, subil renvoie la chaîne avant o+$(a). Sinon, On'a pas de propriété SUBet renvoie la chaîne inverse $(A)+O.

L'itération finale se produit quand $est appelée avec et tableau vide donc il n'y a pas o. Ici, il retourne a, un tableau vide []qui agit comme une chaîne vide ""en plus de chaîne.

2 Neil Sep 18 2020 at 00:13

Charbon -v, 24 octets

ternaryless"a""_"reverse

Essayez-le en ligne! En majuscule:

TERNARYLESS"A""_"REVERSE

Essayez-le en ligne! Explication: Si aou Aselon le cas, est inférieur à _, le ternaire inverse alors l'entrée implicite, sinon prend simplement l'entrée implicite. Le résultat est ensuite imprimé implicitement.

2 Shaggy Sep 18 2020 at 01:22

Japt , 1 octet

Minuscule

ô

Essayez-le

Partitionne l'entrée en caractères faux, mais il n'existe pas de caractère faux en JavaScript.

Majuscule

Ô

Essayez-le

Le raccourci pour w<space>, intégré à Japt pour l'inversion.

2 ovs Sep 18 2020 at 03:56

Noix de coco , 21 octets

_->_[::('a'>'_')*2-1]

Essayez-le en ligne!

Essayez-le en majuscules!

2 Lyxal Sep 18 2020 at 04:54

Keg , 9 octets

?r\{9-=[^

essayez-le en ligne! ESSAYEZ-LE EN LIGNE!

D'une manière ou d'une autre, en rendant la réponse valide, j'ai sauvé des octets.

2 Razetime Sep 18 2020 at 11:14

MAWP , 19 octets

%|11a{%%0~}<%0/>[;]

essayez-le! ou ESSAYEZ-LE!

MAWP ignore les lettres minuscules, donc cette réponse utilise un conditionnel pour vérifier si la soustraction s'est produite ou non, et s'inverse en fonction de cela.

2 zgrep Sep 18 2020 at 17:46

oK , 13 octets

.:9+23*7!"!g"

Essayez-le en ligne!

Explication:

         "!g" /magic string
  9+23*7!     /9 + 23 * (ascii value mod 7)
.:            /eval ascii values as a string

Lorsque l'entrée est, "!g"elle devient "||"ce qui est évalué comme inversant deux fois.
Lorsque l'entrée est, "!G"elle devient "| "ce qui est évalué une fois comme une inversion.

oK repl , 10 octets

Je vais dire que celui-ci ne compte pas, car il repose sur le fait que le oK repl fonctionne de manière mystérieuse.

.:4*54!"u"

Essayez-le en repl!

Lorsque l'entrée est, "u"il devient "$"qui s'évalue comme "chaîne d'expression". Dans le repl, il s'agit d'un noop lorsqu'il est appliqué aux chaînes.
Lorsque l'entrée est, "U"elle devient "|"qui s'évalue comme une inversion.

2 EngineerToast Sep 18 2020 at 18:01

Excel VBA, 58 octets

Minuscule:

sub r(s)
if asc("a")=65then s=strreverse(s)
[a1]=s
end sub

Majuscule:

SUB R(S)
IF ASC("A")=65THEN S=STRREVERSE(S)
[A1]=S
END SUB

La sortie est vers la cellule A1de la feuille actuellement active (si elle se trouve dans un module) ou la feuille parente (si elle se trouve dans un objet feuille). Je suis un peu inquiet que cela ne soit pas conforme aux spécifications, car VBA formate automatiquement une grande partie du code une fois qu'il est entré:

Sub r(s)
If Asc("a") = 65 Then s = StrReverse(s)
[a1] = s
End Sub

Bien sûr, la norme a été de ne pas prendre en compte le formatage supplémentaire dans le nombre d'octets, donc je suppose que nous pouvons également ignorer la capitalisation. Vraiment, je suis plus inquiet que la réponse soit trop simple pour être intéressante plutôt que cette technicité.