Algunos esolangs bidimensionales, como Forked , y algunos no esolangs, como Python , a veces pueden requerir espacios antes de las líneas de código. Esto no es muy golfoso. Además, soy flojo y escribo un lenguaje 2D que necesita muchos espacios antes del código. Su tarea es escribir una herramienta que haga que estos idiomas sean más golfistas.
Por supuesto, esto no será perfecto; no se puede usar, por ejemplo, cuando un número es el primer carácter en una línea de origen. Sin embargo, generalmente será útil.
Desafío
Escribirás un programa o función que ...
- ... toma un argumento, un nombre de archivo o una cadena, o ...
- ... lee de la entrada estándar.
Su programa actuará como cat
, excepto:
- Si el primer carácter en cualquier línea es un número, su código imprimirá x espacios, donde x es ese número.
- De lo contrario, simplemente se imprimirá.
- Como lo hará cualquier otro personaje en la entrada.
Casos de prueba
Entrada:
foo bar foo bar
1foo bar foo bar foo bar
2foo bar foo bar foo bar foo bar
Salida:
foo bar foo bar
foo bar foo bar foo bar
foo bar foo bar foo bar foo bar
Entrada:
--------v
8|
8|
80
8,
7&
Salida:
--------v
|
|
0
,
&
Entrada:
foo bar
bar foo
foo bar
Salida:
foo bar
bar foo
foo bar
Entrada:
0123456789
1234567890
2345678901
3456789012
4567890123
Salida:
123456789
234567890
345678901
456789012
567890123
Reglas
- La salida debe ser exactamente como entrada, excepto para las líneas donde el primer carácter es un número.
- Su programa no puede agregar / anteponer nada al archivo, excepto una nueva línea final si lo desea.
- Su programa puede no hacer suposiciones sobre la entrada. Puede contener líneas vacías, sin números, caracteres Unicode, lo que sea.
- Si un número con más de un dígito comienza una línea (por ejemplo
523abcdefg
), solo el primer dígito (en el ejemplo, 5) debe convertirse en espacios.
Ganador
El código más corto en cada idioma gana. ¡Diviértete y buena suerte!
code-golf
number
whitespace
MD XF
fuente
fuente
Of course, this will not be perfect; it cannot be used, for instance, when a number is the first character on a line of source.
No es cierto, simplemente ponga el primer personaje en 0 (ejem, su último caso de prueba)Respuestas:
Retina , 9 bytes
Pruébalo en línea! Nota: espacio final en la última línea.
fuente
Cúbicamente , 69 bytes
Pruébalo en línea!
Explicación:
Primero hacemos esta inicialización:
Para configurar este cubo:
Lo más importante de este cubo es que las
5
sumas de la cara son 32, que es el valor requerido para imprimir espacios. Casualmente, también resulta ser bastante corto para todos los demás cálculos. Después de eso se hace:fuente
Casco ,
1513 bytes-2 bytes gracias a @Zgarb
Pruébalo en línea!
Utiliza la misma técnica que @Jonathan Allan
Explicación
fuente
Γ
.JavaScript (ES8),
3837 bytesNo creo que se pueda mejorar mucho más.Guardado 1 byte gracias a Shaggy : utilice las funciones de ES8.
fuente
padEnd
manera:s=>s.replace(/^\d/gm,m=>"".padEnd(m))
Python 2 ,
98746765 bytes-24 bytes gracias a Jonathan Allan. -7 bytes gracias al Sr. Xcoder.
Pruébalo en línea!
Toma entrada en el archivo nombrado
f
.fuente
open
; el código espera un archivo llamado 'f'. ¿Creo que está bien?' '*0
es Falsey. Sin[:1]
embargo, el uso sigue siendo un ahorro. Noread
creo que sea necesario (y lo seríareadlines
) ya que el comportamiento predeterminado deopen
es iterar a través de las líneas. Además, no hay necesidad del modo ya que'r'
es el predeterminado. Si estoy en lo cierto, ¡son 73 !rubí ,
2421 + 1 =2522 bytesUtiliza el
-p
bandera. -3 bytes de GB.Pruébalo en línea!
fuente
%p
al final en lugar de%""
. ¡Gracias por tu ayuda!05AB1E , 10 bytes
Pruébalo en línea!
fuente
|vy¬dićú},
Funciona para 10 bytes.|
funciona. Se supone que debe hacerlopush the rest of input as an array with strings
, pero se detiene en líneas vacías ( TIO ). Mencioné esto en la sala de chat 05AB1E si quieres saber más.Python 3 , 95 bytes
Pruébalo en línea!
-4 bytes al robar la idea regex de ThePirateBay
fuente
Jalea , 19 bytes
Un enlace monádico que toma y devuelve listas de caracteres, o un programa completo que imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
beheaded line
¿Es ese el término real? xDPerl 5 , 13 + 1 (-p) = 14 bytes
Pruébalo en línea!
fuente
Haskell , 63 bytes
Pruébalo en línea! La primera línea es una función anónima que divide una cadena dada en líneas, aplica la función
g
a cada línea y une las líneas resultantes con nuevas líneas. Eng
ella se verifica si el primer carácterx
de una línea es un dígito. Si este es el caso,['1'..x]
produce una cadena con una longitud igual al valor del dígitox
y' '<$
convierte la cadena en tantos espacios. Finalmenter
se agrega el resto de la línea . Six
no es un dígito, estamos en la segunda ecuacióng s=s
y devolvemos la línea sin modificar.fuente
Python 2 ,
76 7268 bytes-4 bytes gracias a @ovs !
@DeadPossum sugirió cambiar a Python 2, que también ahorró 4 bytes.
Solo pensé que es bueno tener un programa completo competitivo en Python 2 que no verifique explícitamente si el primer carácter es un dígito. Esto lee la entrada desde un archivo,
f
.Pruébalo en línea! (cortesía de @ovs )
fuente
print
le dará 68 bytesJava 8 ,
105999793 bytesAhorré algunos bytes más gracias a la sugerencia de Nevay,
fuente
s->{int i=s.charAt(0);if(i>47&i<58)for(s=s.substring(1);i-->48;s=" "+s);System.out.print(s);}
(93 bytes).R ,
138128 bytes-9 bytes gracias a CriminallyVulgar
Esto es bastante malo, pero ahora es un poco mejor ... R es, una vez más, terrible en las cuerdas.
Pruébalo en línea!
fuente
Japt (v2.0a0),
1110 bytes¿Japt venció a Jelly y 05AB1E? Eso no parece correcto!
Pruébalo
Explicación
Entrada implícita de cadena
U
Use Regex replace (
r
) todas las apariciones de un dígito al comienzo de una línea (m
es la bandera multilínea; lag
bandera está habilitada de forma predeterminada en Japt).Pase cada partido a través de una función, donde
Z
está el elemento actual.El operador de incremento de postfix (
++
). Esto se convierteZ
en un entero sin aumentarlo para la siguiente operación.Repetir un espacio de caracteres
Z
veces.Salida implícita de la cadena resultante.
fuente
m@
puede acortar?m
aquí es la bandera de varias líneas de la expresión regular, no el método de mapa.r/^\d/m_î
(or/^\d/m_ç
) sería 2 bytes más corto peroZ
es una cadena así que, desafortunadamente, no funcionaría.r/^\d/m_°ç
, Para un ahorro de 1 byte, hace el trabajo, aunque :)°ç
es un truco increíble :-) Hubiera sugerido solo\d
para la expresión regular, pero eso deja fuera la bandera ... tal vez debería agregar soporte para banderas en expresiones regulares de una sola clase, como\dm
(oh sí, y eso^
también deja fuera la bandera) ...)/
opcional en RegExes?Jalea , 19 bytes
Pruébalo en línea!
-5 bytes en total gracias a los comentarios de Jonathan Allan y al mirar su publicación
Explicación
fuente
Ḣ⁶ẋ;
;0Ḣ
funcionaría para un byte, tal vez haya un solo átomo, también lo intenté¹
, no hay alegría allíḣ1ẇØD
funciona para el mismo bytecount \ o /ṚṪ
funcionará :)Pyth ,
1615 bytesPruébalo en línea!
Explicación
Tomemos un ejemplo que debería ser más fácil de procesar. Digamos que nuestra entrada es:
El programa anterior hará lo siguiente:
.z
- Lo lee todo y lo divide por nuevas líneas, así que lo tenemos['foo bar foo bar', '1foo bar foo bar foo bar', '2foo bar foo bar foo bar foo bar']
.Obtenemos el primer carácter de cada uno:
['f', '1', '2']
.Si es convertible a un entero, repetimos un espacio que es entero y suma el resto de la cadena. De lo contrario, simplemente colocamos toda la cadena. Por lo tanto, tenemos
['foo bar foo bar', ' foo bar foo bar foo bar', ' foo bar foo bar foo bar foo bar']
.Finalmente, nos unimos por nuevas líneas, por lo que nuestro resultado es:
fuente
Cúbicamente , 82 bytes
Nota: Esto no funcionará en TIO . Para probar esto, use el intérprete de Lua con el indicador experimental establecido en verdadero (para habilitar condicionales). Actualmente hay un error con bloques condicionales en el intérprete TIO. Cuando use el intérprete TIO, debe reemplazar
?6!
con!6
y&6
con?6&
, lo que mantiene el recuento de bytes igual.Esto no es tan corto como la otra respuesta cúbica, pero pensé en intentarlo de todos modos: D
fuente
)
salta al más reciente en(
lugar del correspondiente, creo. EDITAR: estoy en el chat.> <> , 60 bytes
Pruébalo en línea!
Cómo funciona:
fuente
V , 9 bytes
Pruébalo en línea!
Explicación
fuente
Gema, 21 personajes
Ejecución de muestra:
fuente
PHP, 83 caracteres
fuente
$s
argumento o completarlo con la entrada. Y no imprime nadaargv
aceptable?argv
es la línea de comando args, entonces sí.