Lluvia del alfabeto
La tarea:
La premisa básica es imprimir la cadena de entrada y luego repetir cada carácter verticalmente, en función de su posición (indexada a 0) en el alfabeto (sin distinción entre mayúsculas y minúsculas) A-Z
. A
está en la ubicación 0, por lo que no se repite, e
está en la posición 4, se repite 4 veces, P
está en la posición 15, se repite 15 veces, !
no está en, A-Z
se repite 0 veces, etc.
Para mayor claridad, cualquier cosa que quede fuera del rango B-Zb-z
, por ejemplo, dígitos o caracteres especiales, no se repetirá y, por lo tanto, solo aparecerá en la primera línea.
Este es el código de golf , por lo que la solución más corta en cada idioma es el ganador.
Entrada:
- La entrada estará en el juego de caracteres ASCII imprimible estándar, desde 32
~
. - La cadena de entrada tendrá 1 carácter o más.
- No habrá espacios en blanco iniciales o finales.
- Puede tomar la entrada de entrada como una cadena (
"hello"
) o una lista de caracteres (["h", "e", "l", "l", "o"]
)
Ejemplos:
Entrada de aaaa
da:
aaaa
Entrada de abcda
da:
abcda
bcd
cd
d
La entrada de Programming Puzzles & Code Golf!
da:
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
La entrada de ~|[abc<0>cba]|~
da:
~|[abc<0>cba]|~
bc cb
c c
Notas:
- se aplican lagunas estándar
- La salida puede ser una lista de cadenas, pero:
- no se permiten saltos de línea extraños (se acepta un solo
\n
en la línea final) - la salida puede ser una lista de listas de caracteres, siempre y cuando parezca que está lloviendo caracteres
- sin línea nueva
- para nuestros usuarios nórdicos que tienen algunas letras adicionales en su alfabeto "AZ", siéntanse libres de apoyarlos, pero no es parte del desafío
\n
?Respuestas:
Código de máquina 6502 (C64), 113 bytes
Demostración en línea
Uso:
sys49152,"[string]"
por ejsys49152,"Programming Puzzles & Code Golf!"
.Importante: si el programa se cargó desde el disco (como en la demostración en línea), ¡emita
new
primero un comando! Esto es necesario porque cargar un programa de máquina destruye algunos punteros BÁSICOS C64.Nota: El C64 está por defecto en un modo sin letras minúsculas; para poder ingresar una cadena de mayúsculas y minúsculas, primero cambie al modo minúsculas presionando
SHIFT
+CBM
.Explicación
Aquí hay un listado de desmontaje comentado:
fuente
05AB1E ,
1312 bytesPruébalo en línea!
Explicación
fuente
Ask
por esoPyth,
12109 bytesBanco de pruebas.
Explicación:
12 bytes:
(con nueva línea al final)
Banco de pruebas.
Explicación:
fuente
j
Python 3 , 83 bytes
Pruébalo en línea! Toma una lista de personajes. Devuelve una lista de listas de caracteres.
Python 2 , 90 bytes
Pruébalo en línea! Toma una cuerda. Devuelve una cadena.
fuente
Mathematica,
11589 bytesToma como
input
una lista de caracteres[{"a", "b", "c", "d", "a"}]
y genera una lista de listas de caracteresPruébalo en línea!
-26 bytes de Misha Lavrov
-5 bytes del usuario202729
pero si desea ver el resultado tal como está en el caso de prueba, intente este código (128 bytes) ¡
Pruébelo en línea!
fuente
∞
(3 bytes) ->\[Infinity]
(11 bytes)).\[Infinity]
(11 bytes) se puede reemplazar porInfinity
(8 bytes) o\:221e
(6 bytes). La última es la representación predeterminada de caracteres especiales sin nombres. (aunque no es la parte principal)Infinity
completo. La parte problemática esIf[(d=Min@Position[Alphabet[],If[UpperCaseQ@#,ToLowerCase@#,#]])==∞,1,d]
y podemos cambiar esto aMax@Position[Alphabet[]/."a"->#,#|ToLowerCase@#]
. (Al{#,b,c,d,...,y,z}
buscar en la lista , se nos garantiza encontrar#
al menos una vez.)Dyalog APL ,
2722 bytes5 bytes guardados gracias a @ Adám
Pruébalo en línea!
¿Cómo?
⍴¨⍨
- dar forma a cada carácter a la longitud de1⌈
- al menos uno o⎕A⍳819⌶⍨∘1
- índice del carácter en mayúsculas en alfabeto27|
- módulo 27↑
- aplanar a una matriz⍉
- y transponerfuente
⍉∘↑⊢⍴¨⍨1⌈27|⎕A⍳819⌶⍨∘1
Carbón de leña , 12 bytes
Pruébalo en línea!
-3 gracias a Neil .
fuente
Python,
105103 bytes2 bytes guardados gracias a @TFeld
Pruébalo en línea!
fuente
Python 2 ,
1111069998978793 bytesPruébalo en línea!
fuente
while
puede reemplazarseexec
para ahorrar algunos bytes,i
puede comenzar con 65 para guardar más para alcanzar 87 bytesz
oZ
.exec
cambio ...C # (.NET Core) , 162 bytes
Pruébalo en línea!
fuente
using System.Linq;
es obligatoria por desgracia añadir al byte-count (o debe cambiarMax
aSystem.Linq.Max
ySelect
aSystem.Linq.Max
, lo que sería más alta que simplementeusing System.Linq;
una vez.) Una vez más la bienvenida, y disfrutar de su estancia. Ah, y veo a @IanH. Consejos ya mencionados para jugar al golf en C #. Los consejos para jugar golf en <todos los idiomas> también pueden ser interesantes de leer.Bash,
78,7671 bytesDependiendo de la clasificación (valor predeterminado LC_ALL) puede guardar algunos bytes más
Pruébalo en línea
fuente
Perl 5 , 43 bytes
Código de 41 bytes + 2 para
-nl
.Pruébalo en línea!
fuente
s/["-$c]/ /gi
y-l
no sea necesarioJavaScript (ES6),
877876 bytes-9 bytes gracias a @RickHitchcock .
-2 bytes gracias a @Neil .
Toma la entrada como una cadena y regresa con una nueva línea final.
Casos de prueba
Mostrar fragmento de código
fuente
f=(s,i=10)=>s.trim()&&s+'newline'+f(s.replace(/./g,c=>parseInt(c,36)-i?c:" "),i+1)
s
embargo, la idea de los cambios paso a paso es realmente agradable.parseInt(c,36)-i>0
parseInt(c,36)>i
en su lugar para guardar 2 bytes?R,
118114bytesGracias a @Giuseppe por esos 4 bytes de descuento
Pruébalo en línea!
Breve explicación:
fuente
a
son todos los espacios, esto no imprimirá nada ... pero puedes cambiar lawhile
condición a lagrepl()|!F
que todavía es un byte más corto que tu respuesta original.R ,
125123 bytesSuperado por plannapus
Pruébalo en línea!
Imprime en stdout con una nueva línea final y lee desde
stdin()
.Vamos a desglosarlo:
Respuesta alternativa, 106 bytes
Pruébalo en línea!
Función; se imprime en stdout pero es básicamente mi respuesta anterior portada para aceptar una lista de caracteres en lugar de dividir la cadena, por lo que siento que es "trampa". Además, ¡el enfoque de plannapus con regex es bastante bueno!
fuente
Octava / MATLAB,
7466 bytesPruébalo en línea!
fuente
Japt ,
15141110 bytesPrimera oportunidad de jugar con los nuevos métodos de relleno de cuerdas de Japt, por lo que aún puede haber margen de mejora.
Intentalo
Explicación
Entrada implícita de cadena
U
.Pase cada columna de a
U
través de una función, dondeZ
está el elemento actual (o letra, en este caso).Convierta
Z
a mayúsculas (u
), obtenga su charcode (c
) y reste (u
) 64 (I
).Acolche el comienzo de
Z
sí mismo hasta que alcance esa longitud.Alternativa
Intentalo
fuente
ùZ
parap
salvar una b ... no importa, eso es muy inteligente ...p
( puede haber 1 en el historial de edición) peroù
al final gané.Haskell ,
137136127119 bytesPruébalo en línea!
Bastante largo, pero no se me ocurre ninguna forma de acortarlo más.
Siento que debe haber algo más corto que la sintaxis if-then, pero no lo veo.EDITAR: ¡Gracias @streetster por ayudarme a depilarme un byte! Al principio no lo usé
toUpper
debido al costo de importación,Data.Char
pero olvidé que también proporciona un valorord
mucho más corto quefromEnum
EDIT 2: Gracias a @Laikoni por eliminar otros 6 bytes e identificar un error que ahora he solucionado. Usé 26 en lugar de 25 porque olvidé que las matrices de Haskell son inclusivas. Entonces noté que podía usar en
last
lugar dehead
lo que me permitiría usar en0:
lugar de++[0]
.EDITAR 3: Gracias de nuevo a Laikoni por esos 8 bytes. En realidad me había olvidado de ese espacio. Por alguna razón, Sublime Text se voltea sin él y olvidé eliminarlo. No sabía que se permitían listas de líneas, debería haber leído las reglas con más cuidado.
fuente
if i>p c then ' ' else c
se puede acortar alast$c:[' '|i>p c]
.[k |
y está permitido devolver una lista de líneas, por lo que no es necesariounlines
. Finalmente, puede interesarle nuestra sala de chat Haskell .Excel VBA, 110 bytes
Función de ventana inmediata anónima de VBE que toma la entrada como tipo esperado
Variant\String
del rango[A1]
y la usa para hacer que llueva el alfabeto en la ventana inmediata de VBE.Muestra de E / S
fuente
?A1:...
[]
indica que la cadena contenida se debe evaluar a un objeto en / on / as a workbook, la[A1]
llamada no puede reducirse aA1
, ya que esto no tomará e imprimirá la entrada inicial del rango[A1]
; más bien, esto dejará una línea vacía y se imprimirán todas las líneas posterioresPHP,
69 78 7785 + 1 bytesrequiere PHP <7. Ejecutar como tubería
-nR
o probarlo en línea .fuente
$c=A;!$c[1];$c++
. ¡Buena esa! Tristementeextraneous trailing newlines are not allowed (single \n on final line is acceptable)
. Por lo tanto, falla para todas las cadenas que no contienenz
.Bash + sed, 37
Pruébalo en línea .
fuente
C (gcc) , 189 bytes
Pruébalo en línea!
fuente
puts("");
lugar deputchar(10)
Ruby,
706774 bytesGracias a @TuukkaX por señalar que algunos parens podrían descartarse (-3 bytes)
Desafortunadamente, tuve que agregar 7 bytes porque la versión original no pudo manejar "z".
Llamándolo:
fuente
Oracle SQL, 186 bytes
Asume que la cadena estará en una tabla
t
en la columnav
:Violín de SQL
Configuración del esquema de Oracle 11g R2 :
Consulta 1 :
Resultados :
fuente
Jalea , 15 bytes
Pruébalo en línea!
fuente
Haskell , 98 bytes
Pruébalo en línea!
Ejemplo de uso:
f "[Abc]"
se obtiene una lista de líneas:["[Abc]"," bc "," c "]
. UsoputStr.unlines.f $ "[Abc]"
para salida impresa bonita:En parte inspirado porNow directamente basado en la respuesta Haskell del usuario 1472751 .Enfoque anterior (
10099 bytes)Pruébalo en línea!
fuente
PowerShell ,
122127 bytesPruébalo en línea!
Un pequeño agradecimiento a cómo PowerShell puede emitir dinámicamente entre
[char]
y[int]
, pero largo debido a la eliminación de espacios en blanco extraños y al cálculo de si se debe generar un espacio o el carácter.Bugfix gracias a beatcracker.
fuente
~|[abc<0>cba]|~
caso de prueba. Prueba esto:param($a)$a;(1..25|%{$i=$_;(-join([char[]]$a|%{(' ',$_)[$_-match'[a-z]'-and[math]::Max(0,($_-bor32)-96-$i)]})).TrimEnd()})-ne''
Java 8,
151147144143139 bytesExplicación:
Pruébalo aquí
fuente
q ,
4237 bytes-5 gracias a la calle!
antigua solución + explicación:
fuente
{(+)max[m]$(m:1+mod[.Q.a?(_)x]26)#'x}
para 37, no puedo recordar cómo lo resolví al crear la pregunta, ¡aunque probablemente sea muy similar!_
, escribílower
el intérprete q y obtuvek){$[~t&77h>t:abs@@x;.z.s'x;19<t;.z.s@. x;~t in 10 11h;'`type;_x]}
. por lo tanto, dar mi respuesta en q jajaSOGL V0.12 ,
1211 bytesPruébalo aquí!
Explicación:
fuente