Alphabet Rain
La tâche:
Le principe de base consiste à imprimer la chaîne d'entrée, puis à répéter chaque caractère verticalement, en fonction de sa position (indexé sur 0) dans l'alphabet (insensible à la casse) A-Z
. A
est à l'emplacement 0 donc n'est pas répété, e
est à la position 4 donc est répété 4 fois, P
est à la position 15 donc est répété 15 fois, !
n'est pas àA-Z
est répété 0 fois, etc.
Pour plus de clarté, tout ce qui tombe en dehors de la plage B-Zb-z
, par exemple des chiffres ou des caractères spéciaux, ne sera pas répété et n'apparaîtra donc que sur la première ligne.
C'est du code-golf , donc la solution la plus courte dans chaque langue est gagnante.
Contribution:
- La saisie se fera dans le jeu de caractères ASCII imprimable standard, de 32
~
. - La chaîne en entrée aura 1 caractère ou plus.
- Il n'y aura pas d'espaces de début ou de fin.
- Vous pouvez prendre la saisie sous forme de chaîne (
"hello"
) ou une liste de caractères (["h", "e", "l", "l", "o"]
)
Exemples:
Entrée de aaaa
donne:
aaaa
Entrée de abcda
donne:
abcda
bcd
cd
d
L'entrée de Programming Puzzles & Code Golf!
, donne:
Programming Puzzles & Code Golf!
Progr mming Puzzles Code Golf
Progr mming Puzzles Code Golf
Progr mming Puzzles ode Golf
Progr mming Puzzles o e Golf
Progr mming Puzzl s o Golf
Progr mming Puzzl s o Gol
Pro r mmin Puzzl s o ol
Pro r mmin Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzzl s o ol
Pro r mm n Puzz s o o
Pro r n Puzz s o o
Pro r Puzz s o o
Pr r Puzz s
r r uzz s
r r uzz s
uzz s
uzz
uzz
zz
zz
zz
zz
zz
L'entrée de ~|[abc<0>cba]|~
, donne:
~|[abc<0>cba]|~
bc cb
c c
Remarques:
- les failles standard s'appliquent
- la sortie peut être une liste de chaînes, mais:
- les retours à la ligne ne sont pas autorisés (un seul
\n
sur la ligne finale est acceptable) - la sortie peut être une liste de listes de caractères, à condition qu'il pleuve
- pas de nouvelle ligne principale
- à nos utilisateurs nordiques qui ont quelques lettres supplémentaires dans leur alphabet "AZ", n'hésitez pas à les soutenir, mais cela ne fait pas partie du défi
\n
acceptable?Réponses:
6502 code machine (C64), 113 octets
Démo en ligne
Utilisation:
sys49152,"[string]"
, par exemplesys49152,"Programming Puzzles & Code Golf!"
.Important: Si le programme a été chargé à partir du disque (comme dans la démo en ligne), lancez d'abord une
new
commande! Cela est nécessaire car le chargement d'un programme machine supprime certains pointeurs C64 BASIC.Remarque: le C64 est par défaut en mode sans lettres minuscules. Pour pouvoir entrer une chaîne de casse mixte, passez tout d'abord au mode minuscule en appuyant sur
SHIFT
+CBM
.Explication
Voici une liste de désassemblage commentée:
la source
05AB1E ,
1312 octetsEssayez-le en ligne!
Explication
la source
Ask
pour çaPyth,
12109 octetsSuite de tests.
Explication:
12 octets:
(avec une nouvelle ligne)
Suite de tests.
Explication:
la source
j
Python 3 , 83 octets
Essayez-le en ligne! Prend une liste de personnages. Retourne une liste de listes de caractères.
Python 2 , 90 octets
Essayez-le en ligne! Prend une ficelle. Retourne une chaîne.
la source
Mathematica,
11589 octetsIl prend comme
input
une liste de caractères[{"a", "b", "c", "d", "a"}]
et sort une liste de listes de caractèresEssayez-le en ligne!
-26 octets de Misha Lavrov
-5 octets de l'utilisateur202729
mais si vous voulez voir la sortie telle qu'elle est dans le scénario de test, essayez ce code (128 octets).
Essayez-le en ligne!
la source
∞
(3 octets) ->\[Infinity]
(11 octets)).\[Infinity]
(11 octets) peut être remplacée parInfinity
(8 octets) ou\:221e
(6 octets). Le dernier est la représentation par défaut des caractères spéciaux sans nom. (bien que ce ne soit pas la partie principale)Infinity
complètement. La partie problématique estIf[(d=Min@Position[Alphabet[],If[UpperCaseQ@#,ToLowerCase@#,#]])==∞,1,d]
et nous pouvons changer cela enMax@Position[Alphabet[]/."a"->#,#|ToLowerCase@#]
. (En recherchant dans la liste{#,b,c,d,...,y,z}
, nous sommes assurés de trouver#
au moins une fois.)Dyalog APL ,
2722 octets5 octets sauvegardés grâce à @ Adám
Essayez-le en ligne!
Comment?
⍴¨⍨
- façonner chaque caractère à la longueur de1⌈
- au moins un ou⎕A⍳819⌶⍨∘1
- index du caractère majuscule dans l'alphabet27|
- modulo 27↑
- aplatir à une matrice⍉
- et transposerla source
⍉∘↑⊢⍴¨⍨1⌈27|⎕A⍳819⌶⍨∘1
Charbon de bois , 12 octets
Essayez-le en ligne!
-3 merci à Neil .
la source
Python,
105 à103 octets2 octets sauvegardés grâce à @TFeld
Essayez-le en ligne!
la source
Python 2 ,
1111069998978793 octetsEssayez-le en ligne!
la source
while
peut être remplacé parexec
pour économiser quelques octets,i
peut commencer par 65 pour en économiser plus pour atteindre 87 octetsz
ouZ
.exec
changement ...C # (.NET Core) , 162 octets
Essayez-le en ligne!
la source
using System.Linq;
est malheureusement obligatoire d'ajouter le nombre d'octets (ou vous devez changerMax
àSystem.Linq.Max
etSelect
àSystem.Linq.Max
, ce qui serait plus élevé que simplementusing System.Linq;
une fois.) Encore une fois la bienvenue, et profiter de votre séjour. Oh, et je vois @IanH. déjà mentionné Conseils pour le golf en C #. Des astuces pour jouer au golf dans <toutes les langues> peuvent également être intéressantes à lire.Bash,
78,7671 octetsSelon le classement (LC_ALL par défaut), vous pouvez économiser quelques octets supplémentaires.
Essayez-le en ligne
la source
Perl 5 , 43 octets
Code de 41 octets + 2 pour
-nl
.Essayez-le en ligne!
la source
s/["-$c]/ /gi
- être et-l
pas nécessaireJavaScript (ES6),
877876 octets-9 octets grâce à @RickHitchcock .
-2 octets grâce à @Neil .
Prend les entrées sous forme de chaîne et retourne avec une nouvelle ligne.
Cas de test
Afficher l'extrait de code
la source
f=(s,i=10)=>s.trim()&&s+'newline'+f(s.replace(/./g,c=>parseInt(c,36)-i?c:" "),i+1)
s
est vraiment bien, cependant.parseInt(c,36)-i>0
parseInt(c,36)>i
place pour sauvegarder 2 octets?R,
118114 octetsMerci à @ Giuseppe pour ces 4 octets
Essayez-le en ligne!
Brève explication:
la source
a
tous les espaces sont affichés, cela n’affiche rien ... mais vous pouvez changer lawhile
condition pourgrepl()|!F
laquelle il reste un octet plus court que votre réponse originale.R ,
125123 octetsOutgolfé par Plannapus
Essayez-le en ligne!
Imprime sur stdout avec une nouvelle ligne de fin et lit à partir de
stdin()
.Décomposons:
Réponse alternative, 106 octets
Essayez-le en ligne!
Une fonction; imprime sur stdout mais c’est essentiellement ma réponse ci-dessus qui accepte d’accepter une liste de caractères plutôt que de scinder la chaîne, alors j’ai l’impression que c’est une «triche». De plus, l'approche de Plannapus avec regex est très soignée!
la source
Octave / MATLAB,
7466 octetsEssayez-le en ligne!
la source
Japt ,
15141110 octetsPremière chance de jouer avec les nouvelles méthodes de rembourrage de chaînes de Japt afin qu'il y ait encore place à amélioration.
L'essayer
Explication
Entrée implicite de chaîne
U
.Passez chaque colonne de
U
via une fonction, oùZ
est l'élément en cours (ou une lettre, dans ce cas).Convertissez
Z
en majuscule (u
), obtenez son charcode (c
) et subtract (u
) 64 (I
).Tapotez le début
Z
avec avec lui-même jusqu'à ce qu'il atteigne cette longueur.Alternative
L'essayer
la source
ùZ
pourp
sauver un ... peu importe, c'est vraiment intelligent ...p
(il peut y en avoir 1 dans l'historique d'édition) mais j'aiù
finalement gagné.Haskell ,
137136127119 octetsEssayez-le en ligne!
Assez long, mais je ne vois aucun moyen de le raccourcir davantage.
Je pense qu'il doit y avoir un chemin plus court que la syntaxe if-then mais je ne le vois pas.EDIT: Merci @streetster pour m'aider à réduire un octet! Je ne l'ai pas utilisé
toUpper
au début à cause du coût d'importation,Data.Char
mais j'ai oublié qu'il fournit aussiord
beaucoup plus court quefromEnum
EDIT 2: Merci à @Laikoni pour avoir supprimé 6 octets supplémentaires et identifié un bogue que j'ai corrigé. J'ai utilisé 26 au lieu de 25 parce que j'ai oublié que les tableaux Haskell sont inclusifs. Ensuite, j'ai remarqué que je pouvais utiliser
last
au lieu dehead
ce qui me permettrait d'utiliser0:
plutôt que++[0]
.EDIT 3: Merci encore Laikoni pour ces 8 octets. J'avais en fait oublié cet espace. Pour une raison quelconque, Sublime Text disparaît sans lui et j'ai oublié de le retirer. Je ne savais pas que les listes de lignes étaient autorisées, j'aurais dû lire les règles plus attentivement.
la source
if i>p c then ' ' else c
peut être raccourci àlast$c:[' '|i>p c]
.[k |
et le retour d’une liste de lignes est autorisé, vous n’avez donc pas besoin deunlines
. Enfin, notre forum de discussion Haskell pourrait vous intéresser .Excel VBA, 110 octets
Anonyme VBE Immediate Window Fonction qui prend en entrée le type attendu
Variant\String
de la plage[A1]
et l'utilise pour faire pleuvoir l'alphabet dans la fenêtre immédiate de VBE.Échantillon I / O
la source
?A1:...
[]
indique que la chaîne contenue doit être évaluée en tant qu'objet dans / sur / comme classeur, l'[A1]
appel ne peut pas être réduit àA1
- car cela ne prendra ni n'imprimera l'entrée initiale de la plage[A1]
; cela laissera plutôt une ligne vide et toutes les lignes suivantes seront impriméesPHP,
69 78 7785 + 1 octetsnécessite PHP <7. Exécuter en pipe
-nR
ou essayer en ligne .la source
$c=A;!$c[1];$c++
. Joli! Malheureusementextraneous trailing newlines are not allowed (single \n on final line is acceptable)
. Donc, il échoue pour toutes les chaînes ne contenant pasz
.Bash + sed, 37 ans
Essayez-le en ligne .
la source
C (gcc) , 189 octets
Essayez-le en ligne!
la source
puts("");
au lieu deputchar(10)
Ruby,
706774 octetsMerci à @TuukkaX pour avoir signalé que certains parens pouvaient être supprimés (-3 octets)
Malheureusement, j'ai ensuite dû ajouter 7 octets, car la version d'origine ne gérait pas "z".
L'appelant:
la source
Oracle SQL, 186 octets
Suppose que la chaîne sera dans une table
t
en colonnev
:Violon SQL
Configuration du schéma Oracle 11g R2 :
Requête 1 :
Résultats :
la source
Gelée , 15 octets
Essayez-le en ligne!
la source
Haskell , 98 octets
Essayez-le en ligne!
Exemple d'utilisation:
f "[Abc]"
donne une liste de lignes:["[Abc]"," bc "," c "]
. UtilisezputStr.unlines.f $ "[Abc]"
pour une sortie joliment imprimée:Partiellement inspiré deMaintenant directement basé sur la réponse Haskell de user1472751 .Approche précédente (
10099 octets)Essayez-le en ligne!
la source
PowerShell ,
122127 octetsEssayez-le en ligne!
Court grâce à la façon dont PowerShell peut dynamiquement jeter entre
[char]
et[int]
, mais long en raison de la suppression des blancs superflus et du calcul du caractère de sortie de l'espace ou du caractère.Correction de bug grâce à beatcracker.
la source
~|[abc<0>cba]|~
cas de test. Essayez ceci:param($a)$a;(1..25|%{$i=$_;(-join([char[]]$a|%{(' ',$_)[$_-match'[a-z]'-and[math]::Max(0,($_-bor32)-96-$i)]})).TrimEnd()})-ne''
Java 8,
151147144143139 octetsExplication:
Essayez ici.
la source
q ,
4237 octets-5 grâce au streetster!
ancienne solution + explication:
la source
{(+)max[m]$(m:1+mod[.Q.a?(_)x]26)#'x}
pour 37 ans, je ne me souviens plus de la façon dont j'ai résolu la question, probablement très similaire!_
Je ne savais pas à propos de k , j'ai saisilower
l'interprète q et je l'ai obtenuk){$[~t&77h>t:abs@@x;.z.s'x;19<t;.z.s@. x;~t in 10 11h;'`type;_x]}
. donnant donc ma réponse dans q hahaSOGL V0.12 ,
1211 octetsEssayez-le ici!
Explication:
la source